Commit Graph
8 Commits
Author SHA1 Message Date
Jinwoo-H fdbb980e0e fix: deduplicate native APNs and background socket notifications 2026-09-06 23:01:19 -04:00
Jinwoo-H 07058a4752 fix: accept variable-length APNs device tokens 2026-09-06 22:14:27 -04:00
Jinwoo-H 11cc73215a feat: align mobile notification preferences with desktop delivery 2026-09-06 21:55:14 -04:00
Jinwoo-H b71ffe09fe fix: harden mobile push delivery and deployment recovery 2026-09-06 18:42:05 -04:00
Jinwoo-H 9c918fc270 docs(push): record the ip buckets, session and host retention, and the token-ownership limit (#8129) 2026-09-06 15:19:22 -04:00
Jinwoo-H ba8ca6dc6b fix(push): key the unauthenticated rate limit on the hop Cloud Run wrote (#8129)
Cloud Run appends the connecting peer to x-forwarded-for; the limiter read
the left-most value, which the caller controls, so a forged first hop earned
a fresh bucket per request.
2026-09-06 15:19:21 -04:00
Jinwoo-H d12790c9b6 fix(push): close review findings in the gateway (#8129)
- Quota reservation takes a per-host advisory lock; READ COMMITTED admitted
  a whole burst past the cap (80/80 without, 60/80 with, against Postgres 16).
- Challenge issuance no longer writes push_hosts; the row lands on proof
  verification. Stale hosts prune after 30 days. Per-IP token bucket on the
  two unauthenticated routes.
- Streaming body limit via hono bodyLimit; a chunked body bypassed the
  Content-Length check.
- registrationIds deduped in the schema; per-host device cap of 64; list
  bounded to its schema.
- Gateway-side challenge TTL is the specified 10 s, not 40 s.
- APNs stream settles on close as well as end/error.
2026-09-06 15:19:20 -04:00
Jinwoo-H 4c517f831a docs: check in the mobile push contract (#8129)
Seven committed files cite it as the source of truth for every wire shape;
docs/reference is allowlisted per file, so add the entry.
2026-09-06 15:19:19 -04:00