{"_id":"@absolutejs/dispatch-push-postgres","_rev":"2-ec72c7b2d31b26811181bb5ebdca5096","name":"@absolutejs/dispatch-push-postgres","dist-tags":{"latest":"0.2.0"},"versions":{"0.1.0":{"name":"@absolutejs/dispatch-push-postgres","version":"0.1.0","keywords":["dispatch","push","postgres","devices","idempotency","absolutejs"],"author":{"name":"Alex Kahn"},"license":"Apache-2.0","_id":"@absolutejs/dispatch-push-postgres@0.1.0","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"homepage":"https://github.com/absolutejs/dispatch-adapters/tree/main/push-postgres","bugs":{"url":"https://github.com/absolutejs/dispatch-adapters/issues"},"dist":{"shasum":"e5e69ef2f6313a17632e134605c59aaf9899429e","tarball":"https://registry.npmjs.org/@absolutejs/dispatch-push-postgres/-/dispatch-push-postgres-0.1.0.tgz","fileCount":12,"integrity":"sha512-jyKzc3zdwVhNGZ4TnbyMUsTD62eJh0F7N9L00t+ea21JeMi4ppp0U1DmnMGCZe5AnVfBnyk4/ftBXeBBUj4yzw==","signatures":[{"sig":"MEUCIQCU+0uUJYvCVGVPu+i2o8DRZinbBctSjGpEUh881eoRFgIgFCfq5UrnPCXUDSVaaDhHl10TetAGGSkfwZtAOiHAoFg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":44253},"main":"./dist/index.js","type":"module","types":"./dist/index.d.ts","module":"./dist/index.js","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./manifest":{"types":"./dist/manifest.d.ts","import":"./dist/manifest.js","default":"./dist/manifest.js"},"./manifest.json":"./dist/manifest.json"},"gitHead":"c7ced4f2c36deff0db92b72ef5bf86ca98aa004d","scripts":{"test":"bun test","build":"rm -rf dist && bun build src/index.ts src/manifest.ts --outdir dist --sourcemap --target=bun --external @absolutejs/dispatch --external '@absolutejs/dispatch/*' --external @absolutejs/manifest --external @absolutejs/reliability --external @sinclair/typebox && tsc --project tsconfig.build.json && absolute-manifest emit","format":"prettier --write \"./**/*.{ts,json,md}\"","release":"bun run check:package && npm publish --access public","typecheck":"tsc --noEmit","check:package":"bun run format && bun run typecheck && bun run test && bun run verify-package && bun run build && bun run verify-package --artifacts","verify-package":"absolute-manifest verify-package"},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"absolutejs":{"runtimePeers":{"@absolutejs/dispatch":{"range":">=0.7.0 <0.8","tested":"0.7.1","optional":false,"buildExternals":["@absolutejs/dispatch","@absolutejs/dispatch/*"],"artifactImports":[]}},"manifestContract":2},"repository":{"url":"git+https://github.com/absolutejs/dispatch-adapters.git","type":"git","directory":"push-postgres"},"_npmVersion":"10.9.2","description":"Durable PostgreSQL device registry and fenced fanout claims for @absolutejs/dispatch push lifecycle.","directories":{},"_nodeVersion":"22.14.0","dependencies":{"@sinclair/typebox":"^0.34.0","@absolutejs/manifest":"0.8.0","@absolutejs/reliability":"0.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"prettier":"3.8.1","@types/bun":"1.3.14","typescript":"5.9.3","@absolutejs/dispatch":"0.7.1"},"peerDependencies":{"@absolutejs/dispatch":">=0.7.0 <0.8"},"_npmOperationalInternal":{"tmp":"tmp/dispatch-push-postgres_0.1.0_1785618476758_0.03920362810737177","host":"s3://npm-registry-packages-npm-production"}},"0.2.0":{"name":"@absolutejs/dispatch-push-postgres","version":"0.2.0","description":"Durable PostgreSQL device registry and fenced fanout claims for @absolutejs/dispatch push lifecycle.","repository":{"type":"git","url":"git+https://github.com/absolutejs/dispatch-adapters.git","directory":"push-postgres"},"homepage":"https://github.com/absolutejs/dispatch-adapters/tree/main/push-postgres","bugs":{"url":"https://github.com/absolutejs/dispatch-adapters/issues"},"main":"./dist/index.js","module":"./dist/index.js","types":"./dist/index.d.ts","type":"module","license":"Apache-2.0","author":{"name":"Alex Kahn"},"publishConfig":{"access":"public"},"keywords":["dispatch","push","postgres","devices","idempotency","absolutejs"],"scripts":{"build":"rm -rf dist && bun build src/index.ts src/manifest.ts --outdir dist --sourcemap --target=bun --external @absolutejs/dispatch --external '@absolutejs/dispatch/*' --external @absolutejs/manifest --external @absolutejs/reliability --external @sinclair/typebox && tsc --project tsconfig.build.json && absolute-manifest emit","test":"bun test","typecheck":"tsc --noEmit","format":"prettier --write \"./**/*.{ts,json,md}\"","verify-package":"absolute-manifest verify-package","check:package":"bun run format && bun run typecheck && bun run test && bun run verify-package && bun run build","release":"bun run check:package && npm publish --access public"},"peerDependencies":{"@absolutejs/dispatch":">=0.9.0 <0.10"},"dependencies":{"@absolutejs/manifest":"0.9.0","@absolutejs/reliability":"0.1.0","@sinclair/typebox":"^0.34.0"},"devDependencies":{"@absolutejs/dispatch":"0.9.0","@types/bun":"1.3.14","prettier":"3.8.1","typescript":"5.9.3"},"exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.js","default":"./dist/index.js"},"./manifest":{"types":"./dist/manifest.d.ts","import":"./dist/manifest.js","default":"./dist/manifest.js"},"./manifest.json":"./dist/manifest.json"},"absolutejs":{"manifestContract":2},"_id":"@absolutejs/dispatch-push-postgres@0.2.0","gitHead":"ed0c6df97dc9f8abb3845b1e6c2b49f241a41af6","_nodeVersion":"22.14.0","_npmVersion":"10.9.2","dist":{"integrity":"sha512-iA4cpuWjLJZab4/K13d/WPJhjUvcYNFW0JBxLelafOqGpftFwafa6ALpx1u0pDHR4EoDshHKelfBiNxTPZCrHw==","shasum":"485f06624d5011343b53837022afdfee412d192e","tarball":"https://registry.npmjs.org/@absolutejs/dispatch-push-postgres/-/dispatch-push-postgres-0.2.0.tgz","fileCount":12,"unpackedSize":54953,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIEr6XIULNmG7GXyMEo/s4XiqdZ/u1o2bujVoK9/qM3rnAiEAsl4Ce0fzYkEQ5kFavKQB9jiDTgkjfEi6z7oHbAnKmvQ="}]},"_npmUser":{"name":"alexkahndev","email":"alexkahn2019@gmail.com"},"directories":{},"maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/dispatch-push-postgres_0.2.0_1787793089173_0.5812859752702082"},"_hasShrinkwrap":false}},"time":{"created":"2026-08-01T21:07:56.606Z","modified":"2026-08-27T01:11:29.535Z","0.1.0":"2026-08-01T21:07:56.923Z","0.2.0":"2026-08-27T01:11:29.369Z"},"bugs":{"url":"https://github.com/absolutejs/dispatch-adapters/issues"},"author":{"name":"Alex Kahn"},"license":"Apache-2.0","homepage":"https://github.com/absolutejs/dispatch-adapters/tree/main/push-postgres","keywords":["dispatch","push","postgres","devices","idempotency","absolutejs"],"repository":{"type":"git","url":"git+https://github.com/absolutejs/dispatch-adapters.git","directory":"push-postgres"},"description":"Durable PostgreSQL device registry and fenced fanout claims for @absolutejs/dispatch push lifecycle.","maintainers":[{"name":"alexkahndev","email":"alexkahn2019@gmail.com"}],"readme":"# @absolutejs/dispatch-push-postgres\n\nProduction persistence for the provider-neutral push lifecycle in `@absolutejs/dispatch`.\n\nThe store supports APNs, FCM, and structured Web Push subscriptions. Its schema\nis additive: applying the current schema upgrades existing native-only tables,\nbackfills their credential identity, and keeps native token rows intact.\n\nIt stores tenant-isolated device registrations, user/device/topic targeting state, invalid-token retirement, and fenced idempotent fanout claims. Apply both exported schemas, then compose the stores with `createPushLifecycle`.\n\n```ts\nimport { createPushLifecycle } from \"@absolutejs/dispatch\";\nimport {\n  createPostgresPushSubscriptionStore,\n  createPostgresPushFanoutClaimStore,\n} from \"@absolutejs/dispatch-push-postgres\";\nimport {\n  createPostgresIdempotentOperationStore,\n  createPostgresTransactionRunner,\n} from \"@absolutejs/reliability\";\n\nconst runner = createPostgresTransactionRunner(pool);\nconst lifecycle = createPushLifecycle({\n  adapterFor: ({ platform, tenant }) => resolveTenantAdapter(tenant, platform),\n  claimStore: createPostgresPushFanoutClaimStore(\n    createPostgresIdempotentOperationStore(runner),\n  ),\n  store: createPostgresPushSubscriptionStore(runner),\n});\n```\n\nRegistration is atomic across a stable `(tenant, platform, deviceId)` identity\nand provider credential (native token or Web Push endpoint). Credential rotation\nretains the subscription identity and removes superseded records inside the same\nfenced transaction.\n","readmeFilename":"README.md"}