From f0703f7b67d6756cad9819e7e0ef21a5e25b4305 Mon Sep 17 00:00:00 2001 From: hyochan Date: Wed, 9 Sep 2026 08:07:29 +0900 Subject: [PATCH 01/19] feat: complete commerce implementation guide Connect the guided documentation to the runnable example and IAPKit. Add four-store ownership and erasure handling, reproducible provider replacement evidence, and static discovery with consistent navigation and transitions. --- .github/ISSUE_TEMPLATE/commerce_protocol.yml | 54 + .github/workflows/ci.yml | 4 + CONTRIBUTING.md | 6 + knowledge/_agent-context/context.md | 44 +- knowledge/internal/05-docs-patterns.md | 42 + packages/docs/CONVENTION.md | 8 + packages/docs/index.html | 57 +- packages/docs/package.json | 3 +- .../public/commerce-composition/README.md | 95 + .../commerce-composition/iapkit-run.json | 1149 +++++++++ .../iapkit-source-manifest.json | 37 + .../commerce-composition/iapkit-source.json | 37 + .../docs/public/commerce-composition/run.json | 455 ++++ .../public/commerce-composition/source.json | 6 + .../public/commerce-composition/source.tar.gz | Bin 0 -> 55112 bytes .../attempt-1.txt | 20 + .../changes.patch | 150 ++ .../mobile.png | Bin 0 -> 126051 bytes .../run.json | 911 +++++++ .../screen.png | Bin 0 -> 130464 bytes .../source.tar.gz | Bin 0 -> 52642 bytes .../attempt-1.txt | 20 + .../changes.patch | 27 + .../mobile.png | Bin 0 -> 126051 bytes .../run.json | 911 +++++++ .../screen.png | Bin 0 -> 130464 bytes .../source.tar.gz | Bin 0 -> 52646 bytes .../attempt-1.txt | 20 + .../changes.patch | 639 +++++ .../mobile.png | Bin 0 -> 126051 bytes .../run.json | 966 +++++++ .../screen.png | Bin 0 -> 130464 bytes .../source.tar.gz | Bin 0 -> 54372 bytes .../attempt-1.txt | 20 + .../changes.patch | 29 + .../mobile.png | Bin 0 -> 126051 bytes .../run.json | 966 +++++++ .../screen.png | Bin 0 -> 130464 bytes .../source.tar.gz | Bin 0 -> 54380 bytes .../attempt-1.txt | 20 + .../changes.patch | 100 + .../mobile.png | Bin 0 -> 126051 bytes .../run.json | 982 +++++++ .../screen.png | Bin 0 -> 130464 bytes .../source.tar.gz | Bin 0 -> 54644 bytes .../attempt-1.txt | 20 + .../changes.patch | 341 +++ .../mobile.png | Bin 0 -> 126051 bytes .../07-account-erasure-interoperable/run.json | 911 +++++++ .../screen.png | Bin 0 -> 130464 bytes .../source.tar.gz | Bin 0 -> 52317 bytes .../07-account-erasure-reviewed/attempt-1.txt | 20 + .../07-account-erasure-reviewed/changes.patch | 29 + .../07-account-erasure-reviewed/mobile.png | Bin 0 -> 126051 bytes .../07-account-erasure-reviewed/run.json | 910 +++++++ .../07-account-erasure-reviewed/screen.png | Bin 0 -> 130464 bytes .../07-account-erasure-reviewed/source.tar.gz | Bin 0 -> 50838 bytes .../07-account-erasure/attempt-1.txt | 20 + .../07-account-erasure/changes.patch | 2296 +++++++++++++++++ .../07-account-erasure/mobile.png | Bin 0 -> 124823 bytes .../07-account-erasure/run.json | 910 +++++++ .../07-account-erasure/screen.png | Bin 0 -> 129885 bytes .../07-account-erasure/source.tar.gz | Bin 0 -> 50833 bytes .../docs/public/commerce-example/README.md | 9 +- .../ai-reproduction-source.tar.gz | Bin 0 -> 1521914 bytes .../commerce-example/ai-reproduction.json | 976 +++++++ .../commerce-example/ai-reproduction.md | 86 + .../public/commerce-example/build-brief.md | 45 +- .../public/commerce-example/consumer-run.json | 64 +- .../commerce-example/integration-brief.md | 57 +- .../docs/public/commerce-example/run.json | 194 +- .../public/commerce-example/source.tar.gz | Bin 34042 -> 54644 bytes .../public/commerce-example/verification.json | 238 +- .../commerce-source/example/README.md.html | 1 + .../example/client-bridge.mjs.html | 1 + .../example/composition/app-backend.mjs.html | 1 + .../composition/commerce-client.mjs.html | 1 + .../commerce-source/example/consumer.mjs.html | 1 + .../commerce-source/example/contract.mjs.html | 1 + .../commerce-source/example/erasure.mjs.html | 1 + .../commerce-source/example/provider.mjs.html | 1 + .../commerce-source/example/scenario.mjs.html | 1 + .../example/verify-erasure.mjs.html | 1 + .../example/verify-stores.mjs.html | 1 + .../commerce-source/example/verify.mjs.html | 1 + .../commerce-source/example/webhooks.mjs.html | 1 + .../kit/convex/commerce/capabilities.ts.html | 1 + .../kit/convex/commerce/delivery.test.ts.html | 1 + .../kit/convex/commerce/delivery.ts.html | 1 + .../commerce/spec.conformance.test.ts.html | 1 + .../kit/convex/purchases/action.ts.html | 1 + .../kit/convex/purchases/mutation.ts.html | 1 + .../convex/purchases/ownership.test.ts.html | 1 + .../subscriptions/internal.test.ts.html | 1 + .../kit/convex/subscriptions/internal.ts.html | 1 + .../subscriptions/mutation.test.ts.html | 1 + .../kit/convex/subscriptions/mutation.ts.html | 1 + .../convex/subscriptions/query.test.ts.html | 1 + .../kit/convex/subscriptions/query.ts.html | 1 + .../docs/commerce-interop-fixture.ts.html | 1 + .../docs/commerce-source-snapshot.mjs.html | 1 + .../docs/commerce-store-coverage.mjs.html | 1 + .../docs/run-commerce-interop.mjs.html | 1 + .../api/commerce/conformance.test.ts.html | 1 + .../kit/server/api/commerce/graphql.ts.html | 1 + .../kit/server/api/commerce/handlers.ts.html | 1 + .../server/api/commerce/routes.test.ts.html | 1 + .../kit/server/api/commerce/routes.ts.html | 1 + packages/docs/public/llms-full.txt | 37 +- packages/docs/public/llms.txt | 53 +- packages/docs/public/robots.txt | 17 +- packages/docs/public/sitemap.xml | 256 -- .../scripts/check-commerce-composition.mjs | 104 + packages/docs/scripts/prerender.mjs | 198 ++ packages/docs/scripts/prerender.test.mjs | 135 + packages/docs/src/App.tsx | 2 + packages/docs/src/components/AnchorLink.tsx | 2 +- .../components/CommerceArchitectureModal.tsx | 142 + .../components/CommerceBuildWalkthrough.tsx | 147 +- .../docs/src/components/CommerceEcosystem.tsx | 2 +- .../CommerceImplementationComparison.tsx | 76 + .../components/CommerceProtocolDiagram.tsx | 107 +- .../components/CommercePurchaseJourney.tsx | 456 ++++ packages/docs/src/components/DocsShell.tsx | 66 +- packages/docs/src/components/MenuDropdown.tsx | 51 +- packages/docs/src/components/SEO.tsx | 89 +- packages/docs/src/entry-server.tsx | 13 + .../docs/src/hooks/useDetailsTransition.ts | 119 + packages/docs/src/hooks/useScrollToHash.ts | 22 +- packages/docs/src/lib/commerceEcosystem.ts | 6 + .../docs/src/lib/commerceImplementations.ts | 359 +++ packages/docs/src/lib/searchData.ts | 8 +- packages/docs/src/lib/signals.ts | 37 + packages/docs/src/main.tsx | 3 + packages/docs/src/pages/404.tsx | 1 + .../CommerceCompositionProof.tsx | 273 ++ .../commerce-protocol/authentication.tsx | 77 +- .../pages/commerce-protocol/capabilities.tsx | 96 +- .../pages/commerce-protocol/conformance.tsx | 112 +- .../src/pages/commerce-protocol/ecosystem.tsx | 113 +- .../commerce-protocol/getting-started.tsx | 575 ++--- .../src/pages/commerce-protocol/graphql.tsx | 20 +- .../commerce-protocol/implementation.tsx | 397 +-- .../src/pages/commerce-protocol/index.tsx | 119 +- .../pages/commerce-protocol/operations.tsx | 195 +- .../src/pages/commerce-protocol/overview.tsx | 83 +- .../src/pages/commerce-protocol/profiles.tsx | 191 +- .../docs/src/pages/commerce-protocol/rest.tsx | 14 +- .../pages/commerce-protocol/versioning.tsx | 11 + .../src/pages/commerce-protocol/webhooks.tsx | 28 +- .../pages/commerce-protocol/whitepaper.tsx | 2 +- .../docs/src/pages/docs/examples/android.tsx | 2 +- .../docs/src/pages/docs/examples/fireos.tsx | 2 +- .../docs/src/pages/docs/examples/horizon.tsx | 2 +- packages/docs/src/pages/docs/examples/ios.tsx | 2 +- .../src/pages/docs/foundation/governance.tsx | 27 + .../src/pages/docs/guides/ai-assistants.tsx | 414 +-- packages/docs/src/pages/docs/setup/index.tsx | 6 +- packages/docs/src/pages/languages.tsx | 8 +- packages/docs/src/pages/showcase.tsx | 2 +- .../docs/src/styles/commerce-protocol.css | 552 +++- packages/docs/src/styles/documentation.css | 38 +- packages/docs/src/styles/home.css | 1 + packages/docs/vercel.json | 8 + packages/docs/vite.config.ts | 12 +- packages/kit/COMMERCE-EVENTS.md | 19 + packages/kit/convex/purchases/action.ts | 65 +- .../purchases/amazon-reconciliation.test.ts | 16 + packages/kit/convex/purchases/amazon.ts | 209 +- packages/kit/convex/purchases/horizon.ts | 182 +- packages/kit/convex/purchases/identity.ts | 15 + packages/kit/convex/purchases/internal.ts | 41 +- packages/kit/convex/purchases/mutation.ts | 53 +- .../kit/convex/purchases/ownership.test.ts | 235 ++ .../save-purchase-idempotency.test.ts | 47 +- packages/kit/convex/schema.ts | 4 + packages/kit/convex/subscriptions/erasure.ts | 23 + .../kit/convex/subscriptions/internal.test.ts | 319 +++ packages/kit/convex/subscriptions/internal.ts | 90 +- .../convex/subscriptions/user-erasure.test.ts | 18 + .../scripts/docs/commerce-interop-fixture.ts | 132 + packages/kit/scripts/docs/commerce-interop.md | 75 + .../scripts/docs/commerce-source-snapshot.mjs | 61 + .../docs/commerce-source-snapshot.test.mjs | 140 + .../scripts/docs/commerce-store-coverage.mjs | 277 ++ .../scripts/docs/export-commerce-interop.mjs | 98 + .../kit/scripts/docs/run-commerce-interop.mjs | 872 +++++++ .../server/api/commerce/conformance.test.ts | 11 + packages/kit/server/api/commerce/handlers.ts | 41 +- .../kit/server/api/commerce/routes.test.ts | 86 +- scripts/agent/compile-context.ts | 58 +- scripts/agent/tests/llms-content.test.ts | 25 + scripts/e2e-web-sites.mjs | 179 +- specs/commerce-protocol/CONVENTION.md | 22 + 194 files changed, 22133 insertions(+), 2109 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/commerce_protocol.yml create mode 100644 packages/docs/public/commerce-composition/README.md create mode 100644 packages/docs/public/commerce-composition/iapkit-run.json create mode 100644 packages/docs/public/commerce-composition/iapkit-source-manifest.json create mode 100644 packages/docs/public/commerce-composition/iapkit-source.json create mode 100644 packages/docs/public/commerce-composition/run.json create mode 100644 packages/docs/public/commerce-composition/source.json create mode 100644 packages/docs/public/commerce-composition/source.tar.gz create mode 100644 packages/docs/public/commerce-example/07-account-erasure-interoperable-2/attempt-1.txt create mode 100644 packages/docs/public/commerce-example/07-account-erasure-interoperable-2/changes.patch create mode 100644 packages/docs/public/commerce-example/07-account-erasure-interoperable-2/mobile.png create mode 100644 packages/docs/public/commerce-example/07-account-erasure-interoperable-2/run.json create mode 100644 packages/docs/public/commerce-example/07-account-erasure-interoperable-2/screen.png create mode 100644 packages/docs/public/commerce-example/07-account-erasure-interoperable-2/source.tar.gz create mode 100644 packages/docs/public/commerce-example/07-account-erasure-interoperable-3/attempt-1.txt create mode 100644 packages/docs/public/commerce-example/07-account-erasure-interoperable-3/changes.patch create mode 100644 packages/docs/public/commerce-example/07-account-erasure-interoperable-3/mobile.png create mode 100644 packages/docs/public/commerce-example/07-account-erasure-interoperable-3/run.json create mode 100644 packages/docs/public/commerce-example/07-account-erasure-interoperable-3/screen.png create mode 100644 packages/docs/public/commerce-example/07-account-erasure-interoperable-3/source.tar.gz create mode 100644 packages/docs/public/commerce-example/07-account-erasure-interoperable-4/attempt-1.txt create mode 100644 packages/docs/public/commerce-example/07-account-erasure-interoperable-4/changes.patch create mode 100644 packages/docs/public/commerce-example/07-account-erasure-interoperable-4/mobile.png create mode 100644 packages/docs/public/commerce-example/07-account-erasure-interoperable-4/run.json create mode 100644 packages/docs/public/commerce-example/07-account-erasure-interoperable-4/screen.png create mode 100644 packages/docs/public/commerce-example/07-account-erasure-interoperable-4/source.tar.gz create mode 100644 packages/docs/public/commerce-example/07-account-erasure-interoperable-5/attempt-1.txt create mode 100644 packages/docs/public/commerce-example/07-account-erasure-interoperable-5/changes.patch create mode 100644 packages/docs/public/commerce-example/07-account-erasure-interoperable-5/mobile.png create mode 100644 packages/docs/public/commerce-example/07-account-erasure-interoperable-5/run.json create mode 100644 packages/docs/public/commerce-example/07-account-erasure-interoperable-5/screen.png create mode 100644 packages/docs/public/commerce-example/07-account-erasure-interoperable-5/source.tar.gz create mode 100644 packages/docs/public/commerce-example/07-account-erasure-interoperable-6/attempt-1.txt create mode 100644 packages/docs/public/commerce-example/07-account-erasure-interoperable-6/changes.patch create mode 100644 packages/docs/public/commerce-example/07-account-erasure-interoperable-6/mobile.png create mode 100644 packages/docs/public/commerce-example/07-account-erasure-interoperable-6/run.json create mode 100644 packages/docs/public/commerce-example/07-account-erasure-interoperable-6/screen.png create mode 100644 packages/docs/public/commerce-example/07-account-erasure-interoperable-6/source.tar.gz create mode 100644 packages/docs/public/commerce-example/07-account-erasure-interoperable/attempt-1.txt create mode 100644 packages/docs/public/commerce-example/07-account-erasure-interoperable/changes.patch create mode 100644 packages/docs/public/commerce-example/07-account-erasure-interoperable/mobile.png create mode 100644 packages/docs/public/commerce-example/07-account-erasure-interoperable/run.json create mode 100644 packages/docs/public/commerce-example/07-account-erasure-interoperable/screen.png create mode 100644 packages/docs/public/commerce-example/07-account-erasure-interoperable/source.tar.gz create mode 100644 packages/docs/public/commerce-example/07-account-erasure-reviewed/attempt-1.txt create mode 100644 packages/docs/public/commerce-example/07-account-erasure-reviewed/changes.patch create mode 100644 packages/docs/public/commerce-example/07-account-erasure-reviewed/mobile.png create mode 100644 packages/docs/public/commerce-example/07-account-erasure-reviewed/run.json create mode 100644 packages/docs/public/commerce-example/07-account-erasure-reviewed/screen.png create mode 100644 packages/docs/public/commerce-example/07-account-erasure-reviewed/source.tar.gz create mode 100644 packages/docs/public/commerce-example/07-account-erasure/attempt-1.txt create mode 100644 packages/docs/public/commerce-example/07-account-erasure/changes.patch create mode 100644 packages/docs/public/commerce-example/07-account-erasure/mobile.png create mode 100644 packages/docs/public/commerce-example/07-account-erasure/run.json create mode 100644 packages/docs/public/commerce-example/07-account-erasure/screen.png create mode 100644 packages/docs/public/commerce-example/07-account-erasure/source.tar.gz create mode 100644 packages/docs/public/commerce-example/ai-reproduction-source.tar.gz create mode 100644 packages/docs/public/commerce-example/ai-reproduction.json create mode 100644 packages/docs/public/commerce-example/ai-reproduction.md create mode 100644 packages/docs/public/commerce-source/example/README.md.html create mode 100644 packages/docs/public/commerce-source/example/client-bridge.mjs.html create mode 100644 packages/docs/public/commerce-source/example/composition/app-backend.mjs.html create mode 100644 packages/docs/public/commerce-source/example/composition/commerce-client.mjs.html create mode 100644 packages/docs/public/commerce-source/example/consumer.mjs.html create mode 100644 packages/docs/public/commerce-source/example/contract.mjs.html create mode 100644 packages/docs/public/commerce-source/example/erasure.mjs.html create mode 100644 packages/docs/public/commerce-source/example/provider.mjs.html create mode 100644 packages/docs/public/commerce-source/example/scenario.mjs.html create mode 100644 packages/docs/public/commerce-source/example/verify-erasure.mjs.html create mode 100644 packages/docs/public/commerce-source/example/verify-stores.mjs.html create mode 100644 packages/docs/public/commerce-source/example/verify.mjs.html create mode 100644 packages/docs/public/commerce-source/example/webhooks.mjs.html create mode 100644 packages/docs/public/commerce-source/kit/convex/commerce/capabilities.ts.html create mode 100644 packages/docs/public/commerce-source/kit/convex/commerce/delivery.test.ts.html create mode 100644 packages/docs/public/commerce-source/kit/convex/commerce/delivery.ts.html create mode 100644 packages/docs/public/commerce-source/kit/convex/commerce/spec.conformance.test.ts.html create mode 100644 packages/docs/public/commerce-source/kit/convex/purchases/action.ts.html create mode 100644 packages/docs/public/commerce-source/kit/convex/purchases/mutation.ts.html create mode 100644 packages/docs/public/commerce-source/kit/convex/purchases/ownership.test.ts.html create mode 100644 packages/docs/public/commerce-source/kit/convex/subscriptions/internal.test.ts.html create mode 100644 packages/docs/public/commerce-source/kit/convex/subscriptions/internal.ts.html create mode 100644 packages/docs/public/commerce-source/kit/convex/subscriptions/mutation.test.ts.html create mode 100644 packages/docs/public/commerce-source/kit/convex/subscriptions/mutation.ts.html create mode 100644 packages/docs/public/commerce-source/kit/convex/subscriptions/query.test.ts.html create mode 100644 packages/docs/public/commerce-source/kit/convex/subscriptions/query.ts.html create mode 100644 packages/docs/public/commerce-source/kit/scripts/docs/commerce-interop-fixture.ts.html create mode 100644 packages/docs/public/commerce-source/kit/scripts/docs/commerce-source-snapshot.mjs.html create mode 100644 packages/docs/public/commerce-source/kit/scripts/docs/commerce-store-coverage.mjs.html create mode 100644 packages/docs/public/commerce-source/kit/scripts/docs/run-commerce-interop.mjs.html create mode 100644 packages/docs/public/commerce-source/kit/server/api/commerce/conformance.test.ts.html create mode 100644 packages/docs/public/commerce-source/kit/server/api/commerce/graphql.ts.html create mode 100644 packages/docs/public/commerce-source/kit/server/api/commerce/handlers.ts.html create mode 100644 packages/docs/public/commerce-source/kit/server/api/commerce/routes.test.ts.html create mode 100644 packages/docs/public/commerce-source/kit/server/api/commerce/routes.ts.html delete mode 100644 packages/docs/public/sitemap.xml create mode 100644 packages/docs/scripts/check-commerce-composition.mjs create mode 100644 packages/docs/scripts/prerender.mjs create mode 100644 packages/docs/scripts/prerender.test.mjs create mode 100644 packages/docs/src/components/CommerceArchitectureModal.tsx create mode 100644 packages/docs/src/components/CommerceImplementationComparison.tsx create mode 100644 packages/docs/src/components/CommercePurchaseJourney.tsx create mode 100644 packages/docs/src/entry-server.tsx create mode 100644 packages/docs/src/hooks/useDetailsTransition.ts create mode 100644 packages/docs/src/lib/commerceImplementations.ts create mode 100644 packages/docs/src/pages/commerce-protocol/CommerceCompositionProof.tsx create mode 100644 packages/kit/convex/purchases/identity.ts create mode 100644 packages/kit/convex/purchases/ownership.test.ts create mode 100644 packages/kit/convex/subscriptions/erasure.ts create mode 100644 packages/kit/scripts/docs/commerce-interop-fixture.ts create mode 100644 packages/kit/scripts/docs/commerce-interop.md create mode 100644 packages/kit/scripts/docs/commerce-source-snapshot.mjs create mode 100644 packages/kit/scripts/docs/commerce-source-snapshot.test.mjs create mode 100644 packages/kit/scripts/docs/commerce-store-coverage.mjs create mode 100644 packages/kit/scripts/docs/export-commerce-interop.mjs create mode 100644 packages/kit/scripts/docs/run-commerce-interop.mjs diff --git a/.github/ISSUE_TEMPLATE/commerce_protocol.yml b/.github/ISSUE_TEMPLATE/commerce_protocol.yml new file mode 100644 index 000000000..9ab376a57 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/commerce_protocol.yml @@ -0,0 +1,54 @@ +name: Commerce Protocol proposal +description: Propose shared behavior or contribute implementation interoperability evidence. +title: "[Commerce Protocol]: " +body: + - type: markdown + attributes: + value: | + Start with a concrete connection between products. See the [contribution procedure](https://github.com/hyodotdev/openiap/blob/main/specs/commerce-protocol/CONVENTION.md#public-collaboration-and-implementation-evidence). + IAPKit and other implementations are reviewed against the same contract. Submitting a report is not a conformance or endorsement claim. + - type: dropdown + id: contribution + attributes: + label: Contribution + options: + - Interoperability reproduction + - Contract extension + - Compatibility problem + validations: + required: true + - type: textarea + id: outcome + attributes: + label: Use case and expected outcome + description: Which services or roles need to connect, and what should the user observe? + validations: + required: true + - type: textarea + id: implementations + attributes: + label: Implementations and reviewers + description: List source revisions, roles, stores, bindings, declared profiles, and relevant affiliations. Distinguish project-authored fixtures from an external implementation or review. + validations: + required: true + - type: textarea + id: reproduction + attributes: + label: Runnable evidence + description: Provide commands, source/report links, expected results, and a failure or rejection case. List configuration fields and adapter/client changes; omit credentials and customer data. + validations: + required: true + - type: textarea + id: compatibility + attributes: + label: Compatibility and alternatives + description: Can existing profiles or extensions express this? For a contract change, identify MAJOR/MINOR impact and migration work. For a reproduction, state whether the client and receiver code changed. + validations: + required: true + - type: textarea + id: limits + attributes: + label: Limits and unresolved questions + description: State what remains untested, who has reproduced the result, and any disagreement about expected behavior. + validations: + required: true diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 9f7836993..f6f716b50 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -592,6 +592,10 @@ jobs: bun test scripts/audit-docs.test.ts bun run audit:docs + - name: Check static discovery guards + working-directory: packages/docs + run: bun run test:discoverability + - name: Lint working-directory: packages/docs run: bun run lint diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 822428ade..552d66814 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -96,6 +96,12 @@ second type-copy command or maintain another target list. ### Changing the Commerce Protocol +Start shared behavior proposals with the **Commerce Protocol proposal** issue +form. The [protocol contribution procedure](specs/commerce-protocol/CONVENTION.md#public-collaboration-and-implementation-evidence) +defines the evidence and compatibility review. You can also contribute an +independent reproduction using the [service composition example](https://openiap.dev/commerce-protocol/ecosystem#composition-proof) +without proposing a contract change. + 1. Edit `specs/commerce-protocol/SPEC.md` and the owning GraphQL layer under `schema/`. 2. Run `cd specs/commerce-protocol && bun run build` to regenerate the diff --git a/knowledge/_agent-context/context.md b/knowledge/_agent-context/context.md index 0b0a394dc..cdca7f38e 100644 --- a/knowledge/_agent-context/context.md +++ b/knowledge/_agent-context/context.md @@ -1,7 +1,7 @@ # OpenIAP Project Context > **Auto-generated shared context for AI assistants** -> Last updated: 2026-09-07T14:34:17.286Z +> Last updated: 2026-09-08T18:35:43.107Z > > Canonical file: `knowledge/_agent-context/context.md` @@ -1689,6 +1689,48 @@ Before finishing, read the rendered page as a user. Remove any sentence that does not clarify what changed, how to use it, who is affected, or what action is required. +## Human and AI Acceptance + +Apply these checks whenever changing a guide, example, SDK entry point, or AI +implementation brief. They are completion criteria, not an optional final polish. + +- **First-time reader:** walk through the rendered page on desktop and mobile. + The reader should understand what they get, which decisions they own, and what + to do next before seeing an API table or a long AI prompt. Introduce terms at + the step that needs them; keep detailed references available afterward. +- **Two implementations:** Commerce Protocol guides must connect each relevant + responsibility to `openiap-commerce-protocol-example` and IAPKit code and + checks. Explain differences in supported operations, stores, and profiles. + Do not present a fixture as a real purchase or one provider as evidence of + interoperability with another. Follow the source links and operate the guide. +- **Fresh AI implementation:** when a brief or runnable example changes, replay + its install, implementation, startup, and acceptance instructions in a clean + project using only the published inputs. Record the input revision, commands, + observed results, failures, and remaining limits. Retain previously exercised + cases; do not hide failures by shrinking declarations or accepting known + conformance failures. Reuse an earlier run only when its relevant inputs have + not changed, and identify that run rather than calling it a new reproduction. +- **Independent acceptance:** test the promised customer behavior, including + failure and recovery, against the running result. Have a reviewer attempt the + first-time-reader task without implementation notes. An agent simulation is + useful evidence, but must be labeled as a simulation, not a human user study. +- **SDK discovery:** verify the initial HTTP response contains the page's actual + text, title, description, and canonical URL without JavaScript. Canonical + pages belong in the generated sitemap. Framework names, install commands, + versions, and setup links come from their existing metadata sources. Generated + `llms.txt` references must lead to the same current contracts and examples. + +Run `bun run build` and `bun run test:discoverability` in `packages/docs` for +static content and metadata checks. The repository's `bun run e2e:web` +checks the served HTML and the interactive Commerce Protocol walkthrough. +These checks catch regressions; they do not prove that a person understood the +page or that an AI chose the SDK. Record the reader simulation and fresh-project +acceptance separately in the review evidence. + +After deployment, inspect real indexing, search queries, AI citations, and SDK +setup traffic before claiming adoption improvements. Optional LLM text files +and structured data are aids, not guarantees of indexing or recommendation. + ## Modal Pattern with Preact Signals ### Global Modal Management diff --git a/knowledge/internal/05-docs-patterns.md b/knowledge/internal/05-docs-patterns.md index 2ae1c47ff..5e5d598ad 100644 --- a/knowledge/internal/05-docs-patterns.md +++ b/knowledge/internal/05-docs-patterns.md @@ -24,6 +24,48 @@ Before finishing, read the rendered page as a user. Remove any sentence that does not clarify what changed, how to use it, who is affected, or what action is required. +## Human and AI Acceptance + +Apply these checks whenever changing a guide, example, SDK entry point, or AI +implementation brief. They are completion criteria, not an optional final polish. + +- **First-time reader:** walk through the rendered page on desktop and mobile. + The reader should understand what they get, which decisions they own, and what + to do next before seeing an API table or a long AI prompt. Introduce terms at + the step that needs them; keep detailed references available afterward. +- **Two implementations:** Commerce Protocol guides must connect each relevant + responsibility to `openiap-commerce-protocol-example` and IAPKit code and + checks. Explain differences in supported operations, stores, and profiles. + Do not present a fixture as a real purchase or one provider as evidence of + interoperability with another. Follow the source links and operate the guide. +- **Fresh AI implementation:** when a brief or runnable example changes, replay + its install, implementation, startup, and acceptance instructions in a clean + project using only the published inputs. Record the input revision, commands, + observed results, failures, and remaining limits. Retain previously exercised + cases; do not hide failures by shrinking declarations or accepting known + conformance failures. Reuse an earlier run only when its relevant inputs have + not changed, and identify that run rather than calling it a new reproduction. +- **Independent acceptance:** test the promised customer behavior, including + failure and recovery, against the running result. Have a reviewer attempt the + first-time-reader task without implementation notes. An agent simulation is + useful evidence, but must be labeled as a simulation, not a human user study. +- **SDK discovery:** verify the initial HTTP response contains the page's actual + text, title, description, and canonical URL without JavaScript. Canonical + pages belong in the generated sitemap. Framework names, install commands, + versions, and setup links come from their existing metadata sources. Generated + `llms.txt` references must lead to the same current contracts and examples. + +Run `bun run build` and `bun run test:discoverability` in `packages/docs` for +static content and metadata checks. The repository's `bun run e2e:web` +checks the served HTML and the interactive Commerce Protocol walkthrough. +These checks catch regressions; they do not prove that a person understood the +page or that an AI chose the SDK. Record the reader simulation and fresh-project +acceptance separately in the review evidence. + +After deployment, inspect real indexing, search queries, AI citations, and SDK +setup traffic before claiming adoption improvements. Optional LLM text files +and structured data are aids, not guarantees of indexing or recommendation. + ## Modal Pattern with Preact Signals ### Global Modal Management diff --git a/packages/docs/CONVENTION.md b/packages/docs/CONVENTION.md index b95b22ab6..667aa1a56 100644 --- a/packages/docs/CONVENTION.md +++ b/packages/docs/CONVENTION.md @@ -1,5 +1,13 @@ # Conventions +## Documentation acceptance + +Apply the [human and AI acceptance criteria](../../knowledge/internal/05-docs-patterns.md#human-and-ai-acceptance) +before finishing guide, example, SDK discovery, or AI brief changes. +`src/components/SEO.tsx` declarations own canonical page addresses. The build +prerenders those React pages and generates `dist/sitemap.xml`; do not maintain +a separate sitemap or alternate crawler-only page copy. + ## Enum Values - Use the generated target-language member name and wire value exactly as diff --git a/packages/docs/index.html b/packages/docs/index.html index 940daa396..85a04ded6 100644 --- a/packages/docs/index.html +++ b/packages/docs/index.html @@ -6,61 +6,13 @@ - - OpenIAP - Unified Specification for In-App Purchases - - - - - - - - - - - - - - - - - - - - - - - + - + ` also runs a negative control +inside a temporary copy: changing the SQLite access deadline from `<` to `<=` +must fail the deadline check. It leaves the original source unchanged. + +## Bring another implementation + +Use `createCommerceClient({ baseUrl, credential })` for a disposable test account. +Supply a provider-owned setup/transition adapter in the runner for its fixture +purchase, cancellation, and expiry; those controls are not protocol operations. +Keep the client, receiver, and expected outcomes unchanged. Record the exact +revision, configuration fields changed (never secret values), commands, result +report, and any required code changes. A changed adapter is evidence of work +needed, not a reason to hide the change. + +Run the published protocol conformance runner separately for every claimed +profile/binding. This demo advertises no complete profiles. External teams can +publish their own report without an OpenIAP account or hosted checker. + +## Scope + +The services communicate over real loopback HTTP in one Bun process. Provider A +uses SQLite; Provider B keeps state in memory. Store evidence, users, clock, and +purchase callbacks are fixtures. Both implementations were authored within this +project: this is reproducible implementation evidence, not independent company +validation. It proves neither real store verification nor production reliability. + +Both providers start empty. Moving ownership/history, rotating credentials, +cutover overlap, process-crash recovery, and a real SDK purchase need separate +tests. The baseline receiver stores events; it does not compute a revenue ledger +or grant access from webhook arrival. diff --git a/packages/docs/public/commerce-composition/iapkit-run.json b/packages/docs/public/commerce-composition/iapkit-run.json new file mode 100644 index 000000000..608f04763 --- /dev/null +++ b/packages/docs/public/commerce-composition/iapkit-run.json @@ -0,0 +1,1149 @@ +{ + "results": { + "example": { + "label": "openiap-commerce-protocol-example", + "before": { + "userId": "interop_alice", + "productIds": [], + "subscriptions": [] + }, + "bound": { + "userId": "interop_alice", + "productIds": [ + "premium.monthly" + ], + "subscriptions": [ + { + "productId": "premium.monthly", + "state": "Active", + "active": true, + "store": "google", + "expiresAt": 1788908348743, + "willRenew": true + } + ] + }, + "canceled": { + "active": true, + "subscription": { + "productId": "premium.monthly", + "state": "Active", + "active": true, + "store": "google", + "expiresAt": 1788908348743, + "willRenew": false + } + }, + "expired": { + "userId": "interop_alice", + "productIds": [], + "subscriptions": [] + }, + "erased": { + "userId": "interop_alice", + "productIds": [], + "subscriptions": [] + }, + "erasure": { + "accepted": true, + "jobId": "d3373352-e171-4f06-8621-b1cd038b6735", + "status": "completed" + } + }, + "iapkit": { + "label": "IAPKit", + "before": { + "userId": "interop_alice", + "productIds": [], + "subscriptions": [] + }, + "bound": { + "userId": "interop_alice", + "productIds": [ + "premium.monthly" + ], + "subscriptions": [ + { + "productId": "premium.monthly", + "state": "Active", + "active": true, + "store": "google", + "expiresAt": 1788908348743, + "renewsAt": 1788908348743, + "willRenew": true, + "startedAt": 1788908304065, + "updatedAt": 1788908304108 + } + ] + }, + "canceled": { + "active": true, + "subscription": { + "productId": "premium.monthly", + "state": "Active", + "active": true, + "store": "google", + "expiresAt": 1788908348743, + "willRenew": false, + "startedAt": 1788908304065, + "updatedAt": 1788908304201 + } + }, + "expired": { + "userId": "interop_alice", + "productIds": [], + "subscriptions": [] + }, + "erased": { + "userId": "interop_alice", + "productIds": [], + "subscriptions": [] + }, + "erasure": { + "accepted": true, + "jobId": "ns70njbmnkcn4g7e228hhac7x18e0j8x", + "status": "completed" + } + } + }, + "storeCoverage": { + "apple": { + "example": { + "verified": true, + "productIds": [ + "premium.monthly" + ], + "subscriptions": 1, + "storeRecheck": false + }, + "iapkit": { + "verified": true, + "productIds": [ + "premium.monthly" + ], + "subscriptions": 1, + "storeRecheck": false + } + }, + "amazon": { + "example": { + "verified": true, + "productIds": [ + "premium.monthly" + ], + "subscriptions": 0, + "storeRecheck": true + }, + "iapkit": { + "verified": true, + "productIds": [ + "premium.monthly" + ], + "subscriptions": 0, + "storeRecheck": true + } + }, + "horizon": { + "example": { + "verified": true, + "productIds": [ + "premium.monthly" + ], + "subscriptions": 0, + "storeRecheck": true + }, + "iapkit": { + "verified": true, + "productIds": [ + "premium.monthly" + ], + "subscriptions": 0, + "storeRecheck": true + } + } + }, + "harnessHashes": { + "commerce-interop-fixture.ts": "cb06b02f482a052134c9a9b17c92e9abae6fc35fed1fddb4b6ad0563d6c437be", + "commerce-source-snapshot.mjs": "36facd09bb63335cd68efa9c78da5ec10e11aa3bc61cd8bdbcd4d64c31e4293a", + "commerce-store-coverage.mjs": "a60eb6a2dc880672726b7a7894e59cabf59370f12e4edddb53cb17ba2ca880a9", + "run-commerce-interop.mjs": "943cbbce2d4fca94659e6646494ef1091bc4a1140a4ba7be6d233605755dd8d9" + }, + "sources": { + "openiap": { + "baseRevision": "4be06d309ae4b1e1bc8ed1281a6527ec4b63aed7", + "hashes": { + "convex.json": "6729d387a51478b37dee8cde82aac578f0fc9ad50dd706f3d70551a45b78450d", + "convex/ResendOTP.ts": "64fe711a2fedbc6de411f710bc8cf2469fa4733538a7b26a7ae343f69fd73a0b", + "convex/_generated/api.d.ts": "c21b38e8a3a168c541c24aa62899967ce6a21509b2cd58dd627619f0e362449c", + "convex/_generated/api.js": "f513058549831e85376f8d19cafaf2a4a770b6eb1b859fb371141f2c9dec0d70", + "convex/_generated/dataModel.d.ts": "db177073d16a4393c7a96bcdc3a2a904e88c2432d54d138ca7715cc431982c17", + "convex/_generated/server.d.ts": "2b536ee08d434dd044efe0302aeaf4ccb00cd08af10c9f8c7bc7a6734e4aa49b", + "convex/_generated/server.js": "0cdd1d842b9458d8a6f2444c35eb9929312316a384ca76a4b1d964bedde8a6f2", + "convex/analytics/action.ts": "8efd120f7fbad0c0fa89f1c46e6d7f982e4b585ade856351315b67dae31c3714", + "convex/apiKeys/helpers.test.ts": "f01c0bc9e176a10d0acb36560c0520ca3f90767a63263f13860f649f8ae324b4", + "convex/apiKeys/helpers.ts": "19108c68009238679d6c30ad87109683d379fbefbc60baa05a9d42cabcd96872", + "convex/apiKeys/internal.test.ts": "27ad06a38919b8936e01c42f1c98cdd603c1d624eabb952e4589c1f4efa9199c", + "convex/apiKeys/internal.ts": "c9e73fdd3f4b7d5bae241e8baef438c4dbae309b2c69ca929a9ac6c8c9cb0519", + "convex/apiKeys/mutation.ts": "79ecae6990a748a12a9a12187b63070706550989bb3236aad1c84d0b0f2f2d3a", + "convex/apiKeys/query.ts": "5eb6dfe16c8d8afcd9a0a1aa2fcf765453be2d6ca7bf556884eb0a8e5f3deb5b", + "convex/auth.config.ts": "3fd31060734a38e5eaa3ea6d134ced4810f436aceda5eb8c2d0347ea3f410813", + "convex/auth.ts": "cfd8b4deac46e9b726338b8c76515cc039269005becd3642552c6c0f89e7ec98", + "convex/authWindow.test.ts": "12063867fce96dcb769f32132492d83b04c19f337c4b62a0754d3688c09b57e0", + "convex/authWindow.ts": "7e0e42461e73d2d22db02ec365d79ad98f6f65d1ce00d2b5a55635c70580a4f6", + "convex/certificates/apple_root_certificates.ts": "226280b45dbae4786327b416faaa36ec4c7191cc711e33fa1c0882b35c7580f0", + "convex/commerce/capabilities.ts": "2e2158922e05ed919bb8c5de5e581d180466cbf4f2e803f3684708f92b52c2f8", + "convex/commerce/contract.test.ts": "e81a95ba17155570b049322108b0e9ffa2e1a7f9f335dea974dabc2b6de68731", + "convex/commerce/contract.ts": "6fb90420d35d72096f66062a52caff9a7079f561d90921e5d5930ba70a884a9b", + "convex/commerce/delivery.test.ts": "31cd2dae1ec8da9f2f2a2159a622587ffbe895380c04878eed9f8726b4722bef", + "convex/commerce/delivery.ts": "05941b61f771e5437e98f4f10baed4865ccb7c93a27871e6b29cfe8fb265c5cc", + "convex/commerce/deliveryState.ts": "fa4581af509d31ec277356eaa7eb2491948835763c0833b683365c540a57bfd2", + "convex/commerce/destinations.handlers.test.ts": "60b80edc6a6110d4bb1ebdc3025eddfe8da717d6d930083b5e4b72345ff8091b", + "convex/commerce/destinations.test.ts": "241e9918500d6f0b93db43ec93911fac238aea700370e5953465460a5685fdd9", + "convex/commerce/destinations.ts": "9406f31d2c74e6f82fed652716f2a8a4f8aea4f11d58dacfabfe52c3497711fc", + "convex/commerce/internal.test.ts": "83cd1a9437bbd6b171dbfc5b712c428d869ad2eb8b8d1dc5a8fa61b44bcf804e", + "convex/commerce/internal.ts": "09c0d7433dd4bad55134905379ef1b67a0aef09dbfdf48080f69d705762c33ef", + "convex/commerce/signing.test.ts": "ac90aacba35f88e75cbf723cd7e0117c327cc670b18cd2da416fe3db8ade8706", + "convex/commerce/signing.ts": "7fc0f41006e58bc91a4797348042b7fe0e1d37f391d0ef5038259413c4fd084a", + "convex/commerce/spec.conformance.test.ts": "d6a371f0fa4ae8c288b2358b322ff4225d03cf5071fe591c689db0b77c621719", + "convex/convex.config.ts": "5cda299b1355c97b5f09741a0df9270706358f2accf8c4e7ceeea3a25af36cd0", + "convex/crons.ts": "a218e46223db4edc6587829121eda6b12e70698b7facd74389e801136a12ae74", + "convex/files/action.ts": "12f027c7812d7f9d86ae2350473292933e5aa2a6a7ed86d9935b5918f83c7b02", + "convex/files/internal.ts": "16e2ba18b5e4c7ad50c7a1167d6c5c230efb8a27b9f41c940a6b2142b3915471", + "convex/files/mutation.ts": "8ffd5fa9fa41841427fd7b1baa844f275a1eaa03f131a26df2dcd568fbad063e", + "convex/files/query.ts": "f6c9df4743519c3cf0b8e0788c575cff2ed3b4a5823ad2c3b6df672272902aeb", + "convex/files/review-screenshot.test.ts": "f9d625006753bc40b505efcfd63c39861685750aa9924f05c3366993af41c9ba", + "convex/files/storage.ts": "7397e6f3178dd8725a1032649fa1daf235d043ae384c2b40b014caab693e0644", + "convex/files/validation.test.ts": "13c97e9348b3e05ed27b05ef0acd56cde97625f165e060e47830ae47fe560b6a", + "convex/files/validation.ts": "dd942e3efd7a9ab04516ce1897a46c1b4140df07a40b04d09596d470797e0f36", + "convex/http.ts": "307ea39aed1b1b0780028b827000b13a121dd82ee9eba2b3dac9397a9d77cbfa", + "convex/migrations.ts": "0df8e0d81a8fc5b23dc58c2643f12a9adc3d84363ccb0f3afdf262ad35166164", + "convex/orders/action.ts": "f8b212e13cae7fbb5337c3f26eb5aa40ea76bfc491ab50b4b2af08711e989177", + "convex/orders/shared.test.ts": "10db20a4f91d553b28ab20ab59b25ed16c7722b00d59ada5c52c48fe840f67e4", + "convex/orders/shared.ts": "7ad1f6271adfc055ce54b1bede16fcbe8a72010b841080789a5e8072e59aec65", + "convex/organizations/internal.ts": "471282c4587c6c7e93cfa86412b0e57299ebbbeef51adb55f3f84c0f1cb11f22", + "convex/organizations/mutation.ts": "f5e60218c7edc6ca7a74e31da2307e1ebfd9f2be46eb9512ebfafcd086ffec2f", + "convex/organizations/query.ts": "7f2c91ccea7955b13831bdbf0e9b436c642985ece1cc68595aade424154b8ffb", + "convex/plans.ts": "0995a5b88828ed1edfd85091678bc4d5d498042e9f5997ff03d28bb726dfe639", + "convex/products/asc.test.ts": "ce3770a3eaa8e4f634045074c2ab28eda54e935613208e584a74835feaf2eaab", + "convex/products/asc.ts": "956bd3702ce130906ec03083a84e0101792cb207a34d4ac5347981eb604354c9", + "convex/products/ascReview.test.ts": "871f971d4cecbf7d7671cf92e3f6f52c259fe6c2bd0d356f39ac07eee573c08b", + "convex/products/ascReview.ts": "cf57cd1509d61b42acc21b9b714740e040a470351d72048597275adb1d48f2c7", + "convex/products/jobs.test.ts": "293080e735944f4ef75f3ba70e119a024c51966c203aeb149d2a40e57babdf35", + "convex/products/jobs.ts": "e9fcd8db72556d906bd63668ace6cb8052c31b7fd09a88b218f71c5e9cd118f8", + "convex/products/jwt.test.ts": "0e2b74a40b7e9f092fc68d98544ae4b9512451e2c365363b840648f44efe8280", + "convex/products/jwt.ts": "796fdee72d8dacc9a8960f6b2a5d929b9b9ab39d5ec9e23af89aa001e8c13f94", + "convex/products/localizations.test.ts": "4b8e73c1c91d8fe073c87c37f7cd3a1ae2087b2d17036e83330dbf53c6f7b4cf", + "convex/products/localizations.ts": "7b03e4f165bde2e5099fdac4445c4a5351b3e08537ad8f8a164e1ad6d1a32689", + "convex/products/mutation.test.ts": "c4237667b838f0bfcfbaff3b7d78137571f8aebb6daa60d9c70068a73bec0061", + "convex/products/mutation.ts": "60173a588026282887d539d9b8d0def1291858a74ae8584a7c3b9f4c68d6907c", + "convex/products/play.test.ts": "81c5f92212e3517b021d20346fecae224e240e09e25dde4b599c2af20a89474d", + "convex/products/play.ts": "829e0c11552c32a2f9a59d274507995aefad96680405e26b6059e944b65f3ea5", + "convex/products/query.test.ts": "f73793982e59b29653b2eaeec4e1ee892962951bc2fc03e2efa90e9079e9fdf5", + "convex/products/query.ts": "23b348541a46061a8b89bd792fc4412835686f13f0aa2523ed10b54e69b656b1", + "convex/products/regions.test.ts": "524d28668d710a8df7ab1d528b0e072646fd8d3dec98efcb438d80faac4dd5bf", + "convex/products/regions.ts": "1d2d18cdc7fc4da4f5193020b123387c03737f792720c0567b4f3a36c9bdbd90", + "convex/products/sync.test.ts": "eb1661fdf3a54039ff21c3ec820cce86abe1e12a8ad54195563141a8fd3c1036", + "convex/products/sync.ts": "afe5a96d23de426924f8ac0cb4c45a717007608bb6fa5f26d7d5542dabfa443e", + "convex/products/syncResult.ts": "f408374cb30216db4f189d32ad1f2bd269893f75785eb322a2d05c2a2daaa533", + "convex/projects/get-project-by-api-key.test.ts": "287d6e4916493f7aab42fe1538f68ca4bd2755e6e6d7d0193671cb1161901cb3", + "convex/projects/helpers.test.ts": "74e25fa5b91effe1a8c44b533e22af45aac1fd644c06b0dfd35510ca528f9a1a", + "convex/projects/helpers.ts": "66a7c8c86a734c7baf5d18aee2736b44c3177d11635bf5b608099526e51c0d1e", + "convex/projects/internal.ts": "29135b683849677d73b86d7a4ab8de1e7a17eabf8b3232c943aeba9d20008555", + "convex/projects/mutation.test.ts": "0d979e358647114c9a299744ebaf19784379f67591849d97dda9be548d826ea5", + "convex/projects/mutation.ts": "58ec28854eec50b4dda874c15666fe2b92d43dca160e106c85d3494996afe6b1", + "convex/projects/project-child-pending-deletion-query.test.ts": "065a40edcc405ef5821fa8eb96df0771b9421d04e74176c2912d7c6ff4b7db71", + "convex/projects/project-child-pending-deletion.test.ts": "286400b458622bcd9a1cf66a63067176d9e2c4f33354f7e1b88c4e787eb27abf", + "convex/projects/query.test.ts": "7afd347a04ca6543c3c5884494b3fbbab41ec1458afc77100f679aed23f1e7c5", + "convex/projects/query.ts": "16fa57614da043b68fffa93173f592cb4f752b538f9de400b66ee15a321301d7", + "convex/projects/setupStatus.test.ts": "e4a5ef47959a097451b3d1da6e218106735ceb1e4f9ec4b3d589e3505061fcfd", + "convex/projects/setupStatus.ts": "0d3f21379df3cd480d21e5c99c0baf65b4c65aa49276929f1de8eea241cbb5d6", + "convex/projects/writable.ts": "8c023e994c9d9b69f49c829da4400b4ad168c43033d500d770cd7f2702c93f44", + "convex/purchases/action.ts": "55b35837dcfc50a1ab5699376e00d8c5397b737ac256fc0e99fd6bcd11b0ef72", + "convex/purchases/amazon-reconciliation.test.ts": "a1817dae0fcd240b9359b0b32abbc179ebb114db23eff0d620a114b9cbb9239b", + "convex/purchases/amazon.test.ts": "16dc4fb5036d637601e072d431e0eb9efb8084ccf00724c2858a38694ea3e8a2", + "convex/purchases/amazon.ts": "909a078325b23b5a1136ce739a2ae82fb1f99db8ac68a01ee137a9ee838406a5", + "convex/purchases/android.test.ts": "5b9060d98bf249babb70c2449878d748cbd3ce4bf177db07050b63e3befbcf3d", + "convex/purchases/android.ts": "91a9305cd14d8072f464c464f46878bc400b062524fa5f80e11c9a7ae16bd416", + "convex/purchases/cleanup.test.ts": "b9052bf2ca1dd2403c1bbbb6a6795fe508d285d1057d0228cdb0a4909eabe9cb", + "convex/purchases/cleanup.ts": "1237255a5da0c54baff57a65e30e26ddb186c6efae6c15b215b4c6d61f098e16", + "convex/purchases/errors.test.ts": "edc7a7d9b1527cdd1e528cb4e331091b43296802d8989c01bf108492a2ad34f8", + "convex/purchases/errors.ts": "c011b818d85f51cde972aad60e0e26439d2cd375569532d9ecca5073a2d4afef", + "convex/purchases/extract-order-id.test.ts": "dfb834cfb08accccc1e53a3b72615cefae09d0477fb80252f984b4b8965f1109", + "convex/purchases/extract-product-id.test.ts": "210381901a21c0f91018ff1c20902c65ffb0800510fa2dc1992a9e6d30c18646", + "convex/purchases/horizon.test.ts": "75d3fdd02b5e4803b5fc8c34e843513665f860519a58b65fd563dcfa1e662a28", + "convex/purchases/horizon.ts": "62e11bd29a2a6ef7b06015fc211c1b71cb30da6330e9bd256798f247b60eecba", + "convex/purchases/identity.ts": "e7dbdf51c6e8e02ac00c2291b1aa31cf2ef68891fa37d063d5d8de078a6847ba", + "convex/purchases/internal.ts": "f2cf8806693da101c77ed31948fbb0b48dcef846d4acd2901c85264a77752a7d", + "convex/purchases/ios-handler.test.ts": "65778d7c0b50503bd55c01d4eadfce069d558b49c5c4b8b61a67fe3cfc74475c", + "convex/purchases/ios.test.ts": "05af2d8a48886a9ff2efdcfdb44ff2890a13f906ea222b17e0a8bc516ae889eb", + "convex/purchases/ios.ts": "cffa1b76420bf3c722f273dd3fe83dcd1fcff0c502acb098d616e6f2bd555ca5", + "convex/purchases/mutation.ts": "163fa4486aec7ef4eea3d3fdcb5d53f77d02e5155482e2556cb510c7b21bbb49", + "convex/purchases/ownership.test.ts": "4c0b55f246e4df86af2ebe2f37da0c614f245c105a292f36bb0402332ad2d996", + "convex/purchases/purchaseState.ts": "6f5463c7e1f75edc39e474005f6996ac63be8ee3a1c3a2d419e7607d4080a67c", + "convex/purchases/query.ts": "3e3defc6e7896df32c69e9f3cc19eb4253858f5c3ae62018a8f9417da7a76d15", + "convex/purchases/retry.test.ts": "53f384b1a49596cdf454944d5693b366a4819fcd156f8ffad72a9fe39a1b696e", + "convex/purchases/retry.ts": "6d92062c2051fb02b90ced4aba581ee6083cf6001f76309429f8c9b3b43aa81e", + "convex/purchases/save-purchase-idempotency.test.ts": "15f4ea9564b8d29a3447a3f503e4ecbe888496e832d96ce15a472b30a4ade32d", + "convex/purchases/shared.test.ts": "a63833a80ead6c415536550a616575ccbfab3e83843b45c12987e5952ffbec14", + "convex/purchases/shared.ts": "fe9f8646af57a95d01a363f2702ed5869071a5d1c9dd49bf5edefabd75b52719", + "convex/purchases/stats-integration.test.ts": "90c25d92b00ae9791b8ed661d6d8de3cb94eee556b9d4c5c988698844967071a", + "convex/purchases/stats.test.ts": "082fd2664825353c74ce3412aaf01f9c490bf185c93cd220e015c38ab3c4d1b6", + "convex/purchases/stats.ts": "2cf237450746ac6713d48a4ffc7c17a36b0725f8f4e4e366e628dad291c4a086", + "convex/purchases/verificationAdmission.test.ts": "872427a1b43679e40ee51cd36e796baf05c4738fcaabc619879ae2daa092cf20", + "convex/purchases/verificationAdmission.ts": "38d88a4a1149166454d0e6cc626ec79364f05a0d72253b95250d7da311cf2cc5", + "convex/schema.ts": "ad495e13959180c9bb44fbe87b9634ae35016140775e84d093fda5814956bd0d", + "convex/subscriptions/erasure.ts": "2e710408c2b68bf6ac5fc20e499c6178639e8a636f3150db1f9fae82361da898", + "convex/subscriptions/internal.test.ts": "590736992fcd956114a52a8afb7556293ba6b08958202a6f85cc9dd52862d310", + "convex/subscriptions/internal.ts": "8c246cc7bb3869cd603991ddd722bd7c375790481402dbefdfe5eb8e1341fe8f", + "convex/subscriptions/limits.ts": "6cd936465db669fb0ba11699fba54b6c57342fc30a18674f5caf0dc4549cff94", + "convex/subscriptions/monthlyMicros.ts": "5debc322ceae2a0cbb5bf46ba8448c2f8d93055283046b1117edd20aa32cf67b", + "convex/subscriptions/mutation.test.ts": "dd89c082b0257562961ced0966edad30911a7ec806648fcfc2828b42c3084ab2", + "convex/subscriptions/mutation.ts": "b780bab187d90d93eb4f7c5f9e8c5edde2ede313023a189b116a691b7506bade", + "convex/subscriptions/query.test.ts": "f3621aa334a48fcdb4a0b71f0b5d2c1dd6a4ee44c6a3813b81012e5d12269b68", + "convex/subscriptions/query.ts": "f6de34dfbc28c8fcf2111b3063a21b95d1e58940bbb79665711f803de9b1afe0", + "convex/subscriptions/revenueMetrics.test.ts": "43c85daf22f472e80ee416af41d9f72727378efb5ede5c5d63c374b2afcba8ee", + "convex/subscriptions/revenueMetrics.ts": "9d9481a9fcb2f1370dd0a45bb5ffdb2b816621d0c906f78ea4d107cd9e99d145", + "convex/subscriptions/selectLatest.test.ts": "b1594669b03a8154dea0254727ac507cd2bc57bceba7ee413e1af1b4bebd2973", + "convex/subscriptions/selectLatest.ts": "7fa3f64707a92d1ed7c08fccae2876eab147421806720f51a2d47cc3b5dfffa0", + "convex/subscriptions/stateMachine.test.ts": "17cdd3bd384f95698ff489b6751acd4abd90e8d4a795a36dd20e2d433394deaf", + "convex/subscriptions/stateMachine.ts": "b53630a4b214de71b817310170fff0a7b46be221194c716960287560333cb50f", + "convex/subscriptions/stats.ts": "5a1e480e979eb9c21e68ba215cf1f1b097ff9955b2d5056e00f124f1e88da351", + "convex/subscriptions/user-erasure.test.ts": "50317b61eb4a76924bcd77b93cde8438425fb20e0262620ddcc3546ce80d35ca", + "convex/test.setup.ts": "324b5c1019ab736b6ac397bbeb191640f98127bcbfbdc1f587b0f16718893ae7", + "convex/tsconfig.json": "86078315f73e0bfa8f0738f8fa1266dbb6135c18707fbab18b6dd7b5e67d18e2", + "convex/userProfiles/action.ts": "94b1f74716468c0398b4ad22b85829e04a6ee59d8e5b78856fea712677a0c509", + "convex/userProfiles/drain-account-deletion.test.ts": "7987e86a913809f926b11912e98b4660276e596848f16ae4bce079de51998aee", + "convex/userProfiles/internal.ts": "3876c3716396c2302bebccff20fad9f3e79875f356d1c0d2edfa1bea2894ff30", + "convex/userProfiles/mutation.ts": "e55edb734f5063205857701da1bb84d8e4dddae21be455561bbf4f9e45362d81", + "convex/userProfiles/query.ts": "ed795a70c74d954c77814a84eaa32833db2d4489f827dd8144b6ffca798adf01", + "convex/users/internal.test.ts": "9bc712955dad8a73e67c7f9b5ced71cd844376ae9c59a033825608e2884dbdaf", + "convex/users/internal.ts": "1caa94f3e6e2fc094660ddc84b8a63da4b3aade2d75bc0c7428abc8ff3376eb1", + "convex/users/query.ts": "672846b3cbc482b720d69d39372675719b9e8a4a17138ba01952f870e7da40ab", + "convex/utils/concurrency.test.ts": "b126af585a114e9f87a382c0cab689547215d5a78390ba9cedb4644f52dfa5c7", + "convex/utils/concurrency.ts": "50eba9e2cd8b326d5a8ff4923d7d1bc4e6257dddff1cc154b8bf2bc6bf5db9c7", + "convex/utils/currency.ts": "ffe7b0e6d12cd523bd3400edf2c9c67e6d38218f2ef3506662a49b865644d050", + "convex/utils/errors.test.ts": "26e50ec9404c439f83b7ca6f5485df114acdef672c6aeac01beec2715e880f86", + "convex/utils/errors.ts": "3e3f81c961df6b33ab637e0a22c99db83a973f3a420e691d94d40efa176c9aee", + "convex/utils/helpers.test.ts": "8db12ab02e5175415d6bddfa789b3e3f836f1c301ff0625bac6684872d6df6e3", + "convex/utils/helpers.ts": "7c12d56eb226b304265e7b285727377f910c6203ec69ff7f11a48f39c764fd07", + "convex/utils/sha256.ts": "86508c4ecae45bcd7a406646ad52bd36a9d29484f0c2a25dfe05e8ed0b19acf0", + "convex/utils/validation.ts": "7a37fa20192538bbc5323ca78ff6974d3f5cfebf8a2d0880235cc6a574853e3c", + "convex/webhooks/apple.test.ts": "c027636b85ae16139a48ab7e954add9db4cd85fa790e69a2c73d088a53e027f0", + "convex/webhooks/apple.ts": "79c411da387c57e9db6f304b706a44359cf4ad4d0ea5b16e08d9746252376cfd", + "convex/webhooks/conformance.test.ts": "7db2bbb3887958ed8009847598dd65dc0986a009fefc95c314e7b8eb0d5e4909", + "convex/webhooks/google.test.ts": "36d4671dbd5d6a1d05866d0c80dbf6e79c573fbfdc19201c0145dcdfae8ff496", + "convex/webhooks/google.ts": "838c028ccf5e1148aefc8ec50d2e9440e240fcbc75fcb4adf4935c04924ae15c", + "convex/webhooks/internal.test.ts": "da09eb34d905ca597838f2a75d3fc168be66dc7f25c2526d742c70b9e4bc8d94", + "convex/webhooks/internal.ts": "5901bfbf1b619c642005b50581152f1bd4db962b229e306c01b86a73a7626ed3", + "convex/webhooks/shared.test.ts": "9b1bc4fc95c6cdac577139d4a3d0fe8af2d2f17c05c9245477560046f4be52b8", + "convex/webhooks/shared.ts": "cc452f2fe85f236208024b75696c9d33465307319823cffe53a04262b730d3db", + "package.json": "1182cc98122c21521339bc9dc261e354dd1259a0fa1d9df8fcc9554b6f212fa4", + "server/api/commerce/conformance.test.ts": "899281919296be4f38de4e6b48b059b6e0a6cca90558bc3758dc9bcd559e1435", + "server/api/commerce/errors.ts": "58e617a5e54bc9202a38cc87fc82e37298dc7478f735e512b7bcf54ea27bcd66", + "server/api/commerce/graphql.ts": "8c45733a958c875d5a123e4fd0b1fa56981f9adb0fc6c80104fb4ce6727448e2", + "server/api/commerce/handlers.ts": "0a17df7e9b4629052e9ce7d95aa80c11e8ff36b34738e5046b169253ba4f44d2", + "server/api/commerce/routes.rate-limit.test.ts": "5e7d260771101ae3cd9218d3c63ed9c7ba91a010e550bc09b969635595bb85ab", + "server/api/commerce/routes.test.ts": "79a0af6b4c2c9015d8a2b0948e96d8fd614136ee61e42ae89b504ee2f75b4a0c", + "server/api/commerce/routes.ts": "e8383e409de76264dfe04d3aaec00c57b7ae2e0204a83744cd653b8c10e3b4b1", + "server/api/commerce/validation.ts": "cc84b422b537abb374ef32825d07f8a65f357e30a001b1a814464d5d6797f3f1", + "server/api/commerce/verificationAdmission.ts": "b0d35496fbb88bd0e2e0157fccc18bc35a0f439af360265fd1f4bf348b1b1525", + "server/api/v1/in-flight-limit.test.ts": "af59d08681871f3abe5c82b58b20866f1c9774f731e719f2b210a434021018ef", + "server/api/v1/in-flight-limit.ts": "6a017425b1ce8f0405656338c60663953d5c9865b940311f349a379755107aa0", + "server/api/v1/mcp-contract.test.ts": "2481291bbf0a679979a6bd8979673e4f7e39f33423c5896efd9542abe4e1ad9e", + "server/api/v1/middleware.test.ts": "7d40f0a9c5912d661089876a3bb031fa76eb181d42cce5473dde27f4ca3c3859", + "server/api/v1/middleware.ts": "318b7fd449ed5ef3abcd148f3ade565063c74c2c8aa60decde600391530d97ed", + "server/api/v1/products.test.ts": "e374eff0e459fb2c6af26d4bf91e94cefab4d22158d2a73e8ad06fbd3906baab", + "server/api/v1/products.ts": "e8ab84fc84c48e67607729399cb1863e159415a8ce3fb0c15c87fb37e24edd38", + "server/api/v1/rate-limit.test.ts": "8af3a26833e07f1873f01531163f54a15562462b1ea7c58b4a6743b25b50d71d", + "server/api/v1/rate-limit.ts": "86f870ecb0b24748015ec3313f6cefc11bdf4fc7c7efb0ed2e218c228145aca9", + "server/api/v1/replay-guard.integration.test.ts": "d19dd85d805f5ddf67b5de6b3b627e65bae1ea2783d6b798ff72ebde6ff8d82f", + "server/api/v1/replay-guard.test.ts": "a7d2dcafda01329fed0af256146d59a72aa5fe622847ad237827d5cc4f67aacd", + "server/api/v1/replay-guard.ts": "5ed1c74eb80778eb79f62730c458587f86c2ae2431bb0a540a34876e69c5fce8", + "server/api/v1/request-body.test.ts": "a2a3a19117b1957d23b1753aae7cca8fdb38bec074d0b1e87c9233f2616e240f", + "server/api/v1/request-body.ts": "abc51b2d1cfaff29ea10ce5e5470b861250f81a31acbefc6bd0dee3399f239c3", + "server/api/v1/request-logger.test.ts": "4281b16b454ded5040cb4b286f44427c1e8d08424928c35fdee21ffa64c10dbb", + "server/api/v1/request-logger.ts": "13404c120cb82392c374ab4a22aaa6c52e53d4792c351045a24bf3f406f02a1b", + "server/api/v1/response-contract.test.ts": "e8e7dd0ceb4efacb3b26d546570d1f603c4463d2eba00793dae38cd51f92ca0a", + "server/api/v1/response-contract.ts": "67c5c97724162c941a2e24444d1de605fb15469469c913c7201ca9e277077c42", + "server/api/v1/route-input-schemas.test.ts": "3f9b89e6dfc3730ede596fcbf22f00d61a6b7349d83ae30583cda08a06892cb0", + "server/api/v1/route-input-schemas.ts": "e501ee1bd3e04c1dbdee2c5a70517da32e3eba744400eb2b69d821fddeb2d358", + "server/api/v1/route-response-schemas.test.ts": "41737df37e2172c872b4dcd3458528b75d793476b2991c33cbc08e95cd70c560", + "server/api/v1/route-response-schemas.ts": "2521b8c703f7d201b3790bbfbaaa6bc6a29637ac36b0b486f7e087be92b7ea02", + "server/api/v1/routes.test.ts": "5f76cc4e496b19d935a03246cbdae7a4387248003921f43797b675b3fac7cd8a", + "server/api/v1/routes.ts": "3027f90f4128ddbd95c65bfc93d071c4ec7935e6fad2af921d903244673e670c", + "server/api/v1/subscriptions.test.ts": "fc841ee0937894360fed0ecda1ec1520a1bec1b556a40dfcdca8ea44007ceee9", + "server/api/v1/subscriptions.ts": "25096eac92dadd0cc408efd89d736972e9c8723af46395f32c187e9ff7d42d5a", + "server/api/v1/validator-path.test.ts": "ab4925c48e63705f97ee8537976e776fd7fca2296a9c0a2a64e1c50aa8f991f5", + "server/api/v1/validator.test.ts": "869c61f1105936895e1563be58ba01ade1a3a1af8b179a810396370fb9284120", + "server/api/v1/validator.ts": "96dda15fafad415fc47271d0038d252d7133d5b3782aec17a33199b36604b073", + "server/api/v1/webhooks.test.ts": "a767e9d79000cb208b26899f21b128f22bb4c67575ff22d771a9d887ab50d2fb", + "server/api/v1/webhooks.ts": "8e358d0b40609b56d7386d9ff0b0d1c1145e60f76dbceaef1ca4c2f5c495895d", + "server/api/v2/route-schemas.ts": "e7db69e3e3e5b5eb52d03ca2a2bb05f1bd9b3b8a2cfb747a02aff02555e9e9d7", + "server/api/v2/routes.test.ts": "e964e387caf56413b69fd5e4bc1da8791358be6b8f5bc11717ad94372120250b", + "server/api/v2/routes.ts": "e92c2ec043226b3b4069b10722c2df0c18c8a6c5a0c0ce5a7099ae304cae7ca0", + "server/api/v2/subscriptions.test.ts": "6f186bfd8e27bdb71240cd228be5abb253cc738d4190134e3a3cf9bacd4185ec", + "server/api/v2/subscriptions.ts": "6aef9ed115825b54d8452802a5b69670960908d634863374f70ac8368911a034", + "server/bun.d.ts": "1aedd96d736cadda1a1f54bacf20effa6a5e1ddddc39e9deb0ec38a758224ae8", + "server/convex.test.ts": "23a46cd650da6f5939b4fbbaa57c42ef5a6266ac2405a55969a6c3d973a2cc6f", + "server/convex.ts": "f63b5d431b74ecad5d6ed637ad34814be4dacea640ebe80f392a1248c391fd5e", + "server/health.test.ts": "ca25074c9d68d95a2729116889b9a8270e95a4fa94d6189a0e8a55254573b0ad", + "server/health.ts": "630f80ed526ccad7d3bf8851ba9ed4744fc1c268af2879ee98100e6d91947430", + "server/mcp.test.ts": "b3826201a416f5b66fe69d2723eeaf464ccdf47e8f35695f3f8a6453d3083a50", + "server/mcp.ts": "5fd101b488b3757896e25e890be1baf5b92b0831231df5057f6797407f0bd1ff", + "server/sentry.test.ts": "35acf04ad26f814b52a1ea0da3c03f1cc35c6efd0c73ed1f0762ae71f9304ca9", + "server/sentry.ts": "97b37ab62bfe0d6bb08cffdbdfe24020e1118af4e41d965e535251d352200c51", + "server/server.test.ts": "b6ff5bfea51a740b3cc1d0405e12de7bbfb116f9cf2e798b7644edf337bd62f8", + "server/server.ts": "e21e9fd48afe56901f3031cf707c9da3ab99c363088313e19059327e2b19ec3e", + "server/staticPaths.test.ts": "c0642f61bcba8991ac5f4293893860aaa6a4a56154b937d3191a0d82f8079297", + "server/staticPaths.ts": "22ac0a799ea3270f092024d7ad186106089b2796a9577122bad0b458cbfcb282", + "server/utils/env.test.ts": "9a4a3b75f332b130978a593368206b992875c3fc5427463c98ee03bad6a32f61", + "server/utils/env.ts": "588f2c38bc12d9ca3a9884a8b01596eaa589cead31951dd501310874297e4c86", + "src/convex.ts": "1731bf0c6a180b4f329767e8ff6767cad55fe3047f7fa2b47b7a98b10d0d58d6", + "tsconfig.json": "10513719ec1a2d5c345d77fd807afa83a891ba9673e1a05cd03264f35639af9b" + }, + "optionalGeneratedFiles": [] + }, + "example": { + "baseRevision": "e52900c2f040a0c9aa895e4a605b4f3e84940652", + "hashes": { + "README.md": "31b768b8b9d031a7f95f912919ac3ea61e2e394a41d9762af00f0e6276e6ff03", + "capture.mjs": "4940347c92713f47965400fa9dca0908372ec2b3627612fccf40eb6b636a85a2", + "checkpoint-tools.mjs": "137fb2798a7e73e2db9a716d8cd3ea78fe3155ab0651ecae39f1e629634ec19c", + "checkpoint-tools.test.mjs": "1ea348330db8dab85694ac79cfec76e9d3af1729263a6a05cae61e10e41b2175", + "client-bridge.mjs": "a6760f1a9059e650fa19ef96403b16f7860390fce390262276020bd2cc7d5078", + "composition/app-backend.mjs": "4b2b617634026ab2d1d936c29e246f47eb2f2d31769ff204df745785f9f6f55d", + "composition/app-backend.test.mjs": "9fbfc7fdb393b95bdf803dfb77e44a5d4311e5812e33a987b371a6b4a32a3b41", + "composition/commerce-client.mjs": "f1f1a056bc76801df25111cb12fdcde501d507a5461ef8b15bfe2f57979cd03c", + "composition/export.mjs": "ccc84dee42d59b1d2b09f16aec2b77a774765dd6fab0f341b01f1043a2e88225", + "composition/memory-provider.mjs": "edf6a7567ead756dc4a5c15d5b5b14f4d4314db31e3aa3c01c8ec543754fcc31", + "composition/purchase-flow.mjs": "ce6f98426c36eab346e900ac06ed31f2d387e542c518a48c92a67f7bae147ec8", + "composition/receiver.test.mjs": "1559036d9f0804017eeff544ed0eef7d7328111515eaeb38f6787cba815a1151", + "composition/run.mjs": "0e7aa1c8c5cab79f06d9853fa5b91f0e15f0322b4574b5f1a97f1ea119fc9b14", + "consumer.mjs": "d8e168238270309157d52ca777fea30f1d37bae38b96e88148314c894bdb1b4c", + "contract.mjs": "c97b51ed48875303c382059af5dc321005d677ab2ea834a6e00c060308bc2ab2", + "erasure.mjs": "2dddb3ffd929c9d05333e88193f7cb3e5874ef5b29e68c68a1b25997d09788ea", + "export-docs.mjs": "47cf25c7ba1942fb833ac6b496c1e06b4ae06a61f6328330c6a6a4337c164f84", + "package-lock.json": "6f5333cc45203d6a27fec82c9370a8c25fef7faab591467dd2ff3c79acd6ae1c", + "package.json": "396fc93b7d50240739af2b817c172ffab8692245bd919de3b26ee713b56d455b", + "provider.mjs": "682b2c24797d5007373c1951641b2f6f156c933e654b2ad1865219be64b15d51", + "scenario.mjs": "b8ff9024afd67701b5f70916a61fa7d538eaec281aa4b5cc660e1c205932a32d", + "server.mjs": "b0f185a3954fbe1d7a4dd15f0dc8638afcf04e386ec730ae17a15860784d9e36", + "verify-checkpoints.mjs": "ece22b0480bafa41ad8c65e37a5705eaf67c3f8b47c62339f9b1b33a90edd6d2", + "verify-erasure.mjs": "65feaff2e8eb0a3247ecdbc0f511c8eef5e07a4c2c63155b07409ba7cb19be88", + "verify-stores.mjs": "6a9ea6071aebddac158435b8577f4b31914d902191f6cc1476683ea6d9bac3dd", + "verify.mjs": "d3bfb64cb50672f9671162d28c82c961b7b4ef65ede147e6653d5c41204ff8b2", + "webhooks.mjs": "4838bac7a9083440998409aa1ab543999495ea6a907036bc78ba2002feb588b2" + } + }, + "workspace": { + "baseRevision": "4be06d309ae4b1e1bc8ed1281a6527ec4b63aed7", + "hashes": { + "bun.lock": "341275b0262a7087fe094f85f30b9a543f69ee287fb74108386b2853b7cfaab8", + "package.json": "1eff664275a06c15e8ad718a7191facee0f4cfdb38651de00cc1c47da30d7357", + "packages/mcp-server/package.json": "81583f86c66b2e7cfc514ab06bcfe25951e4159397bba39ea3c56e1b6bb2f7c7", + "packages/mcp-server/src/kit-client.ts": "6f3db1c10a1b8bd91ca1b224f4cf2bc47b131362e3a2ed106ff794d95df585da", + "specs/commerce-protocol/examples/entitlement-granted-no-subscription.json": "e9cd83b903032b2a86d05cf58330c70d86a2cd392603e4c466353194f42f8213", + "specs/commerce-protocol/examples/entitlement-revoked.json": "e5306e8d4675d26317cd76a32005249351abd81e5fe142839cce245ec2854e1c", + "specs/commerce-protocol/examples/provider-capabilities.json": "f1ba640faf62838e58a307cc72bb97ca4dceedb2ea27f50ffc7675e025b76578", + "specs/commerce-protocol/examples/store-event-mapping.json": "907506ab65c3ced5a681936e7d116a90ef84ba3d315722c5b870ef144de7b546", + "specs/commerce-protocol/examples/subscription-canceled.json": "53336bfcb08fba307ee479cc264391d49250521ff0b463790eab96a6d12fd1d4", + "specs/commerce-protocol/examples/subscription-product-changed.json": "a213650fbf124f44a59df01113bf5ffe005df7f5c1facd2e002779c82fa68de7", + "specs/commerce-protocol/examples/subscription-renewed.json": "1d4f449aeb433f61c4e91f626e2d3c14da332da83245d2110eb32e7b97208939", + "specs/commerce-protocol/examples/verify-purchase-request.json": "069c09b7d691547206baa6e4fdfb49450de192c998d9234fb92fdb69ebf6e029", + "specs/commerce-protocol/examples/verify-purchase-result.json": "de3c2a1f5924900c4e30628f27296b5ec034f53e8b38cc739eb363fbd3ce002a", + "specs/commerce-protocol/generated/bindings/graphql-operations.json": "e32115193c8175fd885221346342af8b2e7d7753632af4895b65e4c44ee57d9e", + "specs/commerce-protocol/generated/bindings/http-binding.json": "fbf596f8c655146fa3eb6b8b6882dcee77556202333272681e8af511916f53d0", + "specs/commerce-protocol/generated/bindings/introspection-signature.json": "6e0bacf0f882b5e0f76fdd739f43692de6e33d60a8a7e1734c835efe7f5f64f1", + "specs/commerce-protocol/generated/bindings/operations-sdl.json": "d4e51dde69fa56e140975cb3d4c98f2b77ef2c13928cc9d7aac5c43bb47373c3", + "specs/commerce-protocol/generated/openapi/commerce-protocol.openapi.json": "23d2195f5efb5e968826d49221b88491f2c89fe6af152e35c234041b16cc1ba5", + "specs/commerce-protocol/generated/schemas/commerce-event.schema.json": "999cf57c40d49c1af66bac09a0b495939bdecdca593b15f0d06d74f146196234", + "specs/commerce-protocol/generated/schemas/commerce-protocol.bundle.schema.json": "58dad9b450afa8a4aee836023f95e23da656e8238a1356569b346e48e00bf753", + "specs/commerce-protocol/generated/schemas/operations.schema.json": "4502d4e565cfc67cbd662e96acf2547bf65f8e4b3687346ead38e24d6e7a6c20", + "specs/commerce-protocol/generated/schemas/primitives.schema.json": "72f26596b27b281b7690dded54e494bff64c0541f0d90596abffb17b3b082ae0", + "specs/commerce-protocol/generated/schemas/provider-capabilities.schema.json": "1968dfdbc0487f78fc2c3e034e4ff9fc8308ab3f341d073e9b6a57fa3f635469", + "specs/commerce-protocol/generated/schemas/store-event-mapping.schema.json": "1de55452ec4646e275895cc40aeb63052ad61b7934fd3c66944f54eb53686513", + "specs/commerce-protocol/generated/vectors/lifecycle.json": "c301783a1e8a8f94439e47bb4b65a358a0ff3a29eca23e1144c85fc8c7dcd3f5", + "specs/commerce-protocol/generated/vectors/operations.json": "d3f763152748cde31d7419f348eb29bedf1027fcaa16235070791553416192a0", + "specs/commerce-protocol/package.json": "15413af6492fa69ab51e11143f0750ea61346a506f58e84460cd3ee7041cb5f8", + "specs/commerce-protocol/src/index.mjs": "57f2b16e67fa5674eea144e91c44ba65e7e9ea8d6fb756280757f2708d8c5ecb" + }, + "optionalGeneratedFiles": [] + } + }, + "runtime": { + "bun": "1.3.13", + "convex": "1.44.0" + }, + "command": "bun --conditions=openiap-source packages/kit/scripts/docs/run-commerce-interop.mjs ../openiap-commerce-protocol-example ", + "configurationChanges": [ + "Commerce base URL and server credential", + "Separate webhook signing keys, each bound to its provider and project", + "Example fixture store adapter configured to recognize the same synthetic Google token" + ], + "recordedAt": "2026-09-08T22:59:10.235Z", + "checks": [ + "example: app and receiver endpoints remain unchanged", + "example: empty provider gives no access", + "example: actual verification accepts fixture", + "example: verification alone does not grant access", + "example: unchanged app fulfills the purchase", + "example: repeated fulfillment is idempotent", + "example: body cannot select account identity", + "example: another user cannot claim the purchase", + "example: publishable verification credentials cannot erase", + "example: same receiver persists an authenticated grant", + "example: cancellation stops renewal but keeps paid access", + "iapkit: app and receiver endpoints remain unchanged", + "iapkit: empty provider gives no access", + "iapkit: actual verification accepts fixture", + "iapkit: verification alone does not grant access", + "iapkit: unchanged app fulfills the purchase", + "iapkit: repeated fulfillment is idempotent", + "iapkit: body cannot select account identity", + "iapkit: another user cannot claim the purchase", + "iapkit: publishable verification credentials cannot erase", + "iapkit: same receiver persists an authenticated grant", + "iapkit: cancellation stops renewal but keeps paid access", + "example: app and receiver endpoints remain unchanged", + "Switching back restores the same persisted access", + "IAPKit 503 leaves a durable pending delivery", + "IAPKit pending deliveries survive process restart", + "example: cancellation retry reaches unchanged receiver", + "iapkit: cancellation retry reaches unchanged receiver", + "Lost acknowledgements and receiver restart create no duplicate effects", + "example: app and receiver endpoints remain unchanged", + "example: access expires before a store notification", + "iapkit: app and receiver endpoints remain unchanged", + "iapkit: access expires before a store notification", + "Repeated IAPKit store notification is deduplicated", + "example: receiver observes revocation", + "iapkit: receiver observes revocation", + "App account deletion is accepted", + "App completes erasure across both configured providers", + "Deleted session cannot submit a late purchase", + "example: erased user has no access", + "example: repeated erasure returns the same completed job", + "iapkit: erased user has no access", + "iapkit: repeated erasure returns the same completed job", + "IAPKit persisted subscription, event and job identities are removed", + "Example purchase identity is removed", + "Previously delivered app event identities are removed", + "Late signed redeliveries after erasure and restart cannot restore identities", + "Consumer source files are byte-for-byte unchanged during replacement", + "apple/example: keeps the same app and receiver", + "apple/example: starts without access", + "apple/example: unverified evidence cannot bind", + "apple/example: verifies the store-specific input", + "apple/example: verification alone grants no account access", + "apple/example: app purchase succeeds", + "apple/example: app receives access", + "apple/example: binding is repeatable", + "apple/example: another account cannot claim the purchase", + "apple/example: access includes only verified products", + "apple/example: tokenless access does not leak store evidence", + "apple/iapkit: keeps the same app and receiver", + "apple/iapkit: starts without access", + "apple/iapkit: unverified evidence cannot bind", + "apple/iapkit: verifies the store-specific input", + "apple/iapkit: verification alone grants no account access", + "apple/iapkit: app purchase succeeds", + "apple/iapkit: app receives access", + "apple/iapkit: binding is repeatable", + "apple/iapkit: another account cannot claim the purchase", + "apple/iapkit: access includes only verified products", + "apple/iapkit: tokenless access does not leak store evidence", + "apple: switching back needs no consumer edit", + "apple: the app accepts account erasure", + "apple: both providers complete erasure", + "apple/example: erased account has no access", + "apple/example: erased evidence cannot bind again", + "apple/iapkit: erased account has no access", + "apple/iapkit: erased evidence cannot bind again", + "apple: an erased session cannot submit another purchase", + "apple: IAPKit removes account identity from persisted purchases", + "amazon/example: keeps the same app and receiver", + "amazon/example: starts without access", + "amazon/example: unverified evidence cannot bind", + "amazon/example: verifies the store-specific input", + "amazon/example: verification alone grants no account access", + "amazon/example: app purchase succeeds", + "amazon/example: app receives access", + "amazon/example: binding is repeatable", + "amazon/example: another account cannot claim the purchase", + "amazon/example: access includes only verified products", + "amazon/example: tokenless access does not leak store evidence", + "amazon/example: does not invent subscription lifecycle records", + "amazon/example: rejects another store account in the app session", + "amazon/example: an upstream outage fails the access read", + "amazon/example: a negative store recheck removes access", + "amazon/example: rechecked ownership restores access", + "amazon/iapkit: keeps the same app and receiver", + "amazon/iapkit: starts without access", + "amazon/iapkit: unverified evidence cannot bind", + "amazon/iapkit: verifies the store-specific input", + "amazon/iapkit: verification alone grants no account access", + "amazon/iapkit: app purchase succeeds", + "amazon/iapkit: app receives access", + "amazon/iapkit: binding is repeatable", + "amazon/iapkit: another account cannot claim the purchase", + "amazon/iapkit: access includes only verified products", + "amazon/iapkit: tokenless access does not leak store evidence", + "amazon/iapkit: does not invent subscription lifecycle records", + "amazon/iapkit: rejects another store account in the app session", + "amazon/iapkit: an upstream outage fails the access read", + "amazon/iapkit: a negative store recheck removes access", + "amazon/iapkit: rechecked ownership restores access", + "amazon: switching back needs no consumer edit", + "amazon: the app accepts account erasure", + "amazon: both providers complete erasure", + "amazon/example: erased account has no access", + "amazon/example: erased evidence cannot bind again", + "amazon/iapkit: erased account has no access", + "amazon/iapkit: erased evidence cannot bind again", + "amazon: an erased session cannot submit another purchase", + "amazon: IAPKit removes account identity from persisted purchases", + "horizon/example: keeps the same app and receiver", + "horizon/example: starts without access", + "horizon/example: unverified evidence cannot bind", + "horizon/example: verifies the store-specific input", + "horizon/example: verification alone grants no account access", + "horizon/example: app purchase succeeds", + "horizon/example: app receives access", + "horizon/example: binding is repeatable", + "horizon/example: another account cannot claim the purchase", + "horizon/example: access includes only verified products", + "horizon/example: tokenless access does not leak store evidence", + "horizon/example: does not invent subscription lifecycle records", + "horizon/example: rejects another store account in the app session", + "horizon/example: an upstream outage fails the access read", + "horizon/example: a negative store recheck removes access", + "horizon/example: rechecked ownership restores access", + "horizon/iapkit: keeps the same app and receiver", + "horizon/iapkit: starts without access", + "horizon/iapkit: unverified evidence cannot bind", + "horizon/iapkit: verifies the store-specific input", + "horizon/iapkit: verification alone grants no account access", + "horizon/iapkit: app purchase succeeds", + "horizon/iapkit: app receives access", + "horizon/iapkit: binding is repeatable", + "horizon/iapkit: another account cannot claim the purchase", + "horizon/iapkit: access includes only verified products", + "horizon/iapkit: tokenless access does not leak store evidence", + "horizon/iapkit: does not invent subscription lifecycle records", + "horizon/iapkit: rejects another store account in the app session", + "horizon/iapkit: an upstream outage fails the access read", + "horizon/iapkit: a negative store recheck removes access", + "horizon/iapkit: rechecked ownership restores access", + "horizon: switching back needs no consumer edit", + "horizon: the app accepts account erasure", + "horizon: both providers complete erasure", + "horizon/example: erased account has no access", + "horizon/example: erased evidence cannot bind again", + "horizon/iapkit: erased account has no access", + "horizon/iapkit: erased evidence cannot bind again", + "horizon: an erased session cannot submit another purchase", + "horizon: IAPKit removes account identity from persisted purchases", + "Source revisions remain unchanged throughout execution" + ], + "checkCount": 162, + "trace": [ + { + "provider": "example", + "path": "/access", + "method": "GET", + "status": 200, + "result": { + "userId": "interop_alice", + "productIds": [], + "subscriptions": [] + } + }, + { + "provider": "example", + "path": "/access", + "method": "GET", + "status": 200, + "result": { + "userId": "interop_alice", + "productIds": [], + "subscriptions": [] + } + }, + { + "provider": "example", + "path": "/purchase", + "method": "POST", + "status": 200, + "result": { + "userId": "interop_alice", + "productIds": [ + "premium.monthly" + ], + "subscriptions": [ + { + "productId": "premium.monthly", + "state": "Active", + "active": true, + "store": "google", + "expiresAt": 1788908348743, + "willRenew": true + } + ] + } + }, + { + "provider": "example", + "path": "/purchase", + "method": "POST", + "status": 200, + "result": { + "userId": "interop_alice", + "productIds": [ + "premium.monthly" + ], + "subscriptions": [ + { + "productId": "premium.monthly", + "state": "Active", + "active": true, + "store": "google", + "expiresAt": 1788908348743, + "willRenew": true + } + ] + } + }, + { + "provider": "iapkit", + "path": "/access", + "method": "GET", + "status": 200, + "result": { + "userId": "interop_alice", + "productIds": [], + "subscriptions": [] + } + }, + { + "provider": "iapkit", + "path": "/access", + "method": "GET", + "status": 200, + "result": { + "userId": "interop_alice", + "productIds": [], + "subscriptions": [] + } + }, + { + "provider": "iapkit", + "path": "/purchase", + "method": "POST", + "status": 200, + "result": { + "userId": "interop_alice", + "productIds": [ + "premium.monthly" + ], + "subscriptions": [ + { + "productId": "premium.monthly", + "state": "Active", + "active": true, + "store": "google", + "expiresAt": 1788908348743, + "renewsAt": 1788908348743, + "willRenew": true, + "startedAt": 1788908304065, + "updatedAt": 1788908304108 + } + ] + } + }, + { + "provider": "iapkit", + "path": "/purchase", + "method": "POST", + "status": 200, + "result": { + "userId": "interop_alice", + "productIds": [ + "premium.monthly" + ], + "subscriptions": [ + { + "productId": "premium.monthly", + "state": "Active", + "active": true, + "store": "google", + "expiresAt": 1788908348743, + "renewsAt": 1788908348743, + "willRenew": true, + "startedAt": 1788908304065, + "updatedAt": 1788908304131 + } + ] + } + }, + { + "provider": "example", + "path": "/access", + "method": "GET", + "status": 200, + "result": { + "userId": "interop_alice", + "productIds": [ + "premium.monthly" + ], + "subscriptions": [ + { + "productId": "premium.monthly", + "state": "Active", + "active": true, + "store": "google", + "expiresAt": 1788908348743, + "willRenew": false + } + ] + } + }, + { + "provider": "example", + "path": "/access", + "method": "GET", + "status": 200, + "result": { + "userId": "interop_alice", + "productIds": [], + "subscriptions": [] + } + }, + { + "provider": "iapkit", + "path": "/access", + "method": "GET", + "status": 200, + "result": { + "userId": "interop_alice", + "productIds": [], + "subscriptions": [] + } + }, + { + "provider": "iapkit", + "path": "/account", + "method": "DELETE", + "status": 200, + "result": { + "accepted": true, + "status": "queued" + } + }, + { + "provider": "iapkit", + "path": "/purchase", + "method": "POST", + "status": 401, + "result": null + }, + { + "store": "apple", + "path": "/purchase", + "method": "POST", + "status": 200, + "result": { + "userId": "store_apple", + "productIds": [ + "premium.monthly" + ], + "subscriptions": [ + { + "productId": "premium.monthly", + "state": "Active", + "active": true, + "store": "apple", + "expiresAt": 1788911949294, + "willRenew": true + } + ] + } + }, + { + "store": "apple", + "path": "/purchase", + "method": "POST", + "status": 200, + "result": { + "userId": "store_apple", + "productIds": [ + "premium.monthly" + ], + "subscriptions": [ + { + "productId": "premium.monthly", + "state": "Active", + "active": true, + "store": "apple", + "expiresAt": 1788911903744, + "startedAt": 1788908349332, + "updatedAt": 1788908349369 + } + ] + } + }, + { + "store": "apple", + "path": "/access", + "method": "GET", + "status": 200, + "result": { + "userId": "store_apple", + "productIds": [ + "premium.monthly" + ], + "subscriptions": [ + { + "productId": "premium.monthly", + "state": "Active", + "active": true, + "store": "apple", + "expiresAt": 1788911949294, + "willRenew": true + } + ] + } + }, + { + "store": "apple", + "path": "/account", + "method": "DELETE", + "status": 200, + "result": { + "accepted": true, + "status": "queued" + } + }, + { + "store": "apple", + "path": "/purchase", + "method": "POST", + "status": 401, + "result": null + }, + { + "store": "amazon", + "path": "/purchase", + "method": "POST", + "status": 200, + "result": { + "userId": "store_amazon", + "productIds": [ + "premium.monthly" + ], + "subscriptions": [] + } + }, + { + "store": "amazon", + "path": "/purchase", + "method": "POST", + "status": 403, + "result": null + }, + { + "store": "amazon", + "path": "/access", + "method": "GET", + "status": 503, + "result": { + "error": "Commerce provider unavailable; retry the request." + } + }, + { + "store": "amazon", + "path": "/purchase", + "method": "POST", + "status": 200, + "result": { + "userId": "store_amazon", + "productIds": [ + "premium.monthly" + ], + "subscriptions": [] + } + }, + { + "store": "amazon", + "path": "/purchase", + "method": "POST", + "status": 403, + "result": null + }, + { + "store": "amazon", + "path": "/access", + "method": "GET", + "status": 503, + "result": { + "error": "Commerce provider unavailable; retry the request." + } + }, + { + "store": "amazon", + "path": "/access", + "method": "GET", + "status": 200, + "result": { + "userId": "store_amazon", + "productIds": [ + "premium.monthly" + ], + "subscriptions": [] + } + }, + { + "store": "amazon", + "path": "/account", + "method": "DELETE", + "status": 200, + "result": { + "accepted": true, + "status": "queued" + } + }, + { + "store": "amazon", + "path": "/purchase", + "method": "POST", + "status": 401, + "result": null + }, + { + "store": "horizon", + "path": "/purchase", + "method": "POST", + "status": 200, + "result": { + "userId": "store_horizon", + "productIds": [ + "premium.monthly" + ], + "subscriptions": [] + } + }, + { + "store": "horizon", + "path": "/purchase", + "method": "POST", + "status": 403, + "result": null + }, + { + "store": "horizon", + "path": "/access", + "method": "GET", + "status": 503, + "result": { + "error": "Commerce provider unavailable; retry the request." + } + }, + { + "store": "horizon", + "path": "/purchase", + "method": "POST", + "status": 200, + "result": { + "userId": "store_horizon", + "productIds": [ + "premium.monthly" + ], + "subscriptions": [] + } + }, + { + "store": "horizon", + "path": "/purchase", + "method": "POST", + "status": 403, + "result": null + }, + { + "store": "horizon", + "path": "/access", + "method": "GET", + "status": 503, + "result": { + "error": "Commerce provider unavailable; retry the request." + } + }, + { + "store": "horizon", + "path": "/access", + "method": "GET", + "status": 200, + "result": { + "userId": "store_horizon", + "productIds": [ + "premium.monthly" + ], + "subscriptions": [] + } + }, + { + "store": "horizon", + "path": "/account", + "method": "DELETE", + "status": 200, + "result": { + "accepted": true, + "status": "queued" + } + }, + { + "store": "horizon", + "path": "/purchase", + "method": "POST", + "status": 401, + "result": null + } + ], + "consumerHashes": { + "composition/app-backend.mjs": "4b2b617634026ab2d1d936c29e246f47eb2f2d31769ff204df745785f9f6f55d", + "composition/commerce-client.mjs": "f1f1a056bc76801df25111cb12fdcde501d507a5461ef8b15bfe2f57979cd03c", + "consumer.mjs": "d8e168238270309157d52ca777fea30f1d37bae38b96e88148314c894bdb1b4c", + "webhooks.mjs": "4838bac7a9083440998409aa1ab543999495ea6a907036bc78ba2002feb588b2", + "erasure.mjs": "2dddb3ffd929c9d05333e88193f7cb3e5874ef5b29e68c68a1b25997d09788ea", + "contract.mjs": "c97b51ed48875303c382059af5dc321005d677ab2ea834a6e00c060308bc2ab2" + }, + "changedConsumerFiles": [], + "providerOrder": [ + "example", + "iapkit", + "example" + ], + "backendVersion": "precompiled-2026-08-25-7cce8fb", + "scope": { + "actual": [ + "IAPKit Hono routes and handlers", + "Apple, Google, Amazon and Horizon verification action bodies; Google RTDN action", + "Amazon and Horizon stored purchase binding, fresh ownership reads and erasure", + "Convex persistence, authorization, subscription transitions, erasure scheduler and delivery leases", + "IAPKit outbound signing and result recording", + "Original example SQLite provider", + "One app backend and one receiver, real loopback HTTP", + "Actual Convex process restart with pending deliveries" + ], + "fixtures": [ + "Google Play HTTP and OIDC, Amazon RVS and Meta Graph responses", + "Apple signed-transaction verifier, Server API and test signing-key loader at their external boundaries", + "Paid subscription and app sessions", + "HTTPS destination transport redirected to the loopback receiver through the existing worker injection" + ], + "excluded": [ + "Real store purchase, device SDK integration and store cryptographic verification", + "Public HTTPS DNS/TLS delivery", + "Automatic migration of existing purchases between providers", + "Unrelated image processing and scheduled maintenance crons" + ] + } +} diff --git a/packages/docs/public/commerce-composition/iapkit-source-manifest.json b/packages/docs/public/commerce-composition/iapkit-source-manifest.json new file mode 100644 index 000000000..d4305f348 --- /dev/null +++ b/packages/docs/public/commerce-composition/iapkit-source-manifest.json @@ -0,0 +1,37 @@ +{ + "example/client-bridge.mjs": "a6760f1a9059e650fa19ef96403b16f7860390fce390262276020bd2cc7d5078", + "example/provider.mjs": "682b2c24797d5007373c1951641b2f6f156c933e654b2ad1865219be64b15d51", + "example/scenario.mjs": "b8ff9024afd67701b5f70916a61fa7d538eaec281aa4b5cc660e1c205932a32d", + "example/composition/app-backend.mjs": "4b2b617634026ab2d1d936c29e246f47eb2f2d31769ff204df745785f9f6f55d", + "example/verify-stores.mjs": "6a9ea6071aebddac158435b8577f4b31914d902191f6cc1476683ea6d9bac3dd", + "example/verify.mjs": "d3bfb64cb50672f9671162d28c82c961b7b4ef65ede147e6653d5c41204ff8b2", + "example/webhooks.mjs": "4838bac7a9083440998409aa1ab543999495ea6a907036bc78ba2002feb588b2", + "example/verify-erasure.mjs": "65feaff2e8eb0a3247ecdbc0f511c8eef5e07a4c2c63155b07409ba7cb19be88", + "example/README.md": "31b768b8b9d031a7f95f912919ac3ea61e2e394a41d9762af00f0e6276e6ff03", + "example/composition/commerce-client.mjs": "f1f1a056bc76801df25111cb12fdcde501d507a5461ef8b15bfe2f57979cd03c", + "example/consumer.mjs": "d8e168238270309157d52ca777fea30f1d37bae38b96e88148314c894bdb1b4c", + "example/erasure.mjs": "2dddb3ffd929c9d05333e88193f7cb3e5874ef5b29e68c68a1b25997d09788ea", + "example/contract.mjs": "c97b51ed48875303c382059af5dc321005d677ab2ea834a6e00c060308bc2ab2", + "kit/server/api/commerce/handlers.ts": "0a17df7e9b4629052e9ce7d95aa80c11e8ff36b34738e5046b169253ba4f44d2", + "kit/server/api/commerce/routes.test.ts": "79a0af6b4c2c9015d8a2b0948e96d8fd614136ee61e42ae89b504ee2f75b4a0c", + "kit/convex/purchases/mutation.ts": "163fa4486aec7ef4eea3d3fdcb5d53f77d02e5155482e2556cb510c7b21bbb49", + "kit/convex/purchases/ownership.test.ts": "4c0b55f246e4df86af2ebe2f37da0c614f245c105a292f36bb0402332ad2d996", + "kit/convex/purchases/action.ts": "55b35837dcfc50a1ab5699376e00d8c5397b737ac256fc0e99fd6bcd11b0ef72", + "kit/convex/subscriptions/mutation.ts": "b780bab187d90d93eb4f7c5f9e8c5edde2ede313023a189b116a691b7506bade", + "kit/convex/subscriptions/internal.test.ts": "590736992fcd956114a52a8afb7556293ba6b08958202a6f85cc9dd52862d310", + "kit/convex/subscriptions/query.ts": "f6de34dfbc28c8fcf2111b3063a21b95d1e58940bbb79665711f803de9b1afe0", + "kit/convex/subscriptions/query.test.ts": "f3621aa334a48fcdb4a0b71f0b5d2c1dd6a4ee44c6a3813b81012e5d12269b68", + "kit/server/api/commerce/conformance.test.ts": "899281919296be4f38de4e6b48b059b6e0a6cca90558bc3758dc9bcd559e1435", + "kit/convex/commerce/delivery.ts": "05941b61f771e5437e98f4f10baed4865ccb7c93a27871e6b29cfe8fb265c5cc", + "kit/convex/commerce/delivery.test.ts": "31cd2dae1ec8da9f2f2a2159a622587ffbe895380c04878eed9f8726b4722bef", + "kit/convex/subscriptions/internal.ts": "8c246cc7bb3869cd603991ddd722bd7c375790481402dbefdfe5eb8e1341fe8f", + "kit/convex/subscriptions/mutation.test.ts": "dd89c082b0257562961ced0966edad30911a7ec806648fcfc2828b42c3084ab2", + "kit/server/api/commerce/routes.ts": "e8383e409de76264dfe04d3aaec00c57b7ae2e0204a83744cd653b8c10e3b4b1", + "kit/convex/commerce/capabilities.ts": "2e2158922e05ed919bb8c5de5e581d180466cbf4f2e803f3684708f92b52c2f8", + "kit/convex/commerce/spec.conformance.test.ts": "d6a371f0fa4ae8c288b2358b322ff4225d03cf5071fe591c689db0b77c621719", + "kit/server/api/commerce/graphql.ts": "8c45733a958c875d5a123e4fd0b1fa56981f9adb0fc6c80104fb4ce6727448e2", + "kit/scripts/docs/commerce-interop-fixture.ts": "cb06b02f482a052134c9a9b17c92e9abae6fc35fed1fddb4b6ad0563d6c437be", + "kit/scripts/docs/commerce-source-snapshot.mjs": "36facd09bb63335cd68efa9c78da5ec10e11aa3bc61cd8bdbcd4d64c31e4293a", + "kit/scripts/docs/commerce-store-coverage.mjs": "a60eb6a2dc880672726b7a7894e59cabf59370f12e4edddb53cb17ba2ca880a9", + "kit/scripts/docs/run-commerce-interop.mjs": "943cbbce2d4fca94659e6646494ef1091bc4a1140a4ba7be6d233605755dd8d9" +} diff --git a/packages/docs/public/commerce-composition/iapkit-source.json b/packages/docs/public/commerce-composition/iapkit-source.json new file mode 100644 index 000000000..3b4531a8d --- /dev/null +++ b/packages/docs/public/commerce-composition/iapkit-source.json @@ -0,0 +1,37 @@ +{ + "example/client-bridge.mjs": "import assert from \"node:assert/strict\";\nimport { operation, validate } from \"./contract.mjs\";\n\n// Run on the app backend; the provider still authenticates the store evidence.\nexport function toVerifyPurchaseInput(purchase, context = {}) {\n const { store, purchaseToken } = purchase ?? {};\n let input;\n const required = (value) => {\n if (typeof value !== \"string\" || !value.trim())\n throw new Error(\"Purchase evidence is required\");\n return value;\n };\n switch (store) {\n case \"apple\":\n input = { store, apple: { jws: required(purchaseToken) } };\n break;\n case \"google\":\n input = { store, google: { purchaseToken: required(purchaseToken) } };\n break;\n case \"amazon\":\n input = {\n store,\n amazon: {\n userId: required(context.storeUserId),\n receiptId: required(purchaseToken),\n ...(context.amazonSandbox === true ? { sandbox: true } : {}),\n },\n };\n break;\n case \"horizon\":\n input = {\n store,\n horizon: {\n userId: required(context.storeUserId),\n sku: required(purchase.productId),\n },\n };\n break;\n default:\n throw new Error(\"Unsupported purchase store\");\n }\n if (!validate(operation(\"verifyPurchase\").input, input))\n throw new Error(\"Purchase evidence does not match the protocol input\");\n return input;\n}\n\nexport function runBridgeDemo() {\n const checks = [];\n for (const store of [\"apple\", \"google\"]) {\n const token = `fictional-${store}-evidence`;\n const input = toVerifyPurchaseInput({\n store,\n purchaseToken: token,\n productId: \"premium.monthly\",\n userId: \"untrusted-client-claim\",\n });\n assert.deepEqual(input, {\n store,\n ...(store === \"apple\"\n ? { apple: { jws: token } }\n : { google: { purchaseToken: token } }),\n });\n checks.push(`${store}: maps evidence without forwarding client identity`);\n assert(validate(operation(\"verifyPurchase\").input, input));\n checks.push(`${store}: matches the installed verification input schema`);\n }\n for (const store of [\"amazon\", \"horizon\"]) {\n const input = toVerifyPurchaseInput(\n {\n store,\n purchaseToken: \"receipt-1\",\n productId: \"premium.monthly\",\n userId: \"untrusted-app-user\",\n },\n { storeUserId: \"authenticated-store-user\", amazonSandbox: true },\n );\n assert.deepEqual(\n input,\n store === \"amazon\"\n ? {\n store,\n amazon: {\n userId: \"authenticated-store-user\",\n receiptId: \"receipt-1\",\n sandbox: true,\n },\n }\n : {\n store,\n horizon: {\n userId: \"authenticated-store-user\",\n sku: \"premium.monthly\",\n },\n },\n );\n checks.push(\n `${store}: uses server-selected store identity, distinct from the app user`,\n );\n assert(validate(operation(\"verifyPurchase\").input, input));\n checks.push(`${store}: matches the installed verification input schema`);\n }\n for (const [label, purchase] of [\n [\"missing purchase\", null],\n [\"unknown store\", { store: \"unknown\", purchaseToken: \"fictional\" }],\n [\n \"Amazon requires its authenticated store user\",\n { store: \"amazon\", purchaseToken: \"fictional\" },\n ],\n [\n \"Horizon requires its authenticated store user\",\n { store: \"horizon\", purchaseToken: \"fictional\" },\n ],\n [\"missing evidence\", { store: \"apple\" }],\n [\"blank evidence\", { store: \"google\", purchaseToken: \" \" }],\n [\"non-string evidence\", { store: \"apple\", purchaseToken: 123 }],\n [\n \"oversized evidence\",\n { store: \"apple\", purchaseToken: \"x\".repeat(16385) },\n ],\n ]) {\n assert.throws(() => toVerifyPurchaseInput(purchase), Error);\n checks.push(`Rejects ${label}`);\n }\n return checks;\n}\n\nif (import.meta.main)\n console.log(\n `Client boundary: ${runBridgeDemo().length} checks passed against the installed contract. Fixture fields only; no SDK checkout or store contacted.`,\n );\n", + "example/provider.mjs": "import { Database } from \"bun:sqlite\";\nimport { createHash, randomUUID } from \"node:crypto\";\nimport {\n providerCapabilitiesSchema,\n COMMERCE_EVENT_VERSION,\n HTTP_BINDING,\n} from \"openiap-commerce-protocol\";\nimport { protocolError, validate } from \"./contract.mjs\";\nimport { createErasureLedger } from \"./erasure.mjs\";\n\nexport const FIXTURE = Object.freeze({\n store: \"fixture\",\n evidence: \"local-purchase-alice\",\n userId: \"demo_alice\",\n productId: \"premium.monthly\",\n startsAt: Date.UTC(2026, 8, 7, 9),\n expiresAt: Date.UTC(2026, 9, 7, 9),\n});\nexport const CREDENTIALS = Object.freeze({\n verification: \"Bearer local-demo-verification\",\n server: \"Bearer local-demo-server\",\n});\nconst fingerprint = (value) => createHash(\"sha256\").update(value).digest(\"hex\");\n\nexport function isEntitled(state, expiresAt, now) {\n return (\n (state === \"Active\" || state === \"InGracePeriod\") &&\n (expiresAt == null || now < expiresAt)\n );\n}\n\n// This adapter recognizes one fictional purchase; it never contacts a store.\nfunction fixtureEvidence(input) {\n switch (input.store) {\n case \"apple\":\n return input.apple?.jws;\n case \"google\":\n return input.google?.purchaseToken;\n case \"amazon\":\n return (\n input.amazon &&\n JSON.stringify([\n input.amazon.userId,\n input.amazon.receiptId,\n input.amazon.sandbox === true,\n ])\n );\n case \"horizon\":\n return (\n input.horizon &&\n JSON.stringify([input.horizon.userId, input.horizon.sku])\n );\n default:\n return input.evidence;\n }\n}\n\nfunction verifyFixture(input, fixture) {\n if (input.store !== fixture.store) return { error: \"UNSUPPORTED_STORE\" };\n const evidence = fixtureEvidence(input);\n if (typeof evidence !== \"string\") return { error: \"INVALID_REQUEST\" };\n if (evidence === \"local-upstream-outage\") {\n return { error: \"VERIFICATION_FAILED\" };\n }\n const current = fixture.currentVerdict?.();\n if (current === \"outage\") return { error: \"VERIFICATION_FAILED\" };\n return { accepted: evidence === fixture.evidence && current !== false };\n}\n\nexport function createProvider(path, now, fixture = FIXTURE) {\n const db = new Database(path, { create: true });\n db.exec(`\n PRAGMA journal_mode = WAL;\n CREATE TABLE IF NOT EXISTS purchases (\n fingerprint TEXT PRIMARY KEY, user_id TEXT, product_id TEXT NOT NULL,\n state TEXT NOT NULL, expires_at INTEGER NOT NULL, will_renew INTEGER NOT NULL,\n observed_at INTEGER NOT NULL, entitlement_granted INTEGER NOT NULL DEFAULT 0\n );\n CREATE TABLE IF NOT EXISTS observations (id TEXT PRIMARY KEY);\n CREATE TABLE IF NOT EXISTS outbox (\n event_id TEXT PRIMARY KEY, delivery_id TEXT NOT NULL, body TEXT NOT NULL,\n attempts INTEGER NOT NULL DEFAULT 0, status TEXT NOT NULL DEFAULT 'pending',\n next_at INTEGER NOT NULL DEFAULT 0\n );\n `);\n const erasures = createErasureLedger(db);\n if (\n !db\n .query(\"PRAGMA table_info(purchases)\")\n .all()\n .some((column) => column.name === \"erased\")\n )\n db.exec(\n \"ALTER TABLE purchases ADD COLUMN erased INTEGER NOT NULL DEFAULT 0\",\n );\n\n function snapshot(row) {\n return {\n productId: row.product_id,\n state: row.state,\n active: isEntitled(row.state, row.expires_at, now()),\n store: fixture.store,\n expiresAt: row.expires_at,\n willRenew: Boolean(row.will_renew),\n };\n }\n\n function rowsFor(userId) {\n return db.query(\"SELECT * FROM purchases WHERE user_id = ?\").all(userId);\n }\n\n function entitlements(userId) {\n if (fixture.pointInTime) {\n const current = fixture.currentVerdict?.();\n if (current === \"outage\") return { error: \"VERIFICATION_FAILED\" };\n return {\n userId,\n productIds:\n current === false\n ? []\n : [...new Set(rowsFor(userId).map((row) => row.product_id))],\n subscriptions: [],\n };\n }\n const subscriptions = rowsFor(userId)\n .map(snapshot)\n .filter((row) => row.active);\n return {\n userId,\n productIds: [...new Set(subscriptions.map((row) => row.productId))],\n subscriptions,\n };\n }\n\n const eventTypes = [\n \"entitlement.granted\",\n \"subscription.canceled\",\n \"subscription.expired\",\n \"entitlement.revoked\",\n ];\n const capabilityNames = Object.keys(\n providerCapabilitiesSchema.$defs.StoreCapabilities.properties,\n );\n const supported = new Set([\n \"initialValidation\",\n \"subscriptions\",\n \"entitlements\",\n \"serverNotifications\",\n \"expiration\",\n ]);\n const capabilities = {\n specVersion: HTTP_BINDING.protocolVersion,\n implementation: {\n name: \"Commerce Protocol Example — fictional fixture store\",\n },\n eventTypes,\n stores: {\n [fixture.store]: Object.fromEntries(\n capabilityNames.map((key) => [\n key,\n {\n provider:\n supported.has(key) &&\n (!fixture.pointInTime ||\n [\"initialValidation\", \"entitlements\"].includes(key)),\n implementation:\n supported.has(key) &&\n (!fixture.pointInTime ||\n [\"initialValidation\", \"entitlements\"].includes(key)),\n notes:\n \"Local fixture demonstration only; no real store integration or profile conformance claim.\",\n },\n ]),\n ),\n },\n };\n\n function enqueue(eventType, row, occurredAt, sourceStoreEventId) {\n const body = {\n eventId: randomUUID(),\n eventType,\n eventVersion: COMMERCE_EVENT_VERSION,\n occurredAt,\n processedAt: now(),\n store: fixture.store,\n environment: \"local-fixture\",\n projectId: \"commerce_example\",\n productId: row.product_id,\n ...(row.user_id ? { userId: row.user_id } : {}),\n subscription: snapshot(row),\n ...(sourceStoreEventId ? { sourceStoreEventId } : {}),\n };\n if (!validate(\"#/$defs/CommerceEvent\", body))\n throw new Error(\"Invalid event\");\n db.query(\n \"INSERT INTO outbox (event_id, delivery_id, body) VALUES (?, ?, ?)\",\n ).run(body.eventId, randomUUID(), JSON.stringify(body));\n }\n\n const handlers = {\n providerCapabilities: () => capabilities,\n verifyPurchase(input) {\n const verdict = verifyFixture(input, fixture);\n if (verdict.error) return verdict;\n if (verdict.accepted) {\n db.query(\n `INSERT OR IGNORE INTO purchases (fingerprint, user_id, product_id, state, expires_at, will_renew, observed_at) VALUES (?, NULL, ?, 'Active', ?, 1, ?)`,\n ).run(\n fingerprint(fixtureEvidence(input)),\n fixture.productId,\n fixture.expiresAt,\n fixture.startsAt,\n );\n }\n const expired = !fixture.pointInTime && now() >= fixture.expiresAt;\n return {\n store: fixture.store,\n isValid: verdict.accepted && !expired,\n state: !verdict.accepted\n ? \"INAUTHENTIC\"\n : expired\n ? \"EXPIRED\"\n : \"ENTITLED\",\n ...(verdict.accepted ? { productId: fixture.productId } : {}),\n environment: \"local-fixture\",\n };\n },\n bindPurchase(input) {\n if (input.store !== fixture.store) return { error: \"UNSUPPORTED_STORE\" };\n if (typeof fixtureEvidence(input) !== \"string\")\n return { error: \"INVALID_REQUEST\" };\n return db.transaction(() => {\n if (erasures.has(input.userId)) return { bound: false };\n const key = fingerprint(fixtureEvidence(input));\n const updated = db\n .query(\n \"UPDATE purchases SET user_id = ? WHERE fingerprint = ? AND user_id IS NULL AND erased = 0\",\n )\n .run(input.userId, key);\n const row = db\n .query(\"SELECT * FROM purchases WHERE fingerprint = ?\")\n .get(key);\n if (\n updated.changes &&\n !fixture.pointInTime &&\n isEntitled(row.state, row.expires_at, now())\n ) {\n enqueue(\"entitlement.granted\", row, row.observed_at);\n db.query(\n \"UPDATE purchases SET entitlement_granted = 1 WHERE fingerprint = ?\",\n ).run(key);\n }\n return { bound: row?.user_id === input.userId };\n })();\n },\n entitlements: (input) => entitlements(input.userId),\n eraseUser(input) {\n return db.transaction(() => {\n const jobId = erasures.remember(input.userId);\n db.query(\n \"UPDATE purchases SET user_id = NULL, erased = 1, entitlement_granted = 0 WHERE user_id = ?\",\n ).run(input.userId);\n // A claimed delivery may already be in flight; the receiver erases its own copy.\n db.query(\n \"DELETE FROM outbox WHERE json_extract(body, '$.userId') = ?\",\n ).run(input.userId);\n return { accepted: true, jobId, status: \"completed\" };\n })();\n },\n subscriptionStatus(input) {\n if (fixture.pointInTime) return { active: false };\n const snapshots = rowsFor(input.userId).map(snapshot);\n const subscription = snapshots.find((row) => row.active) ?? snapshots[0];\n return {\n active: snapshots.some((row) => row.active),\n ...(subscription ? { subscription } : {}),\n };\n },\n };\n\n async function fetch(request) {\n const url = new URL(request.url);\n const spec = HTTP_BINDING.operations.find(\n (entry) => entry.path === url.pathname && entry.method === request.method,\n );\n if (!spec) return protocolError(\"NOT_FOUND\");\n const auth = request.headers.get(\"authorization\");\n if (spec.auth !== \"none\") {\n if (!Object.values(CREDENTIALS).includes(auth))\n return protocolError(\"UNAUTHORIZED\");\n if (spec.auth === \"server\" && auth !== CREDENTIALS.server)\n return protocolError(\"FORBIDDEN\");\n }\n if (!handlers[spec.name]) return protocolError(\"UNSUPPORTED_PROFILE\");\n let input = null;\n if (spec.input) {\n try {\n input =\n request.method === \"GET\"\n ? Object.fromEntries(url.searchParams)\n : await request.json();\n } catch {\n return protocolError(\"INVALID_REQUEST\");\n }\n if (!validate(spec.input, input)) return protocolError(\"INVALID_REQUEST\");\n }\n try {\n const result = handlers[spec.name](input);\n if (result.error) return protocolError(result.error);\n if (!validate(spec.result, result))\n throw new Error(\"Invalid protocol response\");\n return Response.json(result, { status: spec.successStatus });\n } catch {\n return protocolError(\"INTERNAL_ERROR\");\n }\n }\n\n function observe({ id, kind, occurredAt }) {\n if (\n ![\"cancel\", \"expire\"].includes(kind) ||\n !Number.isSafeInteger(occurredAt) ||\n occurredAt > now()\n ) {\n throw new Error(\"Invalid fixture observation\");\n }\n return db.transaction(() => {\n if (db.query(\"SELECT id FROM observations WHERE id = ?\").get(id))\n return false;\n const row = db\n .query(\"SELECT * FROM purchases WHERE fingerprint = ?\")\n .get(fingerprint(fixture.evidence));\n if (!row) throw new Error(\"Verify the fixture purchase first\");\n if (kind === \"expire\" && occurredAt < row.expires_at) {\n throw new Error(\"Premature expiry requires store reconciliation\");\n }\n db.query(\"INSERT INTO observations VALUES (?)\").run(id);\n if (occurredAt < row.observed_at) return false;\n if (\n (kind === \"cancel\" && (!row.will_renew || row.state !== \"Active\")) ||\n (kind === \"expire\" && row.state === \"Expired\")\n )\n return false;\n const next = {\n ...row,\n will_renew: 0,\n state: kind === \"expire\" ? \"Expired\" : row.state,\n };\n db.query(\n \"UPDATE purchases SET state = ?, will_renew = 0, observed_at = ? WHERE fingerprint = ?\",\n ).run(next.state, occurredAt, row.fingerprint);\n const types = [\n kind === \"cancel\" ? \"subscription.canceled\" : \"subscription.expired\",\n ];\n if (\n row.entitlement_granted &&\n !isEntitled(next.state, next.expires_at, now())\n ) {\n types.push(\"entitlement.revoked\");\n db.query(\n \"UPDATE purchases SET entitlement_granted = 0 WHERE fingerprint = ?\",\n ).run(row.fingerprint);\n }\n for (const eventType of types) enqueue(eventType, next, occurredAt, id);\n return true;\n })();\n }\n\n function inspect() {\n return {\n purchases: db\n .query(\n \"SELECT user_id AS userId, product_id AS productId, state, will_renew AS willRenew FROM purchases\",\n )\n .all(),\n access: entitlements(fixture.userId),\n deliveries: db\n .query(\n \"SELECT event_id AS eventId, delivery_id AS deliveryId, attempts, status, body FROM outbox ORDER BY rowid\",\n )\n .all()\n .map(({ body, ...row }) => ({\n ...row,\n eventType: JSON.parse(body).eventType,\n })),\n };\n }\n\n return { db, fetch, observe, inspect, close: () => db.close() };\n}\n", + "example/scenario.mjs": "import assert from \"node:assert/strict\";\nimport { operation, validate } from \"./contract.mjs\";\nimport { CREDENTIALS, FIXTURE } from \"./provider.mjs\";\nimport { deliver } from \"./webhooks.mjs\";\n\nexport const STAGES = [\n {\n title: \"Start with the contract\",\n built: \"HTTP routes + schema validation + SQLite\",\n result: \"A running server, an empty purchase table, and no access.\",\n },\n {\n title: \"Verify a purchase\",\n built: \"Fixture store adapter + purchase persistence\",\n result: \"Valid evidence is saved. Alice still has no access.\",\n },\n {\n title: \"Connect it to a user\",\n built: \"Server authorization + atomic binding + entitlement reads\",\n result: \"Alice gets Premium. Another user cannot take the purchase.\",\n },\n {\n title: \"Handle cancellation\",\n built: \"Lifecycle processing + transactional event outbox\",\n result: \"Renewal stops. Alice keeps the time she already paid for.\",\n },\n {\n title: \"Deliver, retry, deduplicate\",\n built: \"HMAC signatures + retry worker + durable receiver inbox\",\n result:\n \"A 503 retries successfully. Redelivery creates no second inbox row.\",\n },\n {\n title: \"Expire access and restart\",\n built: \"Expiry-aware reads + recovery from SQLite\",\n result:\n \"Access closes at the deadline. Restarting preserves purchases and deliveries.\",\n },\n {\n title: \"Delete the account\",\n built: \"Idempotent erasure + receiver cleanup + durable deletion guard\",\n result:\n \"Alice is removed from purchases and event copies. Late deliveries cannot restore her account data.\",\n },\n];\n\nexport async function requestOperation(baseUrl, name, input, role = \"server\") {\n const spec = operation(name);\n const url = new URL(spec.path, baseUrl);\n if (spec.method === \"GET\" && input)\n for (const [key, value] of Object.entries(input))\n url.searchParams.set(key, value);\n const response = await fetch(url, {\n method: spec.method,\n headers: {\n \"content-type\": \"application/json\",\n ...(role ? { authorization: CREDENTIALS[role] } : {}),\n },\n ...(spec.method === \"POST\" ? { body: JSON.stringify(input) } : {}),\n });\n return {\n operation: name,\n httpStatus: response.status,\n body: await response.json(),\n };\n}\n\nexport function createScenario(runtime) {\n const history = [];\n const checks = [];\n const evidence = { store: FIXTURE.store, evidence: FIXTURE.evidence };\n const call = (name, input, role) =>\n requestOperation(runtime.baseUrl, name, input, role);\n const check = (label, actual, expected) => {\n assert.deepEqual(actual, expected, label);\n checks.push(label);\n };\n\n async function advance() {\n const stage = history.length;\n if (stage >= STAGES.length) return history.at(-1);\n const responses = [];\n const run = async (name, input, role) => {\n const result = await call(name, input, role);\n responses.push(result);\n return result;\n };\n const start = checks.length;\n if (stage === 0) {\n check(\n \"Fixture request matches the installed schema\",\n validate(operation(\"verifyPurchase\").input, evidence),\n true,\n );\n check(\n \"Capabilities use the published response schema\",\n (await run(\"providerCapabilities\", null, null)).httpStatus,\n 200,\n );\n check(\n \"Purchase storage starts empty\",\n runtime.provider.inspect().purchases,\n [],\n );\n check(\n \"No profile conformance is claimed\",\n (await run(\"providerCapabilities\", null, null)).body.profiles,\n undefined,\n );\n } else if (stage === 1) {\n check(\n \"Fixture evidence is accepted\",\n (await run(\"verifyPurchase\", evidence, \"verification\")).body.isValid,\n true,\n );\n check(\n \"Verification does not grant access\",\n (await run(\"entitlements\", { userId: FIXTURE.userId })).body.productIds,\n [],\n );\n check(\n \"Invalid evidence produces a negative verdict\",\n (\n await run(\n \"verifyPurchase\",\n { store: FIXTURE.store, evidence: \"invalid\" },\n \"verification\",\n )\n ).body.isValid,\n false,\n );\n check(\n \"An upstream outage is not a negative verdict\",\n (\n await run(\n \"verifyPurchase\",\n { store: FIXTURE.store, evidence: \"local-upstream-outage\" },\n \"verification\",\n )\n ).body.error.code,\n \"VERIFICATION_FAILED\",\n );\n } else if (stage === 2) {\n check(\n \"Verification credentials cannot bind a user\",\n (\n await run(\n \"bindPurchase\",\n { ...evidence, userId: FIXTURE.userId },\n \"verification\",\n )\n ).body.error.code,\n \"FORBIDDEN\",\n );\n check(\n \"The server binds Alice\",\n (await run(\"bindPurchase\", { ...evidence, userId: FIXTURE.userId }))\n .body.bound,\n true,\n );\n check(\n \"Repeating the same binding succeeds\",\n (await run(\"bindPurchase\", { ...evidence, userId: FIXTURE.userId }))\n .body.bound,\n true,\n );\n check(\n \"Bob cannot take Alice's purchase\",\n (await run(\"bindPurchase\", { ...evidence, userId: \"demo_bob\" })).body\n .bound,\n false,\n );\n check(\n \"Alice can access Premium\",\n (await run(\"entitlements\", { userId: FIXTURE.userId })).body.productIds,\n [FIXTURE.productId],\n );\n check(\n \"First binding queues one grant; repeat and conflict queue none\",\n runtime.provider.inspect().deliveries.map((row) => row.eventType),\n [\"entitlement.granted\"],\n );\n } else if (stage === 3) {\n runtime.time = FIXTURE.startsAt + 86_400_000;\n runtime.provider.observe({\n id: \"fixture-cancel\",\n kind: \"cancel\",\n occurredAt: runtime.time,\n });\n const result = await run(\"subscriptionStatus\", {\n userId: FIXTURE.userId,\n });\n check(\"Cancellation keeps paid access\", result.body.active, true);\n check(\n \"Cancellation stops renewal\",\n result.body.subscription.willRenew,\n false,\n );\n check(\n \"Cancellation queues one event\",\n runtime.provider\n .inspect()\n .deliveries.filter((row) => row.eventType === \"subscription.canceled\")\n .length,\n 1,\n );\n } else if (stage === 4) {\n const failed = await deliver(\n runtime.provider,\n runtime.secret,\n runtime.now,\n async () => new Response(null, { status: 503 }),\n );\n responses.push({\n operation: \"webhook: receiver unavailable\",\n body: failed,\n });\n check(\"A 503 leaves a durable retry\", failed[0].status, \"pending\");\n runtime.restart();\n runtime.time += 30_000;\n const delivered = await deliver(\n runtime.provider,\n runtime.secret,\n runtime.now,\n runtime.post,\n );\n responses.push({\n operation: \"webhook: retry after restart\",\n body: delivered,\n });\n check(\"Retry survives provider restart\", delivered[0].httpStatus, 200);\n check(\n \"Retry keeps the delivery identity\",\n delivered[0].deliveryId,\n failed[0].deliveryId,\n );\n // Simulate loss of the delivery acknowledgement after the receiver committed.\n runtime.provider.db\n .query(\"UPDATE outbox SET status = 'pending', next_at = 0\")\n .run();\n runtime.time += 1_000;\n responses.push({\n operation: \"webhook: lost-ack redelivery\",\n body: await deliver(\n runtime.provider,\n runtime.secret,\n runtime.now,\n runtime.post,\n ),\n });\n check(\n \"Redelivery has one inbox row per event\",\n runtime.receiver.count(),\n 2,\n );\n } else if (stage === 5) {\n runtime.time = FIXTURE.expiresAt;\n check(\n \"Access closes at expiry before a notification arrives\",\n (await run(\"entitlements\", { userId: FIXTURE.userId })).body.productIds,\n [],\n );\n const observation = {\n id: \"fixture-expire\",\n kind: \"expire\",\n occurredAt: runtime.time,\n };\n runtime.provider.observe(observation);\n check(\n \"Duplicate store notification emits no extra event\",\n runtime.provider.observe(observation),\n false,\n );\n const before = runtime.provider.inspect();\n runtime.restart();\n check(\n \"Reopening both databases preserves state\",\n runtime.provider.inspect(),\n before,\n );\n check(\n \"Receiver deduplication survives restart\",\n runtime.receiver.count(),\n 2,\n );\n responses.push({\n operation: \"webhook: expiry + revocation\",\n body: await deliver(\n runtime.provider,\n runtime.secret,\n runtime.now,\n runtime.post,\n ),\n });\n check(\"All four events reach the receiver\", runtime.receiver.count(), 4);\n check(\n \"The final status is inactive\",\n (await run(\"subscriptionStatus\", { userId: FIXTURE.userId })).body\n .active,\n false,\n );\n } else if (stage === 6) {\n check(\n \"Verification credentials cannot erase users\",\n (await run(\"eraseUser\", { userId: FIXTURE.userId }, \"verification\"))\n .httpStatus,\n 403,\n );\n // The app removes its event copies before requesting provider erasure.\n runtime.receiver.eraseUser(FIXTURE.userId);\n const erased = await run(\"eraseUser\", { userId: FIXTURE.userId });\n check(\n \"Provider erasure completes\",\n [erased.body.accepted, erased.body.status],\n [true, \"completed\"],\n );\n runtime.restart();\n check(\n \"Erasure retry after restart returns the same job\",\n (await run(\"eraseUser\", { userId: FIXTURE.userId })).body,\n erased.body,\n );\n check(\n \"Purchase has no account identity\",\n runtime.provider.inspect().purchases.map((row) => row.userId),\n [null],\n );\n check(\"App event copies are erased\", runtime.receiver.count(), 0);\n check(\n \"Erased account has no access\",\n (await run(\"entitlements\", { userId: FIXTURE.userId })).body.productIds,\n [],\n );\n check(\n \"A stale binding retry cannot restore identity\",\n (await run(\"bindPurchase\", { ...evidence, userId: FIXTURE.userId }))\n .body.bound,\n false,\n );\n }\n const entry = {\n step: stage + 1,\n ...STAGES[stage],\n simulatedTime: new Date(runtime.time).toISOString(),\n ...runtime.provider.inspect(),\n inboxCount: runtime.receiver.count(),\n responses,\n checks: checks.slice(start),\n totalChecks: checks.length,\n };\n history.push(entry);\n return entry;\n }\n\n return { advance, history };\n}\n", + "example/composition/app-backend.mjs": "import { Database } from \"bun:sqlite\";\nimport { createCommerceClient } from \"./commerce-client.mjs\";\nimport { createErasureLedger } from \"../erasure.mjs\";\n\n// resolveSession is the host app's authentication boundary, supplied by the caller.\nexport function startAppBackend({\n path,\n providers,\n receiver,\n resolveSession,\n resolveStoreUser,\n}) {\n const db = new Database(path, { create: true });\n db.exec(\n \"CREATE TABLE IF NOT EXISTS erasure_requests (user_id TEXT, provider TEXT, PRIMARY KEY(user_id, provider))\",\n );\n const erased = createErasureLedger(db);\n const clients = Object.fromEntries(\n Object.entries(providers).map(([name, config]) => [\n name,\n createCommerceClient(config),\n ]),\n );\n const inFlight = new Map();\n let selected = Object.keys(clients)[0];\n async function drainErasure() {\n for (const row of db.query(\"SELECT * FROM erasure_requests\").all()) {\n try {\n receiver.eraseUser(row.user_id);\n await Promise.allSettled([...(inFlight.get(row.user_id) ?? [])]);\n const result = await clients[row.provider].call(\"eraseUser\", {\n userId: row.user_id,\n });\n if (result.accepted && result.status === \"completed\")\n db.query(\n \"DELETE FROM erasure_requests WHERE user_id = ? AND provider = ?\",\n ).run(row.user_id, row.provider);\n } catch {\n /* The durable request is retried by the app's worker. */\n }\n }\n return db.query(\"SELECT count(*) AS count FROM erasure_requests\").get()\n .count;\n }\n const server = Bun.serve({\n hostname: \"127.0.0.1\",\n port: 0,\n maxRequestBodySize: 32768,\n async fetch(request) {\n const userId = await resolveSession(request);\n if (!userId || erased.has(userId))\n return new Response(\"Unauthenticated\", { status: 401 });\n const url = new URL(request.url);\n try {\n if (url.pathname === \"/purchase\" && request.method === \"POST\") {\n const input = await request.json();\n if (erased.has(userId))\n return new Response(\"Unauthenticated\", { status: 401 });\n if (input.store === \"amazon\" || input.store === \"horizon\") {\n const storeUser = await resolveStoreUser?.(request, input.store);\n if (!storeUser || input[input.store]?.userId !== storeUser)\n return new Response(\n \"Store account is not linked to this session\",\n { status: 403 },\n );\n }\n if (erased.has(userId))\n return new Response(\"Unauthenticated\", { status: 401 });\n const work = clients[selected].fulfill(input, {\n userId,\n productId: \"premium.monthly\",\n });\n const pending = inFlight.get(userId) ?? new Set();\n pending.add(work);\n inFlight.set(userId, pending);\n let result;\n try {\n result = await work;\n } finally {\n pending.delete(work);\n if (!pending.size) inFlight.delete(userId);\n }\n // A deletion can race the upstream calls; never return access afterwards.\n return Response.json(erased.has(userId) ? { access: false } : result);\n }\n if (url.pathname === \"/access\" && request.method === \"GET\") {\n const result = await clients[selected].call(\"entitlements\", {\n userId,\n });\n return erased.has(userId)\n ? new Response(\"Unauthenticated\", { status: 401 })\n : Response.json(result);\n }\n if (url.pathname === \"/account\" && request.method === \"DELETE\") {\n db.transaction(() => {\n erased.remember(userId);\n for (const name of Object.keys(clients))\n db.query(\n \"INSERT OR IGNORE INTO erasure_requests VALUES (?,?)\",\n ).run(userId, name);\n })();\n receiver.eraseUser(userId);\n const pending = await drainErasure();\n return Response.json({\n accepted: true,\n status: pending ? \"queued\" : \"completed\",\n });\n }\n return new Response(\"Not found\", { status: 404 });\n } catch {\n return Response.json(\n { error: \"Commerce provider unavailable; retry the request.\" },\n { status: 503 },\n );\n }\n },\n });\n return {\n url: `http://127.0.0.1:${server.port}`,\n select(name) {\n if (!clients[name]) throw new Error(\"Unknown provider\");\n selected = name;\n },\n drainErasure,\n async close() {\n await server.stop(true);\n db.close();\n },\n };\n}\n", + "example/verify-stores.mjs": "import assert from \"node:assert/strict\";\nimport { createProvider, CREDENTIALS } from \"./provider.mjs\";\nimport { operation } from \"./contract.mjs\";\nimport { toVerifyPurchaseInput } from \"./client-bridge.mjs\";\n\nexport async function verifyStores() {\n const checks = [];\n for (const store of [\"apple\", \"google\", \"amazon\", \"horizon\"]) {\n let current = true;\n let time = Date.now();\n const input = toVerifyPurchaseInput(\n { store, purchaseToken: \"fictional-proof\", productId: \"premium.monthly\" },\n { storeUserId: \"fixture-store-user\", amazonSandbox: true },\n );\n const evidence =\n store === \"amazon\"\n ? JSON.stringify([\"fixture-store-user\", \"fictional-proof\", true])\n : store === \"horizon\"\n ? JSON.stringify([\"fixture-store-user\", \"premium.monthly\"])\n : \"fictional-proof\";\n const fixture = {\n store,\n evidence,\n userId: \"alice\",\n productId: \"premium.monthly\",\n startsAt: time,\n expiresAt: time + 60000,\n pointInTime: [\"amazon\", \"horizon\"].includes(store),\n currentVerdict: () => current,\n };\n const provider = createProvider(\":memory:\", () => time, fixture);\n const check = (label, actual, expected) => {\n assert.deepEqual(actual, expected, `${store}: ${label}`);\n checks.push(`${store}: ${label}`);\n };\n async function call(name, body, credential = CREDENTIALS.server) {\n const spec = operation(name),\n url = new URL(spec.path, \"http://fixture.invalid\");\n if (spec.method === \"GET\")\n for (const [key, value] of Object.entries(body ?? {}))\n url.searchParams.set(key, value);\n const response = await provider.fetch(\n new Request(url, {\n method: spec.method,\n headers: {\n authorization: credential,\n \"content-type\": \"application/json\",\n },\n ...(spec.method === \"POST\" ? { body: JSON.stringify(body) } : {}),\n }),\n );\n return { status: response.status, result: await response.json() };\n }\n try {\n check(\n \"unverified evidence cannot bind\",\n (await call(\"bindPurchase\", { ...input, userId: \"alice\" })).result\n .bound,\n false,\n );\n check(\n \"matching evidence verifies\",\n (await call(\"verifyPurchase\", input)).result.isValid,\n true,\n );\n check(\n \"verification alone gives no access\",\n (await call(\"entitlements\", { userId: \"alice\" })).result.productIds,\n [],\n );\n check(\n \"verification credentials cannot bind\",\n (\n await call(\n \"bindPurchase\",\n { ...input, userId: \"alice\" },\n CREDENTIALS.verification,\n )\n ).status,\n 403,\n );\n for (let i = 0; i < 2; i++)\n check(\n \"binding and retry keep one owner\",\n (await call(\"bindPurchase\", { ...input, userId: \"alice\" })).result\n .bound,\n true,\n );\n check(\n \"another account cannot claim the purchase\",\n (await call(\"bindPurchase\", { ...input, userId: \"bob\" })).result.bound,\n false,\n );\n check(\n \"owned product is accessible\",\n (await call(\"entitlements\", { userId: \"alice\" })).result.productIds,\n [\"premium.monthly\"],\n );\n if (fixture.pointInTime) {\n current = \"outage\";\n check(\n \"an outage is an error, not cached access\",\n (await call(\"entitlements\", { userId: \"alice\" })).status,\n 502,\n );\n current = false;\n check(\n \"a negative recheck removes access\",\n (await call(\"entitlements\", { userId: \"alice\" })).result.productIds,\n [],\n );\n current = true;\n check(\n \"a confirmed recheck restores ownership\",\n (await call(\"entitlements\", { userId: \"alice\" })).result.productIds,\n [\"premium.monthly\"],\n );\n }\n check(\n \"erasure completes\",\n (await call(\"eraseUser\", { userId: \"alice\" })).result.status,\n \"completed\",\n );\n check(\n \"erasure removes access\",\n (await call(\"entitlements\", { userId: \"alice\" })).result.productIds,\n [],\n );\n check(\n \"erased evidence cannot be claimed\",\n (await call(\"bindPurchase\", { ...input, userId: \"bob\" })).result.bound,\n false,\n );\n for (const [label, offset] of [\n [\"before\", -1],\n [\"at\", 0],\n [\"after\", 1],\n ]) {\n time = fixture.expiresAt + offset;\n const verdict = (await call(\"verifyPurchase\", input)).result;\n check(\n `verification ${label} the fixture deadline respects the store's access model`,\n [verdict.isValid, verdict.state],\n fixture.pointInTime || offset < 0\n ? [true, \"ENTITLED\"]\n : [false, \"EXPIRED\"],\n );\n }\n if (fixture.pointInTime) {\n current = false;\n const rejected = (await call(\"verifyPurchase\", input)).result;\n check(\n \"a negative ownership verdict remains rejected after the fixture deadline\",\n [rejected.isValid, rejected.state],\n [false, \"INAUTHENTIC\"],\n );\n current = \"outage\";\n check(\n \"an ownership verification outage remains an error after the fixture deadline\",\n (await call(\"verifyPurchase\", input)).status,\n 502,\n );\n }\n } finally {\n provider.close();\n }\n }\n return checks;\n}\nif (import.meta.main)\n console.log(\n `Store fixtures: ${(await verifyStores()).length} checks passed. No store contacted.`,\n );\n", + "example/verify.mjs": "import assert from \"node:assert/strict\";\nimport { rmSync } from \"node:fs\";\nimport vectors from \"openiap-commerce-protocol/vectors/signatures.json\";\nimport { SUBSCRIPTION_STATES, WEBHOOK } from \"openiap-commerce-protocol\";\nimport { FIXTURE, isEntitled } from \"./provider.mjs\";\nimport { requestOperation } from \"./scenario.mjs\";\nimport { runConsumerDemo } from \"./consumer.mjs\";\nimport { runBridgeDemo } from \"./client-bridge.mjs\";\nimport { startLab } from \"./server.mjs\";\nimport { authentic, createReceiver, deliver, sign } from \"./webhooks.mjs\";\nimport { verifyStores } from \"./verify-stores.mjs\";\nimport { verifyErasure } from \"./verify-erasure.mjs\";\n\nexport async function verifyLab({ compareSigner } = {}) {\n const lab = startLab();\n const checks = [];\n const check = (label, actual, expected) => {\n assert.deepEqual(actual, expected, label);\n checks.push(label);\n };\n try {\n for (let i = 0; i < 6; i++) await lab.scenario.advance();\n checks.push(...lab.scenario.history.flatMap((entry) => entry.checks));\n for (const vector of vectors.cases) {\n const signature = sign(vector.secret, vector.timestamp, vector.body);\n const expected = vector.previousSecret\n ? `${signature},${sign(vector.previousSecret, vector.timestamp, vector.body)}`\n : signature;\n check(`Signature vector: ${vector.name}`, expected, vector.expected);\n if (compareSigner) {\n check(\n `IAPKit signs the same bytes: ${vector.name}`,\n signature,\n await compareSigner(vector.secret, vector.timestamp, vector.body),\n );\n }\n check(\n `Receiver accepts vector: ${vector.name}`,\n authentic(\n [vector.secret],\n String(vector.timestamp),\n vector.body,\n vector.presentedHeader ?? expected,\n vector.timestamp,\n ),\n true,\n );\n }\n for (const vector of vectors.rejections) {\n check(\n `Receiver rejects: ${vector.name}`,\n authentic(\n [vector.secret],\n String(vector.timestamp),\n vector.body,\n vector.presentedSignature,\n vector.receiverNow ?? vector.timestamp,\n ),\n false,\n );\n }\n for (const state of [...SUBSCRIPTION_STATES, \"FutureState\"]) {\n const eligible = state === \"Active\" || state === \"InGracePeriod\";\n check(`${state}: before expiry`, isEntitled(state, 100, 99), eligible);\n check(`${state}: at expiry`, isEntitled(state, 100, 100), false);\n check(\n `${state}: no deadline`,\n isEntitled(state, undefined, 100),\n eligible,\n );\n }\n const call = (name, input, role) =>\n requestOperation(lab.runtime.baseUrl, name, input, role);\n check(\n \"Missing credentials are refused\",\n (await call(\"entitlements\", { userId: FIXTURE.userId }, null)).httpStatus,\n 401,\n );\n check(\n \"Verification role cannot enumerate users\",\n (await call(\"entitlements\", { userId: FIXTURE.userId }, \"verification\"))\n .httpStatus,\n 403,\n );\n check(\n \"Malformed input is refused\",\n (await call(\"bindPurchase\", { store: FIXTURE.store })).httpStatus,\n 400,\n );\n check(\n \"A real store is not falsely accepted\",\n (\n await call(\"verifyPurchase\", {\n store: \"google\",\n google: { purchaseToken: \"fixture\" },\n })\n ).body.error.code,\n \"UNSUPPORTED_STORE\",\n );\n check(\n \"Erasure rejects verification credentials\",\n (await call(\"eraseUser\", { userId: FIXTURE.userId }, \"verification\"))\n .httpStatus,\n 403,\n );\n check(\n \"Cancellation after expiry is ignored\",\n lab.runtime.provider.observe({\n id: \"late-cancel\",\n kind: \"cancel\",\n occurredAt: FIXTURE.expiresAt,\n }),\n false,\n );\n const expiredVerdict = await call(\"verifyPurchase\", {\n store: FIXTURE.store,\n evidence: FIXTURE.evidence,\n });\n check(\n \"Expired fixture evidence has an expired verdict\",\n [expiredVerdict.body.isValid, expiredVerdict.body.state],\n [false, \"EXPIRED\"],\n );\n const body = lab.runtime.provider.db\n .query(\"SELECT body FROM outbox LIMIT 1\")\n .get().body;\n const timestamp = Math.floor(lab.runtime.time / 1000).toString();\n const invalid = await lab.runtime.receiver.fetch(\n new Request(`${lab.runtime.baseUrl}/demo/receiver`, {\n method: \"POST\",\n body: body + \" \",\n headers: {\n [WEBHOOK.timestampHeader]: timestamp,\n [WEBHOOK.signatureHeader]: sign(lab.runtime.secret, timestamp, body),\n },\n }),\n );\n check(\"Tampered HTTP body has no inbox effect\", invalid.status, 401);\n const byteReceiver = createReceiver(\n \":memory:\",\n lab.runtime.secret,\n () => lab.runtime.time,\n );\n try {\n const event = { ...JSON.parse(body), userId: \"demo_\\uFFFD\" };\n const unicode = Buffer.from(JSON.stringify(event));\n const offset = unicode.indexOf(Buffer.from(\"\\uFFFD\"));\n const malformed = Buffer.concat([\n unicode.subarray(0, offset),\n Buffer.from([0xff]),\n unicode.subarray(offset + 3),\n ]);\n const withBom = Buffer.concat([Buffer.from([0xef, 0xbb, 0xbf]), unicode]);\n const send = (bytes, signedBytes = unicode) =>\n byteReceiver.fetch(\n new Request(`${lab.runtime.baseUrl}/demo/receiver`, {\n method: \"POST\",\n body: bytes,\n headers: {\n [WEBHOOK.timestampHeader]: timestamp,\n [WEBHOOK.signatureHeader]: sign(\n lab.runtime.secret,\n timestamp,\n signedBytes,\n ),\n [WEBHOOK.eventIdHeader]: event.eventId,\n },\n }),\n );\n for (const [label, bytes] of [\n [\"Changed UTF-8 bytes\", malformed],\n [\"Inserted UTF-8 BOM\", withBom],\n ]) {\n check(\n `${label} cannot reuse a signature`,\n [(await send(bytes)).status, byteReceiver.count()],\n [401, 0],\n );\n }\n check(\n \"Authenticated malformed UTF-8 is rejected before storage\",\n [(await send(malformed, malformed)).status, byteReceiver.count()],\n [400, 0],\n );\n check(\n \"Authentic Unicode bytes are accepted and stored\",\n [(await send(unicode)).status, byteReceiver.count()],\n [200, 1],\n );\n check(\n \"Authentic BOM bytes are verified before decoding\",\n [(await send(withBom, withBom)).status, byteReceiver.count()],\n [200, 1],\n );\n } finally {\n byteReceiver.close();\n }\n check(\n \"Receiver still has exactly four events\",\n lab.runtime.receiver.count(),\n 4,\n );\n check(\n \"Cross-origin demo mutations are refused\",\n (\n await fetch(`${lab.runtime.baseUrl}/demo/advance`, {\n method: \"POST\",\n headers: { origin: \"https://untrusted.example\" },\n })\n ).status,\n 403,\n );\n } finally {\n await lab.close();\n rmSync(lab.directory, { recursive: true, force: true });\n }\n\n const fresh = startLab();\n try {\n const call = (name, input) =>\n requestOperation(fresh.runtime.baseUrl, name, input);\n const evidence = { store: FIXTURE.store, evidence: FIXTURE.evidence };\n await call(\"verifyPurchase\", evidence);\n const bindings = await Promise.all(\n [\"alice\", \"bob\"].map((userId) =>\n call(\"bindPurchase\", { ...evidence, userId }),\n ),\n );\n check(\n \"Overlapping HTTP ownership claims have one winner\",\n bindings.filter((row) => row.body.bound).length,\n 1,\n );\n check(\n \"A cancellation older than the active row is ignored\",\n fresh.runtime.provider.observe({\n id: \"old-active-cancel\",\n kind: \"cancel\",\n occurredAt: FIXTURE.startsAt - 1,\n }),\n false,\n );\n check(\n \"Ignoring an old cancellation preserves renewal\",\n fresh.runtime.provider.inspect().purchases[0].willRenew,\n 1,\n );\n assert.throws(\n () =>\n fresh.runtime.provider.observe({\n id: \"early-expiry\",\n kind: \"expire\",\n occurredAt: FIXTURE.startsAt,\n }),\n /reconciliation/,\n );\n check(\n \"Conflicting expiry is not consumed\",\n fresh.runtime.provider.db\n .query(\n \"SELECT COUNT(*) AS count FROM observations WHERE id = 'early-expiry'\",\n )\n .get().count,\n 0,\n );\n fresh.runtime.time += 1000;\n const observation = {\n id: \"atomic-cancel\",\n kind: \"cancel\",\n occurredAt: fresh.runtime.time,\n };\n fresh.runtime.provider.db.exec(\n \"CREATE TRIGGER fail_outbox BEFORE INSERT ON outbox BEGIN SELECT RAISE(ABORT, 'injected disk failure'); END;\",\n );\n assert.throws(() => fresh.runtime.provider.observe(observation));\n check(\n \"Outbox failure rolls back subscription state\",\n fresh.runtime.provider.inspect().purchases[0].willRenew,\n 1,\n );\n fresh.runtime.provider.db.exec(\"DROP TRIGGER fail_outbox\");\n check(\n \"Failed transaction leaves the observation retryable\",\n fresh.runtime.provider.observe(observation),\n true,\n );\n for (let attempt = 0; attempt < 3; attempt++) {\n fresh.runtime.time += 120_000;\n await deliver(\n fresh.runtime.provider,\n fresh.runtime.secret,\n fresh.runtime.now,\n async () => new Response(null, { status: 503 }),\n );\n }\n check(\n \"Exhausted retries enter dead-letter\",\n fresh.runtime.provider.inspect().deliveries[0].status,\n \"dead-letter\",\n );\n } finally {\n await fresh.close();\n rmSync(fresh.directory, { recursive: true, force: true });\n }\n const binding = startLab();\n try {\n const call = (name, input) =>\n requestOperation(binding.runtime.baseUrl, name, input);\n const evidence = { store: FIXTURE.store, evidence: FIXTURE.evidence };\n await call(\"verifyPurchase\", evidence);\n binding.runtime.provider.db.exec(\n \"CREATE TRIGGER fail_grant BEFORE INSERT ON outbox BEGIN SELECT RAISE(ABORT, 'injected disk failure'); END;\",\n );\n check(\n \"Grant failure rejects binding\",\n (await call(\"bindPurchase\", { ...evidence, userId: FIXTURE.userId }))\n .httpStatus,\n 500,\n );\n check(\n \"Grant failure rolls back ownership\",\n binding.runtime.provider.inspect().purchases[0].userId,\n null,\n );\n binding.runtime.provider.db.exec(\"DROP TRIGGER fail_grant\");\n binding.runtime.time = FIXTURE.expiresAt;\n check(\n \"An expired purchase can be bound\",\n (await call(\"bindPurchase\", { ...evidence, userId: FIXTURE.userId })).body\n .bound,\n true,\n );\n check(\n \"Binding expired evidence emits no grant\",\n binding.runtime.provider.inspect().deliveries,\n [],\n );\n } finally {\n await binding.close();\n rmSync(binding.directory, { recursive: true, force: true });\n }\n const delayed = startLab();\n try {\n const call = (name, input) =>\n requestOperation(delayed.runtime.baseUrl, name, input);\n const evidence = { store: FIXTURE.store, evidence: FIXTURE.evidence };\n await call(\"verifyPurchase\", evidence);\n delayed.runtime.time += 3_600_000;\n await call(\"bindPurchase\", { ...evidence, userId: FIXTURE.userId });\n const grant = JSON.parse(\n delayed.runtime.provider.db.query(\"SELECT body FROM outbox LIMIT 1\").get()\n .body,\n );\n check(\n \"Delayed binding retains the store occurrence\",\n grant.occurredAt,\n FIXTURE.startsAt,\n );\n check(\n \"Delayed binding records its actual processing time\",\n grant.processedAt,\n delayed.runtime.time,\n );\n delayed.runtime.restart();\n delayed.runtime.time = FIXTURE.expiresAt + 60_000;\n delayed.runtime.provider.observe({\n id: \"late-expiry\",\n kind: \"expire\",\n occurredAt: delayed.runtime.time,\n });\n check(\n \"Late expiry revokes a persisted grant exactly once\",\n delayed.runtime.provider.inspect().deliveries.map((row) => row.eventType),\n [\"entitlement.granted\", \"subscription.expired\", \"entitlement.revoked\"],\n );\n delayed.runtime.provider.observe({\n id: \"another-expiry\",\n kind: \"expire\",\n occurredAt: delayed.runtime.time,\n });\n check(\n \"Repeated expiry emits no second revocation\",\n delayed.runtime.provider.inspect().deliveries.length,\n 3,\n );\n } finally {\n await delayed.close();\n rmSync(delayed.directory, { recursive: true, force: true });\n }\n const equalTime = startLab();\n try {\n const call = (name, input) =>\n requestOperation(equalTime.runtime.baseUrl, name, input);\n const evidence = { store: FIXTURE.store, evidence: FIXTURE.evidence };\n await call(\"verifyPurchase\", evidence);\n await call(\"bindPurchase\", { ...evidence, userId: FIXTURE.userId });\n equalTime.runtime.time = FIXTURE.expiresAt;\n equalTime.runtime.provider.observe({\n id: \"cancel-at-deadline\",\n kind: \"cancel\",\n occurredAt: FIXTURE.expiresAt,\n });\n equalTime.runtime.provider.observe({\n id: \"expire-at-deadline\",\n kind: \"expire\",\n occurredAt: FIXTURE.expiresAt,\n });\n check(\n \"Equal-time expiry retains its lifecycle transition\",\n equalTime.runtime.provider.inspect().purchases[0].state,\n \"Expired\",\n );\n check(\n \"Equal-time observations revoke once and preserve both transitions\",\n equalTime.runtime.provider\n .inspect()\n .deliveries.map((row) => row.eventType),\n [\n \"entitlement.granted\",\n \"subscription.canceled\",\n \"entitlement.revoked\",\n \"subscription.expired\",\n ],\n );\n } finally {\n await equalTime.close();\n rmSync(equalTime.directory, { recursive: true, force: true });\n }\n checks.push(...(await runConsumerDemo()).checks);\n checks.push(...runBridgeDemo());\n checks.push(...(await verifyStores()));\n checks.push(...(await verifyErasure()));\n return checks;\n}\n\nif (import.meta.main) {\n const checks = await verifyLab();\n console.log(\n `Commerce Protocol Example: ${checks.length} checks passed. No store or production service contacted.`,\n );\n}\n", + "example/webhooks.mjs": "import { Database } from \"bun:sqlite\";\nimport { createHmac, timingSafeEqual } from \"node:crypto\";\nimport { WEBHOOK } from \"openiap-commerce-protocol\";\nimport { validate } from \"./contract.mjs\";\nimport { createErasureLedger } from \"./erasure.mjs\";\n\nexport function sign(secret, timestamp, body) {\n return (\n WEBHOOK.signaturePrefix +\n createHmac(\"sha256\", secret)\n .update(`${timestamp}.`)\n .update(body)\n .digest(\"hex\")\n );\n}\n\nexport function authentic(secrets, timestamp, body, signatures, nowSeconds) {\n if (!/^\\d+$/.test(timestamp ?? \"\")) return false;\n if (\n !Number.isSafeInteger(Number(timestamp)) ||\n Math.abs(nowSeconds - Number(timestamp)) > WEBHOOK.toleranceSeconds\n )\n return false;\n return (signatures ?? \"\").split(\",\").some((raw) => {\n const candidate = raw.trim();\n if (!/^v1=[a-f0-9]{64}$/.test(candidate)) return false;\n return secrets.some((secret) =>\n timingSafeEqual(\n Buffer.from(candidate),\n Buffer.from(sign(secret, timestamp, body)),\n ),\n );\n });\n}\n\nexport function createReceiver(path, secret, now) {\n const emitters =\n typeof secret === \"string\" ? [{ name: \"default\", secret }] : secret;\n if (\n !Array.isArray(emitters) ||\n !emitters.length ||\n emitters.some(\n (entry) =>\n !entry.name ||\n !entry.secret ||\n (typeof secret !== \"string\" && !entry.projectId),\n )\n )\n throw new Error(\n \"Configure each emitter with a name, project ID, and signing secret\",\n );\n if (new Set(emitters.map((entry) => entry.name)).size !== emitters.length)\n throw new Error(\"Emitter names must be unique\");\n const db = new Database(path, { create: true });\n db.exec(\n \"CREATE TABLE IF NOT EXISTS inbox (event_id TEXT PRIMARY KEY, body TEXT NOT NULL)\",\n );\n const erasures = createErasureLedger(db);\n // Upgrade old single-emitter event IDs without losing durable deduplication.\n db.transaction(() => {\n for (const row of db.query(\"SELECT event_id, body FROM inbox\").all()) {\n const event = JSON.parse(row.body);\n if (row.event_id !== event.eventId) continue;\n const matching = emitters.filter(\n (entry) => entry.projectId === event.projectId,\n );\n const name = matching.length === 1 ? matching[0].name : \"default\";\n const identity = JSON.stringify([name, event.projectId, event.eventId]);\n db.query(\"INSERT OR IGNORE INTO inbox VALUES (?, ?)\").run(\n identity,\n row.body,\n );\n db.query(\"DELETE FROM inbox WHERE event_id = ?\").run(row.event_id);\n }\n })();\n\n async function fetch(request) {\n const bytes = new Uint8Array(await request.arrayBuffer());\n const authenticated = emitters.filter((emitter) =>\n authentic(\n [emitter.secret],\n request.headers.get(WEBHOOK.timestampHeader),\n bytes,\n request.headers.get(WEBHOOK.signatureHeader),\n Math.floor(now() / 1000),\n ),\n );\n if (!authenticated.length) {\n return new Response(\"Invalid signature\", { status: 401 });\n }\n let body, event;\n try {\n body = new TextDecoder(\"utf-8\", { fatal: true }).decode(bytes);\n event = JSON.parse(body);\n } catch {\n return new Response(\"Invalid JSON\", { status: 400 });\n }\n if (!validate(\"#/$defs/CommerceEvent\", event))\n return new Response(\"Invalid event\", { status: 400 });\n if (request.headers.get(WEBHOOK.eventIdHeader) !== event.eventId)\n return new Response(\"Event ID mismatch\", { status: 400 });\n const emitter = authenticated.find(\n (entry) => !entry.projectId || entry.projectId === event.projectId,\n );\n if (!emitter)\n return new Response(\"Unexpected emitter project\", { status: 401 });\n if (event.userId && erasures.has(event.userId))\n return Response.json({ accepted: true, discarded: \"erased-user\" });\n // Inbox insertion is the durable effect; downstream jobs can consume it later.\n const result = db\n .query(\"INSERT OR IGNORE INTO inbox VALUES (?, ?)\")\n .run(\n JSON.stringify([emitter.name, event.projectId, event.eventId]),\n body,\n );\n return Response.json({ accepted: true, duplicate: result.changes === 0 });\n }\n\n return {\n fetch,\n eraseUser(userId) {\n return db.transaction(() => {\n erasures.remember(userId);\n return db\n .query(\"DELETE FROM inbox WHERE json_extract(body, '$.userId') = ?\")\n .run(userId).changes;\n })();\n },\n inspect: () =>\n db\n .query(\"SELECT body FROM inbox ORDER BY rowid\")\n .all()\n .map((row) => JSON.parse(row.body)),\n count: () => db.query(\"SELECT count(*) AS count FROM inbox\").get().count,\n close: () => db.close(),\n };\n}\n\n// The caller injects a loopback test transport. This is not a public HTTPS worker.\nexport async function deliver(provider, secret, now, post) {\n const results = [];\n const rows = provider.db\n .query(\n \"SELECT * FROM outbox WHERE status = 'pending' AND next_at <= ? ORDER BY rowid\",\n )\n .all(now());\n for (const candidate of rows) {\n const row = provider.db\n .query(\"SELECT * FROM outbox WHERE event_id = ? AND status = 'pending'\")\n .get(candidate.event_id);\n if (!row) continue;\n const timestamp = Math.floor(now() / 1000).toString();\n const headers = {\n \"content-type\": WEBHOOK.contentType,\n [WEBHOOK.timestampHeader]: timestamp,\n [WEBHOOK.signatureHeader]: sign(secret, timestamp, row.body),\n [WEBHOOK.eventIdHeader]: row.event_id,\n [WEBHOOK.deliveryIdHeader]: row.delivery_id,\n };\n let status;\n try {\n status = (await post({ method: \"POST\", headers, body: row.body })).status;\n } catch {\n status = 503;\n }\n const attempts = row.attempts + 1;\n const retryable = status === 408 || status === 429 || status >= 500;\n const next =\n status >= 200 && status < 300\n ? \"delivered\"\n : retryable && attempts < 3\n ? \"pending\"\n : \"dead-letter\";\n provider.db\n .query(\n \"UPDATE outbox SET attempts = ?, status = ?, next_at = ? WHERE event_id = ?\",\n )\n .run(attempts, next, now() + 30_000 * 2 ** (attempts - 1), row.event_id);\n results.push({\n eventId: row.event_id,\n deliveryId: row.delivery_id,\n httpStatus: status,\n attempt: attempts,\n status: next,\n });\n }\n return results;\n}\n", + "example/verify-erasure.mjs": "import assert from \"node:assert/strict\";\nimport { rmSync } from \"node:fs\";\nimport { startLab } from \"./server.mjs\";\nimport { FIXTURE } from \"./provider.mjs\";\nimport { requestOperation, STAGES } from \"./scenario.mjs\";\nimport { deliver, sign } from \"./webhooks.mjs\";\nimport { WEBHOOK } from \"openiap-commerce-protocol\";\n\nexport async function verifyErasure() {\n const checks = [];\n const check = (name, actual, expected) => {\n assert.deepEqual(actual, expected, name);\n checks.push(name);\n };\n const lab = startLab();\n try {\n const { runtime } = lab;\n const call = (name, input, role) =>\n requestOperation(runtime.baseUrl, name, input, role);\n const evidence = { store: FIXTURE.store, evidence: FIXTURE.evidence };\n await call(\"verifyPurchase\", evidence);\n await call(\"bindPurchase\", { ...evidence, userId: FIXTURE.userId });\n const pending = runtime.provider.db\n .query(\"SELECT body FROM outbox LIMIT 1\")\n .get().body;\n const post = (body) => {\n const timestamp = String(Math.floor(runtime.now() / 1000));\n return runtime.post({\n method: \"POST\",\n body,\n headers: {\n [WEBHOOK.timestampHeader]: timestamp,\n [WEBHOOK.signatureHeader]: sign(runtime.secret, timestamp, body),\n [WEBHOOK.eventIdHeader]: JSON.parse(body).eventId,\n },\n });\n };\n await post(pending);\n check(\n \"An active purchase has a delivered event copy\",\n runtime.receiver.count(),\n 1,\n );\n runtime.receiver.eraseUser(FIXTURE.userId);\n let erased;\n await deliver(\n runtime.provider,\n runtime.secret,\n runtime.now,\n async (init) => {\n erased = await call(\"eraseUser\", { userId: FIXTURE.userId });\n return runtime.post(init);\n },\n );\n check(\"Erasure during delivery completes\", erased.body.status, \"completed\");\n check(\n \"An in-flight event cannot resurrect receiver data\",\n runtime.receiver.count(),\n 0,\n );\n check(\n \"An in-flight acknowledgement cannot resurrect the outbox\",\n runtime.provider.inspect().deliveries,\n [],\n );\n runtime.restart();\n check(\n \"Repeated erase survives restart\",\n (await call(\"eraseUser\", { userId: FIXTURE.userId })).body,\n erased.body,\n );\n check(\n \"An old signed event remains discarded after restart\",\n (await (await post(pending)).json()).discarded,\n \"erased-user\",\n );\n const late = JSON.stringify({\n ...JSON.parse(pending),\n eventId: \"late-new-event\",\n });\n check(\n \"A new event ID cannot bypass erasure\",\n (await (await post(late)).json()).discarded,\n \"erased-user\",\n );\n check(\n \"Verification cannot bind an erased purchase\",\n (await call(\"verifyPurchase\", evidence)).body.isValid,\n true,\n );\n check(\n \"Stale binding cannot restore an erased account\",\n (await call(\"bindPurchase\", { ...evidence, userId: FIXTURE.userId })).body\n .bound,\n false,\n );\n check(\n \"Another account cannot claim erased evidence\",\n (await call(\"bindPurchase\", { ...evidence, userId: \"demo_bob\" })).body\n .bound,\n false,\n );\n check(\n \"Erased account is inactive before paid expiry\",\n (await call(\"subscriptionStatus\", { userId: FIXTURE.userId })).body,\n { active: false },\n );\n runtime.time = FIXTURE.expiresAt;\n runtime.provider.observe({\n id: \"expiry-after-deletion\",\n kind: \"expire\",\n occurredAt: runtime.time,\n });\n await deliver(runtime.provider, runtime.secret, runtime.now, runtime.post);\n check(\n \"Late lifecycle processing carries no erased identity\",\n runtime.receiver.inspect().map((event) => event.userId),\n [undefined],\n );\n const serialized = JSON.stringify([\n runtime.provider.db.query(\"SELECT * FROM purchases\").all(),\n runtime.provider.db.query(\"SELECT * FROM outbox\").all(),\n runtime.provider.db.query(\"SELECT * FROM erased_users\").all(),\n runtime.receiver.inspect(),\n ]);\n check(\n \"Persisted protocol records contain no erased user ID\",\n serialized.includes(FIXTURE.userId),\n false,\n );\n check(\n \"Unknown-user erasure is accepted\",\n (await call(\"eraseUser\", { userId: \"missing_user\" })).body.accepted,\n true,\n );\n } finally {\n await lab.close();\n rmSync(lab.directory, { recursive: true, force: true });\n }\n const walkthrough = startLab();\n try {\n for (let i = 0; i < STAGES.length; i++)\n await walkthrough.scenario.advance();\n checks.push(...walkthrough.scenario.history.at(-1).checks);\n } finally {\n await walkthrough.close();\n rmSync(walkthrough.directory, { recursive: true, force: true });\n }\n return checks;\n}\n\nif (import.meta.main)\n console.log(`${(await verifyErasure()).length} erasure checks passed.`);\n", + "example/README.md": "# OpenIAP Commerce Protocol example\n\nA runnable purchase-to-access backend, built and reviewed with AI in seven\nmilestones. Follow a purchase through verification, ownership, access, and\nsigned event delivery, and account deletion. Inspect the actual HTTP responses and database changes.\n\nThe backend uses the published **`openiap-commerce-protocol`** package. HTTP,\nSQLite, and webhook signatures run locally; the store, users, and clock are\nfictional fixtures. This is a learning example, not a production provider.\n\n## Quick start\n\nInstall [Bun](https://bun.sh/docs/installation) for the HTTP and SQLite runtime\n(tested with Bun 1.3.13). Use your favorite package manager for dependencies and\nscripts; npm is shown here:\n\n```sh\ngit clone https://github.com/hyodotdev/openiap-commerce-protocol-example.git\ncd openiap-commerce-protocol-example\nnpm install # or pnpm install, yarn install, bun install\nnpm test\nnpm start\n```\n\nOpen **http://127.0.0.1:5181**, then click **Run step 1 →** and continue through\nstep 7. Each step changes real local state. The dashboard shows purchases,\ncurrent access, delivery attempts, and expandable request/response details.\nNo store account, API key, OpenIAP checkout, or IAPKit account is required.\nModern Yarn uses the included `node_modules` linker.\n\n![The completed local backend: expired access, delivered events, and inspectable responses](https://raw.githubusercontent.com/hyodotdev/openiap-commerce-protocol-example/main/docs/build/06-recover-reviewed-8/screen.png)\n\nThe screenshot comes from an executed source checkpoint. See its\n[run report](https://github.com/hyodotdev/openiap-commerce-protocol-example/blob/main/docs/build/06-recover-reviewed-8/run.json)\nand the [complete build history](https://github.com/hyodotdev/openiap-commerce-protocol-example/blob/main/docs/build/README.md).\n\n## What you will see\n\n| Step | What changes | Result to check |\n| ----------- | ------------------------------------------------ | ---------------------------------------------------- |\n| 1. Contract | Load schemas; start with empty storage | No purchases or access yet |\n| 2. Verify | Validate fixture evidence; save a purchase | Verification alone grants no access |\n| 3. Bind | Attach the purchase to the backend-selected user | Alice gains Premium; Bob cannot claim it |\n| 4. Cancel | Turn off renewal; queue an event | Paid access remains until expiry |\n| 5. Deliver | Sign events; retry a failed receiver | A repeated delivery has one inbox effect |\n| 6. Expire | Advance the clock; reopen SQLite | Access closes; ownership and delivery records remain |\n| 7. Erase | Remove provider identity and receiver copies | Repeated deletion and late deliveries cannot restore the user |\n\nRestarting `npm start` creates a fresh temporary database, so you can replay the\nwalkthrough. Step 6 reopens the existing databases **inside the running process**;\nit does not simulate an OS crash or a new process recovering external secrets.\nIf port 5181 is occupied, run `COMMERCE_LAB_PORT=5183 npm start`.\n\n## Use the part you need\n\n| Your role | Start here | What this example provides |\n| -------------------- | ----------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- |\n| Paywall / experience | [Integration brief](INTEGRATE.md) | Host purchase/result boundaries; no paywall UI implementation |\n| Commerce provider | [AI build brief](BUILD.md) | Fixture verifier, ownership/access rules, REST, SQLite, and delivery |\n| Data / automation | [Event receiver guide](https://github.com/hyodotdev/openiap-commerce-protocol-example/blob/main/docs/receiver.md) | A ready signed-event receiver with a durable inbox |\n| Integrated platform | [Integration brief](INTEGRATE.md) | How the roles compose without splitting account authority |\n\n`client-bridge.mjs` maps Apple, Google, Amazon, and Horizon OpenIAP purchase fields into the installed\nverification schema **on the app backend**. Run `npm run demo:bridge` to check it.\n`npm test` also exercises all four fixture shapes through verification, binding,\naccess and erasure. Amazon/Horizon cases include negative rechecks and outages.\nIt does not perform a mobile purchase or authenticate store evidence. The\ncurrent client `verifyPurchaseWithProvider` helper uses IAPKit's own API; other\nproviders connect through the app's authenticated backend.\n\n## Receive events\n\n```sh\nnpm run demo:consumer\n```\n\nThis standalone check sends fictional purchase, renewal, cancellation, expiry,\nrefund, and entitlement events over HTTP. It repeats deliveries, rejects\nchanged signatures, and reopens the SQLite inbox. It needs no provider server.\n\nFor a persistent receiver, set `COMMERCE_WEBHOOK_SECRET` and run\n`npm run consumer`. The endpoint is `http://127.0.0.1:5182/webhooks/commerce`.\nSee the [receiver guide](https://github.com/hyodotdev/openiap-commerce-protocol-example/blob/main/docs/receiver.md)\nfor HTTPS proxy setup, database location, processing responsibilities, and\nexpected results. Event ingestion does not calculate revenue or grant access.\n\n## Build with AI, then check the result\n\nGive [BUILD.md](BUILD.md) to your AI for a backend, or [INTEGRATE.md](INTEGRATE.md)\nfor an existing product. Ask it to implement one milestone, run it, inspect the\nscreen and responses, fix a failure, and repeat that same check.\n\nThe [build record](https://github.com/hyodotdev/openiap-commerce-protocol-example/blob/main/docs/build/README.md)\ncontains independent source archives, patches, screenshots, and execution\nreports. The [review log](https://github.com/hyodotdev/openiap-commerce-protocol-example/blob/main/docs/build/REVIEW.md)\nkeeps the observed mistakes and corrections, including unfinished discovery in\nthe early snapshots. This implementation grew from an earlier internal\nprototype; it was not generated from a blank project in one prompt. Task briefs\nare implementation notes, not model transcripts or editor recordings.\n\n## Verify or record a change\n\n| Command | Checks |\n| ---------------------------- | ------------------------------------------------------------------------- |\n| `npm test` | Current backend flow, failure cases, request mapper, and receiver |\n| `npm run test:tooling` | Capture and patch tooling |\n| `npm run verify:checkpoints` | Every archive, its exact patch chain, and an independent npm install/test |\n| `npm run capture` | A new immutable source checkpoint and actual desktop/mobile screenshots |\n\nBackend commands require Bun. Recording also requires Node.js/npm, Git, tar,\nand Google Chrome. The [recording guide](https://github.com/hyodotdev/openiap-commerce-protocol-example/blob/main/docs/recording.md)\nexplains how to preserve a checkpoint and export evidence. GitHub CI runs the\nruntime, tooling, archive, and documentation-export checks.\n\n## Account deletion\n\nStep 7 runs `eraseUser` using server credentials. The provider removes identity\nfrom purchases and removes identity-bearing event records in one transaction.\nA repeated request returns the same completed job, including after restart.\n\nThe app owns already-delivered copies: it erases its receiver inbox and retains\na keyed deletion marker so late signed events are acknowledged without storing\nthe deleted identity. The example also refuses rebinding erased evidence.\nThis is a local ownership policy; the protocol does not cancel the store subscription.\nDatabase backups and the app’s own account records remain the operator’s responsibility.\n\nRun `bun verify-erasure.mjs` to exercise deletion while a delivery is in flight,\nlate lifecycle events, repeated requests, and storage reopening.\n\n## Replace the example with IAPKit\n\nThe OpenIAP checkout includes `packages/kit/scripts/docs/run-commerce-interop.mjs`.\nIt starts IAPKit with an isolated local Convex deployment and keeps one app\nbackend and receiver running while switching the commerce provider. See the\n[composition guide](https://openiap.dev/commerce-protocol/ecosystem#composition-proof)\nfor the executed report, source, and command. No IAPKit account or store keys are needed.\n\n## What remains for production\n\nReal store validation and sandbox purchases, login, tenant\nisolation, GraphQL, public HTTPS delivery protections, and operational recovery\nare not implemented here. The backend advertises **no complete profiles**.\nSchema checks and the local walkthrough do not establish profile conformance.\n\nImplement every obligation of your chosen profiles from the installed\n`SPEC.md`; add store sandbox, isolation, deployment, and recovery tests.\nIAPKit is a reference implementation, not a substitute for those checks.\n\nMIT licensed. See [LICENSE](LICENSE).\n", + "example/composition/commerce-client.mjs": "import { operation, validate } from \"../contract.mjs\";\n\n// This module runs on the authenticated app backend, which owns the credential.\nexport function createCommerceClient({ baseUrl, credential }) {\n async function call(name, input) {\n const spec = operation(name);\n if (!spec) throw new Error(\"Unknown operation\");\n if (spec.input && !validate(spec.input, input))\n throw new Error(\"Invalid operation input\");\n const url = new URL(spec.path, baseUrl);\n if (spec.method === \"GET\" && input)\n for (const [key, value] of Object.entries(input))\n url.searchParams.set(key, value);\n const response = await fetch(url, {\n method: spec.method,\n headers: {\n \"content-type\": \"application/json\",\n ...(spec.auth === \"none\" ? {} : { authorization: credential }),\n },\n ...(spec.method === \"POST\" ? { body: JSON.stringify(input) } : {}),\n redirect: \"error\",\n signal: AbortSignal.timeout(5000),\n });\n const result = await response.json();\n if (response.status !== spec.successStatus)\n throw new Error(\"Commerce operation failed\");\n if (!validate(spec.result, result))\n throw new Error(\"Invalid operation result\");\n return result;\n }\n\n async function fulfill(input, { userId, productId }) {\n const evidence = { ...input };\n delete evidence.userId;\n const verdict = await call(\"verifyPurchase\", evidence);\n if (!verdict.isValid) throw new Error(\"Purchase was not accepted\");\n const binding = await call(\"bindPurchase\", { ...evidence, userId });\n if (!binding.bound) throw new Error(\"Purchase belongs to another user\");\n const access = await call(\"entitlements\", { userId });\n if (!access.productIds.includes(productId))\n throw new Error(\"Requested product is not accessible\");\n return access;\n }\n\n return { call, fulfill };\n}\n", + "example/consumer.mjs": "import assert from \"node:assert/strict\";\nimport { randomBytes, randomUUID, createHash } from \"node:crypto\";\nimport { mkdtempSync, rmSync, writeFileSync, readFileSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { join, resolve } from \"node:path\";\nimport { WEBHOOK, COMMERCE_EVENT_VERSION } from \"openiap-commerce-protocol\";\nimport { createReceiver, sign } from \"./webhooks.mjs\";\nimport { validate } from \"./contract.mjs\";\n\n// One app inbox; named emitters can bind separate signing keys to project IDs.\nexport function startConsumer({ secret, path, port = 0, now = Date.now }) {\n assert(secret, \"Set COMMERCE_WEBHOOK_SECRET to the provider signing secret.\");\n let receiver = createReceiver(path, secret, now);\n const server = Bun.serve({\n hostname: \"127.0.0.1\",\n port,\n maxRequestBodySize: 64 * 1024,\n fetch(request) {\n const url = new URL(request.url);\n if (request.method === \"POST\" && url.pathname === \"/webhooks/commerce\")\n return receiver.fetch(request);\n if (request.method === \"GET\" && url.pathname === \"/health\")\n return Response.json({ ready: true });\n return new Response(\"Not found\", { status: 404 });\n },\n });\n return {\n url: `http://127.0.0.1:${server.port}/webhooks/commerce`,\n count: () => receiver.count(),\n eraseUser: (userId) => receiver.eraseUser(userId),\n inspect: () => receiver.inspect(),\n reopen() {\n receiver.close();\n receiver = createReceiver(path, secret, now);\n },\n async close() {\n await server.stop(true);\n receiver.close();\n },\n };\n}\n\nexport async function runConsumerDemo() {\n const directory = mkdtempSync(join(tmpdir(), \"commerce-consumer-\"));\n const secret = randomBytes(32).toString(\"hex\");\n const now = Date.now();\n const consumer = startConsumer({\n secret,\n path: join(directory, \"inbox.sqlite\"),\n now: () => now,\n });\n const checks = [],\n results = [];\n const check = (name, actual, expected) => {\n assert.deepEqual(actual, expected, name);\n checks.push(name);\n };\n const lifecycle = [\n [\"subscription.started\", \"Active\", true],\n [\"entitlement.granted\", \"Active\", true],\n [\"subscription.renewed\", \"Active\", true],\n [\"subscription.canceled\", \"Active\", true],\n [\"subscription.expired\", \"Expired\", false],\n [\"entitlement.revoked\", \"Expired\", false],\n [\"subscription.refunded\", \"Refunded\", false],\n ];\n try {\n const health = await fetch(new URL(\"/health\", consumer.url), {\n headers: { host: \"receiver.example.test\" },\n });\n check(\"Health accepts the proxy public Host header\", health.status, 200);\n for (const [index, [eventType, state, active]] of lifecycle.entries()) {\n const event = {\n eventId: randomUUID(),\n eventType,\n eventVersion: COMMERCE_EVENT_VERSION,\n occurredAt: now - 60_000 + index * 1000,\n processedAt: now,\n store: \"fixture\",\n environment: \"local-fixture\",\n projectId: \"demo_project\",\n userId: \"demo_user\",\n productId: \"premium.monthly\",\n ...([\"subscription.started\", \"subscription.renewed\"].includes(eventType)\n ? {\n price: {\n currency: \"USD\",\n amountMicros: 9990000,\n provenance: \"store\",\n },\n }\n : {}),\n subscription: {\n productId: \"premium.monthly\",\n state,\n active,\n expiresAt: active ? now + 60_000 : now - 1000,\n willRenew: active && eventType !== \"subscription.canceled\",\n },\n };\n assert(validate(\"#/$defs/CommerceEvent\", event));\n const body = JSON.stringify(event);\n const timestamp = String(Math.floor(now / 1000));\n const headers = {\n host: \"receiver.example.test\",\n \"content-type\": WEBHOOK.contentType,\n [WEBHOOK.timestampHeader]: timestamp,\n [WEBHOOK.signatureHeader]: sign(secret, timestamp, body),\n [WEBHOOK.eventIdHeader]: event.eventId,\n [WEBHOOK.deliveryIdHeader]: randomUUID(),\n };\n const response = await fetch(consumer.url, {\n method: \"POST\",\n headers,\n body,\n });\n const result = await response.json();\n check(\n `${eventType}: authenticated and saved`,\n [response.status, result.duplicate],\n [200, false],\n );\n const duplicate = await fetch(consumer.url, {\n method: \"POST\",\n headers,\n body,\n });\n const duplicateResult = await duplicate.json();\n check(\n `${eventType}: redelivery deduplicated`,\n [duplicate.status, duplicateResult.duplicate],\n [200, true],\n );\n const tampered = await fetch(consumer.url, {\n method: \"POST\",\n headers,\n body: body + \" \",\n });\n check(`${eventType}: tampering rejected`, tampered.status, 401);\n results.push({\n event,\n httpStatus: response.status,\n duplicate: duplicateResult.duplicate,\n requestHost: headers.host,\n tamperedHttpStatus: tampered.status,\n });\n }\n check(\"One inbox record per event\", consumer.count(), lifecycle.length);\n consumer.reopen();\n check(\n \"Inbox survives reopening SQLite\",\n consumer.count(),\n lifecycle.length,\n );\n return {\n recordedAt: new Date().toISOString(),\n scope:\n \"Real loopback HTTP, signature validation and durable deduplication. Fictional lifecycle samples; no provider or store contacted. One emitter/project per receiver database. No business or revenue calculation.\",\n checks,\n results,\n inboxCount: consumer.count(),\n };\n } finally {\n await consumer.close();\n rmSync(directory, { recursive: true, force: true });\n }\n}\n\nif (import.meta.main) {\n if (process.argv[2] === \"demo\") {\n const report = await runConsumerDemo();\n if (process.argv[3] === \"--record\") {\n assert(process.argv[4], \"Provide a report path\");\n report.sourceHashes = Object.fromEntries(\n [\n \"consumer.mjs\",\n \"webhooks.mjs\",\n \"contract.mjs\",\n \"package.json\",\n \"package-lock.json\",\n ].map((name) => [\n name,\n createHash(\"sha256\")\n .update(readFileSync(join(import.meta.dir, name)))\n .digest(\"hex\"),\n ]),\n );\n writeFileSync(\n resolve(process.argv[4]),\n JSON.stringify(report, null, 2) + \"\\n\",\n );\n }\n console.log(\n `Receiver ready: ${report.inboxCount} events saved once; ${report.checks.length} checks passed. No external service contacted.`,\n );\n } else {\n const consumer = startConsumer({\n secret: process.env.COMMERCE_WEBHOOK_SECRET,\n path: resolve(process.env.COMMERCE_INBOX_PATH ?? \"consumer.sqlite\"),\n port: 5182,\n });\n console.log(\n `Receiver: ${consumer.url}\\nPersisted inbox: ${resolve(process.env.COMMERCE_INBOX_PATH ?? \"consumer.sqlite\")}`,\n );\n for (const signal of [\"SIGINT\", \"SIGTERM\"])\n process.on(signal, async () => {\n await consumer.close();\n process.exit(0);\n });\n }\n}\n", + "example/erasure.mjs": "import { createHmac, randomBytes, randomUUID } from \"node:crypto\";\n\n// Retain a stable retry marker without storing the user ID verbatim.\nexport function createErasureLedger(db) {\n db.exec(`\n PRAGMA secure_delete = ON;\n CREATE TABLE IF NOT EXISTS erasure_key (id INTEGER PRIMARY KEY CHECK (id = 1), value TEXT NOT NULL);\n CREATE TABLE IF NOT EXISTS erased_users (user_hash TEXT PRIMARY KEY, job_id TEXT NOT NULL);\n `);\n db.query(\"INSERT OR IGNORE INTO erasure_key VALUES (1, ?)\").run(\n randomBytes(32).toString(\"hex\"),\n );\n const key = db\n .query(\"SELECT value FROM erasure_key WHERE id = 1\")\n .get().value;\n const hash = (userId) =>\n createHmac(\"sha256\", key).update(userId).digest(\"hex\");\n return {\n has: (userId) =>\n Boolean(\n db\n .query(\"SELECT 1 FROM erased_users WHERE user_hash = ?\")\n .get(hash(userId)),\n ),\n remember(userId) {\n const userHash = hash(userId);\n db.query(\"INSERT OR IGNORE INTO erased_users VALUES (?, ?)\").run(\n userHash,\n randomUUID(),\n );\n return db\n .query(\"SELECT job_id FROM erased_users WHERE user_hash = ?\")\n .get(userHash).job_id;\n },\n };\n}\n", + "example/contract.mjs": "import Ajv from \"ajv/dist/2020.js\";\nimport { bundleSchema, HTTP_BINDING } from \"openiap-commerce-protocol\";\n\nconst ajv = new Ajv({ strict: false, allErrors: true });\najv.addSchema(bundleSchema);\nconst validators = new Map();\n\nexport function validate(pointer, value) {\n if (!validators.has(pointer)) {\n validators.set(pointer, ajv.compile({ $ref: bundleSchema.$id + pointer }));\n }\n return validators.get(pointer)(value);\n}\n\nexport function operation(name) {\n return HTTP_BINDING.operations.find((entry) => entry.name === name);\n}\n\nexport function protocolError(code) {\n return Response.json(\n { error: { code, message: code.replaceAll(\"_\", \" \").toLowerCase() } },\n { status: HTTP_BINDING.errorStatus[code] },\n );\n}\n", + "kit/server/api/commerce/handlers.ts": "// Transport-independent handlers for the OpenIAP Commerce Protocol operation\n// surface. The REST routes and the GraphQL resolvers both call these and only\n// these; business logic stays below, in the same Convex functions the\n// published /v1 and /v2 surfaces already use.\n\nimport capabilitiesExample from \"openiap-commerce-protocol/examples/provider-capabilities.json\";\n\nimport { api } from \"@/convex\";\nimport { client, handleConvexError } from \"../../convex\";\nimport { isValidSubscriptionUserId } from \"../../../convex/subscriptions/limits\";\nimport { normalizeBindUserPurchaseToken } from \"../v1/subscriptions\";\nimport { ProtocolOperationError, protocolCodeForConvexError } from \"./errors\";\nimport { admitVerification } from \"./verificationAdmission\";\nimport {\n buildAmazonRemoteId,\n buildHorizonRemoteId,\n} from \"../../../convex/purchases/identity\";\n\nexport interface ProtocolContext {\n apiKey: string;\n requestIp?: string;\n}\n\ntype SubscriptionRowV2 = {\n productId: string;\n platform: \"IOS\" | \"Android\";\n state: string;\n expiresAt?: number;\n renewsAt?: number;\n willRenew?: boolean;\n cancellationReason?: string;\n startedAt: number;\n updatedAt: number;\n};\n\nexport interface SubscriptionStatusSnapshot {\n productId: string;\n state: string;\n active: boolean;\n store?: string;\n expiresAt?: number;\n renewsAt?: number;\n willRenew?: boolean;\n cancellationReason?: string;\n startedAt?: number;\n updatedAt?: number;\n}\n\ninterface StoreEvidenceInput {\n store: string;\n apple?: { jws: string };\n google?: { purchaseToken: string };\n horizon?: { userId: string; sku: string };\n amazon?: { userId: string; receiptId: string; sandbox?: boolean };\n}\n\n// Fixed, safe messages per protocol code. A provider/Convex error message can\n// carry diagnostic detail (identifiers, internal state), so it never crosses\n// the trust boundary — the raw message is logged server-side instead.\nconst SAFE_MESSAGE: Record = {\n UNAUTHORIZED: \"A valid credential is required\",\n FORBIDDEN: \"This operation requires the server role\",\n INVALID_REQUEST: \"The request is invalid\",\n RATE_LIMITED: \"Too many requests. Retry after the indicated delay.\",\n VERIFICATION_FAILED: \"The provider could not obtain a verdict from the store\",\n INTERNAL_ERROR: \"The operation failed\",\n};\n\nfunction safeMessage(code: string): string {\n return SAFE_MESSAGE[code] ?? \"The operation failed\";\n}\n\nfunction rethrowAsProtocolError(error: unknown, fallbackCode: string): never {\n const convexError = handleConvexError(error);\n const code =\n (convexError && protocolCodeForConvexError(convexError.code)) ??\n fallbackCode;\n // Log only the protocol code, the Convex error CODE (an enum, never the free\n // text), and the JS error class. The raw provider message can carry a\n // receipt, token, JWS, userId, upstream URL, or source path, so it never\n // reaches the log — nor the response.\n console.error(\n \"[commerce] operation failed protocolCode=%s convexCode=%s errorClass=%s\",\n code,\n convexError?.code ?? \"none\",\n error instanceof Error ? error.name : typeof error,\n );\n throw new ProtocolOperationError(\n code,\n safeMessage(code),\n code === \"RATE_LIMITED\" ? convexError?.retryAfterSec : undefined,\n );\n}\n\nfunction requireUserId(userId: unknown): string {\n if (typeof userId !== \"string\" || !isValidSubscriptionUserId(userId)) {\n throw new ProtocolOperationError(\"INVALID_REQUEST\", \"userId is invalid\");\n }\n return userId;\n}\n\nfunction requireEvidence(\n input: StoreEvidenceInput,\n member: T | undefined,\n): T {\n if (member === undefined || member === null) {\n throw new ProtocolOperationError(\n \"INVALID_REQUEST\",\n `${input.store} evidence is required`,\n );\n }\n return member;\n}\n\n// The subscription rows come from the apple and google webhook lanes only, so\n// the platform axis maps onto the store axis without loss today. A future\n// store lane must extend this mapping before it can serve the snapshot.\nfunction storeOf(platform: SubscriptionRowV2[\"platform\"]): string {\n return platform === \"IOS\" ? \"apple\" : \"google\";\n}\n\n// The entitlement decision is not recomputed here: Convex already applied the\n// SPEC.md 2.3 predicate (subscriptions/query.ts isActive), returning the\n// active flag for status and only entitled rows for entitlements. Re-deriving\n// it at the transport layer is exactly the drift the caller passes `active`\n// in to avoid.\nfunction toSnapshot(\n row: SubscriptionRowV2,\n active: boolean,\n): SubscriptionStatusSnapshot {\n return {\n productId: row.productId,\n state: row.state,\n active,\n store: storeOf(row.platform),\n ...(row.expiresAt === undefined ? {} : { expiresAt: row.expiresAt }),\n ...(row.renewsAt === undefined ? {} : { renewsAt: row.renewsAt }),\n ...(row.willRenew === undefined ? {} : { willRenew: row.willRenew }),\n ...(row.cancellationReason === undefined\n ? {}\n : { cancellationReason: row.cancellationReason }),\n startedAt: row.startedAt,\n updatedAt: row.updatedAt,\n };\n}\n\nexport function providerCapabilities(): Record {\n // The published example is this implementation's own descriptor — SPEC.md\n // 10 says so — and kit's conformance suite pins it to the internal\n // capability map, so serving it cannot drift from either side.\n const { $comment: _comment, ...descriptor } = capabilitiesExample as Record<\n string,\n unknown\n >;\n return descriptor;\n}\n\ninterface StoreVerdict {\n isValid: boolean;\n state: string;\n productId?: string;\n environment?: string;\n stableRejection?: boolean;\n}\n\n// The store verification itself, without admission control. Kept separate so\n// the admission layer can wrap it identically for both bindings.\nasync function verifyPurchaseVerdict(\n context: ProtocolContext,\n input: StoreEvidenceInput,\n): Promise {\n const common = { apiKey: context.apiKey, requestIp: context.requestIp };\n try {\n switch (input.store) {\n case \"apple\": {\n const apple = requireEvidence(input, input.apple);\n return await client.action(\n api.purchases.ios.verifyAppStoreReceiptInternalV1,\n { ...common, jws: apple.jws },\n );\n }\n case \"google\": {\n const google = requireEvidence(input, input.google);\n return await client.action(\n api.purchases.android.verifyGooglePlayReceiptInternalV1,\n { ...common, purchaseToken: google.purchaseToken },\n );\n }\n case \"horizon\": {\n const horizon = requireEvidence(input, input.horizon);\n return await client.action(\n api.purchases.horizon.verifyMetaHorizonReceiptInternalV1,\n { ...common, userId: horizon.userId, sku: horizon.sku },\n );\n }\n case \"amazon\": {\n const amazon = requireEvidence(input, input.amazon);\n return await client.action(\n api.purchases.amazon.verifyAmazonReceiptInternalV1,\n {\n ...common,\n userId: amazon.userId,\n receiptId: amazon.receiptId,\n sandbox: amazon.sandbox,\n },\n );\n }\n default:\n throw new ProtocolOperationError(\n \"UNSUPPORTED_STORE\",\n \"This provider does not integrate the named store\",\n );\n }\n } catch (error) {\n if (error instanceof ProtocolOperationError) throw error;\n rethrowAsProtocolError(error, \"VERIFICATION_FAILED\");\n }\n}\n\nexport async function verifyPurchase(\n context: ProtocolContext,\n input: StoreEvidenceInput,\n): Promise<{\n store: string;\n isValid: boolean;\n state: string;\n productId?: string;\n environment?: string;\n}> {\n // Admission is shared by both bindings: the replay guard, the process-wide\n // in-flight cap, and the stable-failure cooldown apply before and after the\n // store call, exactly as the /v1 verify pipeline does.\n const admission = admitVerification({\n apiKey: context.apiKey,\n requestIp: context.requestIp,\n input,\n });\n if (!admission.admitted) {\n throw new ProtocolOperationError(\n admission.code,\n \"Too many verifications. Retry after the indicated delay.\",\n admission.retryAfterSec,\n );\n }\n const verdict = await admission.run(() =>\n verifyPurchaseVerdict(context, input),\n );\n\n return {\n store: input.store,\n isValid: verdict.isValid,\n state: verdict.state,\n ...(verdict.productId === undefined\n ? {}\n : { productId: verdict.productId }),\n // The protocol's environment space uses lowercase tokens; the store\n // verdict reports the capitalized /v1 spelling of the same values.\n ...(verdict.environment === undefined\n ? {}\n : { environment: verdict.environment.toLowerCase() }),\n };\n}\n\nexport async function subscriptionStatus(\n context: ProtocolContext,\n input: { userId: string },\n): Promise<{ active: boolean; subscription?: SubscriptionStatusSnapshot }> {\n const userId = requireUserId(input.userId);\n try {\n const result = await client.query(\n api.subscriptions.query.subscriptionStatusV2,\n { apiKey: context.apiKey, userId, now: Date.now() },\n );\n return {\n active: result.active,\n // Convex returns the entitling row when active, otherwise a context row;\n // the snapshot's own gate is exactly the top-level decision.\n ...(result.subscription === null\n ? {}\n : { subscription: toSnapshot(result.subscription, result.active) }),\n };\n } catch (error) {\n rethrowAsProtocolError(error, \"INTERNAL_ERROR\");\n }\n}\n\nexport async function entitlements(\n context: ProtocolContext,\n input: { userId: string },\n): Promise<{\n userId: string;\n productIds: string[];\n subscriptions: SubscriptionStatusSnapshot[];\n}> {\n const userId = requireUserId(input.userId);\n try {\n const purchases = await client.action(\n api.purchases.action.readBoundPurchaseEntitlements,\n { apiKey: context.apiKey, userId },\n );\n const result = await client.query(api.subscriptions.query.entitlementsV2, {\n apiKey: context.apiKey,\n userId,\n now: Date.now(),\n });\n return {\n userId: result.userId,\n productIds: [...new Set([...result.productIds, ...purchases.productIds])],\n // entitlementsV2 returns only entitled rows, so every snapshot is active.\n subscriptions: result.subscriptions.map((row: SubscriptionRowV2) =>\n toSnapshot(row, true),\n ),\n };\n } catch (error) {\n rethrowAsProtocolError(error, \"INTERNAL_ERROR\");\n }\n}\n\n/**\n * SPEC.md 5: server-role authorization precedes input validation. The edge\n * prefix check cannot classify an unknown or legacy key, so both transport\n * adapters call this before evaluating the operation input — an invalid\n * credential gets UNAUTHORIZED / FORBIDDEN and learns nothing about the\n * privileged surface (evidence shapes, member bounds, supported stores).\n */\nexport async function assertServerCredential(\n context: ProtocolContext,\n): Promise {\n try {\n await client.query(api.subscriptions.query.assertServerAccess, {\n apiKey: context.apiKey,\n });\n } catch (error) {\n rethrowAsProtocolError(error, \"INTERNAL_ERROR\");\n }\n}\n\nexport async function bindPurchase(\n context: ProtocolContext,\n input: StoreEvidenceInput & { userId: string },\n): Promise<{ bound: boolean }> {\n const userId = requireUserId(input.userId);\n if (input.store === \"amazon\" || input.store === \"horizon\") {\n const remoteId =\n input.store === \"amazon\"\n ? buildAmazonRemoteId({\n ...requireEvidence(input, input.amazon),\n sandbox: input.amazon?.sandbox === true,\n })\n : buildHorizonRemoteId(\n requireEvidence(input, input.horizon).userId,\n requireEvidence(input, input.horizon).sku,\n );\n try {\n return await client.mutation(\n api.purchases.mutation.bindVerifiedPurchaseAsServer,\n {\n apiKey: context.apiKey,\n userId,\n store: input.store,\n remoteId,\n },\n );\n } catch (error) {\n rethrowAsProtocolError(error, \"INTERNAL_ERROR\");\n }\n }\n let rawToken: string;\n switch (input.store) {\n case \"apple\":\n rawToken = requireEvidence(input, input.apple).jws;\n break;\n case \"google\":\n rawToken = requireEvidence(input, input.google).purchaseToken;\n break;\n default:\n throw new ProtocolOperationError(\n \"UNSUPPORTED_STORE\",\n \"This provider does not integrate the named store\",\n );\n }\n\n const normalized = normalizeBindUserPurchaseToken(rawToken);\n if (!normalized.ok) {\n throw new ProtocolOperationError(\"INVALID_REQUEST\", normalized.message);\n }\n\n try {\n // bindUserAsServer asserts admin access in Convex, where the stored key\n // type is authoritative; the edge prefix check cannot classify a legacy\n // no-prefix key. A publishable or legacy key is rejected with\n // INSUFFICIENT_SCOPE, mapped to FORBIDDEN.\n const result = await client.mutation(\n api.subscriptions.mutation.bindUserAsServer,\n {\n apiKey: context.apiKey,\n purchaseToken: normalized.purchaseToken,\n userId,\n },\n );\n return { bound: result.bound };\n } catch (error) {\n if (error instanceof ProtocolOperationError) throw error;\n rethrowAsProtocolError(error, \"INTERNAL_ERROR\");\n }\n}\n\nexport async function eraseUser(\n context: ProtocolContext,\n input: { userId: string },\n): Promise<{ accepted: boolean; jobId?: string; status?: string }> {\n const userId = requireUserId(input.userId);\n try {\n const result = await client.mutation(\n api.subscriptions.mutation.requestUserErasure,\n { apiKey: context.apiKey, userId },\n );\n return { accepted: result.ok, jobId: result.jobId, status: result.status };\n } catch (error) {\n rethrowAsProtocolError(error, \"INTERNAL_ERROR\");\n }\n}\n", + "kit/server/api/commerce/routes.test.ts": "// Edge behavior the conformance vectors do not pin: Convex error mapping,\n// oversized bodies, GraphQL bounds, introspection agreement, and the\n// evidence-normalization paths of bindPurchase.\n\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\nimport { Hono } from \"hono\";\nimport { buildSchema, getIntrospectionQuery, printSchema } from \"graphql\";\nimport operationsSdl from \"openiap-commerce-protocol/generated/bindings/operations-sdl.json\";\n\nconst mocks = vi.hoisted(() => ({\n action: vi.fn(),\n mutation: vi.fn(),\n query: vi.fn(),\n handleConvexError: vi.fn(),\n}));\n\nvi.mock(\"@/convex\", () => ({\n api: {\n purchases: {\n action: {\n readBoundPurchaseEntitlements: \"readBoundPurchaseEntitlements\",\n },\n mutation: {\n bindVerifiedPurchaseAsServer: \"bindVerifiedPurchaseAsServer\",\n },\n ios: { verifyAppStoreReceiptInternalV1: \"verifyApple\" },\n android: { verifyGooglePlayReceiptInternalV1: \"verifyGoogle\" },\n horizon: { verifyMetaHorizonReceiptInternalV1: \"verifyHorizon\" },\n amazon: { verifyAmazonReceiptInternalV1: \"verifyAmazon\" },\n },\n subscriptions: {\n query: {\n subscriptionStatusV2: \"subscriptionStatusV2\",\n entitlementsV2: \"entitlementsV2\",\n assertServerAccess: \"assertServerAccess\",\n },\n mutation: {\n bindUserAsServer: \"bindUserAsServer\",\n requestUserErasure: \"requestUserErasure\",\n },\n },\n },\n}));\n\nvi.mock(\"../../convex\", () => ({\n client: {\n action: mocks.action,\n mutation: mocks.mutation,\n query: mocks.query,\n },\n handleConvexError: mocks.handleConvexError,\n}));\n\nconst { commerceRoutes } = await import(\"./routes\");\nconst { commerceGraphqlSchema } = await import(\"./graphql\");\n\nconst SERVER_KEY = \"openiap-kit_sk_unit\";\nconst CLIENT_KEY = \"openiap-kit_pk_unit\";\nconst GOOGLE_TOKEN = \"unit-google-purchase-token-0000000001\";\n\nfunction buildApp(): Hono {\n const app = new Hono();\n app.route(\"/commerce/v1\", commerceRoutes);\n return app;\n}\n\nfunction post(\n app: Hono,\n path: string,\n body: unknown,\n key: string | null = SERVER_KEY,\n) {\n return app.request(path, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n ...(key ? { Authorization: `Bearer ${key}` } : {}),\n },\n body: JSON.stringify(body),\n });\n}\n\ndescribe(\"commerce REST adapter\", () => {\n beforeEach(() => {\n mocks.action.mockReset();\n mocks.mutation.mockReset();\n mocks.query.mockReset();\n mocks.handleConvexError.mockReset();\n mocks.handleConvexError.mockReturnValue(null);\n });\n\n it(\"maps a Convex INVALID_API_KEY onto UNAUTHORIZED with status 401\", async () => {\n mocks.query.mockRejectedValue(new Error(\"boom\"));\n mocks.handleConvexError.mockReturnValue({\n code: \"INVALID_API_KEY\",\n message: \"API key is invalid or inactive\",\n });\n const response = await buildApp().request(\n \"/commerce/v1/subscriptions/status?userId=user-1\",\n { headers: { Authorization: `Bearer ${SERVER_KEY}` } },\n );\n expect(response.status).toBe(401);\n expect((await response.json()).error.code).toBe(\"UNAUTHORIZED\");\n });\n\n it(\"maps a Convex INSUFFICIENT_SCOPE onto FORBIDDEN with status 403\", async () => {\n mocks.query.mockRejectedValue(new Error(\"boom\"));\n mocks.handleConvexError.mockReturnValue({\n code: \"INSUFFICIENT_SCOPE\",\n message: \"This operation requires a secret admin key\",\n });\n const response = await buildApp().request(\n \"/commerce/v1/entitlements?userId=user-1\",\n { headers: { Authorization: `Bearer openiap-kit_legacy` } },\n );\n expect(response.status).toBe(403);\n expect((await response.json()).error.code).toBe(\"FORBIDDEN\");\n });\n\n it(\"evaluates subscription expiry after store ownership refreshes\", async () => {\n const clock = vi.spyOn(Date, \"now\").mockReturnValue(1_000);\n try {\n const subscription = {\n productId: \"apple-premium\",\n platform: \"IOS\",\n state: \"Active\",\n expiresAt: 2_000,\n startedAt: 0,\n updatedAt: 0,\n };\n mocks.action.mockImplementation(async () => {\n clock.mockReturnValue(3_000);\n return { productIds: [\"amazon-premium\"] };\n });\n mocks.query.mockImplementation(async (name, args) => {\n if (name !== \"entitlementsV2\") return { ok: true };\n const active = subscription.expiresAt > args.now;\n return {\n userId: args.userId,\n productIds: active ? [subscription.productId] : [],\n subscriptions: active ? [subscription] : [],\n };\n });\n const response = await buildApp().request(\n \"/commerce/v1/entitlements?userId=user-1\",\n { headers: { Authorization: `Bearer ${SERVER_KEY}` } },\n );\n expect(response.status).toBe(200);\n expect(await response.json()).toEqual({\n userId: \"user-1\",\n productIds: [\"amazon-premium\"],\n subscriptions: [],\n });\n } finally {\n clock.mockRestore();\n }\n });\n\n it(\"observes subscription erasure completed during a store refresh\", async () => {\n let erased = false;\n mocks.action.mockImplementation(async () => {\n erased = true;\n return { productIds: [] };\n });\n mocks.query.mockImplementation(async (name, args) => {\n if (name !== \"entitlementsV2\") return { ok: true };\n return {\n userId: args.userId,\n productIds: erased ? [] : [\"apple-premium\"],\n subscriptions: [],\n };\n });\n const response = await buildApp().request(\n \"/commerce/v1/entitlements?userId=user-1\",\n { headers: { Authorization: `Bearer ${SERVER_KEY}` } },\n );\n expect(response.status).toBe(200);\n expect(await response.json()).toEqual({\n userId: \"user-1\",\n productIds: [],\n subscriptions: [],\n });\n });\n\n it(\"reports VERIFICATION_FAILED as 502 when the store verdict is unreachable\", async () => {\n mocks.action.mockRejectedValue(new Error(\"upstream down\"));\n const response = await post(\n buildApp(),\n \"/commerce/v1/purchases/verify\",\n { store: \"google\", google: { purchaseToken: GOOGLE_TOKEN } },\n CLIENT_KEY,\n );\n expect(response.status).toBe(502);\n const body = await response.json();\n expect(body.error.code).toBe(\"VERIFICATION_FAILED\");\n expect(body.error.message).not.toContain(\"upstream\");\n });\n\n it(\"preserves the Convex admission retry hint\", async () => {\n mocks.action.mockRejectedValue(new Error(\"limited\"));\n mocks.handleConvexError.mockReturnValue({\n code: \"RATE_LIMITED\",\n message: \"Too many verification requests\",\n retryAfterSec: 2,\n });\n\n const response = await post(\n buildApp(),\n \"/commerce/v1/purchases/verify\",\n { store: \"google\", google: { purchaseToken: GOOGLE_TOKEN } },\n CLIENT_KEY,\n );\n\n expect(response.status).toBe(429);\n expect(response.headers.get(\"Retry-After\")).toBe(\"2\");\n expect((await response.json()).error.code).toBe(\"RATE_LIMITED\");\n });\n\n it.each([\n \"PLAY_STORE_VERIFICATION_ERROR\",\n \"META_HORIZON_VERIFICATION_ERROR\",\n \"AMAZON_RECEIPT_VERIFICATION_ERROR\",\n \"APP_STORE_TRANSACTION_VERIFICATION_FAILED\",\n ])(\n \"maps the structured store error %s to VERIFICATION_FAILED 502\",\n async (code) => {\n mocks.action.mockRejectedValue(new Error(\"convex error\"));\n mocks.handleConvexError.mockReturnValue({\n code,\n message: `store said no for token ghi789 at /verify/${code}`,\n });\n const response = await post(\n buildApp(),\n \"/commerce/v1/purchases/verify\",\n { store: \"google\", google: { purchaseToken: GOOGLE_TOKEN } },\n CLIENT_KEY,\n );\n expect(response.status).toBe(502);\n expect((await response.json()).error.code).toBe(\"VERIFICATION_FAILED\");\n },\n );\n\n it(\"logs no raw provider detail — only codes and error class\", async () => {\n const logged: string[] = [];\n const spy = vi\n .spyOn(console, \"error\")\n .mockImplementation((...args: unknown[]) => {\n logged.push(args.map(String).join(\" \"));\n });\n try {\n mocks.query.mockRejectedValue(\n new Error(\n \"ConvexError at /srv/convex/subscriptions/query.ts:512 token=ghi789\",\n ),\n );\n mocks.handleConvexError.mockReturnValue({\n code: \"INTERNAL_ERROR\",\n message:\n \"row subscriptions:abc for userId=alice token=ghi789 upstream=https://buy.itunes.apple.com failed\",\n });\n const response = await buildApp().request(\n \"/commerce/v1/subscriptions/status?userId=user-1\",\n { headers: { Authorization: `Bearer ${SERVER_KEY}` } },\n );\n expect(response.status).toBe(500);\n const combined = logged.join(\"\\n\");\n for (const secret of [\n \"ghi789\",\n \"subscriptions:abc\",\n \"userId=alice\",\n \"buy.itunes.apple.com\",\n \"query.ts:512\",\n ]) {\n expect(combined).not.toContain(secret);\n }\n } finally {\n spy.mockRestore();\n }\n });\n\n it(\"rejects an oversized body before any Convex call\", async () => {\n const response = await post(buildApp(), \"/commerce/v1/purchases/verify\", {\n store: \"google\",\n google: { purchaseToken: \"x\".repeat(40_000) },\n });\n expect(response.status).toBe(400);\n expect(mocks.action).not.toHaveBeenCalled();\n });\n\n it(\"binds an Apple purchase by the transaction id inside the JWS\", async () => {\n mocks.mutation.mockResolvedValue({ ok: true, bound: true });\n const payload = Buffer.from(\n JSON.stringify({ originalTransactionId: \"2000000123456789\" }),\n ).toString(\"base64url\");\n const jws = `eyJhbGciOiJFUzI1NiJ9.${payload}.c2lnbmF0dXJl`;\n const response = await post(buildApp(), \"/commerce/v1/purchases/bind\", {\n userId: \"user-1\",\n store: \"apple\",\n apple: { jws },\n });\n expect(response.status).toBe(200);\n expect(await response.json()).toEqual({ bound: true });\n expect(mocks.mutation).toHaveBeenCalledWith(\"bindUserAsServer\", {\n apiKey: SERVER_KEY,\n purchaseToken: \"2000000123456789\",\n userId: \"user-1\",\n });\n });\n\n it(\"rejects an Apple JWS that carries no transaction identity\", async () => {\n const payload = Buffer.from(JSON.stringify({ nothing: true })).toString(\n \"base64url\",\n );\n const response = await post(buildApp(), \"/commerce/v1/purchases/bind\", {\n userId: \"user-1\",\n store: \"apple\",\n apple: { jws: `eyJhbGciOiJFUzI1NiJ9.${payload}.c2ln` },\n });\n expect(response.status).toBe(400);\n expect(mocks.mutation).not.toHaveBeenCalled();\n });\n\n it(\"binds Horizon using the verified store user and SKU identity\", async () => {\n mocks.mutation.mockResolvedValue({ bound: true });\n const response = await post(buildApp(), \"/commerce/v1/purchases/bind\", {\n userId: \"user-1\",\n store: \"horizon\",\n horizon: { userId: \"1234567890\", sku: \"premium\" },\n });\n expect(response.status).toBe(200);\n expect(await response.json()).toEqual({ bound: true });\n expect(mocks.mutation).toHaveBeenCalledWith(\n \"bindVerifiedPurchaseAsServer\",\n {\n apiKey: SERVER_KEY,\n userId: \"user-1\",\n store: \"horizon\",\n remoteId: \"1234567890:premium\",\n },\n );\n });\n\n it(\"authenticates before revealing a non-binding store verdict\", async () => {\n // The unknown key clears the edge (it is not a publishable prefix) but fails\n // the authoritative check. It must get UNAUTHORIZED, not `bound: false`.\n mocks.query.mockRejectedValue(new Error(\"boom\"));\n mocks.handleConvexError.mockReturnValue({\n code: \"INVALID_API_KEY\",\n message: \"API key is invalid or inactive\",\n });\n const response = await post(\n buildApp(),\n \"/commerce/v1/purchases/bind\",\n {\n userId: \"user-1\",\n store: \"horizon\",\n horizon: { userId: \"1\", sku: \"x\" },\n },\n \"openiap-kit_sk_unknown\",\n );\n expect(response.status).toBe(401);\n expect((await response.json()).error.code).toBe(\"UNAUTHORIZED\");\n // Auth ran first, and no binding happened for an unauthenticated caller.\n expect(mocks.query).toHaveBeenCalledWith(\"assertServerAccess\", {\n apiKey: \"openiap-kit_sk_unknown\",\n });\n expect(mocks.mutation).not.toHaveBeenCalled();\n });\n\n it(\"authenticates before evidence parsing: an unknown key with malformed evidence gets 401, not INVALID_REQUEST\", async () => {\n mocks.query.mockRejectedValue(new Error(\"boom\"));\n mocks.handleConvexError.mockReturnValue({\n code: \"INVALID_API_KEY\",\n message: \"API key is invalid or inactive\",\n });\n const response = await post(\n buildApp(),\n \"/commerce/v1/purchases/bind\",\n { userId: \"user-1\", store: \"apple\", apple: { jws: \"not-a-valid-jws\" } },\n \"openiap-kit_sk_unknown\",\n );\n expect(response.status).toBe(401);\n expect((await response.json()).error.code).toBe(\"UNAUTHORIZED\");\n expect(mocks.mutation).not.toHaveBeenCalled();\n });\n\n it(\"maps an under-scoped key on bind to FORBIDDEN before store validation\", async () => {\n mocks.query.mockRejectedValue(new Error(\"boom\"));\n mocks.handleConvexError.mockReturnValue({\n code: \"INSUFFICIENT_SCOPE\",\n message: \"This operation requires a secret admin key\",\n });\n const response = await post(\n buildApp(),\n \"/commerce/v1/purchases/bind\",\n {\n userId: \"user-1\",\n store: \"horizon\",\n horizon: { userId: \"1\", sku: \"x\" },\n },\n \"openiap-kit_legacy\",\n );\n expect(response.status).toBe(403);\n expect((await response.json()).error.code).toBe(\"FORBIDDEN\");\n expect(mocks.mutation).not.toHaveBeenCalled();\n });\n\n it(\"authenticates a server read before input schema validation (REST)\", async () => {\n // SPEC.md 5: the transport must not answer INVALID_REQUEST about a\n // privileged read's input to a caller whose credential is unknown.\n mocks.query.mockRejectedValue(new Error(\"boom\"));\n mocks.handleConvexError.mockReturnValue({\n code: \"INVALID_API_KEY\",\n message: \"API key is invalid or inactive\",\n });\n const overlong = \"x\".repeat(600);\n const response = await buildApp().request(\n `/commerce/v1/subscriptions/status?userId=${overlong}`,\n { headers: { Authorization: \"Bearer openiap-kit_sk_unknown\" } },\n );\n expect(response.status).toBe(401);\n expect((await response.json()).error.code).toBe(\"UNAUTHORIZED\");\n // Exactly the authoritative gate ran — the read itself was never consulted.\n expect(mocks.query).toHaveBeenCalledTimes(1);\n expect(mocks.query).toHaveBeenCalledWith(\"assertServerAccess\", {\n apiKey: \"openiap-kit_sk_unknown\",\n });\n });\n\n it(\"authenticates a server read before body parsing: unparseable bind body gets 401\", async () => {\n mocks.query.mockRejectedValue(new Error(\"boom\"));\n mocks.handleConvexError.mockReturnValue({\n code: \"INVALID_API_KEY\",\n message: \"API key is invalid or inactive\",\n });\n const response = await buildApp().request(\"/commerce/v1/purchases/bind\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n Authorization: \"Bearer openiap-kit_sk_unknown\",\n },\n body: \"this is not json\",\n });\n expect(response.status).toBe(401);\n expect((await response.json()).error.code).toBe(\"UNAUTHORIZED\");\n expect(mocks.mutation).not.toHaveBeenCalled();\n });\n\n it(\"never echoes submitted store evidence in GraphQL request errors\", async () => {\n // graphql-js coercion messages embed the submitted variable value — an\n // unknown member on VerifyPurchaseInput would echo the whole JWS back to\n // an unauthenticated caller. SPEC.md 8: no evidence in messages, ever.\n const jws = \"eyJhbGciOiJFUzI1NiJ9.SECRET_EVIDENCE_PAYLOAD.c2ln\";\n const response = await post(\n buildApp(),\n \"/commerce/v1/graphql\",\n {\n query:\n \"mutation VerifyPurchase($input: VerifyPurchaseInput!) { verifyPurchase(input: $input) { isValid } }\",\n operationName: \"VerifyPurchase\",\n variables: { input: { store: \"apple\", apple: { jws }, junk: 1 } },\n },\n null,\n );\n expect(response.status).toBe(200);\n const text = await response.text();\n expect(text).not.toContain(\"SECRET_EVIDENCE_PAYLOAD\");\n expect(text).not.toContain(jws);\n const body = JSON.parse(text);\n expect(body.errors[0].extensions.code).toBe(\"INVALID_REQUEST\");\n });\n\n it(\"never echoes evidence pasted as a document literal (validation path)\", async () => {\n const response = await post(\n buildApp(),\n \"/commerce/v1/graphql\",\n {\n query:\n 'mutation { verifyPurchase(input: {store: \"amazon\", amazon: {receiptId: \"r\", userId: \"u\", sandbox: \"LITERAL_EVIDENCE.SIG\"}}) { isValid } }',\n },\n null,\n );\n const text = await response.text();\n expect(text).not.toContain(\"LITERAL_EVIDENCE\");\n expect(JSON.parse(text).errors[0].extensions.code).toBe(\"INVALID_REQUEST\");\n });\n\n it(\"authorizes before variable coercion: structurally invalid server input gets 401, not a field-by-field verdict\", async () => {\n // graphql-js coercion runs before any resolver, so the pre-execute auth in\n // executeCommerceGraphql is what keeps SPEC.md 5 ordering on GraphQL. An\n // uncredentialed caller probing which members EntitlementsInput requires\n // must learn nothing.\n const response = await post(\n buildApp(),\n \"/commerce/v1/graphql\",\n {\n query:\n \"query Entitlements($input: EntitlementsInput!) { entitlements(input: $input) { userId } }\",\n operationName: \"Entitlements\",\n variables: { input: {} },\n },\n null,\n );\n expect(response.status).toBe(200);\n const body = await response.json();\n expect(body.errors[0].extensions.code).toBe(\"UNAUTHORIZED\");\n expect(body.errors[0].message).not.toContain(\"userId\");\n });\n\n it(\"authorizes before variable coercion with an unknown server key too\", async () => {\n mocks.query.mockRejectedValue(new Error(\"boom\"));\n mocks.handleConvexError.mockReturnValue({\n code: \"INVALID_API_KEY\",\n message: \"API key is invalid or inactive\",\n });\n const response = await post(\n buildApp(),\n \"/commerce/v1/graphql\",\n {\n query:\n \"query Entitlements($input: EntitlementsInput!) { entitlements(input: $input) { userId } }\",\n operationName: \"Entitlements\",\n variables: { input: {} },\n },\n \"openiap-kit_sk_unknown\",\n );\n const body = await response.json();\n expect(body.errors[0].extensions.code).toBe(\"UNAUTHORIZED\");\n expect(mocks.query).toHaveBeenCalledWith(\"assertServerAccess\", {\n apiKey: \"openiap-kit_sk_unknown\",\n });\n });\n\n it(\"authenticates a server read before input schema validation (GraphQL)\", async () => {\n mocks.query.mockRejectedValue(new Error(\"boom\"));\n mocks.handleConvexError.mockReturnValue({\n code: \"INVALID_API_KEY\",\n message: \"API key is invalid or inactive\",\n });\n const response = await post(\n buildApp(),\n \"/commerce/v1/graphql\",\n {\n query:\n \"query SubscriptionStatus($input: SubscriptionStatusInput!) { subscriptionStatus(input: $input) { active } }\",\n operationName: \"SubscriptionStatus\",\n variables: { input: { userId: \"x\".repeat(600) } },\n },\n \"openiap-kit_sk_unknown\",\n );\n expect(response.status).toBe(200);\n const body = await response.json();\n expect(body.errors[0].extensions.code).toBe(\"UNAUTHORIZED\");\n expect(mocks.query).toHaveBeenCalledTimes(1);\n expect(mocks.query).toHaveBeenCalledWith(\"assertServerAccess\", {\n apiKey: \"openiap-kit_sk_unknown\",\n });\n });\n\n it(\"answers unknown commerce paths with a protocol 404\", async () => {\n const response = await buildApp().request(\"/commerce/v1/does-not-exist\");\n expect(response.status).toBe(404);\n expect((await response.json()).error.code).toBe(\"NOT_FOUND\");\n });\n});\n\ndescribe(\"commerce GraphQL adapter\", () => {\n beforeEach(() => {\n mocks.action.mockReset();\n mocks.mutation.mockReset();\n mocks.query.mockReset();\n mocks.handleConvexError.mockReset();\n mocks.handleConvexError.mockReturnValue(null);\n });\n\n it(\"serves the generated projection\", () => {\n // operations-sdl.json.sdl is pinned byte-identical to operations.graphql\n // (the normative projection per SPEC.md 7) in the spec package's\n // operations.test.mjs, so building the served schema from it is equivalent\n // to building it from the .graphql file.\n expect(printSchema(commerceGraphqlSchema)).toBe(\n printSchema(buildSchema(operationsSdl.sdl)),\n );\n expect(commerceGraphqlSchema.getSubscriptionType()).toBeUndefined();\n });\n\n it(\"answers the standard introspection query through the real endpoint\", async () => {\n // Exercise the HTTP path (bounds + validate + execute), not graphqlSync —\n // the bounds check must let a single-root-field introspection through.\n const response = await post(buildApp(), \"/commerce/v1/graphql\", {\n query: getIntrospectionQuery(),\n operationName: \"IntrospectionQuery\",\n });\n expect(response.status).toBe(200);\n const body = await response.json();\n expect(body.errors).toBeUndefined();\n expect(body.data.__schema).toBeTruthy();\n });\n\n it(\"blocks alias amplification hidden in an inline fragment\", async () => {\n const response = await post(buildApp(), \"/commerce/v1/graphql\", {\n query:\n \"query Amplify { ... on Query { a: providerCapabilities { specVersion } b: providerCapabilities { specVersion } c: providerCapabilities { specVersion } } }\",\n operationName: \"Amplify\",\n });\n expect(response.status).toBe(200);\n const body = await response.json();\n expect(body.data).toBeUndefined();\n expect(body.errors[0].extensions.code).toBe(\"INVALID_REQUEST\");\n expect(body.errors[0].message).toContain(\"one operation field\");\n });\n\n it(\"blocks alias amplification hidden in a named fragment spread\", async () => {\n const response = await post(buildApp(), \"/commerce/v1/graphql\", {\n query:\n \"query Amplify { ...F } fragment F on Query { a: providerCapabilities { specVersion } b: providerCapabilities { specVersion } }\",\n operationName: \"Amplify\",\n });\n const body = await response.json();\n expect(body.data).toBeUndefined();\n expect(body.errors[0].extensions.code).toBe(\"INVALID_REQUEST\");\n });\n\n it(\"rejects a request with more than one operation\", async () => {\n const response = await post(buildApp(), \"/commerce/v1/graphql\", {\n query:\n \"query A { providerCapabilities { specVersion } } query B { providerCapabilities { specVersion } }\",\n operationName: \"A\",\n });\n expect(response.status).toBe(200);\n const body = await response.json();\n expect(body.errors[0].extensions.code).toBe(\"INVALID_REQUEST\");\n });\n\n it(\"rejects a subscription operation at the door\", async () => {\n const response = await post(buildApp(), \"/commerce/v1/graphql\", {\n query: \"subscription { anything }\",\n });\n const body = await response.json();\n expect(body.errors[0].extensions.code).toBe(\"INVALID_REQUEST\");\n expect(body.errors[0].message).toContain(\"no subscriptions\");\n });\n\n it(\"returns a fixed safe message, never the raw provider detail (GraphQL)\", async () => {\n mocks.query.mockRejectedValue(\n new Error(\"ConvexHttpClient exploded at /very/private/path.ts\"),\n );\n // A Convex error whose message carries diagnostic detail.\n mocks.handleConvexError.mockReturnValue({\n code: \"INVALID_INPUT\",\n message:\n \"row subscriptions:abc123 for project proj_secret failed at :512\",\n });\n const response = await post(buildApp(), \"/commerce/v1/graphql\", {\n query:\n \"query SubscriptionStatus($input: SubscriptionStatusInput!) { subscriptionStatus(input: $input) { active } }\",\n operationName: \"SubscriptionStatus\",\n variables: { input: { userId: \"user-1\" } },\n });\n const body = await response.json();\n expect(body.errors[0].extensions.code).toBe(\"INVALID_REQUEST\");\n expect(body.errors[0].message).toBe(\"The request is invalid\");\n const serialized = JSON.stringify(body);\n expect(serialized).not.toContain(\"subscriptions:abc123\");\n expect(serialized).not.toContain(\"proj_secret\");\n expect(serialized).not.toContain(\"private/path\");\n });\n\n it(\"refuses a verification credential on a server operation\", async () => {\n const response = await post(\n buildApp(),\n \"/commerce/v1/graphql\",\n {\n query:\n \"mutation EraseUser($input: EraseUserInput!) { eraseUser(input: $input) { accepted } }\",\n operationName: \"EraseUser\",\n variables: { input: { userId: \"user-1\" } },\n },\n CLIENT_KEY,\n );\n const body = await response.json();\n expect(body.errors[0].extensions.code).toBe(\"FORBIDDEN\");\n expect(mocks.mutation).not.toHaveBeenCalled();\n });\n\n // The two bindings must return the same protocol code for the same input\n // (SPEC.md 8). GraphQL scalar coercion does not check the generated schema's\n // patterns and bounds, so the binding runs the same Ajv validation REST does.\n it(\"rejects a value-space violation with INVALID_REQUEST, matching REST\", async () => {\n const badStore = {\n query:\n \"mutation VerifyPurchase($input: VerifyPurchaseInput!) { verifyPurchase(input: $input) { isValid } }\",\n operationName: \"VerifyPurchase\",\n variables: { input: { store: \"APPLE\", apple: { jws: \"x\".repeat(200) } } },\n };\n const gql = await post(\n buildApp(),\n \"/commerce/v1/graphql\",\n badStore,\n CLIENT_KEY,\n );\n const gqlBody = await gql.json();\n expect(gqlBody.errors[0].extensions.code).toBe(\"INVALID_REQUEST\");\n\n const rest = await post(\n buildApp(),\n \"/commerce/v1/purchases/verify\",\n { store: \"APPLE\", apple: { jws: \"x\".repeat(200) } },\n CLIENT_KEY,\n );\n expect(rest.status).toBe(400);\n expect((await rest.json()).error.code).toBe(\"INVALID_REQUEST\");\n expect(mocks.action).not.toHaveBeenCalled();\n });\n\n it(\"rejects an empty JWS with INVALID_REQUEST rather than forwarding it\", async () => {\n const response = await post(\n buildApp(),\n \"/commerce/v1/graphql\",\n {\n query:\n \"mutation VerifyPurchase($input: VerifyPurchaseInput!) { verifyPurchase(input: $input) { isValid } }\",\n operationName: \"VerifyPurchase\",\n variables: { input: { store: \"apple\", apple: { jws: \"\" } } },\n },\n CLIENT_KEY,\n );\n expect((await response.json()).errors[0].extensions.code).toBe(\n \"INVALID_REQUEST\",\n );\n expect(mocks.action).not.toHaveBeenCalled();\n });\n\n it(\"caps a single request to one root field, blocking alias amplification\", async () => {\n const aliases = Array.from(\n { length: 5 },\n (_unused, index) =>\n `a${index}: entitlements(input: {userId: \"user-1\"}) { userId }`,\n ).join(\" \");\n const response = await post(buildApp(), \"/commerce/v1/graphql\", {\n query: `query Amplify { ${aliases} }`,\n operationName: \"Amplify\",\n });\n const body = await response.json();\n expect(body.errors[0].extensions.code).toBe(\"INVALID_REQUEST\");\n expect(mocks.query).not.toHaveBeenCalled();\n });\n\n it(\"answers every GraphQL failure with HTTP 200 (single status policy)\", async () => {\n // SPEC.md 7: the GraphQL binding's operation and request-level failures are\n // HTTP 200 with the code in extensions — an oversized body included, so the\n // endpoint never splits its own status contract (429 vs 200).\n const oversized = await post(buildApp(), \"/commerce/v1/graphql\", {\n query: `query { providerCapabilities { specVersion } } # ${\"x\".repeat(40_000)}`,\n });\n expect(oversized.status).toBe(200);\n const body = await oversized.json();\n expect(body.errors[0].extensions.code).toBe(\"INVALID_REQUEST\");\n });\n\n it(\"rejects an exponential fragment DAG in bounded time (no CPU blowup)\", async () => {\n // f0 spreads f1 twice, f1 spreads f2 twice … — naive full expansion is\n // 2^N. A ~1.3 KB request must be rejected in milliseconds, not seconds.\n const depth = 24;\n let query = \"query Dos { providerCapabilities { specVersion ...f0 } }\\n\";\n for (let i = 0; i < depth; i += 1) {\n const next = i + 1 < depth ? `...f${i + 1} ...f${i + 1}` : \"specVersion\";\n query += `fragment f${i} on ProviderCapabilities { ${next} }\\n`;\n }\n const start = performance.now();\n const response = await post(buildApp(), \"/commerce/v1/graphql\", {\n query,\n operationName: \"Dos\",\n });\n const elapsedMs = performance.now() - start;\n const body = await response.json();\n expect(body.data).toBeUndefined();\n expect(body.errors[0].extensions.code).toBe(\"INVALID_REQUEST\");\n expect(elapsedMs).toBeLessThan(250);\n expect(mocks.query).not.toHaveBeenCalled();\n });\n});\n\n// The verify admission (replay burst + in-flight cap + stable-failure cooldown)\n// must apply on BOTH bindings, since verifyPurchase reaches the same\n// store-hitting Convex actions as /v1. These use the process-global replay\n// store, so each test uses a distinct payload to stay isolated.\ndescribe(\"commerce verify admission on both bindings\", () => {\n let tokenSeq = 0;\n const uniqueToken = () =>\n `admission-google-token-${(tokenSeq += 1)}-${\"z\".repeat(30)}`;\n\n beforeEach(() => {\n mocks.action.mockReset();\n mocks.mutation.mockReset();\n mocks.query.mockReset();\n mocks.handleConvexError.mockReset();\n mocks.handleConvexError.mockReturnValue(null);\n mocks.action.mockResolvedValue({\n isValid: true,\n state: \"ENTITLED\",\n productId: \"premium.monthly\",\n environment: \"Production\",\n });\n });\n\n const restVerify = (app: Hono, token: string) =>\n post(\n app,\n \"/commerce/v1/purchases/verify\",\n { store: \"google\", google: { purchaseToken: token } },\n CLIENT_KEY,\n );\n const gqlVerify = (app: Hono, token: string) =>\n post(\n app,\n \"/commerce/v1/graphql\",\n {\n query:\n \"mutation VerifyPurchase($input: VerifyPurchaseInput!) { verifyPurchase(input: $input) { isValid } }\",\n operationName: \"VerifyPurchase\",\n variables: {\n input: { store: \"google\", google: { purchaseToken: token } },\n },\n },\n CLIENT_KEY,\n );\n\n it(\"applies the per-payload replay burst cap to the GraphQL binding\", async () => {\n const app = buildApp();\n const token = uniqueToken();\n // Replay guard capacity is 30 per (key, payload). Attempt 31 must be denied.\n let lastBody: { errors?: Array<{ extensions: { code: string } }> } = {};\n for (let attempt = 0; attempt < 31; attempt += 1) {\n lastBody = await (await gqlVerify(app, token)).json();\n }\n expect(lastBody.errors?.[0].extensions.code).toBe(\"RATE_LIMITED\");\n });\n\n it(\"shares one replay bucket across REST and GraphQL for the same receipt\", async () => {\n const app = buildApp();\n const token = uniqueToken();\n // Spend 30 tokens over REST, then the first GraphQL attempt is denied —\n // proving both bindings key the same bucket.\n for (let attempt = 0; attempt < 30; attempt += 1) {\n const res = await restVerify(app, token);\n expect(res.status).toBe(200);\n }\n const gql = await (await gqlVerify(app, token)).json();\n expect(gql.errors?.[0].extensions.code).toBe(\"RATE_LIMITED\");\n });\n\n it(\"arms the stable-failure cooldown on both bindings\", async () => {\n const app = buildApp();\n const token = uniqueToken();\n // A store verdict that is a stable rejection (INAUTHENTIC) must arm the\n // negative cooldown so the next same-payload verify is short-circuited —\n // this was never recorded on the commerce surface before.\n mocks.action.mockResolvedValue({\n isValid: false,\n state: \"INAUTHENTIC\",\n stableRejection: true,\n });\n const first = await restVerify(app, token);\n expect(first.status).toBe(200);\n expect((await first.json()).isValid).toBe(false);\n\n // The next attempt for the same payload — on the OTHER binding — is denied\n // by the cooldown before reaching the store again, carrying the retry hint\n // in the GraphQL error extensions (SPEC.md 7: operation failure is 200).\n mocks.action.mockClear();\n const secondResponse = await gqlVerify(app, token);\n expect(secondResponse.status).toBe(200);\n const second = await secondResponse.json();\n expect(second.errors?.[0].extensions.code).toBe(\"RATE_LIMITED\");\n expect(second.errors?.[0].extensions.retryAfterSec).toBeGreaterThan(0);\n expect(mocks.action).not.toHaveBeenCalled();\n });\n\n it(\"returns the retry hint as a REST Retry-After header on cooldown\", async () => {\n const app = buildApp();\n const token = uniqueToken();\n mocks.action.mockResolvedValue({\n isValid: false,\n state: \"INAUTHENTIC\",\n stableRejection: true,\n });\n await restVerify(app, token);\n mocks.action.mockClear();\n const second = await restVerify(app, token);\n expect(second.status).toBe(429);\n expect(Number(second.headers.get(\"Retry-After\"))).toBeGreaterThan(0);\n expect((await second.json()).error.code).toBe(\"RATE_LIMITED\");\n expect(mocks.action).not.toHaveBeenCalled();\n });\n\n it(\"never arms the cooldown for a valid verdict, even in a stable-looking state\", async () => {\n const app = buildApp();\n const token = uniqueToken();\n // isValid: true must never arm the cooldown, regardless of the state token.\n mocks.action.mockResolvedValue({\n isValid: true,\n state: \"EXPIRED\",\n stableRejection: true,\n });\n const first = await restVerify(app, token);\n expect((await first.json()).isValid).toBe(true);\n mocks.action.mockClear();\n mocks.action.mockResolvedValue({ isValid: true, state: \"EXPIRED\" });\n const second = await restVerify(app, token);\n expect(second.status).toBe(200); // not RATE_LIMITED\n expect(mocks.action).toHaveBeenCalled();\n });\n\n it(\"does not cool down Horizon, whose ownership can flip immediately\", async () => {\n const app = buildApp();\n const userId = `hz-${(tokenSeq += 1)}`;\n const horizonVerify = () =>\n post(\n app,\n \"/commerce/v1/purchases/verify\",\n { store: \"horizon\", horizon: { userId, sku: \"premium.addon\" } },\n CLIENT_KEY,\n );\n // A stable INAUTHENTIC on Horizon must stay retryable.\n mocks.action.mockResolvedValue({\n isValid: false,\n state: \"INAUTHENTIC\",\n stableRejection: true,\n });\n await horizonVerify();\n mocks.action.mockClear();\n mocks.action.mockResolvedValue({ isValid: true, state: \"ENTITLED\" });\n const second = await horizonVerify();\n expect(second.status).toBe(200);\n expect((await second.json()).isValid).toBe(true);\n expect(mocks.action).toHaveBeenCalled();\n });\n\n it(\"keys the Amazon replay bucket on sandbox so a sandbox failure spares production\", async () => {\n const app = buildApp();\n const userId = `az-${(tokenSeq += 1)}`;\n const receiptId = `receipt-${(tokenSeq += 1)}-${\"9\".repeat(10)}`;\n const amazonVerify = (sandbox: boolean) =>\n post(\n app,\n \"/commerce/v1/purchases/verify\",\n { store: \"amazon\", amazon: { userId, receiptId, sandbox } },\n CLIENT_KEY,\n );\n // A stable failure in sandbox arms its own bucket…\n mocks.action.mockResolvedValue({\n isValid: false,\n state: \"INAUTHENTIC\",\n stableRejection: true,\n });\n await amazonVerify(true);\n // …and must NOT block the production request for the same receipt id.\n mocks.action.mockClear();\n mocks.action.mockResolvedValue({ isValid: true, state: \"ENTITLED\" });\n const prod = await amazonVerify(false);\n expect(prod.status).toBe(200);\n expect((await prod.json()).isValid).toBe(true);\n expect(mocks.action).toHaveBeenCalled();\n });\n});\n", + "kit/convex/purchases/mutation.ts": "import { internalMutation, mutation } from \"../_generated/server\";\nimport { ConvexError, v } from \"convex/values\";\nimport { resolveProjectByApiKeyFromDb } from \"../projects/helpers\";\nimport { isValidSubscriptionUserId } from \"../subscriptions/limits\";\nimport { isUserErasureRequested } from \"../subscriptions/erasure\";\n\nimport { createError, ErrorCode } from \"../utils/errors\";\nimport { HarmonizedPurchaseState } from \"./purchaseState\";\nimport {\n applyPurchaseStatsDelta,\n deltaForMissingPurchaseStats,\n deltaForUpdate,\n mergePurchaseStatsDeltas,\n} from \"./stats\";\nimport { getProjectById } from \"../projects/helpers\";\n\nexport const bindVerifiedPurchaseAsServer = mutation({\n args: {\n apiKey: v.string(),\n userId: v.string(),\n store: v.union(v.literal(\"amazon\"), v.literal(\"horizon\")),\n remoteId: v.string(),\n },\n returns: v.object({ bound: v.boolean() }),\n handler: async (ctx, args) => {\n const resolved = await resolveProjectByApiKeyFromDb(\n ctx,\n args.apiKey,\n \"admin\",\n );\n if (!resolved)\n throw new ConvexError({\n code: \"INVALID_API_KEY\",\n message: \"Invalid credential\",\n });\n if (\n !isValidSubscriptionUserId(args.userId) ||\n !args.remoteId ||\n args.remoteId.length > 65536\n )\n throw new ConvexError({\n code: \"INVALID_INPUT\",\n message: \"Invalid purchase identity\",\n });\n if (await isUserErasureRequested(ctx, resolved.project, args.userId))\n return { bound: false };\n const purchase = await ctx.db\n .query(\"purchases\")\n .withIndex(\"by_project_and_remote\", (q) =>\n q.eq(\"projectId\", resolved.project._id).eq(\"remoteId\", args.remoteId),\n )\n .filter((q) => q.eq(q.field(\"store\"), args.store))\n .unique();\n if (!purchase || purchase.accountErased) return { bound: false };\n if (purchase.appUserId)\n return { bound: purchase.appUserId === args.userId };\n if (!purchase.isValid || !purchase.productId) return { bound: false };\n await ctx.db.patch(purchase._id, { appUserId: args.userId });\n return { bound: true };\n },\n});\n// Mark purchase as inauthentic.\n//\n// Internal-only on purpose: nothing in the dashboard or server calls this —\n// it is an operator/maintenance function (run it from the Convex dashboard).\n// As a public mutation it took only a `purchaseId` and performed no\n// identity/membership check, so anyone reaching the deployment could flip\n// another tenant's receipt to INAUTHENTIC and skew its purchase stats.\n// It stays in this file (rather than internal.ts) to keep the generated\n// module graph unchanged; see packages/kit/CONVENTION.md for the CQRS split.\nexport const markReceiptInvalid = internalMutation({\n args: {\n purchaseId: v.id(\"purchases\"),\n reason: v.optional(v.string()),\n },\n handler: async (ctx, args) => {\n const purchase = await ctx.db.get(args.purchaseId);\n\n if (!purchase) {\n throw createError(ErrorCode.RECEIPT_NOT_FOUND);\n }\n const project = await getProjectById(ctx, purchase.projectId);\n if (!project) {\n throw createError(ErrorCode.RECEIPT_NOT_FOUND);\n }\n\n const prevIsValid = purchase.isValid ?? false;\n // Treat empty strings as absent so we stay aligned with the\n // extractor and backfill contract — an empty `orderId` never\n // represents a real Google order, and feeding it to\n // `deltaForUpdate` as \"present\" would mis-decrement\n // `googleOrders` if any malformed rows ever reached this path.\n const hasOrderId =\n typeof purchase.orderId === \"string\" && purchase.orderId.length > 0;\n\n await ctx.db.patch(args.purchaseId, {\n state: HarmonizedPurchaseState.INAUTHENTIC,\n isValid: false,\n statsCounted: true,\n storeStatsCounted: true,\n updatedAt: Date.now(),\n });\n\n // `hasOrderId` is unchanged by this patch, but passing it both as\n // the prev and next value keeps `googleOrders` stable when the\n // delta helper is the one source of truth for stats transitions.\n await applyPurchaseStatsDelta(\n ctx,\n purchase.projectId,\n mergePurchaseStatsDeltas(\n deltaForMissingPurchaseStats(\n purchase.store,\n prevIsValid,\n hasOrderId,\n purchase.statsCounted === true,\n purchase.storeStatsCounted === true,\n ),\n deltaForUpdate(\n purchase.store,\n prevIsValid,\n purchase.store,\n false,\n hasOrderId,\n hasOrderId,\n ),\n ),\n );\n\n return args.purchaseId;\n },\n});\n", + "kit/convex/purchases/ownership.test.ts": "import { beforeEach, describe, expect, it, vi } from \"vitest\";\nimport { testableFunction } from \"../test.setup\";\nimport { hmacSha256Hex } from \"../utils/sha256\";\n\nconst stubs = vi.hoisted(() => ({\n resolve: vi.fn(),\n project: vi.fn(),\n amazon: vi.fn(),\n horizon: vi.fn(),\n}));\nvi.mock(\"../projects/helpers\", () => ({\n resolveProjectByApiKeyFromDb: stubs.resolve,\n getProjectById: vi.fn(),\n}));\nvi.mock(\"./shared\", async (original) => ({\n ...(await original()),\n getProjectByApiKey: stubs.project,\n}));\nvi.mock(\"./amazon\", () => ({\n verifyAmazonReceipt: stubs.amazon,\n verifyAmazonReceiptInternalV1: {},\n}));\nvi.mock(\"./horizon\", () => ({ verifyHorizonReceipt: stubs.horizon }));\nimport { bindVerifiedPurchaseAsServer } from \"./mutation\";\nimport { boundPurchasesForUser } from \"./internal\";\nimport { readBoundPurchaseEntitlements } from \"./action\";\n\nconst project = { _id: \"p1\", userErasureHashKey: \"local-hash-key\" };\ntype Row = Record;\nfunction database(rows: Record) {\n return {\n query(table: string) {\n let current = rows[table] ?? [];\n const query = {\n withIndex(_name: string, build: (q: unknown) => unknown) {\n const index = {\n eq(field: string, value: unknown) {\n current = current.filter((row) => row[field] === value);\n return index;\n },\n };\n build(index);\n return query;\n },\n filter(build: (q: unknown) => unknown) {\n const predicate = build({\n field: (field: string) => field,\n eq: (field: string, value: unknown) => (row: Row) =>\n row[field] === value,\n }) as (row: Row) => boolean;\n current = current.filter(predicate);\n return query;\n },\n async unique() {\n if (current.length > 1) throw Error(\"Ambiguous rows\");\n return current[0] ?? null;\n },\n async take(count: number) {\n return current.slice(0, count);\n },\n };\n return query;\n },\n async get(id: string) {\n return id === project._id ? project : null;\n },\n async patch(id: string, value: Row) {\n const row = Object.values(rows)\n .flat()\n .find((row) => row._id === id);\n if (!row) throw Error(\"Missing row\");\n Object.assign(row, value);\n },\n };\n}\nconst bind = testableFunction(bindVerifiedPurchaseAsServer)._handler;\nconst read = testableFunction(boundPurchasesForUser)._handler;\nconst refresh = testableFunction(readBoundPurchaseEntitlements)._handler;\n\nbeforeEach(() => {\n vi.clearAllMocks();\n stubs.resolve.mockResolvedValue({ project });\n stubs.project.mockResolvedValue(project);\n stubs.amazon.mockResolvedValue({ isValid: true });\n stubs.horizon.mockResolvedValue({ isValid: true });\n});\n\ndescribe.each([\"amazon\", \"horizon\"] as const)(\"%s ownership\", (store) => {\n const args = {\n apiKey: \"server-key\",\n userId: \"alice\",\n store,\n remoteId: \"store-proof\",\n };\n function setup(overrides: Row = {}) {\n const purchase: Row = {\n _id: \"receipt\",\n projectId: \"p1\",\n store,\n remoteId: \"store-proof\",\n productId: \"premium\",\n isValid: true,\n ...overrides,\n };\n const rows: Record = {\n purchases: [purchase],\n subscriptionUserErasureJobs: [],\n };\n return { rows, purchase, ctx: { db: database(rows) } };\n }\n it(\"binds once, preserves ownership and refuses another account\", async () => {\n const { ctx, purchase } = setup();\n expect(await bind(ctx, args)).toEqual({ bound: true });\n expect(await bind(ctx, args)).toEqual({ bound: true });\n expect(await bind(ctx, { ...args, userId: \"bob\" })).toEqual({\n bound: false,\n });\n expect(purchase.appUserId).toBe(\"alice\");\n expect(stubs.resolve).toHaveBeenCalledWith(ctx, \"server-key\", \"admin\");\n });\n it.each([\n { isValid: false },\n { accountErased: true },\n { projectId: \"other\" },\n { store: \"google\" },\n ])(\"rejects unavailable or cross-scope evidence %j\", async (overrides) => {\n const { ctx, purchase } = setup(overrides);\n expect(await bind(ctx, args)).toEqual({ bound: false });\n expect(purchase.appUserId).toBeUndefined();\n });\n it(\"refuses binding and reads as soon as erasure is requested\", async () => {\n const { rows, ctx } = setup({ appUserId: \"alice\" });\n rows.subscriptionUserErasureJobs.push({\n projectId: \"p1\",\n userIdHash: await hmacSha256Hex(project.userErasureHashKey, \"alice\"),\n status: \"queued\",\n });\n expect(await bind(ctx, args)).toEqual({ bound: false });\n expect(\n await read(ctx, { projectId: \"p1\" as never, userId: \"alice\" }),\n ).toEqual([]);\n });\n it(\"checks credentials before revealing evidence\", async () => {\n stubs.resolve.mockResolvedValue(null);\n const { ctx } = setup();\n await expect(bind(ctx, args)).rejects.toThrow();\n });\n});\n\nit(\"refuses partial ownership reads above the bounded limit\", async () => {\n const ctx = {\n db: database({\n purchases: Array.from({ length: 21 }, (_, i) => ({\n _id: `r${i}`,\n projectId: \"p1\",\n appUserId: \"alice\",\n })),\n }),\n };\n await expect(\n read(ctx, { projectId: \"p1\" as never, userId: \"alice\" }),\n ).rejects.toThrow(\"limit\");\n});\n\nit(\"refreshes both stores and returns only current, still-bound products\", async () => {\n const rows = [\n {\n _id: \"a\",\n isValid: true,\n productId: \"amazon-premium\",\n requestData: {\n store: \"amazon\",\n userId: \"store-alice\",\n receiptId: \"receipt\",\n sandbox: true,\n },\n },\n {\n _id: \"h\",\n isValid: true,\n productId: \"quest-premium\",\n requestData: {\n store: \"horizon\",\n userId: \"meta-alice\",\n sku: \"quest-premium\",\n },\n },\n ];\n const runQuery = vi\n .fn()\n .mockResolvedValueOnce(rows)\n .mockResolvedValueOnce([{ ...rows[1], isValid: false }]);\n expect(\n await refresh({ runQuery }, { apiKey: \"server\", userId: \"alice\" }),\n ).toEqual({ productIds: [] });\n expect(stubs.amazon).toHaveBeenCalledWith(expect.anything(), {\n apiKey: \"server\",\n userId: \"store-alice\",\n receiptId: \"receipt\",\n sandbox: true,\n });\n expect(stubs.horizon).toHaveBeenCalledWith(expect.anything(), {\n apiKey: \"server\",\n userId: \"meta-alice\",\n sku: \"quest-premium\",\n });\n});\n\nit(\"fails the entire read on upstream failure, preserving the saved verdict\", async () => {\n stubs.horizon.mockRejectedValue(new Error(\"upstream unavailable\"));\n const rows = [\n {\n _id: \"h\",\n isValid: true,\n productId: \"premium\",\n requestData: { store: \"horizon\", userId: \"meta-alice\", sku: \"premium\" },\n },\n ];\n const runQuery = vi.fn().mockResolvedValue(rows);\n await expect(\n refresh({ runQuery }, { apiKey: \"server\", userId: \"alice\" }),\n ).rejects.toThrow(\"upstream\");\n expect(rows[0].isValid).toBe(true);\n expect(runQuery).toHaveBeenCalledTimes(1);\n});\n\nit(\"does not return an unrefreshed purchase bound during the read\", async () => {\n const runQuery = vi\n .fn()\n .mockResolvedValueOnce([])\n .mockResolvedValueOnce([{ _id: \"new\" }]);\n await expect(\n refresh({ runQuery }, { apiKey: \"server\", userId: \"alice\" }),\n ).rejects.toThrow(\"Ownership changed\");\n});\n", + "kit/convex/purchases/action.ts": "\"use node\";\n\nimport { verifyGooglePlayReceiptInternalV1 } from \"./android\";\nimport {\n verifyAmazonReceiptInternalV1,\n verifyAmazonReceipt as verifyAmazon,\n} from \"./amazon\";\nimport { verifyAppStoreReceiptInternalV1 } from \"./ios\";\nimport { verifyHorizonReceipt } from \"./horizon\";\nimport { action } from \"../_generated/server\";\nimport { internal } from \"../_generated/api\";\nimport { ConvexError, v } from \"convex/values\";\nimport { getProjectByApiKey } from \"./shared\";\n\nexport const readBoundPurchaseEntitlements = action({\n args: { apiKey: v.string(), userId: v.string() },\n returns: v.object({ productIds: v.array(v.string()) }),\n handler: async (ctx, args): Promise<{ productIds: string[] }> => {\n const project = await getProjectByApiKey(ctx, args.apiKey, \"admin\");\n const queryArgs = { projectId: project._id, userId: args.userId };\n const purchases = await ctx.runQuery(\n internal.purchases.internal.boundPurchasesForUser,\n queryArgs,\n );\n for (const purchase of purchases) {\n const evidence = purchase.requestData;\n if (evidence.store === \"amazon\") {\n await verifyAmazon(ctx, {\n apiKey: args.apiKey,\n userId: evidence.userId,\n receiptId: evidence.receiptId,\n sandbox: evidence.sandbox,\n });\n } else if (evidence.store === \"horizon\") {\n await verifyHorizonReceipt(ctx, {\n apiKey: args.apiKey,\n userId: evidence.userId,\n sku: evidence.sku,\n });\n } else {\n throw new ConvexError({\n code: \"INVALID_INPUT\",\n message: \"Unsupported bound purchase\",\n });\n }\n }\n // Re-read ownership after network calls so erasure cannot return stale access.\n const current = await ctx.runQuery(\n internal.purchases.internal.boundPurchasesForUser,\n queryArgs,\n );\n const refreshed = new Set(purchases.map((purchase) => purchase._id));\n if (current.some((purchase) => !refreshed.has(purchase._id)))\n throw new ConvexError({\n code: \"INVALID_INPUT\",\n message: \"Ownership changed; retry the read\",\n });\n return {\n productIds: [\n ...new Set(\n current.flatMap((purchase) =>\n purchase.isValid && purchase.productId ? [purchase.productId] : [],\n ),\n ),\n ],\n };\n },\n});\n\nexport const verifyGooglePlayReceipt = verifyGooglePlayReceiptInternalV1;\nexport const verifyAppStoreReceipt = verifyAppStoreReceiptInternalV1;\nexport const verifyAmazonReceipt = verifyAmazonReceiptInternalV1;\n", + "kit/convex/subscriptions/mutation.ts": "import { mutation } from \"../_generated/server\";\nimport { ConvexError, v } from \"convex/values\";\nimport { internal } from \"../_generated/api\";\n\nimport { resolveProjectByApiKeyFromDb } from \"../projects/helpers\";\nimport {\n bindSubscriptionToUserHandler,\n rebindSubscriptionToUserHandler,\n} from \"./internal\";\nimport { isValidSubscriptionUserId } from \"./limits\";\nimport { hmacSha256Hex, sha256Hex } from \"../utils/sha256\";\n\nfunction generateUserErasureHashKey(): string {\n const bytes = new Uint8Array(32);\n crypto.getRandomValues(bytes);\n return Array.from(bytes, (byte) => byte.toString(16).padStart(2, \"0\")).join(\n \"\",\n );\n}\n\n// Public mutation called by SDKs after a successful receipt verification:\n// they know who the host-app user is, so they tell kit which userId owns\n// the verified purchaseToken. Idempotent — re-binding the same userId is\n// a no-op.\nexport const bindUser = mutation({\n args: {\n apiKey: v.string(),\n purchaseToken: v.string(),\n userId: v.string(),\n },\n returns: v.object({ ok: v.boolean(), bound: v.boolean() }),\n handler: async (ctx, args) => {\n const resolved = await resolveProjectByApiKeyFromDb(ctx, args.apiKey);\n const project = resolved?.project ?? null;\n if (!project) return { ok: false, bound: false };\n\n const subscriptionId = await bindSubscriptionToUserHandler(ctx, {\n projectId: project._id,\n purchaseToken: args.purchaseToken,\n userId: args.userId,\n });\n\n return { ok: true, bound: subscriptionId !== null };\n },\n});\n\n// Commerce Protocol bindPurchase: same idempotent, never-move binding as\n// bindUser, but server-role only. The protocol says a shipped app must not\n// reach an account mutation, and the edge prefix check alone cannot classify\n// a legacy no-prefix key, so the admin access is asserted here in Convex where\n// the stored key type is authoritative.\nexport const bindUserAsServer = mutation({\n args: {\n apiKey: v.string(),\n purchaseToken: v.string(),\n userId: v.string(),\n },\n returns: v.object({ ok: v.boolean(), bound: v.boolean() }),\n handler: async (ctx, args) => {\n // resolveProjectByApiKeyFromDb throws INSUFFICIENT_SCOPE for a valid but\n // under-scoped (publishable/legacy) key, and returns null for an unknown\n // or inactive one. The two must map to different protocol codes: an\n // unknown key is UNAUTHORIZED (INVALID_API_KEY), only a real-but-wrong-role\n // key is FORBIDDEN.\n const resolved = await resolveProjectByApiKeyFromDb(\n ctx,\n args.apiKey,\n \"admin\",\n );\n if (!resolved) {\n throw new ConvexError({\n code: \"INVALID_API_KEY\",\n message: \"API key is invalid or inactive\",\n });\n }\n\n const subscriptionId = await bindSubscriptionToUserHandler(ctx, {\n projectId: resolved.project._id,\n purchaseToken: args.purchaseToken,\n userId: args.userId,\n });\n\n return { ok: true, bound: subscriptionId !== null };\n },\n});\n\n// Recovery for a subscription bound to the wrong user. `bindUser` deliberately\n// refuses to move an existing binding — token possession is not proof of\n// ownership — so without this an operator has no way to correct one.\n// Secret key only: this reassigns who owns a purchase.\nexport const rebindUser = mutation({\n args: {\n apiKey: v.string(),\n purchaseToken: v.string(),\n userId: v.string(),\n },\n returns: v.object({\n ok: v.boolean(),\n rebound: v.boolean(),\n // False when the binding moved but no entitlement events could be\n // attributed, so the caller knows the developer backend still believes the\n // previous user owns the purchase.\n notified: v.boolean(),\n }),\n handler: async (ctx, args) => {\n const resolved = await resolveProjectByApiKeyFromDb(\n ctx,\n args.apiKey,\n \"admin\",\n );\n const project = resolved?.project ?? null;\n if (!project) return { ok: false, rebound: false, notified: false };\n\n const result = await rebindSubscriptionToUserHandler(ctx, {\n projectId: project._id,\n purchaseToken: args.purchaseToken,\n userId: args.userId,\n });\n\n return {\n ok: true,\n rebound: result !== null,\n notified: result?.notified ?? true,\n };\n },\n});\n\nexport const requestUserErasure = mutation({\n args: { apiKey: v.string(), userId: v.string() },\n returns: v.object({\n ok: v.boolean(),\n jobId: v.id(\"subscriptionUserErasureJobs\"),\n status: v.union(\n v.literal(\"queued\"),\n v.literal(\"running\"),\n v.literal(\"completed\"),\n ),\n }),\n handler: async (ctx, args) => {\n const resolved = await resolveProjectByApiKeyFromDb(\n ctx,\n args.apiKey,\n \"admin\",\n );\n if (!resolved) {\n throw new ConvexError({\n code: \"INVALID_API_KEY\",\n message: \"API key is invalid or inactive\",\n });\n }\n if (!isValidSubscriptionUserId(args.userId)) {\n throw new ConvexError({\n code: \"INVALID_INPUT\",\n message: \"userId is invalid\",\n });\n }\n\n const hashKey =\n resolved.project.userErasureHashKey ?? generateUserErasureHashKey();\n if (resolved.project.userErasureHashKey === undefined) {\n await ctx.db.patch(resolved.project._id, { userErasureHashKey: hashKey });\n }\n const userIdHash = await hmacSha256Hex(hashKey, args.userId);\n let existing = await ctx.db\n .query(\"subscriptionUserErasureJobs\")\n .withIndex(\"by_project_and_user_hash\", (q) =>\n q.eq(\"projectId\", resolved.project._id).eq(\"userIdHash\", userIdHash),\n )\n .unique();\n if (!existing) {\n const legacyHash = await sha256Hex(args.userId);\n existing = await ctx.db\n .query(\"subscriptionUserErasureJobs\")\n .withIndex(\"by_project_and_user_hash\", (q) =>\n q.eq(\"projectId\", resolved.project._id).eq(\"userIdHash\", legacyHash),\n )\n .unique();\n if (existing) {\n await ctx.db.patch(existing._id, { userIdHash });\n }\n }\n if (existing) {\n return { ok: true, jobId: existing._id, status: existing.status };\n }\n\n const now = Date.now();\n const jobId = await ctx.db.insert(\"subscriptionUserErasureJobs\", {\n projectId: resolved.project._id,\n userId: args.userId,\n userIdHash,\n status: \"queued\",\n subscriptionsErased: 0,\n commerceEventsErased: 0,\n createdAt: now,\n updatedAt: now,\n });\n await ctx.scheduler.runAfter(\n 0,\n internal.subscriptions.internal.drainSubscriptionUserErasureJob,\n { jobId },\n );\n return { ok: true, jobId, status: \"queued\" as const };\n },\n});\n", + "kit/convex/subscriptions/internal.test.ts": "import { afterEach, beforeEach, describe, expect, it, vi } from \"vitest\";\n\nimport { HarmonizedPurchaseState } from \"../purchases/purchaseState\";\nimport { hmacSha256Hex } from \"../utils/sha256\";\nimport { buildEventPayload } from \"../commerce/deliveryState\";\nimport {\n applySubscriptionEventHandler,\n bindSubscriptionToUserHandler,\n rebindSubscriptionToUserHandler,\n drainSubscriptionUserErasurePage,\n buildVerifiedSubscriptionSnapshot,\n getCurrentProductIdByTokenHandler,\n getSourceProductIdByTokenHandler,\n mergeVerifiedSubscriptionSnapshot,\n recordVerifiedSubscriptionHandler,\n} from \"./internal\";\n\ntype Row = Record & { _id: string; _creationTime: number };\n\nclass MemQuery {\n constructor(private rows: Row[]) {}\n\n withIndex(_name: string, cb?: (q: IndexBuilder) => IndexBuilder): MemQuery {\n if (!cb) return this;\n const builder = new IndexBuilder();\n cb(builder);\n return new MemQuery(\n this.rows.filter((row) =>\n builder.predicates.every((predicate) => predicate(row)),\n ),\n );\n }\n\n async unique(): Promise {\n if (this.rows.length > 1) {\n throw new Error(\"unique() called on a query that returned > 1 row\");\n }\n return this.rows[0] ?? null;\n }\n\n async collect(): Promise {\n return [...this.rows];\n }\n\n async take(count: number): Promise {\n return this.rows.slice(0, count);\n }\n}\n\nclass IndexBuilder {\n predicates: Array<(row: Row) => boolean> = [];\n\n eq(field: string, value: unknown): IndexBuilder {\n this.predicates.push((row) => row[field] === value);\n return this;\n }\n}\n\nclass MemDb {\n tables = new Map>();\n private counter = 0;\n\n constructor() {\n this.table(\"organizations\").set(\"organizations_seed_1\", {\n _id: \"organizations_seed_1\",\n _creationTime: Date.now(),\n });\n this.table(\"projects\").set(\"projects_seed_1\", {\n _id: \"projects_seed_1\",\n _creationTime: Date.now(),\n organizationId: \"organizations_seed_1\",\n });\n }\n\n private table(name: string): Map {\n let table = this.tables.get(name);\n if (!table) {\n table = new Map();\n this.tables.set(name, table);\n }\n return table;\n }\n\n query(tableName: string): MemQuery {\n return new MemQuery([...this.table(tableName).values()]);\n }\n\n async insert(\n tableName: string,\n doc: Record,\n ): Promise {\n const id = `${tableName}_${++this.counter}`;\n this.table(tableName).set(id, {\n ...doc,\n _id: id,\n _creationTime: Date.now() + this.counter / 1_000,\n });\n return id;\n }\n\n async get(id: string): Promise {\n for (const table of this.tables.values()) {\n const row = table.get(id);\n if (row) return row;\n }\n return null;\n }\n\n async patch(id: string, patch: Record): Promise {\n for (const table of this.tables.values()) {\n const row = table.get(id);\n if (row) {\n Object.assign(row, patch);\n return;\n }\n }\n throw new Error(`patch: no doc with id ${id}`);\n }\n\n async delete(id: string): Promise {\n for (const table of this.tables.values()) {\n if (table.delete(id)) return;\n }\n }\n\n rows(tableName: string): Row[] {\n return [...this.table(tableName).values()];\n }\n\n seedProduct(doc: {\n projectId: string;\n platform: \"IOS\" | \"Android\";\n productId: string;\n billingPeriod?: string;\n }): void {\n this.table(\"products\").set(`products_${++this.counter}`, {\n _id: `products_${this.counter}`,\n _creationTime: Date.now(),\n ...doc,\n });\n }\n}\n\nfunction makeCtx(db: MemDb) {\n return { db } as unknown as Parameters<\n typeof recordVerifiedSubscriptionHandler\n >[0];\n}\n\nconst PROJECT_ID = \"projects_seed_1\";\nconst TOKEN = \"purchase_token_1\";\n\ndescribe(\"entitlement events across the expiry deadline\", () => {\n it.each([false, true])(\n \"revokes once when the clock expires before notifications (cancel first: %s)\",\n async (cancelFirst) => {\n vi.useFakeTimers();\n try {\n vi.setSystemTime(1_000);\n const db = new MemDb();\n const started = await seedWebhookEvent(db, {\n type: \"SubscriptionStarted\",\n notificationId: \"clock-start\",\n occurredAt: 1_000,\n });\n await db.patch(started, { expiresAt: 2_000, renewsAt: 2_000 });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: started as never,\n });\n await bindSubscriptionToUserHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n purchaseToken: TOKEN,\n userId: \"clock-user\",\n });\n vi.setSystemTime(3_000);\n if (cancelFirst) {\n const canceled = await seedWebhookEvent(db, {\n type: \"SubscriptionStarted\",\n notificationId: \"clock-cancel\",\n occurredAt: 2_500,\n });\n await db.patch(canceled, {\n type: \"SubscriptionCanceled\",\n expiresAt: 2_000,\n renewsAt: undefined,\n willRenew: false,\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: canceled as never,\n });\n }\n const expired = await seedWebhookEvent(db, {\n type: \"SubscriptionExpired\",\n notificationId: \"clock-expire\",\n occurredAt: 3_000,\n });\n await db.patch(expired, { expiresAt: 2_000 });\n const args = {\n projectId: PROJECT_ID as never,\n eventId: expired as never,\n };\n await applySubscriptionEventHandler(makeCtx(db), args);\n await applySubscriptionEventHandler(makeCtx(db), args);\n expect(\n db\n .rows(\"commerceEvents\")\n .filter((row) => String(row.eventType).startsWith(\"entitlement.\"))\n .map((row) => row.eventType),\n ).toEqual([\"entitlement.granted\", \"entitlement.revoked\"]);\n } finally {\n vi.useRealTimers();\n }\n },\n );\n});\n\nasync function seedWebhookEvent(\n db: MemDb,\n args: {\n type:\n | \"SubscriptionStarted\"\n | \"SubscriptionRenewed\"\n | \"SubscriptionExpired\"\n | \"SubscriptionProductChanged\";\n notificationId: string;\n occurredAt: number;\n platform?: \"IOS\" | \"Android\";\n productId?: string;\n },\n): Promise {\n const platform = args.platform ?? \"Android\";\n return await db.insert(\"webhookEvents\", {\n projectId: PROJECT_ID,\n type: args.type,\n source:\n platform === \"IOS\"\n ? \"AppleAppStoreServerNotificationsV2\"\n : \"GooglePlayRealTimeDeveloperNotifications\",\n platform,\n environment: \"Sandbox\",\n purchaseToken: TOKEN,\n sourceNotificationId: args.notificationId,\n productId: args.productId ?? \"premium_monthly\",\n subscriptionState:\n args.type === \"SubscriptionExpired\" ? \"Expired\" : \"Active\",\n expiresAt: 1_800_000_000_000,\n renewsAt: 1_800_000_000_000,\n currency: \"USD\",\n priceAmountMicros: 9_990_000,\n occurredAt: args.occurredAt,\n receivedAt: args.occurredAt,\n });\n}\n\ndescribe(\"subscription erasure across replacement tokens\", () => {\n it.each([false, true])(\n \"reconciles a granted successor without restoring erased identities (successor erasure requested: %s)\",\n async (successorErased) => {\n const db = new MemDb();\n const ctx = makeCtx(db);\n const hashKey = \"erasure-test-key\";\n await db.patch(PROJECT_ID, { userErasureHashKey: hashKey });\n async function erasureJob(userId: string): Promise {\n return db.insert(\"subscriptionUserErasureJobs\", {\n projectId: PROJECT_ID,\n userId,\n userIdHash: await hmacSha256Hex(hashKey, userId),\n status: \"queued\",\n subscriptionsErased: 0,\n commerceEventsErased: 0,\n });\n }\n await recordVerifiedSubscriptionHandler(ctx, {\n projectId: PROJECT_ID as never,\n platform: \"Android\",\n purchaseToken: TOKEN,\n productId: \"premium_monthly\",\n purchaseState: \"ENTITLED\",\n });\n await bindSubscriptionToUserHandler(ctx, {\n projectId: PROJECT_ID as never,\n purchaseToken: TOKEN,\n userId: \"erased-owner\",\n });\n await drainSubscriptionUserErasurePage(\n ctx,\n (await erasureJob(\"erased-owner\")) as never,\n );\n const startedId = await seedWebhookEvent(db, {\n type: \"SubscriptionStarted\",\n notificationId: \"successor-granted\",\n occurredAt: 1_000,\n });\n await db.patch(startedId, {\n purchaseToken: \"replacement\",\n expiresAt: Date.now() + 60_000,\n });\n await applySubscriptionEventHandler(ctx, {\n projectId: PROJECT_ID as never,\n eventId: startedId as never,\n });\n await bindSubscriptionToUserHandler(ctx, {\n projectId: PROJECT_ID as never,\n purchaseToken: \"replacement\",\n userId: \"successor-owner\",\n });\n const grant = db\n .rows(\"commerceEvents\")\n .find((event) => event.eventType === \"entitlement.granted\");\n expect(grant?.userId).toBe(\"successor-owner\");\n\n const successorErasureJob = successorErased\n ? await erasureJob(\"successor-owner\")\n : undefined;\n const destinationId = await db.insert(\"outboundDestinations\", {\n projectId: PROJECT_ID,\n enabled: true,\n eventTypes: [\"entitlement.revoked\"],\n });\n const linkedId = await seedWebhookEvent(db, {\n type: \"SubscriptionProductChanged\",\n notificationId: \"late-erased-link\",\n occurredAt: 2_000,\n });\n await db.patch(linkedId, {\n purchaseToken: \"replacement\",\n linkedPurchaseToken: TOKEN,\n });\n const args = {\n projectId: PROJECT_ID as never,\n eventId: linkedId as never,\n };\n await applySubscriptionEventHandler(ctx, args);\n await applySubscriptionEventHandler(ctx, args);\n\n expect(db.rows(\"subscriptions\")).toHaveLength(1);\n expect(db.rows(\"subscriptions\")[0]).toMatchObject({\n accountErased: true,\n });\n expect(db.rows(\"subscriptions\")[0].userId).toBeUndefined();\n const revocations = db\n .rows(\"commerceEvents\")\n .filter((event) => event.eventType === \"entitlement.revoked\");\n if (successorErased) {\n expect(revocations).toEqual([]);\n expect(\n db\n .rows(\"commerceEvents\")\n .some(\n (event) =>\n event.sourceEventId === linkedId && event.userId !== undefined,\n ),\n ).toBe(false);\n await drainSubscriptionUserErasurePage(\n ctx,\n successorErasureJob as never,\n );\n expect(\n db.rows(\"commerceEvents\").some((event) => event.userId !== undefined),\n ).toBe(false);\n expect(db.rows(\"outboundDeliveries\")).toEqual([]);\n } else {\n expect(revocations).toHaveLength(1);\n expect(buildEventPayload(revocations[0] as never)).toMatchObject({\n eventType: \"entitlement.revoked\",\n userId: \"successor-owner\",\n productId: \"premium_monthly\",\n sourceStoreEventId: \"late-erased-link\",\n subscription: { active: false },\n });\n expect(\n buildEventPayload(revocations[0] as never).price,\n ).toBeUndefined();\n expect(db.rows(\"outboundDeliveries\")).toEqual([\n expect.objectContaining({\n eventId: revocations[0]._id,\n destinationId,\n status: \"pending\",\n }),\n ]);\n }\n expect(\n JSON.stringify(\n [...db.tables.values()].map((rows) => [...rows.values()]),\n ),\n ).not.toContain(\"erased-owner\");\n },\n );\n\n it.each([\n { erasedToken: TOKEN, successorExists: false, boundToken: undefined },\n { erasedToken: TOKEN, successorExists: true, boundToken: undefined },\n { erasedToken: TOKEN, successorExists: true, boundToken: \"replacement\" },\n { erasedToken: \"replacement\", successorExists: true, boundToken: TOKEN },\n ])(\"preserves erasure and removes linked ownership: %j\", async (testCase) => {\n const db = new MemDb();\n const ctx = makeCtx(db);\n for (const purchaseToken of testCase.successorExists\n ? [TOKEN, \"replacement\"]\n : [TOKEN]) {\n const id = await recordVerifiedSubscriptionHandler(ctx, {\n projectId: PROJECT_ID as never,\n platform: \"Android\",\n purchaseToken,\n productId: \"premium_monthly\",\n purchaseState: \"ENTITLED\",\n subscriptionState: \"SUBSCRIPTION_STATE_ACTIVE\",\n });\n if (purchaseToken === testCase.erasedToken)\n await db.patch(id!, { accountErased: true });\n if (purchaseToken === testCase.boundToken)\n await bindSubscriptionToUserHandler(ctx, {\n projectId: PROJECT_ID as never,\n purchaseToken,\n userId: \"linked-owner\",\n });\n }\n const eventId = await seedWebhookEvent(db, {\n type: \"SubscriptionStarted\",\n notificationId: \"erased-replacement\",\n occurredAt: Date.now(),\n });\n await db.patch(eventId, {\n purchaseToken: \"replacement\",\n linkedPurchaseToken: TOKEN,\n });\n await applySubscriptionEventHandler(ctx, {\n projectId: PROJECT_ID as never,\n eventId: eventId as never,\n });\n\n expect(db.rows(\"subscriptions\")).toHaveLength(1);\n expect(db.rows(\"subscriptions\")[0]).toMatchObject({\n purchaseToken: \"replacement\",\n accountErased: true,\n });\n expect(db.rows(\"subscriptions\")[0].userId).toBeUndefined();\n for (const purchaseToken of [TOKEN, \"replacement\"]) {\n const args = {\n projectId: PROJECT_ID as never,\n purchaseToken,\n userId: \"new-owner\",\n };\n expect(await bindSubscriptionToUserHandler(ctx, args)).toBeNull();\n expect(await rebindSubscriptionToUserHandler(ctx, args)).toBeNull();\n }\n expect(\n db.rows(\"commerceEvents\").some((event) => event.userId !== undefined),\n ).toBe(false);\n });\n});\n\ndescribe(\"bindSubscriptionToUser amount handling\", () => {\n it(\"does not repeat an amount the webhook already reported\", async () => {\n const db = new MemDb();\n db.seedProduct({\n projectId: PROJECT_ID,\n platform: \"Android\",\n productId: \"premium_monthly\",\n billingPeriod: \"P1M\",\n });\n const eventId = await seedWebhookEvent(db, {\n type: \"SubscriptionStarted\",\n notificationId: \"message-webhook-first\",\n occurredAt: 1_000,\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: eventId as never,\n });\n const afterWebhook = db\n .rows(\"commerceEvents\")\n .filter((row) => row.amountMicros !== undefined).length;\n\n await bindSubscriptionToUserHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n purchaseToken: TOKEN,\n userId: \"user_1\",\n });\n\n const priced = db\n .rows(\"commerceEvents\")\n .filter((row) => row.amountMicros !== undefined);\n // The bind grant correlates an existing purchase to a user; it is not a\n // second billing, so the count must not move.\n expect(priced.length).toBe(afterWebhook);\n expect(db.rows(\"commerceEvents\").at(-1)?.eventType).toBe(\n \"entitlement.granted\",\n );\n expect(db.rows(\"commerceEvents\").at(-1)?.amountMicros).toBeUndefined();\n });\n});\n\ndescribe(\"applySubscriptionEventHandler\", () => {\n beforeEach(() => {\n vi.setSystemTime(new Date(\"2026-01-01T00:00:00.000Z\"));\n });\n\n afterEach(() => {\n vi.useRealTimers();\n });\n\n // Commerce Protocol's `whenNoPriorStoreEvent` turns on store history, not on\n // whether a record exists — a purchase learned from a client receipt but\n // never from the store still begins the story. That distinction lives here,\n // in the override, and nowhere in the state machine, so it is tested here.\n it(\"starts rather than recovers when a record exists with no store history\", async () => {\n const db = new MemDb();\n db.seedProduct({\n projectId: PROJECT_ID,\n platform: \"Android\",\n productId: \"premium_monthly\",\n billingPeriod: \"P1M\",\n });\n // A client receipt created this row; no store notification ever touched it,\n // so it carries no lastEventId.\n await db.insert(\"subscriptions\", {\n projectId: PROJECT_ID,\n platform: \"Android\",\n purchaseToken: TOKEN,\n productId: \"premium_monthly\",\n state: \"Unknown\",\n willRenew: true,\n updatedAt: 0,\n });\n const eventId = await seedWebhookEvent(db, {\n type: \"SubscriptionStarted\",\n notificationId: \"message-first-store-event\",\n occurredAt: 1_000,\n });\n\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: eventId as never,\n });\n // Assert on what was emitted, not what the handler returned: the override\n // applies to the commerce event, while the return value carries the state\n // machine's own transition.\n expect(db.rows(\"commerceEvents\").map((row) => row.eventType)).toContain(\n \"subscription.started\",\n );\n });\n\n it.each([[\"SubscriptionPriceChange\"], [\"SubscriptionDeferred\"]])(\n \"emits no commerce event when %s is the first store event for a receipt-bootstrapped row\",\n async (storeEventType) => {\n // store-event-mapping.json pins whenNoPriorStoreEvent -> event: null for\n // price changes and deferrals: with no earlier store event there is no\n // baseline the event could describe.\n const db = new MemDb();\n db.seedProduct({\n projectId: PROJECT_ID,\n platform: \"Android\",\n productId: \"premium_monthly\",\n billingPeriod: \"P1M\",\n });\n await db.insert(\"subscriptions\", {\n projectId: PROJECT_ID,\n platform: \"Android\",\n purchaseToken: TOKEN,\n productId: \"premium_monthly\",\n state: \"Active\",\n expiresAt: 9_999_999_999_999,\n willRenew: true,\n updatedAt: 0,\n });\n const eventId = await seedWebhookEvent(db, {\n type: storeEventType as never,\n notificationId: `message-${storeEventType}`,\n occurredAt: 1_000,\n });\n\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: eventId as never,\n });\n expect(db.rows(\"commerceEvents\")).toEqual([]);\n },\n );\n\n // Rows written before `lastEventOccurredAt` existed carry only `lastEventId`,\n // so the timestamp guard cannot judge them. Both of its fallbacks protect a\n // money path: a redelivery re-applies the transition and books it twice.\n it.each([\n [\"the same event redelivered\", \"message-legacy\", 500, \"Expired\"],\n [\"an older event arriving late\", \"message-older\", 200, \"Expired\"],\n ])(\n \"drops %s against a legacy row\",\n async (_name, notificationId, occurredAt, expected) => {\n const db = new MemDb();\n db.seedProduct({\n projectId: PROJECT_ID,\n platform: \"Android\",\n productId: \"premium_monthly\",\n billingPeriod: \"P1M\",\n });\n const priorId = await seedWebhookEvent(db, {\n type: \"SubscriptionExpired\",\n notificationId: \"message-legacy\",\n occurredAt: 500,\n });\n await db.insert(\"subscriptions\", {\n projectId: PROJECT_ID,\n platform: \"Android\",\n purchaseToken: TOKEN,\n productId: \"premium_monthly\",\n state: \"Expired\",\n willRenew: false,\n lastEventId: priorId,\n updatedAt: 0,\n });\n const replayId =\n notificationId === \"message-legacy\"\n ? priorId\n : await seedWebhookEvent(db, {\n type: \"SubscriptionStarted\",\n notificationId,\n occurredAt,\n });\n\n await expect(\n applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: replayId as never,\n }),\n ).resolves.toMatchObject({ transition: null });\n expect(db.rows(\"subscriptions\")).toMatchObject([{ state: expected }]);\n expect(db.rows(\"commerceEvents\")).toEqual([]);\n },\n );\n\n it(\"recovers when the record already has store history\", async () => {\n const db = new MemDb();\n db.seedProduct({\n projectId: PROJECT_ID,\n platform: \"Android\",\n productId: \"premium_monthly\",\n billingPeriod: \"P1M\",\n });\n const priorId = await seedWebhookEvent(db, {\n type: \"SubscriptionExpired\",\n notificationId: \"message-prior\",\n occurredAt: 500,\n });\n await db.insert(\"subscriptions\", {\n projectId: PROJECT_ID,\n platform: \"Android\",\n purchaseToken: TOKEN,\n productId: \"premium_monthly\",\n state: \"Expired\",\n willRenew: false,\n lastEventId: priorId,\n updatedAt: 0,\n });\n const eventId = await seedWebhookEvent(db, {\n type: \"SubscriptionStarted\",\n notificationId: \"message-after-history\",\n occurredAt: 1_000,\n });\n\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: eventId as never,\n });\n expect(db.rows(\"commerceEvents\").map((row) => row.eventType)).toContain(\n \"subscription.recovered\",\n );\n });\n\n it(\"applies a recorded-but-unapplied event exactly once on redelivery\", async () => {\n const db = new MemDb();\n db.seedProduct({\n projectId: PROJECT_ID,\n platform: \"Android\",\n productId: \"premium_monthly\",\n billingPeriod: \"P1M\",\n });\n const eventId = await seedWebhookEvent(db, {\n type: \"SubscriptionStarted\",\n notificationId: \"message-a\",\n occurredAt: 1_000,\n });\n const args = {\n projectId: PROJECT_ID as never,\n eventId: eventId as never,\n };\n\n await expect(\n applySubscriptionEventHandler(makeCtx(db), args),\n ).resolves.toMatchObject({ transition: \"Started\", active: true });\n const appliedAt = db.rows(\"webhookEvents\")[0]?.appliedAt;\n\n await expect(\n applySubscriptionEventHandler(makeCtx(db), args),\n ).resolves.toMatchObject({ transition: null, active: true });\n expect(db.rows(\"webhookEvents\")[0]?.appliedAt).toBe(appliedAt);\n expect(db.rows(\"subscriptions\")).toMatchObject([\n { state: \"Active\", lastEventId: eventId },\n ]);\n expect(db.rows(\"subscriptionStats\")).toMatchObject([\n { activeSubs: 1, mrrMicros: 9_990_000 },\n ]);\n });\n\n it(\"applies distinct same-timestamp events without replaying the old one\", async () => {\n const db = new MemDb();\n db.seedProduct({\n projectId: PROJECT_ID,\n platform: \"Android\",\n productId: \"premium_monthly\",\n billingPeriod: \"P1M\",\n });\n const startedId = await seedWebhookEvent(db, {\n type: \"SubscriptionStarted\",\n notificationId: \"message-a\",\n occurredAt: 1_000,\n });\n const expiredId = await seedWebhookEvent(db, {\n type: \"SubscriptionExpired\",\n notificationId: \"message-b\",\n occurredAt: 1_000,\n });\n\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: startedId as never,\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: expiredId as never,\n });\n await expect(\n applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: startedId as never,\n }),\n ).resolves.toMatchObject({ transition: null, active: false });\n\n expect(db.rows(\"subscriptions\")).toMatchObject([\n { state: \"Expired\", lastEventId: expiredId },\n ]);\n expect(db.rows(\"subscriptionStats\")).toMatchObject([\n { activeSubs: 0, mrrMicros: 0 },\n ]);\n });\n\n it(\"uses ingestion order to backfill a same-timestamp legacy event\", async () => {\n const db = new MemDb();\n db.seedProduct({\n projectId: PROJECT_ID,\n platform: \"Android\",\n productId: \"premium_monthly\",\n billingPeriod: \"P1M\",\n });\n const startedId = await seedWebhookEvent(db, {\n type: \"SubscriptionStarted\",\n notificationId: \"legacy-a\",\n occurredAt: 1_000,\n });\n const expiredId = await seedWebhookEvent(db, {\n type: \"SubscriptionExpired\",\n notificationId: \"legacy-b\",\n occurredAt: 1_000,\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: startedId as never,\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: expiredId as never,\n });\n await db.patch(startedId, { appliedAt: undefined });\n\n await expect(\n applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: startedId as never,\n }),\n ).resolves.toMatchObject({ transition: null, active: false });\n\n expect(\n db.rows(\"webhookEvents\").find((row) => row._id === startedId),\n ).toHaveProperty(\"appliedAt\", Date.now());\n expect(db.rows(\"subscriptions\")).toMatchObject([\n { state: \"Expired\", lastEventId: expiredId },\n ]);\n expect(db.rows(\"subscriptionStats\")).toMatchObject([\n { activeSubs: 0, mrrMicros: 0 },\n ]);\n });\n\n it(\"keeps durable ordering after the previous webhook row is pruned\", async () => {\n const db = new MemDb();\n const startedId = await seedWebhookEvent(db, {\n type: \"SubscriptionStarted\",\n notificationId: \"newer\",\n occurredAt: 2_000,\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: startedId as never,\n });\n await db.delete(startedId);\n const staleId = await seedWebhookEvent(db, {\n type: \"SubscriptionExpired\",\n notificationId: \"older\",\n occurredAt: 1_000,\n });\n\n await expect(\n applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: staleId as never,\n }),\n ).resolves.toMatchObject({ transition: null, active: true });\n expect(db.rows(\"subscriptions\")).toMatchObject([\n {\n state: \"Active\",\n lastEventOccurredAt: 2_000,\n lastEventSourceNotificationId: \"newer\",\n },\n ]);\n });\n\n it(\"does not grant entitlement for an already-expired start event\", async () => {\n const db = new MemDb();\n const eventId = await seedWebhookEvent(db, {\n type: \"SubscriptionStarted\",\n notificationId: \"expired-start\",\n occurredAt: 1_000,\n });\n await db.patch(eventId, { expiresAt: Date.now() - 1 });\n\n await expect(\n applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: eventId as never,\n }),\n ).resolves.toMatchObject({ transition: \"Started\", active: false });\n expect(db.rows(\"commerceEvents\").map((row) => row.eventType)).toEqual([\n \"subscription.started\",\n ]);\n });\n\n it(\"records one-time events without creating subscription commerce\", async () => {\n const db = new MemDb();\n const eventId = await seedWebhookEvent(db, {\n type: \"SubscriptionStarted\",\n notificationId: \"one-time\",\n occurredAt: 1_000,\n });\n await db.patch(eventId, { productKind: \"one_time\" });\n\n await expect(\n applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: eventId as never,\n }),\n ).resolves.toEqual({ transition: null, active: false });\n expect(db.rows(\"subscriptions\")).toHaveLength(0);\n expect(db.rows(\"commerceEvents\")).toHaveLength(0);\n });\n\n it(\"keeps an Apple renewal preference separate from the active product\", async () => {\n const db = new MemDb();\n db.seedProduct({\n projectId: PROJECT_ID,\n platform: \"IOS\",\n productId: \"premium_monthly\",\n billingPeriod: \"P1M\",\n });\n const startedId = await seedWebhookEvent(db, {\n type: \"SubscriptionStarted\",\n notificationId: \"apple-started\",\n occurredAt: 1_000,\n platform: \"IOS\",\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: startedId as never,\n });\n const changedId = await seedWebhookEvent(db, {\n type: \"SubscriptionProductChanged\",\n notificationId: \"apple-next-product\",\n occurredAt: 2_000,\n platform: \"IOS\",\n productId: \"premium_yearly\",\n });\n await db.patch(changedId, { priceAmountMicros: 99_990_000 });\n\n await expect(\n applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: changedId as never,\n }),\n ).resolves.toMatchObject({ transition: \"ProductChanged\", active: true });\n expect(db.rows(\"subscriptions\")).toMatchObject([\n {\n productId: \"premium_monthly\",\n platform: \"IOS\",\n priceAmountMicros: 9_990_000,\n },\n ]);\n expect(db.rows(\"commerceEvents\").at(-1)).toMatchObject({\n eventType: \"subscription.product_changed\",\n productId: \"premium_yearly\",\n amountMicros: 99_990_000,\n subscription: { productId: \"premium_monthly\" },\n });\n await db.delete(changedId);\n\n await bindSubscriptionToUserHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n purchaseToken: TOKEN,\n userId: \"user-1\",\n });\n expect(db.rows(\"commerceEvents\").at(-1)).toMatchObject({\n eventType: \"entitlement.granted\",\n productId: \"premium_monthly\",\n userId: \"user-1\",\n });\n expect(db.rows(\"commerceEvents\").at(-1)?.amountMicros).toBeUndefined();\n\n const renewedId = await seedWebhookEvent(db, {\n type: \"SubscriptionRenewed\",\n notificationId: \"apple-renewed-on-new-product\",\n occurredAt: 3_000,\n platform: \"IOS\",\n productId: \"premium_yearly\",\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: renewedId as never,\n });\n expect(db.rows(\"commerceEvents\").at(-1)).toMatchObject({\n eventType: \"subscription.renewed\",\n productId: \"premium_yearly\",\n previousProductId: \"premium_monthly\",\n userId: \"user-1\",\n });\n });\n\n it(\"applies an Apple upgrade product immediately\", async () => {\n const db = new MemDb();\n const startedId = await seedWebhookEvent(db, {\n type: \"SubscriptionStarted\",\n notificationId: \"apple-started\",\n occurredAt: 1_000,\n platform: \"IOS\",\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: startedId as never,\n });\n const changedId = await seedWebhookEvent(db, {\n type: \"SubscriptionProductChanged\",\n notificationId: \"apple-upgrade\",\n occurredAt: 2_000,\n platform: \"IOS\",\n productId: \"premium_yearly\",\n });\n await db.patch(changedId, { effectiveImmediately: true });\n\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: changedId as never,\n });\n\n expect(db.rows(\"subscriptions\")[0]).toMatchObject({\n productId: \"premium_yearly\",\n lastEventId: changedId,\n });\n });\n\n it(\"includes the previous product for an applied Google item change\", async () => {\n const db = new MemDb();\n const startedId = await seedWebhookEvent(db, {\n type: \"SubscriptionStarted\",\n notificationId: \"google-started\",\n occurredAt: 1_000,\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: startedId as never,\n });\n const changedId = await seedWebhookEvent(db, {\n type: \"SubscriptionProductChanged\",\n notificationId: \"google-item-change\",\n occurredAt: 2_000,\n productId: \"premium_yearly\",\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: changedId as never,\n });\n\n expect(db.rows(\"commerceEvents\").at(-1)).toMatchObject({\n eventType: \"subscription.product_changed\",\n previousProductId: \"premium_monthly\",\n productId: \"premium_yearly\",\n subscription: { productId: \"premium_yearly\" },\n });\n });\n\n it(\"does not guess a product for a multi-item Google change\", async () => {\n const db = new MemDb();\n const startedId = await seedWebhookEvent(db, {\n type: \"SubscriptionStarted\",\n notificationId: \"google-bundle-started\",\n occurredAt: 1_000,\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: startedId as never,\n });\n const changedId = await db.insert(\"webhookEvents\", {\n projectId: PROJECT_ID,\n type: \"SubscriptionProductChanged\",\n source: \"GooglePlayRealTimeDeveloperNotifications\",\n platform: \"Android\",\n environment: \"Production\",\n purchaseToken: TOKEN,\n productKind: \"subscription\",\n sourceNotificationId: \"google-bundle-change\",\n occurredAt: 2_000,\n receivedAt: 2_000,\n });\n\n await expect(\n applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: changedId as never,\n }),\n ).resolves.toMatchObject({ transition: null, active: true });\n expect(db.rows(\"subscriptions\")[0]).toMatchObject({\n productId: \"premium_monthly\",\n lastEventId: changedId,\n lastEventOccurredAt: 2_000,\n });\n expect(db.rows(\"commerceEvents\")).toHaveLength(1);\n\n const delayedId = await seedWebhookEvent(db, {\n type: \"SubscriptionExpired\",\n notificationId: \"google-delayed-expiry\",\n occurredAt: 1_500,\n });\n await expect(\n applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: delayedId as never,\n }),\n ).resolves.toMatchObject({ transition: null, active: true });\n expect(db.rows(\"subscriptions\")[0]).toMatchObject({\n state: \"Active\",\n lastEventId: changedId,\n });\n });\n\n it(\"moves a Google replacement flow onto the linked token row\", async () => {\n const db = new MemDb();\n const startedId = await seedWebhookEvent(db, {\n type: \"SubscriptionStarted\",\n notificationId: \"google-old-token\",\n occurredAt: 1_000,\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: startedId as never,\n });\n const changedId = await db.insert(\"webhookEvents\", {\n projectId: PROJECT_ID,\n type: \"SubscriptionProductChanged\",\n source: \"GooglePlayRealTimeDeveloperNotifications\",\n platform: \"Android\",\n environment: \"Production\",\n purchaseToken: \"purchase_token_2\",\n linkedPurchaseToken: TOKEN,\n productKind: \"subscription\",\n productId: \"premium_yearly\",\n subscriptionState: \"Active\",\n sourceNotificationId: \"google-new-token\",\n occurredAt: 2_000,\n receivedAt: 2_000,\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: changedId as never,\n });\n\n expect(db.rows(\"subscriptions\")).toHaveLength(1);\n expect(db.rows(\"subscriptions\")[0]).toMatchObject({\n purchaseToken: \"purchase_token_2\",\n productId: \"premium_yearly\",\n });\n expect(db.rows(\"commerceEvents\").at(-1)).toMatchObject({\n eventType: \"subscription.product_changed\",\n previousProductId: \"premium_monthly\",\n productId: \"premium_yearly\",\n });\n });\n\n it(\"classifies a linked Google purchase with a new product as a change\", async () => {\n const db = new MemDb();\n const startedId = await seedWebhookEvent(db, {\n type: \"SubscriptionStarted\",\n notificationId: \"google-linked-start-old\",\n occurredAt: 1_000,\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: startedId as never,\n });\n const replacementId = await db.insert(\"webhookEvents\", {\n projectId: PROJECT_ID,\n type: \"SubscriptionStarted\",\n source: \"GooglePlayRealTimeDeveloperNotifications\",\n platform: \"Android\",\n environment: \"Production\",\n purchaseToken: \"purchase_token_2\",\n linkedPurchaseToken: TOKEN,\n productKind: \"subscription\",\n productId: \"premium_yearly\",\n subscriptionState: \"Active\",\n sourceNotificationId: \"google-linked-start-new\",\n occurredAt: 2_000,\n receivedAt: 2_000,\n });\n\n await expect(\n applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: replacementId as never,\n }),\n ).resolves.toMatchObject({ transition: \"ProductChanged\", active: true });\n\n expect(\n db\n .rows(\"commerceEvents\")\n .filter((event) => event.sourceEventId === replacementId),\n ).toEqual([\n expect.objectContaining({\n eventType: \"subscription.product_changed\",\n previousProductId: \"premium_monthly\",\n productId: \"premium_yearly\",\n }),\n ]);\n });\n\n it(\"defers a same-product token handoff until the replacement renews\", async () => {\n const db = new MemDb();\n const startedId = await seedWebhookEvent(db, {\n type: \"SubscriptionStarted\",\n notificationId: \"google-deferred-start-old\",\n occurredAt: 1_000,\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: startedId as never,\n });\n const handoffId = await db.insert(\"webhookEvents\", {\n projectId: PROJECT_ID,\n type: \"SubscriptionStarted\",\n source: \"GooglePlayRealTimeDeveloperNotifications\",\n platform: \"Android\",\n environment: \"Production\",\n purchaseToken: \"purchase_token_2\",\n linkedPurchaseToken: TOKEN,\n productKind: \"subscription\",\n productId: \"premium_monthly\",\n subscriptionState: \"Active\",\n sourceNotificationId: \"google-deferred-token-handoff\",\n occurredAt: 2_000,\n receivedAt: 2_000,\n });\n await expect(\n applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: handoffId as never,\n }),\n ).resolves.toMatchObject({ transition: null, active: true });\n expect(\n db\n .rows(\"commerceEvents\")\n .filter((event) => event.sourceEventId === handoffId),\n ).toEqual([]);\n\n const predecessorExpiryId = await db.insert(\"webhookEvents\", {\n projectId: PROJECT_ID,\n type: \"SubscriptionExpired\",\n source: \"GooglePlayRealTimeDeveloperNotifications\",\n platform: \"Android\",\n environment: \"Production\",\n purchaseToken: TOKEN,\n productKind: \"subscription\",\n productId: \"premium_monthly\",\n subscriptionState: \"Expired\",\n expiresAt: 2_500,\n sourceNotificationId: \"google-deferred-predecessor-expired\",\n occurredAt: 2_500,\n receivedAt: 2_500,\n });\n await expect(\n applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: predecessorExpiryId as never,\n }),\n ).resolves.toMatchObject({ transition: null, active: true });\n expect(db.rows(\"subscriptions\")).toHaveLength(1);\n expect(db.rows(\"subscriptions\")[0]).toMatchObject({\n purchaseToken: \"purchase_token_2\",\n state: \"Active\",\n });\n expect(\n db\n .rows(\"commerceEvents\")\n .filter((event) => event.sourceEventId === predecessorExpiryId),\n ).toEqual([]);\n expect(db.rows(\"subscriptionTokenAliases\")).toMatchObject([\n {\n purchaseToken: TOKEN,\n successorPurchaseToken: \"purchase_token_2\",\n },\n ]);\n\n const successor = db.rows(\"subscriptions\")[0];\n const statsBeforeStaleVerification = structuredClone(\n db.rows(\"subscriptionStats\"),\n );\n await expect(\n recordVerifiedSubscriptionHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n platform: \"Android\",\n purchaseToken: TOKEN,\n productId: \"stale_monthly\",\n purchaseState: \"ENTITLED\",\n subscriptionState: \"SUBSCRIPTION_STATE_ACTIVE\",\n expiresAt: 2_600,\n willRenew: false,\n }),\n ).resolves.toBe(successor._id);\n expect(db.rows(\"subscriptions\")).toMatchObject([\n {\n _id: successor._id,\n purchaseToken: \"purchase_token_2\",\n productId: \"premium_monthly\",\n state: \"Active\",\n },\n ]);\n expect(db.rows(\"subscriptionStats\")).toEqual(statsBeforeStaleVerification);\n\n await expect(\n bindSubscriptionToUserHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n purchaseToken: TOKEN,\n userId: \"user-after-handoff\",\n }),\n ).resolves.toBe(successor._id);\n expect(db.rows(\"subscriptions\")).toMatchObject([\n {\n _id: successor._id,\n purchaseToken: \"purchase_token_2\",\n userId: \"user-after-handoff\",\n },\n ]);\n expect(db.rows(\"subscriptions\")).toHaveLength(1);\n\n const renewalId = await db.insert(\"webhookEvents\", {\n projectId: PROJECT_ID,\n type: \"SubscriptionRenewed\",\n source: \"GooglePlayRealTimeDeveloperNotifications\",\n platform: \"Android\",\n environment: \"Production\",\n purchaseToken: \"purchase_token_2\",\n linkedPurchaseToken: TOKEN,\n productKind: \"subscription\",\n productId: \"premium_yearly\",\n subscriptionState: \"Active\",\n sourceNotificationId: \"google-deferred-first-renewal\",\n occurredAt: 3_000,\n receivedAt: 3_000,\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: renewalId as never,\n });\n\n expect(db.rows(\"subscriptions\")[0]).toMatchObject({\n purchaseToken: \"purchase_token_2\",\n productId: \"premium_yearly\",\n });\n expect(\n db\n .rows(\"commerceEvents\")\n .filter((event) => event.sourceEventId === renewalId),\n ).toEqual([\n expect.objectContaining({\n eventType: \"subscription.renewed\",\n previousProductId: \"premium_monthly\",\n productId: \"premium_yearly\",\n }),\n ]);\n });\n\n it(\"resolves predecessor aliases beyond 32 replacement hops\", async () => {\n const db = new MemDb();\n const hopCount = 40;\n for (let index = 0; index < hopCount; index += 1) {\n await db.insert(\"subscriptionTokenAliases\", {\n projectId: PROJECT_ID,\n purchaseToken: `token_${index}`,\n successorPurchaseToken: `token_${index + 1}`,\n predecessorProductId:\n index === 0 ? \"premium_monthly\" : \"premium_yearly\",\n createdAt: index,\n updatedAt: index,\n });\n }\n const subscriptionId = await db.insert(\"subscriptions\", {\n projectId: PROJECT_ID,\n purchaseToken: `token_${hopCount}`,\n productKind: \"subscription\",\n productId: \"premium_yearly\",\n platform: \"Android\",\n state: \"Active\",\n expiresAt: 1_900_000_000_000,\n willRenew: true,\n startedAt: 1,\n updatedAt: 1,\n });\n await db.insert(\"subscriptions\", {\n projectId: PROJECT_ID,\n purchaseToken: \"token_20\",\n productKind: \"subscription\",\n productId: \"stale_intermediate\",\n platform: \"Android\",\n state: \"Expired\",\n expiresAt: 2_000,\n willRenew: false,\n startedAt: 1,\n updatedAt: 1,\n });\n const expiredId = await db.insert(\"webhookEvents\", {\n projectId: PROJECT_ID,\n type: \"SubscriptionExpired\",\n source: \"GooglePlayRealTimeDeveloperNotifications\",\n platform: \"Android\",\n environment: \"Production\",\n purchaseToken: \"token_0\",\n productKind: \"subscription\",\n productId: \"premium_monthly\",\n sourceNotificationId: \"old-chain-expired\",\n occurredAt: 2_000,\n receivedAt: 2_000,\n });\n\n await expect(\n getSourceProductIdByTokenHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n purchaseToken: \"token_0\",\n }),\n ).resolves.toBe(\"premium_monthly\");\n await expect(\n getCurrentProductIdByTokenHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n purchaseToken: \"token_0\",\n }),\n ).resolves.toBe(\"premium_yearly\");\n\n await expect(\n applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: expiredId as never,\n }),\n ).resolves.toEqual({\n transition: null,\n active: true,\n subscriptionId,\n });\n expect(db.rows(\"subscriptions\")).toHaveLength(2);\n expect(\n db.rows(\"subscriptions\").find((row) => row._id === subscriptionId),\n ).toMatchObject({\n purchaseToken: `token_${hopCount}`,\n productId: \"premium_yearly\",\n state: \"Active\",\n });\n expect(db.rows(\"commerceEvents\")).toEqual([]);\n });\n\n it(\"emits predecessor refunds and revocations without deactivating the successor\", async () => {\n const db = new MemDb();\n const subscriptionId = await db.insert(\"subscriptions\", {\n projectId: PROJECT_ID,\n purchaseToken: \"current_token\",\n productKind: \"subscription\",\n productId: \"premium_yearly\",\n platform: \"Android\",\n state: \"Active\",\n expiresAt: 1_900_000_000_000,\n willRenew: true,\n startedAt: 1,\n updatedAt: 1,\n });\n await db.insert(\"subscriptionTokenAliases\", {\n projectId: PROJECT_ID,\n purchaseToken: \"old_token\",\n successorPurchaseToken: \"current_token\",\n predecessorProductId: \"premium_monthly\",\n createdAt: 1,\n updatedAt: 1,\n });\n\n const cases = [\n [\"PurchaseRefunded\", \"Refunded\", \"subscription.refunded\"],\n [\"SubscriptionRevoked\", \"Revoked\", \"subscription.revoked\"],\n ] as const;\n for (const [type, transition, eventType] of cases) {\n const eventId = await db.insert(\"webhookEvents\", {\n projectId: PROJECT_ID,\n type,\n source: \"GooglePlayRealTimeDeveloperNotifications\",\n platform: \"Android\",\n environment: \"Production\",\n purchaseToken: \"old_token\",\n productKind: \"subscription\",\n productId: \"premium_monthly\",\n sourceNotificationId: `old-token-${type}`,\n occurredAt: 2_000,\n receivedAt: 2_000,\n });\n await expect(\n applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: eventId as never,\n }),\n ).resolves.toEqual({ transition, active: true, subscriptionId });\n expect(\n db\n .rows(\"commerceEvents\")\n .filter((event) => event.sourceEventId === eventId)\n .map((event) => [\n event.eventType,\n event.productId,\n (event.subscription as { state?: string } | undefined)?.state,\n event.entitlementActive,\n ]),\n ).toEqual([[eventType, \"premium_monthly\", transition, false]]);\n }\n expect(db.rows(\"subscriptions\")).toMatchObject([\n {\n purchaseToken: \"current_token\",\n productId: \"premium_yearly\",\n state: \"Active\",\n },\n ]);\n });\n\n it(\"classifies a same-product linked prepaid extension as a renewal\", async () => {\n const db = new MemDb();\n const startedId = await seedWebhookEvent(db, {\n type: \"SubscriptionStarted\",\n notificationId: \"google-prepaid-start\",\n occurredAt: 1_000,\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: startedId as never,\n });\n const topUpId = await db.insert(\"webhookEvents\", {\n projectId: PROJECT_ID,\n type: \"SubscriptionStarted\",\n source: \"GooglePlayRealTimeDeveloperNotifications\",\n platform: \"Android\",\n environment: \"Production\",\n purchaseToken: \"purchase_token_2\",\n linkedPurchaseToken: TOKEN,\n productKind: \"subscription\",\n productId: \"premium_monthly\",\n subscriptionState: \"Active\",\n expiresAt: 1_900_000_000_000,\n willRenew: false,\n sourceNotificationId: \"google-prepaid-top-up\",\n occurredAt: 2_000,\n receivedAt: 2_000,\n });\n\n await expect(\n applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: topUpId as never,\n }),\n ).resolves.toMatchObject({ transition: \"Renewed\", active: true });\n expect(\n db\n .rows(\"commerceEvents\")\n .filter((event) => event.sourceEventId === topUpId),\n ).toEqual([\n expect.objectContaining({\n eventType: \"subscription.renewed\",\n productId: \"premium_monthly\",\n subscription: expect.objectContaining({\n expiresAt: 1_900_000_000_000,\n willRenew: false,\n }),\n }),\n ]);\n expect(\n db.rows(\"commerceEvents\").find((event) => event.sourceEventId === topUpId)\n ?.subscription,\n ).not.toHaveProperty(\"renewsAt\");\n expect(db.rows(\"subscriptions\")[0]).toMatchObject({\n willRenew: false,\n expiresAt: 1_900_000_000_000,\n });\n expect(db.rows(\"subscriptions\")[0]?.renewsAt).toBeUndefined();\n });\n\n it(\"classifies an active same-product linked resubscribe as uncanceled\", async () => {\n const db = new MemDb();\n const startedId = await seedWebhookEvent(db, {\n type: \"SubscriptionStarted\",\n notificationId: \"google-resubscribe-start\",\n occurredAt: 1_000,\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: startedId as never,\n });\n const canceledId = await db.insert(\"webhookEvents\", {\n projectId: PROJECT_ID,\n type: \"SubscriptionCanceled\",\n source: \"GooglePlayRealTimeDeveloperNotifications\",\n platform: \"Android\",\n environment: \"Production\",\n purchaseToken: TOKEN,\n productKind: \"subscription\",\n productId: \"premium_monthly\",\n subscriptionState: \"Active\",\n expiresAt: 1_800_000_000_000,\n willRenew: false,\n sourceNotificationId: \"google-resubscribe-canceled\",\n occurredAt: 2_000,\n receivedAt: 2_000,\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: canceledId as never,\n });\n const resubscribedId = await db.insert(\"webhookEvents\", {\n projectId: PROJECT_ID,\n type: \"SubscriptionStarted\",\n source: \"GooglePlayRealTimeDeveloperNotifications\",\n platform: \"Android\",\n environment: \"Production\",\n purchaseToken: \"purchase_token_2\",\n linkedPurchaseToken: TOKEN,\n productKind: \"subscription\",\n productId: \"premium_monthly\",\n subscriptionState: \"Active\",\n expiresAt: 1_800_000_000_000,\n willRenew: true,\n sourceNotificationId: \"google-resubscribe-linked\",\n occurredAt: 3_000,\n receivedAt: 3_000,\n });\n\n await expect(\n applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: resubscribedId as never,\n }),\n ).resolves.toMatchObject({ transition: \"Uncanceled\", active: true });\n expect(\n db\n .rows(\"commerceEvents\")\n .filter((event) => event.sourceEventId === resubscribedId)\n .map((event) => event.eventType),\n ).toEqual([\"subscription.uncanceled\"]);\n });\n\n it(\"recovers a linked inactive predecessor regardless of verification order\", async () => {\n const db = new MemDb();\n const startedId = await seedWebhookEvent(db, {\n type: \"SubscriptionStarted\",\n notificationId: \"google-order-start\",\n occurredAt: 1_000,\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: startedId as never,\n });\n const expiredId = await seedWebhookEvent(db, {\n type: \"SubscriptionExpired\",\n notificationId: \"google-order-expired\",\n occurredAt: 2_000,\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: expiredId as never,\n });\n await recordVerifiedSubscriptionHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n platform: \"Android\",\n purchaseToken: \"purchase_token_2\",\n productId: \"premium_monthly\",\n purchaseState: \"ENTITLED\",\n subscriptionState: \"SUBSCRIPTION_STATE_ACTIVE\",\n expiresAt: 1_900_000_000_000,\n });\n const recoveredId = await db.insert(\"webhookEvents\", {\n projectId: PROJECT_ID,\n type: \"SubscriptionStarted\",\n source: \"GooglePlayRealTimeDeveloperNotifications\",\n platform: \"Android\",\n environment: \"Production\",\n purchaseToken: \"purchase_token_2\",\n linkedPurchaseToken: TOKEN,\n productKind: \"subscription\",\n productId: \"premium_monthly\",\n subscriptionState: \"Active\",\n expiresAt: 1_900_000_000_000,\n willRenew: true,\n sourceNotificationId: \"google-order-linked\",\n occurredAt: 3_000,\n receivedAt: 3_000,\n });\n\n await expect(\n applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: recoveredId as never,\n }),\n ).resolves.toMatchObject({ transition: \"Recovered\", active: true });\n expect(\n db\n .rows(\"commerceEvents\")\n .filter((event) => event.sourceEventId === recoveredId)\n .map((event) => event.eventType),\n ).toEqual([\"subscription.recovered\"]);\n });\n\n it(\"recovers an inactive predecessor through a linked Google purchase\", async () => {\n const db = new MemDb();\n const startedId = await seedWebhookEvent(db, {\n type: \"SubscriptionStarted\",\n notificationId: \"google-linked-inactive-start\",\n occurredAt: 1_000,\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: startedId as never,\n });\n const expiredId = await seedWebhookEvent(db, {\n type: \"SubscriptionExpired\",\n notificationId: \"google-linked-inactive-expired\",\n occurredAt: 2_000,\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: expiredId as never,\n });\n const recoveredId = await db.insert(\"webhookEvents\", {\n projectId: PROJECT_ID,\n type: \"SubscriptionStarted\",\n source: \"GooglePlayRealTimeDeveloperNotifications\",\n platform: \"Android\",\n environment: \"Production\",\n purchaseToken: \"purchase_token_2\",\n linkedPurchaseToken: TOKEN,\n productKind: \"subscription\",\n productId: \"premium_monthly\",\n subscriptionState: \"Active\",\n sourceNotificationId: \"google-linked-inactive-repurchase\",\n occurredAt: 3_000,\n receivedAt: 3_000,\n });\n\n await expect(\n applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: recoveredId as never,\n }),\n ).resolves.toMatchObject({ transition: \"Recovered\", active: true });\n expect(\n db\n .rows(\"commerceEvents\")\n .filter((event) => event.sourceEventId === recoveredId)\n .map((event) => event.eventType),\n ).toEqual([\"subscription.recovered\"]);\n });\n\n it(\"applies a delayed replacement after the predecessor expires\", async () => {\n const db = new MemDb();\n const startedId = await seedWebhookEvent(db, {\n type: \"SubscriptionStarted\",\n notificationId: \"google-predecessor-started\",\n occurredAt: 1_000,\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: startedId as never,\n });\n const expiredId = await seedWebhookEvent(db, {\n type: \"SubscriptionExpired\",\n notificationId: \"google-predecessor-expired\",\n occurredAt: 3_000,\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: expiredId as never,\n });\n const changedId = await db.insert(\"webhookEvents\", {\n projectId: PROJECT_ID,\n type: \"SubscriptionProductChanged\",\n source: \"GooglePlayRealTimeDeveloperNotifications\",\n platform: \"Android\",\n environment: \"Production\",\n purchaseToken: \"purchase_token_2\",\n linkedPurchaseToken: TOKEN,\n productKind: \"subscription\",\n productId: \"premium_yearly\",\n subscriptionState: \"Active\",\n sourceNotificationId: \"google-delayed-replacement\",\n occurredAt: 2_000,\n receivedAt: 4_000,\n });\n\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: changedId as never,\n });\n\n expect(db.rows(\"subscriptions\")).toHaveLength(1);\n expect(db.rows(\"subscriptions\")[0]).toMatchObject({\n purchaseToken: \"purchase_token_2\",\n productId: \"premium_yearly\",\n state: \"Active\",\n lastEventId: changedId,\n });\n expect(\n db.rows(\"webhookEvents\").find((row) => row._id === changedId),\n ).toHaveProperty(\"appliedAt\");\n expect(db.rows(\"commerceEvents\")).toContainEqual(\n expect.objectContaining({\n eventType: \"subscription.product_changed\",\n previousProductId: \"premium_monthly\",\n productId: \"premium_yearly\",\n }),\n );\n });\n\n it(\"keeps verification-first replacement state over a later predecessor expiry\", async () => {\n const db = new MemDb();\n db.seedProduct({\n projectId: PROJECT_ID,\n platform: \"Android\",\n productId: \"premium_monthly\",\n billingPeriod: \"P1M\",\n });\n db.seedProduct({\n projectId: PROJECT_ID,\n platform: \"Android\",\n productId: \"premium_yearly\",\n billingPeriod: \"P1Y\",\n });\n const startedId = await seedWebhookEvent(db, {\n type: \"SubscriptionStarted\",\n notificationId: \"google-old-token\",\n occurredAt: 1_000,\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: startedId as never,\n });\n await bindSubscriptionToUserHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n purchaseToken: TOKEN,\n userId: \"user_1\",\n });\n await recordVerifiedSubscriptionHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n platform: \"Android\",\n purchaseToken: \"purchase_token_2\",\n productId: \"premium_yearly\",\n purchaseState: \"ENTITLED\",\n subscriptionState: \"SUBSCRIPTION_STATE_ACTIVE\",\n });\n expect(db.rows(\"subscriptions\")).toHaveLength(2);\n expect(\n db\n .rows(\"subscriptionStats\")\n .reduce((total, row) => total + Number(row.activeSubs), 0),\n ).toBe(2);\n\n const expiredId = await db.insert(\"webhookEvents\", {\n projectId: PROJECT_ID,\n type: \"SubscriptionExpired\",\n source: \"GooglePlayRealTimeDeveloperNotifications\",\n platform: \"Android\",\n environment: \"Production\",\n purchaseToken: TOKEN,\n productKind: \"subscription\",\n productId: \"premium_monthly\",\n subscriptionState: \"Expired\",\n sourceNotificationId: \"google-old-token-expired\",\n occurredAt: 3_000,\n receivedAt: 3_000,\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: expiredId as never,\n });\n\n const changedId = await db.insert(\"webhookEvents\", {\n projectId: PROJECT_ID,\n type: \"SubscriptionProductChanged\",\n source: \"GooglePlayRealTimeDeveloperNotifications\",\n platform: \"Android\",\n environment: \"Production\",\n purchaseToken: \"purchase_token_2\",\n linkedPurchaseToken: TOKEN,\n productKind: \"subscription\",\n productId: \"premium_yearly\",\n subscriptionState: \"Active\",\n sourceNotificationId: \"google-new-token\",\n occurredAt: 2_000,\n receivedAt: 2_000,\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: changedId as never,\n });\n\n expect(db.rows(\"subscriptions\")).toHaveLength(1);\n expect(db.rows(\"subscriptions\")[0]).toMatchObject({\n purchaseToken: \"purchase_token_2\",\n productId: \"premium_yearly\",\n userId: \"user_1\",\n state: \"Active\",\n lastEventId: changedId,\n });\n expect(\n db\n .rows(\"subscriptionStats\")\n .reduce((total, row) => total + Number(row.activeSubs), 0),\n ).toBe(1);\n });\n\n it(\"preserves active predecessor semantics after replacement verification\", async () => {\n const db = new MemDb();\n const startedId = await seedWebhookEvent(db, {\n type: \"SubscriptionStarted\",\n notificationId: \"google-active-predecessor\",\n occurredAt: 1_000,\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: startedId as never,\n });\n await recordVerifiedSubscriptionHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n platform: \"Android\",\n purchaseToken: \"purchase_token_2\",\n productId: \"premium_yearly\",\n purchaseState: \"ENTITLED\",\n subscriptionState: \"SUBSCRIPTION_STATE_ACTIVE\",\n });\n const changedId = await db.insert(\"webhookEvents\", {\n projectId: PROJECT_ID,\n type: \"SubscriptionProductChanged\",\n source: \"GooglePlayRealTimeDeveloperNotifications\",\n platform: \"Android\",\n environment: \"Production\",\n purchaseToken: \"purchase_token_2\",\n linkedPurchaseToken: TOKEN,\n productKind: \"subscription\",\n productId: \"premium_yearly\",\n subscriptionState: \"Active\",\n sourceNotificationId: \"google-verified-replacement\",\n occurredAt: 2_000,\n receivedAt: 2_000,\n });\n\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: changedId as never,\n });\n\n expect(db.rows(\"subscriptions\")).toHaveLength(1);\n expect(db.rows(\"subscriptions\")[0]).toMatchObject({\n purchaseToken: \"purchase_token_2\",\n productId: \"premium_yearly\",\n state: \"Active\",\n lastEventId: changedId,\n });\n expect(\n db\n .rows(\"commerceEvents\")\n .filter((event) => event.sourceEventId === changedId),\n ).toEqual([\n expect.objectContaining({\n eventType: \"subscription.product_changed\",\n previousProductId: \"premium_monthly\",\n productId: \"premium_yearly\",\n }),\n ]);\n });\n\n it(\"emits a verified replacement when multi-item enrichment omits the product\", async () => {\n const db = new MemDb();\n const startedId = await seedWebhookEvent(db, {\n type: \"SubscriptionStarted\",\n notificationId: \"google-active-predecessor-ambiguous\",\n occurredAt: 1_000,\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: startedId as never,\n });\n await recordVerifiedSubscriptionHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n platform: \"Android\",\n purchaseToken: \"purchase_token_2\",\n productId: \"premium_yearly\",\n purchaseState: \"ENTITLED\",\n subscriptionState: \"SUBSCRIPTION_STATE_ACTIVE\",\n });\n const changedId = await db.insert(\"webhookEvents\", {\n projectId: PROJECT_ID,\n type: \"SubscriptionProductChanged\",\n source: \"GooglePlayRealTimeDeveloperNotifications\",\n platform: \"Android\",\n environment: \"Production\",\n purchaseToken: \"purchase_token_2\",\n linkedPurchaseToken: TOKEN,\n productKind: \"subscription\",\n subscriptionState: \"Active\",\n sourceNotificationId: \"google-verified-ambiguous-replacement\",\n occurredAt: 2_000,\n receivedAt: 2_000,\n });\n\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: changedId as never,\n });\n\n expect(db.rows(\"subscriptions\")).toHaveLength(1);\n expect(db.rows(\"subscriptions\")[0]).toMatchObject({\n purchaseToken: \"purchase_token_2\",\n productId: \"premium_yearly\",\n state: \"Active\",\n lastEventId: changedId,\n });\n expect(\n db\n .rows(\"commerceEvents\")\n .filter((event) => event.sourceEventId === changedId),\n ).toEqual([\n expect.objectContaining({\n eventType: \"subscription.product_changed\",\n previousProductId: \"premium_monthly\",\n productId: \"premium_yearly\",\n }),\n ]);\n });\n\n it(\"rejects linked Google tokens bound to different users\", async () => {\n const db = new MemDb();\n const startedId = await seedWebhookEvent(db, {\n type: \"SubscriptionStarted\",\n notificationId: \"google-old-token\",\n occurredAt: 1_000,\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: startedId as never,\n });\n await bindSubscriptionToUserHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n purchaseToken: TOKEN,\n userId: \"user_1\",\n });\n await recordVerifiedSubscriptionHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n platform: \"Android\",\n purchaseToken: \"purchase_token_2\",\n productId: \"premium_yearly\",\n purchaseState: \"ENTITLED\",\n subscriptionState: \"SUBSCRIPTION_STATE_ACTIVE\",\n });\n await bindSubscriptionToUserHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n purchaseToken: \"purchase_token_2\",\n userId: \"user_2\",\n });\n const changedId = await db.insert(\"webhookEvents\", {\n projectId: PROJECT_ID,\n type: \"SubscriptionProductChanged\",\n source: \"GooglePlayRealTimeDeveloperNotifications\",\n platform: \"Android\",\n environment: \"Production\",\n purchaseToken: \"purchase_token_2\",\n linkedPurchaseToken: TOKEN,\n productKind: \"subscription\",\n productId: \"premium_yearly\",\n sourceNotificationId: \"google-conflicting-token\",\n occurredAt: 2_000,\n receivedAt: 2_000,\n });\n\n await expect(\n applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: changedId as never,\n }),\n ).rejects.toThrow(\"different users\");\n expect(db.rows(\"subscriptions\")).toHaveLength(2);\n });\n\n it(\"keeps a newer store-governed replacement row over an older linked event\", async () => {\n const db = new MemDb();\n const oldStartedId = await seedWebhookEvent(db, {\n type: \"SubscriptionStarted\",\n notificationId: \"google-old-token\",\n occurredAt: 1_000,\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: oldStartedId as never,\n });\n const newStartedId = await db.insert(\"webhookEvents\", {\n projectId: PROJECT_ID,\n type: \"SubscriptionStarted\",\n source: \"GooglePlayRealTimeDeveloperNotifications\",\n platform: \"Android\",\n environment: \"Production\",\n purchaseToken: \"purchase_token_2\",\n productKind: \"subscription\",\n productId: \"premium_monthly\",\n subscriptionState: \"Active\",\n sourceNotificationId: \"google-new-token-started\",\n occurredAt: 3_000,\n receivedAt: 3_000,\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: newStartedId as never,\n });\n const olderLinkedId = await db.insert(\"webhookEvents\", {\n projectId: PROJECT_ID,\n type: \"SubscriptionProductChanged\",\n source: \"GooglePlayRealTimeDeveloperNotifications\",\n platform: \"Android\",\n environment: \"Production\",\n purchaseToken: \"purchase_token_2\",\n linkedPurchaseToken: TOKEN,\n productKind: \"subscription\",\n productId: \"premium_yearly\",\n subscriptionState: \"Active\",\n sourceNotificationId: \"google-older-linked-event\",\n occurredAt: 2_000,\n receivedAt: 4_000,\n });\n\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: olderLinkedId as never,\n });\n\n expect(db.rows(\"subscriptions\")).toHaveLength(1);\n expect(db.rows(\"subscriptions\")[0]).toMatchObject({\n purchaseToken: \"purchase_token_2\",\n productId: \"premium_monthly\",\n lastEventId: newStartedId,\n });\n expect(\n db.rows(\"webhookEvents\").find((row) => row._id === olderLinkedId),\n ).toHaveProperty(\"appliedAt\");\n expect(db.rows(\"subscriptionTokenAliases\")).toMatchObject([\n {\n purchaseToken: TOKEN,\n successorPurchaseToken: \"purchase_token_2\",\n },\n ]);\n\n const latePredecessorExpiryId = await db.insert(\"webhookEvents\", {\n projectId: PROJECT_ID,\n type: \"SubscriptionExpired\",\n source: \"GooglePlayRealTimeDeveloperNotifications\",\n platform: \"Android\",\n environment: \"Production\",\n purchaseToken: TOKEN,\n productKind: \"subscription\",\n productId: \"premium_monthly\",\n subscriptionState: \"Expired\",\n sourceNotificationId: \"google-late-predecessor-expired\",\n occurredAt: 4_000,\n receivedAt: 4_000,\n });\n await expect(\n applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: latePredecessorExpiryId as never,\n }),\n ).resolves.toMatchObject({ transition: null, active: true });\n expect(db.rows(\"subscriptions\")).toHaveLength(1);\n expect(\n db\n .rows(\"commerceEvents\")\n .filter((event) => event.sourceEventId === latePredecessorExpiryId),\n ).toEqual([]);\n });\n\n it(\"keeps current-token state when the predecessor expires later\", async () => {\n const db = new MemDb();\n const oldStartedId = await seedWebhookEvent(db, {\n type: \"SubscriptionStarted\",\n notificationId: \"google-predecessor-started\",\n occurredAt: 1_000,\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: oldStartedId as never,\n });\n const replacementStartedId = await db.insert(\"webhookEvents\", {\n projectId: PROJECT_ID,\n type: \"SubscriptionStarted\",\n source: \"GooglePlayRealTimeDeveloperNotifications\",\n platform: \"Android\",\n environment: \"Production\",\n purchaseToken: \"purchase_token_2\",\n productKind: \"subscription\",\n productId: \"premium_monthly\",\n subscriptionState: \"Active\",\n sourceNotificationId: \"google-replacement-started\",\n occurredAt: 2_000,\n receivedAt: 2_000,\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: replacementStartedId as never,\n });\n const predecessorExpiredId = await db.insert(\"webhookEvents\", {\n projectId: PROJECT_ID,\n type: \"SubscriptionExpired\",\n source: \"GooglePlayRealTimeDeveloperNotifications\",\n platform: \"Android\",\n environment: \"Production\",\n purchaseToken: TOKEN,\n productKind: \"subscription\",\n productId: \"premium_monthly\",\n subscriptionState: \"Expired\",\n sourceNotificationId: \"google-predecessor-expired\",\n occurredAt: 3_000,\n receivedAt: 3_000,\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: predecessorExpiredId as never,\n });\n const linkedId = await db.insert(\"webhookEvents\", {\n projectId: PROJECT_ID,\n type: \"SubscriptionProductChanged\",\n source: \"GooglePlayRealTimeDeveloperNotifications\",\n platform: \"Android\",\n environment: \"Production\",\n purchaseToken: \"purchase_token_2\",\n linkedPurchaseToken: TOKEN,\n productKind: \"subscription\",\n productId: \"premium_yearly\",\n subscriptionState: \"Active\",\n sourceNotificationId: \"google-linked-replacement\",\n occurredAt: 4_000,\n receivedAt: 4_000,\n });\n\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: linkedId as never,\n });\n\n expect(db.rows(\"subscriptions\")).toHaveLength(1);\n expect(db.rows(\"subscriptions\")[0]).toMatchObject({\n purchaseToken: \"purchase_token_2\",\n productId: \"premium_yearly\",\n state: \"Active\",\n lastEventId: linkedId,\n });\n });\n\n it(\"moves a multi-item Google replacement token without guessing a product\", async () => {\n const db = new MemDb();\n const startedId = await seedWebhookEvent(db, {\n type: \"SubscriptionStarted\",\n notificationId: \"google-old-token\",\n occurredAt: 1_000,\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: startedId as never,\n });\n const changedId = await db.insert(\"webhookEvents\", {\n projectId: PROJECT_ID,\n type: \"SubscriptionProductChanged\",\n source: \"GooglePlayRealTimeDeveloperNotifications\",\n platform: \"Android\",\n environment: \"Production\",\n purchaseToken: \"purchase_token_2\",\n linkedPurchaseToken: TOKEN,\n productKind: \"subscription\",\n sourceNotificationId: \"google-bundle-change\",\n occurredAt: 2_000,\n receivedAt: 2_000,\n });\n\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: changedId as never,\n });\n\n expect(db.rows(\"subscriptions\")).toHaveLength(1);\n expect(db.rows(\"subscriptions\")[0]).toMatchObject({\n purchaseToken: \"purchase_token_2\",\n productId: \"premium_monthly\",\n lastEventId: changedId,\n });\n expect(db.rows(\"commerceEvents\")).toHaveLength(1);\n });\n});\n\ndescribe(\"buildVerifiedSubscriptionSnapshot\", () => {\n it(\"bootstraps an active subscription from an entitled Google verification\", () => {\n const snapshot = buildVerifiedSubscriptionSnapshot({\n platform: \"Android\",\n productId: \"premium_monthly\",\n purchaseState: HarmonizedPurchaseState.ENTITLED,\n subscriptionState: \"SUBSCRIPTION_STATE_ACTIVE\",\n expiresAt: 2_000_000_000_000,\n });\n\n expect(snapshot).toEqual({\n productId: \"premium_monthly\",\n state: \"Active\",\n expiresAt: 2_000_000_000_000,\n renewsAt: undefined,\n willRenew: true,\n cancellationReason: undefined,\n clearCancellationReason: true,\n currency: undefined,\n priceAmountMicros: undefined,\n });\n });\n\n it(\"treats pending-acknowledgment subscriptions as entitled while still bindable\", () => {\n const snapshot = buildVerifiedSubscriptionSnapshot({\n platform: \"Android\",\n productId: \"premium_monthly\",\n purchaseState: HarmonizedPurchaseState.PENDING_ACKNOWLEDGMENT,\n subscriptionState: \"SUBSCRIPTION_STATE_ACTIVE\",\n });\n\n expect(snapshot).toMatchObject({\n productId: \"premium_monthly\",\n state: \"Active\",\n willRenew: true,\n clearCancellationReason: true,\n });\n });\n\n it(\"stamps Refunded only when Apple says the revocation was a refund\", () => {\n // revocationReason 1 is Apple's app-issue refund; 0 also covers Family\n // Sharing loss, where asserting money moved back would be false.\n const refunded = buildVerifiedSubscriptionSnapshot({\n platform: \"IOS\",\n productId: \"premium_monthly\",\n purchaseState: HarmonizedPurchaseState.CANCELED,\n revocationReasonIOS: 1,\n });\n expect(refunded).toMatchObject({\n state: \"Revoked\",\n willRenew: false,\n cancellationReason: \"Refunded\",\n });\n\n const familySharingLoss = buildVerifiedSubscriptionSnapshot({\n platform: \"IOS\",\n productId: \"premium_monthly\",\n purchaseState: HarmonizedPurchaseState.CANCELED,\n revocationReasonIOS: 0,\n });\n expect(familySharingLoss).toMatchObject({\n state: \"Revoked\",\n willRenew: false,\n });\n expect(familySharingLoss?.cancellationReason).toBeUndefined();\n\n const unknown = buildVerifiedSubscriptionSnapshot({\n platform: \"IOS\",\n productId: \"premium_monthly\",\n purchaseState: HarmonizedPurchaseState.CANCELED,\n });\n expect(unknown?.cancellationReason).toBeUndefined();\n });\n\n it(\"preserves access for canceled Google subscriptions until expiry\", () => {\n const snapshot = buildVerifiedSubscriptionSnapshot({\n platform: \"Android\",\n productId: \"premium_monthly\",\n purchaseState: HarmonizedPurchaseState.CANCELED,\n subscriptionState: \"SUBSCRIPTION_STATE_CANCELED\",\n expiresAt: 2_000_000_000_000,\n });\n\n expect(snapshot).toMatchObject({\n productId: \"premium_monthly\",\n state: \"Active\",\n willRenew: false,\n expiresAt: 2_000_000_000_000,\n });\n expect(snapshot?.cancellationReason).toBeUndefined();\n });\n\n it(\"maps on-hold Google subscriptions to billing retry\", () => {\n const snapshot = buildVerifiedSubscriptionSnapshot({\n platform: \"Android\",\n productId: \"premium_monthly\",\n purchaseState: HarmonizedPurchaseState.PENDING,\n subscriptionState: \"SUBSCRIPTION_STATE_ON_HOLD\",\n });\n\n expect(snapshot).toMatchObject({\n productId: \"premium_monthly\",\n state: \"InBillingRetry\",\n cancellationReason: \"BillingError\",\n });\n });\n\n it(\"does not infer renewal status when Google omits subscriptionState\", () => {\n const snapshot = buildVerifiedSubscriptionSnapshot({\n platform: \"Android\",\n productId: \"premium_monthly\",\n purchaseState: HarmonizedPurchaseState.PENDING_ACKNOWLEDGMENT,\n });\n\n expect(snapshot).toMatchObject({\n productId: \"premium_monthly\",\n state: \"Active\",\n });\n expect(snapshot?.willRenew).toBeUndefined();\n expect(snapshot?.cancellationReason).toBeUndefined();\n expect(snapshot?.clearCancellationReason).toBeUndefined();\n });\n\n it(\"does not create a subscription row for expected-product mismatches\", () => {\n const snapshot = buildVerifiedSubscriptionSnapshot({\n platform: \"Android\",\n productId: \"premium_monthly\",\n purchaseState: HarmonizedPurchaseState.INAUTHENTIC,\n subscriptionState: \"SUBSCRIPTION_STATE_ACTIVE\",\n });\n\n expect(snapshot).toBeNull();\n });\n\n it(\"does not create a subscription row when Google omits the product id\", () => {\n const snapshot = buildVerifiedSubscriptionSnapshot({\n platform: \"Android\",\n productId: \"unknown\",\n purchaseState: HarmonizedPurchaseState.ENTITLED,\n subscriptionState: \"SUBSCRIPTION_STATE_ACTIVE\",\n });\n\n expect(snapshot).toBeNull();\n });\n\n it(\"bootstraps an Apple subscription without guessing auto-renew status\", () => {\n const snapshot = buildVerifiedSubscriptionSnapshot({\n platform: \"IOS\",\n productId: \"com.example.premium\",\n purchaseState: HarmonizedPurchaseState.ENTITLED,\n expiresAt: 2_000_000_000_000,\n currency: \"USD\",\n priceAmountMicros: 9_990_000,\n });\n\n expect(snapshot).toEqual({\n productId: \"com.example.premium\",\n state: \"Active\",\n expiresAt: 2_000_000_000_000,\n renewsAt: undefined,\n cancellationReason: undefined,\n clearCancellationReason: true,\n currency: \"USD\",\n priceAmountMicros: 9_990_000,\n });\n });\n});\n\ndescribe(\"mergeVerifiedSubscriptionSnapshot\", () => {\n it(\"preserves existing timing and price fields when verify omits them\", () => {\n const snapshot = mergeVerifiedSubscriptionSnapshot(\n {\n expiresAt: 2_000_000_000_000,\n renewsAt: 2_000_000_000_000,\n willRenew: true,\n cancellationReason: undefined,\n currency: \"USD\",\n priceAmountMicros: 9_990_000,\n },\n {\n productId: \"premium_monthly\",\n state: \"Active\",\n willRenew: true,\n },\n );\n\n expect(snapshot).toEqual({\n productId: \"premium_monthly\",\n state: \"Active\",\n expiresAt: 2_000_000_000_000,\n renewsAt: 2_000_000_000_000,\n willRenew: true,\n cancellationReason: undefined,\n currency: \"USD\",\n priceAmountMicros: 9_990_000,\n });\n });\n\n it(\"clears stale cancellation reason when verified snapshots request it\", () => {\n const existing = {\n expiresAt: undefined,\n renewsAt: undefined,\n willRenew: false,\n cancellationReason: \"UserCanceled\" as const,\n currency: undefined,\n priceAmountMicros: undefined,\n };\n const appleSnapshot = buildVerifiedSubscriptionSnapshot({\n platform: \"IOS\",\n productId: \"premium_monthly\",\n purchaseState: HarmonizedPurchaseState.ENTITLED,\n });\n const graceSnapshot = buildVerifiedSubscriptionSnapshot({\n platform: \"Android\",\n productId: \"premium_monthly\",\n purchaseState: HarmonizedPurchaseState.ENTITLED,\n subscriptionState: \"SUBSCRIPTION_STATE_IN_GRACE_PERIOD\",\n });\n\n expect(appleSnapshot?.clearCancellationReason).toBe(true);\n expect(graceSnapshot?.clearCancellationReason).toBe(true);\n\n const appleMerged = mergeVerifiedSubscriptionSnapshot(\n existing,\n appleSnapshot!,\n );\n const graceMerged = mergeVerifiedSubscriptionSnapshot(\n existing,\n graceSnapshot!,\n );\n\n expect(appleMerged.cancellationReason).toBeUndefined();\n expect(graceMerged.cancellationReason).toBeUndefined();\n expect(graceMerged.willRenew).toBe(true);\n });\n\n it(\"preserves cancellation reason when verify cannot prove auto-renew is enabled\", () => {\n const snapshot = mergeVerifiedSubscriptionSnapshot(\n {\n expiresAt: undefined,\n renewsAt: undefined,\n willRenew: false,\n cancellationReason: \"UserCanceled\",\n currency: undefined,\n priceAmountMicros: undefined,\n },\n {\n productId: \"premium_monthly\",\n state: \"Active\",\n },\n );\n\n expect(snapshot.cancellationReason).toBe(\"UserCanceled\");\n expect(snapshot.willRenew).toBe(false);\n });\n});\n\ndescribe(\"recordVerifiedSubscriptionHandler\", () => {\n beforeEach(() => {\n vi.setSystemTime(new Date(\"2026-01-01T00:00:00.000Z\"));\n });\n\n afterEach(() => {\n vi.useRealTimers();\n });\n\n it(\"rejects a receipt-verification write once project deletion starts\", async () => {\n const db = new MemDb();\n await db.patch(PROJECT_ID, { pendingDeletion: true });\n\n await expect(\n recordVerifiedSubscriptionHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n platform: \"Android\",\n purchaseToken: TOKEN,\n productId: \"premium_monthly\",\n purchaseState: HarmonizedPurchaseState.ENTITLED,\n }),\n ).rejects.toThrow(\"Project not found\");\n expect(db.rows(\"subscriptions\")).toEqual([]);\n expect(db.rows(\"subscriptionStats\")).toEqual([]);\n });\n\n it(\"creates a bindable subscription row from Google receipt verification\", async () => {\n const db = new MemDb();\n db.seedProduct({\n projectId: PROJECT_ID,\n platform: \"Android\",\n productId: \"premium_monthly\",\n billingPeriod: \"P1M\",\n });\n\n const subscriptionId = await recordVerifiedSubscriptionHandler(\n makeCtx(db),\n {\n projectId: PROJECT_ID as never,\n platform: \"Android\",\n purchaseToken: TOKEN,\n productId: \"premium_monthly\",\n purchaseState: HarmonizedPurchaseState.ENTITLED,\n subscriptionState: \"SUBSCRIPTION_STATE_ACTIVE\",\n expiresAt: 1_769_904_000_000,\n renewsAt: 1_769_904_000_000,\n currency: \"USD\",\n priceAmountMicros: 9_990_000,\n },\n );\n\n expect(subscriptionId).toBe(\"subscriptions_2\");\n expect(db.rows(\"subscriptions\")).toMatchObject([\n {\n _id: \"subscriptions_2\",\n projectId: PROJECT_ID,\n purchaseToken: TOKEN,\n productId: \"premium_monthly\",\n platform: \"Android\",\n state: \"Active\",\n willRenew: true,\n currency: \"USD\",\n priceAmountMicros: 9_990_000,\n },\n ]);\n expect(db.rows(\"subscriptionStats\")).toMatchObject([\n {\n projectId: PROJECT_ID,\n currency: \"USD\",\n activeSubs: 1,\n inGracePeriod: 0,\n inBillingRetry: 0,\n mrrMicros: 9_990_000,\n },\n ]);\n });\n\n it(\"keeps a verified Google prepaid subscription non-renewing\", async () => {\n const db = new MemDb();\n\n await recordVerifiedSubscriptionHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n platform: \"Android\",\n purchaseToken: \"prepaid-token\",\n productId: \"prepaid_monthly\",\n purchaseState: HarmonizedPurchaseState.ENTITLED,\n subscriptionState: \"SUBSCRIPTION_STATE_ACTIVE\",\n expiresAt: 1_769_904_000_000,\n willRenew: false,\n });\n\n expect(db.rows(\"subscriptions\")).toMatchObject([\n {\n purchaseToken: \"prepaid-token\",\n state: \"Active\",\n expiresAt: 1_769_904_000_000,\n willRenew: false,\n renewsAt: undefined,\n },\n ]);\n });\n\n it(\"clears a prior renewal date when verification becomes non-renewing\", async () => {\n const db = new MemDb();\n const input = {\n projectId: PROJECT_ID as never,\n platform: \"Android\" as const,\n purchaseToken: \"prepaid-transition-token\",\n productId: \"premium_monthly\",\n purchaseState: HarmonizedPurchaseState.ENTITLED,\n subscriptionState: \"SUBSCRIPTION_STATE_ACTIVE\",\n expiresAt: 1_769_904_000_000,\n };\n\n await recordVerifiedSubscriptionHandler(makeCtx(db), {\n ...input,\n renewsAt: 1_769_904_000_000,\n willRenew: true,\n });\n await recordVerifiedSubscriptionHandler(makeCtx(db), {\n ...input,\n willRenew: false,\n });\n\n expect(db.rows(\"subscriptions\")).toMatchObject([\n {\n purchaseToken: \"prepaid-transition-token\",\n state: \"Active\",\n willRenew: false,\n renewsAt: undefined,\n },\n ]);\n expect(db.rows(\"subscriptions\")).toHaveLength(1);\n });\n\n it(\"creates an active bindable row for pending-acknowledgment Google subscriptions\", async () => {\n const db = new MemDb();\n db.seedProduct({\n projectId: PROJECT_ID,\n platform: \"Android\",\n productId: \"premium_monthly\",\n billingPeriod: \"P1M\",\n });\n\n await recordVerifiedSubscriptionHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n platform: \"Android\",\n purchaseToken: TOKEN,\n productId: \"premium_monthly\",\n purchaseState: HarmonizedPurchaseState.PENDING_ACKNOWLEDGMENT,\n subscriptionState: \"SUBSCRIPTION_STATE_ACTIVE\",\n expiresAt: 1_769_904_000_000,\n currency: \"USD\",\n priceAmountMicros: 9_990_000,\n });\n\n expect(db.rows(\"subscriptions\")).toMatchObject([\n {\n purchaseToken: TOKEN,\n productId: \"premium_monthly\",\n platform: \"Android\",\n state: \"Active\",\n willRenew: true,\n },\n ]);\n expect(db.rows(\"subscriptionStats\")).toMatchObject([\n {\n activeSubs: 1,\n mrrMicros: 9_990_000,\n },\n ]);\n });\n\n it(\"keeps repeated verification idempotent for subscription stats\", async () => {\n const db = new MemDb();\n db.seedProduct({\n projectId: PROJECT_ID,\n platform: \"Android\",\n productId: \"premium_monthly\",\n billingPeriod: \"P1M\",\n });\n const args = {\n projectId: PROJECT_ID as never,\n platform: \"Android\" as const,\n purchaseToken: TOKEN,\n productId: \"premium_monthly\",\n purchaseState: HarmonizedPurchaseState.ENTITLED,\n subscriptionState: \"SUBSCRIPTION_STATE_ACTIVE\",\n expiresAt: 1_769_904_000_000,\n currency: \"USD\",\n priceAmountMicros: 9_990_000,\n };\n\n await recordVerifiedSubscriptionHandler(makeCtx(db), args);\n await recordVerifiedSubscriptionHandler(makeCtx(db), args);\n\n expect(db.rows(\"subscriptions\")).toHaveLength(1);\n expect(db.rows(\"subscriptionStats\")).toMatchObject([\n {\n activeSubs: 1,\n mrrMicros: 9_990_000,\n },\n ]);\n });\n\n it(\"does not let an older verification overwrite webhook-governed state\", async () => {\n const db = new MemDb();\n const startedId = await seedWebhookEvent(db, {\n type: \"SubscriptionStarted\",\n notificationId: \"apple-monthly\",\n occurredAt: 1_000,\n platform: \"IOS\",\n productId: \"premium_monthly\",\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: startedId as never,\n });\n const renewedId = await seedWebhookEvent(db, {\n type: \"SubscriptionRenewed\",\n notificationId: \"apple-yearly\",\n occurredAt: 2_000,\n platform: \"IOS\",\n productId: \"premium_yearly\",\n });\n await db.patch(renewedId, { expiresAt: 1_900_000_000_000 });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: renewedId as never,\n });\n\n await recordVerifiedSubscriptionHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n platform: \"IOS\",\n purchaseToken: TOKEN,\n productId: \"premium_monthly\",\n purchaseState: HarmonizedPurchaseState.ENTITLED,\n expiresAt: 1_700_000_000_000,\n });\n expect(db.rows(\"subscriptions\")[0]).toMatchObject({\n productId: \"premium_yearly\",\n expiresAt: 1_900_000_000_000,\n lastEventSourceNotificationId: \"apple-yearly\",\n });\n });\n\n it(\"creates a bindable Apple subscription row from receipt verification\", async () => {\n const db = new MemDb();\n db.seedProduct({\n projectId: PROJECT_ID,\n platform: \"IOS\",\n productId: \"com.example.premium\",\n billingPeriod: \"P1M\",\n });\n\n const subscriptionId = await recordVerifiedSubscriptionHandler(\n makeCtx(db),\n {\n projectId: PROJECT_ID as never,\n platform: \"IOS\",\n purchaseToken: \"original_transaction_1\",\n productId: \"com.example.premium\",\n purchaseState: HarmonizedPurchaseState.ENTITLED,\n expiresAt: 1_769_904_000_000,\n currency: \"USD\",\n priceAmountMicros: 9_990_000,\n },\n );\n\n expect(subscriptionId).toBe(\"subscriptions_2\");\n expect(db.rows(\"subscriptions\")).toMatchObject([\n {\n _id: \"subscriptions_2\",\n projectId: PROJECT_ID,\n purchaseToken: \"original_transaction_1\",\n productId: \"com.example.premium\",\n platform: \"IOS\",\n state: \"Active\",\n willRenew: undefined,\n },\n ]);\n expect(db.rows(\"subscriptionStats\")).toMatchObject([\n {\n projectId: PROJECT_ID,\n currency: \"USD\",\n activeSubs: 1,\n mrrMicros: 9_990_000,\n },\n ]);\n });\n\n it(\"supports the verify -> bind flow for SDK clients\", async () => {\n const db = new MemDb();\n db.seedProduct({\n projectId: PROJECT_ID,\n platform: \"Android\",\n productId: \"premium_monthly\",\n billingPeriod: \"P1M\",\n });\n\n const subscriptionId = await recordVerifiedSubscriptionHandler(\n makeCtx(db),\n {\n projectId: PROJECT_ID as never,\n platform: \"Android\",\n purchaseToken: TOKEN,\n productId: \"premium_monthly\",\n purchaseState: HarmonizedPurchaseState.ENTITLED,\n subscriptionState: \"SUBSCRIPTION_STATE_ACTIVE\",\n expiresAt: 1_769_904_000_000,\n renewsAt: 1_769_904_000_000,\n currency: \"USD\",\n priceAmountMicros: 9_990_000,\n },\n );\n\n const boundId = await bindSubscriptionToUserHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n purchaseToken: TOKEN,\n userId: \"user-1\",\n });\n\n expect(boundId).toBe(subscriptionId);\n expect(db.rows(\"subscriptions\")).toMatchObject([\n {\n _id: subscriptionId,\n projectId: PROJECT_ID,\n purchaseToken: TOKEN,\n productId: \"premium_monthly\",\n platform: \"Android\",\n state: \"Active\",\n userId: \"user-1\",\n willRenew: true,\n currency: \"USD\",\n priceAmountMicros: 9_990_000,\n },\n ]);\n\n const eventId = await seedWebhookEvent(db, {\n type: \"SubscriptionStarted\",\n notificationId: \"message-after-bind\",\n occurredAt: 2_000,\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: eventId as never,\n });\n expect(db.rows(\"commerceEvents\")).toMatchObject([\n { eventType: \"subscription.started\", userId: \"user-1\" },\n { eventType: \"entitlement.granted\", userId: \"user-1\" },\n ]);\n });\n\n it(\"rejects unbounded user ids at the Convex storage boundary\", async () => {\n const db = new MemDb();\n\n for (const userId of [\" \", \"u\".repeat(257)]) {\n await expect(\n bindSubscriptionToUserHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n purchaseToken: TOKEN,\n userId,\n }),\n ).rejects.toThrow(\"userId must be nonblank and at most 256 characters\");\n }\n expect(db.rows(\"subscriptions\")).toHaveLength(0);\n expect(db.rows(\"commerceEvents\")).toHaveLength(0);\n });\n\n it(\"emits a correlated grant when the webhook arrives before binding\", async () => {\n const db = new MemDb();\n db.seedProduct({\n projectId: PROJECT_ID,\n platform: \"Android\",\n productId: \"premium_monthly\",\n billingPeriod: \"P1M\",\n });\n const eventId = await seedWebhookEvent(db, {\n type: \"SubscriptionStarted\",\n notificationId: \"message-before-bind\",\n occurredAt: 2_000,\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: eventId as never,\n });\n\n await bindSubscriptionToUserHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n purchaseToken: TOKEN,\n userId: \"user-1\",\n });\n\n expect(db.rows(\"commerceEvents\").at(-1)).toMatchObject({\n eventType: \"entitlement.granted\",\n userId: \"user-1\",\n });\n });\n\n it(\"does not replay an unbound grant that expired before binding\", async () => {\n const db = new MemDb();\n db.seedProduct({\n projectId: PROJECT_ID,\n platform: \"Android\",\n productId: \"premium_monthly\",\n billingPeriod: \"P1M\",\n });\n const started = await seedWebhookEvent(db, {\n type: \"SubscriptionStarted\",\n notificationId: \"unbound-started\",\n occurredAt: 1_000,\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: started as never,\n });\n const expired = await seedWebhookEvent(db, {\n type: \"SubscriptionExpired\",\n notificationId: \"unbound-expired\",\n occurredAt: 2_000,\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: expired as never,\n });\n\n const beforeBind = db.rows(\"commerceEvents\").map((row) => row.eventType);\n expect(beforeBind).toEqual([\n \"subscription.started\",\n \"subscription.expired\",\n ]);\n\n await bindSubscriptionToUserHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n purchaseToken: TOKEN,\n userId: \"user-after-expiry\",\n });\n\n expect(db.rows(\"commerceEvents\").map((row) => row.eventType)).toEqual(\n beforeBind,\n );\n expect(db.rows(\"subscriptions\")[0]).toMatchObject({\n state: \"Expired\",\n userId: \"user-after-expiry\",\n });\n });\n\n it(\"uses the compact source snapshot after the webhook row is pruned\", async () => {\n const db = new MemDb();\n const eventId = await seedWebhookEvent(db, {\n type: \"SubscriptionStarted\",\n notificationId: \"old-webhook\",\n occurredAt: 2_000,\n });\n await applySubscriptionEventHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n eventId: eventId as never,\n });\n await db.delete(eventId);\n\n await bindSubscriptionToUserHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n purchaseToken: TOKEN,\n userId: \"user-after-retention\",\n });\n expect(db.rows(\"commerceEvents\").at(-1)).toMatchObject({\n eventType: \"entitlement.granted\",\n productId: \"premium_monthly\",\n userId: \"user-after-retention\",\n sourceStoreNotificationId: \"old-webhook\",\n });\n });\n});\n\ndescribe(\"user binding authorization\", () => {\n const seedBound = async (db: MemDb, userId?: string) => {\n db.seedProduct({\n projectId: PROJECT_ID,\n platform: \"Android\",\n productId: \"premium_monthly\",\n billingPeriod: \"P1M\",\n });\n await db.insert(\"subscriptions\", {\n projectId: PROJECT_ID,\n platform: \"Android\",\n purchaseToken: TOKEN,\n productId: \"premium_monthly\",\n state: \"Active\",\n willRenew: true,\n updatedAt: 0,\n ...(userId ? { userId } : {}),\n });\n };\n\n // Token possession is not proof of ownership, and a distinct rejection would\n // tell any holder of the app-embedded publishable key that a token exists\n // and belongs to someone.\n it(\"reports an already-bound subscription the same as an unknown token\", async () => {\n const owned = new MemDb();\n await seedBound(owned, \"victim\");\n const unknown = new MemDb();\n await seedBound(unknown, \"victim\");\n await unknown.delete(unknown.rows(\"subscriptions\")[0]._id);\n\n const attacker = {\n projectId: PROJECT_ID as never,\n purchaseToken: TOKEN,\n userId: \"attacker\",\n };\n await expect(\n bindSubscriptionToUserHandler(makeCtx(owned) as never, attacker),\n ).resolves.toBeNull();\n await expect(\n bindSubscriptionToUserHandler(makeCtx(unknown) as never, attacker),\n ).resolves.toBeNull();\n expect(owned.rows(\"subscriptions\")[0].userId).toBe(\"victim\");\n });\n\n it.each([undefined, \"real-owner\"])(\n \"refuses operator rebind of a tombstoned record (owner: %s)\",\n async (userId) => {\n const db = new MemDb();\n await seedBound(db, userId);\n await db.patch(db.rows(\"subscriptions\")[0]._id, {\n accountErased: true,\n });\n const before = structuredClone(db.rows(\"subscriptions\"));\n expect(\n await rebindSubscriptionToUserHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n purchaseToken: TOKEN,\n userId: \"real-owner\",\n }),\n ).toBeNull();\n expect(db.rows(\"subscriptions\")).toEqual(before);\n expect(db.rows(\"commerceEvents\")).toEqual([]);\n },\n );\n\n it.each([\"queued\", \"running\", \"completed\"])(\n \"refuses rebind into or out of an account with a %s erasure job\",\n async (status) => {\n for (const erasedUser of [\"source-user\", \"target-user\"]) {\n const db = new MemDb();\n await seedBound(db, \"source-user\");\n const hashKey = \"erasure-test-key\";\n await db.patch(PROJECT_ID, { userErasureHashKey: hashKey });\n await db.insert(\"subscriptionUserErasureJobs\", {\n projectId: PROJECT_ID,\n userIdHash: await hmacSha256Hex(hashKey, erasedUser),\n status,\n });\n const before = structuredClone(db.rows(\"subscriptions\"));\n expect(\n await rebindSubscriptionToUserHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n purchaseToken: TOKEN,\n userId: \"target-user\",\n }),\n ).toBeNull();\n expect(db.rows(\"subscriptions\")).toEqual(before);\n expect(db.rows(\"commerceEvents\")).toEqual([]);\n }\n },\n );\n\n // A consumer gating access on commerce events must be told the purchase\n // moved, or the wrong user keeps access and the real one never gets it.\n it(\"revokes the old user and grants the new one on a rebind\", async () => {\n const db = new MemDb();\n db.seedProduct({\n projectId: PROJECT_ID,\n platform: \"Android\",\n productId: \"premium_monthly\",\n billingPeriod: \"P1M\",\n });\n const priorId = await seedWebhookEvent(db, {\n type: \"SubscriptionStarted\",\n notificationId: \"rebind-source\",\n occurredAt: 1_000,\n });\n await db.insert(\"subscriptions\", {\n projectId: PROJECT_ID,\n platform: \"Android\",\n purchaseToken: TOKEN,\n productId: \"premium_monthly\",\n state: \"Active\",\n willRenew: true,\n userId: \"wrong-user\",\n lastEventId: priorId,\n lastEventOccurredAt: 1_000,\n lastEventSourceNotificationId: \"rebind-source\",\n lastEventSource: {\n type: \"SubscriptionStarted\",\n environment: \"Production\",\n productId: \"premium_monthly\",\n },\n expiresAt: Date.now() + 86_400_000,\n updatedAt: 0,\n });\n\n await rebindSubscriptionToUserHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n purchaseToken: TOKEN,\n userId: \"real-owner\",\n });\n\n const emitted = db\n .rows(\"commerceEvents\")\n .map((r) => [r.eventType, r.userId]);\n expect(emitted).toEqual([\n [\"entitlement.revoked\", \"wrong-user\"],\n [\"entitlement.granted\", \"real-owner\"],\n ]);\n });\n\n // A rebind that cannot attribute events leaves the developer backend\n // believing the old user still owns the purchase. Say so rather than\n // reporting plain success.\n it(\"reports a rebind it could not notify about\", async () => {\n const db = new MemDb();\n db.seedProduct({\n projectId: PROJECT_ID,\n platform: \"Android\",\n productId: \"premium_monthly\",\n billingPeriod: \"P1M\",\n });\n await db.insert(\"subscriptions\", {\n projectId: PROJECT_ID,\n platform: \"Android\",\n purchaseToken: TOKEN,\n productId: \"premium_monthly\",\n state: \"Active\",\n willRenew: true,\n userId: \"wrong-user\",\n expiresAt: Date.now() + 86_400_000,\n updatedAt: 0,\n });\n\n const outcome = await rebindSubscriptionToUserHandler(makeCtx(db), {\n projectId: PROJECT_ID as never,\n purchaseToken: TOKEN,\n userId: \"real-owner\",\n });\n expect(outcome?.notified).toBe(false);\n expect(db.rows(\"subscriptions\")[0].userId).toBe(\"real-owner\");\n expect(db.rows(\"commerceEvents\")).toEqual([]);\n });\n\n it(\"lets an operator move a wrong binding\", async () => {\n const db = new MemDb();\n await seedBound(db, \"wrong-user\");\n await expect(\n rebindSubscriptionToUserHandler(makeCtx(db) as never, {\n projectId: PROJECT_ID as never,\n purchaseToken: TOKEN,\n userId: \"real-owner\",\n }),\n ).resolves.not.toBeNull();\n expect(db.rows(\"subscriptions\")[0].userId).toBe(\"real-owner\");\n });\n});\n", + "kit/convex/subscriptions/query.ts": "import { query, type QueryCtx } from \"../_generated/server\";\nimport { ConvexError, v, type Infer } from \"convex/values\";\nimport type { Doc, Id } from \"../_generated/dataModel\";\n\nimport {\n resolveProjectByApiKeyFromDb,\n resolveProjectByIdForCurrentUserFromDb,\n} from \"../projects/helpers\";\nimport { monthlyMicrosForSub } from \"./monthlyMicros\";\nimport { selectMostRecentlyUpdatedSubscription } from \"./selectLatest\";\nimport {\n DEFAULT_REPORTING_CURRENCY,\n normalizeReportingCurrencyOrDefault,\n} from \"../utils/currency\";\nimport { subscriptionStateValidator } from \"../utils/validation\";\n\nconst subscriptionFields = {\n id: v.id(\"subscriptions\"),\n productId: v.string(),\n platform: v.union(v.literal(\"IOS\"), v.literal(\"Android\")),\n state: subscriptionStateValidator,\n expiresAt: v.optional(v.number()),\n renewsAt: v.optional(v.number()),\n willRenew: v.optional(v.boolean()),\n cancellationReason: v.optional(v.string()),\n currency: v.optional(v.string()),\n priceAmountMicros: v.optional(v.number()),\n startedAt: v.number(),\n updatedAt: v.number(),\n // SECURITY DEBT: on Android this is the credential a server accepts as proof\n // of purchase, and these rows reach routes that answer to a publishable key\n // shipped inside the app. It cannot be removed additively: MAUI declares it\n // `required`, and its tolerant deserializer turns a missing field into a null\n // subscription and silently drops entitlement rows — every installed MAUI app\n // would lose entitlement. Removal needs an explicit version transition.\n purchaseToken: v.string(),\n originalTransactionId: v.optional(v.string()),\n userId: v.optional(v.string()),\n};\nconst subscriptionShape = v.object(subscriptionFields);\nconst subscriptionV2Shape = v.object({\n id: v.id(\"subscriptions\"),\n productId: v.string(),\n platform: v.union(v.literal(\"IOS\"), v.literal(\"Android\")),\n state: subscriptionStateValidator,\n expiresAt: v.optional(v.number()),\n renewsAt: v.optional(v.number()),\n willRenew: v.optional(v.boolean()),\n cancellationReason: v.optional(v.string()),\n currency: v.optional(v.string()),\n priceAmountMicros: v.optional(v.number()),\n startedAt: v.number(),\n updatedAt: v.number(),\n userId: v.optional(v.string()),\n});\nconst subscriptionEvaluationRowShape = v.object({\n ...subscriptionFields,\n createdAt: v.number(),\n});\ntype SubscriptionRow = Infer;\ntype SubscriptionV2Row = Infer;\ntype SubscriptionEvaluationRow = Infer;\nexport const MAX_USER_SUBSCRIPTION_ROWS = 200;\n\n/**\n * SPEC.md 2.3 entitlement gate as a pure predicate: only Active and\n * InGracePeriod grant access, an omitted expiry means none is known, and the\n * boundary is exclusive — expiresAt == now is NOT entitled. Exported so the\n * conformance adapter certifies the same predicate every read uses.\n */\nexport function isEntitledAt(\n state: string,\n expiresAt: number | null | undefined,\n now: number,\n): boolean {\n if (state !== \"Active\" && state !== \"InGracePeriod\") return false;\n if (expiresAt != null && expiresAt <= now) return false;\n return true;\n}\n\nfunction isActive(sub: Doc<\"subscriptions\">, now: number): boolean {\n return isEntitledAt(sub.state, sub.expiresAt, now);\n}\n\nfunction isEntitledState(sub: Doc<\"subscriptions\">): boolean {\n return sub.state === \"Active\" || sub.state === \"InGracePeriod\";\n}\n\nexport function assertUserSubscriptionRowLimit(\n rows: Array>,\n): void {\n if (rows.length <= MAX_USER_SUBSCRIPTION_ROWS) return;\n throw new ConvexError({\n code: \"ENTITLEMENT_SNAPSHOT_TOO_LARGE\",\n message:\n \"This user has more than 200 subscription rows. Contact IAPKit support before retrying.\",\n });\n}\n\nasync function userSubscriptionRows(\n ctx: QueryCtx,\n projectId: Id<\"projects\">,\n userId: string,\n): Promise>> {\n const rows = await ctx.db\n .query(\"subscriptions\")\n .withIndex(\"by_project_and_user_and_updated\", (q) =>\n q.eq(\"projectId\", projectId).eq(\"userId\", userId),\n )\n .order(\"desc\")\n .take(MAX_USER_SUBSCRIPTION_ROWS + 1);\n assertUserSubscriptionRowLimit(rows);\n return rows;\n}\n\nexport function shapeSubscriptionEvaluationSnapshot(\n rows: Array>,\n): {\n candidates: SubscriptionEvaluationRow[];\n fallback: SubscriptionEvaluationRow | null;\n} {\n const fallback = selectMostRecentlyUpdatedSubscription(rows);\n return {\n candidates: rows\n .filter(isEntitledState)\n .map(shapeSubscriptionEvaluationRow),\n fallback: fallback ? shapeSubscriptionEvaluationRow(fallback) : null,\n };\n}\n\nfunction shapeSubscriptionEvaluationRow(\n sub: Doc<\"subscriptions\">,\n): SubscriptionEvaluationRow {\n return {\n ...shapeSubscriptionRow(sub),\n createdAt: sub._creationTime,\n };\n}\n\nexport function shapeSubscriptionRow(\n sub: Doc<\"subscriptions\">,\n): SubscriptionRow {\n const row: SubscriptionRow = {\n id: sub._id,\n productId: sub.productId,\n platform: sub.platform,\n state: sub.state,\n expiresAt: sub.expiresAt,\n renewsAt: sub.renewsAt,\n willRenew: sub.willRenew,\n cancellationReason: sub.cancellationReason,\n currency: sub.currency,\n priceAmountMicros: sub.priceAmountMicros,\n startedAt: sub.startedAt,\n updatedAt: sub.updatedAt,\n purchaseToken: sub.purchaseToken,\n userId: sub.userId,\n };\n\n if (sub.platform === \"IOS\") {\n return {\n ...row,\n originalTransactionId: sub.purchaseToken,\n };\n }\n\n return row;\n}\n\nexport function shapeSubscriptionV2Row(\n sub: Doc<\"subscriptions\">,\n): SubscriptionV2Row {\n return {\n id: sub._id,\n productId: sub.productId,\n platform: sub.platform,\n state: sub.state,\n expiresAt: sub.expiresAt,\n renewsAt: sub.renewsAt,\n willRenew: sub.willRenew,\n cancellationReason: sub.cancellationReason,\n currency: sub.currency,\n priceAmountMicros: sub.priceAmountMicros,\n startedAt: sub.startedAt,\n updatedAt: sub.updatedAt,\n userId: sub.userId,\n };\n}\n\nasync function projectByApiKey(\n ctx: QueryCtx,\n apiKey: string | undefined,\n requiredAccess: \"client\" | \"admin\" = \"client\",\n): Promise | null> {\n if (!apiKey) return null;\n const resolved = await resolveProjectByApiKeyFromDb(\n ctx,\n apiKey,\n requiredAccess,\n );\n return resolved?.project ?? null;\n}\n\nasync function requireAdminProjectByApiKey(\n ctx: QueryCtx,\n apiKey: string,\n): Promise> {\n const project = await projectByApiKey(ctx, apiKey, \"admin\");\n if (!project) {\n throw new ConvexError({\n code: \"INVALID_API_KEY\",\n message: \"API key is invalid or inactive\",\n });\n }\n return project;\n}\n\nasync function projectByIdForCurrentUser(\n ctx: QueryCtx,\n projectId: Id<\"projects\"> | undefined,\n): Promise | null> {\n if (!projectId) return null;\n const resolved = await resolveProjectByIdForCurrentUserFromDb(ctx, projectId);\n return resolved?.project ?? null;\n}\n\nasync function projectForReadArgs(\n ctx: QueryCtx,\n args: {\n apiKey?: string;\n projectId?: Id<\"projects\">;\n },\n apiKeyAccess: \"client\" | \"admin\" = \"client\",\n): Promise | null> {\n if (args.projectId) {\n return projectByIdForCurrentUser(ctx, args.projectId);\n }\n\n if (args.apiKey !== undefined) {\n return projectByApiKey(ctx, args.apiKey, apiKeyAccess);\n }\n\n throw new Error(\"apiKey or projectId is required.\");\n}\n\nexport interface MrrCurrencyEntry {\n currency: string;\n mrrMicros: number;\n}\n\n/**\n * Selects the headline MRR entry for a project's reporting currency.\n *\n * `reportingCurrency` is normalized via `normalizeReportingCurrencyOrDefault`,\n * so unknown or invalid input falls back to `DEFAULT_REPORTING_CURRENCY`.\n * If no entry matches the normalized currency, returned `mrrMicros` is `0`.\n * Returned `excludedMrrByCurrency` contains every non-reporting-currency entry.\n *\n * @param entries Per-currency MRR rows already summed for the project.\n * @param reportingCurrency Project-configured reporting currency, raw or normalized.\n * @returns The normalized `currency`, selected `mrrMicros`, and excluded rows.\n */\nexport function selectReportingMrr(\n entries: MrrCurrencyEntry[],\n reportingCurrency: string | null | undefined,\n): {\n currency: string;\n mrrMicros: number;\n excludedMrrByCurrency: MrrCurrencyEntry[];\n} {\n const normalizedReportingCurrency =\n normalizeReportingCurrencyOrDefault(reportingCurrency);\n const reportingEntry = entries.find(\n (entry) => entry.currency === normalizedReportingCurrency,\n );\n\n return {\n currency: normalizedReportingCurrency,\n mrrMicros: reportingEntry?.mrrMicros ?? 0,\n excludedMrrByCurrency: entries.filter(\n (entry) => entry.currency !== normalizedReportingCurrency,\n ),\n };\n}\n\n// Time-independent evaluation snapshot for the Fly HTTP boundary. It excludes\n// refunded, revoked, and other historical rows except for the single latest\n// fallback needed by status. State-entitled candidates may include a row whose\n// expiresAt has just passed; Fly removes it with its own current clock before\n// producing the public HTTP response. Convex may safely cache the snapshot and\n// invalidates it when a dependent row changes.\nexport const subscriptionEvaluationSnapshot = query({\n args: {\n apiKey: v.string(),\n userId: v.string(),\n },\n returns: v.object({\n projectId: v.union(v.id(\"projects\"), v.null()),\n candidates: v.array(subscriptionEvaluationRowShape),\n fallback: v.union(subscriptionEvaluationRowShape, v.null()),\n }),\n handler: async (ctx, args) => {\n const project = await projectByApiKey(ctx, args.apiKey);\n if (!project) return { projectId: null, candidates: [], fallback: null };\n\n const rows = await userSubscriptionRows(ctx, project._id, args.userId);\n return {\n projectId: project._id,\n ...shapeSubscriptionEvaluationSnapshot(rows),\n };\n },\n});\n\n// `/v2` account reads are server-to-server. Convex repeats the admin check and\n// shapes the response without store credentials before it crosses the HTTP\n// boundary.\nexport const subscriptionStatusV2 = query({\n args: { apiKey: v.string(), userId: v.string(), now: v.number() },\n returns: v.object({\n active: v.boolean(),\n subscription: v.union(subscriptionV2Shape, v.null()),\n }),\n handler: async (ctx, args) => {\n const project = await requireAdminProjectByApiKey(ctx, args.apiKey);\n\n const subs = await userSubscriptionRows(ctx, project._id, args.userId);\n const activeSubs = subs.filter((candidate) =>\n isActive(candidate, args.now),\n );\n const selected = selectMostRecentlyUpdatedSubscription(\n activeSubs.length > 0 ? activeSubs : subs,\n );\n\n return {\n active: activeSubs.length > 0,\n subscription: selected ? shapeSubscriptionV2Row(selected) : null,\n };\n },\n});\n\nexport const entitlementsV2 = query({\n args: { apiKey: v.string(), userId: v.string(), now: v.number() },\n returns: v.object({\n userId: v.string(),\n productIds: v.array(v.string()),\n subscriptions: v.array(subscriptionV2Shape),\n }),\n handler: async (ctx, args) => {\n const project = await requireAdminProjectByApiKey(ctx, args.apiKey);\n\n const all = await userSubscriptionRows(ctx, project._id, args.userId);\n const active = all.filter((sub) => isActive(sub, args.now));\n return {\n userId: args.userId,\n productIds: Array.from(new Set(active.map((sub) => sub.productId))),\n subscriptions: active.map(shapeSubscriptionV2Row),\n };\n },\n});\n\n// Authoritative server-credential gate with no side effect and no data. The\n// commerce bindPurchase handler calls this before it parses store evidence, so\n// an unknown or under-scoped key is rejected (UNAUTHORIZED / FORBIDDEN) before\n// it can learn which stores bind or which evidence a store requires.\nexport const assertServerAccess = query({\n args: { apiKey: v.string() },\n returns: v.object({ ok: v.boolean() }),\n handler: async (ctx, args) => {\n await requireAdminProjectByApiKey(ctx, args.apiKey);\n return { ok: true };\n },\n});\n\nexport const userErasureStatusV2 = query({\n args: {\n apiKey: v.string(),\n // The id arrives from a URL path; a malformed one must read as \"no such\n // job\" (404), not fail argument validation into a 500.\n jobId: v.string(),\n },\n returns: v.union(\n v.null(),\n v.object({\n jobId: v.id(\"subscriptionUserErasureJobs\"),\n status: v.union(\n v.literal(\"queued\"),\n v.literal(\"running\"),\n v.literal(\"completed\"),\n ),\n subscriptionsErased: v.number(),\n commerceEventsErased: v.number(),\n createdAt: v.number(),\n updatedAt: v.number(),\n completedAt: v.optional(v.number()),\n }),\n ),\n handler: async (ctx, args) => {\n const project = await requireAdminProjectByApiKey(ctx, args.apiKey);\n const jobId = ctx.db.normalizeId(\"subscriptionUserErasureJobs\", args.jobId);\n if (!jobId) return null;\n const job = await ctx.db.get(jobId);\n if (!job || job.projectId !== project._id) return null;\n return {\n jobId: job._id,\n status: job.status,\n subscriptionsErased: job.subscriptionsErased,\n commerceEventsErased: job.commerceEventsErased,\n createdAt: job.createdAt,\n updatedAt: job.updatedAt,\n completedAt: job.completedAt,\n };\n },\n});\n\n// Match onesub's `/onesub/status?userId=` — returns the most-recently-\n// updated active subscription when the user is entitled, otherwise the\n// most-recently-updated subscription overall, plus one `active` boolean\n// for simple gating.\nexport const subscriptionStatus = query({\n args: { apiKey: v.string(), userId: v.string() },\n returns: v.object({\n active: v.boolean(),\n subscription: v.union(subscriptionShape, v.null()),\n }),\n handler: async (ctx, args) => {\n const project = await projectByApiKey(ctx, args.apiKey);\n if (!project) return { active: false, subscription: null };\n\n const subs = await userSubscriptionRows(ctx, project._id, args.userId);\n\n const now = Date.now();\n const activeSubs = subs.filter((candidate) => isActive(candidate, now));\n const sub = selectMostRecentlyUpdatedSubscription(\n activeSubs.length > 0 ? activeSubs : subs,\n );\n if (!sub) return { active: false, subscription: null };\n\n return {\n active: activeSubs.length > 0,\n subscription: shapeSubscriptionRow(sub),\n };\n },\n});\n\n// Match onesub's entitlement evaluation — every productId the user\n// currently has rights to. Aggregates across all subscription rows so\n// a user with multiple offers (resub, family share, cross-grade) sees\n// the union.\nexport const entitlements = query({\n args: { apiKey: v.string(), userId: v.string() },\n returns: v.object({\n userId: v.string(),\n productIds: v.array(v.string()),\n subscriptions: v.array(subscriptionShape),\n }),\n handler: async (ctx, args) => {\n const project = await projectByApiKey(ctx, args.apiKey);\n if (!project) {\n return { userId: args.userId, productIds: [], subscriptions: [] };\n }\n\n const all = await userSubscriptionRows(ctx, project._id, args.userId);\n\n const now = Date.now();\n const active = all.filter((sub) => isActive(sub, now));\n return {\n userId: args.userId,\n productIds: Array.from(new Set(active.map((sub) => sub.productId))),\n subscriptions: active.map(shapeSubscriptionRow),\n };\n },\n});\n\n// Filtered list for the dashboard's subscriptions page. Mirrors\n// onesub's `SubscriptionStore.listFiltered` API.\nexport const listSubscriptions = query({\n args: {\n apiKey: v.optional(v.string()),\n projectId: v.optional(v.id(\"projects\")),\n state: v.optional(subscriptionStateValidator),\n productId: v.optional(v.string()),\n userId: v.optional(v.string()),\n limit: v.optional(v.number()),\n },\n returns: v.object({\n items: v.array(subscriptionShape),\n total: v.number(),\n }),\n handler: async (ctx, args) => {\n const project = await projectForReadArgs(ctx, args, \"admin\");\n if (!project) return { items: [], total: 0 };\n\n const limit = Math.min(Math.max(args.limit ?? 50, 1), 200);\n\n // userId path: subscriptions per user is a small population\n // (single digits in practice — a user with 50 subscriptions on a\n // single project is pathological), so we collect the entire\n // by_project_and_user slice and apply state/productId filters in\n // memory rather than throwing. Earlier behaviour rejected the\n // combo with an error, which made the dashboard \"filter user X by\n // state Active\" path unusable (PR #124\n // (https://github.com/hyodotdev/openiap/pull/124) review).\n if (args.userId) {\n const userRows = await ctx.db\n .query(\"subscriptions\")\n .withIndex(\"by_project_and_user\", (q) =>\n q.eq(\"projectId\", project._id).eq(\"userId\", args.userId),\n )\n .order(\"desc\")\n .collect();\n const filtered = userRows.filter((sub) => {\n if (args.state && sub.state !== args.state) return false;\n if (args.productId && sub.productId !== args.productId) return false;\n return true;\n });\n return {\n items: filtered.slice(0, limit).map(shapeSubscriptionRow),\n total: filtered.length,\n };\n }\n\n // Pick the most-selective index for the supplied filters. Schema\n // covers single-filter combinations directly; the composite\n // (projectId, state, productId) index handles the dashboard's\n // common \"filter by state and SKU\" combination so we don't need\n // an over-fetch + in-memory post-filter that could miss rows\n // past the take() boundary.\n let rows: Array>;\n if (args.state && args.productId) {\n rows = await ctx.db\n .query(\"subscriptions\")\n .withIndex(\"by_project_and_state_and_product\", (q) =>\n q\n .eq(\"projectId\", project._id)\n .eq(\"state\", args.state!)\n .eq(\"productId\", args.productId!),\n )\n .order(\"desc\")\n .take(limit);\n } else if (args.state) {\n rows = await ctx.db\n .query(\"subscriptions\")\n .withIndex(\"by_project_and_state\", (q) =>\n q.eq(\"projectId\", project._id).eq(\"state\", args.state!),\n )\n .order(\"desc\")\n .take(limit);\n } else if (args.productId) {\n rows = await ctx.db\n .query(\"subscriptions\")\n .withIndex(\"by_project_and_product\", (q) =>\n q.eq(\"projectId\", project._id).eq(\"productId\", args.productId!),\n )\n .order(\"desc\")\n .take(limit);\n } else {\n rows = await ctx.db\n .query(\"subscriptions\")\n .withIndex(\"by_project_and_updated\", (q) =>\n q.eq(\"projectId\", project._id),\n )\n .order(\"desc\")\n .take(limit);\n }\n\n // All filter combinations hit an index that covers the supplied\n // columns now (the (state + productId) composite was added in\n // schema.ts), so no in-memory post-filter is needed here.\n\n // `total` reflects the filtered window we actually materialized,\n // not the full server-side count. Computing a true total would\n // require a separate aggregate scan that defeats the take() bound\n // we just put in. The dashboard treats `total` as \"rows shown\n // matching the current filter\" and surfaces \"+ more\" affordances\n // via the next page request.\n return {\n items: rows.slice(0, limit).map(shapeSubscriptionRow),\n total: rows.length,\n };\n },\n});\n\n// Metrics aggregation. Reads incrementally-maintained per-currency\n// counters out of `subscriptionStats` for the live state buckets +\n// MRR (O(currencies-per-project) — typically 1-3 rows), and bounded\n// indexed scans over `by_project_and_state` for the 30-day rolling\n// counters. The prior implementation took up to 10,000 subscriptions\n// off the by_project_and_updated index and aggregated in memory,\n// which silently undercounted projects above that cap.\n//\n// Migration safety: when the stats table is empty for a project\n// (pre-rollout state) we fall through to a one-shot recompute via\n// the same statsContributionFor logic so the dashboard stays\n// correct on first read after deploy. The\n// `recomputeSubscriptionStats` internal mutation populates rows for\n// future reads.\nexport const metricsSummary = query({\n args: {\n apiKey: v.optional(v.string()),\n projectId: v.optional(v.id(\"projects\")),\n },\n returns: v.object({\n activeSubs: v.number(),\n inGracePeriod: v.number(),\n inBillingRetry: v.number(),\n refunded30d: v.number(),\n canceled30d: v.number(),\n // Headline MRR in the project's reporting currency, normalized\n // to monthly. Historical field name kept for dashboard / MCP\n // consumers, but the value is no longer a cross-currency or\n // \"most popular currency\" total.\n mrrMicros: v.number(),\n currency: v.optional(v.string()),\n reportingCurrency: v.string(),\n // Full per-currency breakdown so consumers that care about\n // multi-currency aren't left guessing. Each entry's `mrrMicros`\n // is summed only over subscriptions in that currency, normalized\n // to monthly via the product's billingPeriod.\n mrrByCurrency: v.array(\n v.object({ currency: v.string(), mrrMicros: v.number() }),\n ),\n excludedMrrByCurrency: v.array(\n v.object({ currency: v.string(), mrrMicros: v.number() }),\n ),\n }),\n handler: async (ctx, args) => {\n const project = await projectForReadArgs(ctx, args, \"admin\");\n if (!project) {\n return {\n activeSubs: 0,\n inGracePeriod: 0,\n inBillingRetry: 0,\n refunded30d: 0,\n canceled30d: 0,\n mrrMicros: 0,\n currency: DEFAULT_REPORTING_CURRENCY,\n reportingCurrency: DEFAULT_REPORTING_CURRENCY,\n mrrByCurrency: [],\n excludedMrrByCurrency: [],\n };\n }\n const now = Date.now();\n const cutoff = now - 30 * 24 * 60 * 60 * 1000;\n\n // Live state counters + MRR — read out of the incrementally\n // maintained `subscriptionStats` table.\n const statsRows = await ctx.db\n .query(\"subscriptionStats\")\n .withIndex(\"by_project\", (q) => q.eq(\"projectId\", project._id))\n .collect();\n\n let activeSubs = 0;\n let inGracePeriod = 0;\n let inBillingRetry = 0;\n const mrrAccumulators = new Map();\n\n if (statsRows.length > 0) {\n for (const row of statsRows) {\n activeSubs += row.activeSubs;\n inGracePeriod += row.inGracePeriod;\n inBillingRetry += row.inBillingRetry;\n if (row.currency && row.mrrMicros > 0) {\n mrrAccumulators.set(\n row.currency,\n (mrrAccumulators.get(row.currency) ?? 0) + row.mrrMicros,\n );\n }\n }\n } else {\n // No stats rows yet — pre-rollout state for this project.\n // Compute on the fly so the dashboard isn't blank on first\n // read after deploy. Bounded by the same per-project scan the\n // backfill mutation does; for projects past the prior 10k cap\n // this is a one-time cost until `recomputeSubscriptionStats`\n // populates the table.\n //\n // Bounded by FALLBACK_SCAN_CAP so a project that's hugely past\n // the prior 10k scan limit can't crash the dashboard render.\n // The cap matches the previous implementation's bound; the\n // first read after deploy schedules an async backfill via the\n // drift-correction cron, after which subsequent reads come\n // out of subscriptionStats and have no scan at all.\n const FALLBACK_SCAN_CAP = 10_000;\n const periodByProductId = await loadPeriodByProductId(ctx, project._id);\n const allSubs = await ctx.db\n .query(\"subscriptions\")\n .withIndex(\"by_project_and_updated\", (q) =>\n q.eq(\"projectId\", project._id),\n )\n .order(\"desc\")\n .take(FALLBACK_SCAN_CAP);\n for (const sub of allSubs) {\n if (sub.state === \"Active\" && isActive(sub, now)) {\n activeSubs += 1;\n if (typeof sub.priceAmountMicros === \"number\" && sub.currency) {\n const monthly = monthlyMicrosForSub(\n sub,\n periodByProductId.get(sub.productId),\n );\n mrrAccumulators.set(\n sub.currency,\n (mrrAccumulators.get(sub.currency) ?? 0) + monthly,\n );\n }\n } else if (sub.state === \"InGracePeriod\") {\n inGracePeriod += 1;\n } else if (sub.state === \"InBillingRetry\") {\n inBillingRetry += 1;\n }\n }\n }\n\n // 30-day rolling counters — bounded by churn rather than by\n // historical state archive. The previous implementation walked\n // every `Refunded` row + every (Active|InGracePeriod|InBillingRetry\n // |Expired) row for the project and filtered in memory, which\n // grew unbounded as the historical archive accumulated. We now\n // do a single time-windowed scan via `by_project_and_updated`\n // with `gte(cutoff)`, then derive both refunded + canceled\n // counters in one pass. The candidate set is bounded by the\n // last 30 days of state changes (typically thousands per\n // project, never the full lifetime).\n // Cap the windowed scan so a project with > 10k state changes\n // in 30 days can't exceed Convex's 40k document-read limit. The\n // rolling counters degrade gracefully — if a project genuinely\n // hits this bound the dashboard shows an approximate count that\n // still tracks the cohort closely (this is the same trade-off\n // the previous SUBS_SCAN_CAP made for active counts, before the\n // incremental subscriptionStats path replaced it). Real-world\n // monthly churn is well under 10k for any realistic deployment.\n const ROLLING_SCAN_CAP = 10_000;\n const recentlyChanged = await ctx.db\n .query(\"subscriptions\")\n .withIndex(\"by_project_and_updated\", (q) =>\n q.eq(\"projectId\", project._id).gte(\"updatedAt\", cutoff),\n )\n .take(ROLLING_SCAN_CAP);\n let refunded30d = 0;\n let canceled30d = 0;\n const CANCELED_STATES = new Set([\n \"Active\",\n \"InGracePeriod\",\n \"InBillingRetry\",\n \"Expired\",\n ]);\n for (const sub of recentlyChanged) {\n if (sub.state === \"Refunded\") {\n refunded30d += 1;\n }\n if (\n sub.willRenew === false &&\n sub.cancellationReason === \"UserCanceled\" &&\n CANCELED_STATES.has(sub.state)\n ) {\n canceled30d += 1;\n }\n }\n\n // Sort per-currency MRR for deterministic UI rendering. The\n // headline `mrrMicros` below intentionally uses only the\n // project's reporting currency; other currencies remain visible\n // in `excludedMrrByCurrency` instead of being silently summed\n // by IAPKit.\n const sorted = Array.from(mrrAccumulators.entries()).sort(\n ([a, av], [b, bv]) => (bv !== av ? bv - av : a.localeCompare(b)),\n );\n const mrrByCurrency = sorted.map(([currency, mrrMicros]) => ({\n currency,\n mrrMicros,\n }));\n const reportingMrr = selectReportingMrr(\n mrrByCurrency,\n project.reportingCurrency,\n );\n\n return {\n activeSubs,\n inGracePeriod,\n inBillingRetry,\n refunded30d,\n canceled30d,\n mrrMicros: reportingMrr.mrrMicros,\n currency: reportingMrr.currency,\n reportingCurrency: reportingMrr.currency,\n mrrByCurrency,\n excludedMrrByCurrency: reportingMrr.excludedMrrByCurrency,\n };\n },\n});\n\n// Daily revenue + lifecycle metrics for the Analytics dashboard. Reads\n// pre-computed rollups from `revenueMetricsDaily` (populated by the\n// `recomputeAllRevenueMetrics` cron) so the dashboard never scans the\n// raw webhookEvents log on render.\n//\n// `fromDay` and `toDay` are inclusive ISO date strings (YYYY-MM-DD,\n// UTC) — same format `revenueMetricsDaily.day` is stored under, so\n// the index range is a direct string comparison.\n//\n// Return shape: one entry per rollup row, i.e. one per\n// (day, currency, productId, platform). Aggregation across rows\n// happens client-side (`analytics.tsx`) so the dashboard can switch\n// between filter combinations without re-querying. Summing across\n// currencies is a UI-side concern — `revenueMicros` from a USD row\n// and a EUR row cannot be added without an FX rate.\nconst platformValidator = v.union(v.literal(\"IOS\"), v.literal(\"Android\"));\n\nexport const getRevenueMetrics = query({\n args: {\n apiKey: v.optional(v.string()),\n projectId: v.optional(v.id(\"projects\")),\n fromDay: v.string(),\n toDay: v.string(),\n // Server-side `productId` / `currency` / `platform` filters were\n // removed because the dashboard does all of that filtering\n // client-side (the unfiltered fetch is what backs the filter-\n // dropdown population — narrowing the scan would defeat that),\n // and a server-side narrowing path was incompatible with that\n // contract: when a productId was pinned the dropdowns silently\n // collapsed to that SKU's currencies / platforms only. If a\n // future caller needs server-side narrowing for a non-dashboard\n // surface, add a separate query — don't reintroduce these as\n // optional args on this one.\n },\n returns: v.object({\n days: v.array(\n v.object({\n day: v.string(),\n currency: v.string(),\n productId: v.string(),\n platform: platformValidator,\n activeSubs: v.number(),\n newSubs: v.number(),\n renewals: v.number(),\n cancellations: v.number(),\n refunds: v.number(),\n revenueMicros: v.number(),\n }),\n ),\n // Available filter values surfaced to the dashboard so the UI\n // can render dropdowns / chiclets for everything the project\n // actually has data for, without a second round-trip.\n currencies: v.array(v.string()),\n productIds: v.array(v.string()),\n platforms: v.array(platformValidator),\n // True when the underlying scan hit `REVENUE_SCAN_CAP` and the\n // returned rows are a partial view of the requested window. The\n // dashboard surfaces this as a banner so a truncated chart is\n // visible to the operator instead of silently rendering a\n // partial tail.\n truncated: v.boolean(),\n }),\n handler: async (ctx, args) => {\n const project = await projectForReadArgs(ctx, args, \"admin\");\n if (!project) {\n return {\n days: [],\n currencies: [],\n productIds: [],\n platforms: [],\n truncated: false,\n };\n }\n\n // Reject ranges past the dashboard's longest preset (90 days)\n // before issuing the index scan. A misbehaving client can\n // otherwise request `fromDay = \"1970-01-01\"` and force the\n // server to materialize every rollup row in the project. The\n // 90-day cap matches `RANGES` in `analytics.tsx`; widening\n // there should bump this in lockstep.\n const MAX_RANGE_DAYS = 92;\n if (args.fromDay > args.toDay) {\n throw new Error(\n `getRevenueMetrics: fromDay (${args.fromDay}) is after toDay (${args.toDay}).`,\n );\n }\n const fromMs = Date.parse(`${args.fromDay}T00:00:00.000Z`);\n const toMs = Date.parse(`${args.toDay}T00:00:00.000Z`);\n if (Number.isNaN(fromMs) || Number.isNaN(toMs)) {\n throw new Error(\n `getRevenueMetrics: invalid ISO date(s) fromDay=${args.fromDay} toDay=${args.toDay}.`,\n );\n }\n const spanDays = Math.round((toMs - fromMs) / 86_400_000) + 1;\n if (spanDays > MAX_RANGE_DAYS) {\n throw new Error(\n `getRevenueMetrics: span of ${spanDays} days exceeds MAX_RANGE_DAYS=${MAX_RANGE_DAYS}.`,\n );\n }\n\n // Range scan over `revenueMetricsDaily` via\n // `by_project_and_day_and_currency` (`[projectId, day, currency]`).\n // The dashboard does all filtering (currency / product /\n // platform) client-side, so we deliberately return the full\n // window — narrowing here would prune the data the dashboard\n // needs to populate its filter dropdowns.\n //\n // Capped at REVENUE_SCAN_CAP to stay under Convex's 32k\n // document-scan limit per query. A 92-day range across a\n // maximalist project (30 SKUs × 3 currencies × 2 platforms =\n // 180 rows/day → ~16.5k rows for 92 days) fits inside this\n // cap; truncation surfaces as the `truncated` flag below and\n // an amber banner on the dashboard so a partial chart is\n // never silently rendered.\n const REVENUE_SCAN_CAP = 20_000;\n const allRows = await ctx.db\n .query(\"revenueMetricsDaily\")\n .withIndex(\"by_project_and_day_and_currency\", (q) =>\n q\n .eq(\"projectId\", project._id)\n .gte(\"day\", args.fromDay)\n .lte(\"day\", args.toDay),\n )\n .take(REVENUE_SCAN_CAP);\n const truncated = allRows.length === REVENUE_SCAN_CAP;\n if (truncated) {\n console.warn(\n `[getRevenueMetrics] revenueMetricsDaily scan hit REVENUE_SCAN_CAP=${REVENUE_SCAN_CAP} for project=${project._id} range=${args.fromDay}..${args.toDay}; chart will undercount the tail.`,\n );\n }\n\n // Populate filter-dropdown choices from the unfiltered range\n // scan so the UI can render every available currency /\n // productId / platform regardless of which filter the user\n // currently has active.\n const currencies = new Set();\n const productIds = new Set();\n const platforms = new Set<\"IOS\" | \"Android\">();\n for (const row of allRows) {\n if (row.currency) currencies.add(row.currency);\n productIds.add(row.productId);\n platforms.add(row.platform);\n }\n\n return {\n days: allRows.map((row) => ({\n day: row.day,\n currency: row.currency,\n productId: row.productId,\n platform: row.platform,\n activeSubs: row.activeSubs,\n newSubs: row.newSubs,\n renewals: row.renewals,\n cancellations: row.cancellations,\n refunds: row.refunds,\n revenueMicros: row.revenueMicros,\n })),\n currencies: Array.from(currencies).sort(),\n productIds: Array.from(productIds).sort(),\n platforms: Array.from(platforms).sort(),\n truncated,\n };\n },\n});\n\nasync function loadPeriodByProductId(\n ctx: QueryCtx,\n projectId: Id<\"projects\">,\n): Promise> {\n const periodByProductId = new Map();\n for (const platform of [\"IOS\", \"Android\"] as const) {\n const productRows = await ctx.db\n .query(\"products\")\n .withIndex(\"by_project_and_platform\", (q) =>\n q.eq(\"projectId\", projectId).eq(\"platform\", platform),\n )\n .collect();\n for (const product of productRows) {\n if (\n !periodByProductId.has(product.productId) ||\n (periodByProductId.get(product.productId) === undefined &&\n product.billingPeriod !== undefined)\n ) {\n periodByProductId.set(product.productId, product.billingPeriod);\n }\n }\n }\n return periodByProductId;\n}\n", + "kit/convex/subscriptions/query.test.ts": "import { describe, expect, it } from \"vitest\";\nimport { ConvexError } from \"convex/values\";\nimport type { Doc, Id } from \"../_generated/dataModel\";\nimport { testableFunction } from \"../test.setup\";\n\nimport {\n assertUserSubscriptionRowLimit,\n entitlementsV2 as registeredEntitlementsV2,\n MAX_USER_SUBSCRIPTION_ROWS,\n selectReportingMrr,\n shapeSubscriptionEvaluationSnapshot,\n shapeSubscriptionRow,\n shapeSubscriptionV2Row,\n subscriptionStatusV2 as registeredSubscriptionStatusV2,\n} from \"./query\";\n\nconst subscriptionStatusV2 = testableFunction(registeredSubscriptionStatusV2);\nconst entitlementsV2 = testableFunction(registeredEntitlementsV2);\n\nfunction subscriptionDoc(\n overrides: Partial>,\n): Doc<\"subscriptions\"> {\n return {\n _id: \"subscriptions_1\" as Id<\"subscriptions\">,\n _creationTime: 0,\n projectId: \"projects_1\" as Id<\"projects\">,\n purchaseToken: \"purchase_token_1\",\n productId: \"premium_monthly\",\n platform: \"IOS\",\n state: \"Active\",\n startedAt: 1,\n updatedAt: 2,\n ...overrides,\n };\n}\n\ndescribe(\"selectReportingMrr\", () => {\n it(\"uses only the reporting currency for the headline MRR\", () => {\n const result = selectReportingMrr(\n [\n { currency: \"EUR\", mrrMicros: 8_500_000 },\n { currency: \"USD\", mrrMicros: 9_990_000 },\n { currency: \"HUF\", mrrMicros: 12_000_000 },\n ],\n \"USD\",\n );\n\n expect(result).toEqual({\n currency: \"USD\",\n mrrMicros: 9_990_000,\n excludedMrrByCurrency: [\n { currency: \"EUR\", mrrMicros: 8_500_000 },\n { currency: \"HUF\", mrrMicros: 12_000_000 },\n ],\n });\n });\n\n it(\"returns zero when the reporting currency has no matching MRR\", () => {\n const result = selectReportingMrr(\n [\n { currency: \"EUR\", mrrMicros: 8_500_000 },\n { currency: \"HUF\", mrrMicros: 12_000_000 },\n ],\n \"USD\",\n );\n\n expect(result).toEqual({\n currency: \"USD\",\n mrrMicros: 0,\n excludedMrrByCurrency: [\n { currency: \"EUR\", mrrMicros: 8_500_000 },\n { currency: \"HUF\", mrrMicros: 12_000_000 },\n ],\n });\n });\n\n it(\"falls back to USD for invalid reporting currency input\", () => {\n const result = selectReportingMrr(\n [\n { currency: \"USD\", mrrMicros: 9_990_000 },\n { currency: \"EUR\", mrrMicros: 8_500_000 },\n ],\n \"US\",\n );\n\n expect(result).toEqual({\n currency: \"USD\",\n mrrMicros: 9_990_000,\n excludedMrrByCurrency: [{ currency: \"EUR\", mrrMicros: 8_500_000 }],\n });\n });\n});\n\ndescribe(\"shapeSubscriptionRow\", () => {\n it(\"exposes originalTransactionId for iOS subscription rows\", () => {\n const row = shapeSubscriptionRow(\n subscriptionDoc({\n platform: \"IOS\",\n purchaseToken: \"2000001177054625\",\n }),\n );\n\n expect(row.purchaseToken).toBe(\"2000001177054625\");\n expect(row.originalTransactionId).toBe(\"2000001177054625\");\n });\n\n // Security debt, pinned so a removal is a deliberate decision: MAUI declares\n // purchaseToken `required` and drops the row when it is missing, so removing\n // it silently strips entitlement from every installed MAUI app.\n it(\"still carries the Play purchaseToken an installed MAUI app requires\", () => {\n const row = shapeSubscriptionRow(\n subscriptionDoc({\n platform: \"Android\",\n purchaseToken: \"play-token-1\",\n }),\n );\n\n expect(row.purchaseToken).toBe(\"play-token-1\");\n expect(row.originalTransactionId).toBeUndefined();\n });\n});\n\ndescribe(\"shapeSubscriptionV2Row\", () => {\n it(\"omits both Android and Apple store credentials\", () => {\n const row = shapeSubscriptionV2Row(\n subscriptionDoc({\n platform: \"IOS\",\n purchaseToken: \"2000001177054625\",\n userId: \"user-1\",\n }),\n );\n\n expect(row).toMatchObject({\n id: \"subscriptions_1\",\n productId: \"premium_monthly\",\n userId: \"user-1\",\n });\n expect(row).not.toHaveProperty(\"purchaseToken\");\n expect(row).not.toHaveProperty(\"originalTransactionId\");\n });\n});\n\ndescribe(\"v2 account-read authorization\", () => {\n const db = {\n rows: {\n apiKeys: [\n {\n _id: \"apiKeys_1\",\n key: \"openiap-kit_pk_mobile\",\n keyType: \"publishable\",\n isActive: true,\n projectId: \"projects_1\",\n organizationId: \"organizations_1\",\n },\n {\n _id: \"apiKeys_2\",\n key: \"openiap-kit_sk_backend\",\n keyType: \"secret\",\n isActive: true,\n projectId: \"projects_1\",\n organizationId: \"organizations_1\",\n },\n ],\n projects: [\n {\n _id: \"projects_1\",\n organizationId: \"organizations_1\",\n },\n ],\n organizations: [{ _id: \"organizations_1\" }],\n subscriptions: [\n subscriptionDoc({\n userId: \"user-1\",\n expiresAt: 10,\n }),\n ],\n } as Record[]>,\n async get(id: string) {\n return (\n Object.values(this.rows)\n .flat()\n .find((row) => row._id === id) ?? null\n );\n },\n query(table: string) {\n const rows = this.rows[table] ?? [];\n return {\n withIndex: (_name: string, capture: (q: unknown) => unknown) => {\n const expected: Record = {};\n const q: Record unknown> =\n {};\n q.eq = (field, value) => {\n expected[field] = value;\n return q;\n };\n capture(q);\n const matches = () =>\n rows.filter((row) =>\n Object.entries(expected).every(\n ([field, value]) => row[field] === value,\n ),\n );\n return {\n first: async () => matches()[0] ?? null,\n order: () => ({\n take: async (limit: number) => matches().slice(0, limit),\n }),\n };\n },\n };\n },\n };\n\n it(\"rejects publishable keys inside Convex\", async () => {\n const ctx = { db } as never;\n for (const query of [subscriptionStatusV2, entitlementsV2]) {\n await expect(\n query._handler(ctx, {\n apiKey: \"openiap-kit_pk_mobile\",\n userId: \"user-1\",\n now: 1,\n }),\n ).rejects.toSatisfy(\n (error: unknown) =>\n (error as { data?: { code?: string } }).data?.code ===\n \"INSUFFICIENT_SCOPE\",\n );\n }\n });\n\n it(\"rejects an unknown secret-shaped key instead of returning empty data\", async () => {\n const ctx = { db } as never;\n for (const query of [subscriptionStatusV2, entitlementsV2]) {\n await expect(\n query._handler(ctx, {\n apiKey: \"openiap-kit_sk_unknown\",\n userId: \"user-1\",\n now: 1,\n }),\n ).rejects.toSatisfy(\n (error: unknown) =>\n (error as { data?: { code?: string } }).data?.code ===\n \"INVALID_API_KEY\",\n );\n }\n });\n\n it(\"uses the caller-supplied time so cache keys advance past expiry\", async () => {\n const ctx = { db } as never;\n const beforeExpiry = await subscriptionStatusV2._handler(ctx, {\n apiKey: \"openiap-kit_sk_backend\",\n userId: \"user-1\",\n now: 9,\n });\n const atExpiry = await subscriptionStatusV2._handler(ctx, {\n apiKey: \"openiap-kit_sk_backend\",\n userId: \"user-1\",\n now: 10,\n });\n const entitlements = await entitlementsV2._handler(ctx, {\n apiKey: \"openiap-kit_sk_backend\",\n userId: \"user-1\",\n now: 10,\n });\n\n expect(beforeExpiry.active).toBe(true);\n expect(atExpiry.active).toBe(false);\n expect(entitlements.productIds).toEqual([]);\n });\n});\n\ndescribe(\"assertUserSubscriptionRowLimit\", () => {\n it(\"accepts the documented 200-row boundary\", () => {\n const rows = Array.from(\n { length: MAX_USER_SUBSCRIPTION_ROWS },\n (_, index) =>\n subscriptionDoc({\n _id: `subscriptions_${index}` as Id<\"subscriptions\">,\n }),\n );\n\n expect(() => assertUserSubscriptionRowLimit(rows)).not.toThrow();\n });\n\n it(\"fails closed on the single overflow-probe row\", () => {\n const rows = Array.from(\n { length: MAX_USER_SUBSCRIPTION_ROWS + 1 },\n (_, index) =>\n subscriptionDoc({\n _id: `subscriptions_${index}` as Id<\"subscriptions\">,\n }),\n );\n\n try {\n assertUserSubscriptionRowLimit(rows);\n throw new Error(\"Expected the subscription row limit to fail\");\n } catch (error) {\n expect(error).toBeInstanceOf(ConvexError);\n expect(\n (error as ConvexError<{ code: string; message: string }>).data,\n ).toEqual({\n code: \"ENTITLEMENT_SNAPSHOT_TOO_LARGE\",\n message:\n \"This user has more than 200 subscription rows. Contact IAPKit support before retrying.\",\n });\n }\n });\n});\n\ndescribe(\"shapeSubscriptionEvaluationSnapshot\", () => {\n it(\"exposes only entitlement candidates and the latest status fallback\", () => {\n const rows = [\n subscriptionDoc({\n _id: \"subscriptions_latest\" as Id<\"subscriptions\">,\n state: \"Expired\",\n updatedAt: 4,\n purchaseToken: \"latest-token\",\n }),\n subscriptionDoc({\n _id: \"subscriptions_active\" as Id<\"subscriptions\">,\n state: \"Active\",\n updatedAt: 3,\n purchaseToken: \"active-token\",\n }),\n subscriptionDoc({\n _id: \"subscriptions_refunded\" as Id<\"subscriptions\">,\n state: \"Refunded\",\n updatedAt: 2,\n purchaseToken: \"historical-token\",\n }),\n ];\n\n const snapshot = shapeSubscriptionEvaluationSnapshot(rows);\n\n expect(snapshot.candidates).toHaveLength(1);\n expect(snapshot.candidates[0]?.id).toBe(\"subscriptions_active\");\n expect(snapshot.candidates[0]?.createdAt).toBe(0);\n expect(snapshot.fallback?.createdAt).toBe(0);\n expect(snapshot.candidates[0]?.purchaseToken).toBe(\"active-token\");\n expect(snapshot.fallback?.purchaseToken).toBe(\"latest-token\");\n expect(JSON.stringify(snapshot)).not.toContain(\"historical-token\");\n });\n});\n", + "kit/server/api/commerce/conformance.test.ts": "// IAPKit's dual-binding conformance proof: the spec package's portable runner\n// drives the real commerce routes — REST and GraphQL, through the real\n// adapters, shared handlers, auth, and validation — against an in-memory\n// Convex substitute seeded from the runner's own fixtures. Store credentials\n// are not involved; SPEC.md 11.3 scopes what this certifies.\n\nimport { beforeEach, describe, expect, it, vi } from \"vitest\";\nimport { Hono } from \"hono\";\nimport Ajv from \"ajv/dist/2020\";\nimport {\n createGraphqlAdapter,\n createRestAdapter,\n operationVectors,\n runConformance,\n} from \"openiap-commerce-protocol/conformance\";\n\nimport {\n CONTENT_TYPE,\n DELIVERY_ID_HEADER,\n EVENT_ID_HEADER,\n SIGNATURE_HEADER,\n SIGNATURE_TOLERANCE_SECONDS,\n TIMESTAMP_HEADER,\n isRetryableStatus,\n signPayload,\n signPayloadWithRotation,\n} from \"../../../convex/commerce/signing\";\nimport {\n commerceEventTypesToEmit,\n type CommerceEventType,\n} from \"../../../convex/commerce/contract\";\nimport { isEntitledAt } from \"../../../convex/subscriptions/query\";\n\n// IAPKit's descriptor declares the events profile, so dual-binding conformance\n// drives the EventsAdapter surface (SPEC.md §11.2/§11.3 scope its coverage;\n// §9.2/§9.3/§9.4.4/§9.4.5 are certified by IAPKit's own convex tests, not\n// here). What delegates to SHIPPED code: sign/rotation (signPayload,\n// signPayloadWithRotation), response classification (isRetryableStatus), the\n// emission rules (commerceEventTypesToEmit), the entitlement gate\n// (isEntitledAt), and the envelope constants (CONTENT_TYPE, the four header\n// names, the tolerance). The production envelope SENDER lives in\n// convex/commerce/delivery.ts and is covered by its own tests; this adapter\n// re-composes the same envelope from those shipped constants because the\n// worker's composition is not factored as a callable unit. Only `verify` has\n// no production counterpart at all — IAPKit emits webhooks, consumers verify\n// them — so it is written here from the same constants.\nconst iapkitEventsAdapter = {\n sign: ({\n secret,\n timestamp,\n body,\n }: {\n secret: string;\n timestamp: number;\n body: string;\n }) => signPayload(secret, timestamp, body),\n verify: async ({\n body,\n timestamp,\n signature,\n secrets,\n now,\n }: {\n body: string;\n timestamp: number;\n signature: string;\n secrets: string[];\n now: number;\n }) => {\n if (Math.abs(now - timestamp) > SIGNATURE_TOLERANCE_SECONDS) return false;\n const held = await Promise.all(\n secrets.map((secret) => signPayload(secret, timestamp, body)),\n );\n return signature\n .split(\",\")\n .map((part) => part.trim())\n .some((presented) => held.includes(presented));\n },\n delivery: async ({\n event,\n body,\n timestamp,\n secrets,\n deliveryId,\n }: {\n event: { eventId: string };\n body: string;\n timestamp: number;\n secrets: string[];\n deliveryId: string;\n }) => ({\n // POST is how delivery.ts sends (postJsonToAddress) — there is no method\n // constant to import; the content type IS the shipped constant.\n method: \"POST\",\n contentType: CONTENT_TYPE,\n headers: {\n [SIGNATURE_HEADER]: await signPayloadWithRotation(\n { current: secrets[0], previous: secrets[1] },\n timestamp,\n body,\n ),\n [TIMESTAMP_HEADER]: String(timestamp),\n [EVENT_ID_HEADER]: event.eventId,\n [DELIVERY_ID_HEADER]: deliveryId,\n },\n }),\n classifyResponse: (status: number | \"connection-error\" | \"timeout\") => {\n // The real worker's fetch catch path retries on timeout/connection error.\n if (status === \"connection-error\" || status === \"timeout\") return \"retry\";\n if (status >= 200 && status < 300) return \"delivered\";\n if (isRetryableStatus(status)) return \"retry\";\n return \"permanent-failure\";\n },\n entitled: ({\n state,\n expiresAt,\n processedAt,\n }: {\n state: string;\n expiresAt?: number;\n processedAt: number;\n }) => isEntitledAt(state, expiresAt, processedAt),\n emission: ({\n lifecycleEvent,\n entitledBefore,\n entitledAfter,\n }: {\n lifecycleEvent: string | null;\n entitledBefore: boolean;\n entitledAfter: boolean;\n }) =>\n commerceEventTypesToEmit({\n lifecycleType: (lifecycleEvent ?? null) as CommerceEventType | null,\n active: entitledAfter,\n previouslyActive: entitledBefore,\n hasBoundUser: true,\n }),\n coalesceAtBinding: ({ entitledAtBinding }: { entitledAtBinding: boolean }) =>\n commerceEventTypesToEmit({\n lifecycleType: null,\n active: entitledAtBinding,\n previouslyActive: false,\n hasBoundUser: true,\n }),\n};\n\nconst FIXTURES = operationVectors.fixtures as {\n userId: string;\n erasureUserId: string;\n appleJws: string;\n googlePurchaseToken: string;\n};\n\nconst mocks = vi.hoisted(() => ({\n action: vi.fn(),\n mutation: vi.fn(),\n query: vi.fn(),\n handleConvexError: vi.fn(),\n}));\n\nvi.mock(\"@/convex\", () => ({\n api: {\n purchases: {\n action: {\n readBoundPurchaseEntitlements: \"readBoundPurchaseEntitlements\",\n },\n mutation: {\n bindVerifiedPurchaseAsServer: \"bindVerifiedPurchaseAsServer\",\n },\n ios: { verifyAppStoreReceiptInternalV1: \"verifyApple\" },\n android: { verifyGooglePlayReceiptInternalV1: \"verifyGoogle\" },\n horizon: { verifyMetaHorizonReceiptInternalV1: \"verifyHorizon\" },\n amazon: { verifyAmazonReceiptInternalV1: \"verifyAmazon\" },\n },\n subscriptions: {\n query: {\n subscriptionStatusV2: \"subscriptionStatusV2\",\n entitlementsV2: \"entitlementsV2\",\n assertServerAccess: \"assertServerAccess\",\n },\n mutation: {\n bindUserAsServer: \"bindUserAsServer\",\n requestUserErasure: \"requestUserErasure\",\n },\n },\n },\n}));\n\nvi.mock(\"../../convex\", () => ({\n client: {\n action: mocks.action,\n mutation: mocks.mutation,\n query: mocks.query,\n },\n handleConvexError: mocks.handleConvexError,\n}));\n\nconst { commerceRoutes } = await import(\"./routes\");\n\nconst CREDENTIALS = {\n verification: \"openiap-kit_pk_conformance\",\n server: \"openiap-kit_sk_conformance\",\n};\nconst BASE_URL = \"https://kit.conformance.example\";\n\nfunction buildApp(): Hono {\n const app = new Hono();\n app.route(\"/commerce/v1\", commerceRoutes);\n return app;\n}\n\n// A ConvexError the real key check would throw, so an unknown key becomes\n// UNAUTHORIZED and a publishable key on a server op becomes FORBIDDEN — the\n// authoritative classification the edge prefix check cannot make.\nclass FakeConvexError extends Error {\n constructor(readonly data: { code: string; message: string }) {\n super(data.message);\n }\n}\n\nfunction assertKnownKey(apiKey: unknown): void {\n if (apiKey !== CREDENTIALS.verification && apiKey !== CREDENTIALS.server) {\n throw new FakeConvexError({\n code: \"INVALID_API_KEY\",\n message: \"API key is invalid or inactive\",\n });\n }\n}\n\nfunction assertServerKey(apiKey: unknown): void {\n assertKnownKey(apiKey);\n if (apiKey !== CREDENTIALS.server) {\n throw new FakeConvexError({\n code: \"INSUFFICIENT_SCOPE\",\n message: \"This operation requires a secret admin key\",\n });\n }\n}\n\nfunction seedConvexFixtures() {\n const now = Date.now();\n // Shaped like the real subscriptionV2Shape, id included, so the test proves\n // the handler strips the provider-internal id from tokenless responses.\n const row = {\n id: \"subscriptions:mock-row-1\",\n productId: \"premium.monthly\",\n platform: \"Android\" as const,\n state: \"Active\",\n expiresAt: now + 30 * 86_400_000,\n willRenew: true,\n startedAt: now - 86_400_000,\n updatedAt: now - 1_000,\n };\n\n mocks.handleConvexError.mockImplementation((error: unknown) =>\n error instanceof FakeConvexError ? error.data : null,\n );\n\n mocks.action.mockImplementation(async (name: unknown, args: unknown) => {\n assertKnownKey((args as { apiKey: string }).apiKey);\n if (name === \"readBoundPurchaseEntitlements\") {\n assertServerKey((args as { apiKey: string }).apiKey);\n return { productIds: [] };\n }\n return {\n isValid: true,\n state: \"ENTITLED\",\n productId: \"premium.monthly\",\n environment: name === \"verifyGoogle\" ? \"Production\" : \"Sandbox\",\n };\n });\n\n mocks.query.mockImplementation(async (name: unknown, args: unknown) => {\n const { apiKey, userId } = args as { apiKey: string; userId: string };\n assertServerKey(apiKey);\n if (name === \"assertServerAccess\") {\n return { ok: true };\n }\n const owned = userId === FIXTURES.userId;\n if (name === \"subscriptionStatusV2\") {\n return { active: owned, subscription: owned ? row : null };\n }\n if (name === \"entitlementsV2\") {\n return {\n userId,\n productIds: owned ? [row.productId] : [],\n subscriptions: owned ? [row] : [],\n };\n }\n throw new Error(`unexpected query ${String(name)}`);\n });\n\n const erasureJobs = new Map();\n mocks.mutation.mockImplementation(async (name: unknown, args: unknown) => {\n const { apiKey } = args as { apiKey: string };\n assertServerKey(apiKey);\n if (name === \"bindVerifiedPurchaseAsServer\") return { bound: false };\n if (name === \"bindUserAsServer\") {\n const { purchaseToken, userId } = args as {\n purchaseToken: string;\n userId: string;\n };\n return {\n ok: true,\n bound:\n purchaseToken === FIXTURES.googlePurchaseToken &&\n userId === FIXTURES.userId,\n };\n }\n if (name === \"requestUserErasure\") {\n const { userId } = args as { userId: string };\n const job = erasureJobs.get(userId) ?? {\n jobId: `job-${erasureJobs.size + 1}`,\n status: \"queued\",\n };\n erasureJobs.set(userId, job);\n return { ok: true, ...job };\n }\n throw new Error(`unexpected mutation ${String(name)}`);\n });\n}\n\ndescribe(\"IAPKit dual-binding conformance\", () => {\n beforeEach(() => {\n mocks.action.mockReset();\n mocks.mutation.mockReset();\n mocks.query.mockReset();\n mocks.handleConvexError.mockReset();\n mocks.handleConvexError.mockReturnValue(null);\n seedConvexFixtures();\n });\n\n it(\"passes every operation vector on both bindings with cross-binding parity\", async () => {\n const app = buildApp();\n const fetchApp = async (url: string, options?: RequestInit) =>\n app.request(url, options);\n\n const report = await runConformance({\n adapters: [\n createRestAdapter({\n baseUrl: BASE_URL,\n fetch: fetchApp,\n credentials: CREDENTIALS,\n }),\n createGraphqlAdapter({\n url: `${BASE_URL}/commerce/v1/graphql`,\n fetch: fetchApp,\n credentials: CREDENTIALS,\n }),\n ],\n Ajv,\n eventsAdapter: iapkitEventsAdapter,\n credentials: CREDENTIALS,\n });\n\n expect(report.results.filter((result) => !result.ok)).toEqual([]);\n // The declared events profile was actually verified, not silently skipped.\n expect(\n report.results.some((r) => r.id === \"events.profile-verification\"),\n ).toBe(true);\n expect(report.parityFailures).toEqual([]);\n expect(report.ok).toBe(true);\n const bindings = new Set(report.results.map((result) => result.binding));\n expect([...bindings].sort()).toEqual([\"graphql\", \"rest\"]);\n });\n\n it(\"keeps the served capability descriptor equal to the published one, minus the comment\", async () => {\n const app = buildApp();\n const response = await app.request(\"/commerce/v1/capabilities\");\n expect(response.status).toBe(200);\n const served = await response.json();\n const { $comment, ...published } = (\n await import(\"openiap-commerce-protocol/examples/provider-capabilities.json\")\n ).default as Record;\n expect($comment).toBeTruthy();\n expect(served).toEqual(published);\n });\n});\n", + "kit/convex/commerce/delivery.ts": "\"use node\";\n\n// HTTP half of outbound delivery.\n//\n// Direction is strictly store → IAPKit → developer backend. This is\n// server-to-server only: destinations are HTTPS endpoints a project owner\n// registered, nothing here is reachable from a shipped app, and no\n// client-pullable stream exists.\n\nimport { v } from \"convex/values\";\nimport { lookup as dnsLookup } from \"node:dns/promises\";\nimport { request as httpsRequest, type RequestOptions } from \"node:https\";\nimport { isIP, type LookupFunction } from \"node:net\";\n\nimport { internal } from \"../_generated/api\";\nimport { internalAction, type ActionCtx } from \"../_generated/server\";\nimport type { ClaimedDelivery } from \"./deliveryState\";\nimport {\n CONTENT_TYPE,\n DELIVERY_ID_HEADER,\n EVENT_ID_HEADER,\n REQUEST_TIMEOUT_MS,\n SIGNATURE_HEADER,\n TIMESTAMP_HEADER,\n checkDestinationUrl,\n CLAIM_BATCH_LIMIT,\n isRetryableStatus,\n isPublicIpAddress,\n signPayloadWithRotation,\n} from \"./signing\";\n\nexport type ResolvedAddress = { address: string; family: number };\nexport const MAX_FALLBACK_ADDRESSES = 4;\ntype Resolver = (\n hostname: string,\n options: { all: true; verbatim: true },\n) => Promise;\n\nexport async function resolvePublicAddresses(\n rawHostname: string,\n resolver: Resolver = dnsLookup,\n): Promise {\n const hostname = rawHostname.replace(/^\\[|\\]$/g, \"\").replace(/\\.$/, \"\");\n const family = isIP(hostname);\n const addresses = family\n ? [{ address: hostname, family }]\n : await resolver(hostname, { all: true, verbatim: true });\n if (\n addresses.length === 0 ||\n addresses.some((entry) => !isPublicIpAddress(entry.address))\n ) {\n throw new Error(\"destination resolved to a non-public address\");\n }\n return [\n ...new Map(\n addresses.map((entry) => [`${entry.family}:${entry.address}`, entry]),\n ).values(),\n ].slice(0, MAX_FALLBACK_ADDRESSES);\n}\n\nexport type DeliveryRequest = {\n url: URL;\n headers: Record;\n body: string;\n};\n\ntype AddressPoster = (\n request: DeliveryRequest,\n selected: ResolvedAddress,\n timeoutMs: number,\n) => Promise;\n\nasync function withinTimeout(promise: Promise, ms: number): Promise {\n let timer: ReturnType | undefined;\n try {\n return await Promise.race([\n promise,\n new Promise((_resolve, reject) => {\n timer = setTimeout(() => reject(new Error(\"request timed out\")), ms);\n }),\n ]);\n } finally {\n if (timer) clearTimeout(timer);\n }\n}\n\nasync function postJsonToAddress(\n request: DeliveryRequest,\n selected: ResolvedAddress,\n timeoutMs: number,\n): Promise {\n return await new Promise((resolve, reject) => {\n const outgoing = httpsRequest(\n buildPinnedRequestOptions(request, selected),\n (response) => {\n clearTimeout(timer);\n const status = response.statusCode ?? 0;\n response.destroy();\n resolve(status);\n },\n );\n const timer = setTimeout(() => {\n outgoing.destroy(new Error(\"request timed out\"));\n }, timeoutMs);\n outgoing.once(\"error\", (error) => {\n clearTimeout(timer);\n reject(error);\n });\n outgoing.end(request.body);\n });\n}\n\nexport function buildPinnedRequestOptions(\n request: DeliveryRequest,\n selected: ResolvedAddress,\n): RequestOptions {\n const hostname = request.url.hostname\n .replace(/^\\[|\\]$/g, \"\")\n .replace(/\\.$/, \"\");\n const pinnedLookup: LookupFunction = (_hostname, _options, callback) => {\n if (_options.all) {\n callback(null, [selected]);\n } else {\n callback(null, selected.address, selected.family);\n }\n };\n\n return {\n protocol: \"https:\",\n hostname,\n port: request.url.port || undefined,\n path: `${request.url.pathname}${request.url.search}`,\n method: \"POST\",\n headers: request.headers,\n lookup: pinnedLookup,\n ...(isIP(hostname) === 0 ? { servername: hostname } : {}),\n };\n}\n\nexport async function postJsonPinned(\n request: DeliveryRequest,\n resolver: Resolver = dnsLookup,\n postToAddress: AddressPoster = postJsonToAddress,\n): Promise {\n const startedAt = Date.now();\n const hostname = request.url.hostname\n .replace(/^\\[|\\]$/g, \"\")\n .replace(/\\.$/, \"\");\n const addresses = await withinTimeout(\n resolvePublicAddresses(hostname, resolver),\n REQUEST_TIMEOUT_MS,\n );\n let lastError: unknown;\n for (let index = 0; index < addresses.length; index += 1) {\n const remaining = REQUEST_TIMEOUT_MS - (Date.now() - startedAt);\n if (remaining <= 0) break;\n const addressesLeft = addresses.length - index;\n const attemptBudget =\n addressesLeft === 1\n ? remaining\n : Math.max(1, Math.min(3_000, Math.floor(remaining / addressesLeft)));\n try {\n return await postToAddress(request, addresses[index], attemptBudget);\n } catch (error) {\n lastError = error;\n }\n }\n throw lastError instanceof Error\n ? lastError\n : new Error(\"all destination addresses failed\");\n}\n\nexport async function deliverPendingEventsHandler(\n ctx: Pick,\n post: (request: DeliveryRequest) => Promise = postJsonPinned,\n): Promise<{ attempted: number; delivered: number }> {\n let attempted = 0;\n let delivered = 0;\n\n for (let index = 0; index < CLAIM_BATCH_LIMIT; index += 1) {\n const claimed: ClaimedDelivery[] = await ctx.runMutation(\n internal.commerce.deliveryState.claimPendingDeliveries,\n {},\n );\n const [item] = claimed;\n if (!item) break;\n attempted += 1;\n\n const check = checkDestinationUrl(item.url);\n if (!check.ok) {\n await ctx.runMutation(\n internal.commerce.deliveryState.recordDeliveryResult,\n {\n deliveryId: item.deliveryId,\n leaseToken: item.leaseToken,\n ok: false,\n error: `destination rejected: ${check.reason}`,\n retryable: false,\n },\n );\n continue;\n }\n\n const timestamp = Math.floor(Date.now() / 1000);\n const signature = await signPayloadWithRotation(\n {\n current: item.secret,\n ...(item.previousSecret ? { previous: item.previousSecret } : {}),\n },\n timestamp,\n item.body,\n );\n\n try {\n const status = await post({\n url: check.url,\n headers: {\n \"content-type\": CONTENT_TYPE,\n [SIGNATURE_HEADER]: signature,\n [TIMESTAMP_HEADER]: String(timestamp),\n [EVENT_ID_HEADER]: item.eventId,\n [DELIVERY_ID_HEADER]: item.deliveryId,\n },\n body: item.body,\n });\n const ok = status >= 200 && status < 300;\n if (ok) delivered += 1;\n await ctx.runMutation(\n internal.commerce.deliveryState.recordDeliveryResult,\n {\n deliveryId: item.deliveryId,\n leaseToken: item.leaseToken,\n ok,\n statusCode: status,\n retryable: isRetryableStatus(status),\n },\n );\n } catch (error) {\n await ctx.runMutation(\n internal.commerce.deliveryState.recordDeliveryResult,\n {\n deliveryId: item.deliveryId,\n leaseToken: item.leaseToken,\n ok: false,\n error: error instanceof Error ? error.message : \"request failed\",\n retryable: true,\n },\n );\n }\n }\n\n return { attempted, delivered };\n}\n\nexport const deliverPendingEvents = internalAction({\n args: {},\n returns: v.object({ attempted: v.number(), delivered: v.number() }),\n handler: async (ctx) => deliverPendingEventsHandler(ctx),\n});\n", + "kit/convex/commerce/delivery.test.ts": "import { afterEach, describe, expect, it, vi } from \"vitest\";\nimport type { LookupFunction } from \"node:net\";\n\nimport {\n buildPinnedRequestOptions,\n deliverPendingEventsHandler,\n MAX_FALLBACK_ADDRESSES,\n postJsonPinned,\n resolvePublicAddresses,\n type DeliveryRequest,\n} from \"./delivery\";\nimport {\n DELIVERY_ID_HEADER,\n EVENT_ID_HEADER,\n SIGNATURE_HEADER,\n TIMESTAMP_HEADER,\n} from \"./signing\";\n\nconst claimed = {\n deliveryId: \"outboundDeliveries_1\",\n leaseToken: \"lease-1\",\n attempts: 0,\n url: \"https://hooks.example.com/iapkit?source=test\",\n secret: \"whsec_test\",\n body: JSON.stringify({ eventType: \"subscription.renewed\" }),\n eventId: \"commerceEvents_1\",\n} as const;\n\nafterEach(() => {\n vi.useRealTimers();\n});\n\ndescribe(\"deliverPendingEventsHandler\", () => {\n it(\"posts signed headers and records the response before claiming again\", async () => {\n vi.setSystemTime(new Date(\"2026-08-27T00:00:00.000Z\"));\n let claimCount = 0;\n const recorded: Array> = [];\n const runMutation = vi.fn(async (_reference, args) => {\n if (Object.keys(args).length === 0) {\n claimCount += 1;\n return claimCount === 1 ? [claimed] : [];\n }\n recorded.push(args);\n return null;\n });\n const requests: DeliveryRequest[] = [];\n\n await expect(\n deliverPendingEventsHandler({ runMutation } as never, async (request) => {\n requests.push(request);\n return 204;\n }),\n ).resolves.toEqual({ attempted: 1, delivered: 1 });\n\n expect(requests).toHaveLength(1);\n expect(requests[0].url.toString()).toBe(claimed.url);\n expect(requests[0].body).toBe(claimed.body);\n expect(requests[0].headers[EVENT_ID_HEADER]).toBe(claimed.eventId);\n expect(requests[0].headers[DELIVERY_ID_HEADER]).toBe(claimed.deliveryId);\n expect(requests[0].headers[TIMESTAMP_HEADER]).toBe(\"1787788800\");\n expect(requests[0].headers[SIGNATURE_HEADER]).toMatch(/^v1=[0-9a-f]{64}$/);\n expect(recorded).toEqual([\n expect.objectContaining({\n deliveryId: claimed.deliveryId,\n leaseToken: claimed.leaseToken,\n ok: true,\n statusCode: 204,\n retryable: false,\n }),\n ]);\n });\n\n it(\"records redirects as permanent failures without following them\", async () => {\n let claimCount = 0;\n const recorded: Array> = [];\n const runMutation = vi.fn(async (_reference, args) => {\n if (Object.keys(args).length === 0) {\n claimCount += 1;\n return claimCount === 1 ? [claimed] : [];\n }\n recorded.push(args);\n return null;\n });\n const post = vi.fn(async () => 302);\n\n await expect(\n deliverPendingEventsHandler({ runMutation } as never, post),\n ).resolves.toEqual({ attempted: 1, delivered: 0 });\n expect(post).toHaveBeenCalledTimes(1);\n expect(recorded[0]).toMatchObject({\n ok: false,\n statusCode: 302,\n retryable: false,\n });\n });\n\n it(\"rejects an unsafe stored URL before issuing a request\", async () => {\n let claimCount = 0;\n const recorded: Array> = [];\n const unsafeClaim = { ...claimed, url: \"https://127.0.0.1/hook\" };\n const runMutation = vi.fn(async (_reference, args) => {\n if (Object.keys(args).length === 0) {\n claimCount += 1;\n return claimCount === 1 ? [unsafeClaim] : [];\n }\n recorded.push(args);\n return null;\n });\n const post = vi.fn(async () => 204);\n\n await expect(\n deliverPendingEventsHandler({ runMutation } as never, post),\n ).resolves.toEqual({ attempted: 1, delivered: 0 });\n expect(post).not.toHaveBeenCalled();\n expect(recorded[0]).toMatchObject({\n deliveryId: claimed.deliveryId,\n leaseToken: claimed.leaseToken,\n ok: false,\n error: \"destination rejected: host-not-public\",\n retryable: false,\n });\n });\n\n it(\"records transport failures as retryable\", async () => {\n let claimCount = 0;\n const recorded: Array> = [];\n const runMutation = vi.fn(async (_reference, args) => {\n if (Object.keys(args).length === 0) {\n claimCount += 1;\n return claimCount === 1 ? [claimed] : [];\n }\n recorded.push(args);\n return null;\n });\n\n await expect(\n deliverPendingEventsHandler({ runMutation } as never, async () => {\n throw new Error(\"connection reset\");\n }),\n ).resolves.toEqual({ attempted: 1, delivered: 0 });\n expect(recorded[0]).toMatchObject({\n deliveryId: claimed.deliveryId,\n leaseToken: claimed.leaseToken,\n ok: false,\n error: \"connection reset\",\n retryable: true,\n });\n });\n});\n\ndescribe(\"resolvePublicAddresses\", () => {\n it(\"rejects private, shared and link-local DNS answers\", async () => {\n for (const address of [\n \"127.0.0.1\",\n \"100.64.0.1\",\n \"169.254.169.254\",\n \"::1\",\n ]) {\n await expect(\n resolvePublicAddresses(\"hooks.example.com\", async () => [\n { address, family: address.includes(\":\") ? 6 : 4 },\n ]),\n ).rejects.toThrow(/non-public/);\n }\n });\n\n it(\"rejects a mixed public/private DNS response\", async () => {\n await expect(\n resolvePublicAddresses(\"hooks.example.com\", async () => [\n { address: \"93.184.216.34\", family: 4 },\n { address: \"10.0.0.5\", family: 4 },\n ]),\n ).rejects.toThrow(/non-public/);\n });\n\n it(\"accepts only-public answers for a pinned connection\", async () => {\n await expect(\n resolvePublicAddresses(\"hooks.example.com\", async () => [\n { address: \"93.184.216.34\", family: 4 },\n { address: \"2606:4700:4700::1111\", family: 6 },\n ]),\n ).resolves.toHaveLength(2);\n });\n\n it(\"caps a tenant-controlled DNS answer set\", async () => {\n const addresses = await resolvePublicAddresses(\n \"hooks.example.com\",\n async () =>\n Array.from({ length: 20 }, (_, index) => ({\n address: `93.184.216.${index + 1}`,\n family: 4,\n })),\n );\n expect(addresses).toHaveLength(MAX_FALLBACK_ADDRESSES);\n });\n\n it(\"falls back across validated addresses within one request deadline\", async () => {\n const attempted: string[] = [];\n const request: DeliveryRequest = {\n url: new URL(\"https://hooks.example.com/iapkit\"),\n headers: { \"content-type\": \"application/json\" },\n body: \"{}\",\n };\n const status = await postJsonPinned(\n request,\n async () => [\n { address: \"93.184.216.34\", family: 4 },\n { address: \"2606:4700:4700::1111\", family: 6 },\n ],\n async (_request, address, timeoutMs) => {\n attempted.push(address.address);\n expect(timeoutMs).toBeGreaterThan(0);\n if (attempted.length === 1) throw new Error(\"network unreachable\");\n return 204;\n },\n );\n expect(status).toBe(204);\n expect(attempted).toEqual([\"93.184.216.34\", \"2606:4700:4700::1111\"]);\n });\n\n it(\"pins lookup while preserving TLS SNI and the full request path\", () => {\n const request: DeliveryRequest = {\n url: new URL(\"https://hooks.example.com:8443/iapkit?source=test\"),\n headers: { \"content-type\": \"application/json\" },\n body: \"{}\",\n };\n const options = buildPinnedRequestOptions(request, {\n address: \"93.184.216.34\",\n family: 4,\n });\n expect(options).toMatchObject({\n protocol: \"https:\",\n hostname: \"hooks.example.com\",\n servername: \"hooks.example.com\",\n port: \"8443\",\n path: \"/iapkit?source=test\",\n method: \"POST\",\n headers: request.headers,\n });\n let pinned: unknown;\n (options.lookup as LookupFunction)(\n \"hooks.example.com\",\n { all: false },\n (error, address, family) => {\n expect(error).toBeNull();\n pinned = { address, family };\n },\n );\n expect(pinned).toEqual({ address: \"93.184.216.34\", family: 4 });\n });\n});\n", + "kit/convex/subscriptions/internal.ts": "import {\n internalMutation,\n internalQuery,\n type MutationCtx,\n type QueryCtx,\n} from \"../_generated/server\";\nimport { ConvexError, v } from \"convex/values\";\nimport type { Doc, Id } from \"../_generated/dataModel\";\nimport { internal } from \"../_generated/api\";\n\nimport { HarmonizedPurchaseState } from \"../purchases/purchaseState\";\nimport {\n applySubscriptionTransition,\n entitlementActive,\n type CurrentSubscription,\n type SubscriptionEventInput,\n} from \"./stateMachine\";\nimport { applyStatsTransition, statsContributionFor } from \"./stats\";\nimport { assertProjectWritable } from \"../projects/writable\";\nimport { isValidSubscriptionUserId } from \"./limits\";\nimport { isUserErasureRequested } from \"./erasure\";\n\nexport const USER_ERASURE_BATCH_SIZE = 100;\nexport const USER_ERASURE_JOB_RETENTION_MS = 7 * 24 * 60 * 60 * 1_000;\nconst USER_ERASURE_STALE_MS = 10 * 60 * 1_000;\nconst USER_ERASURE_PRUNER_BATCH_SIZE = 100;\n\nconst subscriptionPlatformValidator = v.union(\n v.literal(\"IOS\"),\n v.literal(\"Android\"),\n);\n\ntype RawEventInput = Pick<\n Doc<\"webhookEvents\">,\n | \"type\"\n | \"productId\"\n | \"subscriptionState\"\n | \"expiresAt\"\n | \"renewsAt\"\n | \"willRenew\"\n | \"cancellationReason\"\n | \"currency\"\n | \"priceAmountMicros\"\n | \"platform\"\n | \"effectiveImmediately\"\n> & { purchaseToken: string };\ntype SubscriptionState = Doc<\"subscriptions\">[\"state\"];\ntype SubscriptionCancellationReason = NonNullable<\n Doc<\"subscriptions\">[\"cancellationReason\"]\n>;\ntype SubscriptionPlatform = Doc<\"subscriptions\">[\"platform\"];\n\nexport type VerifiedSubscriptionInput = {\n platform: SubscriptionPlatform;\n productId: string;\n purchaseState: HarmonizedPurchaseState;\n subscriptionState?: string;\n expiresAt?: number;\n renewsAt?: number;\n willRenew?: boolean;\n currency?: string;\n priceAmountMicros?: number;\n revocationReasonIOS?: number;\n};\n\nexport type VerifiedSubscriptionSnapshot = {\n productId: string;\n state: SubscriptionState;\n expiresAt?: number;\n renewsAt?: number;\n willRenew?: boolean;\n cancellationReason?: SubscriptionCancellationReason;\n clearCancellationReason?: boolean;\n currency?: string;\n priceAmountMicros?: number;\n};\n\ntype ExistingSubscriptionSnapshotFields = Pick<\n Doc<\"subscriptions\">,\n | \"expiresAt\"\n | \"renewsAt\"\n | \"willRenew\"\n | \"cancellationReason\"\n | \"currency\"\n | \"priceAmountMicros\"\n>;\n\ntype RecordVerifiedSubscriptionArgs = {\n projectId: Id<\"projects\">;\n platform: SubscriptionPlatform;\n purchaseToken: string;\n productId: string;\n purchaseState: string;\n subscriptionState?: string;\n expiresAt?: number;\n renewsAt?: number;\n willRenew?: boolean;\n currency?: string;\n priceAmountMicros?: number;\n revocationReasonIOS?: number;\n};\n\ntype BindSubscriptionToUserArgs = {\n projectId: Id<\"projects\">;\n purchaseToken: string;\n userId: string;\n};\n\ninterface PersistSubscriptionSnapshotArgs {\n projectId: Id<\"projects\">;\n platform: SubscriptionPlatform;\n purchaseToken: string;\n existing: Doc<\"subscriptions\"> | null;\n next: NonNullable;\n now: number;\n lastEvent?: Pick<\n Doc<\"webhookEvents\">,\n | \"_id\"\n | \"_creationTime\"\n | \"type\"\n | \"occurredAt\"\n | \"sourceNotificationId\"\n | \"environment\"\n | \"productId\"\n | \"applicationId\"\n | \"transactionId\"\n | \"originalTransactionId\"\n | \"currency\"\n | \"priceAmountMicros\"\n >;\n}\n\ninterface ApplySubscriptionEventArgs {\n projectId: Id<\"projects\">;\n eventId: Id<\"webhookEvents\">;\n}\n\ninterface ApplySubscriptionEventResult {\n transition: string | null;\n active: boolean;\n subscriptionId?: Id<\"subscriptions\">;\n}\n\n// Apply a webhook event to the canonical `subscriptions` table. The event's\n// durable appliedAt marker is committed in the same Convex transaction as\n// the subscription and stats writes, so both retry gaps are safe: a crash\n// before this mutation can be repaired, while any event this mutation already\n// processed can never be replayed after a newer lastEventId replaces it.\nimport { emitCommerceEvent } from \"../commerce/internal\";\n\nexport const applySubscriptionEvent = internalMutation({\n args: {\n projectId: v.id(\"projects\"),\n eventId: v.id(\"webhookEvents\"),\n },\n returns: v.object({\n transition: v.union(v.string(), v.null()),\n active: v.boolean(),\n subscriptionId: v.optional(v.id(\"subscriptions\")),\n }),\n handler: async (ctx, args) => applySubscriptionEventHandler(ctx, args),\n});\n\nexport async function applySubscriptionEventHandler(\n ctx: MutationCtx,\n args: ApplySubscriptionEventArgs,\n): Promise {\n const project = await assertProjectWritable(ctx, args.projectId);\n const storedEvent = await ctx.db.get(args.eventId);\n if (!storedEvent || storedEvent.projectId !== args.projectId) {\n throw new Error(\"Webhook event not found for project\");\n }\n\n const now = Date.now();\n if (storedEvent.productKind === \"one_time\") {\n if (storedEvent.appliedAt === undefined) {\n await ctx.db.patch(storedEvent._id, { appliedAt: now });\n }\n return { transition: null, active: false };\n }\n if (!storedEvent.purchaseToken) {\n if (storedEvent.appliedAt === undefined) {\n await ctx.db.patch(storedEvent._id, { appliedAt: now });\n }\n return { transition: null, active: false };\n }\n\n const supersedingResolution = await findSupersedingSubscription(\n ctx,\n args.projectId,\n storedEvent.purchaseToken,\n );\n const existingByCurrentToken = supersedingResolution.aliased\n ? null\n : await findSubscriptionByToken(\n ctx,\n args.projectId,\n storedEvent.purchaseToken,\n );\n if (supersedingResolution.aliased) {\n const supersedingSubscription = supersedingResolution.subscription;\n const aliasedTransition =\n storedEvent.type === \"PurchaseRefunded\"\n ? (\"Refunded\" as const)\n : storedEvent.type === \"SubscriptionRevoked\"\n ? (\"Revoked\" as const)\n : null;\n const active = supersedingSubscription\n ? isActive(supersedingSubscription, now)\n : false;\n const firstApplication = storedEvent.appliedAt === undefined;\n if (firstApplication) {\n if (supersedingSubscription && aliasedTransition) {\n const predecessorProductId =\n storedEvent.productId ?? supersedingResolution.productId;\n await emitCommerceEvent(ctx, {\n projectId: args.projectId,\n transition: aliasedTransition,\n active: false,\n previouslyActive: false,\n sourceEvent: {\n ...storedEvent,\n productId: predecessorProductId,\n },\n ...(predecessorProductId\n ? {\n subscription: {\n state: aliasedTransition,\n productId: predecessorProductId,\n ...(supersedingSubscription.userId\n ? { userId: supersedingSubscription.userId }\n : {}),\n },\n }\n : {}),\n });\n }\n await ctx.db.patch(storedEvent._id, { appliedAt: now });\n }\n return {\n transition: firstApplication ? aliasedTransition : null,\n active,\n ...(supersedingSubscription\n ? { subscriptionId: supersedingSubscription._id }\n : {}),\n };\n }\n const linkedResolution = storedEvent.linkedPurchaseToken\n ? await findSupersedingSubscription(\n ctx,\n args.projectId,\n storedEvent.linkedPurchaseToken,\n )\n : ({ aliased: false } as const);\n const linkedExact =\n storedEvent.linkedPurchaseToken && !linkedResolution.aliased\n ? await findSubscriptionByToken(\n ctx,\n args.projectId,\n storedEvent.linkedPurchaseToken,\n )\n : null;\n if (linkedResolution.aliased && !linkedResolution.subscription) {\n if (storedEvent.appliedAt === undefined) {\n await ctx.db.patch(storedEvent._id, { appliedAt: now });\n }\n return { transition: null, active: false };\n }\n const linkedExisting =\n linkedExact ??\n (linkedResolution.aliased ? linkedResolution.subscription : null);\n let existing = preferredReplacementSnapshot(\n existingByCurrentToken,\n linkedExisting,\n );\n const priorStoreSnapshot = existingByCurrentToken?.lastEventId\n ? existingByCurrentToken\n : linkedExisting?.lastEventId\n ? linkedExisting\n : null;\n if (storedEvent.appliedAt !== undefined) {\n return {\n transition: null,\n active: existing ? isActive(existing, now) : false,\n ...(existing ? { subscriptionId: existing._id } : {}),\n };\n }\n\n // A linked-token event can arrive after both tokens already have rows. Keep\n // current-token state, merge predecessor identity/history, and remove the\n // duplicate contribution before applying same-token ordering.\n if (\n existingByCurrentToken &&\n linkedExisting &&\n existingByCurrentToken._id !== linkedExisting._id\n ) {\n const accountErased =\n existingByCurrentToken.accountErased === true ||\n linkedExisting.accountErased === true;\n if (\n !accountErased &&\n existingByCurrentToken.userId &&\n linkedExisting.userId &&\n existingByCurrentToken.userId !== linkedExisting.userId\n ) {\n throw new ConvexError({\n code: \"SUBSCRIPTION_USER_CONFLICT\",\n message: \"Linked Google purchase tokens belong to different users.\",\n });\n }\n const survivor = preferredReplacementSnapshot(\n existingByCurrentToken,\n linkedExisting,\n )!;\n const removed =\n survivor._id === existingByCurrentToken._id\n ? linkedExisting\n : existingByCurrentToken;\n const invalidatedBinding = accountErased\n ? [survivor, removed].find(\n (sub) =>\n !sub.accountErased &&\n sub.userId &&\n sub.lastEventId &&\n isActive(sub, sub.updatedAt),\n )\n : undefined;\n if (\n invalidatedBinding?.userId &&\n !(await isUserErasureRequested(ctx, project, invalidatedBinding.userId))\n ) {\n // Reconcile the prior grant without repeating a charge or an erased identity.\n await emitCommerceEvent(ctx, {\n projectId: args.projectId,\n transition: null,\n active: false,\n previouslyActive: true,\n sourceEvent: {\n ...storedEvent,\n currency: undefined,\n priceAmountMicros: undefined,\n amountProvenance: undefined,\n },\n subscriptionId: invalidatedBinding._id,\n subscription: {\n state: invalidatedBinding.state,\n productId: invalidatedBinding.productId,\n expiresAt: invalidatedBinding.expiresAt,\n renewsAt: invalidatedBinding.renewsAt,\n willRenew: invalidatedBinding.willRenew,\n cancellationReason: invalidatedBinding.cancellationReason,\n userId: invalidatedBinding.userId,\n },\n });\n }\n const removedPeriod = await fetchBillingPeriod(\n ctx,\n args.projectId,\n removed.platform,\n removed.productId,\n );\n await applyStatsTransition(\n ctx,\n args.projectId,\n statsContributionFor(removed, removedPeriod, now),\n null,\n );\n await ctx.db.delete(removed._id);\n existing = {\n ...survivor,\n purchaseToken: storedEvent.purchaseToken,\n accountErased: accountErased || undefined,\n userId: accountErased ? undefined : (survivor.userId ?? removed.userId),\n startedAt: Math.min(survivor.startedAt, removed.startedAt),\n };\n await ctx.db.patch(survivor._id, {\n purchaseToken: existing.purchaseToken,\n accountErased: existing.accountErased,\n userId: existing.userId,\n startedAt: existing.startedAt,\n updatedAt: now,\n });\n await recordSubscriptionTokenAlias(ctx, {\n projectId: args.projectId,\n purchaseToken: removed.purchaseToken,\n successorPurchaseToken: existing.purchaseToken,\n predecessorProductId: removed.productId,\n now,\n });\n }\n\n // Compare with the last persisted gate; today's clock may already have expired it.\n const previouslyActive = priorStoreSnapshot\n ? isActive(priorStoreSnapshot, priorStoreSnapshot.updatedAt)\n : false;\n const noOpResult = (): ApplySubscriptionEventResult => ({\n transition: null,\n active: existing ? isActive(existing, now) : false,\n ...(existing ? { subscriptionId: existing._id } : {}),\n });\n\n // Store timestamps only order events for the same purchase token. A linked\n // predecessor can expire after its replacement became active.\n const orderingExisting = existingByCurrentToken;\n\n // Rollout compatibility for events written before appliedAt existed. The\n // current last event proves itself applied; an event older than the current\n // last event must be marked handled without being allowed to roll state\n // backwards. Store timestamps are only millisecond-precision, so ingestion\n // order breaks ties between distinct same-timestamp events. A recorded-but-\n // unapplied newest event still falls through and repairs the original\n // action/mutation gap.\n if (\n orderingExisting?.lastEventSourceNotificationId ===\n storedEvent.sourceNotificationId\n ) {\n await ctx.db.patch(storedEvent._id, { appliedAt: now });\n return noOpResult();\n }\n if (orderingExisting?.lastEventOccurredAt !== undefined) {\n const stale =\n orderingExisting.lastEventOccurredAt > storedEvent.occurredAt ||\n (orderingExisting.lastEventOccurredAt === storedEvent.occurredAt &&\n (orderingExisting.lastEventCreationTime ?? 0) >\n storedEvent._creationTime);\n if (stale) {\n await ctx.db.patch(storedEvent._id, { appliedAt: now });\n return noOpResult();\n }\n } else if (orderingExisting?.lastEventId) {\n if (orderingExisting.lastEventId === args.eventId) {\n await ctx.db.patch(storedEvent._id, { appliedAt: now });\n return noOpResult();\n }\n const lastEvent = await ctx.db.get(orderingExisting.lastEventId);\n if (\n lastEvent?.projectId === args.projectId &&\n lastEvent.purchaseToken === storedEvent.purchaseToken &&\n lastEvent.platform === storedEvent.platform &&\n (lastEvent.occurredAt > storedEvent.occurredAt ||\n (lastEvent.occurredAt === storedEvent.occurredAt &&\n lastEvent._creationTime > storedEvent._creationTime))\n ) {\n await ctx.db.patch(storedEvent._id, { appliedAt: now });\n return noOpResult();\n }\n }\n\n // Google subscription bundles can report ITEMS_CHANGED without identifying\n // which line item changed. Keep the raw event for operations, but never\n // overwrite the singular canonical product with an arbitrary bundle item.\n // Linked replacements still move the canonical row after the ordering guard.\n if (\n storedEvent.type === \"SubscriptionProductChanged\" &&\n !storedEvent.productId\n ) {\n if (existing) {\n const verifiedReplacementProductChanged =\n existingByCurrentToken?.lastEventId === undefined &&\n priorStoreSnapshot !== null &&\n priorStoreSnapshot.productId !== existing.productId;\n const subscriptionId = await persistSubscriptionSnapshot(ctx, {\n projectId: args.projectId,\n platform: existing.platform,\n purchaseToken: storedEvent.purchaseToken,\n existing,\n next: {\n state: existing.state,\n productId: existing.productId,\n expiresAt: existing.expiresAt,\n renewsAt: existing.renewsAt,\n willRenew: existing.willRenew,\n cancellationReason: existing.cancellationReason,\n currency: existing.currency,\n priceAmountMicros: existing.priceAmountMicros,\n },\n now,\n lastEvent: storedEvent,\n });\n await recordSubscriptionTokenAlias(ctx, {\n projectId: args.projectId,\n purchaseToken: existing.purchaseToken,\n successorPurchaseToken: storedEvent.purchaseToken,\n predecessorProductId: existing.productId,\n now,\n });\n await recordSubscriptionTokenAlias(ctx, {\n projectId: args.projectId,\n purchaseToken: storedEvent.linkedPurchaseToken,\n successorPurchaseToken: storedEvent.purchaseToken,\n predecessorProductId:\n priorStoreSnapshot?.productId ?? existing.productId,\n now,\n });\n await ctx.db.patch(storedEvent._id, { appliedAt: now });\n const active = isActive(existing, now);\n if (verifiedReplacementProductChanged) {\n await emitCommerceEvent(ctx, {\n projectId: args.projectId,\n transition: \"ProductChanged\",\n active,\n previouslyActive: active,\n sourceEvent: storedEvent,\n subscriptionId,\n previousProductId: priorStoreSnapshot.productId,\n subscription: {\n state: existing.state,\n productId: existing.productId,\n ...(existing.expiresAt !== undefined\n ? { expiresAt: existing.expiresAt }\n : {}),\n ...(existing.renewsAt !== undefined\n ? { renewsAt: existing.renewsAt }\n : {}),\n ...(existing.willRenew !== undefined\n ? { willRenew: existing.willRenew }\n : {}),\n ...(existing.cancellationReason\n ? { cancellationReason: existing.cancellationReason }\n : {}),\n ...(existing.userId ? { userId: existing.userId } : {}),\n },\n });\n }\n return {\n transition: verifiedReplacementProductChanged ? \"ProductChanged\" : null,\n active,\n subscriptionId,\n };\n }\n await ctx.db.patch(storedEvent._id, { appliedAt: now });\n return noOpResult();\n }\n\n const current: CurrentSubscription = existing\n ? {\n state: existing.state,\n productId: existing.productId,\n expiresAt: existing.expiresAt,\n renewsAt: existing.renewsAt,\n willRenew: existing.willRenew,\n cancellationReason: existing.cancellationReason,\n currency: existing.currency,\n priceAmountMicros: existing.priceAmountMicros,\n }\n : null;\n const event: RawEventInput = {\n type: storedEvent.type,\n productId: storedEvent.productId,\n subscriptionState: storedEvent.subscriptionState,\n expiresAt: storedEvent.expiresAt,\n renewsAt: storedEvent.renewsAt,\n willRenew: storedEvent.willRenew,\n cancellationReason: storedEvent.cancellationReason,\n currency: storedEvent.currency,\n priceAmountMicros: storedEvent.priceAmountMicros,\n platform: storedEvent.platform,\n effectiveImmediately: storedEvent.effectiveImmediately,\n purchaseToken: storedEvent.purchaseToken,\n };\n const transition = applySubscriptionTransition(\n current,\n coerceEventInput(event),\n );\n const linkedStartedOnActivePredecessor =\n storedEvent.type === \"SubscriptionStarted\" &&\n storedEvent.linkedPurchaseToken !== undefined &&\n priorStoreSnapshot !== null &&\n previouslyActive;\n const effectiveTransition = linkedStartedOnActivePredecessor\n ? transition.next?.productId !== priorStoreSnapshot.productId\n ? \"ProductChanged\"\n : priorStoreSnapshot.willRenew === false &&\n transition.next?.willRenew === true\n ? \"Uncanceled\"\n : transition.next?.expiresAt !== undefined &&\n priorStoreSnapshot.expiresAt !== undefined &&\n transition.next.expiresAt > priorStoreSnapshot.expiresAt\n ? \"Renewed\"\n : null\n : transition.transition;\n const firstStoreEventAfterVerification =\n storedEvent.type === \"SubscriptionStarted\" &&\n existing !== null &&\n existing.lastEventId === undefined &&\n priorStoreSnapshot === null;\n // Computed before persistSubscriptionSnapshot stamps lastEvent* onto the\n // row: a record bootstrapped by receipt verification has no store history,\n // so a price change or deferral arriving as its first store event has no\n // baseline to describe. The mapping vectors pin these to no event.\n const priceOrDeferralWithoutBaseline =\n existing !== null &&\n existing.lastEventId === undefined &&\n priorStoreSnapshot === null &&\n (effectiveTransition === \"PriceChanged\" ||\n effectiveTransition === \"Deferred\");\n const previousProductId =\n priorStoreSnapshot?.productId ?? existing?.productId;\n\n if (!transition.next) {\n await ctx.db.patch(storedEvent._id, { appliedAt: now });\n return {\n transition: transition.transition ?? null,\n active: false,\n ...(existing ? { subscriptionId: existing._id } : {}),\n };\n }\n\n const subscriptionId = await persistSubscriptionSnapshot(ctx, {\n projectId: args.projectId,\n platform: event.platform,\n purchaseToken: event.purchaseToken,\n existing,\n next: transition.next,\n now,\n lastEvent: storedEvent,\n });\n await recordSubscriptionTokenAlias(ctx, {\n projectId: args.projectId,\n purchaseToken: existing?.purchaseToken,\n successorPurchaseToken: storedEvent.purchaseToken,\n predecessorProductId: existing?.productId,\n now,\n });\n await recordSubscriptionTokenAlias(ctx, {\n projectId: args.projectId,\n purchaseToken: storedEvent.linkedPurchaseToken,\n successorPurchaseToken: storedEvent.purchaseToken,\n predecessorProductId: priorStoreSnapshot?.productId ?? existing?.productId,\n now,\n });\n await ctx.db.patch(storedEvent._id, { appliedAt: now });\n const active = entitlementActive(transition.next, now);\n // A record bootstrapped by receipt verification has no store history, so a\n // price change or deferral arriving as its first store event has no\n // baseline to describe. The mapping vectors pin these to no event.\n const commerceTransition = linkedStartedOnActivePredecessor\n ? effectiveTransition\n : firstStoreEventAfterVerification\n ? \"Started\"\n : priceOrDeferralWithoutBaseline\n ? null\n : effectiveTransition;\n await emitCommerceEvent(ctx, {\n projectId: args.projectId,\n transition: commerceTransition ?? null,\n active,\n previouslyActive,\n sourceEvent: storedEvent,\n subscriptionId,\n ...(previousProductId && previousProductId !== transition.next.productId\n ? { previousProductId }\n : {}),\n subscription: {\n state: transition.next.state,\n productId: transition.next.productId,\n ...(transition.next.expiresAt !== undefined\n ? { expiresAt: transition.next.expiresAt }\n : {}),\n ...(transition.next.renewsAt !== undefined\n ? { renewsAt: transition.next.renewsAt }\n : {}),\n ...(transition.next.willRenew !== undefined\n ? { willRenew: transition.next.willRenew }\n : {}),\n ...(transition.next.cancellationReason\n ? { cancellationReason: transition.next.cancellationReason }\n : {}),\n ...(existing?.userId ? { userId: existing.userId } : {}),\n },\n });\n\n return {\n transition: effectiveTransition ?? null,\n active,\n subscriptionId,\n };\n}\n\nexport function buildVerifiedSubscriptionSnapshot(\n input: VerifiedSubscriptionInput,\n): VerifiedSubscriptionSnapshot | null {\n if (input.productId.length === 0 || input.productId === \"unknown\") {\n return null;\n }\n if (input.purchaseState === HarmonizedPurchaseState.INAUTHENTIC) return null;\n\n const base: Pick<\n VerifiedSubscriptionSnapshot,\n | \"productId\"\n | \"expiresAt\"\n | \"renewsAt\"\n | \"willRenew\"\n | \"currency\"\n | \"priceAmountMicros\"\n > = {\n productId: input.productId,\n expiresAt: input.expiresAt,\n renewsAt: input.renewsAt,\n willRenew: input.willRenew,\n currency: input.currency,\n priceAmountMicros: input.priceAmountMicros,\n };\n\n if (input.platform === \"IOS\") {\n switch (input.purchaseState) {\n case HarmonizedPurchaseState.ENTITLED:\n return {\n ...base,\n state: \"Active\",\n cancellationReason: undefined,\n clearCancellationReason: true,\n };\n case HarmonizedPurchaseState.EXPIRED:\n return {\n ...base,\n state: \"Expired\",\n willRenew: false,\n };\n case HarmonizedPurchaseState.CANCELED:\n return {\n ...base,\n state: \"Revoked\",\n willRenew: false,\n // Apple's revocationReason field covers a transaction \"refunded\n // ... or revoked from family sharing\": value 1 is unambiguously a\n // refund, while 0 also covers Family Sharing loss. Mirroring the\n // webhook REVOKE policy, only the unambiguous value asserts money\n // moved back; webhook REFUND notifications carry the rest.\n ...(input.revocationReasonIOS === 1\n ? { cancellationReason: \"Refunded\" as const }\n : {}),\n };\n case HarmonizedPurchaseState.PENDING_ACKNOWLEDGMENT:\n case HarmonizedPurchaseState.PENDING:\n case HarmonizedPurchaseState.UNKNOWN:\n return {\n ...base,\n state: \"Unknown\",\n };\n case HarmonizedPurchaseState.READY_TO_CONSUME:\n case HarmonizedPurchaseState.CONSUMED:\n return null;\n }\n }\n\n switch (input.purchaseState) {\n case HarmonizedPurchaseState.UNKNOWN:\n return {\n ...base,\n state: \"Unknown\",\n };\n case HarmonizedPurchaseState.EXPIRED:\n return {\n ...base,\n state: \"Expired\",\n willRenew: false,\n };\n case HarmonizedPurchaseState.READY_TO_CONSUME:\n case HarmonizedPurchaseState.CONSUMED:\n return null;\n case HarmonizedPurchaseState.ENTITLED:\n case HarmonizedPurchaseState.CANCELED:\n break;\n }\n\n switch (input.subscriptionState?.toUpperCase()) {\n case \"SUBSCRIPTION_STATE_ACTIVE\":\n return {\n ...base,\n state: \"Active\",\n willRenew: input.willRenew ?? true,\n cancellationReason: undefined,\n clearCancellationReason: true,\n };\n case \"SUBSCRIPTION_STATE_CANCELED\":\n return {\n ...base,\n state: \"Active\",\n willRenew: false,\n };\n case \"SUBSCRIPTION_STATE_IN_GRACE_PERIOD\":\n return {\n ...base,\n state: \"InGracePeriod\",\n willRenew: input.willRenew ?? true,\n cancellationReason: undefined,\n clearCancellationReason: true,\n };\n case \"SUBSCRIPTION_STATE_ON_HOLD\":\n return {\n ...base,\n state: \"InBillingRetry\",\n cancellationReason: \"BillingError\",\n };\n case \"SUBSCRIPTION_STATE_PAUSED\":\n return {\n ...base,\n state: \"Paused\",\n willRenew: false,\n };\n case \"SUBSCRIPTION_STATE_EXPIRED\":\n return {\n ...base,\n state: \"Expired\",\n willRenew: false,\n };\n case \"SUBSCRIPTION_STATE_PENDING\":\n return {\n ...base,\n state: \"Unknown\",\n };\n }\n\n return {\n ...base,\n state:\n input.purchaseState === HarmonizedPurchaseState.ENTITLED ||\n input.purchaseState === HarmonizedPurchaseState.PENDING_ACKNOWLEDGMENT\n ? \"Active\"\n : \"Unknown\",\n };\n}\n\nexport function mergeVerifiedSubscriptionSnapshot(\n existing: ExistingSubscriptionSnapshotFields | null,\n snapshot: VerifiedSubscriptionSnapshot,\n): VerifiedSubscriptionSnapshot {\n if (!existing) return snapshot;\n\n return {\n ...snapshot,\n expiresAt: snapshot.expiresAt ?? existing.expiresAt,\n renewsAt:\n snapshot.willRenew === false\n ? undefined\n : (snapshot.renewsAt ?? existing.renewsAt),\n willRenew: snapshot.willRenew ?? existing.willRenew,\n cancellationReason:\n snapshot.cancellationReason !== undefined ||\n snapshot.clearCancellationReason\n ? snapshot.cancellationReason\n : existing.cancellationReason,\n currency: snapshot.currency ?? existing.currency,\n priceAmountMicros: snapshot.priceAmountMicros ?? existing.priceAmountMicros,\n };\n}\n\n// Receipt verification is the synchronous bootstrap path for\n// subscriptions. Webhooks keep lifecycle state fresh later, but a\n// successful verify must be enough for SDK clients to bind the just-\n// purchased token to their app user.\nexport const recordVerifiedSubscription = internalMutation({\n args: {\n projectId: v.id(\"projects\"),\n platform: subscriptionPlatformValidator,\n purchaseToken: v.string(),\n productId: v.string(),\n purchaseState: v.string(),\n subscriptionState: v.optional(v.string()),\n expiresAt: v.optional(v.number()),\n renewsAt: v.optional(v.number()),\n willRenew: v.optional(v.boolean()),\n currency: v.optional(v.string()),\n priceAmountMicros: v.optional(v.number()),\n revocationReasonIOS: v.optional(v.number()),\n },\n returns: v.union(v.id(\"subscriptions\"), v.null()),\n handler: async (ctx, args) => recordVerifiedSubscriptionHandler(ctx, args),\n});\n\nexport async function recordVerifiedSubscriptionHandler(\n ctx: MutationCtx,\n args: RecordVerifiedSubscriptionArgs,\n): Promise | null> {\n await assertProjectWritable(ctx, args.projectId);\n const snapshot = buildVerifiedSubscriptionSnapshot({\n platform: args.platform,\n productId: args.productId,\n purchaseState: normalizeHarmonizedPurchaseState(args.purchaseState),\n subscriptionState: args.subscriptionState,\n expiresAt: args.expiresAt,\n renewsAt: args.renewsAt,\n willRenew: args.willRenew,\n currency: args.currency,\n priceAmountMicros: args.priceAmountMicros,\n revocationReasonIOS: args.revocationReasonIOS,\n });\n if (!snapshot) return null;\n\n const supersedingResolution = await findSupersedingSubscription(\n ctx,\n args.projectId,\n args.purchaseToken,\n );\n if (supersedingResolution.aliased) {\n return supersedingResolution.subscription?._id ?? null;\n }\n const existing = await findSubscriptionByToken(\n ctx,\n args.projectId,\n args.purchaseToken,\n );\n // Verification bootstraps a token before server notifications arrive. Once\n // a store event governs the row, a client can replay an older but still-valid\n // transaction; without comparable ordering metadata that snapshot must not\n // roll canonical product, state, or expiry backward.\n if (existing?.lastEventId) return existing._id;\n const now = Date.now();\n\n const next = mergeVerifiedSubscriptionSnapshot(existing, snapshot);\n return persistSubscriptionSnapshot(ctx, {\n projectId: args.projectId,\n platform: args.platform,\n purchaseToken: args.purchaseToken,\n existing,\n next,\n now,\n });\n}\n\nasync function persistSubscriptionSnapshot(\n ctx: MutationCtx,\n args: PersistSubscriptionSnapshotArgs,\n): Promise> {\n // Stats deltas must compare the old row against the old catalog entry\n // and the new row against the new one; otherwise product/platform changes\n // subtract the wrong MRR bucket.\n const afterBillingPeriod = await fetchBillingPeriod(\n ctx,\n args.projectId,\n args.platform,\n args.next.productId,\n );\n const beforeBillingPeriod =\n args.existing &&\n (args.existing.productId !== args.next.productId ||\n args.existing.platform !== args.platform)\n ? await fetchBillingPeriod(\n ctx,\n args.projectId,\n args.existing.platform,\n args.existing.productId,\n )\n : afterBillingPeriod;\n const beforeContribution = args.existing\n ? statsContributionFor(args.existing, beforeBillingPeriod, args.now)\n : null;\n\n const row = {\n purchaseToken: args.purchaseToken,\n productKind: \"subscription\" as const,\n ...(args.existing?.userId ? { userId: args.existing.userId } : {}),\n productId: args.next.productId,\n platform: args.platform,\n state: args.next.state,\n expiresAt: args.next.expiresAt,\n renewsAt: args.next.renewsAt,\n willRenew: args.next.willRenew,\n cancellationReason: args.next.cancellationReason,\n currency: args.next.currency,\n priceAmountMicros: args.next.priceAmountMicros,\n updatedAt: args.now,\n ...(args.lastEvent\n ? {\n lastEventId: args.lastEvent._id,\n lastEventOccurredAt: args.lastEvent.occurredAt,\n lastEventCreationTime: args.lastEvent._creationTime,\n lastEventSourceNotificationId: args.lastEvent.sourceNotificationId,\n lastEventSource: {\n type: args.lastEvent.type,\n environment: args.lastEvent.environment,\n productId: args.lastEvent.productId,\n applicationId: args.lastEvent.applicationId,\n transactionId: args.lastEvent.transactionId,\n originalTransactionId: args.lastEvent.originalTransactionId,\n currency: args.lastEvent.currency,\n priceAmountMicros: args.lastEvent.priceAmountMicros,\n },\n }\n : {}),\n };\n\n const subscriptionId = args.existing\n ? args.existing._id\n : await ctx.db.insert(\"subscriptions\", {\n projectId: args.projectId,\n startedAt: args.now,\n ...row,\n });\n\n if (args.existing) {\n await ctx.db.patch(args.existing._id, row);\n }\n\n const updatedRow = (await ctx.db.get(subscriptionId))!;\n const afterContribution = statsContributionFor(\n updatedRow,\n afterBillingPeriod,\n args.now,\n );\n await applyStatsTransition(\n ctx,\n args.projectId,\n beforeContribution,\n afterContribution,\n );\n\n return subscriptionId;\n}\n\nfunction findSubscriptionByToken(\n ctx: Pick,\n projectId: Id<\"projects\">,\n purchaseToken: string,\n): Promise | null> {\n return ctx.db\n .query(\"subscriptions\")\n .withIndex(\"by_project_and_token\", (q) =>\n q.eq(\"projectId\", projectId).eq(\"purchaseToken\", purchaseToken),\n )\n .unique();\n}\n\nconst MAX_SUBSCRIPTION_TOKEN_ALIAS_HOPS = 64;\n\ntype SupersedingSubscriptionResolution =\n | { aliased: false }\n | {\n aliased: true;\n subscription: Doc<\"subscriptions\"> | null;\n productId?: string;\n };\n\nasync function findSupersedingSubscription(\n ctx: Pick,\n projectId: Id<\"projects\">,\n purchaseToken: string,\n): Promise {\n let token = purchaseToken;\n let productId: string | undefined;\n const seen = new Set([token]);\n for (let hop = 0; hop <= MAX_SUBSCRIPTION_TOKEN_ALIAS_HOPS; hop += 1) {\n const alias = await ctx.db\n .query(\"subscriptionTokenAliases\")\n .withIndex(\"by_project_and_token\", (q) =>\n q.eq(\"projectId\", projectId).eq(\"purchaseToken\", token),\n )\n .unique();\n if (!alias) {\n return hop === 0\n ? { aliased: false }\n : {\n aliased: true,\n subscription: await findSubscriptionByToken(ctx, projectId, token),\n productId,\n };\n }\n if (hop === 0) productId = alias.predecessorProductId;\n if (hop === MAX_SUBSCRIPTION_TOKEN_ALIAS_HOPS) {\n return { aliased: true, subscription: null, productId };\n }\n if (seen.has(alias.successorPurchaseToken)) {\n return { aliased: true, subscription: null, productId };\n }\n token = alias.successorPurchaseToken;\n seen.add(token);\n }\n return { aliased: true, subscription: null, productId };\n}\n\nasync function recordSubscriptionTokenAlias(\n ctx: MutationCtx,\n args: {\n projectId: Id<\"projects\">;\n purchaseToken?: string;\n successorPurchaseToken: string;\n predecessorProductId?: string;\n now: number;\n },\n): Promise {\n if (\n !args.purchaseToken ||\n args.purchaseToken === args.successorPurchaseToken\n ) {\n return;\n }\n const existing = await ctx.db\n .query(\"subscriptionTokenAliases\")\n .withIndex(\"by_project_and_token\", (q) =>\n q\n .eq(\"projectId\", args.projectId)\n .eq(\"purchaseToken\", args.purchaseToken as string),\n )\n .unique();\n if (existing) {\n if (existing.successorPurchaseToken !== args.successorPurchaseToken) {\n await ctx.db.patch(existing._id, {\n successorPurchaseToken: args.successorPurchaseToken,\n predecessorProductId:\n existing.predecessorProductId ?? args.predecessorProductId,\n updatedAt: args.now,\n });\n }\n return;\n }\n await ctx.db.insert(\"subscriptionTokenAliases\", {\n projectId: args.projectId,\n purchaseToken: args.purchaseToken,\n successorPurchaseToken: args.successorPurchaseToken,\n predecessorProductId: args.predecessorProductId,\n createdAt: args.now,\n updatedAt: args.now,\n });\n}\n\nfunction preferredReplacementSnapshot(\n current: Doc<\"subscriptions\"> | null,\n linked: Doc<\"subscriptions\"> | null,\n): Doc<\"subscriptions\"> | null {\n if (!current) return linked;\n // Store timestamps from predecessor and replacement tokens are not a total\n // order: the predecessor can expire after the replacement becomes active.\n // Current-token state therefore wins even when it came from verification;\n // user identity and start history are merged separately during reconciliation.\n return current;\n}\n\nexport const getSourceProductIdByToken = internalQuery({\n args: {\n projectId: v.id(\"projects\"),\n purchaseToken: v.string(),\n },\n returns: v.union(v.string(), v.null()),\n handler: async (ctx, args) => getSourceProductIdByTokenHandler(ctx, args),\n});\n\nexport async function getSourceProductIdByTokenHandler(\n ctx: Pick,\n args: { projectId: Id<\"projects\">; purchaseToken: string },\n): Promise {\n const resolution = await findSupersedingSubscription(\n ctx,\n args.projectId,\n args.purchaseToken,\n );\n if (resolution.aliased) return resolution.productId ?? null;\n const subscription = await findSubscriptionByToken(\n ctx,\n args.projectId,\n args.purchaseToken,\n );\n return subscription?.productId ?? null;\n}\n\nexport const getCurrentProductIdByToken = internalQuery({\n args: {\n projectId: v.id(\"projects\"),\n purchaseToken: v.string(),\n },\n returns: v.union(v.string(), v.null()),\n handler: async (ctx, args) => getCurrentProductIdByTokenHandler(ctx, args),\n});\n\nexport async function getCurrentProductIdByTokenHandler(\n ctx: Pick,\n args: { projectId: Id<\"projects\">; purchaseToken: string },\n): Promise {\n const resolution = await findSupersedingSubscription(\n ctx,\n args.projectId,\n args.purchaseToken,\n );\n if (resolution.aliased) return resolution.subscription?.productId ?? null;\n const subscription = await findSubscriptionByToken(\n ctx,\n args.projectId,\n args.purchaseToken,\n );\n return subscription?.productId ?? null;\n}\n\n// Look up a product's billing period from the kit-side catalog. We\n// Look up the row for the EXACT (platform, productId) — `products` is\n// keyed by (projectId, platform, productId) precisely because the\n// same SKU can exist on both stores with different billing periods.\n// Earlier behaviour preferred iOS over Android by walking both\n// platforms, which made an Android subscription inherit the iOS\n// period when those rows diverged and skewed `mrrMicros` on both the\n// incremental delta and the next recompute (PR #124\n// (https://github.com/hyodotdev/openiap/pull/124) review). Returns\n// undefined when the product isn't tracked or has no billingPeriod —\n// monthlyMicrosForSub treats that as a P1M fallback.\nasync function fetchBillingPeriod(\n ctx: MutationCtx,\n projectId: Id<\"projects\">,\n platform: SubscriptionPlatform,\n productId: string,\n): Promise {\n const product = await ctx.db\n .query(\"products\")\n .withIndex(\"by_project_and_platform_and_product\", (q) =>\n q\n .eq(\"projectId\", projectId)\n .eq(\"platform\", platform)\n .eq(\"productId\", productId),\n )\n .unique();\n return product?.billingPeriod ?? undefined;\n}\n\nfunction coerceEventInput(raw: RawEventInput): SubscriptionEventInput {\n const appleRenewalPreference =\n raw.platform === \"IOS\" &&\n raw.type === \"SubscriptionProductChanged\" &&\n raw.effectiveImmediately !== true;\n return {\n type: raw.type,\n // Apple's renewal preference is the product for the next billing period;\n // the current transaction remains active until then. Keep the target on\n // the source event, but do not replace the canonical subscription early.\n productId: appleRenewalPreference ? undefined : raw.productId,\n subscriptionState: raw.subscriptionState,\n expiresAt: raw.expiresAt,\n renewsAt: raw.renewsAt,\n willRenew: raw.willRenew,\n cancellationReason: raw.cancellationReason,\n currency: appleRenewalPreference ? undefined : raw.currency,\n priceAmountMicros: appleRenewalPreference\n ? undefined\n : raw.priceAmountMicros,\n };\n}\n\nfunction isActive(\n sub: Doc<\"subscriptions\">,\n now: number = Date.now(),\n): boolean {\n return entitlementActive(sub, now);\n}\n\nfunction normalizeHarmonizedPurchaseState(\n state: string,\n): HarmonizedPurchaseState {\n const normalized = state.trim().toUpperCase().replace(/-/g, \"_\");\n if (normalized in HarmonizedPurchaseState) {\n return HarmonizedPurchaseState[\n normalized as keyof typeof HarmonizedPurchaseState\n ];\n }\n return HarmonizedPurchaseState.UNKNOWN;\n}\n\n// Bind a subscription to a userId. Called by the SDK after a successful\n// receipt validation when the host app knows which user owns the receipt.\nexport const bindSubscriptionToUser = internalMutation({\n args: {\n projectId: v.id(\"projects\"),\n purchaseToken: v.string(),\n userId: v.string(),\n },\n returns: v.union(v.id(\"subscriptions\"), v.null()),\n handler: async (ctx, args) => bindSubscriptionToUserHandler(ctx, args),\n});\n\n/**\n * The retained source a re-emitted entitlement event is attributed to. The\n * stored row is preferred; a pruned one is reconstructed from the snapshot the\n * subscription keeps. Price is stripped: a webhook already reported it, and\n * repeating it would put the same money on another event.\n */\nasync function retainedSourceEventFor(\n ctx: MutationCtx,\n projectId: Id<\"projects\">,\n sub: Doc<\"subscriptions\">,\n) {\n if (!sub.lastEventId) return null;\n const retained = await ctx.db.get(sub.lastEventId);\n const source =\n retained?.projectId === projectId\n ? retained\n : sub.lastEventSource &&\n sub.lastEventOccurredAt !== undefined &&\n sub.lastEventSourceNotificationId\n ? {\n _id: sub.lastEventId,\n type: sub.lastEventSource.type,\n platform: sub.platform,\n environment: sub.lastEventSource.environment,\n productId: sub.lastEventSource.productId,\n applicationId: sub.lastEventSource.applicationId,\n transactionId: sub.lastEventSource.transactionId,\n originalTransactionId: sub.lastEventSource.originalTransactionId,\n sourceNotificationId: sub.lastEventSourceNotificationId,\n occurredAt: sub.lastEventOccurredAt,\n }\n : null;\n if (!source) return null;\n return {\n ...source,\n currency: undefined,\n priceAmountMicros: undefined,\n amountProvenance: undefined,\n };\n}\n\n/**\n * Moves an existing binding. `bindSubscriptionToUserHandler` refuses this on\n * purpose — a caller holding a purchase token has not proved it owns the\n * purchase — so correcting a wrong binding needs an operator-authorized path.\n * Callers must gate this on a secret key.\n */\nexport async function rebindSubscriptionToUserHandler(\n ctx: MutationCtx,\n args: BindSubscriptionToUserArgs,\n): Promise<{ subscriptionId: Id<\"subscriptions\">; notified: boolean } | null> {\n if (!isValidSubscriptionUserId(args.userId)) {\n throw new ConvexError(\"userId must be nonblank and at most 256 characters\");\n }\n const project = await assertProjectWritable(ctx, args.projectId);\n if (await isUserErasureRequested(ctx, project, args.userId)) return null;\n // Resolve exactly as `bind` does. An operator correcting a wrong binding\n // usually has the token the customer reported, which on Play may be the one\n // a replacement superseded.\n const supersedingResolution = await findSupersedingSubscription(\n ctx,\n args.projectId,\n args.purchaseToken,\n );\n const sub = supersedingResolution.aliased\n ? supersedingResolution.subscription\n : await findSubscriptionByToken(ctx, args.projectId, args.purchaseToken);\n if (!sub || sub.accountErased) return null;\n if (\n sub.userId &&\n sub.userId !== args.userId &&\n (await isUserErasureRequested(ctx, project, sub.userId))\n )\n return null;\n if (sub.userId === args.userId) {\n return { subscriptionId: sub._id, notified: true };\n }\n const previousUserId = sub.userId;\n const now = Date.now();\n\n // A consumer that gates access on commerce events has no other way to learn\n // the purchase moved: without these it keeps the wrong user entitled and\n // never entitles the real one. Decide before writing, so the caller is never\n // told a rebind succeeded when the notification half of it could not.\n const entitled = isActive({ ...sub, userId: args.userId }, now);\n const sourceEvent = entitled\n ? await retainedSourceEventFor(ctx, args.projectId, sub)\n : null;\n await ctx.db.patch(sub._id, { userId: args.userId, updatedAt: now });\n if (!entitled) return { subscriptionId: sub._id, notified: true };\n if (!sourceEvent) {\n // Every retained trace of the originating notification is gone, so no\n // event can be attributed. The binding moved; the operator must reconcile\n // the developer backend by hand.\n console.warn(\n \"[subscriptions/rebind] moved a binding without emitting entitlement events\",\n { projectId: args.projectId, subscriptionId: sub._id },\n );\n return { subscriptionId: sub._id, notified: false };\n }\n const snapshot = {\n state: sub.state,\n productId: sub.productId,\n ...(sub.expiresAt !== undefined ? { expiresAt: sub.expiresAt } : {}),\n ...(sub.renewsAt !== undefined ? { renewsAt: sub.renewsAt } : {}),\n ...(sub.willRenew !== undefined ? { willRenew: sub.willRenew } : {}),\n ...(sub.cancellationReason\n ? { cancellationReason: sub.cancellationReason }\n : {}),\n };\n for (const [userId, active, previouslyActive] of [\n ...(previousUserId\n ? ([[previousUserId, false, true]] as const)\n : ([] as const)),\n [args.userId, true, false] as const,\n ]) {\n await emitCommerceEvent(ctx, {\n projectId: args.projectId,\n transition: null,\n active,\n previouslyActive,\n sourceEvent,\n subscriptionId: sub._id,\n subscription: { ...snapshot, userId },\n });\n }\n return { subscriptionId: sub._id, notified: true };\n}\n\nexport async function bindSubscriptionToUserHandler(\n ctx: MutationCtx,\n args: BindSubscriptionToUserArgs,\n): Promise | null> {\n if (!isValidSubscriptionUserId(args.userId)) {\n throw new ConvexError(\"userId must be nonblank and at most 256 characters\");\n }\n const project = await assertProjectWritable(ctx, args.projectId);\n if (await isUserErasureRequested(ctx, project, args.userId)) return null;\n const supersedingResolution = await findSupersedingSubscription(\n ctx,\n args.projectId,\n args.purchaseToken,\n );\n const sub = supersedingResolution.aliased\n ? supersedingResolution.subscription\n : await findSubscriptionByToken(ctx, args.projectId, args.purchaseToken);\n if (!sub || sub.accountErased) return null;\n if (sub.userId === args.userId) return sub._id;\n if (sub.userId) {\n // Reported the same as an unknown token. A distinct error would tell any\n // holder of the app-embedded publishable key whether a token exists and\n // whether someone owns it. The operator still sees the collision.\n console.warn(\n \"[subscriptions/bind] rejected a bind for an already-bound subscription\",\n { projectId: args.projectId, subscriptionId: sub._id },\n );\n return null;\n }\n const now = Date.now();\n await ctx.db.patch(sub._id, {\n userId: args.userId,\n updatedAt: now,\n });\n\n // If the store webhook won the race against verify/bind, its initial event\n // had no account identity. Emit one correlated entitlement grant after the\n // binding so a developer backend never has to recover a purchase token from\n // the public payload. The normal verify -> bind -> webhook path has no\n // lastEventId yet and emits its grant when that first webhook arrives.\n if (sub.lastEventId && isActive(sub, now)) {\n const retainedSource = await ctx.db.get(sub.lastEventId);\n const sourceEvent =\n retainedSource?.projectId === args.projectId\n ? retainedSource\n : sub.lastEventSource &&\n sub.lastEventOccurredAt !== undefined &&\n sub.lastEventSourceNotificationId\n ? {\n _id: sub.lastEventId,\n type: sub.lastEventSource.type,\n platform: sub.platform,\n environment: sub.lastEventSource.environment,\n productId: sub.lastEventSource.productId,\n applicationId: sub.lastEventSource.applicationId,\n transactionId: sub.lastEventSource.transactionId,\n originalTransactionId: sub.lastEventSource.originalTransactionId,\n currency: sub.lastEventSource.currency,\n priceAmountMicros: sub.lastEventSource.priceAmountMicros,\n sourceNotificationId: sub.lastEventSourceNotificationId,\n occurredAt: sub.lastEventOccurredAt,\n }\n : null;\n if (sourceEvent) {\n // This only fires after a webhook already emitted the notification's\n // amount, so repeating it would put the same money on a second event.\n const entitlementSource = {\n ...sourceEvent,\n currency: undefined,\n priceAmountMicros: undefined,\n amountProvenance: undefined,\n };\n await emitCommerceEvent(ctx, {\n projectId: args.projectId,\n transition: null,\n active: true,\n previouslyActive: false,\n sourceEvent: entitlementSource,\n subscriptionId: sub._id,\n subscription: {\n state: sub.state,\n productId: sub.productId,\n ...(sub.expiresAt !== undefined ? { expiresAt: sub.expiresAt } : {}),\n ...(sub.renewsAt !== undefined ? { renewsAt: sub.renewsAt } : {}),\n ...(sub.willRenew !== undefined ? { willRenew: sub.willRenew } : {}),\n ...(sub.cancellationReason\n ? { cancellationReason: sub.cancellationReason }\n : {}),\n userId: args.userId,\n },\n });\n }\n }\n return sub._id;\n}\n\nexport async function drainSubscriptionUserErasurePage(\n ctx: MutationCtx,\n jobId: Id<\"subscriptionUserErasureJobs\">,\n): Promise<{\n done: boolean;\n subscriptionsErased: number;\n commerceEventsErased: number;\n}> {\n const job = await ctx.db.get(jobId);\n if (!job || job.status === \"completed\" || !job.userId) {\n return {\n done: true,\n subscriptionsErased: job?.subscriptionsErased ?? 0,\n commerceEventsErased: job?.commerceEventsErased ?? 0,\n };\n }\n\n const now = Date.now();\n await ctx.db.patch(jobId, { status: \"running\", updatedAt: now });\n const [subscriptions, commerceEvents, purchases] = await Promise.all([\n ctx.db\n .query(\"subscriptions\")\n .withIndex(\"by_project_and_user\", (q) =>\n q.eq(\"projectId\", job.projectId).eq(\"userId\", job.userId),\n )\n .take(USER_ERASURE_BATCH_SIZE),\n ctx.db\n .query(\"commerceEvents\")\n .withIndex(\"by_project_and_user\", (q) =>\n q.eq(\"projectId\", job.projectId).eq(\"userId\", job.userId),\n )\n .take(USER_ERASURE_BATCH_SIZE),\n ctx.db\n .query(\"purchases\")\n .withIndex(\"by_project_and_app_user\", (q) =>\n q.eq(\"projectId\", job.projectId).eq(\"appUserId\", job.userId),\n )\n .take(USER_ERASURE_BATCH_SIZE),\n ]);\n\n for (const subscription of subscriptions) {\n await ctx.db.patch(subscription._id, {\n userId: undefined,\n accountErased: true,\n });\n }\n for (const purchase of purchases) {\n await ctx.db.patch(purchase._id, {\n appUserId: undefined,\n accountErased: true,\n });\n }\n let commerceEventsErasedThisPage = 0;\n let waitingForClaimedDelivery = false;\n for (const event of commerceEvents) {\n const deliveries = await ctx.db\n .query(\"outboundDeliveries\")\n .withIndex(\"by_event\", (q) => q.eq(\"eventId\", event._id))\n .collect();\n if (deliveries.some((delivery) => delivery.status === \"delivering\")) {\n waitingForClaimedDelivery = true;\n continue;\n }\n if (event.eventType.startsWith(\"entitlement.\")) {\n for (const delivery of deliveries) await ctx.db.delete(delivery._id);\n await ctx.db.delete(event._id);\n } else {\n await ctx.db.patch(event._id, { userId: undefined });\n }\n commerceEventsErasedThisPage += 1;\n }\n\n const subscriptionsErased = job.subscriptionsErased + subscriptions.length;\n const commerceEventsErased =\n job.commerceEventsErased + commerceEventsErasedThisPage;\n const done =\n !waitingForClaimedDelivery &&\n subscriptions.length < USER_ERASURE_BATCH_SIZE &&\n purchases.length < USER_ERASURE_BATCH_SIZE &&\n commerceEvents.length < USER_ERASURE_BATCH_SIZE;\n\n if (done) {\n await ctx.db.patch(jobId, {\n userId: undefined,\n status: \"completed\",\n subscriptionsErased,\n commerceEventsErased,\n updatedAt: now,\n completedAt: now,\n });\n } else {\n await ctx.db.patch(jobId, {\n subscriptionsErased,\n commerceEventsErased,\n updatedAt: now,\n });\n await ctx.scheduler.runAfter(\n waitingForClaimedDelivery ? 1_000 : 0,\n internal.subscriptions.internal.drainSubscriptionUserErasureJob,\n { jobId },\n );\n }\n\n return { done, subscriptionsErased, commerceEventsErased };\n}\n\nexport const drainSubscriptionUserErasureJob = internalMutation({\n args: { jobId: v.id(\"subscriptionUserErasureJobs\") },\n handler: async (ctx, args) =>\n drainSubscriptionUserErasurePage(ctx, args.jobId),\n});\n\nexport const resumeSubscriptionUserErasureJobs = internalMutation({\n args: {},\n returns: v.object({ scheduled: v.number() }),\n handler: async (ctx) => {\n const staleBefore = Date.now() - USER_ERASURE_STALE_MS;\n const [queued, stale] = await Promise.all([\n ctx.db\n .query(\"subscriptionUserErasureJobs\")\n .withIndex(\"by_status_and_updated\", (q) => q.eq(\"status\", \"queued\"))\n .take(10),\n ctx.db\n .query(\"subscriptionUserErasureJobs\")\n .withIndex(\"by_status_and_updated\", (q) =>\n q.eq(\"status\", \"running\").lt(\"updatedAt\", staleBefore),\n )\n .take(10),\n ]);\n const jobs = [...queued, ...stale].slice(0, 10);\n for (const job of jobs) {\n await ctx.scheduler.runAfter(\n 0,\n internal.subscriptions.internal.drainSubscriptionUserErasureJob,\n { jobId: job._id },\n );\n }\n return { scheduled: jobs.length };\n },\n});\n\nexport async function pruneCompletedSubscriptionUserErasureJobsHandler(\n ctx: MutationCtx,\n): Promise<{ pruned: number }> {\n const completedBefore = Date.now() - USER_ERASURE_JOB_RETENTION_MS;\n const completed = await ctx.db\n .query(\"subscriptionUserErasureJobs\")\n .withIndex(\"by_status_and_updated\", (q) =>\n q.eq(\"status\", \"completed\").lt(\"updatedAt\", completedBefore),\n )\n .take(USER_ERASURE_PRUNER_BATCH_SIZE);\n\n for (const job of completed) {\n await ctx.db.delete(job._id);\n }\n if (completed.length === USER_ERASURE_PRUNER_BATCH_SIZE) {\n await ctx.scheduler.runAfter(\n 0,\n internal.subscriptions.internal.pruneCompletedSubscriptionUserErasureJobs,\n {},\n );\n }\n return { pruned: completed.length };\n}\n\nexport const pruneCompletedSubscriptionUserErasureJobs = internalMutation({\n args: {},\n returns: v.object({ pruned: v.number() }),\n handler: async (ctx) => pruneCompletedSubscriptionUserErasureJobsHandler(ctx),\n});\n", + "kit/convex/subscriptions/mutation.test.ts": "import { describe, expect, it, vi } from \"vitest\";\n\nimport { testableFunction } from \"../test.setup\";\nimport { hmacSha256Hex, sha256Hex } from \"../utils/sha256\";\nimport {\n bindUserAsServer as registeredBindUserAsServer,\n rebindUser as registeredRebindUser,\n requestUserErasure as registeredRequestUserErasure,\n} from \"./mutation\";\n\nconst rebindUser = testableFunction(registeredRebindUser);\nconst requestUserErasure = testableFunction(registeredRequestUserErasure);\nconst bindUserAsServer = testableFunction(registeredBindUserAsServer);\n\n// rebindUser moves who owns a purchase, so it is secret-key only. The check\n// lives in the mutation, not in the HTTP layer, because Convex functions are\n// publicly callable with a key alone.\ndescribe(\"rebindUser authorization\", () => {\n const project = {\n _id: \"projects_1\",\n _creationTime: 0,\n organizationId: \"organizations_1\",\n userErasureHashKey: \"test-erasure-hash-key\",\n };\n const organization = { _id: \"organizations_1\", _creationTime: 0 };\n\n const dbWith = (\n keyType?: \"publishable\" | \"secret\",\n erasureJob?: Record,\n ) => ({\n rows: {\n apiKeys: keyType\n ? [\n {\n _id: \"apiKeys_1\",\n key: \"k\",\n keyType,\n isActive: true,\n projectId: project._id,\n organizationId: organization._id,\n },\n ]\n : [],\n projects: [project],\n organizations: [organization],\n subscriptions: [],\n subscriptionUserErasureJobs: erasureJob ? [erasureJob] : [],\n } as Record[]>,\n async get(id: string) {\n return (\n Object.values(this.rows)\n .flat()\n .find((r) => r._id === id) ?? null\n );\n },\n query(table: string) {\n const rows = this.rows[table] ?? [];\n const api = {\n withIndex: (_n: string, fn: (q: unknown) => unknown) => {\n const captured: Record = {};\n const q: Record unknown> = {};\n q.eq = (f, v) => {\n captured[f] = v;\n return q;\n };\n fn(q);\n return {\n first: async () =>\n rows.find((r) =>\n Object.entries(captured).every(([k, v]) => r[k] === v),\n ) ?? null,\n unique: async () =>\n rows.find((r) =>\n Object.entries(captured).every(([k, v]) => r[k] === v),\n ) ?? null,\n collect: async () => [],\n };\n },\n };\n return api;\n },\n async patch(id: string, value: Record) {\n const row = Object.values(this.rows)\n .flat()\n .find((candidate) => candidate._id === id);\n if (row) Object.assign(row, value);\n },\n async insert(table: string, value: Record) {\n const id = `${table}_${(this.rows[table]?.length ?? 0) + 1}`;\n const row = { _id: id, ...value };\n (this.rows[table] ??= []).push(row);\n return id;\n },\n });\n\n it(\"rejects a publishable key\", async () => {\n await expect(\n rebindUser._handler(dbWithCtx(\"publishable\"), {\n apiKey: \"k\",\n purchaseToken: \"t\",\n userId: \"u\",\n }),\n ).rejects.toSatisfy(\n (e: unknown) =>\n (e as { data?: { code?: string } }).data?.code === \"INSUFFICIENT_SCOPE\",\n );\n });\n\n it(\"accepts a secret key\", async () => {\n await expect(\n rebindUser._handler(dbWithCtx(\"secret\"), {\n apiKey: \"k\",\n purchaseToken: \"t\",\n userId: \"u\",\n }),\n ).resolves.toEqual({ ok: true, rebound: false, notified: true });\n });\n\n it(\"rejects a publishable key for user erasure inside Convex\", async () => {\n await expect(\n requestUserErasure._handler(dbWithCtx(\"publishable\"), {\n apiKey: \"k\",\n userId: \"user-1\",\n }),\n ).rejects.toSatisfy(\n (e: unknown) =>\n (e as { data?: { code?: string } }).data?.code === \"INSUFFICIENT_SCOPE\",\n );\n });\n\n it(\"rejects an unknown secret-shaped key for user erasure\", async () => {\n await expect(\n requestUserErasure._handler(\n { db: dbWith() },\n {\n apiKey: \"openiap-kit_sk_unknown\",\n userId: \"user-1\",\n },\n ),\n ).rejects.toSatisfy(\n (error: unknown) =>\n (error as { data?: { code?: string } }).data?.code ===\n \"INVALID_API_KEY\",\n );\n });\n\n it(\"returns the completed erasure job instead of reopening it\", async () => {\n const userId = \"user-1\";\n const completed = {\n _id: \"subscriptionUserErasureJobs_1\",\n projectId: project._id,\n userIdHash: await hmacSha256Hex(project.userErasureHashKey, userId),\n status: \"completed\",\n };\n const scheduler = { runAfter: vi.fn() };\n\n await expect(\n requestUserErasure._handler(\n { db: dbWith(\"secret\", completed), scheduler },\n { apiKey: \"k\", userId },\n ),\n ).resolves.toEqual({\n ok: true,\n jobId: completed._id,\n status: \"completed\",\n });\n expect(scheduler.runAfter).not.toHaveBeenCalled();\n });\n\n it(\"rekeys a legacy completed job on an idempotent request\", async () => {\n const userId = \"legacy-user\";\n const completed = {\n _id: \"subscriptionUserErasureJobs_legacy\",\n projectId: project._id,\n userIdHash: await sha256Hex(userId),\n status: \"completed\",\n };\n const db = dbWith(\"secret\", completed);\n const scheduler = { runAfter: vi.fn() };\n\n await expect(\n requestUserErasure._handler(\n { db, scheduler },\n {\n apiKey: \"k\",\n userId,\n },\n ),\n ).resolves.toMatchObject({ jobId: completed._id, status: \"completed\" });\n expect(completed.userIdHash).toBe(\n await hmacSha256Hex(project.userErasureHashKey, userId),\n );\n expect(scheduler.runAfter).not.toHaveBeenCalled();\n });\n\n it(\"stores a keyed erasure lookup instead of a plain userId digest\", async () => {\n const userId = \"guessable-user@example.com\";\n const db = dbWith(\"secret\");\n const scheduler = { runAfter: vi.fn() };\n\n await requestUserErasure._handler(\n { db, scheduler },\n {\n apiKey: \"k\",\n userId,\n },\n );\n\n const [job] = db.rows.subscriptionUserErasureJobs;\n expect(job.userIdHash).toBe(\n await hmacSha256Hex(project.userErasureHashKey, userId),\n );\n expect(job.userIdHash).not.toBe(await sha256Hex(userId));\n });\n\n it(\"creates a project erasure key on first use\", async () => {\n const userId = \"first-erasure-user\";\n const db = dbWith(\"secret\");\n db.rows.projects = [{ ...project, userErasureHashKey: undefined }];\n const scheduler = { runAfter: vi.fn() };\n\n await requestUserErasure._handler(\n { db, scheduler },\n {\n apiKey: \"k\",\n userId,\n },\n );\n\n const [projectRow] = db.rows.projects;\n const key = projectRow.userErasureHashKey;\n expect(key).toEqual(expect.any(String));\n expect(String(key)).toHaveLength(64);\n expect(db.rows.subscriptionUserErasureJobs[0].userIdHash).toBe(\n await hmacSha256Hex(String(key), userId),\n );\n });\n\n // bindPurchase (server role) must distinguish an unknown key from an\n // under-scoped one: unknown/inactive is INVALID_API_KEY (UNAUTHORIZED at the\n // edge), only a real publishable key is INSUFFICIENT_SCOPE (FORBIDDEN).\n it(\"rejects an unknown key with INVALID_API_KEY, not INSUFFICIENT_SCOPE\", async () => {\n await expect(\n bindUserAsServer._handler(\n { db: dbWith() },\n {\n apiKey: \"openiap-kit_sk_unknown\",\n purchaseToken: \"t\",\n userId: \"u\",\n },\n ),\n ).rejects.toSatisfy(\n (error: unknown) =>\n (error as { data?: { code?: string } }).data?.code ===\n \"INVALID_API_KEY\",\n );\n });\n\n it(\"rejects a valid publishable key with INSUFFICIENT_SCOPE\", async () => {\n await expect(\n bindUserAsServer._handler(dbWithCtx(\"publishable\"), {\n apiKey: \"k\",\n purchaseToken: \"t\",\n userId: \"u\",\n }),\n ).rejects.toSatisfy(\n (error: unknown) =>\n (error as { data?: { code?: string } }).data?.code ===\n \"INSUFFICIENT_SCOPE\",\n );\n });\n\n it(\"accepts a secret key\", async () => {\n await expect(\n bindUserAsServer._handler(dbWithCtx(\"secret\"), {\n apiKey: \"k\",\n purchaseToken: \"t\",\n userId: \"u\",\n }),\n ).resolves.toEqual({ ok: true, bound: false });\n });\n\n function dbWithCtx(keyType: \"publishable\" | \"secret\") {\n return { db: dbWith(keyType) } as never;\n }\n});\n", + "kit/server/api/commerce/routes.ts": "// The portable REST binding plus the GraphQL endpoint, mounted under\n// /commerce/v1. Routes are registered from the generated HTTP manifest, so a\n// route cannot exist that the contract does not declare; every adapter only\n// parses transport, builds the auth context, validates against the generated\n// schemas, calls the shared handler, and maps the outcome back.\n\nimport { Hono, type Context, type Next } from \"hono\";\nimport HTTP_BINDING from \"openiap-commerce-protocol/generated/bindings/http-binding.json\";\n\nimport {\n apiKeyValidationError,\n isPublishableApiKey,\n isSecretApiKey,\n} from \"../v1/middleware\";\nimport {\n getRequestIp,\n multiAxisRateLimitMiddleware,\n sourceRateLimitMiddleware,\n} from \"../v1/rate-limit\";\nimport {\n JsonBodyTooLargeError,\n readJsonBodyWithLimit,\n} from \"../v1/request-body\";\nimport { ProtocolOperationError, protocolErrorStatus } from \"./errors\";\nimport { executeCommerceGraphql } from \"./graphql\";\nimport * as handlers from \"./handlers\";\nimport type { ProtocolContext } from \"./handlers\";\nimport { validateOperationInput } from \"./validation\";\n\nconst MAX_COMMERCE_BODY_BYTES = 32 * 1024;\nconst MOUNT_PREFIX = \"/commerce/v1\";\n\ntype CommerceVariables = {\n apiKey?: string;\n apiKeyHash?: string;\n commerceInput?: unknown;\n verifyCapacityRejected?: boolean;\n};\ntype CommerceContext = Context<{ Variables: CommerceVariables }>;\n\n// verifyPurchase's replay/in-flight admission lives in the shared handler\n// (verificationAdmission), so both the REST route and the GraphQL resolver run\n// through it — see server/api/commerce/handlers.ts.\n\nconst operationHandlers: Record<\n string,\n (context: ProtocolContext, input: never) => unknown\n> = {\n providerCapabilities: () => handlers.providerCapabilities(),\n subscriptionStatus: (context, input) =>\n handlers.subscriptionStatus(context, input),\n entitlements: (context, input) => handlers.entitlements(context, input),\n verifyPurchase: (context, input) => handlers.verifyPurchase(context, input),\n bindPurchase: (context, input) => handlers.bindPurchase(context, input),\n eraseUser: (context, input) => handlers.eraseUser(context, input),\n};\n\nconst GRAPHQL_PATH = `${MOUNT_PREFIX}/graphql`;\n\n// The two bindings wrap the same protocol code in different envelopes\n// (SPEC.md 8): REST as `{error:{code,message}}`, GraphQL as\n// `{errors:[{message,extensions:{code}}]}`. Transport failures — rate limit,\n// oversized body, unparseable body — must use the envelope of the binding\n// they hit, or a GraphQL client sees a body with neither data nor errors.\nfunction isGraphqlRequest(c: Context): boolean {\n return c.req.path.endsWith(GRAPHQL_PATH) || c.req.path === \"/graphql\";\n}\n\nfunction protocolError(\n c: Context,\n code: string,\n message: string,\n status = protocolErrorStatus(code),\n retryAfterSec?: number,\n): Response {\n // A retry hint reaches REST as the standard Retry-After header and GraphQL\n // as retryAfterSec in the error extensions, so neither binding drops it.\n if (retryAfterSec !== undefined) {\n c.header(\"Retry-After\", String(retryAfterSec));\n }\n if (isGraphqlRequest(c)) {\n // SPEC.md 7: every operation failure on the GraphQL binding is HTTP 200\n // with the code in errors[].extensions.code. This is the single status\n // policy for the binding — the outer rate limiter and the handler\n // admission both surface RATE_LIMITED at 200, never 429, so the endpoint\n // does not split its own contract.\n return c.json(\n {\n errors: [\n {\n message,\n extensions: {\n code,\n ...(retryAfterSec === undefined ? {} : { retryAfterSec }),\n },\n },\n ],\n },\n 200,\n );\n }\n return c.json({ error: { code, message } }, status as 400);\n}\n\nfunction bearerApiKey(c: Context): string | null {\n const header = c.req.header(\"Authorization\");\n if (!header) return null;\n const parts = header.trim().split(/\\s+/);\n if (parts.length !== 2 || parts[0].toLowerCase() !== \"bearer\") return null;\n return apiKeyValidationError(parts[1]) ? null : parts[1];\n}\n\nconst respondRateLimited = (\n c: Context,\n result: { retryAfterSec: number },\n): Response =>\n // Passing retryAfterSec sets the Retry-After header on REST and puts\n // retryAfterSec into the GraphQL error extensions — the outer limiter must\n // carry the same machine-readable hint the per-operation admission does.\n protocolError(\n c,\n \"RATE_LIMITED\",\n `Too many requests. Retry after ${result.retryAfterSec}s.`,\n 429,\n result.retryAfterSec,\n );\n\nconst app = new Hono<{ Variables: CommerceVariables }>();\n\n// Unauthenticated requests (capabilities, credential-less GraphQL) still ride\n// the bounded source-IP and process buckets.\napp.use(\n \"*\",\n sourceRateLimitMiddleware({ respond: respondRateLimited }) as never,\n);\n\nconst keyedRateLimit = multiAxisRateLimitMiddleware({\n respond: respondRateLimited,\n});\nconst keyedRateLimitIfAuthed = async (c: CommerceContext, next: Next) =>\n c.var.apiKey ? keyedRateLimit(c as never, next) : next();\n\nfunction commerceAuth(auth: string) {\n return async (c: CommerceContext, next: Next) => {\n const apiKey = bearerApiKey(c);\n if (auth !== \"none\") {\n // Fail close in the protocol envelope. The prefix check only\n // fast-fails an explicitly publishable key on a server operation;\n // the stored key classification stays authoritative in Convex, where\n // unknown and legacy formats fail closed as publishable.\n if (apiKey === null) {\n return protocolError(c, \"UNAUTHORIZED\", \"A credential is required\");\n }\n if (auth === \"server\" && isPublishableApiKey(apiKey)) {\n return protocolError(\n c,\n \"FORBIDDEN\",\n \"This operation requires the server role\",\n );\n }\n }\n if (apiKey !== null) {\n c.set(\"apiKey\", apiKey);\n if (isSecretApiKey(apiKey)) {\n c.header(\"Cache-Control\", \"private, no-store\");\n }\n }\n await next();\n };\n}\n\n// SPEC.md 5: server-role authorization precedes input validation. Runs after\n// the rate limiters (an unauthenticated caller must not buy a Convex round\n// trip per request unmetered) and before the body is parsed or validated.\nconst authoritativeServerAuth = async (c: CommerceContext, next: Next) => {\n try {\n await handlers.assertServerCredential({\n apiKey: c.var.apiKey ?? \"\",\n requestIp: getRequestIp(c),\n });\n } catch (error) {\n if (error instanceof ProtocolOperationError) {\n return protocolError(\n c,\n error.code,\n error.message,\n protocolErrorStatus(error.code),\n error.retryAfterSec,\n );\n }\n return protocolError(c, \"INTERNAL_ERROR\", \"The operation failed\");\n }\n await next();\n};\n\nfor (const operation of HTTP_BINDING.operations) {\n const path = operation.path.slice(MOUNT_PREFIX.length);\n const run = operationHandlers[operation.name];\n if (!run) throw new Error(`No handler for operation ${operation.name}`);\n\n // Parse, size-cap, and schema-validate the input, then stash it so the\n // verify guards (which run after this) and the handler read one parsed body.\n const parseInput = async (c: CommerceContext, next: Next) => {\n let input: unknown = null;\n if (operation.input && operation.method === \"GET\") {\n input = Object.fromEntries(\n Object.entries(c.req.query()).filter(([, value]) => value !== \"\"),\n );\n } else if (operation.input) {\n try {\n input = await readJsonBodyWithLimit(\n c.req.raw,\n MAX_COMMERCE_BODY_BYTES,\n \"Request body is too large\",\n );\n } catch (error) {\n if (error instanceof JsonBodyTooLargeError) {\n return protocolError(\n c,\n \"INVALID_REQUEST\",\n \"Request body is too large\",\n );\n }\n return protocolError(c, \"INVALID_REQUEST\", \"Body is not JSON\");\n }\n }\n if (operation.input) {\n const invalid = validateOperationInput(operation.name, input);\n if (invalid) return protocolError(c, \"INVALID_REQUEST\", invalid);\n }\n c.set(\"commerceInput\", input);\n await next();\n };\n\n const handler = async (c: CommerceContext) => {\n try {\n const context: ProtocolContext = {\n apiKey: c.var.apiKey ?? \"\",\n requestIp: getRequestIp(c),\n };\n const result = await run(context, c.get(\"commerceInput\") as never);\n return c.json(result as object, operation.successStatus as 200);\n } catch (error) {\n if (error instanceof ProtocolOperationError) {\n return protocolError(\n c,\n error.code,\n error.message,\n protocolErrorStatus(error.code),\n error.retryAfterSec,\n );\n }\n console.error(\n \"[commerce] %s failed errorClass=%s\",\n operation.name,\n error instanceof Error ? error.name : typeof error,\n );\n return protocolError(c, \"INTERNAL_ERROR\", \"The operation failed\");\n }\n };\n\n if (operation.auth === \"server\") {\n app.on(\n operation.method,\n path,\n commerceAuth(operation.auth),\n keyedRateLimitIfAuthed,\n authoritativeServerAuth,\n parseInput,\n handler,\n );\n } else {\n app.on(\n operation.method,\n path,\n commerceAuth(operation.auth),\n keyedRateLimitIfAuthed,\n parseInput,\n handler,\n );\n }\n}\n\n// The GraphQL binding shares the same handlers and the same role rules;\n// SPEC.md 7 keeps operation failures inside the GraphQL errors array, so the\n// only role decision made here is which credential kind was presented.\napp.post(\n \"/graphql\",\n commerceAuth(\"none\"),\n keyedRateLimitIfAuthed,\n async (c) => {\n let payload: unknown;\n try {\n payload = await readJsonBodyWithLimit(\n c.req.raw,\n MAX_COMMERCE_BODY_BYTES,\n \"Request body is too large\",\n );\n } catch (error) {\n if (error instanceof JsonBodyTooLargeError) {\n return protocolError(c, \"INVALID_REQUEST\", \"Request body is too large\");\n }\n return protocolError(c, \"INVALID_REQUEST\", \"Body is not JSON\");\n }\n\n const apiKey = c.var.apiKey;\n const { status, body } = await executeCommerceGraphql(payload, {\n role:\n apiKey === undefined\n ? null\n : isPublishableApiKey(apiKey)\n ? \"verification\"\n : \"server\",\n apiKey,\n requestIp: getRequestIp(c),\n });\n return c.json(body as object, status);\n },\n);\n\n// Terminal: an unknown /commerce/v1 path is a protocol 404, never an SPA\n// fallthrough.\napp.all(\"*\", (c) =>\n c.json({ error: { code: \"NOT_FOUND\", message: \"Unknown operation\" } }, 404),\n);\n\nexport { app as commerceRoutes };\n", + "kit/convex/commerce/capabilities.ts": "// Per-provider capability declarations.\n//\n// These describe what IAPKit *actually implements today*, not what a store's\n// API theoretically allows. Consumers branch on this instead of assuming every\n// store behaves like Apple, and support can answer \"why is there no renewal\n// event for Meta\" without reading provider code.\n//\n// Keep in sync with the provider modules; `contract.test.ts` pins the\n// claims that have a concrete implementation behind them.\n\nimport type { CommerceStore } from \"./contract\";\n\nexport type ProviderCapabilities = {\n /** Server-side receipt/token validation on demand. */\n supportsInitialValidation: boolean;\n /** Store pushes lifecycle notifications to IAPKit. */\n supportsServerNotifications: boolean;\n /** IAPKit keeps a canonical subscription record for this store. */\n supportsSubscriptions: boolean;\n /** Renewal is observable as a distinct lifecycle event. */\n supportsRenewalEvents: boolean;\n /** Refund or revocation is observable as a distinct lifecycle event. */\n supportsRefundEvents: boolean;\n /** Expiration is observable rather than only inferred from a timestamp. */\n supportsExpiration: boolean;\n /** A scheduled pass re-reads authoritative store state. */\n supportsReconciliation: boolean;\n /** Entitlement state is derivable for gating. */\n supportsEntitlements: boolean;\n /** The store asserts an amount IAPKit can attribute to revenue. */\n supportsRevenueAmount: boolean;\n /** Human-readable reason for every false above. */\n notes: string;\n};\n\nexport const PROVIDER_CAPABILITIES: Record<\n CommerceStore,\n ProviderCapabilities\n> = {\n apple: {\n supportsInitialValidation: true,\n supportsServerNotifications: true,\n supportsSubscriptions: true,\n supportsRenewalEvents: true,\n supportsRefundEvents: true,\n supportsExpiration: true,\n supportsReconciliation: false,\n supportsEntitlements: true,\n supportsRevenueAmount: true,\n notes:\n \"App Store Server Notifications V2 drive the lifecycle. No scheduled \" +\n \"reconciliation pass exists yet, so a notification lost past Apple's \" +\n \"retry window is not self-healing. Receipt verification bootstraps a \" +\n \"token only before its first store event and cannot recreate a missed \" +\n \"commerce event.\",\n },\n google: {\n supportsInitialValidation: true,\n supportsServerNotifications: true,\n supportsSubscriptions: true,\n supportsRenewalEvents: true,\n supportsRefundEvents: true,\n supportsExpiration: true,\n supportsReconciliation: false,\n supportsEntitlements: true,\n supportsRevenueAmount: true,\n notes:\n \"RTDN drives the lifecycle. Google reissues purchaseToken across \" +\n \"upgrade/downgrade. The receiver requires subscriptionsv2 enrichment \" +\n \"for non-terminal lifecycle events and uses linkedPurchaseToken to move \" +\n \"the canonical row onto the replacement token. No scheduled \" +\n \"reconciliation pass exists, and receipt verification cannot recreate \" +\n \"a missed commerce event.\",\n },\n horizon: {\n supportsInitialValidation: true,\n supportsServerNotifications: false,\n supportsSubscriptions: false,\n supportsRenewalEvents: false,\n supportsRefundEvents: false,\n supportsExpiration: false,\n supportsReconciliation: false,\n supportsEntitlements: true,\n supportsRevenueAmount: false,\n notes:\n \"Only the Graph verify_entitlement endpoint is integrated: a one-shot \" +\n \"check that the viewer owns the SKU. Meta exposes no server \" +\n \"notifications to IAPKit, so there is no renewal, expiration or refund \" +\n \"signal and no canonical subscription record. Entitlement is answerable \" +\n \"only at the moment it is asked.\",\n },\n amazon: {\n supportsInitialValidation: true,\n supportsServerNotifications: false,\n supportsSubscriptions: false,\n supportsRenewalEvents: false,\n supportsRefundEvents: false,\n supportsExpiration: false,\n supportsReconciliation: true,\n supportsEntitlements: true,\n supportsRevenueAmount: false,\n notes:\n \"RVS validates receipts. Rows become due every 48 hours and a bounded \" +\n \"worker checks due work every five minutes, so backlog and retries can \" +\n \"extend that interval. RVS alone does not carry \" +\n \"enough lifecycle detail for a canonical subscription record, so no \" +\n \"subscription rows or lifecycle events are produced. A verification \" +\n \"still answers point-in-time entitlement.\",\n },\n};\n\n/** Stores that can produce normalized subscription lifecycle events today. */\nexport function storesWithLifecycleEvents(): CommerceStore[] {\n return (Object.keys(PROVIDER_CAPABILITIES) as CommerceStore[]).filter(\n (store) => PROVIDER_CAPABILITIES[store].supportsSubscriptions,\n );\n}\n", + "kit/convex/commerce/spec.conformance.test.ts": "// Proves IAPKit conforms to the OpenIAP Commerce Protocol.\n//\n// The specification is the authority: its JSON Schema validates real payloads\n// this implementation builds, and its published vocabulary is compared against\n// the one this implementation ships. Neither list is restated here, so the two\n// cannot drift silently — if kit gains an event type the spec does not declare,\n// this file fails.\n\nimport Ajv from \"ajv/dist/2020.js\";\nimport {\n KNOWN_COMMERCE_EVENT_TYPES as SPEC_EVENT_TYPES,\n COMMERCE_EVENT_VERSION,\n DATA_PROVENANCE as SPEC_DATA_PROVENANCE,\n EXTENSION_LIMITS,\n KNOWN_STORES as SPEC_KNOWN_STORES,\n SUBSCRIPTION_STATES as SPEC_SUBSCRIPTION_STATES,\n WEBHOOK,\n commerceEventSchema,\n primitivesSchema,\n} from \"openiap-commerce-protocol\";\nimport { describe, expect, it } from \"vitest\";\n\nimport type { Doc } from \"../_generated/dataModel\";\nimport { PROVIDER_CAPABILITIES } from \"./capabilities\";\nimport {\n COMMERCE_ENVIRONMENTS,\n COMMERCE_EVENT_SCHEMA_VERSION,\n COMMERCE_EVENT_TYPES,\n COMMERCE_STORES,\n DATA_PROVENANCE_VALUES,\n commerceEventTypeForTransition,\n MAX_EXTENSION_ENTRIES,\n MAX_EXTENSION_KEY_LENGTH,\n MAX_EXTENSION_VALUE_LENGTH,\n TRANSITION_TO_EVENT,\n type LifecycleTransition,\n} from \"./contract\";\nimport { readFileSync } from \"node:fs\";\nimport { createRequire } from \"node:module\";\nimport { fileURLToPath } from \"node:url\";\n\nimport {\n applySubscriptionTransition,\n entitlementActive,\n} from \"../subscriptions/stateMachine\";\nimport {\n mapAppleNotificationType,\n mapGoogleSubscriptionNotificationType,\n} from \"../webhooks/shared\";\n\nimport { buildEventPayload } from \"./deliveryState\";\nimport { emitCommerceEvent } from \"./internal\";\nimport {\n EVENT_ID_HEADER,\n DELIVERY_ID_HEADER,\n SIGNATURE_HEADER,\n CONTENT_TYPE,\n SIGNATURE_TOLERANCE_SECONDS,\n signPayloadWithRotation,\n TIMESTAMP_HEADER,\n} from \"./signing\";\n\n// kit is an ESM package, so `require` only exists through the test runner's\n// interop shim. Resolve the specification's published subpaths the way any\n// ESM consumer would instead of depending on that.\nconst resolveSpec = createRequire(import.meta.url).resolve;\n\nfunction validator() {\n const ajv = new Ajv({ strict: true, allErrors: true });\n ajv.addSchema(primitivesSchema, \"primitives.schema.json\");\n ajv.addSchema(commerceEventSchema, \"commerce-event.schema.json\");\n return ajv;\n}\n\nconst validateEvent = () =>\n validator().getSchema(\"commerce-event.schema.json\")!;\n\n/** A stored row shaped exactly as `emitCommerceEvent` writes one. */\nfunction storedEvent(overrides: Record = {}) {\n return {\n _id: \"commerceEvents_1\",\n _creationTime: 0,\n projectId: \"projects_1\",\n eventType: \"subscription.renewed\",\n eventVersion: COMMERCE_EVENT_SCHEMA_VERSION,\n store: \"apple\",\n environment: \"production\",\n userId: \"user_1\",\n productId: \"premium.monthly\",\n transactionId: \"2000000912345678\",\n originalTransactionId: \"2000000811111111\",\n subscriptionId: \"subscriptions_1\",\n subscription: {\n state: \"Active\",\n productId: \"premium.monthly\",\n expiresAt: 1_758_979_200_000,\n renewsAt: 1_758_979_200_000,\n willRenew: true,\n },\n entitlementActive: true,\n currency: \"USD\",\n amountMicros: 9_990_000,\n amountProvenance: \"store\",\n sourceEventId: \"webhookEvents_1\",\n sourceStoreNotificationId: \"8f3b1c2d-4e5a-6b7c-8d9e-0f1a2b3c4d5e\",\n occurredAt: 1_756_300_800_000,\n processedAt: 1_756_300_801_420,\n ...overrides,\n } as unknown as Doc<\"commerceEvents\">;\n}\n\ndescribe(\"IAPKit conforms to the OpenIAP Commerce Protocol\", () => {\n it(\"declares only event types the specification names\", () => {\n for (const eventType of COMMERCE_EVENT_TYPES) {\n expect(SPEC_EVENT_TYPES).toContain(eventType);\n }\n });\n\n it(\"emits the event version the specification names\", () => {\n expect(COMMERCE_EVENT_SCHEMA_VERSION).toBe(COMMERCE_EVENT_VERSION);\n });\n\n it(\"bounds extensions exactly as the specification does\", () => {\n expect({\n maxEntries: MAX_EXTENSION_ENTRIES,\n maxKeyLength: MAX_EXTENSION_KEY_LENGTH,\n maxValueLength: MAX_EXTENSION_VALUE_LENGTH,\n }).toEqual(EXTENSION_LIMITS);\n });\n\n it(\"uses the transport headers and replay window the specification fixes\", () => {\n expect(SIGNATURE_HEADER).toBe(WEBHOOK.signatureHeader);\n expect(TIMESTAMP_HEADER).toBe(WEBHOOK.timestampHeader);\n expect(EVENT_ID_HEADER).toBe(WEBHOOK.eventIdHeader);\n expect(DELIVERY_ID_HEADER).toBe(WEBHOOK.deliveryIdHeader);\n expect(SIGNATURE_TOLERANCE_SECONDS).toBe(WEBHOOK.toleranceSeconds);\n expect(CONTENT_TYPE).toBe(WEBHOOK.contentType);\n });\n\n const signatureVectors = JSON.parse(\n readFileSync(\n resolveSpec(\"openiap-commerce-protocol/vectors/signatures.json\"),\n \"utf8\",\n ),\n ) as {\n cases: {\n name: string;\n secret: string;\n previousSecret?: string;\n timestamp: number;\n body: string;\n expected: string;\n }[];\n };\n\n // SPEC.md 9.4.2 fixes the signed material. Every other signing test here is\n // self-relative, so it could be changed wholesale without one of them failing.\n it.each(signatureVectors.cases.map((c) => [c.name, c] as const))(\n \"reproduces the %s signature vector\",\n async (_name, vector) => {\n await expect(\n signPayloadWithRotation(\n { current: vector.secret, previous: vector.previousSecret },\n vector.timestamp,\n vector.body,\n ),\n ).resolves.toBe(vector.expected);\n },\n );\n});\n\ndescribe(\"built payloads validate against the specification schema\", () => {\n it(\"a minimal event with no subscription and no price validates\", () => {\n const validate = validateEvent();\n const payload = buildEventPayload(\n storedEvent({\n store: \"amazon\",\n subscription: undefined,\n subscriptionId: undefined,\n entitlementActive: undefined,\n currency: undefined,\n amountMicros: undefined,\n amountProvenance: undefined,\n userId: undefined,\n transactionId: undefined,\n originalTransactionId: undefined,\n sourceStoreNotificationId: undefined,\n }),\n );\n const ok = validate(payload);\n expect(validate.errors ?? [], JSON.stringify(validate.errors)).toEqual([]);\n expect(ok).toBe(true);\n });\n\n it(\"kit's emitter produces lifecycle events for Apple and Google only\", async () => {\n // storeForPlatform maps the inbound platform enum, which has two members.\n // Horizon and Amazon reach kit through verification, not notifications —\n // which is exactly what their capability descriptor declares.\n for (const [platform, expectedStore] of [\n [\"IOS\", \"apple\"],\n [\"Android\", \"google\"],\n ] as const) {\n const { ctx, inserted } = emitterContext();\n await emitCommerceEvent(ctx as never, {\n projectId: \"projects_1\" as never,\n transition: \"Renewed\",\n active: true,\n previouslyActive: true,\n sourceEvent: { ...(richSource as object), platform } as never,\n });\n expect(inserted[0].doc.store).toBe(expectedStore);\n }\n });\n\n it(\"omits the snapshot rather than inventing an entitlement gate\", () => {\n // The stored gate is optional. Emitting `active: false` for a row that\n // never recorded one would assert no access for something unknown.\n const payload = buildEventPayload(\n storedEvent({ entitlementActive: undefined }),\n );\n expect(payload.subscription).toBeUndefined();\n expect(validateEvent()(payload)).toBe(true);\n });\n\n it(\"carries the gate through when the row recorded one\", () => {\n const payload = buildEventPayload(\n storedEvent({ entitlementActive: false }),\n );\n expect(payload.subscription?.active).toBe(false);\n });\n\n it(\"omits price entirely when the store asserted no amount, rather than sending zero\", () => {\n const payload = buildEventPayload(\n storedEvent({ currency: undefined, amountMicros: undefined }),\n );\n expect(payload.price).toBeUndefined();\n });\n});\n\ndescribe(\"the subscription state vocabulary matches\", () => {\n it(\"kit's own state vocabulary is one the specification declares\", () => {\n // Reading the spec's enum and validating it against the spec's enum proves\n // nothing. The real claim is that kit's union is a subset of it.\n const source = readFileSync(\n fileURLToPath(new URL(\"../webhooks/shared.ts\", import.meta.url)),\n \"utf8\",\n );\n const start = source.indexOf(\"export type SubscriptionState\");\n const block = source.slice(start, source.indexOf(\";\", start));\n const declared = [...block.matchAll(/\"([A-Za-z]+)\"/g)].map((m) => m[1]);\n expect(declared.length).toBeGreaterThan(5);\n for (const state of declared) {\n expect(SPEC_SUBSCRIPTION_STATES, `${state} is undeclared`).toContain(\n state,\n );\n }\n });\n\n it(\"declares no provenance, store, or environment the specification lacks\", () => {\n // Closed value space: the two lists must be identical.\n expect([...DATA_PROVENANCE_VALUES].sort()).toEqual(\n [...SPEC_DATA_PROVENANCE].sort(),\n );\n // Open value spaces: everything kit emits must still be a value the\n // specification names today.\n for (const store of COMMERCE_STORES) {\n expect(SPEC_KNOWN_STORES, `${store} is undeclared`).toContain(store);\n }\n const specEnvironments = (\n primitivesSchema as unknown as {\n $defs: { Environment: { examples: readonly string[] } };\n }\n ).$defs.Environment.examples;\n for (const environment of COMMERCE_ENVIRONMENTS) {\n expect(specEnvironments, `${environment} is undeclared`).toContain(\n environment,\n );\n }\n });\n\n it(\"rejects a state the specification does not declare\", () => {\n const validate = validateEvent();\n const payload = buildEventPayload(\n storedEvent({\n subscription: { state: \"Hibernating\", productId: \"premium.monthly\" },\n }),\n );\n expect(validate(payload)).toBe(false);\n });\n});\n\ndescribe(\"kit's capabilities agree with the published descriptor\", () => {\n const descriptor = JSON.parse(\n readFileSync(\n resolveSpec(\n \"openiap-commerce-protocol/examples/provider-capabilities.json\",\n ),\n \"utf8\",\n ),\n ) as {\n eventTypes: string[];\n stores: Record<\n string,\n Record\n >;\n };\n\n const FIELDS: [keyof (typeof PROVIDER_CAPABILITIES)[\"apple\"], string][] = [\n [\"supportsInitialValidation\", \"initialValidation\"],\n [\"supportsServerNotifications\", \"serverNotifications\"],\n [\"supportsSubscriptions\", \"subscriptions\"],\n [\"supportsRenewalEvents\", \"renewalEvents\"],\n [\"supportsRefundEvents\", \"refundEvents\"],\n [\"supportsExpiration\", \"expiration\"],\n [\"supportsReconciliation\", \"reconciliation\"],\n [\"supportsEntitlements\", \"entitlements\"],\n [\"supportsRevenueAmount\", \"revenueAmount\"],\n ];\n\n it(\"publishes the event vocabulary kit implements\", () => {\n expect([...descriptor.eventTypes].sort()).toEqual(\n [...COMMERCE_EVENT_TYPES].sort(),\n );\n });\n\n // kit knows one axis: what it implements. The descriptor carries both, and\n // fabricating the provider axis from kit's boolean is the conflation the\n // two-axis model exists to prevent — it would claim Amazon publishes no\n // notification channel merely because kit consumes none.\n it.each(Object.keys(PROVIDER_CAPABILITIES))(\n \"%s implementation axis matches kit\",\n (store) => {\n const caps =\n PROVIDER_CAPABILITIES[store as keyof typeof PROVIDER_CAPABILITIES];\n for (const [kitField, specField] of FIELDS) {\n expect(\n descriptor.stores[store][specField].implementation,\n `${store}.${specField}`,\n ).toBe(caps[kitField]);\n }\n },\n );\n\n it(\"never claims to implement more than the provider offers\", () => {\n for (const [store, entry] of Object.entries(descriptor.stores)) {\n for (const [name, support] of Object.entries(entry)) {\n if (support.implementation) {\n expect(support.provider, `${store}.${name}`).toBe(true);\n }\n }\n }\n });\n});\n\ndescribe(\"kit reproduces the specification's lifecycle vectors\", () => {\n const vectors = JSON.parse(\n readFileSync(\n resolveSpec(\"openiap-commerce-protocol/generated/vectors/lifecycle.json\"),\n \"utf8\",\n ),\n ) as {\n entitlement: {\n cases: {\n name: string;\n state: string;\n expiresAt?: number;\n occurredAt: number;\n processedAt: number;\n entitled: boolean;\n }[];\n };\n emission: {\n cases: {\n name: string;\n lifecycleEvent: string | null;\n entitledBefore: boolean;\n entitledAfter: boolean;\n emit: string[];\n }[];\n };\n binding: {\n cases: {\n name: string;\n entitledAtBinding: boolean;\n emit: string[];\n }[];\n };\n };\n\n it.each(vectors.entitlement.cases.map((c) => [c.name, c] as const))(\n \"entitlement: %s\",\n (_name, testCase) => {\n const sub = {\n state: testCase.state,\n productId: \"premium.monthly\",\n ...(testCase.expiresAt === undefined\n ? {}\n : { expiresAt: testCase.expiresAt }),\n } as never;\n expect(entitlementActive(sub, testCase.processedAt)).toBe(\n testCase.entitled,\n );\n },\n );\n\n // Drives kit's REAL emitter. Re-deriving the expected list from\n // entitledBefore/entitledAfter would just restate the generator's formula and\n // could never fail — the point is to make `emitCommerceEvent` itself produce\n // the events the vectors demand.\n const KIT_TRANSITIONS = Object.keys(\n TRANSITION_TO_EVENT,\n ) as LifecycleTransition[];\n\n /** The kit transition whose mapping produces this specification event. */\n function transitionFor(lifecycleEvent: string | null) {\n const match = KIT_TRANSITIONS.find(\n (t) => commerceEventTypeForTransition(t) === lifecycleEvent,\n );\n if (!match) throw new Error(`no kit transition emits ${lifecycleEvent}`);\n return match;\n }\n\n it.each(vectors.emission.cases.map((c) => [c.name, c] as const))(\n \"emission: %s\",\n async (_name, testCase) => {\n const { ctx, inserted } = emitterContext();\n await emitCommerceEvent(ctx as never, {\n projectId: \"projects_1\" as never,\n transition: transitionFor(testCase.lifecycleEvent),\n active: testCase.entitledAfter,\n previouslyActive: testCase.entitledBefore,\n sourceEvent: richSource,\n subscription: {\n state: \"Active\",\n productId: \"premium.monthly\",\n userId: \"user_5e91a7\",\n },\n });\n const emitted = inserted\n .filter((row) => row.table === \"commerceEvents\")\n .map((row) => row.doc.eventType);\n expect(emitted).toEqual(testCase.emit);\n },\n );\n\n it.each(vectors.binding.cases.map((c) => [c.name, c] as const))(\n \"first binding: %s\",\n async (_name, testCase) => {\n const { ctx, inserted } = emitterContext();\n await emitCommerceEvent(ctx as never, {\n projectId: \"projects_1\" as never,\n transition: null,\n active: testCase.entitledAtBinding,\n previouslyActive: false,\n sourceEvent: richSource,\n subscription: {\n state: testCase.entitledAtBinding ? \"Active\" : \"Expired\",\n productId: \"premium.monthly\",\n userId: \"user_5e91a7\",\n },\n });\n expect(\n inserted\n .filter((row) => row.table === \"commerceEvents\")\n .map((row) => row.doc.eventType),\n ).toEqual(testCase.emit);\n },\n );\n\n it(\"maps every transition kit produces onto an event the vectors cover\", () => {\n const covered = new Set(\n vectors.emission.cases.map((c) => c.lifecycleEvent).filter(Boolean),\n );\n const transitions = KIT_TRANSITIONS.filter((t) => t !== \"Ignored\");\n for (const transition of transitions) {\n const event = commerceEventTypeForTransition(transition);\n expect(event, `${transition} must map to an event`).toBeTruthy();\n expect(covered, `${event} must be covered by a vector`).toContain(event);\n }\n });\n\n it(\"emits nothing for the no-op transition, as the vectors require\", () => {\n expect(commerceEventTypeForTransition(\"Ignored\")).toBeNull();\n expect(commerceEventTypeForTransition(null)).toBeNull();\n });\n});\n\ndescribe(\"kit can produce everything the store mapping promises\", () => {\n const mapping = JSON.parse(\n readFileSync(\n resolveSpec(\n \"openiap-commerce-protocol/examples/store-event-mapping.json\",\n ),\n \"utf8\",\n ),\n ) as {\n stores: Record<\n string,\n {\n notificationChannel: string | null;\n mappings: { event: string | null }[];\n }\n >;\n };\n\n it(\"never claims to consume a channel the store does not publish\", () => {\n // notificationChannel is a fact about the store; the capability is a fact\n // about kit. Implementation implies provider, never the reverse.\n for (const [store, entry] of Object.entries(mapping.stores)) {\n const caps =\n PROVIDER_CAPABILITIES[store as keyof typeof PROVIDER_CAPABILITIES];\n if (!caps.supportsServerNotifications) continue;\n expect(\n entry.notificationChannel,\n `${store}: kit consumes notifications the mapping says do not exist`,\n ).not.toBeNull();\n }\n });\n\n it(\"records an unconsumed channel as a kit gap, not a store limitation\", () => {\n // Amazon is the live case: the store publishes a channel, kit integrates\n // no receiver. Collapsing that into \"the store has none\" is the exact\n // conflation the two-axis capability model exists to prevent.\n expect(mapping.stores.amazon.notificationChannel).not.toBeNull();\n expect(PROVIDER_CAPABILITIES.amazon.supportsServerNotifications).toBe(\n false,\n );\n });\n\n it(\"produces no lifecycle events for a store the mapping leaves empty\", () => {\n for (const [store, entry] of Object.entries(mapping.stores)) {\n if (entry.mappings.length > 0) continue;\n const caps =\n PROVIDER_CAPABILITIES[store as keyof typeof PROVIDER_CAPABILITIES];\n expect(caps.supportsSubscriptions, `${store}`).toBe(false);\n expect(caps.supportsRenewalEvents, `${store}`).toBe(false);\n }\n });\n});\n\n/**\n * Stands in for a MutationCtx. `destinations` lets a test exercise the\n * fan-out and the per-destination event-type filter, which a context that\n * always answers \"no destinations\" would hide entirely.\n */\nfunction emitterContext(\n destinations: { _id: string; eventTypes?: string[] }[] = [],\n) {\n const inserted: { table: string; doc: Record }[] = [];\n const byId = new Map>();\n const rowsFor = (table: string) =>\n table === \"outboundDestinations\" ? destinations : [];\n const queryFor = (table: string) => {\n const q: Record = {\n withIndex: () => q,\n collect: async () => rowsFor(table),\n unique: async () => rowsFor(table)[0] ?? null,\n first: async () => rowsFor(table)[0] ?? null,\n };\n return q;\n };\n const ctx = {\n db: {\n insert: async (table: string, doc: Record) => {\n const id = `${table}_${inserted.length + 1}`;\n const row = { ...doc, _id: id, _creationTime: 0 };\n inserted.push({ table, doc: row });\n byId.set(id, row);\n return id;\n },\n patch: async (id: string, patchDoc: Record) => {\n Object.assign(byId.get(id) ?? {}, patchDoc);\n },\n get: async (id: string) => byId.get(id) ?? null,\n query: (table: string) => queryFor(table),\n },\n };\n return { ctx, inserted };\n}\n\n/** A source event complete enough that the emitter fills every canonical field. */\nconst richSource = {\n _id: \"webhookEvents_1\",\n platform: \"IOS\",\n environment: \"Production\",\n occurredAt: 1_756_300_800_000,\n sourceNotificationId: \"8f3b1c2d-4e5a-6b7c-8d9e-0f1a2b3c4d5e\",\n productId: \"premium.monthly\",\n purchaseToken: \"2000000811111111\",\n currency: \"USD\",\n priceAmountMicros: 9_990_000,\n amountProvenance: \"store\",\n} as never;\n\ndescribe(\"kit's cancellation vocabulary is one the specification names\", () => {\n // The tokens live in a schema description on one side and a TypeScript union\n // on the other, with nothing between them. A store this backend never sees\n // may add more, so the check is containment, not equality.\n const described = JSON.parse(\n readFileSync(\n resolveSpec(\n \"openiap-commerce-protocol/generated/schemas/commerce-event.schema.json\",\n ),\n \"utf8\",\n ),\n ).properties.subscription.properties.cancellationReason.description as string;\n\n const KIT_REASONS = [\n \"UserCanceled\",\n \"BillingError\",\n \"PriceIncreaseDeclined\",\n \"ProductUnavailable\",\n \"Refunded\",\n \"Other\",\n ];\n\n it(\"matches the union the receiver declares\", () => {\n const source = readFileSync(\n fileURLToPath(new URL(\"../webhooks/shared.ts\", import.meta.url)),\n \"utf8\",\n );\n const start = source.indexOf(\"export type WebhookCancellationReason\");\n const block = source.slice(start, source.indexOf(\";\", start));\n const declared = [...block.matchAll(/\"([A-Za-z]+)\"/g)].map((m) => m[1]);\n expect(declared.sort()).toEqual([...KIT_REASONS].sort());\n });\n\n it(\"is named in full by the specification\", () => {\n for (const reason of KIT_REASONS) {\n expect(described, `${reason} is unnamed by the spec`).toContain(reason);\n }\n });\n});\n\ndescribe(\"what the emitter writes is a valid specification event\", () => {\n // The two halves of this file never met: one validated a hand-written row,\n // the other checked event-type strings. Neither took what emitCommerceEvent\n // actually inserted and ran it through the wire builder and the published\n // schema — which is the only assertion that makes this a conformance test.\n const validate = validateEvent();\n\n it(\"a full lifecycle emission survives buildEventPayload and the schema\", async () => {\n const { ctx, inserted } = emitterContext();\n await emitCommerceEvent(ctx as never, {\n projectId: \"projects_1\" as never,\n transition: \"Renewed\",\n active: true,\n previouslyActive: false,\n sourceEvent: richSource,\n subscriptionId: \"subscriptions_1\" as never,\n subscription: {\n state: \"Active\",\n productId: \"premium.monthly\",\n expiresAt: 1_758_979_200_000,\n renewsAt: 1_758_979_200_000,\n willRenew: true,\n userId: \"user_5e91a7\",\n },\n });\n\n const events = inserted.filter((row) => row.table === \"commerceEvents\");\n expect(events).toHaveLength(2);\n for (const row of events) {\n const payload = buildEventPayload(row.doc as never);\n const ok = validate(payload);\n expect(validate.errors ?? [], JSON.stringify(validate.errors)).toEqual(\n [],\n );\n expect(ok).toBe(true);\n // The internal identifiers the emitter stores must not reach the wire.\n const wire = payload as unknown as Record;\n expect(wire.subscriptionId).toBeUndefined();\n expect(wire.sourceEventId).toBeUndefined();\n expect(wire._id).toBeUndefined();\n }\n });\n\n it(\"prices the lifecycle event only, never both events of one transition\", async () => {\n const { ctx, inserted } = emitterContext();\n await emitCommerceEvent(ctx as never, {\n projectId: \"projects_1\" as never,\n transition: \"Started\",\n active: true,\n previouslyActive: false,\n sourceEvent: richSource,\n subscription: {\n state: \"Active\",\n productId: \"premium.monthly\",\n userId: \"user_5e91a7\",\n },\n });\n const events = inserted.filter((row) => row.table === \"commerceEvents\");\n expect(events.map((row) => row.doc.eventType)).toEqual([\n \"subscription.started\",\n \"entitlement.granted\",\n ]);\n expect(events[0].doc.amountMicros).toBe(9_990_000);\n expect(events[1].doc.amountMicros).toBeUndefined();\n expect(events[1].doc.currency).toBeUndefined();\n expect(events[1].doc.amountProvenance).toBeUndefined();\n });\n\n it(\"omits the amount when the source recorded no provenance\", async () => {\n // \"store\" is the only provenance the contract calls authoritative, so\n // defaulting to it would present an unknown as a store assertion.\n const { ctx, inserted } = emitterContext();\n await emitCommerceEvent(ctx as never, {\n projectId: \"projects_1\" as never,\n transition: \"Renewed\",\n active: true,\n previouslyActive: true,\n sourceEvent: {\n ...(richSource as object),\n amountProvenance: undefined,\n } as never,\n });\n expect(inserted[0].doc.amountProvenance).toBeUndefined();\n expect(buildEventPayload(inserted[0].doc as never).price).toBeUndefined();\n });\n\n it(\"puts the amount on the entitlement event when there is no lifecycle event\", async () => {\n // A receipt-bootstrapped first purchase flips the gate with no lifecycle\n // change. Dropping the amount there would lose it entirely.\n const { ctx, inserted } = emitterContext();\n await emitCommerceEvent(ctx as never, {\n projectId: \"projects_1\" as never,\n transition: null,\n active: true,\n previouslyActive: false,\n sourceEvent: richSource,\n subscription: {\n state: \"Active\",\n productId: \"premium.monthly\",\n userId: \"user_5e91a7\",\n },\n });\n const events = inserted.filter((row) => row.table === \"commerceEvents\");\n expect(events.map((row) => row.doc.eventType)).toEqual([\n \"entitlement.granted\",\n ]);\n expect(events[0].doc.amountMicros).toBe(9_990_000);\n });\n\n it(\"carries the store's own notification id, not the emitter's row id\", async () => {\n const { ctx, inserted } = emitterContext();\n await emitCommerceEvent(ctx as never, {\n projectId: \"projects_1\" as never,\n transition: \"Renewed\",\n active: true,\n previouslyActive: true,\n sourceEvent: richSource,\n });\n const payload = buildEventPayload(inserted[0].doc as never);\n expect(payload.sourceStoreEventId).toBe(\n \"8f3b1c2d-4e5a-6b7c-8d9e-0f1a2b3c4d5e\",\n );\n expect(payload.price).toEqual({\n currency: \"USD\",\n amountMicros: 9_990_000,\n provenance: \"store\",\n });\n });\n\n it(\"fans out to a subscribed destination and skips an unsubscribed one\", async () => {\n const { ctx, inserted } = emitterContext([\n { _id: \"outboundDestinations_1\" },\n { _id: \"outboundDestinations_2\", eventTypes: [\"subscription.expired\"] },\n ]);\n await emitCommerceEvent(ctx as never, {\n projectId: \"projects_1\" as never,\n transition: \"Renewed\",\n active: true,\n previouslyActive: true,\n sourceEvent: richSource,\n });\n const deliveries = inserted.filter(\n (row) => row.table === \"outboundDeliveries\",\n );\n // The filtering destination asked for a different event type.\n expect(deliveries).toHaveLength(1);\n expect(deliveries[0].doc.destinationId).toBe(\"outboundDestinations_1\");\n });\n});\n\ndescribe(\"every mapping row produces the event it promises\", () => {\n // The mapping table is prose until something runs it. Without this, a row can\n // claim any event that merely exists in the vocabulary and stay green — which\n // is exactly how several rows drifted from the pipeline.\n type Row = {\n storeNotification: string;\n storeNotificationCode?: string;\n storeSubtype?: string | null;\n whenNoPriorStoreEvent?: boolean;\n whenPreviousState?: string[];\n event: string | null;\n };\n const mapping = JSON.parse(\n readFileSync(\n resolveSpec(\n \"openiap-commerce-protocol/examples/store-event-mapping.json\",\n ),\n \"utf8\",\n ),\n ) as { stores: Record };\n\n /** Notifications carried on their own message field, not a type enum. */\n const SPECIAL: Record = {\n voidedPurchaseNotification: \"PurchaseRefunded\",\n testNotification: \"TestNotification\",\n };\n\n function internalTypeFor(store: string, row: Row): string | null {\n if (row.storeNotification in SPECIAL) return SPECIAL[row.storeNotification];\n if (store === \"apple\") {\n return mapAppleNotificationType(\n row.storeNotification,\n row.storeSubtype ?? null,\n );\n }\n return mapGoogleSubscriptionNotificationType(\n Number(row.storeNotificationCode),\n );\n }\n\n function emittedFor(store: string, row: Row): string | null {\n const internalType = internalTypeFor(store, row);\n if (!internalType) return null;\n // This drives the state machine directly, so it models \"no prior store\n // event\" as \"no record\" — one of the two cases the qualifier covers. The\n // other, a record with no store history, is reached only through the full\n // handler and is exercised in subscriptions/internal.test.ts (\"starts\n // rather than recovers when a record exists with no store history\").\n const current = row.whenNoPriorStoreEvent\n ? null\n : {\n state: (row.whenPreviousState?.[0] ?? \"Active\") as never,\n productId: \"premium.monthly\",\n expiresAt: 9_999_999_999_999,\n };\n const result = applySubscriptionTransition(current, {\n type: internalType,\n productId: \"premium.monthly\",\n platform: store === \"apple\" ? \"IOS\" : \"Android\",\n purchaseToken: \"token\",\n expiresAt: 9_999_999_999_999,\n } as never);\n return commerceEventTypeForTransition(result.transition);\n }\n\n const cases = Object.entries(mapping.stores).flatMap(([store, entry]) =>\n entry.mappings.map(\n (row) =>\n [\n `${store} ${row.storeNotification}${row.storeSubtype ? `/${row.storeSubtype}` : \"\"}${row.whenNoPriorStoreEvent ? \" (no store history)\" : row.whenPreviousState ? ` (was ${row.whenPreviousState[0]})` : \"\"}`,\n store,\n row,\n ] as const,\n ),\n );\n\n // The implementation's own code table, read from its source. Google sends a\n // number; the readable name lives only in a trailing comment, so without this\n // the table's names are decoration the test never executes — swap two and it\n // stays green while an implementer maps the wrong notification.\n const googleCodeNames = (() => {\n const source = readFileSync(\n fileURLToPath(new URL(\"../webhooks/shared.ts\", import.meta.url)),\n \"utf8\",\n );\n const start = source.indexOf(\"const GOOGLE_SUB_TYPE_MAP\");\n expect(start, \"GOOGLE_SUB_TYPE_MAP not found\").toBeGreaterThan(-1);\n // End at the object's own closing brace rather than at whatever declaration\n // happens to follow it: a negative indexOf would silently swallow the rest\n // of the file and inflate the table.\n const end = source.indexOf(\"\\n};\", start);\n expect(end, \"GOOGLE_SUB_TYPE_MAP is unterminated\").toBeGreaterThan(start);\n const block = source.slice(start, end);\n const names = new Map();\n const codes = new Set();\n for (const line of block.split(\"\\n\")) {\n const entry = line.match(/^\\s*(\\d+):\\s*\"[^\"]*\",/);\n if (!entry) continue;\n codes.add(entry[1]);\n const named = line.match(/\\/\\/\\s*([A-Z][A-Z_]+)/);\n // Every entry must name itself, or the table's names go unchecked.\n expect(named, `code ${entry[1]} has no name comment`).not.toBeNull();\n if (named) names.set(entry[1], named[1]);\n }\n expect(names.size).toBe(codes.size);\n return names;\n })();\n\n it(\"names every Google notification the way the store numbers it\", () => {\n for (const row of mapping.stores.google.mappings) {\n if (!row.storeNotificationCode) continue;\n const expected = googleCodeNames.get(row.storeNotificationCode);\n expect(\n expected,\n `code ${row.storeNotificationCode} is not in the map`,\n ).toBeDefined();\n expect(row.storeNotification, `code ${row.storeNotificationCode}`).toBe(\n expected,\n );\n }\n });\n\n it(\"gives every Google notification code a row\", () => {\n const covered = new Set(\n mapping.stores.google.mappings.map((row) => row.storeNotificationCode),\n );\n for (const code of googleCodeNames.keys()) {\n expect(covered, `code ${code} has no row`).toContain(code);\n }\n });\n\n it(\"names only Apple notifications the receiver recognises\", () => {\n // A row for a type the receiver rejects would document a mapping that never\n // happens — and with `event: null` it would look like a deliberate no-op.\n for (const row of mapping.stores.apple.mappings) {\n expect(\n mapAppleNotificationType(\n row.storeNotification as never,\n (row.storeSubtype ?? null) as never,\n ),\n `${row.storeNotification} is not handled by the receiver`,\n ).not.toBeNull();\n }\n });\n\n // Both sides of the previous check came from the same object, so it could\n // never fail. Coverage has to be measured against the implementation's own\n // inventory, which is what the Google code check already does.\n const appleHandledTypes = (() => {\n const source = readFileSync(\n fileURLToPath(new URL(\"../webhooks/shared.ts\", import.meta.url)),\n \"utf8\",\n );\n const start = source.indexOf(\"function mapAppleNotificationType\");\n const end = source.indexOf(\"\\n}\", start);\n const body = source.slice(start, end);\n return new Set(\n [...body.matchAll(/case \"([A-Z_]+)\":/g)].map((match) => match[1]),\n );\n })();\n\n it(\"gives every Apple notification the receiver handles a row\", () => {\n expect(appleHandledTypes.size).toBeGreaterThan(10);\n const covered = new Set(\n mapping.stores.apple.mappings.map((row) => row.storeNotification),\n );\n for (const type of appleHandledTypes) {\n expect(covered, `${type} has no row`).toContain(type);\n }\n });\n\n it.each(cases)(\"%s\", (_label, store, row) => {\n expect(emittedFor(store, row)).toBe(row.event);\n });\n});\n", + "kit/server/api/commerce/graphql.ts": "// The portable GraphQL binding: one POST endpoint executing the generated\n// schema projection. Resolvers only adapt transport — auth context, variable\n// unpacking, and error mapping — and delegate to the shared handlers.\n\nimport {\n buildSchema,\n execute,\n GraphQLError,\n Kind,\n OperationTypeNode,\n parse,\n validate,\n type DocumentNode,\n type OperationDefinitionNode,\n type SelectionSetNode,\n} from \"graphql\";\nimport HTTP_BINDING from \"openiap-commerce-protocol/generated/bindings/http-binding.json\";\nimport operationsSdl from \"openiap-commerce-protocol/generated/bindings/operations-sdl.json\";\n\nimport { ProtocolOperationError } from \"./errors\";\nimport * as handlers from \"./handlers\";\nimport type { ProtocolContext } from \"./handlers\";\nimport { validateOperationInput } from \"./validation\";\n\n// The projection is generated from the SDL; serving anything else would fail\n// the introspection-agreement rule in SPEC.md 7.\nexport const commerceGraphqlSchema = buildSchema(operationsSdl.sdl);\n\n// Bounds chosen far above the canonical documents and the standard\n// introspection query, far below anything abusive.\nconst MAX_QUERY_DEPTH = 20;\nconst MAX_FIELD_NODES = 1_000;\n\ntype CommerceRole = \"none\" | \"verification\" | \"server\";\n\nexport interface GraphqlRequestContext {\n role: CommerceRole | null;\n apiKey?: string;\n requestIp?: string;\n}\n\nconst operationAuth = new Map(\n HTTP_BINDING.operations.map((operation) => [operation.name, operation.auth]),\n);\n\nfunction assertRole(operationName: string, context: GraphqlRequestContext) {\n const required = operationAuth.get(operationName);\n if (required === \"none\" || required === undefined) return;\n if (context.role === null) {\n throw new GraphQLError(\"A credential is required\", {\n extensions: { code: \"UNAUTHORIZED\" },\n });\n }\n if (required === \"server\" && context.role !== \"server\") {\n throw new GraphQLError(\"This operation requires the server role\", {\n extensions: { code: \"FORBIDDEN\" },\n });\n }\n}\n\nfunction protocolContext(context: GraphqlRequestContext): ProtocolContext {\n if (!context.apiKey) {\n throw new GraphQLError(\"A credential is required\", {\n extensions: { code: \"UNAUTHORIZED\" },\n });\n }\n return { apiKey: context.apiKey, requestIp: context.requestIp };\n}\n\nasync function resolve(\n operationName: string,\n context: GraphqlRequestContext,\n input: unknown,\n run: (input: never) => Promise | T,\n): Promise {\n assertRole(operationName, context);\n // Server-role authoritative auth already ran in executeCommerceGraphql,\n // BEFORE execute() — graphql-js coerces variables before any resolver, so\n // an auth check here would come after input validation (SPEC.md 5 forbids\n // that ordering for server operations).\n // The same generated JSON Schema the REST binding enforces. GraphQL's own\n // coercion does not check the custom scalars' patterns and bounds, so\n // without this the bindings would disagree on CONTENT bounds (SPEC.md 8).\n // Structural asymmetry is different and documented: REST ignores an unknown\n // input member (SPEC.md 6) while GraphQL rejects one at coercion (SPEC.md 7).\n if (input !== undefined) {\n const invalid = validateOperationInput(operationName, input);\n if (invalid) {\n throw new GraphQLError(invalid, {\n extensions: { code: \"INVALID_REQUEST\" },\n });\n }\n }\n try {\n return await run(input as never);\n } catch (error) {\n if (error instanceof GraphQLError) throw error;\n if (error instanceof ProtocolOperationError) {\n throw new GraphQLError(error.message, {\n extensions: {\n code: error.code,\n ...(error.retryAfterSec === undefined\n ? {}\n : { retryAfterSec: error.retryAfterSec }),\n },\n });\n }\n throw new GraphQLError(\"The operation failed\", {\n extensions: { code: \"INTERNAL_ERROR\" },\n });\n }\n}\n\n// buildSchema attaches no resolvers, so the root value carries one function\n// per operation; nested members resolve off plain handler results.\nconst rootValue = {\n providerCapabilities: (\n _args: unknown,\n context: GraphqlRequestContext,\n ): Promise =>\n resolve(\"providerCapabilities\", context, undefined, () =>\n handlers.providerCapabilities(),\n ),\n subscriptionStatus: (\n args: { input: { userId: string } },\n context: GraphqlRequestContext,\n ): Promise =>\n resolve(\"subscriptionStatus\", context, args.input, (input) =>\n handlers.subscriptionStatus(protocolContext(context), input),\n ),\n entitlements: (\n args: { input: { userId: string } },\n context: GraphqlRequestContext,\n ): Promise =>\n resolve(\"entitlements\", context, args.input, (input) =>\n handlers.entitlements(protocolContext(context), input),\n ),\n verifyPurchase: (\n args: { input: Parameters[1] },\n context: GraphqlRequestContext,\n ): Promise =>\n resolve(\"verifyPurchase\", context, args.input, (input) =>\n handlers.verifyPurchase(protocolContext(context), input),\n ),\n bindPurchase: (\n args: { input: Parameters[1] },\n context: GraphqlRequestContext,\n ): Promise =>\n resolve(\"bindPurchase\", context, args.input, (input) =>\n handlers.bindPurchase(protocolContext(context), input),\n ),\n eraseUser: (\n args: { input: { userId: string } },\n context: GraphqlRequestContext,\n ): Promise =>\n resolve(\"eraseUser\", context, args.input, (input) =>\n handlers.eraseUser(protocolContext(context), input),\n ),\n};\n\nfunction boundsError(document: DocumentNode): string | null {\n const operations = document.definitions.filter(\n (definition): definition is OperationDefinitionNode =>\n definition.kind === Kind.OPERATION_DEFINITION,\n );\n if (operations.length !== 1) {\n return \"Send exactly one operation per request\";\n }\n const operation = operations[0];\n if (operation.operation === OperationTypeNode.SUBSCRIPTION) {\n return \"The GraphQL binding serves no subscriptions\";\n }\n\n const fragments = new Map();\n for (const definition of document.definitions) {\n if (definition.kind === Kind.FRAGMENT_DEFINITION) {\n fragments.set(definition.name.value, definition.selectionSet);\n }\n }\n\n // Count actual selections after expanding inline and named fragments, so an\n // aliased amplification hidden inside `... on Query { a b c }` or a fragment\n // spread is counted at the level it really executes. Crucially the walk\n // ABORTS the instant any bound is exceeded, and a total node-visit budget\n // hard-caps the work: a fragment DAG (f0 spreads f1 twice, f1 spreads f2\n // twice, …) expands exponentially, so fully expanding it before checking is\n // itself the DoS. Early exit plus the visit budget keep the cost linear in\n // the budget regardless of how the DAG is shaped.\n const MAX_VISITS = 10_000;\n let fields = 0;\n let rootFields = 0;\n let visits = 0;\n const seenFragments = new Set();\n const walk = (\n selectionSet: SelectionSetNode | undefined,\n depth: number,\n ): string | null => {\n if (depth > MAX_QUERY_DEPTH) return \"Query is too deep\";\n if (!selectionSet?.selections) return null;\n for (const selection of selectionSet.selections) {\n if (++visits > MAX_VISITS) return \"Query is too complex\";\n if (selection.kind === Kind.FIELD) {\n fields += 1;\n if (fields > MAX_FIELD_NODES) return \"Query selects too many fields\";\n if (depth === 1) {\n rootFields += 1;\n if (rootFields > 1) {\n return \"Send exactly one operation field per request\";\n }\n }\n const nested = walk(selection.selectionSet, depth + 1);\n if (nested) return nested;\n } else if (selection.kind === Kind.INLINE_FRAGMENT) {\n // An inline fragment does not add a level: its members select on the\n // same object at the current depth.\n const nested = walk(selection.selectionSet, depth);\n if (nested) return nested;\n } else {\n const name = selection.name.value;\n if (seenFragments.has(name)) continue; // cycle guard\n seenFragments.add(name);\n const nested = walk(fragments.get(name), depth);\n seenFragments.delete(name);\n if (nested) return nested;\n }\n }\n return null;\n };\n const exceeded = walk(operation.selectionSet, 1);\n if (exceeded) return exceeded;\n\n // A field-free operation (only fragment spreads that resolve to nothing) is\n // not one operation field.\n if (rootFields !== 1) return \"Send exactly one operation field per request\";\n return null;\n}\n\nfunction errorPayload(code: string, message: string) {\n return { errors: [{ message, extensions: { code } }] };\n}\n\n// graphql-js parse/validation/coercion messages embed the submitted document\n// and variable VALUES verbatim — a coercion error on VerifyPurchaseInput\n// echoes the whole JWS back to an unauthenticated caller, which SPEC.md 8\n// forbids (no store evidence or signed payloads in messages). Request-level\n// failures therefore answer with fixed text; the caller reproduces the detail\n// locally against the published projection.\nconst PARSE_MESSAGE = \"The GraphQL document does not parse\";\nconst VALIDATION_MESSAGE = \"The GraphQL document is not valid for the schema\";\nconst COERCION_MESSAGE =\n \"The request variables are not valid for the operation\";\n\n/**\n * The single root operation field, resolved through fragment spreads. Only\n * called after boundsError enforced exactly one operation with exactly one\n * root field, so the first field found is the operation being invoked.\n */\nfunction rootFieldName(document: DocumentNode): string | null {\n const operations = document.definitions.filter(\n (definition): definition is OperationDefinitionNode =>\n definition.kind === Kind.OPERATION_DEFINITION,\n );\n const operation = operations[0];\n if (!operation) return null;\n const fragments = new Map();\n for (const definition of document.definitions) {\n if (definition.kind === Kind.FRAGMENT_DEFINITION) {\n fragments.set(definition.name.value, definition.selectionSet);\n }\n }\n const seen = new Set();\n const find = (selectionSet?: SelectionSetNode): string | null => {\n for (const selection of selectionSet?.selections ?? []) {\n if (selection.kind === Kind.FIELD) return selection.name.value;\n if (selection.kind === Kind.INLINE_FRAGMENT) {\n const found = find(selection.selectionSet);\n if (found) return found;\n } else if (selection.kind === Kind.FRAGMENT_SPREAD) {\n const name = selection.name.value;\n if (seen.has(name)) continue;\n seen.add(name);\n const found = find(fragments.get(name));\n if (found) return found;\n }\n }\n return null;\n };\n return find(operation.selectionSet);\n}\n\n/**\n * Executes one GraphQL request against the projection. Returns the JSON body\n * and status; operation failures are 200 responses whose errors carry the\n * protocol code, per SPEC.md 7.\n */\nexport async function executeCommerceGraphql(\n payload: unknown,\n context: GraphqlRequestContext,\n): Promise<{ status: 200; body: unknown }> {\n // SPEC.md 7: the GraphQL binding answers with HTTP 200 and the code in\n // errors[].extensions.code for every failure, including request-level ones.\n if (payload === null || typeof payload !== \"object\") {\n return {\n status: 200,\n body: errorPayload(\"INVALID_REQUEST\", \"Request body is not JSON\"),\n };\n }\n const { query, variables, operationName } = payload as {\n query?: unknown;\n variables?: unknown;\n operationName?: unknown;\n };\n if (typeof query !== \"string\" || query.length === 0) {\n return {\n status: 200,\n body: errorPayload(\"INVALID_REQUEST\", \"query is required\"),\n };\n }\n\n let document: DocumentNode;\n try {\n document = parse(query);\n } catch {\n // A syntax message can echo document text, and evidence pasted as a\n // literal is document text — fixed message only.\n return {\n status: 200,\n body: errorPayload(\"INVALID_REQUEST\", PARSE_MESSAGE),\n };\n }\n\n const bounds = boundsError(document);\n if (bounds) {\n return { status: 200, body: errorPayload(\"INVALID_REQUEST\", bounds) };\n }\n\n const validationErrors = validate(commerceGraphqlSchema, document);\n if (validationErrors.length) {\n // Literal-coercion validation errors echo the submitted value.\n return {\n status: 200,\n body: errorPayload(\"INVALID_REQUEST\", VALIDATION_MESSAGE),\n };\n }\n\n // SPEC.md 5: server-role authorization precedes input validation, and\n // graphql-js coerces variables BEFORE any resolver runs — so the resolver is\n // too late. Authorize here, after transport-shape checks (parse, bounds,\n // validate) and before execute(), where coercion happens.\n const operationField = rootFieldName(document);\n if (operationField && operationAuth.get(operationField) === \"server\") {\n if (context.role === null) {\n return {\n status: 200,\n body: errorPayload(\"UNAUTHORIZED\", \"A credential is required\"),\n };\n }\n if (context.role !== \"server\") {\n return {\n status: 200,\n body: errorPayload(\n \"FORBIDDEN\",\n \"This operation requires the server role\",\n ),\n };\n }\n try {\n await handlers.assertServerCredential({\n apiKey: context.apiKey ?? \"\",\n requestIp: context.requestIp,\n });\n } catch (error) {\n if (error instanceof ProtocolOperationError) {\n return { status: 200, body: errorPayload(error.code, error.message) };\n }\n return {\n status: 200,\n body: errorPayload(\"INTERNAL_ERROR\", \"The operation failed\"),\n };\n }\n }\n\n const result = await execute({\n schema: commerceGraphqlSchema,\n document,\n rootValue,\n contextValue: context,\n variableValues:\n variables && typeof variables === \"object\"\n ? (variables as Record)\n : undefined,\n operationName: typeof operationName === \"string\" ? operationName : null,\n });\n\n return {\n status: 200,\n body: {\n ...(result.data === undefined ? {} : { data: result.data }),\n ...(result.errors?.length\n ? {\n errors: result.errors.map((error) => {\n const coded = typeof error.extensions?.code === \"string\";\n return {\n // A codeless error here is graphql-js variable coercion,\n // whose message echoes the submitted value — replace it.\n // Resolver-raised errors carry a code and a safe message.\n message: coded ? error.message : COERCION_MESSAGE,\n extensions: {\n code: coded\n ? (error.extensions.code as string)\n : \"INVALID_REQUEST\",\n ...(typeof error.extensions?.retryAfterSec === \"number\"\n ? { retryAfterSec: error.extensions.retryAfterSec }\n : {}),\n },\n };\n }),\n }\n : {}),\n },\n };\n}\n", + "kit/scripts/docs/commerce-interop-fixture.ts": "import {\n internalMutation,\n internalQuery,\n internalAction,\n} from \"./_generated/server\";\nimport { internal } from \"./_generated/api\";\nimport { v } from \"convex/values\";\nimport { apiKeyStorageFields } from \"./apiKeys/helpers\";\n\nexport const seed = internalMutation({\n args: {\n secret: v.string(),\n key: v.string(),\n publishable: v.string(),\n storageId: v.id(\"_storage\"),\n },\n handler: async (ctx, args) => {\n const now = Date.now();\n const userId = await ctx.db.insert(\"users\", {});\n const organizationId = await ctx.db.insert(\"organizations\", {\n name: \"Local interop\",\n slug: crypto.randomUUID(),\n createdAt: now,\n updatedAt: now,\n });\n const projectId = await ctx.db.insert(\"projects\", {\n organizationId,\n name: \"Local interop\",\n slug: crypto.randomUUID(),\n apiKey: \"disabled\",\n legacyApiKeyFallbackDisabledAt: now,\n androidPackageName: \"dev.openiap.interop\",\n iosBundleId: \"dev.openiap.interop\",\n iosAppAppleId: 123456789,\n iosAppStoreIssuerId: \"local-issuer\",\n iosAppStoreKeyId: \"local-key\",\n horizonEnabled: true,\n horizonAppId: \"1234567890\",\n horizonAppSecret: \"local-fixture-secret\",\n amazonSandboxEnabled: true,\n amazonSharedSecret: \"local-fixture-secret\",\n createdAt: now,\n updatedAt: now,\n });\n for (const [key, keyType] of [\n [args.key, \"secret\"],\n [args.publishable, \"publishable\"],\n ] as const)\n await ctx.db.insert(\"apiKeys\", {\n organizationId,\n projectId,\n ...(await apiKeyStorageFields(key, keyType)),\n name: \"Local fixture\",\n keyType,\n isActive: true,\n createdBy: userId,\n createdAt: now,\n updatedAt: now,\n });\n const fileId = await ctx.db.insert(\"files\", {\n organizationId,\n projectId,\n uploadedBy: userId,\n storageId: args.storageId,\n fileName: \"local-fixture.json\",\n fileType: \"application/json\",\n fileSize: 0,\n purpose: \"android_service_account\",\n isInternal: true,\n createdAt: now,\n updatedAt: now,\n });\n await ctx.db.patch(projectId, { googlePlayServiceAccountFileId: fileId });\n await ctx.db.insert(\"outboundDestinations\", {\n projectId,\n url: \"https://receiver.example.com/commerce\",\n secret: args.secret,\n enabled: true,\n createdAt: now,\n updatedAt: now,\n });\n return { projectId };\n },\n});\nexport const setup = internalAction({\n args: { secret: v.string(), key: v.string(), publishable: v.string() },\n handler: async (ctx, args) => {\n const storageId = await ctx.storage.store(\n new Blob(\n [\n JSON.stringify({\n type: \"service_account\",\n project_id: \"local-fixture\",\n private_key:\n \"-----BEGIN PRIVATE KEY-----\\nfixture only\\n-----END PRIVATE KEY-----\",\n client_email: \"fixture@local-test.iam.gserviceaccount.com\",\n }),\n ],\n { type: \"application/json\" },\n ),\n );\n return ctx.runMutation(internal.interopFixture.seed, {\n ...args,\n storageId,\n });\n },\n});\nexport const inspect = internalQuery({\n args: { projectId: v.id(\"projects\") },\n handler: async (ctx, { projectId }) => ({\n purchases: await ctx.db\n .query(\"purchases\")\n .withIndex(\"by_project\", (q) => q.eq(\"projectId\", projectId))\n .collect(),\n subscriptions: await ctx.db\n .query(\"subscriptions\")\n .withIndex(\"by_project\", (q) => q.eq(\"projectId\", projectId))\n .collect(),\n events: await ctx.db\n .query(\"commerceEvents\")\n .withIndex(\"by_project\", (q) => q.eq(\"projectId\", projectId))\n .collect(),\n jobs: await ctx.db\n .query(\"subscriptionUserErasureJobs\")\n .withIndex(\"by_project\", (q) => q.eq(\"projectId\", projectId))\n .collect(),\n deliveries: await ctx.db\n .query(\"outboundDeliveries\")\n .withIndex(\"by_project\", (q) => q.eq(\"projectId\", projectId))\n .collect(),\n }),\n});\n", + "kit/scripts/docs/commerce-source-snapshot.mjs": "import assert from \"node:assert/strict\";\nimport { createHash } from \"node:crypto\";\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\n\nconst hash = (bytes) => createHash(\"sha256\").update(bytes).digest(\"hex\");\n\nexport function assertSourceHashes(root, hashes, { allowMissing = [] } = {}) {\n assert(\n hashes && Object.keys(hashes).length > 0,\n `Missing source fingerprints: ${root}`,\n );\n assert(\n allowMissing.every(\n (name) => /(^|\\/)_?generated\\//.test(name) && Object.hasOwn(hashes, name),\n ),\n \"Only recorded generated inputs may be absent\",\n );\n const missing = [];\n for (const [name, expected] of Object.entries(hashes)) {\n const path = join(root, name);\n if (allowMissing.includes(name) && !existsSync(path)) {\n missing.push(name);\n continue;\n }\n assert.equal(\n hash(readFileSync(path)),\n expected,\n `Source input changed during execution or since recording: ${name}`,\n );\n }\n return missing;\n}\n\nexport function pinSources(root, files) {\n const names = () => [...new Set(files())].sort();\n const contents = new Map(\n names().map((name) => [name, readFileSync(join(root, name))]),\n );\n const hashes = Object.freeze(\n Object.fromEntries(\n [...contents].map(([name, bytes]) => [name, hash(bytes)]),\n ),\n );\n return {\n hashes,\n write(name, target) {\n assert(contents.has(name), `Source was not pinned: ${name}`);\n mkdirSync(dirname(target), { recursive: true });\n writeFileSync(target, contents.get(name));\n },\n assertUnchanged() {\n assert.deepEqual(\n names(),\n Object.keys(hashes),\n `Source input inventory changed during execution: ${root}`,\n );\n assertSourceHashes(root, hashes);\n },\n };\n}\n", + "kit/scripts/docs/commerce-store-coverage.mjs": "import assert from \"node:assert/strict\";\nimport { join } from \"node:path\";\n\n// Invoked only inside run-commerce-interop's isolated deployment.\nexport async function runStoreCoverage({\n example,\n output,\n key,\n kitUrl,\n receiver,\n appleJws,\n storeState,\n inspect,\n check,\n trace,\n}) {\n const { createProvider, CREDENTIALS } = await import(\n join(example, \"provider.mjs\")\n );\n const { createCommerceClient } = await import(\n join(example, \"composition/commerce-client.mjs\")\n );\n const { startAppBackend } = await import(\n join(example, \"composition/app-backend.mjs\")\n );\n const kit = createCommerceClient({\n baseUrl: kitUrl,\n credential: `Bearer ${key}`,\n });\n let sqlite;\n const providerServer = Bun.serve({\n hostname: \"127.0.0.1\",\n port: 0,\n fetch: (request) => sqlite.fetch(request),\n });\n const exampleUrl = `http://127.0.0.1:${providerServer.port}`;\n const fixtureClient = createCommerceClient({\n baseUrl: exampleUrl,\n credential: CREDENTIALS.server,\n });\n const app = startAppBackend({\n path: join(output, \"all-stores-app.sqlite\"),\n receiver,\n providers: {\n example: { baseUrl: exampleUrl, credential: CREDENTIALS.server },\n iapkit: { baseUrl: kitUrl, credential: `Bearer ${key}` },\n },\n resolveSession: (request) =>\n request.headers.get(\"authorization\")?.replace(\"Bearer \", \"\"),\n resolveStoreUser: (request, store) =>\n request.headers.get(\"authorization\") === `Bearer store_${store}`\n ? `store-user-${store}`\n : null,\n });\n const endpoints = [app.url, receiver.url];\n const results = {};\n async function request(\n store,\n path,\n method = \"GET\",\n input,\n session = `store_${store}`,\n ) {\n const response = await fetch(app.url + path, {\n method,\n headers: {\n authorization: `Bearer ${session}`,\n \"content-type\": \"application/json\",\n },\n ...(input ? { body: JSON.stringify(input) } : {}),\n });\n const result = await response.json().catch(() => null);\n trace.push({ store, path, method, status: response.status, result });\n return { status: response.status, result };\n }\n try {\n for (const store of [\"apple\", \"amazon\", \"horizon\"]) {\n const input =\n store === \"apple\"\n ? { store, apple: { jws: appleJws } }\n : store === \"amazon\"\n ? {\n store,\n amazon: {\n userId: \"store-user-amazon\",\n receiptId: \"local-amazon-receipt\",\n sandbox: true,\n },\n }\n : {\n store,\n horizon: {\n userId: \"store-user-horizon\",\n sku: \"premium.monthly\",\n },\n };\n const userId = `store_${store}`;\n const evidence =\n store === \"apple\"\n ? appleJws\n : store === \"amazon\"\n ? JSON.stringify([\n input.amazon.userId,\n input.amazon.receiptId,\n true,\n ])\n : JSON.stringify([input.horizon.userId, input.horizon.sku]);\n const fixture = {\n store,\n evidence,\n userId,\n productId: \"premium.monthly\",\n startsAt: Date.now(),\n expiresAt: Date.now() + 3600000,\n pointInTime: store !== \"apple\",\n currentVerdict: () => storeState[store],\n };\n sqlite = createProvider(\n join(output, `store-${store}.sqlite`),\n Date.now,\n fixture,\n );\n results[store] = {};\n for (const [name, client] of [\n [\"example\", fixtureClient],\n [\"iapkit\", kit],\n ]) {\n app.select(name);\n check(\n `${store}/${name}: keeps the same app and receiver`,\n [app.url, receiver.url],\n endpoints,\n );\n const before = await client.call(\"entitlements\", { userId });\n check(`${store}/${name}: starts without access`, before.productIds, []);\n check(\n `${store}/${name}: unverified evidence cannot bind`,\n (await client.call(\"bindPurchase\", { ...input, userId })).bound,\n false,\n );\n const verified = await client.call(\"verifyPurchase\", input);\n check(\n `${store}/${name}: verifies the store-specific input`,\n verified.isValid,\n true,\n );\n check(\n `${store}/${name}: verification alone grants no account access`,\n (await client.call(\"entitlements\", { userId })).productIds,\n [],\n );\n const bought = await request(store, \"/purchase\", \"POST\", input);\n check(`${store}/${name}: app purchase succeeds`, bought.status, 200);\n check(\n `${store}/${name}: app receives access`,\n bought.result?.productIds,\n [\"premium.monthly\"],\n );\n check(\n `${store}/${name}: binding is repeatable`,\n (await client.call(\"bindPurchase\", { ...input, userId })).bound,\n true,\n );\n check(\n `${store}/${name}: another account cannot claim the purchase`,\n (await client.call(\"bindPurchase\", { ...input, userId: \"store_bob\" }))\n .bound,\n false,\n );\n const access = await client.call(\"entitlements\", { userId });\n check(\n `${store}/${name}: access includes only verified products`,\n access.productIds,\n [\"premium.monthly\"],\n );\n check(\n `${store}/${name}: tokenless access does not leak store evidence`,\n JSON.stringify(access).includes(\"store-user-\") ||\n JSON.stringify(access).includes(\"local-amazon-receipt\"),\n false,\n );\n if (store !== \"apple\") {\n check(\n `${store}/${name}: does not invent subscription lifecycle records`,\n access.subscriptions,\n [],\n );\n const forged = {\n store,\n [store]: { ...input[store], userId: \"someone-else\" },\n };\n check(\n `${store}/${name}: rejects another store account in the app session`,\n (await request(store, \"/purchase\", \"POST\", forged)).status,\n 403,\n );\n storeState[store] = \"outage\";\n check(\n `${store}/${name}: an upstream outage fails the access read`,\n (await request(store, \"/access\")).status,\n 503,\n );\n storeState[store] = false;\n check(\n `${store}/${name}: a negative store recheck removes access`,\n (await client.call(\"entitlements\", { userId })).productIds,\n [],\n );\n storeState[store] = true;\n check(\n `${store}/${name}: rechecked ownership restores access`,\n (await client.call(\"entitlements\", { userId })).productIds,\n [\"premium.monthly\"],\n );\n }\n results[store][name] = {\n verified: verified.isValid,\n productIds: access.productIds,\n subscriptions: access.subscriptions.length,\n storeRecheck: store !== \"apple\",\n };\n }\n app.select(\"example\");\n check(\n `${store}: switching back needs no consumer edit`,\n (await request(store, \"/access\")).result.productIds,\n [\"premium.monthly\"],\n );\n const deleted = await request(store, \"/account\", \"DELETE\");\n check(\n `${store}: the app accepts account erasure`,\n deleted.result?.accepted,\n true,\n );\n let pending = 1;\n for (let attempt = 0; attempt < 100 && pending; attempt++) {\n pending = await app.drainErasure();\n if (pending) await Bun.sleep(100);\n }\n check(`${store}: both providers complete erasure`, pending, 0);\n for (const [name, client] of [\n [\"example\", fixtureClient],\n [\"iapkit\", kit],\n ]) {\n check(\n `${store}/${name}: erased account has no access`,\n (await client.call(\"entitlements\", { userId })).productIds,\n [],\n );\n check(\n `${store}/${name}: erased evidence cannot bind again`,\n (await client.call(\"bindPurchase\", { ...input, userId })).bound,\n false,\n );\n }\n check(\n `${store}: an erased session cannot submit another purchase`,\n (await request(store, \"/purchase\", \"POST\", input)).status,\n 401,\n );\n const state = await inspect();\n check(\n `${store}: IAPKit removes account identity from persisted purchases`,\n state.purchases.some((row) => row.appUserId === userId),\n false,\n );\n sqlite.close();\n sqlite = null;\n }\n assert.equal(Object.keys(results).length, 3);\n return results;\n } finally {\n await app.close();\n await providerServer.stop(true);\n sqlite?.close();\n }\n}\n", + "kit/scripts/docs/run-commerce-interop.mjs": "import assert from \"node:assert/strict\";\nimport { mock } from \"bun:test\";\nimport {\n existsSync,\n mkdirSync,\n mkdtempSync,\n readFileSync,\n rmSync,\n writeFileSync,\n symlinkSync,\n} from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { join, resolve } from \"node:path\";\nimport { createHash, randomBytes } from \"node:crypto\";\nimport { ConvexHttpClient } from \"convex/browser\";\nimport { anyApi, getFunctionName } from \"convex/server\";\nimport { Hono } from \"hono\";\nimport { pinSources } from \"./commerce-source-snapshot.mjs\";\n\nconst kit = resolve(import.meta.dir, \"../..\");\nconst repo = resolve(kit, \"../..\");\nconst example = resolve(\n process.argv[2] ?? join(repo, \"../openiap-commerce-protocol-example\"),\n);\nconst revision = (cwd) => {\n const result = Bun.spawnSync([\"git\", \"rev-parse\", \"HEAD\"], { cwd });\n assert.equal(result.exitCode, 0, \"Cannot identify source revision\");\n return result.stdout.toString().trim();\n};\nconst revisions = { openiap: revision(repo), example: revision(example) };\nconst unchangedFiles = [\n \"composition/app-backend.mjs\",\n \"composition/commerce-client.mjs\",\n \"consumer.mjs\",\n \"webhooks.mjs\",\n \"erasure.mjs\",\n \"contract.mjs\",\n];\nconst inputs = {\n openiap: pinSources(kit, () => [\n ...new Bun.Glob(\"{server,convex}/**/*.{ts,js,json}\").scanSync({ cwd: kit }),\n \"src/convex.ts\",\n \"convex.json\",\n \"tsconfig.json\",\n \"package.json\",\n ]),\n example: pinSources(example, () => [\n ...unchangedFiles,\n ...new Bun.Glob(\"*.mjs\").scanSync({ cwd: example }),\n ...new Bun.Glob(\"composition/**/*.mjs\").scanSync({ cwd: example }),\n \"README.md\",\n \"package.json\",\n \"package-lock.json\",\n ]),\n harness: pinSources(import.meta.dir, () => [\n \"run-commerce-interop.mjs\",\n \"commerce-interop-fixture.ts\",\n \"commerce-store-coverage.mjs\",\n \"commerce-source-snapshot.mjs\",\n ]),\n workspace: pinSources(repo, () => [\n \"bun.lock\",\n \"package.json\",\n \"packages/mcp-server/package.json\",\n \"packages/mcp-server/src/kit-client.ts\",\n \"specs/commerce-protocol/package.json\",\n ...new Bun.Glob(\n \"specs/commerce-protocol/{src,generated,examples}/**/*.{mjs,js,json}\",\n ).scanSync({ cwd: repo }),\n ]),\n};\nconst before = Object.fromEntries(\n unchangedFiles.map((name) => [name, inputs.example.hashes[name]]),\n);\nfunction optionalGeneratedFiles(root, hashes) {\n const result = Bun.spawnSync([\"git\", \"check-ignore\", \"--stdin\"], {\n cwd: root,\n stdin: Buffer.from(Object.keys(hashes).join(\"\\n\") + \"\\n\"),\n });\n assert([0, 1].includes(result.exitCode), \"Cannot identify generated inputs\");\n return result.stdout\n .toString()\n .trim()\n .split(\"\\n\")\n .filter((name) => /(^|\\/)_?generated\\//.test(name));\n}\nconst optionalInputs = {\n openiap: optionalGeneratedFiles(kit, inputs.openiap.hashes),\n workspace: optionalGeneratedFiles(repo, inputs.workspace.hashes),\n};\nconst output = resolve(\n process.argv[3] ?? mkdtempSync(join(tmpdir(), \"commerce-interop-\")),\n);\nconst deployment = join(output, \"local-convex\");\nmkdirSync(deployment, { recursive: true });\nassert(\n !existsSync(join(deployment, \".env.local\")),\n \"Use a new output directory; a run must start empty.\",\n);\n// Unrelated image processing and maintenance entry points stay out of the isolated deployment.\nfor (const name of Object.keys(inputs.openiap.hashes))\n if (\n (name.startsWith(\"convex/\") ||\n [\"convex.json\", \"tsconfig.json\"].includes(name)) &&\n ![\"convex/crons.ts\", \"convex/files/action.ts\"].includes(name)\n )\n inputs.openiap.write(name, join(deployment, name));\ninputs.harness.write(\n \"commerce-interop-fixture.ts\",\n join(deployment, \"convex/interopFixture.ts\"),\n);\nsymlinkSync(join(kit, \"node_modules\"), join(deployment, \"node_modules\"), \"dir\");\nwriteFileSync(\n join(deployment, \"package.json\"),\n JSON.stringify({\n name: \"commerce-interop-local\",\n type: \"module\",\n dependencies: { convex: \"1.44.0\" },\n }),\n);\nconst env = { ...process.env };\nfor (const key of Object.keys(env))\n if (\n key.startsWith(\"CONVEX_\") ||\n key.startsWith(\"VITE_KIT_CONVEX_\") ||\n key === \"VITE_CONVEX_URL\"\n )\n delete env[key];\nenv.CONVEX_AGENT_MODE = \"anonymous\";\nconst logPath = join(output, \"convex.log\");\nlet convexProcess;\nasync function boot() {\n writeFileSync(logPath, \"\");\n convexProcess = Bun.spawn(\n [\n process.execPath,\n join(kit, \"node_modules/convex/bin/main.js\"),\n \"dev\",\n \"--typecheck\",\n \"disable\",\n \"--codegen\",\n \"disable\",\n \"--tail-logs\",\n \"disable\",\n \"--local-backend-version\",\n \"precompiled-2026-08-25-7cce8fb\",\n ],\n {\n cwd: deployment,\n env,\n stdout: Bun.file(logPath),\n stderr: Bun.file(logPath),\n },\n );\n for (let i = 0; i < 600; i++) {\n if (readFileSync(logPath, \"utf8\").includes(\"Convex functions ready!\"))\n return;\n if (convexProcess.exitCode !== null)\n throw new Error(`Local Convex exited; inspect ${logPath}`);\n await Bun.sleep(250);\n }\n throw new Error(`Local Convex did not become ready; inspect ${logPath}`);\n}\nasync function stop() {\n if (convexProcess) {\n convexProcess.kill(\"SIGINT\");\n await convexProcess.exited;\n }\n}\nconst checks = [],\n trace = [],\n results = {\n example: { label: \"openiap-commerce-protocol-example\" },\n iapkit: { label: \"IAPKit\" },\n };\nfunction check(label, actual, expected) {\n assert.deepEqual(actual, expected, label);\n checks.push(label);\n console.log(`PASS ${label}`);\n}\nconst hash = (path) =>\n createHash(\"sha256\").update(readFileSync(path)).digest(\"hex\");\nlet appServer, receiver, sqlite, sqliteServer, kitServer;\ntry {\n await boot();\n const config = JSON.parse(\n readFileSync(join(deployment, \".convex/local/default/config.json\"), \"utf8\"),\n );\n const convexUrl = `http://127.0.0.1:${config.ports.cloud}`;\n assert.equal(new URL(convexUrl).hostname, \"127.0.0.1\");\n process.env.VITE_KIT_CONVEX_URL = convexUrl;\n const admin = new ConvexHttpClient(convexUrl);\n admin.setAdminAuth(config.adminKey);\n const ctx = {\n runQuery: admin.query.bind(admin),\n runMutation: admin.mutation.bind(admin),\n runAction: admin.action.bind(admin),\n };\n const secret = randomBytes(32).toString(\"hex\");\n const exampleSecret = randomBytes(32).toString(\"hex\");\n const key = \"openiap-kit_sk_\" + randomBytes(24).toString(\"hex\"),\n publishable = \"openiap-kit_pk_\" + randomBytes(24).toString(\"hex\");\n const seeded = await admin.action(anyApi.interopFixture.setup, {\n secret,\n key,\n publishable,\n });\n const startedAt = Date.now(),\n expiresAt = startedAt + 45000,\n token = \"local-interop-google-token\",\n userId = \"interop_alice\",\n productId = \"premium.monthly\";\n let googleState = \"SUBSCRIPTION_STATE_ACTIVE\";\n mock.module(\"googleapis\", () => ({\n google: {\n auth: { GoogleAuth: class {} },\n androidpublisher: () => ({\n purchases: {\n productsv2: {\n getproductpurchasev2: async () => {\n throw { code: 404 };\n },\n },\n subscriptionsv2: {\n get: async ({ token: received }) => {\n if (received !== token) throw { code: 404 };\n return {\n data: {\n subscriptionState: googleState,\n startTime: new Date(startedAt - 60000).toISOString(),\n acknowledgementState: \"ACKNOWLEDGEMENT_STATE_ACKNOWLEDGED\",\n latestOrderId: \"GPA.local-fixture\",\n testPurchase: {},\n lineItems: [\n {\n productId,\n expiryTime: new Date(expiresAt).toISOString(),\n autoRenewingPlan: {\n autoRenewEnabled:\n googleState === \"SUBSCRIPTION_STATE_ACTIVE\",\n recurringPrice: { currencyCode: \"USD\", units: \"5\" },\n },\n },\n ],\n },\n };\n },\n },\n },\n }),\n },\n }));\n mock.module(\"google-auth-library\", () => ({\n OAuth2Client: class {\n async verifyIdToken() {\n return {\n getPayload: () => ({\n email: \"fixture@local-test.iam.gserviceaccount.com\",\n email_verified: true,\n }),\n };\n }\n },\n }));\n process.env.GOOGLE_PUBSUB_AUDIENCE = \"https://kit.example.com\";\n const storeState = { apple: true, amazon: true, horizon: true };\n const applePayload = {\n transactionId: \"90000000000001\",\n originalTransactionId: \"90000000000001\",\n bundleId: \"dev.openiap.interop\",\n productId,\n type: \"Auto-Renewable Subscription\",\n environment: \"Sandbox\",\n purchaseDate: Date.now(),\n expiresDate: Date.now() + 3600000,\n };\n const appleJws = [\n Buffer.from('{\"alg\":\"ES256\"}').toString(\"base64url\"),\n Buffer.from(JSON.stringify(applePayload)).toString(\"base64url\"),\n \"Zml4dHVyZQ\",\n ].join(\".\");\n const appleLibrary = await import(\"@apple/app-store-server-library\");\n mock.module(\"@apple/app-store-server-library\", () => ({\n ...appleLibrary,\n AppStoreServerAPIClient: class {\n async getTransactionInfo(id) {\n assert.equal(id, applePayload.transactionId);\n return { signedTransactionInfo: appleJws };\n }\n },\n SignedDataVerifier: class {\n async verifyAndDecodeTransaction(jws) {\n assert.equal(jws, appleJws);\n return applePayload;\n }\n },\n }));\n const nativeFetch = globalThis.fetch;\n globalThis.fetch = async (url, init) => {\n const target = new URL(\n typeof url === \"string\" || url instanceof URL ? url : url.url,\n );\n if (target.hostname === \"graph.oculus.com\") {\n assert.equal(target.pathname, \"/1234567890/verify_entitlement\");\n const form = new URLSearchParams(init.body);\n assert.equal(form.get(\"user_id\"), \"store-user-horizon\");\n assert.equal(form.get(\"sku\"), productId);\n if (storeState.horizon === \"outage\")\n return Response.json({}, { status: 400 });\n return Response.json({\n success: storeState.horizon,\n grant_time: Math.floor(Date.now() / 1000),\n });\n }\n if (target.hostname === \"appstore-sdk.amazon.com\") {\n assert(target.pathname.includes(\"/sandbox/\"));\n assert(\n target.pathname.endsWith(\n \"/user/store-user-amazon/receiptId/local-amazon-receipt\",\n ),\n );\n if (storeState.amazon === \"outage\")\n return Response.json({}, { status: 496 });\n return Response.json({\n receiptId: \"local-amazon-receipt\",\n productId,\n productType: \"SUBSCRIPTION\",\n purchaseDate: Date.now() - 60000,\n cancelDate: storeState.amazon ? null : Date.now(),\n testTransaction: true,\n });\n }\n return nativeFetch(url, init);\n };\n const nativeRunAction = ctx.runAction;\n ctx.runAction = (ref, args) =>\n getFunctionName(ref) === \"files/internal:getAppleP8Key\"\n ? Promise.resolve({ keyContent: \"local-fixture-key\" })\n : nativeRunAction(ref, args);\n const { verifyAppStoreReceiptInternalV1 } =\n await import(\"../../convex/purchases/ios.ts\");\n const { verifyAmazonReceiptInternalV1 } =\n await import(\"../../convex/purchases/amazon.ts\");\n const { verifyMetaHorizonReceiptInternalV1 } =\n await import(\"../../convex/purchases/horizon.ts\");\n const { readBoundPurchaseEntitlements } =\n await import(\"../../convex/purchases/action.ts\");\n const { verifyGooglePlayReceiptInternalV1 } =\n await import(\"../../convex/purchases/android.ts\");\n const { ingestGoogleRtdn } = await import(\"../../convex/webhooks/google.ts\");\n const { deliverPendingEventsHandler } =\n await import(\"../../convex/commerce/delivery.ts\");\n const { client } = await import(\"../../server/convex.ts\");\n const realAction = client.action.bind(client);\n const fixtureActions = {\n \"purchases/android:verifyGooglePlayReceiptInternalV1\":\n verifyGooglePlayReceiptInternalV1,\n \"purchases/ios:verifyAppStoreReceiptInternalV1\":\n verifyAppStoreReceiptInternalV1,\n \"purchases/amazon:verifyAmazonReceiptInternalV1\":\n verifyAmazonReceiptInternalV1,\n \"purchases/horizon:verifyMetaHorizonReceiptInternalV1\":\n verifyMetaHorizonReceiptInternalV1,\n \"purchases/action:readBoundPurchaseEntitlements\":\n readBoundPurchaseEntitlements,\n };\n client.action = (ref, args) =>\n fixtureActions[getFunctionName(ref)]\n ? fixtureActions[getFunctionName(ref)]._handler(ctx, args)\n : realAction(ref, args);\n const { commerceRoutes } =\n await import(\"../../server/api/commerce/routes.ts\");\n kitServer = Bun.serve({\n hostname: \"127.0.0.1\",\n port: 0,\n fetch: new Hono().route(\"/commerce/v1\", commerceRoutes).fetch,\n });\n const { createProvider, CREDENTIALS } = await import(\n join(example, \"provider.mjs\")\n );\n const { startConsumer } = await import(join(example, \"consumer.mjs\"));\n const { startAppBackend } = await import(\n join(example, \"composition/app-backend.mjs\")\n );\n const { createCommerceClient } = await import(\n join(example, \"composition/commerce-client.mjs\")\n );\n const { deliver } = await import(join(example, \"webhooks.mjs\"));\n const fixture = {\n store: \"google\",\n evidence: token,\n userId,\n productId,\n startsAt: startedAt - 60000,\n expiresAt,\n };\n const sqlitePath = join(output, \"provider.sqlite\");\n sqlite = createProvider(sqlitePath, Date.now, fixture);\n sqliteServer = Bun.serve({\n hostname: \"127.0.0.1\",\n port: 0,\n fetch: (request) => sqlite.fetch(request),\n });\n receiver = startConsumer({\n secret: [\n { name: \"example\", projectId: \"commerce_example\", secret: exampleSecret },\n { name: \"iapkit\", projectId: seeded.projectId, secret },\n ],\n path: join(output, \"receiver.sqlite\"),\n });\n const providers = {\n example: {\n baseUrl: `http://127.0.0.1:${sqliteServer.port}`,\n credential: CREDENTIALS.server,\n },\n iapkit: {\n baseUrl: `http://127.0.0.1:${kitServer.port}`,\n credential: `Bearer ${key}`,\n },\n };\n const sessions = new Map([\n [\"Bearer local-alice\", userId],\n [\"Bearer local-bob\", \"interop_bob\"],\n ]);\n appServer = startAppBackend({\n path: join(output, \"app.sqlite\"),\n providers,\n receiver,\n resolveSession: (request) =>\n sessions.get(request.headers.get(\"authorization\")),\n });\n const appUrl = appServer.url,\n receiverUrl = receiver.url;\n const evidence = { store: \"google\", google: { purchaseToken: token } };\n const clients = Object.fromEntries(\n Object.entries(providers).map(([name, cfg]) => [\n name,\n createCommerceClient(cfg),\n ]),\n );\n let current = \"example\";\n async function appCall(\n path,\n method = \"GET\",\n body,\n session = \"Bearer local-alice\",\n ) {\n const response = await fetch(appServer.url + path, {\n method,\n headers: { authorization: session, \"content-type\": \"application/json\" },\n ...(body ? { body: JSON.stringify(body) } : {}),\n });\n const result = await response.json().catch(() => null);\n trace.push({\n provider: current,\n path,\n method,\n status: response.status,\n result,\n });\n return { status: response.status, result };\n }\n function select(name) {\n current = name;\n appServer.select(name);\n check(\n `${name}: app and receiver endpoints remain unchanged`,\n [appServer.url, receiver.url],\n [appUrl, receiverUrl],\n );\n }\n const rawEvents = [];\n async function receive(init) {\n rawEvents.push(init);\n return fetch(receiver.url, { ...init, method: \"POST\" });\n }\n async function drain(name, fail = false) {\n return name === \"example\"\n ? deliver(sqlite, exampleSecret, Date.now, (init) =>\n fail\n ? Promise.resolve(new Response(null, { status: 503 }))\n : receive(init),\n )\n : deliverPendingEventsHandler(ctx, async (req) =>\n fail\n ? 503\n : (await receive({ headers: req.headers, body: req.body })).status,\n );\n }\n async function observe(kind, id = kind) {\n googleState =\n kind === \"expire\"\n ? \"SUBSCRIPTION_STATE_EXPIRED\"\n : kind === \"cancel\"\n ? \"SUBSCRIPTION_STATE_CANCELED\"\n : \"SUBSCRIPTION_STATE_ACTIVE\";\n return ingestGoogleRtdn._handler(ctx, {\n apiKey: publishable,\n oidcToken: \"local-fixture-oidc\",\n rawMessage: \"local-fixture\",\n payload: {\n messageId: id,\n packageName: \"dev.openiap.interop\",\n eventTimeMillis: Date.now(),\n subscriptionNotification: {\n notificationType: kind === \"expire\" ? 13 : kind === \"cancel\" ? 3 : 4,\n purchaseToken: token,\n subscriptionId: productId,\n },\n },\n });\n }\n for (const name of Object.keys(providers)) {\n select(name);\n results[name].before = (await appCall(\"/access\")).result;\n check(\n `${name}: empty provider gives no access`,\n results[name].before.productIds,\n [],\n );\n check(\n `${name}: actual verification accepts fixture`,\n (await clients[name].call(\"verifyPurchase\", evidence)).isValid,\n true,\n );\n check(\n `${name}: verification alone does not grant access`,\n (await appCall(\"/access\")).result.productIds,\n [],\n );\n results[name].bound = (\n await appCall(\"/purchase\", \"POST\", {\n ...evidence,\n userId: \"attacker_supplied\",\n })\n ).result;\n check(\n `${name}: unchanged app fulfills the purchase`,\n results[name].bound.productIds,\n [productId],\n );\n check(\n `${name}: repeated fulfillment is idempotent`,\n (await appCall(\"/purchase\", \"POST\", evidence)).result.productIds,\n [productId],\n );\n check(\n `${name}: body cannot select account identity`,\n (\n await clients[name].call(\"entitlements\", {\n userId: \"attacker_supplied\",\n })\n ).productIds,\n [],\n );\n check(\n `${name}: another user cannot claim the purchase`,\n (\n await clients[name].call(\"bindPurchase\", {\n ...evidence,\n userId: \"interop_bob\",\n })\n ).bound,\n false,\n );\n const credential =\n name === \"example\" ? CREDENTIALS.verification : `Bearer ${publishable}`;\n const r = await fetch(\n providers[name].baseUrl + \"/commerce/v1/users/erase\",\n {\n method: \"POST\",\n headers: {\n authorization: credential,\n \"content-type\": \"application/json\",\n },\n body: JSON.stringify({ userId }),\n },\n );\n check(\n `${name}: publishable verification credentials cannot erase`,\n r.status,\n 403,\n );\n if (name === \"iapkit\") await observe(\"start\");\n await drain(name);\n check(\n `${name}: same receiver persists an authenticated grant`,\n receiver\n .inspect()\n .some(\n (event) =>\n event.projectId ===\n (name === \"example\" ? \"commerce_example\" : seeded.projectId) &&\n event.eventType === \"entitlement.granted\" &&\n event.userId === userId,\n ),\n true,\n );\n if (name === \"example\")\n sqlite.observe({ id: \"cancel\", kind: \"cancel\", occurredAt: Date.now() });\n else await observe(\"cancel\");\n const state = await clients[name].call(\"subscriptionStatus\", { userId });\n results[name].canceled = state;\n check(\n `${name}: cancellation stops renewal but keeps paid access`,\n [state.active, state.subscription.willRenew],\n [true, false],\n );\n await drain(name, true);\n }\n select(\"example\");\n check(\n \"Switching back restores the same persisted access\",\n (await appCall(\"/access\")).result.productIds,\n [productId],\n );\n const pendingBefore = await admin.query(\n anyApi.interopFixture.inspect,\n seeded,\n );\n check(\n \"IAPKit 503 leaves a durable pending delivery\",\n pendingBefore.deliveries.some(\n (row) => row.status === \"pending\" && row.attempts === 1,\n ),\n true,\n );\n console.log(\n \"Restarting the actual local Convex process and SQLite provider with retries pending.\",\n );\n await stop();\n await boot();\n sqlite.close();\n sqlite = createProvider(sqlitePath, Date.now, fixture);\n check(\n \"IAPKit pending deliveries survive process restart\",\n (await admin.query(anyApi.interopFixture.inspect, seeded)).deliveries,\n pendingBefore.deliveries,\n );\n await Bun.sleep(Math.max(0, startedAt + 34000 - Date.now()));\n for (const name of Object.keys(providers)) await drain(name);\n for (const projectId of [\"commerce_example\", seeded.projectId])\n check(\n `${projectId === \"commerce_example\" ? \"example\" : \"iapkit\"}: cancellation retry reaches unchanged receiver`,\n receiver\n .inspect()\n .some(\n (event) =>\n event.projectId === projectId &&\n event.eventType === \"subscription.canceled\",\n ),\n true,\n );\n const count = receiver.count();\n receiver.reopen();\n for (const init of rawEvents.slice()) await receive(init);\n check(\n \"Lost acknowledgements and receiver restart create no duplicate effects\",\n receiver.count(),\n count,\n );\n console.log(\"Waiting for the actual paid expiry deadline.\");\n await Bun.sleep(Math.max(0, expiresAt + 10 - Date.now()));\n for (const name of Object.keys(providers)) {\n select(name);\n results[name].expired = (await appCall(\"/access\")).result;\n check(\n `${name}: access expires before a store notification`,\n results[name].expired.productIds,\n [],\n );\n }\n sqlite.observe({ id: \"expire\", kind: \"expire\", occurredAt: Date.now() });\n await observe(\"expire\");\n check(\n \"Repeated IAPKit store notification is deduplicated\",\n (await observe(\"expire\")).deduped,\n true,\n );\n for (const name of Object.keys(providers)) await drain(name);\n for (const projectId of [\"commerce_example\", seeded.projectId])\n check(\n `${projectId === \"commerce_example\" ? \"example\" : \"iapkit\"}: receiver observes revocation`,\n receiver\n .inspect()\n .some(\n (event) =>\n event.projectId === projectId &&\n event.eventType === \"entitlement.revoked\",\n ),\n true,\n );\n check(\n \"App account deletion is accepted\",\n (await appCall(\"/account\", \"DELETE\")).result.accepted,\n true,\n );\n for (let i = 0; i < 80 && (await appServer.drainErasure()); i++)\n await Bun.sleep(100);\n check(\n \"App completes erasure across both configured providers\",\n await appServer.drainErasure(),\n 0,\n );\n check(\n \"Deleted session cannot submit a late purchase\",\n (await appCall(\"/purchase\", \"POST\", evidence)).status,\n 401,\n );\n for (const name of Object.keys(providers)) {\n results[name].erased = await clients[name].call(\"entitlements\", { userId });\n check(\n `${name}: erased user has no access`,\n results[name].erased.productIds,\n [],\n );\n const first = await clients[name].call(\"eraseUser\", { userId }),\n again = await clients[name].call(\"eraseUser\", { userId });\n results[name].erasure = again;\n check(\n `${name}: repeated erasure returns the same completed job`,\n [first.status, again.jobId],\n [\"completed\", first.jobId],\n );\n }\n const erasedState = await admin.query(anyApi.interopFixture.inspect, seeded);\n check(\n \"IAPKit persisted subscription, event and job identities are removed\",\n JSON.stringify(erasedState).includes(userId),\n false,\n );\n check(\n \"Example purchase identity is removed\",\n sqlite.inspect().purchases[0].userId,\n null,\n );\n check(\n \"Previously delivered app event identities are removed\",\n receiver.inspect().some((event) => event.userId === userId),\n false,\n );\n receiver.reopen();\n for (const init of rawEvents.slice()) await receive(init);\n check(\n \"Late signed redeliveries after erasure and restart cannot restore identities\",\n receiver.inspect().some((event) => event.userId === userId),\n false,\n );\n check(\n \"Consumer source files are byte-for-byte unchanged during replacement\",\n Object.fromEntries(\n unchangedFiles.map((name) => [name, hash(join(example, name))]),\n ),\n before,\n );\n const { runStoreCoverage } = await import(\"./commerce-store-coverage.mjs\");\n const storeCoverage = await runStoreCoverage({\n example,\n output,\n key,\n kitUrl: `http://127.0.0.1:${kitServer.port}`,\n receiver,\n appleJws,\n storeState,\n inspect: () =>\n admin.query(anyApi.interopFixture.inspect, {\n projectId: seeded.projectId,\n }),\n check,\n trace,\n });\n for (const snapshot of Object.values(inputs)) snapshot.assertUnchanged();\n check(\n \"Source revisions remain unchanged throughout execution\",\n { openiap: revision(repo), example: revision(example) },\n revisions,\n );\n const report = {\n results,\n storeCoverage,\n harnessHashes: inputs.harness.hashes,\n sources: {\n openiap: {\n baseRevision: revisions.openiap,\n hashes: inputs.openiap.hashes,\n optionalGeneratedFiles: optionalInputs.openiap,\n },\n example: {\n baseRevision: revisions.example,\n hashes: inputs.example.hashes,\n },\n workspace: {\n baseRevision: revisions.openiap,\n hashes: inputs.workspace.hashes,\n optionalGeneratedFiles: optionalInputs.workspace,\n },\n },\n runtime: {\n bun: Bun.version,\n convex: JSON.parse(\n readFileSync(join(kit, \"node_modules/convex/package.json\"), \"utf8\"),\n ).version,\n },\n command:\n \"bun --conditions=openiap-source packages/kit/scripts/docs/run-commerce-interop.mjs ../openiap-commerce-protocol-example \",\n configurationChanges: [\n \"Commerce base URL and server credential\",\n \"Separate webhook signing keys, each bound to its provider and project\",\n \"Example fixture store adapter configured to recognize the same synthetic Google token\",\n ],\n recordedAt: new Date().toISOString(),\n checks,\n checkCount: checks.length,\n trace,\n consumerHashes: before,\n changedConsumerFiles: [],\n providerOrder: [\"example\", \"iapkit\", \"example\"],\n backendVersion: config.backendVersion,\n scope: {\n actual: [\n \"IAPKit Hono routes and handlers\",\n \"Apple, Google, Amazon and Horizon verification action bodies; Google RTDN action\",\n \"Amazon and Horizon stored purchase binding, fresh ownership reads and erasure\",\n \"Convex persistence, authorization, subscription transitions, erasure scheduler and delivery leases\",\n \"IAPKit outbound signing and result recording\",\n \"Original example SQLite provider\",\n \"One app backend and one receiver, real loopback HTTP\",\n \"Actual Convex process restart with pending deliveries\",\n ],\n fixtures: [\n \"Google Play HTTP and OIDC, Amazon RVS and Meta Graph responses\",\n \"Apple signed-transaction verifier, Server API and test signing-key loader at their external boundaries\",\n \"Paid subscription and app sessions\",\n \"HTTPS destination transport redirected to the loopback receiver through the existing worker injection\",\n ],\n excluded: [\n \"Real store purchase, device SDK integration and store cryptographic verification\",\n \"Public HTTPS DNS/TLS delivery\",\n \"Automatic migration of existing purchases between providers\",\n \"Unrelated image processing and scheduled maintenance crons\",\n ],\n },\n };\n writeFileSync(\n join(output, \"report.json\"),\n JSON.stringify(report, null, 2) + \"\\n\",\n );\n console.log(\n `Completed ${checks.length} checks. Report: ${join(output, \"report.json\")}`,\n );\n} catch (error) {\n writeFileSync(\n join(output, \"failure.json\"),\n JSON.stringify(\n {\n recordedAt: new Date().toISOString(),\n completedChecks: checks,\n assertion: error.message,\n },\n null,\n 2,\n ) + \"\\n\",\n );\n throw error;\n} finally {\n await appServer?.close();\n await receiver?.close();\n await sqliteServer?.stop(true);\n sqlite?.close();\n await kitServer?.stop(true);\n await stop();\n}\n" +} diff --git a/packages/docs/public/commerce-composition/run.json b/packages/docs/public/commerce-composition/run.json new file mode 100644 index 000000000..5a1b1f934 --- /dev/null +++ b/packages/docs/public/commerce-composition/run.json @@ -0,0 +1,455 @@ +{ + "recordedAt": "2026-09-08T22:55:45.959Z", + "scope": "Two separately implemented fixture providers and two scoped receivers over loopback HTTP in one Bun process. One backend client and receiver implementation, unchanged across both configurations. Host purchase callbacks are simulated.", + "limits": [ + "Same project authorship; no independent organization validation.", + "No store purchase, SDK/device checkout, complete profile conformance, or production deployment.", + "SQLite versus in-memory state is tested on fresh stores, not a historical-data migration.", + "One trusted emitter/project and secret per receiver database; no cross-provider deduplication claim." + ], + "protocolVersion": "1.0", + "sourceHashes": { + "composition/commerce-client.mjs": "f1f1a056bc76801df25111cb12fdcde501d507a5461ef8b15bfe2f57979cd03c", + "composition/memory-provider.mjs": "edf6a7567ead756dc4a5c15d5b5b14f4d4314db31e3aa3c01c8ec543754fcc31", + "composition/purchase-flow.mjs": "ce6f98426c36eab346e900ac06ed31f2d387e542c518a48c92a67f7bae147ec8", + "composition/run.mjs": "0e7aa1c8c5cab79f06d9853fa5b91f0e15f0322b4574b5f1a97f1ea119fc9b14", + "composition/README.md": "99e302c7365cf3969f61be2c466f31f5cf0928b2f3f0351e45907666f0459a44", + "contract.mjs": "c97b51ed48875303c382059af5dc321005d677ab2ea834a6e00c060308bc2ab2", + "provider.mjs": "682b2c24797d5007373c1951641b2f6f156c933e654b2ad1865219be64b15d51", + "webhooks.mjs": "4838bac7a9083440998409aa1ab543999495ea6a907036bc78ba2002feb588b2", + "package.json": "396fc93b7d50240739af2b817c172ffab8692245bd919de3b26ee713b56d455b", + "package-lock.json": "6f5333cc45203d6a27fec82c9370a8c25fef7faab591467dd2ff3c79acd6ae1c" + }, + "configurationChanges": [ + "Provider URL", + "Server credential", + "Emitter endpoint, signing secret, and isolated inbox database" + ], + "checks": [ + "sqlite: contract major matches", + "sqlite: no unearned profile claim", + "sqlite: no access before verification", + "sqlite: rejected evidence stays a verdict", + "sqlite: verifier outage stays an operation failure", + "sqlite: rejected verification cannot fulfill", + "sqlite: accepts fixture evidence", + "sqlite: verification alone grants no access", + "sqlite: selected product reaches purchase callback", + "sqlite: paywall selection completes", + "sqlite: fulfillment precedes finishing", + "sqlite: trusted user receives Premium", + "sqlite: client identity is ignored", + "sqlite: another user cannot take ownership", + "sqlite: repeated fulfillment returns the same access", + "sqlite: cancellation preserves paid time", + "sqlite: temporary receiver failure is queued for retry", + "memory: contract major matches", + "memory: no unearned profile claim", + "memory: no access before verification", + "memory: rejected evidence stays a verdict", + "memory: verifier outage stays an operation failure", + "memory: rejected verification cannot fulfill", + "memory: accepts fixture evidence", + "memory: verification alone grants no access", + "memory: selected product reaches purchase callback", + "memory: paywall selection completes", + "memory: fulfillment precedes finishing", + "memory: trusted user receives Premium", + "memory: client identity is ignored", + "memory: another user cannot take ownership", + "memory: repeated fulfillment returns the same access", + "memory: cancellation preserves paid time", + "memory: temporary receiver failure is queued for retry", + "sqlite: retry succeeds over HTTP", + "sqlite: one inbox effect per event", + "sqlite: redelivery is a duplicate", + "sqlite: modified body fails authentication", + "sqlite: another emitter's key is rejected", + "sqlite: optional extension is accepted", + "sqlite: equal IDs in different emitter inboxes are not lost", + "sqlite: an extension violating the contract is rejected", + "sqlite: extension bytes survive storage", + "memory: retry succeeds over HTTP", + "memory: one inbox effect per event", + "memory: redelivery is a duplicate", + "memory: modified body fails authentication", + "memory: another emitter's key is rejected", + "memory: optional extension is accepted", + "memory: equal IDs in different emitter inboxes are not lost", + "memory: an extension violating the contract is rejected", + "memory: extension bytes survive storage", + "sqlite: read closes access at the deadline before a notification", + "sqlite: expired status is inactive", + "sqlite: lifecycle and grant events match", + "sqlite: all emitted events were persisted", + "sqlite: wrong caller credentials fail closed", + "memory: read closes access at the deadline before a notification", + "memory: expired status is inactive", + "memory: lifecycle and grant events match", + "memory: all emitted events were persisted", + "memory: wrong caller credentials fail closed", + "same consumer observes equal before results across providers", + "same consumer observes equal bound results across providers", + "same consumer observes equal canceled results across providers", + "same consumer observes equal expired results across providers", + "host: pending is shown without fulfillment or finishing", + "host: canceled is shown without fulfillment or finishing", + "host: failed is shown without fulfillment or finishing", + "host: repeated selection does not start another purchase", + "host: selection becomes available after cancellation", + "host: backend failure does not finish a purchase", + "host: a finish failure preserves confirmed access", + "client: a malformed success response is rejected over HTTP", + "consumer and provider source files stay unchanged throughout the run" + ], + "results": [ + { + "id": "sqlite", + "label": "SQLite provider", + "source": "provider.mjs", + "before": { + "userId": "demo_alice", + "productIds": [], + "subscriptions": [] + }, + "bound": { + "userId": "demo_alice", + "productIds": [ + "premium.monthly" + ], + "subscriptions": [ + { + "productId": "premium.monthly", + "state": "Active", + "active": true, + "store": "fixture", + "expiresAt": 1791363600000, + "willRenew": true + } + ] + }, + "canceled": { + "active": true, + "subscription": { + "productId": "premium.monthly", + "state": "Active", + "active": true, + "store": "fixture", + "expiresAt": 1791363600000, + "willRenew": false + } + }, + "expired": { + "active": false, + "subscription": { + "productId": "premium.monthly", + "state": "Expired", + "active": false, + "store": "fixture", + "expiresAt": 1791363600000, + "willRenew": false + } + } + }, + { + "id": "memory", + "label": "Memory provider", + "source": "composition/memory-provider.mjs", + "before": { + "userId": "demo_alice", + "productIds": [], + "subscriptions": [] + }, + "bound": { + "userId": "demo_alice", + "productIds": [ + "premium.monthly" + ], + "subscriptions": [ + { + "store": "fixture", + "productId": "premium.monthly", + "state": "Active", + "active": true, + "expiresAt": 1791363600000, + "willRenew": true + } + ] + }, + "canceled": { + "active": true, + "subscription": { + "store": "fixture", + "productId": "premium.monthly", + "state": "Active", + "active": true, + "expiresAt": 1791363600000, + "willRenew": false + } + }, + "expired": { + "active": false, + "subscription": { + "store": "fixture", + "productId": "premium.monthly", + "state": "Expired", + "active": false, + "expiresAt": 1791363600000, + "willRenew": false + } + } + } + ], + "traces": [ + { + "provider": "sqlite", + "method": "GET", + "path": "/commerce/v1/capabilities", + "status": 200 + }, + { + "provider": "sqlite", + "method": "GET", + "path": "/commerce/v1/entitlements", + "status": 200 + }, + { + "provider": "sqlite", + "method": "POST", + "path": "/commerce/v1/purchases/verify", + "status": 200 + }, + { + "provider": "sqlite", + "method": "POST", + "path": "/commerce/v1/purchases/verify", + "status": 502 + }, + { + "provider": "sqlite", + "method": "POST", + "path": "/commerce/v1/purchases/verify", + "status": 200 + }, + { + "provider": "sqlite", + "method": "POST", + "path": "/commerce/v1/purchases/verify", + "status": 200 + }, + { + "provider": "sqlite", + "method": "GET", + "path": "/commerce/v1/entitlements", + "status": 200 + }, + { + "provider": "sqlite", + "method": "POST", + "path": "/commerce/v1/purchases/verify", + "status": 200 + }, + { + "provider": "sqlite", + "method": "POST", + "path": "/commerce/v1/purchases/bind", + "status": 200 + }, + { + "provider": "sqlite", + "method": "GET", + "path": "/commerce/v1/entitlements", + "status": 200 + }, + { + "provider": "sqlite", + "method": "GET", + "path": "/commerce/v1/entitlements", + "status": 200 + }, + { + "provider": "sqlite", + "method": "GET", + "path": "/commerce/v1/entitlements", + "status": 200 + }, + { + "provider": "sqlite", + "method": "POST", + "path": "/commerce/v1/purchases/bind", + "status": 200 + }, + { + "provider": "sqlite", + "method": "POST", + "path": "/commerce/v1/purchases/verify", + "status": 200 + }, + { + "provider": "sqlite", + "method": "POST", + "path": "/commerce/v1/purchases/bind", + "status": 200 + }, + { + "provider": "sqlite", + "method": "GET", + "path": "/commerce/v1/entitlements", + "status": 200 + }, + { + "provider": "sqlite", + "method": "GET", + "path": "/commerce/v1/subscriptions/status", + "status": 200 + }, + { + "provider": "memory", + "method": "GET", + "path": "/commerce/v1/capabilities", + "status": 200 + }, + { + "provider": "memory", + "method": "GET", + "path": "/commerce/v1/entitlements", + "status": 200 + }, + { + "provider": "memory", + "method": "POST", + "path": "/commerce/v1/purchases/verify", + "status": 200 + }, + { + "provider": "memory", + "method": "POST", + "path": "/commerce/v1/purchases/verify", + "status": 502 + }, + { + "provider": "memory", + "method": "POST", + "path": "/commerce/v1/purchases/verify", + "status": 200 + }, + { + "provider": "memory", + "method": "POST", + "path": "/commerce/v1/purchases/verify", + "status": 200 + }, + { + "provider": "memory", + "method": "GET", + "path": "/commerce/v1/entitlements", + "status": 200 + }, + { + "provider": "memory", + "method": "POST", + "path": "/commerce/v1/purchases/verify", + "status": 200 + }, + { + "provider": "memory", + "method": "POST", + "path": "/commerce/v1/purchases/bind", + "status": 200 + }, + { + "provider": "memory", + "method": "GET", + "path": "/commerce/v1/entitlements", + "status": 200 + }, + { + "provider": "memory", + "method": "GET", + "path": "/commerce/v1/entitlements", + "status": 200 + }, + { + "provider": "memory", + "method": "GET", + "path": "/commerce/v1/entitlements", + "status": 200 + }, + { + "provider": "memory", + "method": "POST", + "path": "/commerce/v1/purchases/bind", + "status": 200 + }, + { + "provider": "memory", + "method": "POST", + "path": "/commerce/v1/purchases/verify", + "status": 200 + }, + { + "provider": "memory", + "method": "POST", + "path": "/commerce/v1/purchases/bind", + "status": 200 + }, + { + "provider": "memory", + "method": "GET", + "path": "/commerce/v1/entitlements", + "status": 200 + }, + { + "provider": "memory", + "method": "GET", + "path": "/commerce/v1/subscriptions/status", + "status": 200 + }, + { + "provider": "sqlite", + "method": "GET", + "path": "/commerce/v1/entitlements", + "status": 200 + }, + { + "provider": "sqlite", + "method": "GET", + "path": "/commerce/v1/subscriptions/status", + "status": 200 + }, + { + "provider": "sqlite", + "method": "GET", + "path": "/commerce/v1/entitlements", + "status": 401 + }, + { + "provider": "memory", + "method": "GET", + "path": "/commerce/v1/entitlements", + "status": 200 + }, + { + "provider": "memory", + "method": "GET", + "path": "/commerce/v1/subscriptions/status", + "status": 200 + }, + { + "provider": "memory", + "method": "GET", + "path": "/commerce/v1/entitlements", + "status": 401 + } + ], + "negativeControl": { + "change": "Replace now < expiresAt with now <= expiresAt in a temporary provider copy", + "detected": true, + "rejectedCheck": "sqlite: read closes access at the deadline before a notification" + }, + "archiveVerification": { + "command": "npm ci --ignore-scripts && bun composition/run.mjs", + "sameSourceAndResults": true, + "sha256": "d39690500d8e34b3ffb2868f0b7b8358453b689818a1e69fb403f40756924609" + } +} diff --git a/packages/docs/public/commerce-composition/source.json b/packages/docs/public/commerce-composition/source.json new file mode 100644 index 000000000..42f283778 --- /dev/null +++ b/packages/docs/public/commerce-composition/source.json @@ -0,0 +1,6 @@ +{ + "composition/commerce-client.mjs": "import { operation, validate } from \"../contract.mjs\";\n\n// This module runs on the authenticated app backend, which owns the credential.\nexport function createCommerceClient({ baseUrl, credential }) {\n async function call(name, input) {\n const spec = operation(name);\n if (!spec) throw new Error(\"Unknown operation\");\n if (spec.input && !validate(spec.input, input))\n throw new Error(\"Invalid operation input\");\n const url = new URL(spec.path, baseUrl);\n if (spec.method === \"GET\" && input)\n for (const [key, value] of Object.entries(input))\n url.searchParams.set(key, value);\n const response = await fetch(url, {\n method: spec.method,\n headers: {\n \"content-type\": \"application/json\",\n ...(spec.auth === \"none\" ? {} : { authorization: credential }),\n },\n ...(spec.method === \"POST\" ? { body: JSON.stringify(input) } : {}),\n redirect: \"error\",\n signal: AbortSignal.timeout(5000),\n });\n const result = await response.json();\n if (response.status !== spec.successStatus)\n throw new Error(\"Commerce operation failed\");\n if (!validate(spec.result, result))\n throw new Error(\"Invalid operation result\");\n return result;\n }\n\n async function fulfill(input, { userId, productId }) {\n const evidence = { ...input };\n delete evidence.userId;\n const verdict = await call(\"verifyPurchase\", evidence);\n if (!verdict.isValid) throw new Error(\"Purchase was not accepted\");\n const binding = await call(\"bindPurchase\", { ...evidence, userId });\n if (!binding.bound) throw new Error(\"Purchase belongs to another user\");\n const access = await call(\"entitlements\", { userId });\n if (!access.productIds.includes(productId))\n throw new Error(\"Requested product is not accessible\");\n return access;\n }\n\n return { call, fulfill };\n}\n", + "composition/purchase-flow.mjs": "// Host callbacks are integration-specific; this is not a protocol paywall API.\nexport function createPurchaseFlow({ purchase, fulfill, finish }) {\n let busy = false;\n return async function select(productId) {\n if (busy) return { status: \"busy\" };\n busy = true;\n try {\n const result = await purchase(productId);\n if (result.status === \"pending\" || result.status === \"canceled\")\n return { status: result.status };\n if (result.status !== \"purchased\") throw new Error(\"Purchase failed\");\n const access = await fulfill(result.evidence, productId);\n try {\n await finish(result);\n } catch {\n return { status: \"finish-pending\", access };\n }\n return { status: \"fulfilled\", access };\n } catch {\n return { status: \"failed\" };\n } finally {\n busy = false;\n }\n };\n}\n", + "composition/memory-provider.mjs": "import { createHmac, randomUUID } from \"node:crypto\";\nimport {\n COMMERCE_EVENT_VERSION,\n HTTP_BINDING,\n WEBHOOK,\n providerCapabilitiesSchema,\n} from \"openiap-commerce-protocol\";\nimport { operation, protocolError, validate } from \"../contract.mjs\";\n\n// A second fixture implementation; it shares contract metadata, not SQLite logic.\nexport function createMemoryProvider({ fixture, credential, now }) {\n const purchases = new Map();\n const outbox = [];\n const supported = new Set([\n \"initialValidation\",\n \"subscriptions\",\n \"entitlements\",\n \"serverNotifications\",\n \"expiration\",\n ]);\n const capabilities = {\n specVersion: HTTP_BINDING.protocolVersion,\n implementation: {\n name: \"Memory provider — separately implemented fixture\",\n },\n eventTypes: [\n \"entitlement.granted\",\n \"subscription.canceled\",\n \"subscription.expired\",\n \"entitlement.revoked\",\n ],\n stores: {\n [fixture.store]: Object.fromEntries(\n Object.keys(\n providerCapabilitiesSchema.$defs.StoreCapabilities.properties,\n ).map((name) => [\n name,\n {\n provider: supported.has(name),\n implementation: supported.has(name),\n notes:\n \"Fictional store only; no complete profile or production claim.\",\n },\n ]),\n ),\n },\n };\n\n function snapshot(purchase) {\n return {\n store: fixture.store,\n productId: fixture.productId,\n state: purchase.expired ? \"Expired\" : \"Active\",\n active: !purchase.expired && now() < fixture.expiresAt,\n expiresAt: fixture.expiresAt,\n willRenew: purchase.renews,\n };\n }\n\n function emit(eventType, purchase) {\n const event = {\n eventId: randomUUID(),\n eventType,\n eventVersion: COMMERCE_EVENT_VERSION,\n occurredAt: now(),\n processedAt: now(),\n store: fixture.store,\n environment: \"local-fixture\",\n projectId: \"memory_example\",\n userId: purchase.owner,\n productId: fixture.productId,\n subscription: snapshot(purchase),\n };\n if (!validate(\"#/$defs/CommerceEvent\", event))\n throw new Error(\"Invalid event\");\n outbox.push({\n event,\n attempts: 0,\n status: \"pending\",\n nextAt: now(),\n deliveryId: randomUUID(),\n });\n }\n\n const handlers = {\n providerCapabilities: () => capabilities,\n verifyPurchase(input) {\n if (input.store !== fixture.store) return { error: \"UNSUPPORTED_STORE\" };\n if (typeof input.evidence !== \"string\")\n return { error: \"INVALID_REQUEST\" };\n if (input.evidence === \"local-upstream-outage\")\n return { error: \"VERIFICATION_FAILED\" };\n const accepted = input.evidence === fixture.evidence;\n if (accepted && !purchases.has(input.evidence))\n purchases.set(input.evidence, {\n owner: null,\n renews: true,\n expired: false,\n granted: false,\n });\n return {\n store: fixture.store,\n isValid: accepted && now() < fixture.expiresAt,\n state: !accepted\n ? \"INAUTHENTIC\"\n : now() >= fixture.expiresAt\n ? \"EXPIRED\"\n : \"ENTITLED\",\n ...(accepted ? { productId: fixture.productId } : {}),\n environment: \"local-fixture\",\n };\n },\n bindPurchase(input) {\n if (input.store !== fixture.store) return { error: \"UNSUPPORTED_STORE\" };\n if (typeof input.evidence !== \"string\")\n return { error: \"INVALID_REQUEST\" };\n const purchase = purchases.get(input.evidence);\n if (!purchase) return { bound: false };\n if (purchase.owner === null) {\n purchase.owner = input.userId;\n if (snapshot(purchase).active) {\n emit(\"entitlement.granted\", purchase);\n purchase.granted = true;\n }\n }\n return { bound: purchase.owner === input.userId };\n },\n entitlements({ userId }) {\n const subscriptions = [...purchases.values()]\n .filter((purchase) => purchase.owner === userId)\n .map(snapshot)\n .filter((subscription) => subscription.active);\n return {\n userId,\n productIds: [...new Set(subscriptions.map((row) => row.productId))],\n subscriptions,\n };\n },\n subscriptionStatus({ userId }) {\n const purchase = [...purchases.values()].find(\n (row) => row.owner === userId,\n );\n const subscription = purchase ? snapshot(purchase) : undefined;\n return {\n active: subscription?.active ?? false,\n ...(subscription ? { subscription } : {}),\n };\n },\n };\n\n async function fetch(request) {\n const url = new URL(request.url);\n const spec = HTTP_BINDING.operations.find(\n (entry) => entry.path === url.pathname && entry.method === request.method,\n );\n if (!spec) return protocolError(\"NOT_FOUND\");\n if (\n spec.auth !== \"none\" &&\n request.headers.get(\"authorization\") !== credential\n )\n return protocolError(\"UNAUTHORIZED\");\n if (!handlers[spec.name]) return protocolError(\"UNSUPPORTED_PROFILE\");\n let input;\n try {\n input = spec.input\n ? request.method === \"GET\"\n ? Object.fromEntries(url.searchParams)\n : await request.json()\n : null;\n } catch {\n return protocolError(\"INVALID_REQUEST\");\n }\n if (spec.input && !validate(spec.input, input))\n return protocolError(\"INVALID_REQUEST\");\n const result = handlers[spec.name](input);\n if (result.error) return protocolError(result.error);\n if (!validate(operation(spec.name).result, result))\n return protocolError(\"INTERNAL_ERROR\");\n return Response.json(result, { status: spec.successStatus });\n }\n\n function observe(kind) {\n const purchase = purchases.get(fixture.evidence);\n if (!purchase?.owner) throw new Error(\"Bind the fixture purchase first\");\n if (kind === \"cancel\") {\n if (!purchase.renews) return;\n purchase.renews = false;\n emit(\"subscription.canceled\", purchase);\n } else if (kind === \"expire\" && now() >= fixture.expiresAt) {\n if (purchase.expired) return;\n purchase.expired = true;\n purchase.renews = false;\n emit(\"subscription.expired\", purchase);\n if (purchase.granted) {\n emit(\"entitlement.revoked\", purchase);\n purchase.granted = false;\n }\n } else throw new Error(\"Invalid fixture transition\");\n }\n\n function signed(event, secret) {\n const body = JSON.stringify(event);\n const timestamp = String(Math.floor(now() / 1000));\n const digest = createHmac(\"sha256\", secret)\n .update(Buffer.concat([Buffer.from(`${timestamp}.`), Buffer.from(body)]))\n .digest(\"hex\");\n return {\n body,\n headers: {\n \"content-type\": WEBHOOK.contentType,\n [WEBHOOK.timestampHeader]: timestamp,\n [WEBHOOK.signatureHeader]: WEBHOOK.signaturePrefix + digest,\n [WEBHOOK.eventIdHeader]: event.eventId,\n },\n };\n }\n\n async function flush(url, secret) {\n const results = [];\n for (const item of outbox.filter(\n (row) => row.status === \"pending\" && row.nextAt <= now(),\n )) {\n const request = signed(item.event, secret);\n let status;\n try {\n status = (\n await globalThis.fetch(url, {\n method: \"POST\",\n ...request,\n headers: {\n ...request.headers,\n [WEBHOOK.deliveryIdHeader]: item.deliveryId,\n },\n redirect: \"error\",\n signal: AbortSignal.timeout(5000),\n })\n ).status;\n } catch {\n status = 503;\n }\n item.attempts += 1;\n const retryable = status === 408 || status === 429 || status >= 500;\n item.status =\n status >= 200 && status < 300\n ? \"delivered\"\n : retryable && item.attempts < 3\n ? \"pending\"\n : \"dead-letter\";\n item.nextAt = now() + 30000 * 2 ** (item.attempts - 1);\n results.push({\n httpStatus: status,\n status: item.status,\n attempt: item.attempts,\n });\n }\n return results;\n }\n\n return {\n fetch,\n observe,\n flush,\n signed,\n events: () => outbox.map((row) => row.event),\n };\n}\n", + "composition/run.mjs": "import assert from \"node:assert/strict\";\nimport { createHash, randomBytes, randomUUID } from \"node:crypto\";\nimport { mkdtempSync, readFileSync, rmSync, writeFileSync } from \"node:fs\";\nimport { tmpdir } from \"node:os\";\nimport { join, resolve } from \"node:path\";\nimport { WEBHOOK, HTTP_BINDING } from \"openiap-commerce-protocol\";\nimport { createProvider, FIXTURE, CREDENTIALS } from \"../provider.mjs\";\nimport { createReceiver, deliver, sign } from \"../webhooks.mjs\";\nimport { createCommerceClient } from \"./commerce-client.mjs\";\nimport { createMemoryProvider } from \"./memory-provider.mjs\";\nimport { createPurchaseFlow } from \"./purchase-flow.mjs\";\n\nexport const COMPOSITION_SOURCES = [\n \"composition/commerce-client.mjs\",\n \"composition/memory-provider.mjs\",\n \"composition/purchase-flow.mjs\",\n \"composition/run.mjs\",\n \"composition/README.md\",\n \"contract.mjs\",\n \"provider.mjs\",\n \"webhooks.mjs\",\n \"package.json\",\n \"package-lock.json\",\n];\nconst root = new URL(\"../\", import.meta.url);\nexport const sourceHashes = () =>\n Object.fromEntries(\n COMPOSITION_SOURCES.map((name) => [\n name,\n createHash(\"sha256\")\n .update(readFileSync(new URL(name, root)))\n .digest(\"hex\"),\n ]),\n );\n\nexport async function runComposition() {\n const initialHashes = sourceHashes();\n const directory = mkdtempSync(join(tmpdir(), \"commerce-composition-\"));\n const servers = [],\n receivers = [];\n const checks = [],\n results = [],\n traces = [];\n const check = (name, actual, expected) => {\n assert.deepEqual(actual, expected, name);\n checks.push(name);\n };\n let time = FIXTURE.startsAt;\n const now = () => time;\n const sqlite = createProvider(join(directory, \"provider.sqlite\"), now);\n const memoryCredential = `Bearer fixture-${randomBytes(16).toString(\"hex\")}`;\n const memory = createMemoryProvider({\n fixture: FIXTURE,\n credential: memoryCredential,\n now,\n });\n const evidence = { store: FIXTURE.store, evidence: FIXTURE.evidence };\n const serve = (fetch) => {\n const server = Bun.serve({\n hostname: \"127.0.0.1\",\n port: 0,\n maxRequestBodySize: 65536,\n fetch,\n });\n servers.push(server);\n return `http://127.0.0.1:${server.port}`;\n };\n const providers = [\n {\n id: \"sqlite\",\n label: \"SQLite provider\",\n source: \"provider.mjs\",\n fetch: sqlite.fetch,\n credential: CREDENTIALS.server,\n observe: (kind) =>\n sqlite.observe({ id: randomUUID(), kind, occurredAt: now() }),\n events: () =>\n sqlite.db\n .query(\"SELECT body FROM outbox ORDER BY rowid\")\n .all()\n .map((row) => JSON.parse(row.body)),\n signed: (event, secret) => {\n const body = JSON.stringify(event),\n timestamp = String(Math.floor(now() / 1000));\n return {\n body,\n headers: {\n \"content-type\": WEBHOOK.contentType,\n [WEBHOOK.timestampHeader]: timestamp,\n [WEBHOOK.signatureHeader]: sign(secret, timestamp, body),\n [WEBHOOK.eventIdHeader]: event.eventId,\n },\n };\n },\n flush: (url, secret) =>\n deliver(sqlite, secret, now, (init) =>\n fetch(url, {\n ...init,\n redirect: \"error\",\n signal: AbortSignal.timeout(5000),\n }),\n ),\n },\n {\n id: \"memory\",\n label: \"Memory provider\",\n source: \"composition/memory-provider.mjs\",\n fetch: memory.fetch,\n credential: memoryCredential,\n observe: memory.observe,\n events: memory.events,\n signed: memory.signed,\n flush: memory.flush,\n },\n ];\n try {\n for (const provider of providers) {\n provider.baseUrl = serve(async (request) => {\n const response = await provider.fetch(request);\n traces.push({\n provider: provider.id,\n method: request.method,\n path: new URL(request.url).pathname,\n status: response.status,\n });\n return response;\n });\n provider.client = createCommerceClient(provider);\n provider.secret = randomBytes(32).toString(\"hex\");\n provider.inboxPath = join(directory, `${provider.id}-inbox.sqlite`);\n provider.receiver = createReceiver(\n provider.inboxPath,\n provider.secret,\n now,\n );\n receivers.push(provider.receiver);\n provider.failures = 1;\n provider.receiverUrl = serve((request) => {\n if (provider.failures-- > 0)\n return new Response(\"Try again\", { status: 503 });\n return provider.receiver.fetch(request);\n });\n const descriptor = await provider.client.call(\"providerCapabilities\");\n check(\n `${provider.id}: contract major matches`,\n descriptor.specVersion.split(\".\")[0],\n HTTP_BINDING.protocolVersion.split(\".\")[0],\n );\n check(\n `${provider.id}: no unearned profile claim`,\n descriptor.profiles,\n undefined,\n );\n const before = await provider.client.call(\"entitlements\", {\n userId: FIXTURE.userId,\n });\n check(\n `${provider.id}: no access before verification`,\n before.productIds,\n [],\n );\n check(\n `${provider.id}: rejected evidence stays a verdict`,\n (\n await provider.client.call(\"verifyPurchase\", {\n ...evidence,\n evidence: \"not-a-purchase\",\n })\n ).isValid,\n false,\n );\n await assert.rejects(\n () =>\n provider.client.call(\"verifyPurchase\", {\n ...evidence,\n evidence: \"local-upstream-outage\",\n }),\n /operation failed/,\n );\n checks.push(`${provider.id}: verifier outage stays an operation failure`);\n await assert.rejects(\n () =>\n provider.client.fulfill(\n { ...evidence, evidence: \"not-a-purchase\" },\n { userId: FIXTURE.userId, productId: FIXTURE.productId },\n ),\n /not accepted/,\n );\n checks.push(`${provider.id}: rejected verification cannot fulfill`);\n check(\n `${provider.id}: accepts fixture evidence`,\n (await provider.client.call(\"verifyPurchase\", evidence)).isValid,\n true,\n );\n check(\n `${provider.id}: verification alone grants no access`,\n (await provider.client.call(\"entitlements\", { userId: FIXTURE.userId }))\n .productIds,\n [],\n );\n\n const order = [];\n const flow = createPurchaseFlow({\n purchase: async (productId) => {\n check(\n `${provider.id}: selected product reaches purchase callback`,\n productId,\n FIXTURE.productId,\n );\n order.push(\"purchase\");\n return {\n status: \"purchased\",\n evidence: { ...evidence, userId: \"untrusted_bob\" },\n };\n },\n fulfill: async (input, productId) => {\n order.push(\"fulfill\");\n return provider.client.fulfill(input, {\n userId: FIXTURE.userId,\n productId,\n });\n },\n finish: async () => {\n order.push(\"finish\");\n },\n });\n check(\n `${provider.id}: paywall selection completes`,\n (await flow(FIXTURE.productId)).status,\n \"fulfilled\",\n );\n check(`${provider.id}: fulfillment precedes finishing`, order, [\n \"purchase\",\n \"fulfill\",\n \"finish\",\n ]);\n const bound = await provider.client.call(\"entitlements\", {\n userId: FIXTURE.userId,\n });\n check(`${provider.id}: trusted user receives Premium`, bound.productIds, [\n FIXTURE.productId,\n ]);\n check(\n `${provider.id}: client identity is ignored`,\n (\n await provider.client.call(\"entitlements\", {\n userId: \"untrusted_bob\",\n })\n ).productIds,\n [],\n );\n check(\n `${provider.id}: another user cannot take ownership`,\n (\n await provider.client.call(\"bindPurchase\", {\n ...evidence,\n userId: \"other_user\",\n })\n ).bound,\n false,\n );\n const again = await provider.client.fulfill(evidence, {\n userId: FIXTURE.userId,\n productId: FIXTURE.productId,\n });\n check(\n `${provider.id}: repeated fulfillment returns the same access`,\n again,\n bound,\n );\n provider.observe(\"cancel\");\n const canceled = await provider.client.call(\"subscriptionStatus\", {\n userId: FIXTURE.userId,\n });\n check(\n `${provider.id}: cancellation preserves paid time`,\n [canceled.active, canceled.subscription.willRenew],\n [true, false],\n );\n const firstDelivery = await provider.flush(\n provider.receiverUrl,\n provider.secret,\n );\n check(\n `${provider.id}: temporary receiver failure is queued for retry`,\n firstDelivery[0].status,\n \"pending\",\n );\n provider.result = {\n id: provider.id,\n label: provider.label,\n source: provider.source,\n before,\n bound,\n canceled,\n };\n }\n\n time += 30000;\n for (const provider of providers) {\n const retries = await provider.flush(\n provider.receiverUrl,\n provider.secret,\n );\n check(\n `${provider.id}: retry succeeds over HTTP`,\n retries.map((row) => [row.httpStatus, row.attempt]),\n [[200, 2]],\n );\n check(\n `${provider.id}: one inbox effect per event`,\n provider.receiver.count(),\n 2,\n );\n const event = provider.events()[0];\n const request = provider.signed(event, provider.secret);\n const repeat = await fetch(provider.receiverUrl, {\n method: \"POST\",\n ...request,\n });\n check(\n `${provider.id}: redelivery is a duplicate`,\n (await repeat.json()).duplicate,\n true,\n );\n check(\n `${provider.id}: modified body fails authentication`,\n (\n await fetch(provider.receiverUrl, {\n method: \"POST\",\n ...request,\n body: request.body + \" \",\n })\n ).status,\n 401,\n );\n const wrongKey = provider.signed(\n event,\n providers.find((other) => other !== provider).secret,\n );\n check(\n `${provider.id}: another emitter's key is rejected`,\n (await fetch(provider.receiverUrl, { method: \"POST\", ...wrongKey }))\n .status,\n 401,\n );\n\n const extension = {\n ...event,\n eventId: \"same-id-in-each-emitter\",\n extensions: { \"partner.segment\": \"demo\" },\n };\n const extended = provider.signed(extension, provider.secret);\n check(\n `${provider.id}: optional extension is accepted`,\n (await fetch(provider.receiverUrl, { method: \"POST\", ...extended }))\n .status,\n 200,\n );\n check(\n `${provider.id}: equal IDs in different emitter inboxes are not lost`,\n provider.receiver.count(),\n 3,\n );\n const invalidExtension = provider.signed(\n {\n ...event,\n eventId: \"invalid-extension\",\n extensions: { partner: { segment: \"demo\" } },\n },\n provider.secret,\n );\n check(\n `${provider.id}: an extension violating the contract is rejected`,\n (\n await fetch(provider.receiverUrl, {\n method: \"POST\",\n ...invalidExtension,\n })\n ).status,\n 400,\n );\n const stored = provider.receiver\n .inspect()\n .find(\n (event) =>\n event.eventId === extension.eventId &&\n event.projectId === extension.projectId,\n );\n check(\n `${provider.id}: extension bytes survive storage`,\n stored?.extensions,\n extension.extensions,\n );\n }\n\n time = FIXTURE.expiresAt;\n for (const provider of providers) {\n check(\n `${provider.id}: read closes access at the deadline before a notification`,\n (await provider.client.call(\"entitlements\", { userId: FIXTURE.userId }))\n .productIds,\n [],\n );\n provider.observe(\"expire\");\n provider.result.expired = await provider.client.call(\n \"subscriptionStatus\",\n { userId: FIXTURE.userId },\n );\n check(\n `${provider.id}: expired status is inactive`,\n provider.result.expired.active,\n false,\n );\n await provider.flush(provider.receiverUrl, provider.secret);\n check(\n `${provider.id}: lifecycle and grant events match`,\n provider.events().map((event) => event.eventType),\n [\n \"entitlement.granted\",\n \"subscription.canceled\",\n \"subscription.expired\",\n \"entitlement.revoked\",\n ],\n );\n check(\n `${provider.id}: all emitted events were persisted`,\n provider.receiver.count(),\n 5,\n );\n const wrong = createCommerceClient({\n ...provider,\n credential: \"Bearer invalid-fixture-key\",\n });\n await assert.rejects(\n () => wrong.call(\"entitlements\", { userId: FIXTURE.userId }),\n /operation failed/,\n );\n checks.push(`${provider.id}: wrong caller credentials fail closed`);\n results.push(provider.result);\n }\n for (const state of [\"before\", \"bound\", \"canceled\", \"expired\"])\n check(\n `same consumer observes equal ${state} results across providers`,\n results[0][state],\n results[1][state],\n );\n\n for (const status of [\"pending\", \"canceled\", \"failed\"]) {\n let effects = 0;\n const flow = createPurchaseFlow({\n purchase: async () => ({ status }),\n fulfill: async () => {\n effects++;\n },\n finish: async () => {\n effects++;\n },\n });\n check(\n `host: ${status} is shown without fulfillment or finishing`,\n [(await flow(FIXTURE.productId)).status, effects],\n [status, 0],\n );\n }\n let releasePurchase;\n const blocked = new Promise((resolve) => {\n releasePurchase = resolve;\n });\n const busyFlow = createPurchaseFlow({\n purchase: async () => {\n await blocked;\n return { status: \"canceled\" };\n },\n fulfill: async () => {\n throw new Error(\"Unexpected fulfillment\");\n },\n finish: async () => {\n throw new Error(\"Unexpected finish\");\n },\n });\n const inProgress = busyFlow(FIXTURE.productId);\n check(\n \"host: repeated selection does not start another purchase\",\n (await busyFlow(FIXTURE.productId)).status,\n \"busy\",\n );\n releasePurchase();\n await inProgress;\n check(\n \"host: selection becomes available after cancellation\",\n (await busyFlow(FIXTURE.productId)).status,\n \"canceled\",\n );\n let finished = false;\n const failedBackend = createPurchaseFlow({\n purchase: async () => ({ status: \"purchased\", evidence }),\n fulfill: async () => {\n throw new Error(\"Backend unavailable\");\n },\n finish: async () => {\n finished = true;\n },\n });\n check(\n \"host: backend failure does not finish a purchase\",\n [(await failedBackend(FIXTURE.productId)).status, finished],\n [\"failed\", false],\n );\n const failedFinish = createPurchaseFlow({\n purchase: async () => ({ status: \"purchased\", evidence }),\n fulfill: async () => ({ productIds: [FIXTURE.productId] }),\n finish: async () => {\n throw new Error(\"Finish unavailable\");\n },\n });\n check(\n \"host: a finish failure preserves confirmed access\",\n await failedFinish(FIXTURE.productId),\n { status: \"finish-pending\", access: { productIds: [FIXTURE.productId] } },\n );\n const malformedUrl = serve(() =>\n Response.json({\n userId: FIXTURE.userId,\n productIds: [FIXTURE.productId],\n }),\n );\n await assert.rejects(\n () =>\n createCommerceClient({\n baseUrl: malformedUrl,\n credential: \"fixture\",\n }).call(\"entitlements\", { userId: FIXTURE.userId }),\n /Invalid operation result/,\n );\n checks.push(\"client: a malformed success response is rejected over HTTP\");\n check(\n \"consumer and provider source files stay unchanged throughout the run\",\n sourceHashes(),\n initialHashes,\n );\n return {\n recordedAt: new Date().toISOString(),\n scope:\n \"Two separately implemented fixture providers and two scoped receivers over loopback HTTP in one Bun process. One backend client and receiver implementation, unchanged across both configurations. Host purchase callbacks are simulated.\",\n limits: [\n \"Same project authorship; no independent organization validation.\",\n \"No store purchase, SDK/device checkout, complete profile conformance, or production deployment.\",\n \"SQLite versus in-memory state is tested on fresh stores, not a historical-data migration.\",\n \"One trusted emitter/project and secret per receiver database; no cross-provider deduplication claim.\",\n ],\n protocolVersion: HTTP_BINDING.protocolVersion,\n sourceHashes: initialHashes,\n configurationChanges: [\n \"Provider URL\",\n \"Server credential\",\n \"Emitter endpoint, signing secret, and isolated inbox database\",\n ],\n checks,\n results,\n traces,\n };\n } finally {\n await Promise.all(servers.map((server) => server.stop(true)));\n for (const receiver of receivers) receiver.close();\n sqlite.close();\n rmSync(directory, { recursive: true, force: true });\n }\n}\n\nif (import.meta.main) {\n const report = await runComposition();\n if (process.argv[2] === \"--record\") {\n assert(process.argv[3], \"Provide the report filename\");\n writeFileSync(\n resolve(process.argv[3]),\n JSON.stringify(report, null, 2) + \"\\n\",\n );\n }\n console.log(\n `Composition: ${report.checks.length} checks passed; same client and receiver source across two fixture providers. No store or production service contacted.`,\n );\n}\n" +} diff --git a/packages/docs/public/commerce-composition/source.tar.gz b/packages/docs/public/commerce-composition/source.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..a181e45dae42b9810bfc66e0f101abaf44037fe1 GIT binary patch literal 55112 zcmV)VK(D_aiwFR5lAvk;1MI!qb{kigAXq(5v*Ig`VXrhG0|8z{QUcA?P!wdNEs;!; zveQkmgdh+k!vqj0L_icRajkyp59rk|GhZ{$^AGbWkkqxZl#Hyhh`5~V z-uvwP-i_Y;97p|l(hN_NJUJbullWgg@wKq9uzLT#!hhFRSLok`CH_s<(&Bkz5XPg|@ZTr#q)o8apCU#{}LCT|Id=qc|2(; z{JSB%z#T&Vb6ocP-~6e)eXt)6`=7jz_dowv?yugzJO97LHRt?aUR_;YS-v~}zxwO* zVZFU>!2hM?)ujUdFT=09^Z!d+->UYTXb6a@qFyf^=ZKg=um?wi>h85SpFD2^Y;@I0 zI#KyqtR~aZC_09>vtBxm>#Ez?K4|~6w|QV+0|f6+d$~GJr=xx}N#d*?L?dYK@r%y0 zCthm_c07znd6XyVNDUKUJo0oDX9_<6ngNgLN$)J~oo8VXJdWYpSe+!JBs)t+rz(PH z(daa81wlhSO$USY!VDCj$9i_qCVV!@@&=MSHK9XKLEHT}JI~WGbvaCrVGLoQU{%J0 zC>e2EaW);~^aB6HPruL9D1MW}=e;DuF&^{K{5e5O{Wy=3L8yL-W9UR>XXzw|HhSr# zuhJ80F^{ry7+;>p!*L$>si$$8jPeZM=%u5RDRvRU6t`eeBIpJ`1AvTs_&yA9oQ|>t z2A|}Y>LSU{=mqG5AN6r5I-9${B)Nj+>JQ=xjEp7(E3O8}0QS|%BpuRshvVr4mNkpj z=``ubN7b`DA7`y*6ZU+RMB@<9qzT(Ij3>Rg0UMsDy>!q#jq@BjY9L0zuxhxDd+`|O zOT+Eu(`caj2@HD@1Ds{+3Rg@tFI(O#~)dl$fJNEzUzdj$<+v|G#UtC+cU)29C-@nuU zeVOZ9^%zZla6oFFuaT#Xhz?hE9QEKl?K4BU*$IM<=C_DD*#X7{m`dbHi4#=2ntuaM zXn2X-PMRgaa9oCJAGs-R2pD{IkxtHm6$=cbd4h~P@x4eOR2=ortURE3>!?qREcT7O zH*f~ueyd1Ufm_%J^7ldT0{(>Vh3f-GeGK!6PGe*s;GYR{1;TWyuCTO?8FscC22X*f z5CNjjV;_x&AZc{F-RvxYzfCi9TfujO-~dJ(|JyWq9Sv~tH2bEIlkbkPA(&bh#3|Iq z%iqv<_jt;`Kw?741{p_U41+8J8AeZQ1V2K59bn-sJMS>q@n6~P#q!1HyB*1 zu4f9KJE3N`MzU6Sf49Ab(j4lIp$X*B4O?5+oco``+6@w5m@j*{j=0JFcmS_Y07S4e zWP7`(@dy}A;C89&Xq?On7@<4~|H#r2^t;#IKL8;6w<$nLQ)Hl6ZSHmo4IU>X0A)=S zV;b^HH$wa^NesYDr!X2GVFn`SFk&eT*xW*k{4^^WBJ3DQS0TS(`ZzfO5i3@({YjrX zqxKwryV<2)yRT_mvL<|l3_6M0Ed27QlG9N{{I77@C=(-;Mu0|19usejVh#(4hXwhl zAkCcuL{E?LaBdpvH-FtPumEA>m**lj3bZ&#@q_w07-i4 z;tXU05Pah|2?%h|KyV52l!Fxji7Z|do@yLH8EKF}uPjNA@(G9@R%QlrmY^__X}Lvf z9E50w1!AdbDU(K_O`(?15Q-C|a3e!iVOK?BCjbB`hxI6ZEz`ZmrUm?Ay755dK}Lh@ z3>IHtn$e6%N<5kl5e}yaI-)P}NcH!bCq|3j0_nAyj&RqK97R%8;h;PkUxcDA%FmL_ zs#^vrARJ0whdc>r79_gY37irv&E5_SoB1S;8Q5fBvgUb`*FxGVtEae#2Iu+NB%Pj~ zeW8#rS z+cUrnI`7sAQDu|ieG+#`Ojj(XNBwAw)TbT@ycEeQoYUzPpa95HMwqYr`e_o4&;IsI zw-CB|qhJyb;@1(KLns>O#nTo~Isi8~F3(AY20uxCph1Lz9i@gqD=&JNT9-A7FAQ|k z`Rtthk$?=5HP#rg{({eJ(Yo}`0eldnFH87{&IvDbf}5aF$#QAcJH4|sg?6HVm-^>} zgWcwT-QU?Z$cM|r8^Ee3qi{0h#UP@}#&It>NqWH`8l6s&A|S}~ym`NI0B?Xs^pYIN z47_SckEmgI6R}?=ASsfYpa(NQXI>>#+bM6jhGf7}QJ|9Ea}tv}C>k*K!lzSG_Yn$_ zLX@~SKK32`DJ)z%0qBFHdNEY@?rjPEYTdg>cnB0N8nap_5p}B^PO&B_d{@&G_;rdZ zxjay;IWvc$rGy@rXLkpwD_|4A8#Ess!z4qs*$1MVCs~Zm5tT+w8qytVQuI^nn%MOQ zQ8EO|Ji(=amkmC$(vbKa)OY!ZhN_zVge=HkPgxTG8Xzg&?+*;pnM_uu=UKbUN^IIEbpq>vP#p$KxWB)mjxp&`)40d1 z0#oOs^kQV-F~;$ba&Hn7HGwmP8nX{z%W+^ZCZvs1m>jOhbe!SLhp1}9)fJuJC_ZJj z4@Tcl@HE@yy>_GtY)#V>;k@7}Y4>13U@=BH-4a5^f=3uEOm|J5DH34Z zY(AL*4lgEj7Hie;3a;D}kxhtH0>3TOLgr7CvOf1z_aIMAq6--TuLUn%FUHpRWCr>P zR1e8O3Z3_-6FLZ!(Q*35tWghf7LJKilu^_ZOBJ!Xm4#*X@Bia}LbEw6A^s(LaFDRl zEN|f45JGqcb(I4zLKFzmT`wGTO^X&YssnXu3}T{m<0wBPFrA1I2{=Bnw9o=KkJJ8T z(+F<{lc-T_>;ypP%t|StdL9AaI7rhmEjw)q*@K9ZF$X~0bo>VC6^wA5n1pCRkb-?? z#ynxjH=W$mV}J%a;`h;n2UJ8uZ<@!}1VlUqoaAA!ikrI^Gp)tVoy5o>vKdGYri`bJ zJPm@o%ruF`&@zlQDj}WMc*`0Kl0HVlD_P1hB0iaczz1R^ve9@PM~Jg)IJiwAg3xWO z2|3^%wr&m+Z_T0MWSp=@VJxG>y%XRgC4sPpDmuvt5{TWc%ja|opcoVz3hbT!1B7ed z2H-U|sR^H1tRqVV)DlqlOiZuFU?v7X5Xgnis}oBECrH3x#lsj!w4MMHh#f3+YysOk z6*H&kir|a|Szu&DCdV2S4AN7WJim~gr6`m+!nLBAX$}fF37Fh59!MS!gl)3DjrrCs zHb3(i7*q?kU2TnqM+2>w5?is@u3?7e8?zJI`mI;o=tf$B?Dm|q%Hb%`ddyqIln*!( zcbFY7p@R7SOg4A?|L2?$oF*an1j@O z2hv`_CXJI8bV3%Gz%^9uHz1P%7iii9n&==N%m?rU*ndC=hkUt^jMAqVY^}n?*?N@9 z;ce_bCZd%Aa`ha(k($&xA#G`7zD^A3gbjq=aC9NUFjwXFA}5HJmZ_%z7d%O)8StyI z%(D-$lEs=XX&~w2DA(Dj&9et66{VCKPJukan1X^G6OIOe_vF~9f*Qm|dmwG4le%HT z5FRg4^-42}TyYZ-71qf+nQ>5~cmM)+rbIv{1ldZ*m&~|}ahfq%^sI3nA>_zOrzHWS zbp$bvl`m{mXT1h(C+cYsaAP}QqR+6RgLFJ}g$Nv~n0|G`2vflpO62qvTFVh0fXWKc zXs)#Gu|jp>NsxRF(x`8AlreMaNDYK5K+Wf-^@3rt;7XS)dBQ}H}lci$0$krErgIT2Pw!Y$A$u0xmT0%Mp33;s;D(19moICviA zJ$9}!goM_@D8aPYp9^nSbdeH1Z-S02J$-7(cr8H;5Q?-|Cb~SWv0y43X$d-W=0}jO zxd@WsdU;^T^X4%6GaWUb!+d0rcszK#KqR6z&O1woF*4HeAd69bN7IznkxL}im&5Ad zH`2w=sG~|pBD1XnUxe(Bs4TPTF;XsK_ktq55y>CbVZ-P=7A+g$1hA37OD1r06HUp@ zpVIUcWjx~T10#%1cwl(kle8+lzyQ@VsGb#LK;2iG+2aH@`2aP>@tYixI!`a6NuT9; zt(MW704z~<4%ALvoF%<82Q%tc-K$UV>=Iaup(ZWkL3+td!RU1|Nk^Iwk#>U5RO2P>vD06O_W7F!S?=xc%AniADV{u=|l2L&ZR5?)Ns?}S;#~ES7 z@`=h+Cg}RC)B4m7pFo~3RsIIJ>!iyU5*Yhp-Z3jvjMHse&68PbT-K;W1|G$UrVjM!ov$Pgvb z$kB3Z=+@dSD?J2gy@00oBW;PcZm-Pj(CElEIL9=tPGXjT|Is~LtpAsLOnuruJ|O;c z0sX)4{J%c`H7EY#;qrsk`*-o5U;p*_u-;zRYeRlT00hqUq2x4J*XDM5l(K~x z-EWZdCyN`Y{0x7)X}MJ7M}gNvmJ-Eylt6+E*%V}Gu!#^Ecw}lOu^kb+_K;}~j%wkN zjeXD>5rcQ?cXujh|UML;1v~}GMY?82;oRZc`OFzaE|2{a-DWMkrPBXcQj*a!kBVoq<>wT_wr0BzS zcSLII4h=a`6==Y@(LasD;U8JI9-#Xpn$#xz zTXiquuqG%-NM{Rux z`G_PiI*DGVWLz%z9=BB2@f*fzj|;!a1=#!!v>UL#gNK`SGebiQyCk7U)ME_0I&j?; zlPtK#!`Tdu+-2(aID}v8xVtlMQP=}{|KgxgD}$=*7Vm4f1(O_StevYXR?pQ%CCFQ- z^@6ihmE0E@n%H{jxo0~1L2|5J7ky<0@;s}AVVR~QQ69$Dqa~aftA;ulEgT}yC+a6q zc~d0gWTO{vJvPy!stHDhI_tXVEV6=)mO^BHC5sPj6X>g z2?LbKL2(^0`W&s@?iCIhabV@$kPup)Eb&Rlr0?w;yWQYYGfG;6M}}vKgq~1Sk1V4=tJc}`^^0T-i>psX0`7{w176nT~x|+H(W=w9vEuvc9tNlvq%R!N^&=k^hUG!A#cUz9FX{pCluJ2O(xQ3U}Q&ZWI*5S{0h0p4X~Wy+ynu|{qbfA!C(Ba9^MZO2WG5FDR*f1l!IC6}x)NnEZW`TU> z+1!Im9k3W3YEv?_Al8w-b`oZtx(LR;VS182v|edA1ZG97?mGq5)6P(6!zq-SZSr95$hW!jTsJ^^@dTa1h+bV}Qyh>IK@ zP5hT={DCV)8^dqO#QN5>h$}J{T7RJG-wl+gurQnGr~9klCDtSz*~ULz38BO z-UJQ@S`a6322iYMke(umTsH{{m=Mqs2(5LzJH!bX7%vBSaGy1NOfw>4nPI#J$?*i; zGhvpr>1NBdXQhrS(TBO7G&1(t>^2K8Wh~YV7qqFKNUAv%@}Dme3)uOCt-s@2aFX6e zyG&%{vyH^Gtn(roYUO!viqD)iERpF+oQcolOD3S4mOyJ7&?$o?M>8$*!@jH&)y3x6 z(UeqN1!v+q2Q6tYVJ-6u{EKtwC5b^J@ki2b%#LTPaf2p7kd{;Lt)4;dyOlCMlU-*1 zkaQXTsp@(UnZrP=#n!N_AvV9nbQ8-QXuyadZpXNqX#8{C+=-pFUU78KcziU|<3Vz& zbEhD&BX-5H5|{aHsm-D2`- zGjth(u|uaW@G-C-YE2M}jHE*Sgr}j7~(}AM8{%ro)&{Du*c+OYvNMs8Ydh# zTE~@6YmI1ASYME0zyUuZJ#tAhvCoR#s+5uNW&j^3TwUk0@ zFaS)S7A%o!A}0i@%X00my!0Eu{;qh`bk$irK$mq9=4s$li66Cgr%yE78OQ8F~`u44zR-m5X}>GG zCz6bqE3=A@XD^&s6XU35goHqj>@r3El3;|JF@&2#<>I1UOM4Iz->B?#>|}{*^nqh<_qmai|M#<83HFkSeCqL zP>iQ9yphmF8a(&3lY`xas{mQm&Poz%oyA3Wy%w61SkwPbX;`-}y)zz3%#&j5g*M(O z@4u*xM@9&KciD#i#|2Oovlu>u25&u1#LGvVO#7b8okU9`H>mNF70|2=!AL#Y=~BA} zvtl@sQ}({o-5y|2Q}^?BE=Y#UK!1f(#(=uHK?SY}Mq(?y1{%9P>X*b2#$9 z>wKPtLc}}$j1gEO>@@TtnRFefB5%9Ize_tvD?W#3_s1a(mY33@(VN;j&~=-J;gC3s znn|Py!*MjaBu>oApJA|RgA6s>nO%_gKL$z|msoszU7X|f$`UQ1JDEg1M|~8&d&H8$ zGHX{u32J1vTr(67)#ub224Dx50XC|V6D31OdI~t8hUE8q26vYhbWXj3L#)BlNqV7k zH~bArSzRl8afjiYA(96(0|q!1<9ewirRf}YXT16eN;oz#E&2t!Y629UfeVNR!J+-c zlbZ@k8}Y+OaT|U7nP26pHMOM5Y&8Oz~MwG>F5{AR?%s9jn&t*6T(tii+%j98) zxkY1~(}9}?ll8bsmX27)wlb5}mj}8t+@Z|3s@TJ?xWTTMF@Op2smw@Iw<0Bqh{Edp zmUhM@5<-!+uqM+Hb|{Q9o?Fo3aGd4@$QpP|I?X2c!6KEVR7jo@k(r6V1E!a}nn{%n zOgGvzN5Tp+o*lT+^^VfqjdjS-l0QtQL+vLXlrK(%4S*1Wga>^`;Kp_|Otdyd&`4{g z(Y#Tk#Qb_7N1Rr(vI8|sfdUY9Mlf!xnZ>XI zIZ;KS$aqEo4}ii5Kh#9UWc?7`0zS)Fi4cpbAyjRKENM#)EzVg<9`?}d0fwnf99_kM z2~l$Z(y($E>@IFSSHP6ZY>Xo3WuVUhHG+D4v2~AMuXp4y&q~ z)&j%U9}^;IEp`q|sYT7YGt4s6P0F_R#t8>fxF&ZIkO7KMCo$%M3DR){JfmhMvpPE~ z&&Y_9urs6BD`Eys)RXl_3XGPImOIy$2un%g2{|03qvJH1u*#Fr8QW!jpQca2Fgewe zO06v7=u2EhuXdxrv+Ys$TVgNij83xX^KRn_!?tagd-BwRYvzJ zVfUV=cpZU(t&q?T1ytCaPb^`^68`M^ag!@GLHV_*Oc~}1k(@}i#7bwPf&B0-9j|M{ zyR3r1#uiDCS0Kp*h_suq0o374Vtue26X=w?oKZlY%~BSSH6W236&Z3NLYFv{C?YP0 zr0gP9Gt7VxTBP)xG}Tymnd`F_TOF{8d30k0#-h z!uY{c=BptEI_^zi}tUl-Tz>OXvut33bf>eBMk^20m# z|F8f0d{}R{%iOHcBP zNT*2?c^?z&yV?XvXj(;PrLr$yRBF^oAH^Awuk<66I{>44Cy984+YomBn7B%u3Ye_0~(IJh_yovxWlk_9KziDVhW>87w`)Z-r#D?q$BsdOaq6h}9p{+ayQ$-lX0 z_7$V8C0zp>L+q}~BM@DIc|A5JRLWTyIn$Ytjxdi{Fe8f+j=wNXwEg_tR{J|o4}RO+ zYpc$_+TGjvwezI?L{&ET;diC3e(N0kyz}Bf!5e#<+Xug^ou_JZ`*-zAXZuNAwg0}m z*WTY(J9|Or`R=n$8}4m2-E51w`owz18pJ9}zV?QZTJbhchR+uT#TFZOnK_S?|?6KHn3v;A}rdTBpz zZy$i%u?_cB`&am(_J7`d_6)lUHebN#_i%h_YiIZOz0OZRAE=*qo;_*9&BtvR+2-SC zZSD#twe@VX^SrK}Y(C%osZC$)Kr4FzzQ&_dzx~|CTiD+w{NL6=XJ;Fyv9+^(um?Zu zFw4CI^XYG${dQe#?sfKYL7wjIJg*11obbgCH3Hvlx49KuYUS++yn?@9?6*yW>PdU^ z8ML*JALA7D%Xc!s*Lhj~-(>LpVze5hYiqP3MrcdN$2o#)!bU8jd47#p#%Mtb#5_n{MQjRVrwN6 zU#_!H5=(yX-Zd`#=mW`Sq>!VA0*)u*L5i=O^~0xFF1F(gF4wI+w62^qew;lT`0HRM z;dCYe9SJ4ZjH8KL0nbTGTufucW}UxHF;JTvf&vqtaQJxYM4TK?M`3oxu{IKDL0e>< z4rxtomTi+KyegH<2p*tKwHPjki_10kjl4EuPI7Qbo^i=m9k3q(rk29!xr~BQMkJJ) z`W&aElt&}c$9Y+X@LAC7&#&=elJd9}LB1txj&rB3+{iw}7V{&}F<^m-{^GhJh?@Xn zIDQ!Z;?i2U0RLNTtt>uRymwDL8p(|vbDK^_oV9)tGsB{nKSzM&3HlKVY6bMhTBzD4 z$-NG8A*%vg5y>Zq&5HdfJ0l~O1P9qfz2KMh2IZw?QH;womy98`w$7l%xvQEmjr>i*#DR{XeJ_sL#}AOm1c1{k8l`R*Grq^xR`jKylzO-O%+K@i z0qGY$Fk=Jtyoez$5@Y;MJ;P9Ri7i`~M4m+H+3!my7IWte_--hP6Pa@v&t%*v%y~%% zSx_^->Y@e39QQB`G&wuGh3?t+G zvU5~*Otn;JdS1n3m`HNDnf`08=Sg8MzyYo6^xeW}%+A?MPrqJ>@vsG`B$YC+3iXVK z<3u0^k@NZl+&pPfjmj5x!m&wss_@KxD!&b{oUe13-s1qp?ad2_iGr?%826RP;xlRU@)gY|V-8_kb~7w8<{IyrWk>PVt=>Vbf_leai5`sR~Eq^U1BlTX@-6~F^4 zpY`@M*-*@yrM}m`h`65LZtwxYaU|5bfpHuw&LtmijAnyR%7d~csW73Auz7B+)0q@H zy0&RTm5hKe5;M)4$noG-MP*$xg=?LYfL1Y+65HQ4A+_I(2rd!R-*7nIjYOy@ZZ|%oF@9g~YYQMd;*FNAVSXjHj zfW1jU#2Oau9F2TWw@lTu)YM_MCW8eqJSdsxUS^%opHl}_ah$RrK6`Vio$Za<6m=#h zE1%TKnF%as?Jd{RaPvI03(4dRe)Xb3Zz@GgI4D+^4m0(_5OO(@rD&YBZp;*e(222s zLf}5shpl_;<|!*8;b5jfDXZ9qUxzNuFPs3hETl)#86sH63KS+gS6tiC`u!q~%#_cm zy9u5G*3{^{^x7#J9j{IOkAk-~{Ks*(W_`~gvllGkeDt0h`1; zbG?b2GJw`;KN(TbZ5&OoM9K&bU7V^`&=<<`PGEvY83$h^G1m%287ZJ?V1@;X9l|;+ zh!Zx!kGO3g52Dez$-X2t(BS8Aj4?}?*ov5!EQlt>lv3EBPL4WEftGTH3D&Svy@5U^ z9}-BSj7@}aqK7e0(6@_-ZXj%L&Z7y(k4TW% z7I0R>*ib6n%;!3Yxp|^hRKy0!Emd7hZQZY^xJ2+KYE~@M2{ZY5daSlOxcU+s%VxT| zhMv0JWs?0|XUv8)sIzY(B`8*|3j)$It#J=sDl5i01UPM$q}6ev&`iXju5iZjy;|GG zMQp6bSV|Om?=+5qcA69&MzdE^4l;1Gk{S~^)0LCz(^`W5NRM55U#vfNAW{w{)YX-X z8`eC;s=*djAfH4!5tBi77D;(NbbtmCn!Q~0A(pN{PBdjDqHFi&_&g`4N#BZzT+@w? zA!;hN)o4Op^GS+z6V#uOSTTupW&*ofP>Tr}mm1$Z-OMjeg%1V}Yxi8Kr zy^z&-Bm_h!1N5J*2eb#p`~>wGfYM3!#P-2b2i3=6DT~YX%HN z-K369IjMzAOh=Zc5EGG(IrR?8tOT=Kb~K5JISS6$Jhw1~%p12#5zd6UBZ;{T+?r#WvTDas zhvX*i*bDLI{6IFczbp#T&8{dpz)a>ZbR~Clu$XM;Cg+J&KAEJK>zLTTSRl$-O$*M3 z-C|aq%R~jT`w16+qMS7|$yc=#4f($(`83znJX4cJ7bb=g6%r57XDC0EFq@;Q{89Ty z@u#-_zfsc2K}`4zu7Dp>|7ZCw{_l%i<^I2G3(F54uHFRze*M?y!+Lw&fd7m47glEL z|1914|9*)J>s-H<6s2TV(P>mTiJGx@!l^bdAuFAxUOp_7MZxdJs%5*?ko7tjdD_vtww#?B^#;z+e z+ZotFnKMXvMKLM6MzCe_yo*%nWG*tym&5qupjoBiB|zt#{KA*(;sNS8mNYCRZs~E^ z98&^U{F<2~(>cBZFUOaaWk~Doq#2U5JECF4EI?M|V|}^^SXv`ym_oCJHXlu0D|%QQ z(AnP{UYsQ~bS*K;&|+1QU9INePPo9f=dj4-DF*}XgBMIk$m3%M&OR|~$g!iKO)@;{ zmj6*$vHy_E@_({BC@X&AK0bi|TV7tf|Mt1F3|N?O%?1n0k764(GG; z1Km>fPt=7!O$M?4eSrZ!?v0*(b;y5Rxq~>#oSs!a979*idn5JUfXA2!x~~2JX25?D zc{%r0{C$w(STI|(_v&;qaNq2qkq5IB>X-fxbgaFgbP8n7@>gen=LLF!JncMd@6!~? zZFd)$%sMR|dClXWXHkZ>aGd;fg#TpGD9MvQWBU6nT3T7fzp$S4CP&oR1m+V zhElG>NYD_E=8P2hy$!|V;$)q$IP3D%F%fO3|GK}k9b&rmxLVkZ`}x;hsOiY zu4mXiO6pyq)_K^#XOE{iWOrQFmS3qWznk^I0B4oIt;2po>(fb=ypCHcpG;$Q<&FLu z3*9_@{b5DNqEu=;{w>GO##SF27r3q~0I?6WGrOc8x>J%+DVUS9&C;iN32(w14s!9( z7$K^-6Gk^K1ib;HG`lUlwyYbr0bh_At3p#TjI{p-X9umAcBFvSCXe<4y+Gq?EzHx- z{?2}m#-=K~ixR^iIH+<$gK0`-z8HHEPlQ zT5z9NMmng|x3FJxwjEpOjfhvk767!_z+zy$c`lV8cELSZ%C&Pz~5t zFVi+}*X6!LS7wQd?$jccAt$xaT~}_+EWCGu6cAJg?UFkJHt3LEGrYP+2VP9*zgme$ zuVJ|ksiz8NazPM#^`x_p>034yD?Ek@tc?D%(fjj6{`SXETts<&OJ3ICL_fkXEFKm| zG$=t^?X0jNL!+^RsEuQ-^b+`|(r6^7BdRXIHbA~NN*mF%pXBBjx>QzRU^9Y_?E!1sFNS zFxsV>`axA*j%b0M)sxSjMaOV%Z>Z=ZN^&_4c}N}uP@ozW@%qFg72xq~5}y=XXJy3) zHqRel*ZlqgXKx)|_u%Vs83dIxAXJkpED_k@(2Pc%yu4x;G@kn1gJ zTSoDqg;CVYn#8_Z0TzXm{#>hcNuf)zhme&~Gh z0Hjj>;AnRF!z|8!m9gvtQ(n~r^N+)rjzZ@%yNV2dz#zeTZ83}xuU08*K~~9WD8@QO z$YKTBE3Qf~ti7>9{YRTE)FCWVIvD(h6IFjz3E<;|e&_?)oXjWDAd8)YRU?y4hOtqc zi+v;^`+5?{;qai%DYGxt2%sH(KY)U%Z#FiF z*sn`#*rl{pQ*&A}BhRLAVoWY!8$9SQ-M?FnhYudx%*XXVuV?f97&-7T$$m|;!MnHy^tWS2Iv=d?%|cB)9y-TO(?XYSj&pf_n@#HaNp6GT8+l;^t#d$+u8hAI$Uh~VAO<~rFKEU6t zxzbWyj&pM6`jykpw+aF|x8?B9h8z?QemAeheD_ja4_I^ErZwii3$&sZ>SAK_6HUdf z5*2|RgtaGo3WDO!2sccO2>&g499qbKgocNayV8IG&6e^`1bGT`Zt1=5jNm!>?G)=5 z>pYd#BsrV;NY_u7v^_db$g7&08Ka=d*kdarnk+p|Zl3LwFvfaAq2)59(O=z$ZFXg) zGDca~>bZ_D1}*|f!YQ}jH3;$DTTgLv)zWt|eUR(D!V}&>Rr6R-ic17`rOzv@W!gJ4 z4A|S-2nXURKSwy|e)o1BGF`nK0V5(Rw5r^to*%&~VNtP1kC*|h;k#Y4FzB~-!B23^ zC&>u6lSb=ttdBxUCQx-)MF3XsE^9GGfik0Ws3Ya;`ScR0IJ8pJpCb4h4cM*PxcV65 ziDUmO(IHG|CU$oFRk49e|`Pe=fiq?-DLk;y1!bq|HHjI z``?$i-rN2sN>yaze5+Y+ayiaZ_swh^U5xNhE4+A?4EnDmK-jmPS##ir+Zge;^ERfk zE7}-m43Re)9qZ~W9mY3UALkk!106C&l7!1YiEg)oS>afdOZ-|T#9V=sUU)ei@D1@B z=O3FtwYLxUk;kT=CJL8->WF6ksDWaG$SZ@;9c^X0k%~HcYJypzJhF53tMzqp^6G?2<(&i(qdX__P z1IjI;6=Ws)5QmDfi0#M(=5w@^O-dAPBwlL6pu8-45?6VoN#jfhvH(f;MBl?ccA+tRNo>*TH5CJtI`iiJjKm0Vjt>S z-JL+YDD8usH(~Fhk4o5rV}zma)!Gs3cSPa+7{D-&My!(J<*r6`bxfMrV-bHOcVPB=Jlb1=|m-5*KC(7@y5uii5GU$8jceAztw z*Oyu4`=fg=EupABY6*6}Bm3w(My7WlZ@!ZV#CPnhi~llptu?TrCbaZJ^HfZkKbo|2 z4M{feSFK{0-4@rUp@1kd0Uq*mm{>TB-e}#{f>uL?Vd!FlZ3EsOSE~fljNN=~Plv~_ zYt4U!>5BT`ohTG)jq1z(54D%5P57=EqVk5ne-s`r9-(ev!Dz#@_DlVs7U#_kO{1oc zWi&ZO%ko9vgFU^kh7l@$z-SAfaewismtyE`%Tva|x;&m@5%m_<6~3nyk$L8Siq!`0#yBSE z`O5?Cf*|t_*x8^2XE8!^0I(x|6Zl^bW$BL4Lrg_hMJ=NcNW#iNG9s)rrxG4EfRg>> zpq@Gu(Uq?6un90$6*C`(m0o3rjIw~7hqq*KCalon}HaE%v+>< zEybgpp?%lUJ@x}I)=M#^9Rhh;JPLJ`yidGpb>)#f-<68g)Eh zS+1nizmMPg%U{e}MaNTzZ)VSkq6aE0mcy316u2;gYd!I<>&E)z&DcYaFFSql1APu% z%0hAX{DY1F$%+#un97$kk=0y=Wx@rgQBdM8NEkqKEVsQM=h{q4PvXA&pj5WvzTXBSiO5SuT>vjI(}m|7V5Y=LWM*cim$z)j zvb`)C%Fbvf0Sz&LsaT7Gx5;H1<>QYuaNS+kUf008W(R7i08%HmB!^cBExN>@rc#0SW$=iWG$8Ca%1(9*70yAPswtSX;Fy> zh_38LukzuMVK}4`?Sm81REPuPn_8b@HE4W)zFe$xJ2(bP9MHaaU$RFuYhCOJOkQXc zPvv#PFPYWaP^=;dK{QNz)wKmZNO>WoVZG>#^5vz+?drlCz|ED#)rGaXy3MOgh|6_# zf9|V`tMKY#T`kRjg<5+EudH7G%JPG{TE1aW%S-Ui{adVf_{v*z-JG|G8Ys&)+XOI) zG+vC7x-L%2iPE4r|%4GSm1cUXI z*O3cWXUz#4HCs;kQcHtRixh=Fow?15r820OE~shIe0oM`tBo>>zB4ihejhctv*!18 z_5E>^K5l-0wEl8bDbX#4lq5)ZH(w*HyKBDu!SC=T^!QS`e93*jwXH;Q0#+4>@0MUz1_}X+QNQdd&<~Q)iPUGczU(Z+;G3kh)^JmZU<=M#ayF zOnjLfl*#KTk9DG^3FcYtGqQiqvvR%;SUWE-qLq=B`6QX3MV{}MM*g@)Qv7cXowsjN zHtUX-Oh*|oC75pf{d!vV2gP|@zp)j4MrO9KN#pB6uR2P<(u1B4gNGt8FiwOlhbWGgm}0q-V7X;riV(S9JQ zvSTU~R`|+kuK1zf;E|7fuFDUHkCA5=joE7cOYy)lRA{CBTs&}0ES~MAG(N~z?$0y( z&4O9cu;Um<}@V-B)WNKjU-%2a2_L$hcO z`m`+2m(%~0>HlecKVcv5pZ{-dX<_+J|NkYfIr{&#wTBB27w`1{U;Xv@u-;xb;s470 zr2_u1EZx7;|9_DSM#@2IrY8ade~{R$tHk||k7Y4`_cW0hU(b&E~t%*`?$Zk}DVu>Av*Vp-n9pan$$Za|U0H6AifZS7az zl)|B7+-i+hD*y1l3(omp450aBecX8dFRT^M|NDzecjy0? zxRxH4p8pS59^Qrj{xe*k59{r91OBhAtrq$JmHR7q@xNc>dVl-BsWMg9wXI_1*umX! z(Dfi_HmT(IY%%b4zfM4wCxd}kupx5_#@QNlMGxLQ{ne|N-5HIidDT{%CM)wBRB6Ax zavgi$a?5p7i0dGQQBl4@s*?oNq>O<;mT_m z;D^>UZL!0q$ax$1HR+Qkg=?c%gC1iFzCSLqmg%hOEm93u=}If5jwf++zV38zO8njY z9{4$S;WheUokhgD&2}cgm2_%;^7}341%<`bC!N02zkp0g-@c%yj?=B;a(Cn0`^F!$ z`!>e<=oY#AeJKHl0Y9Yqd4#LOH?=NEwGduyJ6HP8`D<~;yzA{3Lq7P()yU4LCF>AM zH9YU-YbViUyQ${pRl&XeMRV8p(BNXOS8&R?$ z`bRME7Wii>S`N9?u3PPrn(|^Zg<@OA-yw57VkkmP~3+i5s>GWF~}|5>art zZg9;cFBH`}QL+uyJxO|84X}X;8sYP+hMr2-wfbpDDW|0xIy~qp;4XD(p6RV`k+?*8 zLWclFXC}tOf>{NGrwJUvabF_Y8a5!VXlX`2d2UEgf^0l<92aM;1b zPk`oTz7uH3sMce*ELW!siA;a%miiQ6@p{mb6`xC?3QJ!R%GMz@2uQh38$40zkT zWyq79RWI~6UKuG)P9a|^kD_bhU1m_2v9R!_xd1Hi%1i13tV3;QmWaA2In}&L&!0fy z3+HGnU2GYGJ6-?bmHX4fsGBBHdK!J$Ea*tO1{h`s>g|||I`Wc(K~yA}bBHvuc)-4j zeigI&oHAxO*ixs5e?%-l97M&srn+p!!;%l4zZ!OELT z$Yr#vi>u2IR%+hD9Qj2Pd=u^UVqmS#JY5;q>`@s%^iLvyzp}_6Y#hH$d>rzZuA32- zlB)%!nKk)Tm->m96qV;QeTBrDRJ#z}-A=KfbY4JRn~(GwF|9+9H-2VGuVQp>s!JYm0 z>%U4fn|EyS9`>mr5b#u4zc@!-q=OkwR3aTkrWj66Eg}fQHRuFW%-RvyDR(pvm)&dHSrz2I8t8dNE0T}e(zbsk^BFO!rkz%VB))goI*iPI>HyTWbw4zR*OA2`twaf*+e zlVev!dC)z}^Kq-$TwGcU7vO)3t(Cc-m72NUDT(O2=6a|0xH3g@oD8tg_vg9Z!5|xD zmzs0`ec$;67Y%aL8p6C)>fVs#vkUM1s;zER>$@)Xn;h?%;{>a4Gu8A(RTNU|Gg$#ek3VL)^P?{lEUI;u;^ zw;T};kN_)%!$gQgvQIpb5BWOo&kS@|TM;+CC#vhFH|>^AQ?=iauI5zNcrdmFq#o7} zsZc}W1K`pO@^N91H>737E#H^J6jSXqkh=B#`tWp8QfZ2KvW|{T6G>EuCx@4v&RwhH zX_kx-2taO4dNjy3HKg-DI)ijm@XlGuO$XG}B)U+?m$|SLV^j)Ye9;J{S~PyeaAv~L z;DHSOJyvp0vPtbBRl4yi;31Q*kH)!r_z2CEDWnmfBSeP~!2M0_AGS8P7SwDk|Fb2$G79$_tPXuxGOt5))2s;Y= z76E=e;O8nGvl>%%fm4k~2$|Vo1-A~fB`U^j3UUVJHUJJ0>jLW4jr*MV zi$Fl<_a+!O^awb=R82%<7pY-1z|@(D5>r}Q0D85#+c9OZVE-|2_pp9#UGeT5}_&tZi%^d;c+ETC1D>Xkx*UY)8N>D z%mkquoX7E)cYzY>38?8I@bNQpB%TQOE(CE+hRgh#ejMN`Qpirnq8rOO+em<2 z=}&pmIKybrxJV}hq^Pv965ejTgL=~(70Zmy&!clborUqiRbm!42(~mU8{ZZjVZ^29 z2C_-;cOWdjWbJiCV}u_K!lZd+ST!UF`JuW<#`I-iwo;08A@6=^){9}tnY7Px1Uy9? z7NwtM(NJ<_2w`y#CmOwx$bHdzJ&=G@L^;1DEz|!~=LPCyTkK0vp6sxw#6+=!h+m+Gq$10&>_z1}dht1b(y zbG!zuwW!M(c4^)9P?WXmpiR@TSwhEKBRx?-md*nd{!s>DCIq%PBgaDy=cWaqMnbC~ zGj-tY%HgyyyDT;=8|0|SaIa!In#unq?gvsOu8AxLW?y863Aq;-E4-N#y95lq4o}u~ z*^gC9WF9KnVTa$3lBr zn;|+w+<@tb={ZtrBI*S#NHQW)jruX2{MwO50@9l>TCcmp5}%Wp#Fx%qmXJbV0*6Pj2K zh1nipy`IBeAYVqJZR*mB3LrEh#>>^O1#;xlZVsYxUGG_=H^I_Bs3}Bv6%^y~l4zh; z9kIrMIE9mo{?#&0`aI-%FNSZ0Gs*A^xLR0a5qp5gQxGBI{weS~unxqI>mz_Dzg7xH z6HE*;2=B~FH(llS-$EgqkL=_9?Z1on7w+HLf4{^v$NsyzxU#(V;LiU0)nC_?uli(t z++hD*Tv%M5iT_((y|e#*iOYobJkk0MH??Q>Z@^i^v(^863C9cnnXOAU^L3kpWuMVO zZa)s2Zap}T9Rju>9lVbBS>uUJS8jBkq+oP3qxgc=7-F;lmMKujEMg-Qh#c%pQFLRapFiYa)0O=odbs};lt8DGH zHxJtC0COy=&QrC$bD-LP@9ZD!>qzKVDBU1`rK-pUze@V*p#ArQx>Y6c&)vPw^Ub~A z)i3Se^^5kMTFtK%&2iQg;8e0})&8;bCT})|EtHh)qFKm&DdAN$3oChL4!QCGi+)F3 zI6%Ax>52SZDqizPHJuN#Fo|UJbda2$7)*1k)fLhp;D;%W7r6{j9xppzf)sdppl(wyaXa)TM3-H=8~PFH;MU zb^{@+3O$6feI_@Mu15`W(+~thY;!-(bKsS$hZqo{mx0s$I}Kov+u@NZ$wsT}*Mi}O zWl;|CTfKWnAtF_^Vun_!m&X#>{+wVSr$;V~K($ton;+wz{N*ox=_mG%H_6i~HK!x9 z*q)1b(zTTwYkrK&jmKzf4y`e zy{g?^CAfpFQ3@*P-`{)e9MH4CMK=)_kNFoMOJ@lXvfgXi?z|zFDg|xJ0XmbU?fjVvH;E zjBDcfj1bpS_ZJo&IF->&20}|->^;+?3E{4J&qrV!A3Vh}JZF>vAeT>P^o$Nn`P+9SSJi1cuR zi;$Mg?7x2SDAcQ7cN_NxC17D2(*rqlzBqam3fy3Pu6fsAq4G5C@bcz%_2u`Nw+1N_aszS_=+pBk6jO6CDvvK7lRu-| z#cZk4QE1cihVsrdnK~Y4UUeYTC4WX$YH%Vx4C|IM(^6f3;k{@Jd%Aahgy%K)4o~dR z+rmPcxZ)tC($35{1+4XJ7-vzlgO{&lCFX$)Fx8vJy9`ysY7$9ZuIV_-fx{ZIW05!u zX!vn$*BHA^J+OGzPgEeavO7L=TGf&(m98x zv5+kM%!slYp)xnC+zih?l*&@fPTp(f(R<^g_j#+Z)E~5hl%r|h5;E^pSViDF$m+x; z460SH$Rl4eZ$RppDzTP8V`;tPG6uXziObnMyeggT{r290+SyZ`pSE{^vFmIf?94KK zzivKz(cV|pNA*Xw88XZ)o<@JKS~72QwXo4MoO#J)i$sed&le&}z{lTSe~C4VTo!++ zVMcfONL66!Q%qdia=GVu@N40w^w`)=F?Jb5>;iz^cN&@HfJ^7(4B#zn)C5bHRkUbl z`EVzF?>aHem*OnVAY1VdOFO0&{~WcWV{V#?$GXA#JX%1MmYVgW{qC(4jYm#bms4Y^ zA*J^8WQjg&x`K~Dm@P?Vz|oOvpipgBh2XCalIaSbm0EN zGtXWu8eK7~E!ILY#qa=St3n!lwwW9A469NGG00Aj6ZEY`|KwXa)?C=PE=!wmzS#$m{=#C-&EBY|NEB`m$K&dv zE@jDh$&5v{dQ-7^Ft>EpPH{ctllMYfGT)#bG|ScmMcCmzYC6AEtGpqMpZ(-xwR zwOZAxeOG-s(>Bs|JvmKNVrK*Wy|oix(i4{{`wh#yXyE>PmN3dYx*g|4s`{UB*Yb}^ zb|khyY=tw<&FI{(X+;BMNh^AzOVy8>CTn%05C2|Ic8_GDi{47&u6Y`&n`wmUKn61x z%3S(Tqzpn6DsQh4xvcJ408;X{6~WTy1sr(vraTLYg*}$H&7mbhMgXyT$l2k-kx)?n zc6*9`BgB~$s}9Wq%)F%)3#%MsCC}#Q5zRooPo&(DbAJ6p);zkq>{YJ+D{yh-M2IVx10V3aqo+(tz*%StRjld6PTsh#q|W2*?CycVN$6j#tG ziRvv#)MxT1ectjRY$i##X>P`8lf0Zt6$}E0h3XEIm>FgmKKVhIF|%r}r8bWNGxq66 zh-Y;=&8sUwWQrN+%Y2+Bp3{W`7)7a`d?0Z?l1gKr#qfD>YCJV8pz5;C4ifnoz(dn9 z+V6t{QsvFBd14*$u7X+gFFGYEjE|@eVrf8>^MT_A(+%tqOLovxR85HFx1b zOzI~+$GePt$qH$_>!t;7nfTK%$tbs13E45}v@RlcE!9%EPZ+Ge+#Lhn-E}2jn4BLt zO^e|SNC%x$IL&p#IgSVE=rrRbL7W(Y5@CCz64yb0P(>%Z(sA&YwwOp}>$lqiBXi+M z{LncHA79pfx!i2xlmz#j91Tcm-yj-tU4ztD-Et)O9uT{ zk|bo-dE;kH8sdL2xg6)I^Cp@`*{uZr8lD4F?EEk;Cv+@F{incdn%_hH*Tp2sWBcf% z+*05%OOI%it!vZf^^Pi-e+NXegLD@j_^*PL!-b`NsiON=JL!*2?in$^dg3F$`@vRFRFzu z&5H;Uw{>=LGg|Yw*ylx*0i5q^gU#>Q8hpz)+3HT|{4NVG@Xd;81@oYiFelFI++uU@y9 z*VhXOcj^E@yT2pUy?WBw$B=ULJ*l`35mH_yw#BNvI9zUA98*lL1R2Oll=IGAq$LP>q-?-!Mrkw8KJ+ z+bJW`{PsmS<81O8w)IB>{vjNW;pv}J*Kj(jR^SHEh{H;w_vZ;Zqw(i;+60{ZQC-l9 zKCz==Y$<8yjo(hCu~n%H!X0s9cl*(3Jfx3$3D%q|CcLj4=?~2p+E~f(|0eG3N@@qJ zdsLG4k(=c-_!WcWq&%q{X&)E7RY)_yH_2~+bUx!~qQgYp(@M6ITku;)az)r}GZ@U2 zj?=w_yuv?Ai2_N{@7}!Odr1^&K9%1$e8rWD%t!pQ#Bq=gKY=GRSI;NY^@Gw$7dQNs zavL*CW5-w3-&u_SoU<3|M^0rJXPdb=HF`XO0SMbR-7&36;?~*5>WXh|xE&Orz~r)Y zY5NTH&4Iilhwir=D7yvyFVKG9vF#6vDB8l!QXBMTg&oRToCuyQ_?e0C%>6`}r8$Qy zGv|b!xjrP+qPthrtNRWf4C)8v-T}f>vwP_cTlAcj?Lw+hS3#{Nm2{@$tn3kpT%z&Kd$B=p?}=q_=FD9(}Lz)=ksJ2(4`uB^SpHS_r~_+ zIJ>3`+5CAKZ0N`^e-)U8vb0C_c`wgYOql;_NjZS|FZ)|eEDLAX;Sfd4slx)z?1|*D z5{B9y854#1gVtaEUJ{q6;$F;hE#5Fqm8ptmWXvWxj|>U(>*}@NNC{}H?zqYpzUj5qM+wbgb<8g{fzh6D>Y(MF2|AfDPYd`*ZXXh6;vEo)V=IqtL zX6;igYOAzO$MGnM#tp+;=~U{jI@Ix6(vQjbduu1AO^nt_N2V}gA&)mDqrR@5Qm!iz zPz|MdZcNV!vrHV_Tiu)M##ATC!pj{9FR+!p{{6rIuNx{*>Iel9u`%`d!R0sxF-UXy?h1sIYurhk z;;mVz>y^!U%(9~M)NOeZzfRB1Ls2quMsz#PLm9PXE^A#YrntFu9ARNT(uLpkV!>R*-L{oLGg18?Aa-HV1b%>2_9u*1|pn?2Nfm>EU%v!%Y7`R*@&K{`~esUJNzgS{9ikTbRk{uWTWGF~=j$*^uw)nKA64_|cC!l>yDvw-xQ(u|r@t7JuOztB zyrQ$JnpNd0WA6hp4sB|c0IIV=ML)jEw@soIP3`|j1p~>g4gS5^rH@|IPFH+>h2v>< zR`qt%KxvMmH>#!X*xAFlPd79Z-ColZNrP$p7qR6E zE4C^#*-vfbo$X&YpLL$R+H3#qMH~HAy`~Fol6xz|tWFcyfc=Y3`v3;m=mGA%?~QGSj}Ft<5w4=g^zCS=z?mG} zt`qEkV$_@og0}#DIs?#tl4N_Fn*PYY*MtSTZ~LbUp(0{}o5`X0ipibPe%W4RD#?}<|=o}mwh z*(NSpR;?XbTmTL<2eHs$72$j-8Co%uC~@L?ZELgbxdWj#J*h-?U@j3VW;(TA*e#lp zmM*>NvTy*WKlLXm(zT=Zkwc5zkIFIDeTAbDu32*jBjzkOtjefwi5K0?PYY)mKXw9Z{0y~XcbW;-vYB73BB)x~ z-Z^;nbmztP6E`wNbCV_>=o=dk^q0Sw?c!b~@Q4U(#S0Ru)aXO2#NmjDNbhsdeUf8;)im>(Sgi${v$Y zqID<+fVoL~Tct_r1N#_{6ampf*4XlS7tcj6#mI+6;JsHz1qZ&89TV2Vi?c%4H#*tp zY^V21nbc*Y6ir99dC^q!=5x^A+unTks=c?jvsZ|EDa$48=2@Bz3v)#$LrcB+Ai+o*!CwYisW&lPq_U>zvYgQ3VlF)l~{9dkZQG zy-}KQ7aseWJ~ZDlMAK%O^kOKd_Up6m zBCPOm$pV^D0cFT3d7s{^K8HgsJQ<`gEZ)|pTExIj?>qLGG1>Oe1Y^8y%!p*>+WCe( zzd~pL$Y%9Wej;72cE5XTMsgK)Yjx#5#mUr;47Kpxbv&w|cMrdKj}Tn3@`Q5R)x9Zo zsGph3sqOe9jj0;Amc zQ7tblcuZnNRv4(e#|zrQVfq1YCeVntx{oZ}d-q$|c+_tI$O7(Eyb%jx2wngsSSCaK zJ+-9n-BVS+!-iUP1Ybg0Uk?p1nCIht%>g-~4|XwH?o!!@(n-soqoFV!&+3J;&jubd z2|>&fH)UqA_y^G<5tRwa9aE;!QVX$}k;?h_61ng{q2Jow^=Ynh|Gya*)sO1q1N{FM z7FX~5|GvaE$Nz76ZDH-OX&xtJzdPrx_<@ z!8Bc&iY6RNbIK~G25NuM-D{nT80r)%M#H4W(d7lY)Nk%~=J~&A!`o8;tm<1M-aOm?qRnU<;11%eW5UePdFSZmep=6@E%n zD(TTXow|CElB%^vh69$ntf;Nl6_r>7^`QOFuI6`0iflbZX!4rmJ$}NbIoW!29wn`$ zG`8~D+52Lnd`|mXEKoPMMwqip{AI)VdFX*%6@{XbPkGFwUh==1qh@x$z4*$2dyt1Mt*V@RMS_y>7t& z)z!6`_>TpQ|GMM>xj$E{brS7Zq@u6w$?38~oJ zSdxqQ_$*D&XA<<>CKnG^ibBh!$$lVFBv=fJ{eHbj)=4~!l2JzYfGbBGDn+$&DO4Wf z+{#e5$f_dc2g*Wfx!Ax@v>KCxvuH#$3s8$G(?~}sFJK@_)`OMJ#6i3BgtJ0=$$-%g zn4{8OWz)%P7( z;I`9<6DZ{S(Hk%N3g!lA(9cGqqf(3;ee3$bm)m>S7kumaX3?+SiG{J%lyp}&dVo5M zqc;X?XqemlmUgGFM1!Q~e0oEHdf$g$%Lcb8Y%gB8^CB`_zhWoO0)g%awTfp;NrZ*t zC#HS9Opw?>M}ld>UFBTSn#6fIf#7XQRKljd%GO?c^PsH`Fj15sIUBxTC4F_!{`-O2 z-RnHx-1}Yq(*B(*sPOIW9r*tj&z{w6S^#L88kHK}x@0#M>gJ|xb#C>jCc-e)y?l}`%V0?olNVTMmo}tiM6JqOI;*uU9CV$F0KcoZ>qhs0f^&c| z4GB}m23Bc|>!Oh%v|5o0UxWi#QqG)BCNG6o#eSYa);09cF~Po{{r*}DKHkyG8Zx!2 zJB`q2YNc%z4f(XpMMJ)0&(-db?EHcMv5Jb)LQ1fNRfl4j;Fk9+iPWERE^-g4{bb!h zoZFfVb5>?D(3erJMTc@}<%C~UYj)ha`T13~%)zfK0Aax~Q=O>r)-|iN==b))3*{2B zTMco^U`tsIqYp*?FFEB|*eK4Jn4uSNPF3ZQ`rMOuoL1x|^jp#IYb~W;b4x4yW}QUb zWh**|7?}6&&cc83)Yg|}TLv&eW?THQP1p5;_sBSR7Yd{~yQCS>n7B0JMH`gY{FYF; zFsCk8={Eg`7R{QY|6^I@6Udi%y}$l%Vd4Jro&N7jTyyk)50;ki^nd>hS4je~Pu|D% z_Saf2C%jrr;A&)Nng0V@ZKz7QtN;SCjkRs%1C9yr*5}lt~;CQ1`?D8zvxW zk~m$Z`=X5|;5!Ieap`xsp}c|sdsECN#S%)~ca&8#shx}ON(N9-QLq_++@j5GQ@I_P zM(EU*NRK9YwwV{zIc{>N!U4EnBE$+$>f$O&Xrg{&n7Zl~+cP68rtMV|5-+5qRmDF$mQf-8AfkJ z=lD47U+yP=!dI&+E6c0;1;?}ism;N-ixo%4d-94Hfpw93$? zUm*%z$8;)*|GFxx_9^g$wHA|t4)D{)U)f)7%C-XSV7fg+I|{i4XKBZ6Gj6KlT7I#EIlW=h4H#{7&G7QvY{Dh6@6Ne4|6iH8K*99EWNLYe^b(kjh_VX{`Z zuRAWgZiQ6`*JkOGe%D~3dBu#Hg&f116e=U@*Ji(Cyu|Vv4j;6%tFj|Tc3R?VY6E1IiwQ>Lm7M(`PsN!Z`SXo#ugO-`W&A|%$sYo?3 z`z)lBS-cV%nv1iR<-K$K#8EJ?J6C{(mXjzq`UAQeqQ`Zdb?vs{(f?ztM{3vxWUVKUORO~{{QygY`KjjSrnXSeMJ_!rVD5RAOJ2BA+dD1KoYws zlEp5D6gxQk0rz_i1dNXRg`2%=7%heZQa5UozqDv3NvA0wA?ipE}HL zQxUnu;^E=pyR)g%Q&w)5h0)&}xT?U35px7uU!_5)N+q+NJyt_6s50f0J?2CipkO^P zVpO4@j4EMepqsGx1j8n%V$9~bm5fP4fkrDOYnn34x?6O3pl>!Se`>}&CTPyB+CArA zT}eYTOH23zCqMS17PjwH0~hq~?N?nWHbXIkPTK9vyw5}P{FEaz5cvh{ zase^H@Ct@Zf@Eq=XW%(_Fle%;4@@|kK^!u=GnMq5e$7Ym7lLouw zQv9||W8;*JO+R;AAJ5LgldKt|24ZvtLBCXDu6qlfEf+={PR>Tp<;uPiZyJiz^-O>k z;VTc@QTRThtj_|o2Dg|fPcb|@6Q?17BYJ~wX1UYHb)UwP$~az-CUenO5ieiv>uI!W z5|4CqLNkm85eA3wjZP#t#Q+xwNXT*qI6Wr1aKL0me5GdB>Hln4sW65qyFHtc_M3=n zG@2fgcPLe_f(5DaMXbeb{3@OpnTYh%3Nk9ll=2UWv3HUTv zG6w)t_jGe~ic)c`pW$!wSm})oJgEAj!DSS~b8tJ*E36TV2766>E81o6uTb`@j63fX zm95DlMx}cG$mPaW3^46z)J=l~)*DnoY+>a>(l3BQpnb3B0)Tq_U zLF4%5r-uo7i%w1;UQ$TCq^c>irJEpSei3wBkDR4adHxKzt%R1& zDwN#Mf%ckQ52!`-F6#{OBiUqrH#r1UT0Ypzq4AH;@|rYe?QgH&{6e|(Jn4c;qf2&3 zAS@{lUbGcuS&m>f&`koLAB1$ln2d!2M|eLd1o?b|OW_u3^&DKg947tKU!p4y3hA#M z7ky1QD7|+P85hbnhfEcuAkp@S+iriwp~(P%pVHucgvg;3CLSqd(i*sM2UzR5I~sz? z(6hJd$5GTzd3k2Jjt{N%q@4Lv&WT=8_dIDvbM*Ie{q?Va_oNDdYS6CH2{3)x_Frkn$4<4(PV{EeEjm3sP ziH1OGRg?=7^@wsHfk@Cx(i@WW`J8PQQ&QpwT&oeM}Ip4>#oENXs8F@$iE7FwXE%?hG!^3 z+)puL$STvp3sMBqNybrx2e$hLW{lE6)pvEx0{)4K7qma}#8S<^f%JN|!H}%t_z?u* zDL<|WC{L;e3q2Ih^R$#@XN{Yoj)=Z7XFHVv3A+KtWu?kiCKw~YR7g16iv`CgZD%1+ z2A}op57AZAA6Yq9CX~+;WLQ%838OXwl27tA^eT5UH>b~XSTdOz=$-l`+4{*apNkTK zjodfEVCTp*e!6noBeE9@so<*9qkJA{-jMD&WDNJsMX~rK%xFr$cR#qAaRG)Q%EVfw znH9{|E6u**)-28RV%IH&>lSLbUQeFAT?L@a2nsoXbw9O_gc%Os#YsGFp686kwW&^+ zw9P!T3evY&9lOfM81idmWu6%fo;0!>lZdZp$R)@?|DXreQ%$ioqK92$eY7%VJG;;5d{iI;DyCLIjRyR|%48H2#vPY(um=@^(CYXc=zLr1#fYc-@iX>xt-a>M z&M*;FT%QG&-T+?_()1C2bew%ucONOn-e{=*=29c6&+~UO)?^Zj9`;rI2wytGdzgkN z;?u--9h0W2(_w)y?u+F(9a8pE1y2ul$Zt4W76>V|Ey7qmyGcYDZ!y9}t0gifMv0IU zx^*QA%0o-PbWDVWF)Bp>HEpJsKLIoDcGOAEftkG!BnYc6geN01c4_0nmki!vA>>G5 z^UzwkReL0XLwdLt3iL$V>Wxvo_}S}KV0_FB`MW6^t5J>n8fG`fVK#SOY{^Ae&&suB z@5-d1@lIw&4znnyi695+L~5vprzzi&I-zVkP$|1+PiYu`z>*bNaabrlnVH}*Z{cPn zM$T%|l22N+P_2$yHDj$4usex|=K>W-oHU8P*qTxIo+VQ+PtS+k3}yh2nv1or=V4DU zGh&36Yco?n*mdD<@QV<1k;llTUf!1o0>%i=~L@P$jTU?12Z~o3al4< zv40wMabJv2k@>=ulH#o!3_mcz zVvs+wsaK(JaG40K9E1XnQSS=En`tQ`Q`=2*_c+%Pd;pDfS&%IPtCu7Lps)xv(EWl5 zZ*AOHDF>^;4rq8J4VLaN(4;ms>)vru%M5r@&}a+BfOh@qSd~Ae-1-^!JW?>H@%b3C z7Imv8apiQdmY9pOCZfL^1Ok};G~F85AqdTh0Sdlt)bwqiz{Z_* zL@pZ@cGWl!_qHrpQ+Tf-YW!hKnl=QQ43ZdQFyqrcsNq$>9zZHi6GTO6)>c5uPM!!? zS?_L?meo&+!IH-&kOMaZ7SVVqG+|t+iVsGumy8d_O4SqsEU;iu1Wu}?f;pM|t=CjY z;CjE8a?)(cpxCdJdh6ajtQpS|E; zqW$vxaap5;Oax4&H^hd8kTi8RSeaCcX5l~(bz9V=*onfWrps8bw;VK}x?15Mea`w{ z%ZVqwsMx^e!u`qE$ z{_ETAdUH+Q|MkTOHK+cAK*GEF58vmydH%PYoNr~8`srr*-+US0?6h#-KmXgeuON|| zw@u1!k(H~B9s%3ZUc-AR0l7&zk9fA6;Qx1|=qKZlu|w zZK&#Amy`k2cT!TIyup&Mt(Bch2&#CSWLDKjLOdB6cuEMr*>A1ywGLn;z`7bGg(aI* ziHDsfjXTRel1aYhNqjUR?GbXi_?I`|(L(UIpf1Q4y<*4RJATw-)T{aOMko~{m2cyD zCrAK5&m}06EMC?*Cg_nTxqGH;+?2EcdA&Ys<#u`&g*~xVGCeseLfo}imaxQLwlf}V zgKk^efsLATp|)U3Bm<1;how~-gKBSD-l!~`r1=oN22^=uzb}DKxDDxVP{U`xY!Y(I zr}UY0@yfKVUBAjwLk8rdSmHV|kH9)TfwznET4hbjZ`qpeh6K@!VD0v1k3yA`xSp77 zk0`}Pbe>q*_HL0yk6Ln5=*^zNWLk+9ts7l&sT^qun4=@5eVI}ghF%q&G))$DgSImy z_H$nQu6g{ZU*oN$GO8Wfu0RMV@@G&*OK^wF*&O+ukMdr&njS(-(#&sj&x#pd*Dg#! zp{4)iX09W@LsS0i&e%^N{Re)qXZ|){IGK|O+C)j6kPDs2QxV#-MpQg6jEk#DQWlU2 zs$i%Rl?=k_Z3Vyes_>k8S7`#|+57P-7>wJ!xI_AC>O+iy2BWQqjan_MggXKy^v7~= zq+Qg?q~tBjk~YW3pr6x7R*htm(UN;y+69S_4l74zD=(h?*v`K;djTT2oYZ-u@IG)*Xh39YzzlcG@ z*9?}ImunXE*<7Ux0m3Op$uP>a<>dRgX1~P9xQmp(kkjlSl?9#n4c8CVD&#~D1=v(Y zCqy`fe|2ZVtj3f4Q1EAZ9jMsvG|$d#n26-im84ND{AKRPZgi5)DVu7G>S(CKH@1`7 zq(qJOn>Q_a#AsxfGJKl#m`LrIz2hd?8gG`V@yoL`-ZVp_eqRO0u}^#?(TM}fB+;Y8 zhMz36#P!M5FgJMOOgF`tQ!9ID$p;hsf;CQqSFlwx5Dj_Zh2;x;^|5s{Ab0q~ zIM0b;&ib?O2`b&`o((g7|3*M#5tPP^X#>qPtf1x$VFLIVmz9AY;CjS^3BDrmnn5<& z(UU!cLxP3_S_BhVq{pbIZfamTe$5X1!N#X!iYMfDWQCn_fy=#(Q3`*Kv`x;x3Y5;g zq6Yq)_3lo_fy*`L_;z%xGT9VOtTJaZmH5l}G+F-Bcnsl-N_h48oorGSP*vHJUWIia zX8^r^nO^06x9@M|SF$JATH7OplygYanePOZBpnaYd(!d^s0L5tjtqk|;!}zzQi`4h zCLC!f4U)$6h{`+HU%~67fcDJxIF0+@3xuf+#LA7)lcY25IUW%cZS#l&>!kbeFTezg zz4_qVo6mEt;uxz~vV+FppH~k zl$_5!Wgl>irOX-R^>4`Wa9H38Aa3I0;KT@IJRQVwtdw&~2ddp2%+9-3K~Bie1c_kP zAI;_#frJ2JC5J$Aa=aOoD@G6rR>#^WQ?y=zE*GqzC4|;$j?P}YL7{rg1+(?x=Jwjo zt2eu=2hW2iPZ*Nh$}?4GV6pzN;V3O8fEfVHIgIOn^mkR%7!f;Kf-e}}^;_!%;*md? zaGWB4_BWqxZbRrg{B_XUdtm~YRIh@Iqc5_Rtm&FWWqCu<$9Pn%=?8|M-rD|W`G06~ z@)Zq?|J&{SKkD^6|Bvr+<@tX+Xgq8@xby$`(_i0i*PCm~{;$u^yY>GT78maPKfcQ) z-3|byKw7_6-(5&=gYezOTvwc;bB$V~R<&Id+T(s#@L7U0IS+49BTp7D6Fo??xabvw zgTTc^)qaMUa172#nb06UsfOJy^<3n`D5;WYQfy05Z3vCO5X@}J)CkiCORe=pcW74A zT?rpQn5L>{VXEHK_6qhmjYg&!7$kVk3szLj>c?Sp(zGB}{W0zerc%BSnI4qmtdwn8 z!>6Xb=lC+XV# z*{%Qxsm}qHZUJKzyj~8@1rsC0k0$=C3cj}&cA`~?w0Q#zR8Rm3ek-|z$^&S-){#rb zL%^CBwohu2BWUxO-oNwfo%J&OUsnio?Iav_t7oJ0-q-Bo7X06X2TOPS-}kt3_`jw4 zVtw(h{_~&z`gXhCT$A^IW2sSJboT#ZZJ}|;|9y|^@ekdk1Gdrt*8k^wkKsQ-FYKSL z6rz3sf^Hv!VS=J>AA{B|=$t{dztKuzJUXd7ECh4>A@C0?g^M`41n!{_NW<$&;WF-y z&Q>Vau!29zDh{racEX+@L8dA6%K2HDqak7pS&yJaR^Q-%{m($B)flO|5s&BSGio9o zU8%o=;BQRX(oQ~B()d%{KLz6wB#*Cv53SOv+*5CLuei}F9G=Ggrb*ZW`k?;ESQP?+ z!h?@<_3C1fUZtbxyfTh0FM+V1R#GT_VOjwD!|4!wAe+Ho>H_WS4f9Y;7g(piMA6AY z6uH9#eYrKfj|9_ZP;V^N1|J_~Mjnnw3DYPEb{ZkjSQupHPL?P&`YQYs@9N*9B2w6!rb1v=&w_=4h0h3qTA$25ADZ*ngRyU#QPN%*}#XW=Y$U~qxkep4Eez#Ly=wtHl7Mh1A$$sRhN7{h22xFUav-1Q5(_}e9oXkd!hTF zz4XX8qI!dm$nCdQtw-nP@hJK@stB>apF&h`GZ+tqc+d&c43^QzG9b2KyU<=*T&zEG zS79h{2H5p^3mG-qJrE7lJy1WZ`yt-xiH%#qCKs??ZDa=3@DB=he71v{_+Q<#%md$w*4o{6!_!7)CFCY#ZD?3Ngc;>* zF;w?wXxmtzJtrR)A?hqeov`CBs73nJ@ayvpLA4x`D5(0GpmU?V4N|Ll@Bwfks4sJP zI*4Sg7#JC01X4z3T?qnINzaCH|Gfu_H1Vb&S76iSn>zu-8C}6vS;}_PjZVUGF9(jz zlcY0FD;IGZgQ1wUIUWIKi9Miq%jKC^mq+d!mE`0k1@nuC7XL-L8l++rBTP$uU;p)4 z0cn&Bd<0M8lY9)@O_M%$OLdiw&(9&f{^tyMU0kzQbV;nJZbTf?o^#=J7_)R#@T&se z;1F{zsC{pI-cMEbr6L?um6Lc>4$kAgIM|AHpdsa;elp}0eerOq`>9LKzboyds28VV zBLkNJ-go^B@$1Fevjw3xKmA}K=+-i)gpXLO&9oeb50|^yQB=uqa^xW&-NwmsdpWaZ z)MI-m^A=Tths*@kr%MYD+lvbsDs&DR_dDsAF7X1brn{I6S#oNQ=$hx?q~T~k51INZ zhpyGb#(cf&0&60l;E*7D-3;wovc@e2Em^TF6{i6MU(@%&5EHj$F(VX<9CoLoQl^&? zW_R>+Fb{J%n59~F+_0RtUi5lZEH*5-yWYOBivz3keul2{8W@E(5jJ?;3kNBx9_cUB zmSUW1wf}u)7>~4@=ID$km;%lU58$R?Nlr!{Y!PQ%u;e-CW?)+(l?`M(tXvLZ`eFa- zQk=9I!exzUA`Yn~U-T?F)XTVZiPVWxcwcgYUaWj_=FUzn*|&1?;$ z8%l2tDZP#3%6ZaHQ1sveoW98r2TpV3IkB8egzGZ%a*@=g*v@&IQP$sHxsscq{oQUi zOQGB2xaT`6!l)g!bKuwT&|SkHI6a&s$;cAB^g2HbA1rrf?tw@;oXZ)O2eta19!^f$ zwdJ<^`hPo*x^Wm3nG7s=Od%au2oT%F2@UbK2%!lS@G#txyCi=%3>P30=l$HFnEAw! zlSTG@_N1NEL|!xhskz5#T*SP~MVNVKbOT;~@!GqrF-0sFF;C7)0F~h4hld2>;L&bgIpEX<2msG`y5#U^*u=4g`c+|R!Aqg`CtDN zJj;5N!R)^DsTE@u-|0ck*`wlPlIUEpN6ae?SVNFXh(Zu|SD+j?<{d5kya&E*pm7_H z`*z<1lsdkTYPiDBPr)K=@>arUij^gWT~!RYZZ$B#?^cZf#lf9i@&?i5Y!#Fx zT_E_{2`m>JE>pb{MD&!63;bAC$c8b0U?c0d4a z3?cQ=AgBlb`ak}!$8+?8Sv2EF|JA0sD;~q4Le8C@?&!hv{_G#DYap393y!R{GblRA z?2Y#LtnstfuFJw6Vy8Box1eQ?3>9R(3z~w!W^=Z10B)>$`-*>pb`-Ab4Kk63Z6=Lckl~QT?OmjiotBI?*2kmQLwPM zfN99m=T%t#Ps5aBdQ1&S0*mC7<_xR!m|{}{urUh4D4OgUkdf=wkC5~rrUVDwq%)>G z0@0{N=iS=XW)~hSz75jBP#RGc_hD5UE6hQl$Q-^=D3zQbI_=GbJH0p(9BzaePm#66 zVv#8q9DbCql$5v9`dQrT4x>JI&ql8?_)-N;S&XM?0<;6`WZM#BhjgqIf071QknH9W z`-q&Xe5|dCxocy>1`RKY$dDi_7Dje1YaUq(xyj+F{Nw=qe~Kl@QX+7DPo>L{;9`OP z$cJDszl4@OO*yW!NrO7G3#*UL9FSla{0$f{IF3MKa~+K4gNF=Cwk8HydvYcN_BF^F z>a4b&1w=|flYXe!a4ADlB?~SVwHys)BkNJGS9Fm;#;S>d9APU@o&-fGbcpdu6!BjO zo*=GZt!h=0yAU*k!oU9e|0tBaKruL{fCqpnxuUbl;sRNOhsBa5bYtX*WY|||%T*~c z?^RWZUzK_Wz3^aJQ6D|2;%_k}rg!+UD4E-dJBm6J|DHx^RR9}~tzr>uT4hSjkf}wY za+yp(zg}#kUoUnR<8AH7&y@J#eo(&-#1GM76{VT$x6YS%%5J0Aq_y1odt5>SKv0kn zfmNdy9-Bw;L_~3)V}`;H{QwppuLD4}wg{H*bBT(iXRsi34#+s)Sl8Lk&g4S|-h(^4k|mMv`N^ z4(3#yAiLjdkgk9HEc>hK%-jd@xp)&qlVYtL)N7?{leL?UZF{yP__}*sHH%N}ogf9> zyf26!vOXah)cxS?rb&+8WHZ6HukAq^;VrLQ{YGY4#OG2F%llSJ_NE3v7RR1IG$rQK z;7HX(A}3q7dL$7nuR{}FXMH3Esob?l1e3Oo@0ibsCtzc8WgD&!KC(8%QQ;61vS^}x zTy~!C5=7t?4V>&-`^dIHG8X(J^Bj|bK!)$2pmT%RZ&^PwD{3B=Ce7Osh$hWj9q)KDmd>TmDd$Elk9IGtf$M!NG(jOYYNMH5dOcAAq_0?u;T1L2X6Nf=Bx zY6kX6GvLQXK)6}3UvT!bpt!J&;YIuC;Zu^Q!XSqQVB*rO(^uJ?)R)H`6uLQI4krT_ zQZG*cj?_QfAflTPr~tKb>5zm|qV_1$fzmYR_n_%2|5)C1A&o(z6uF?IB(B*_llDOn zuD5VdppfZ(*pV{xQjjj$8HsRpN;RfJ{r{AQi_I z`96K^K`!-QbG|42jyNSDd!0YP)yoO+3Q711iQXAGiR~1VO^w4gC((_R1jFtH2(E=} zxoL}qQevD&hW8F1@75052S$eK_&id%A5oZ=Sx1xcXfReeOw~0pEe>MoZ6#Z{6dTW$ zEa*VR(V&R1bp_KLh~wR=4Ayb*B)g2P$d`pA>XtpI$8)3*ATtYDS02xi^YI_;4EivOIn{*aD-4_HO8v!|q(9!9{ap%rPU>-u6zul_0WNT|#d zO$tV-Em-dJY!Z6OAQOIWMcq@uLv-83!F1bIFl`jyB1^HmxBBeGD!6}&H{YP$A2_I; zZQ?lA_gbq5t>9pFZL1Y*J`J{a4uaOJ&HaP@Kw|$J(6|=kZm_w1(0bO|6D@AOSlxRa z{L*?ItUqt9|AJ3ff_h0tiw6g-R|nYA_Tko6X{L^%E+%bFDW~|GGbogR&9L6e!MmjW zM)Z|!pUQBHnSU4y!Ms@5+}>~P9Rxdj!RE8=oxK(ee#e^8%hj#J)_zc|mxCuI5CO+B zE_+HIZ5ctWxNB5Li;nSA)%$*HtF?Y0f$?;2=Y`etZ_is|Km;>>GuLoEu%v4C`igdI4#A zW))Y0Csz6^oGUz0eVeRRDgpR;blx`k5n75)B>RE6=k5wVT6Bh~KQXR33 zgr2mbZXSOIE(cf=d2b3agqIqNkZZ6N>eS?)|D!48pYvk;KhobyH|eBbnH!kO|JRnB z^Z!A8v3AG*e~+v2(98cnT%K>-asU4Xu5Y*N%{68Ji_N~^#{W0!wLAX*dt5iJ{{^fY zRqhghoxktKL-s>g^+Ha}Wd6k8=jt!J($~H3RNPB+yuWh@c^{u{ZngGdAkjz6eFlG? z=~BEf?mcqLfuF>Fno(Bg&?tkx?G=cGR|UN8DaRb}yATYHlf(AWJ(*foxf~S^DHT$C z+z*^x7(7;H0<=a{;LA~3(TR3{F6gvZq-2KLI5N|v^!rfHWzp1?z@K}y0A0?3mAGr# zJRL)#TWN0?K&}T*8dqvqw196@E?KDMGaj8hM5h#8qZb{VRybVc$7Ya1WW&PdE7Z5F z20V%e+Kj+k!^W^7naqlQsiI5b&uZM&?iW?*IwrwSFOs#~4R>?VE+yhE-A7S>5P_kVczOdf zaJNfN2mt6+MIJ?DJ;Ewq=8?3}2R{c`dxH03&m=FMG2d6!RA878^!&Mmc^+ZfSrd~2 z)2o!U7ykjcTS=DTW??-XV2A|yfntVSLVM}cO4|!2j#HBf<9OVFh3pRTa`2sh=b}9} zZ&#=We5Lx-fUtIjXqookYEk8)SC|dIB(`7{d5PH?&pB>O*%ID+VnOKz+JMBO%SHz9 zdsT2`VhLLx1qtlQDg|#}!dR}*x+y!jwxRe|YX>BTL<&1p*Mj18&f<$`Us6tYtraA7 z4`A@edsRWas;8d{rPB0Ha0)l+qC*wc=|j`S^*uX9@}5d5J~Kk-qGdv~o`w)dRNITx z7HC|TdrDc0#RSwB|0HASQLZs6qI+?G8ZIx^a)?2 zlg5+d9j&OHK^8JN8sGAk=`>O;W>$a79?~pG&SJam^9TOXv+ghvA|!SO!m`&|-FVTe zo>Ms;@$=o@%~O9}9H79a3-tzJ>dRx9YNUXh+K)zL=)_i^65kQ6#oBJyYsS&6fs z@7a|Ra0Sc_D3%PsSf(5GJ!YpH>S9g zXctdTa(2;vMFj6mV;nbiH5Exr+?OpHqhF@wao<(gpWMpA<_%<3y;5r>Ketw^%+zi`B(D{c0j|zk#}RkNRYkJ3xTBTlhUB?trWDW_ zKM4#&LM(d`UnpluA8D}pKqDy0R9HLQ+}eOWoFPMqCY83J!zcJWuLZOc?5!TOysbdY z>nXVr*=^aSHDvJ&YI26U8Q1shLI-xI{OFmju7M;TEWQ5Q7A}`y!=aL@+@Z=p)@)x4 zHBqQ%9B3uS1(=v(Jkcl-Z_xlDk-q5fkCt`suIy#>znRh?U#*Xu`+q!`f3SF`|NS0U zj{nE&vA_b5p3e5@0`ztbXRm(ka z#KRX*dA&w=0fSBim+(?QoyYqSj0(k13zD)T>Jk(XDFe9%~Nu+HWX^Hl6c){MiE!*`6MdR1|mN8F;Rz&AGW@ zbSfk)C<8D!f0tI1;c2GzxeETLLd{i2f;-nu63YuwiBORDEL^NNDjNr#!_LDGaeTis zcz!Y3xja36F$?c?C=!-s|Kll64*_tC<_ z*3$Xv!{N!s$-Dcz&-)*rcIKW&;&AzOWreTc1;Z(Ku~!9-okf)f$A$bgHBUemBlDTykfDH|{V6OZeDw25qc+206H@xt_hGeRA^eQ%3w1s!@Nb10n7*P1 zXYF2mf2X(e?tc7Y_x01Ymun|~pWiuOU+stcSKIxC7xjxz%Lhx(-iM2SA1$}Tx#ydE zi%aj4tEI)!>!tS}=bo-VU3~d!d+lL;`SpXjXNSYJXRCZgZ@yPggw$67k+6aqG2FNF z0zK#Xw#Apm!&pA8*_#>;y-JD|Iv^)5Ko&>vA9ah67)n+F{dYxb(&0scW7S4>*`Xpl zy}|}8%Muq(}9?sTL&ng8(Xa`Nld^1H_B*;+LBeEH@2a{Y4a{Fk-$^~1T-jh+54+pDji zEuN*9I}g^jetB10e%@Jp{(AeFda1Aor~XJetOsaz5D6G;H?_S^i)FH8N0 zd!5?)sC)imp*=qT^rHXq>T>P%*?4fa^mnnp_VzC4-jDAOx7tzf^5n(1|9&+7^z!BN zQw|z~p(d!02Z-cj>umT6GmcNLOq3@p%kJ$54p_*~7-6mRiT&BHV!zq$X$6D*ya>rA~x+Jp0aCQA)=Wy@WSMPp1d%3W-I=9!~xp?^T;`GDl!(jE*^5)LM z`QEP|_dnM6ddb4*!>8y&yO!?shU0MOYQ8%@y%oKj#0~pkNDT5#VVK*C0A#*^fPGDe z=BMSx?)=}Q7r)e=ziV7I8V}<3#_L}`)j$0G@9VX{k1zKQKb$wt*Mo{QSZU8^ZV@&&(3#04A#pG=abatx7cQ?}eXPB!jn1F`UVFOMNq&9swElAZ^7-J!+^a#n zE)J%RPiw!fJ^XF){@Lootw!VE`N!7Qr|9YZ#&4a&PZyo7({Inm3#1rEe<(Abp@R8x zAUkB_i87sfWvBX0um&5qQ3vkKj6avVulFxoYkz;e{OtKK+}wZl;p)TaW33<7wgx-% zuUfAjyxZP5>yO&e#|NWNhx-rSZ}oo{wCU+^{Pgc@3(w=Z;n~KEcdwp(cphDD{J!+C z|N8frmtTfI6P8}1&9@Zh{DOp^y{O%Sz3{XzR?u^|g6&UV#8)S^{%_IJUK)LhpS~F1 zUmYyB=E{ z4(H}JUcY>nZajOi_siDYMeA}F(QgX41)a~H_4mH8Ch~u!D`Wrp21?*t#Q!cp{ntDD z&$qw)_Mdufaj~&bzq9}R>923M>&-P~|JRr1A7tu3*YE5<-{tyx_MgEpzJSCe%*>}}@Q_NDEq%knrbArfJ zpz4cYw5#wCU*<2UB&qtT>Zn6b#Hug(lfOaTH;u!1Y7eZ!p14zJLa2aL7@L8+kp!7B zNmoKWDEXVe10I~sNiU+0r}cJw7(;@2^=>Z~vPXq(V$1g=-|82%W-)`w-W*dJYu9fS zn_>`C9}^Bq6kLT&#(ju7FYD||QP-1rU!nzuqX(;-#Rqr%-*>rmAmxUvilSpE1#8euKlEb3(y@3;nVAD} zMoiBP!$L0=o~?(2upNt5#j(GSCJ;C}*LPmLXh8^B>t$>E;LXd{-u~v!Havk`i*MF8 zw>LJopP3-cd=7*SRo%mMeVDf;hTI_mi{zB?7&3y>nWU9^hJD3SCPCPz%v(cF@=rHk z9UShpAp4Apm5ZWJ5e771!hgXX$Rz*BGeiKCJ~(<8FgJfiC!7s|4Z(LP`$v;_w>Rd# z&LZ0c<{R_rR?o$Z&U#k`8ND$ar4R^|nY2T3+UjGX=57%aEtU<4%0WN5EXg1n3=Gv# zmzc8=0xVa_at)S9c6YP?OyF6xE2f=v3nd}F(1*Hd@ftel!*`;S;IZiy!h+EMAMz|= z-G;C$WD_j&&`D1F@uw&aAjh=;sH`)gkmwOq^XNl-D3)Otn4V&aCV_|5dwRwaA6pU? zi*bK29?>*Y!7D@ZNW4|W4^^%jC>Jdld^pn!s*aw73cZbwo>bpm$^^^w!D*75=6ylW zp6F!72g!R?^;`CK9)1F*-~QO7vymO+TMEW-IS~;&gE9Z4N;|Eb_ZUUT!Dzx8si27M zgc8?sg9OB|%0EkdLTAY^o?%AvwMkR5UQ`pYKd+|m$L=s>VPo%dDBAQ$$|441NZfr& zctglhR%k@{0jX3O(gZ&UfXEjV8mUZ8lx;F1SnCLAytMds@XEY%+SPm1f)}e94 zF?HgbxPOuqHI|linzU*Na-pb=OCM$5jCB<+Rn4xl_7OcK zE=;XDvR6&crI~l|b+g%!1Qkv0J;{Gt$B=r)*kGp-`GPLC(A4Pz;YG81WjB(rdy>b5iL2jk4#N1!1Z4FrnfTNYE}&fh7gB`(p$lbvgwcRP#rj=Vl*DoVfW1 zXFZrylV5x|c~C^jJ%)ucB}I7MX5KfRQS2GSO&=XwH=4mwwOR#gyB{Hj@}-gS=zzA6 zaKpmPQi&CyNXKohgHA=0`jMOsIU=ZP1?*i&U1RsDHZ*jtc8qOv&%adGCX6Z;5b3QPy7Y=NC_}&TmDKcf zWYOy5W^Mu^+->%v6JA5kSe}0fE^&_waNH5y;6>BA8<;h&3aU)aGHHyi;tw9$DkOU6 zH7IrC!3$^kkE?ON(;Igq>aA3^T5;Cq-+QqAWE7?D7z=iFYf$wF#3ghNl78>%k@$`( zUXuvP@+v@mO0iH7Z5Xi9l(HnH6*j;k4vyU{yehY>eRzuFcpMcqY9d!r*414>3q+|7 zkU(JZBXho5rCtzbGwnvGA8UJP76#ol|wLuy~F-p)*BcHv8BDEu$*^qM1C!dds}cn5|jKNlHMn zY_QAc6maMpJ?Hf2p8ezMRYNE@UI zMsxL{*%BATII3i4dAcLcRLW1PvT%*$bmU#%i%PM0g!tmf76oYG0OT4o03b}6p;A64O)N7j z<`Tf!Xta_(=yyBrck_1T*VNCd_N3x9$DClPVfCzLRL8Pc#f}zSLO%`hye_(h#!zu9 z^)bl(&@5FRe$!z)8TSG5O0B6H;583s*mv%SWNhl1f(a4{GE_*M0*AXBpgc2#XTNp8 z1$`;{+t#ip!Rq#gert1|R5EZ+s%ut)n#BQGg$aPLaEMS<1$Po~ruio@MN8ofHCq(H z?oF%2=#sFj$}DO&&zeJD*c&&|2^qR(@&AhZ^9!!T2||OMzCU8$`;MEuh4$%fSAu#D zB&`+2Wwb$go!wFr!^L=?Xub-xBz*l1=3keTPDcr6jKOaPY8#8qX6cu#?Ik}1JcMef zF43872NMduOWK=VEJY{xvM!ln^=JU#1O2oeCKc#v-_-rebg`j4N;vnp&KcI+T(C-V ziD*eNcENdg6@)#=DS8#OL9_`@df@Z;2$ORv7gZWr8pNYCNG`#tb8uCiJmC$oJ;j7^ zb4tdNh7SJSZ&dC*Dj50Gk8-#_m2NU4k0FUN*5Q&VoqN+1w(b@tU>WD^sfMQSsPgJ8 z*+57s?9g(loRPu;SG`#?vo&wd$82=*( zrB2dyR3)I~V2Y6B_Da!^;T5FGJVTNs8pR)Iy%201J*HxvGTkxtPPeq#LE*;_Fba(k zmg7&cu)TBe=IPGi_C~=PcsPd6b<1by1)Jh2Re)z;G$(Bb>j?U(;+M$J^pn1^0n4FC z9TmEpq($Z`Q!+{tXrYwhf}C+5B2T)rxA}W(qhN_fW)zgvn>=IyaC&I0-zq(y*4@*c zy|v8^@saB5+JIL{h)38n<`m9@Hs=y|_jVvBxN1-k13G*Ha&~dR>g;>F)T{iC(K;I? z2old)2R2Lo#HTU@Y)d1^QoS1v!}HXx^V-xkTB&`z%BrfT`gsa8T|PD=KiS#_0|4o? zQObjFPQ%nJhnbUP+_QwtaYBtqCfBxQZhHjQE06MLL+_R42pG2K>P%EWx;(CdnjFcV zRX11l@L8WZ*l{|>8uGGcvnuiHE?gdT4_bTMt6OhcdwV;39JscPO)`MR&jDxy-U}kf zRfM8bW^j`o{%}+vGY4u_`F4(KA-=B%S zCGu!?QXasS@|9WpZG4)AV}mJXteC0@nB_;ns=|R06DTd%)!dzA)f3JUNWN4Y!OlJ6 zopygI*{F@Dat4kvSw58=AW*6y1eoI6Cfl&Y(l$@a4-}iN-eX5t;j&4l?_I$Vhu9^4 za22RLds1Bv&Vl_-+>5PcHS{M_M2?h^e7&^dO4W^vyViU%L$}mkzSXn@J_ZlDF#sM2 zYi3smk4P=f(WxtaEK4PBuJA+Ge2Gt5(v+yZ;AX%*@Csqtd`e3$1VR1VjI~JxH0Y9w zr|htvm~jLi7YEJ1W*L0HJfkXxKe3#NR>1#-dk*C)6g1;ciwyHs!ZWvez(CoT4yQb_ z48L$?SNBPt)fY5p6HLC+wwpm9+$|n~jcEmbU`hc#G5kAMEnsatm{@f%2A5)=>G@V7 z=wvZ7U-qXJ%3BGwwOKU-ZC-+s1~`?H&%_1buveRHb-6V_$dhM-6yoe7G48|ZJ1XY6 z{3rl4J#?G{Op=)0q$BuJ0aB!M&pmUY+G6DvoX=^&v z31R6v0wvSOGfzxA!ih0zqYZa~6Zh3mc%&TNlw>WP;<$*vv$xUO3)Wu4j)=PxCTM=5 zb^LQcngF6`z_pm-3-UdO)-i)+lUGPVyHYh{%#<|*@DGhKT5j*Q%OrnlLRD5+R1P}5 zB#o5ON$f2AEq>kA0{yC&iT_MHQ9m5U$-hPX=fZ=#{2$-t%8CD6SbX?!=`R2Kpa1%H zyWU)r_kUw?exZ?x|6G{Ai~sx{*Ny9c23om$qmW9bk1XpbN%I*GL*}1JMu@$68MV)n z}`39tlSMen2@o z)ii<0y&vrVx&68Ci8_r27bvz*4D;frg{xJno>A0)Xv4XST80UYdb1j_x!XrNOQY zcMVqiiCE1c_8SO!Qv4Kfeov(!6)bW`{~UFq0m-2~?w_j$zZIWEovV&`NqW}NSeZ5~ z>=8>Wd2x5pD1nd<;~-TKeji1H6o&{$Z;*;Vlr?Y=f?h5e=8k!Tb_D2EN5d|(+0H5)b;4&G$M_lQShk%mC-Wc~YGmwnDK=8%dJT?Fx#Ztw3 zGVb-Rs=;2Q4Vx7If|!$n0;)@GqNtuXBT|M)OvCLV`o^R{_I&WYt4eqoqIyeU2u`V! zV9!V&e4A6xfZ9hnLUc1i_;*D!y|^F2B(P6d-+}lNkTzvfI}FQ+dXrWs8WHx1`6T1M zJBiJ%pbE(d5JsA|X%e&m9SAHL57^ptp+VR&r{i$g&6yb@mDt8&R|sHq2^RL)2}e80 z07f5d0ns+oQ9B3V4&(%OlpKB_2w$kDdu#}@2N~9jB zs+7r!M*~VjqCQ@zc&u@0x6P5L>8Ef(*^>^k!bh%E2$X?j?m(#VlAPcV9-z6-SCCU$ zVaKolFMY4>ba9Tl*CY5psSZNsz zFsCa_N_oAAFb2c0MRJ?`2tI;$jvX&p`VX3zT?p>(fGgIMfD{Hz*Q-=o?pSlzynHfE zLoaNTRRM-fN&C`xqaaq5dJft**q^e+O%`yQTHWlTNFq0NJlwImsct%37i6t z8^J<|&P^70{8_msN(M%{CbBFJ>Vf`YL7UmOL*!ZMYh zHqshGTd+O23ngWV*2XaNInQcfOaRW%xZgOiW|A9g_hP~7bPZ|D46Z0Q`dAFg=Y(ER zWh~*}QmJalhiRixt4$rCnkw#RfHgTh6UWZRqxPQ`PqdO-C#hgPn=ruKj<*wU;7Xh- zAF(e028IF1*4e1W{cdz3Se&jixa%MScPSg+>eKO!%MHo}EN9dXUKxaP%BUCA=%sJ> z4bkl-ujJlMko_D5XjhS3WzP8Qcsmw~qR6;%l4Q`85tTPubrTdKK}YQXYbF?)(-6#= z%AK7Lm8sp$sM$@OlXBM<64f>Ryeh;rv;q&5G7a+-J?dhH>y~)ldvRNZYoQJ}XFh zFhK^Of@d^4J8uttUEmpSwW)}9APygrH*o$b3E?>;!Jg-=b1PYn?l@}nzP=$L+lvN* zaRm_+4$KssA(egvCGM!3N6G%sVXq}^OZS5C{V8=-SGOB8Wj$*r?Sdx5_Molt&PaMt zU=~AGN(ZS=`liQ(dRaf5er`MkA0mwcXtk$QUwF1Xg2M6wUr@dWZlVVfcKB9+j;S;8 zF-)nE$poP7xr_lk^2SEEbMX?cc@_#F2ZZ{s6-J6F?ku<;JY0ISP^-PE)oPFKs`;z$aJBUwN8LYaAy_%X)Q0b+n) zpp8aSY70>@sJIz91j07*5-;OkoxqZ_7Eu`)3`sS~(S)^X`QvC`ikt21)~?-IM2&9oX zw@2CgeeQ-K#af&$XvCCXY>@;4;}8oQKv1ZXIeCEzydIt8f57S z%nCGXOc~k+5F^)V$j@(g%QIUr?L{>j;Hc5l*ok^b7cbmJoRwO z;yfm=7W{lW8J(edt&LVXV|7G#)|t3>w%>86Gf0?{4jQvDGKA`I$euDc-*Pu4WOC<# z8T2B_C1d%;OEmUIfB7k199^9ES;JOB#ragxg7B<`c%03I~4__3%LtOhDs%d&yWPU@Fpl0s(* z59>RN2`Q_2ae@p4ph2?B(-;+21;$!f3NA7-0qi6Sl+WF_2np51EN`$s*qX8mM6qX7 zql7Mw3yWtZzK6clOEd9bxwj#(ov~r*C>k`SdHlZ7If&7aCHx2@! z9ThnzR;rGY&HbHy^v)>q{Aknp2;{!kVa1zM4}N{fm-#xSO=Z+hLCIRg-K)PDC1T~) z?f1CiMRJeI-jCb^B@Lhl(yorTvhgI+_n@r3JMLmdrd}-mLzmwB+I`$2{-aTA+{J%< zk1HqsV`*t=xwdc@|M924zTK`j*OdLgRG(jT<3Ab;i+AxK-{aDe7U%D~5NEm%h6Ssd z*NGL7F*+Y~N0WoSINty^QSyjX3yWUvCzmSdHmly#5?n@os#f8N ziqp*sf3y&}FK8)x#VseJnQH`*h98)S)Y{8Bb)~G>#WXy*W71tJY?;ud=7#gToWV+D z=RgB>6K2?pN7@xQkpALtfBft?0bkF7M})3p{Fa-U1(Of0aEmSt9*QuB{jp{3#n6ym zGgxg4Y~9BnxYo&dR9qA^jOo4LFRCKsljR|=6Y<_4j;)v^8q(QS?i&r}jAJ%?m;7{A zg0*qK%B}ln0!A|Ne7*4is!mty1qHsLobh@1agX#eYeF{Lk3WgmmllG*1$A-W&@0ki z*_ZWf*1Tt0u|AAX<9=QWF?wnzfYG3bFar5GWHfPB*h*_6UxQ3BxgX@FGqG&LGUK`& zZHh_O3*1<|fW~4zV4jyvQkCE0(OI!Dr^wUXMSZT2&Eb;~HEoFJ^+DEp8^I}$iznF^ z1|{V7tT*b-dnWyRUbhfUlIhh>O!b*0dI3^8M6^WO)SIEIWz?C5Bt_dPuyFF=>OEQV zVONBpi0DXQOk-=|zkLbP^)5U?+nc7ho^Lb}|AhLci;* z!Gg(MhV-|@39up+E5TdPZa3%VG+Au^_*ruGFre$VnMfSjhU5+u!-K!fQOBsIO1+_$ zMy@CI0lq{<%k?O;_ouJ~_H&i0^7`IAOj6CDdLG7o&Pw${C?MysUCn?prxj(uW;NK@Dg=x@YgNmKM| zp+Lj{UGdci8n)uqr~dLN)c^tn!YkCFmbt;C3^gyJkE3XaRv`iVxP$gOO#0QWV)}TT z3JYzc6CT_ojtcvm&o;LYAora3>!7vwq9AKQDmaOaO7E8~_ab}IVIIzMYB+z4M@6Mj z2B_Yt-u@F@M*l}n^A*&}VxHafYiR{;tp97&7VEV;{onVva`b->8}+5-#XJ4qpZ@xG zyWU(=_W#2CQbzy3xLCi_|9y|^#`#~w@qYeZuri>uD$@_8!zv@A8Frrvu1EhqSASg& z1xI8aeX))ao#2z+MKn>_crOTK)_WMknPA$gi#o}WjL(9Zga1&?cr&=_oY@$a zQIhm@+8N1UVPz>)0pL(H(-{s=FOC|=z-FQfiLLCTjs)lGPwa$-SC(&Ab>2xiqG9I@;s95&nmGEfDt2%6^pl<19sV7kqaKM(#O*;< zLy&!x^=I;VCP-c~yo5wW{kAcPWBW9&=Ni*cn)vav?)|!{XGJZ^%1_n|2AHebGizBJ zrHU``%=CQY74fNfdptUM2zheR=ixL4U+*JaPf+~eOULDaFXYr&tCw#+X_}H4KUBMb z-G#x{zR3fMhy5;3Cu;>H7WxAos&!Q8#30vHDnfh_LR5wP;8MERPb%TKi&LjxCm?Av z7bdliS~pu}eNtDVi&2!0#8-i{>c?gQyrnMxvlDe;;FbF&E!&B0b6iQ~Ts&e#4 zX1dUK6Q~d9Y2Bms!1w3h5(T4c)Dq>qIB=63scV)kz=3LeSr&>)*kQaDJPKbi8 z*$653KO{+zG>D;SIS>F0Ix+nhpvN)w+C9&xFN>gA4vA`+?`ae<*;C{&jpB<2DQh?? z7oQxr9#G&UgNRqxEVRH2RW+iCjhSvT9;InWhvvHWZyniSEe~-&A z|2OIj50{qj^1uH1uWz^O%{6)d*Xv;Fu=oGs1MvU5lmEZ{b@TkMbmmU-5mFWz?mMI1 z%=nA5d-J%N(WblSxG7}IXbqXc59qhn+Vh>AU-X+8t`!a{TJTmSg9^FH5NT7%aE2l` zS$Q+e>BMc6ZtTnQw&|>icG@<5n}UAc7VFH#UPw~ONAVM8!>{K(#)OXn0e6e{D)V0AHJxnNw!s;qX!Rw5Q zF=P|mLFZzzQNtv~2qAZ!RZn^el=U)RN&;i&f;xBrWfI!4067-cr!rZR8-g9XXMSbU zTEcZCw_8<@j@Z%TrWtS9_r6YStKWw^MaKz?HA0oty=}=d9J(ccVGACwt|b<2qUXqi z;E@Z@_oA-D%5SFUY^6U9%d$g}PkwuMP3z{2D_ad1}LTi!ay z{R-7~RV%9Flpv0}Gcu_OAQX7!wXS)l;qBGUiIC|ZBI>N%)ib6GQZK8Btqj^((SG&_ zDbW>RImUnHh94JifeUtAUnZ(A4`NBLixfm}J*clH<{fn7v=fph#hZvjje97BvosqXZgiCRG-JJCv|A6-^>ko>hD1gL7F zsc&xRgmG5`!E>mv(MfZLu5LMDYaDjOFi%_8S0o~nSFAYO`R>nGXmpC+@$6f%hE9~B z8Izsu+ZobrqYdp4Z9CSGMH=RyG-bwD5u9@5m}XQBT8-gLMm;G%+s#Jogq*UFcNKJv zIj|^QfPcuh3xZcoWhzN~3ESjMAybo-#X7CVRRsx3MWuMxQ}XBDn4Edzy5u{xGsm@i zP+Lc|b!vK-2=m7Gd^Hg|km7_A|4Zb`MBrwQG;^w8{4>%Xstyf*xiQd3I+5+MhhB9~3&YLaf;>=f`#FK|4dq41X(S6qX_E4;+^#GKVpZ8C zb1@{B2cw)>I;^I#X|jMZ*^4y%s$Ux>HLd(mr_Z~{Oj!(}fh}vjA$LiP+H1tUP=dqm$UEI2V zUrB#7Uesp;v00`pk{lw0#UZqbaz==2FgBO2(8@NdZp2m^y27J#p^}YS^vqTt2 z_fnD&yf&#XNCg9Y4fxH9j{j&K+#h*m>_5oZd|fB7TiAaV>x*~xpYL(y*nbx5_4)dP zJNwU{{`z*i-dt1cKl8PDxBlPa;^LkC=et}txBs{y*{rP442B$?0d9txfurQ5CChJu ziGY9Ci=ik|dl+|5BPS}`YmwPUET3eM;lVQ~;bZI!QZDeKI!%&O`YSvSKPBi{g(a56 zpU2A45g0iX)v$cGiI;=>Qg{T99@4aP83s)t@QH8U+D#~sRu3hl93=0fKBjV%Aw^)I zN=^!8Qz5$vq0&?_?_9w8tartV8OR0?6;rKJLgHPit_f(m`(eK;#2Ur3dBiYdtx=)_ zLJ>pmB*?UO;7LYK^Y`tU8T5Z_!uOiI8?_$#=?!{vp>)g>K6zlwr>+9IcycF}l2L0; zCvo{D zmEus@0pwjPZ<91bV(0HeyJ6lfC8QE1Uh>)tC{SgLPEf4UCVI1 zsCWI=PBA70r3o)8Bacm6SfwZ`r*6Xb#P}I`q=5FJ8*lC}d}nM;xrOfvGV)VZrdPFG ztcYT7H9UjXvlqfctK^d>kj{edidib+nYm`F;yD50x?u{DMbj~_nMYS{MfV2u$LmHdEmC2U~k;N zP#&|Io-<8+Hl<#^zF1oI9b$*78X7Ez-mPkRVA(U!K z-o8QD!zvwU)0&VrQ7X6c@+M}Xb=#DQ7cZRv0Y2z>u!uJKbILM9Fgk$WGoU-rD1saf~*AgXaX9AeOAp3 z?SsQaNJ+RVVdpIBW~sq#rtR*7AXuz5JP5;w@1)T1jNKGo8%D%{sXWMEWzZAWij%RN z;oF%_P}(X*K&6 z*o4Jh^WrflMpA*GNR}4*gt$k2vmJsXlNA&}lDYvCG-02;wU`MdBH>}9L||1_9a&Hz zL&&t6Wc#Q+7 zw0La2AVgwXWAVnT-OW9CVZzqE(W&8*T`35?L&5axtqZ5#n%e2*SKdszUsD^$T{VkB z9;pw^qUbx>Rnb7)++ICAcn-i`_X6@Zrz)S5K|p!fs`;rCch>pM2K-r1Tf&cQGAn;7 zBzW6v@|?xui7mWEji#C*W*V~0pi1Fstf02_6VeTl>I|I#a8*?%p+8zPeRqA2%eDXh z+vNYg%m4FTt{nUCgZkoP<1YXApa1%HyWU)r_y7F-Qp1h^TWBmS-PwP?$MyB&|1Qww zE1ecSHz(hl(}6rGB}rgi?H{h~ukUT{VukemgVh5_rFxV2JU7x%aCB*lMAhysq7G+> zHXM%o>oT>*hLD_XD>vTue6fZWZ1;VSb^GQamSFS%;k;9Ja$J{h92m)2O7?ojgCzTn z3a`n0#KMlJ+3qRBCnzw&VFcN#F{!(oUELSbI7{T^bR**oCPr+;<9ccCUr+b@Tp~p^ z^Gco3yVH7Ad3B!j!qE$KuEr`l=v)ndDL+ry6w_qTwgd%++@RGCctU54mTK1mxFPV4 z-qwEQ@+S+wlXuYGWg7(*1VvNwrNJ<|h?8-;kF9Ar>j_$MRnOOD`cd?LG;IjiZ*{Xx zGaFm^^mbp*l0F3iOEv;V+UvJ``Q-zRJ6y$V;jN`6$f#E~S9gDj3Bat}SsT*!XS-(~ z>N)V6Qo7~6-)yC3*I&NXwHC<#I?aWd{zMZe4uB(Te3p7aMy* zC!q)I*?Ix9Z+jw8SzjKr;Pv#~MA{QU*V5doi3XDN@}zbD13|d&Lpb@83QpKgE&;|f z!85;hn&p)RAt<0;g&Ju-{-E%541?OoB<{y9-4bWsDcGFolo&~$p;fA^2^vIpceDR& z7OGLbR-BiIz6w~vTvlvBur3|su>a$D1-g!5afLv02E zSDv<#ONCsd+r?(wnZn0DEkmn~1`9;_h*n5tt zzQFr1PA3B~V@&a-WI#)bZzL0=mLY3pPpTv16fLHR@&8p?LaIMR2P`DB5o2wlm2dQ@ohuiyyyO3wTwIS%z&R%O$#H%TLio`z1 zbJqBhsOYbWGV8#E_IlFO1=Z}bgfoO}VhTpHP<)f;#ze}fNQ_qQVC&gR2&vZ#06+6eXsNmE%i|zL0u7`R7h)7&#p7 zaro9>;$cGNrAaAJngomcK_OsIzDqh3K8xuoQLf!>V`s@Y5Z_>KlII5pyEG?R7Z~ft z2GPk$1emFSul*9mscECr6|2maSA2^(3wvmZooIxdiCq-2=3qHIN?&!dKYn)7DG*Sc z0QY~4pFVxMQBY2lx>i&_2Eva8tHkUDN)40qqT}L8fz6K4D=pP4s)?!~bJ540lOk`Z zAiH%xKG&zV?pQn!v|YzK2fE#K+zyAs@Tyo-?g?zgd1ptpk0&R`-0|3LL5}%;Ft6V_ zc18x-KG%}-?6{nsqLXq^``B*dztF4d&23P~8fYX(0k|wvbWrU;4LinV1{QL;Ud3O! z%i+q~>DV{zb{wkpAjc*7<{RGnCTG(-uTR=I=F06Y;4pU|mU74D=2W7X{!AhzxGa~@ zYoE%&<7tCH&N$kvV|wgvaCq>v@{ryU^hj?P%hP7F4;nrF^4iV|@v6jMzw=F2S)<)w zbYc)eHiFP7V{8W(RSHYsG$FL{EwJ%cX8W<7D?s?LyoIK^l&vc504CcpRD)(5Gj|Xv z!~!D&z8DNne9XE92GiN6a0CJXn?SCsmmYR-DCsK#3q?F73ZS1Z@?G7$(JJaN`v4m# zUf*PZ0&CddwBNi0XEzc9!0KxL5lU>+X!pfK&AOi0?YQnI*~CopR8B{+5b5D~k0|*z zlqeh0E>68Ca$csYg-N2sFiF#jENlp5H#i@UP_W36=N++6*T~GL<5Fq<)*nHVCE|us z%YutdinB?Zb917D;TV!=RAo`tJh?EPAWnUc^b_}VP@0g2CS{(;Ro_ff++d>`jMaweI9fAh3s7{4wFl&*PC3DfQQbj%H>OaHc4-_8g#f! zpY*!uIwzz~us_HgOrm+8fNvwiG!b7kU7_~AOwd;$kU>RFY>KRJ&36;#K(QW}_syC; z>bHlKjZScjtYmJ^R81Nqoj2&Hc3iy_1auEt@UMWhCqk-}%T$f5Xd&IqpjBC=!eQ^K z;^fC-kaZGDO@l3`Z0c`div>d;_hO2Nn?&1_{z(twWg#|8>xVE7f-K=vaY$cMi7?ihnBwtNQ`Pz>v-Xfh3QT-=4SjS^;VUe&Rs-iNS&?#7HlJjj89h;?f>3 zMcb~RI)W1*HUt(Fj4Kt61S#scTfn~o_!4D1mMSIRxOkSS=ws9|E3?;HJ!l07dz;Um zwf4kriF~p|S?AmAdJ}0^rpzkD4RFxa?W#Cezl*nOtXPi#?&ggi)BVwAnhU+ zzV_R<93|~phzuYCAM)LSC3J`ewu%7Sh@I0@am=Jr1thas#zMBm3CtsPP_^KX`F?416}^$&;^uJD}t5`^w}^0T7mn-Ymv=jc8$&-aF0dv&adQyinlba@zj@f#*X`pL@!xm(zrWL!7yrGyR9jlSi~s)9U*B%mn`=t`?}horO#Jua(p~=V z?{eu#-HmV*g505lblc;8GyTwuM^QHW_w)0xgO0>;|8ze*iIBsyL&7`5tHCI_ZDCat zKn#w=Al^?;7fwTyyulU}yc@Ew{GrA=$QT_b^E{-f);w_;#1UjXFn5R1N&GRmPwcM- zQn8Spg^k4}AtzDe+WCDvfN6p6lJ4!g`qq7n-K%@u_!Qh$3unLGhVi*#u_cTy>MKWK<)l_w zKK{J4aIN5_zw|@)kN9Dqa)qa|?mma&#{KWfvF-=ljXQhVK$uKhUWc<595Y1MEa zq$$H&gBoZQ4O5u{92D3d#^SZ`1u(^$Aj z4&Z}6_M?#onXJ0zBnH6b<6>XLpCX)$15W>-3oSW3_&N>F$0;Ue9QWf7$!RFIod*>i%z1rMA*q7la6ld`!?gj^~R|moF-sX$d zz1P7nt=EL{bQ?a~KHSl zRWvRW{w!l&m^DVZ4O;mMv}OdriDn6pW5osKwXd(bsw}<_$nhXc0;O2p{HmdZ83K|HXux}idh40(U+@Rhpqjf_@o>>DTy^2j#;#Z8jGRjYH2c1FuiREL=d~eth{t~(~Gwf zJdqvoHRTxyOK_^)%ak=B-)gC?E?GxoTZZ3YO@g>TdPuZbrJctwsu(gvr%|zFX|F>o zDj|z2ib65E>`8NQB;U$rIZz{zuH0xN%n7q$2d5LYGpP|L?uIqO0v4@8>VB7CWFstS zC@QPBt>hLg_oc$73~topC~$A4g<9Q|CC7ikor@ShTz`7R1L9`aW53%tRL9ct7I#)5UA(AmH3M)Otg%K8rkr5a*+svQ|XHqq1QV2XH9uy0Infp;} z@pMk9>RMFsIFP}2vvewpB*Gry>f?PFDttUyiJ5XHJ^SVP7ZoQNxri=AtRI&5OPQ=cLZ#>RFgt58cJwv+7)Y z))7KV!L3VCH|-+Sx_5D=ZzAc8F(M3zUras$>e!~p)<;1%xfIYB+`)P9E@@-=1m(>f z#8k9dbz8bP8t4^Lb)=|^@_#JILf0PinS)~Qt508NP?@=Fb|Z+>A}> zYbLLjv1UD&S_y^S{BYo>E^fII33fDsxAe0_B_ehZcQA<1_2;Kxb$de)%#Wit;V5`4 zaLHX$BOuCEMMeU#h)D!SJ0au(7^cmkfxwU*cLu$DL*|?#4mLXnJB5QDipyQ%iGet1 ziwhI;JXmZ~PI3o%{IaMDw`h|(l;v%(?`rez4I-|mMOu4wD|&-v+HfPHIX|9xS)%Wi z^S-*RKasv1z~Rw4Wtls@ev&~4)ED&J34v5VEz2NwH4j#8#Lvg+<`--8mghY2`V=bw z&!I*A^L|k0E2?7|WL~Z@ogxdhhbkwRy3<%@cYcOmt)Ls&S*-Y=daEHgD8W<68;^te znkf+Q1cXBbYt%JW1DkA2;!8bn@hzkM;#;{Xc)h`LXkJtvEa}YTQj5~QVu%jX5fSMW{Wov<(G#$b{?ZF^VemT_dZCAg$?ykG* R?)rDX{(qV1ADIC50|3t^@|FMq literal 0 HcmV?d00001 diff --git a/packages/docs/public/commerce-example/07-account-erasure-interoperable-2/attempt-1.txt b/packages/docs/public/commerce-example/07-account-erasure-interoperable-2/attempt-1.txt new file mode 100644 index 000000000..ca321e51c --- /dev/null +++ b/packages/docs/public/commerce-example/07-account-erasure-interoperable-2/attempt-1.txt @@ -0,0 +1,20 @@ +{ + "startedAt": "2026-09-08T19:45:56.568Z", + "commands": [ + { + "command": "npm ci --ignore-scripts --no-audit --no-fund", + "exitCode": 0, + "output": "\nadded 10 packages in 360ms\n" + }, + { + "command": "npm test", + "exitCode": 0, + "output": "\n> openiap-commerce-protocol-example@0.0.0 test\n> bun verify.mjs && bun test composition/app-backend.test.mjs composition/receiver.test.mjs\n\nCommerce Protocol Example: 159 checks passed. No store or production service contacted.\nbun test v1.3.13 (bf2e2cec)\n\ncomposition/app-backend.test.mjs:\n(pass) account deletion waits for in-flight fulfillment and retries provider erasure after app restart [80.90ms]\n\ncomposition/receiver.test.mjs:\n(pass) the original SQLite and memory composition remains compatible with the receiver [61.77ms]\n(pass) one inbox scopes event IDs to authenticated emitters, survives upgrade, and discards erased users [5.94ms]\n\n 3 pass\n 0 fail\n 20 expect() calls\nRan 3 tests across 2 files. [222.00ms]\n" + }, + { + "command": "npm run test:tooling", + "exitCode": 0, + "output": "\n> openiap-commerce-protocol-example@0.0.0 test:tooling\n> bun test checkpoint-tools.test.mjs\n\nbun test v1.3.13 (bf2e2cec)\n\ncheckpoint-tools.test.mjs:\n(pass) archive extraction excludes macOS metadata and preserves source hashes [14.42ms]\n(pass) patches preserve path-like source text across additions, changes, and deletions [68.94ms]\n(pass) failed attempts get new numbers and private paths are redacted [1.08ms]\n(pass) unfinished captures do not hide completed records [1.75ms]\n(pass) checkpoint replay follows predecessors instead of directory name order [2.51ms]\n\n 5 pass\n 0 fail\nRan 5 tests across 1 file. [105.00ms]\n" + } + ] +} diff --git a/packages/docs/public/commerce-example/07-account-erasure-interoperable-2/changes.patch b/packages/docs/public/commerce-example/07-account-erasure-interoperable-2/changes.patch new file mode 100644 index 000000000..db8335216 --- /dev/null +++ b/packages/docs/public/commerce-example/07-account-erasure-interoperable-2/changes.patch @@ -0,0 +1,150 @@ +diff --git a/checkpoint-tools.mjs b/checkpoint-tools.mjs +index 112a019..61adf66 100644 +--- a/checkpoint-tools.mjs ++++ b/checkpoint-tools.mjs +@@ -153,7 +153,7 @@ export function createPatch(before, after) { + } + } + export function readRecords(directory) { +- return readdirSync(directory) ++ const records = readdirSync(directory) + .filter( + (name) => + /^\d\d-[\w-]+$/.test(name) && +@@ -163,4 +163,25 @@ export function readRecords(directory) { + .map((name) => + JSON.parse(readFileSync(join(directory, name, "run.json"), "utf8")), + ); ++ const byId = new Map(records.map((record) => [record.id, record])); ++ const ordered = [], ++ visiting = new Set(), ++ visited = new Set(); ++ function visit(record) { ++ if (visited.has(record.id)) return; ++ assert(!visiting.has(record.id), `Checkpoint cycle: ${record.id}`); ++ visiting.add(record.id); ++ if (record.previous) { ++ assert( ++ byId.has(record.previous), ++ `Missing predecessor: ${record.previous}`, ++ ); ++ visit(byId.get(record.previous)); ++ } ++ visiting.delete(record.id); ++ visited.add(record.id); ++ ordered.push(record); ++ } ++ records.forEach(visit); ++ return ordered; + } +diff --git a/checkpoint-tools.test.mjs b/checkpoint-tools.test.mjs +index e807fae..a45e857 100644 +--- a/checkpoint-tools.test.mjs ++++ b/checkpoint-tools.test.mjs +@@ -108,3 +108,29 @@ test("unfinished captures do not hide completed records", () => { + rmSync(temp, { recursive: true, force: true }); + } + }); ++ ++test("checkpoint replay follows predecessors instead of directory name order", () => { ++ const temp = mkdtempSync(join(tmpdir(), "commerce-capture-test-")); ++ const records = [ ++ { id: "07-reviewed", previous: "01-start" }, ++ { id: "07-interoperable", previous: "07-reviewed" }, ++ { id: "01-start" }, ++ ]; ++ try { ++ for (const record of records) { ++ mkdirSync(join(temp, record.id)); ++ writeFileSync(join(temp, record.id, "run.json"), JSON.stringify(record)); ++ } ++ assert.deepEqual( ++ readRecords(temp).map((record) => record.id), ++ ["01-start", "07-reviewed", "07-interoperable"], ++ ); ++ writeFileSync( ++ join(temp, "01-start/run.json"), ++ JSON.stringify({ id: "01-start", previous: "07-interoperable" }), ++ ); ++ assert.throws(() => readRecords(temp), /Checkpoint cycle/); ++ } finally { ++ rmSync(temp, { recursive: true, force: true }); ++ } ++}); +diff --git a/checkpoint.json b/checkpoint.json +index 4860ddb..e139d74 100644 +--- a/checkpoint.json ++++ b/checkpoint.json +@@ -1,8 +1,8 @@ + { + "step": 7, +- "id": "07-account-erasure-interoperable", ++ "id": "07-account-erasure-interoperable-2", + "title": "Delete the account", + "built": "Account erasure with shared receiver and retry coordination", + "result": "The account identity is removed; retries and restart cannot restore it.", +- "previous": "07-account-erasure-reviewed" ++ "previous": "07-account-erasure-interoperable" + } +diff --git a/composition/receiver.test.mjs b/composition/receiver.test.mjs +index 24e83b4..165e83e 100644 +--- a/composition/receiver.test.mjs ++++ b/composition/receiver.test.mjs +@@ -5,6 +5,12 @@ import { tmpdir } from "node:os"; + import { join } from "node:path"; + import { WEBHOOK, COMMERCE_EVENT_VERSION } from "openiap-commerce-protocol"; + import { createReceiver, sign } from "../webhooks.mjs"; ++import { runComposition } from "./run.mjs"; ++ ++test("the original SQLite and memory composition remains compatible with the receiver", async () => { ++ const report = await runComposition(); ++ expect(report.checks.length).toBeGreaterThan(0); ++}); + + test("one inbox scopes event IDs to authenticated emitters, survives upgrade, and discards erased users", async () => { + const directory = mkdtempSync(join(tmpdir(), "commerce-receiver-")); +diff --git a/composition/run.mjs b/composition/run.mjs +index 7fceee5..2f88cb2 100644 +--- a/composition/run.mjs ++++ b/composition/run.mjs +@@ -3,7 +3,6 @@ import { createHash, randomBytes, randomUUID } from "node:crypto"; + import { mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs"; + import { tmpdir } from "node:os"; + import { join, resolve } from "node:path"; +-import { Database } from "bun:sqlite"; + import { WEBHOOK, HTTP_BINDING } from "openiap-commerce-protocol"; + import { createProvider, FIXTURE, CREDENTIALS } from "../provider.mjs"; + import { createReceiver, deliver, sign } from "../webhooks.mjs"; +@@ -381,21 +380,18 @@ export async function runComposition() { + ).status, + 400, + ); +- const inspector = new Database(provider.inboxPath, { readonly: true }); +- try { +- const stored = JSON.parse( +- inspector +- .query("SELECT body FROM inbox WHERE event_id = ?") +- .get(extension.eventId).body, ++ const stored = provider.receiver ++ .inspect() ++ .find( ++ (event) => ++ event.eventId === extension.eventId && ++ event.projectId === extension.projectId, + ); +- check( +- `${provider.id}: extension bytes survive storage`, +- stored.extensions, +- extension.extensions, +- ); +- } finally { +- inspector.close(); +- } ++ check( ++ `${provider.id}: extension bytes survive storage`, ++ stored?.extensions, ++ extension.extensions, ++ ); + } + + time = FIXTURE.expiresAt; diff --git a/packages/docs/public/commerce-example/07-account-erasure-interoperable-2/mobile.png b/packages/docs/public/commerce-example/07-account-erasure-interoperable-2/mobile.png new file mode 100644 index 0000000000000000000000000000000000000000..c5c65fac85b8b66d708e1d0d18c4f99ce9d63e56 GIT binary patch literal 126051 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%0AuP6u(ZYYQd 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 JOvu3Re*m1wwfO)5 literal 0 HcmV?d00001 diff --git a/packages/docs/public/commerce-example/07-account-erasure-interoperable-2/source.tar.gz b/packages/docs/public/commerce-example/07-account-erasure-interoperable-2/source.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..7364c99c6dbfcd95381ea5bc31e9abb3a63e0658 GIT binary patch literal 52642 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 literal 0 HcmV?d00001 diff --git a/packages/docs/public/commerce-example/07-account-erasure-interoperable-3/attempt-1.txt b/packages/docs/public/commerce-example/07-account-erasure-interoperable-3/attempt-1.txt new file mode 100644 index 000000000..375c2f56e --- /dev/null +++ b/packages/docs/public/commerce-example/07-account-erasure-interoperable-3/attempt-1.txt @@ -0,0 +1,20 @@ +{ + "startedAt": "2026-09-08T19:49:13.476Z", + "commands": [ + { + "command": "npm ci --ignore-scripts --no-audit --no-fund", + "exitCode": 0, + "output": "\nadded 10 packages in 405ms\n" + }, + { + "command": "npm test", + "exitCode": 0, + "output": "\n> openiap-commerce-protocol-example@0.0.0 test\n> bun verify.mjs && bun test composition/app-backend.test.mjs composition/receiver.test.mjs\n\nCommerce Protocol Example: 159 checks passed. No store or production service contacted.\nbun test v1.3.13 (bf2e2cec)\n\ncomposition/app-backend.test.mjs:\n(pass) account deletion waits for in-flight fulfillment and retries provider erasure after app restart [63.70ms]\n\ncomposition/receiver.test.mjs:\n(pass) the original SQLite and memory composition remains compatible with the receiver [37.37ms]\n(pass) one inbox scopes event IDs to authenticated emitters, survives upgrade, and discards erased users [3.08ms]\n\n 3 pass\n 0 fail\n 20 expect() calls\nRan 3 tests across 2 files. [174.00ms]\n" + }, + { + "command": "npm run test:tooling", + "exitCode": 0, + "output": "\n> openiap-commerce-protocol-example@0.0.0 test:tooling\n> bun test checkpoint-tools.test.mjs\n\nbun test v1.3.13 (bf2e2cec)\n\ncheckpoint-tools.test.mjs:\n(pass) archive extraction excludes macOS metadata and preserves source hashes [11.47ms]\n(pass) patches preserve path-like source text across additions, changes, and deletions [57.60ms]\n(pass) failed attempts get new numbers and private paths are redacted [0.58ms]\n(pass) unfinished captures do not hide completed records [1.10ms]\n(pass) checkpoint replay follows predecessors instead of directory name order [1.31ms]\n\n 5 pass\n 0 fail\nRan 5 tests across 1 file. [88.00ms]\n" + } + ] +} diff --git a/packages/docs/public/commerce-example/07-account-erasure-interoperable-3/changes.patch b/packages/docs/public/commerce-example/07-account-erasure-interoperable-3/changes.patch new file mode 100644 index 000000000..dbf64ee77 --- /dev/null +++ b/packages/docs/public/commerce-example/07-account-erasure-interoperable-3/changes.patch @@ -0,0 +1,27 @@ +diff --git a/checkpoint.json b/checkpoint.json +index e139d74..4453b9a 100644 +--- a/checkpoint.json ++++ b/checkpoint.json +@@ -1,8 +1,8 @@ + { + "step": 7, +- "id": "07-account-erasure-interoperable-2", ++ "id": "07-account-erasure-interoperable-3", + "title": "Delete the account", + "built": "Account erasure with shared receiver and retry coordination", + "result": "The account identity is removed; retries and restart cannot restore it.", +- "previous": "07-account-erasure-interoperable" ++ "previous": "07-account-erasure-interoperable-2" + } +diff --git a/erasure.mjs b/erasure.mjs +index 90164eb..fb977b1 100644 +--- a/erasure.mjs ++++ b/erasure.mjs +@@ -1,6 +1,6 @@ + import { createHmac, randomBytes, randomUUID } from "node:crypto"; + +-// The random key prevents a database-only reader from guessing short user IDs. ++// Retain a stable retry marker without storing the user ID verbatim. + export function createErasureLedger(db) { + db.exec(` + PRAGMA secure_delete = ON; diff --git a/packages/docs/public/commerce-example/07-account-erasure-interoperable-3/mobile.png b/packages/docs/public/commerce-example/07-account-erasure-interoperable-3/mobile.png new file mode 100644 index 0000000000000000000000000000000000000000..c5c65fac85b8b66d708e1d0d18c4f99ce9d63e56 GIT binary patch literal 126051 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%0AuP6u(ZYYQd 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 JOvu3Re*m1wwfO)5 literal 0 HcmV?d00001 diff --git a/packages/docs/public/commerce-example/07-account-erasure-interoperable-3/source.tar.gz b/packages/docs/public/commerce-example/07-account-erasure-interoperable-3/source.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..683d94e874bdb2373581c13c51c7ca379d790dc3 GIT binary patch literal 52646 zcmV)zK#{*6iwFR@W}s>S1MI!qb{koeHa7N^7oK7_y4Msaf#CTdvehz3LK3@XcKMDIBML%1rQ}l2kp_#LVgvfy{l3 z9Xk$RMC=70pNBy&OlBIVQ5KyJ<0SmIul$*von2mBRQTVO>^%QXpZU32HMcas z1dlDuugt00xn=mje^Vd7_CU%$<1`Br7|PjY+>5hbcs}7dc&{Ag*RvAD9lvh-+iVXm^YqPE)`&CcfY_RCh|V~}M@qZ1vX4~N098$NFS)NWoh-~G5eNLLsB5my!;seO29`_*+X{ZIe%zy06;%m4HLz5na~ z`+rq_?{)ZB{d~JqZ$CGk|Jmi`-1%RepNI25`|XBgKmX$Ae;D_|w}ZGh?uY42rExrt z`n~CH&^-%hDi0dzhklfW4=Rmtcn<%&wf}ZM15&v^t$&!$p1uDsgJhU=8<&IrSMK8r z?*I9f+57wddwk08|CPD9x!INZ`}_Y7|M_;O-hOVp{}<-+_y5BD?EU@!JwAB!(kd$Dx2}>GKo&lGF9tNsrlLY zB?Sx9fMuyv_QGTkrD+roRg|i;FbR(@)oBt8v#?iJCrKEp_(XNjg5)%;t1MQ*@KTM! zB!w5^<1C1V(eP9SstbKo;K}R^nn~l6>>@})c(|v6G>yAa0PU$>+#L_XVHRZA-$?`_ ziK=C1p{nl78`UZ5q!$MLN;FjXoBl~%MA=z9&QubnSrT=zjk=14-Tt_TW6(eMqd_D+ z;OjK;v;vKeQBX>Q)Z@Fbo8dS3_(|OF z#}_!YZanNoIHPo}QaOO1f@9#fG#B32VVuEGc?h@xBfG2eQ+gKk`|3E91%rNJc>`xU z33dCM{T6h;1_ht>%m7vlhLz3$1i2_!y5){rtRz zUtxbu`2Wp=_U;Z&V{>=spaXx_VV0c(^Xkv-{Z?HyJMDd3kf)v97xfA*C%mysjlg?5 zEp7#uT6sGHkKo^j`z_O;+G;hop{;#<8KE3gR&(n`3uxmA1k8j*;(x(jP(jin@1am?d>hEwFo=5QvLv?{45@VjEOG*&w!ulm+o2EeV>9vxe>y< zAn!&f5sNx;77R~AkanllQxb#CK=Job&kovz*OD}wMs^390bY6v+U|wv`z#(&mxK5i z#?YuJSd~#f5VZodh;cs?ky*d`L#l@1#|&QYMkGBS^U(Y`K})?5RG)rB{TPPO2}su< zFGCyMIO%DTISbPFFup7c2P0H|u%}TR4Kos|L8Lz!V;2pW;wCH#>IL{35G3dT@H`A~ z1QK`zgO9RHQg7%1=!1VEt*71G`w`R)Sgu|_OkiX*Ay{$HgNE;+nUh4ckJqDd0?V3) z>U13S!Z)?EEE}b3Gc&N~!zdV`J~#v013FPRoQ4h0;%?lZISsQ6I-1541;d)cb?k(w zAMkLy*%~2@It>21JEtOga)wquq0zp)DqIs&O@9&G}jLYM(ahKH*R9aNG9|l8g7qz82=ykXd@vwghL&Ltcnn_B|Xq=@D)fw}y(=5g#B*Ou$ zRGpS8W#!GRd@mftDbEuXTy+9ljT^{Y$#i@kCZItI>5PIXfd`Jmv*0{}V-O8{AuMVS z#?ZgS8Mg7C`g!aUo=#)f4}ANaNUg5N1fyZvlwqAjAG2{HhZ9G&6{AuIoxqAC-S%N` zkVw<<2)6~a_A#h>uso<>6QRY)09im?(b%#uftHeh2@4uL4zr6eq!m2}%1BZsnn3mA zF6^xy0Gz&t+76DxK8#B>+xobr(O}%?y$VvKK@d!|3Cca+nsv*x&Hjm&o9g_6y*Qe<$L-6dwl+^c0v3A z(GVp|lIPT(mcm4Ku2h;5#;(A~j1(_#_$ERm3GDTgH3*w6*NE&C+sIIt6l6ER-bUK7Cuvrwt`ye7F zmm;5ayP$p0x1>NcRC}0?$Y5>-(dP#Tds=iBm7^DA!7&bm1x(a9(1tEEM4=?57Q_nx zy+3$xBtr3YK_EVQ@IZ~=)!;O2P;d3h{!iOcCLVx`@c1l_-z%I)fI>}*%gmBg|8iY~ z&=?&CC=H2>*M;BTD^LL{C+yg;Vizpw0h;t9)OA4cODdej&FPFt?X*QxMx&!O#bNS9aYA^zRB9s05LmrDrq-~K)_yC!_fdI3~JTI zkepJW2_79CrDv5>Pra4LI$(}NWni>%zA zQ6L>T-_#XCt?Xa0nEDTT5m$)*!CL@xs8sN50*T@HVfb_ND~(zBzqz%gxz)J`59+w& zpd9yc;~qRf#RV35q~_Fr{cry}&>kz%umQudIa(EZVx^&4LHCRw7g{I%K;(EBLKY%5 zfrb>MXUA~>$|^2#YR)QX_1!V3mvGATq10#4s6R}x;l~mDhqy-)ei*|vXY{EPcj{A_k%!s#mz&=Exdn){zT& zK4RS$kHDW^ACSsSMhAF~S3-{d8qR_=x7=hk1CqH$%w}Y=!dmPBN`i|96Cs{x+#7iH zuJkyAx-lO@f@{yrE>EL90Y)>e8SnJ!44e?q)EcAV=@fG@{sML}!&!z}bsNIe!tU77 zGijm8{?JhSAuL^%R$e1(N=TWv)A_RVG;`dKk8e2%R3zV}z+o!d`tn-u5M4JtQ16g# zF2Bv7jC3@`Jo4wWAVY2id<>3w8p7T9tJ=pyB%fdT5q+d?^Z8YE*uDh1Dy{sj-cr9p z&(rp!yuWVs`GQyYHRyS+0rJ8yOW-PnX13!1hzABg2!JCK|6)#$T;P%pHZpW~&T!rh zC&BY9vczSW-7x3*hI+{c6>R2Z(2wBK4vpm@#2XEi3m8Ul9=fuH?)jx7Td08U2Ldsq za6#%}l=i&PP#Y0YAve>^GUT8v4QTO&z45{`rc;nU$Vx=U40r`W0_v13TYE`3h{l6; zwGkhyZZO2lx!VsSxGu6n&x^3ys4?}a=YuiuwfN)&j^i-A2>R;^nCdvBlT5Nuk;3+Z zNOLY@Tf>{V&ur~-;%YB7)D|;3Y-S%M6=8Sl&`yS|UYoq&@P_=H*K-q@M#zv3eLcWh zDO~nwcpQIJA=%OjJuf%V1`8~go9UgiJqKAdNB7?~S{jWI$%399 z3manfs!-2(IVM6ecsK_LpwP0CipV|(RLyd(Oj@83@`jx-o3HWFK2oW4i;v2lBSIw> zdoGg+THomiq40KO1cD<4>>Ju3J2t!pqz9)94i-#8i>-Cw;KZJwaa?yal|sW6Ad>fT z|2LRjEz9!p-57oZCW_tZhEfnGfJV@A<{Hys5pYc(JXo&)mGh7|>+0`Hxp&D|FWL! zZf?BY+wB}Yh6fjvT^wf5hbfPDgbWDRVHk!zWYMosz)a$P=#$7kaViuVOAo*|_{jZ0 z$Q$jN5YoEcZ6VE6%6az}vh?5d`AU7#oc4mt3lyGbkT2mm!88A>dff&=379k;repZ} z|Jnc?g+;sUZht#!ODMl#&PcHR@=?32-}4GW?6UxQZ65{yhpyT`u% zWXznN$|cF_b(lD+^^Cq9P%5sgPHX?5u3T-^a7>)j7Vrt!q+p!I12bWmQ;Y5&!xeMh zqpu^G>DFnf_<{*~mx`?c)1f~Cl0pL28z&@^^NmxoG%zPkW9WwhZib!^^}ErYI5A^{ zJ)*!1cbGvfrlWpDjy9wHXg8U6kHbZB1gaq{$21JPcN#VZ??B%f1fx_n(G)xLERIiM zQM7(##26rreh(dJBF`8HUB$J_h`k(abl!dnn%Hys1j zv$9XN8-!K%SSsZ;N})ke)r_r2FG*dCe|5a=K{nK0G?wVdXKgoC$ z-o<3DX{dH4LR#twDA+zaP1A~Ywpu$?U4$PiL5LJa=ZhM|o0lYN!}UP8IVVN?DTxM% zdIhP&J*^<+G}GWhQD6B%rnPIX<5i1A@ZmgD;uhrBDcVn%|%NpgfSTpz0K*q%B;+&lOTpf}{_}WC*txPE}jFeW~j-fe9L` z7Q7LKf?@#9S)plUm!ohUN$DcsGjR%Bly7}OG934V;d>1kLB|Es8T>gI0UaI$K!_v- zq?Mq6_Q3{mPYA3K120t>94;|cBk_m52re$6B$%=sI5B9LUks|LBJyJ(W``14VUwUy zUq$Yipj3QiLElRIN80RtR6aAg&$ajEq#s|@^|1wBmhvS<7G)G`MtFmGTDdzjb7^3Q zYgrukVf~M6XTgX>V}f4c*;4Yz7cHadjAf8DYf%LW>{n#aXgcA;Tu1vVDuY06+%xQb zG!#eH&|?FRJ7I>9TV7{fo`biVC?KO29t{R#HcJsSm^e18xLP(9Ah5D-|-=tZ)xUA=;%5QeipW|ts(QKbx7&pn8VJx9nXg@&`N;*Bi9Z$2$J_GiN9R(sAGAx)`j}GK9n$BH4NsfKSs|c~v`RQQAa^9)C=Km$Uz{Ni39RWLA|g8J zV<1|+LVM7UPQvbGw;vieTArXptkF&c);jR?ik1b(R}8~?8%T0xt&WK*??KegKsZt2 zY))t1N7;yBb(z_`e`A6Vz%W;{F(Kce%xA77HpiZfy9 z2#*r%OGV#q-o>R2uDpUNG~Xq(GlP0__9S-FA@_OBrhiiC2G9lYdOz1A2ec$Krpr{{Hp*xDo$5yOPKME-c^Uf4|FT{!tnJcXf7gcK$y6 z?_c2a?M}V@Tz~%OmX}r*^Z4Jz`TO|4@AA>s-ryQ!uQmm{l1Ao;)kWkmNcn?H5))H2 zcwIKc)lLneUK{ z5e6{0)F!+i(gLCs&By}Nyav77AWwyX&(he3qrsZ%%F)eCY(=|vU`ijx5y-IQq0-h9 zlqru0BnneIs;eV{i1NRoZ&J7LFG=u$E+$5FkYcT;H4M;n;;loujA!2HMQDG8jj7az zC`b1Dmp(3XvQ=f~Xo_Mjjkt(;cQVybdqS(Tjk(5b#n?bZbyr7Q zt^M}19adNprhQN(v?RYD6yg;XMYD$dariF-olRG$%yk?co; z9`0(eqluYCfEETLrdpNJI=gWK`^-}FQf7_9n;JSoQ=3r{K_y((f}9QTxxzL?SqCxB zvDJ-z_I2at!Yn?cP-t4CI*^?W#{;CpF_Ml1V0f(hhtvzBmAGZ(*J?b(U5heumXNao zJxUD;7xyqt=)pcE{Mc*bUPoIcj)Cp_=g6q+QKEHKfu7kFpe#~DL=R+IzfY0RYEL=dck6UeWs|d*!(ADM zFIf0qFhcHAuV{Bvj;(47i`e4o#+D!!58Xn;jT^5dVLv<%=pMq**erkBYQyIscu(fb z2;mS8i7>HKT!)FvxYV)i0{J8Aru*5s`2!&tVry*f(B5PX-Gk-A@D?`ymdFup$s2~& zg`wb!O?Y?rEJpi5P~oLUGtbQ5_jh-cYh>dMm}Fu#2T`FH8Nn`8BS(l6J#XG` z@>Bzl=tdc^nL;>@-ozpK^N@kWWN6_C9+FkaT1Ff0n6aD)9mlRurx#uwlPjB!5G6z) z>5Z>_Cw~Ik>Jy+oxT@zG>cImI)?Rz?fPDt&EDAJ`fWy=^lv>+eeYd#^2)LY86i3cm zzp3Gbo|I>I#{xYxyrF@3UN)0qbHt?)5QBV&nw0qTbch-4Ml2B&RW81L?1 z8meaY7yg>E{-^*N9rEbd#nF#&FAfP2ZD7$+NHdMnr5k61K>9DvE~kG$a(N6kS9wEZW)xZ(YJ%mb(1(vr>Q}5h@GJG z*}AsixNA6?K2G>Hdd7g$LvMZ5uQ1GNjCl|WAT4w3*1cFrmmz3!!5f`UB1Z`}DvP*w z+gjkp1=A307bvD(nh|oCfsoZ1!_Vph9^of?VQ-AAR$qKfr$ANIlbqP&%PcJQQ=(>i zPIyW>G<-7y9bQntp-By~gexcU4wu9#G2lU5OWn+{vL5$T_c4h{a3Le$wcw@G&^Cz< z1Fpxw$~-7luaWUUqK=}rELX(lmSz_)wohU&@L!S#1DzjfHjQ&b3emB!8OS2Uf!>8( zvv7!U!9@%Cr~`MJ?uW$bMnQH)WSU448Ibq{{6`Bsa~$_BXRJHV4TT7>F%C>HT1rE` z2taP^$MJ}kowkI0-hp*~k~AHDM1BP$TqhwR=o6)|V^%vo4Er__xYm<{>`GIwapoxT zYvN7bs4U~=cEneKn=1h%WC*X($}RLqj6e(1GLC^|@t>1!*5ck(Dgx7&54b z-FhAoBa=nYN`Pl}1qYXR{_`NO4?l@U5nB{SGD_S#AwDt^h-m0L+qL6{ZUIz-LdP%c z-2UXE1>!$YHS>IePx0B9B zh4I?jE+v5i+U-|&@QQjTv^!O=xUr3_Rb;m(+*OW5!M^*za6XBGtXudBW0;-5@lnE$ z21*d1NGa4V#~?XK1xr_WFjxgNaA-4+6!d$#cg#g<-uoesACMq!fpSPDS&Z-!%z$na zc%pOgU_LPgGQn|h*jElVq7yb*gNd{CsFh0$IXg#9P@ZNh*rc`z=}bc`*GVERIt_HZ z8EPw1mD`KlAX;0do+`NDQ9MpTUe(x$9>LZ$U$Vd$809)c{&@C4rDBv)gKs- zMsPJCT;bT5f~HA~_DI@lCv_u)Aw6C)oF&MF*@~uu2Nl-IyP0uN!>~_qNl}pLfMB9% z7Th&7b!g3tgD?w_a^$Adnt-u7QaT2Xg2&Zmy9S4iMs#&1p&c;8ZqCDgJQ}!41P)bF zKk0^%rYf5Tsf^jOkRA|I#6)Ak^QD-1Sd4xg^o)&?b4L(25UBtypH4OmFGid#bfkF- z1{oLdkgSorL&F!Dlq3WvmFYRUkFkV<-a$dB!%txn<3TWT3XXyE$iWoHK4?G;)wHbw z2sF@eJ_a8D#>NhefJ2GHG$u@BK4ibHXq%KlGVn5_9~_B@R(1gWM$-(*a6ts6NDM94 zS(_|U3fucQu8(gDUUu)8bDB9Vx%-LG_)ua41a%_BpGXU|itErNrU5X*f+c@uTau#y z>EHm3i5R~~DZDQN0_&FK)PUPEeGdl#Aw1nPXVL1`5~!IwBX2a-8LUt^Jdcui$QH!7 zqLoME4PgYJs}Yd9!h}|mwT;vchDcchg*8kVl}9X1PVPWPj5sPQtbkca%epihH5u)Q zbcLOZ>00)!aYt5durxiZIu1>b>lKFEQCcu^ZXn6Zv>#DS$6*W$WX`EB-jaf%Vx zpU%2wgWA;Qroz!i>%+DM3$oN^49PC|PUkgXZpzo3WhK|8xQx*X`r(`Tv$@G5_y9{^#3&%JcuN z&M&P#T3x&c0R7=V-|p1g&rSHB<>mbOU!0p=yvP51kB`RxkV~BMX2^xD-OvUZu6=Y- z$^mf3&BN*axBkTFj1>~@PN4)6|7nHTrWHlq0DVk! z0?K#=lM5y&wO|v3$VSN}3GIj&+Ci?F9#_Z-`quwvok%)ch<>pUmIl9Sh2_q%Vb_I? zVYI+dYWn<^cCL@&`(_zJzE;C-9*|T!DL`2skS&-NY7cE(21u?qiVZuWT>5D{y5cOm zK1}jgbztK94FwjHBaq`>!%X^@g$Ncu>4#SKynfirabuE8+p;maJL(35ye^3v(O!g! zQktG8%t^>l&m#&{52LKutEcVLdU(j0;`SFgH6dpr0*qU4*$vbKEXs z1ZW^*otzS`C%IH16L+9V8ew!g=729*MD2;a%NZz5=i%)%vm36Dl}TbZd+rVV=PsXL z$xN-fL@&A$J!$M>uo`BQ1U8gtmdB?o_F~-hvibk9Bl$tzQ0SfR}_U z!s$6lXU;%7NC|<{_!Ny8-33|0ztxe>%^-g}o>_xy zi4qAya)5CH1=6~;y?TD@Iyj;DM)x#095FO`IS3nkMP8fDbdAGx1$>6n9_9XavxLGj zX&9*fMk3#3j6b9rl7fgB3c@{b;c8J@xd!2C21js-y1fqJFA9<`z+$imLVuPec3Jy^ zyx5D`qv;Ovn{6G@eC5!c7b%W%lrH6*-B<-APGJzC$vV z(@4MyCId{}TqCaG534p}`M4gh4}odb`gg)Sl^ecR)2Lr7LM zt`C8X!ZaKRA1Cv*u*5P4=eo9x(!-U!1fhAM2U7Eph=iR)uaZV!H=GhZ6{$KS^=KqB z2-Bx2H{?4JQP_c-k9nMpT=Y%$z3?O&3O(qYz{WbgZd~*^JFm8EVoEBr#dU{5T96@ke;5o?gH$;-Owy4?e-)*ac2poV+R;iCg2`5IU^6G1O8fjctqiLr7NJhu~a z!iN*OrR`7z4CUk#76U$|NN=d0QG_Yzgp%bBJN+SLgj#-%=GZh!f}J$O86x7F^eD6} z@D^Zmhi%Gt0+$0Vh*KgBI9AY)PdVwF&JDthfR;dbt>ecRxF?8M4)NeVYx)@Lyck;W z>PN?vBNk>!n{KvTW9W1QfxgW3q)~)Vi`y)+loq>$E@)FrbKwzEx-1bPx%u&R5E?z1 z(c4m2Tnu~xk;IdAUM|CzJVc)0psYuTd`1Eg3ZeHsV*0hO|$%Rv}N>fI5#sohCt&EP1F#=Ku#&|vP*nS z)~~g7$4lh;)$To;QBUud^oN7Y$uB9MVx0=p=nW-VDavwE2xb`b$1vt_%3$hf^$d2 zlmk}92~BI6St2kss8Yg-===&?Fx7dy^}WEl=NDvK6{X$JxLUz@P1Q7IAu|he#JE-@ zLqdBUcDC&Xk*K1rPh7@c2VhoqNxZ)?d8lJ+=plb z+huu7Ulf%=bgCy6TMBY+Iad(Z25lwUJP2ZYo2sL>15p z3K>Q=c2o3eU=HUoB`XoMLy@O8`r1utD$(Ksn<3;1DLK~`71g;?^XWw^Vns2yJReA@ zk@FU4Y1z6(`RNqJ64oOXd<3P1H*Z2~jPD&2>6APF2pVhi1yo2|izHes#Yh63pqqhMu!dM@}X*eeLzVe8F=*7aS|5)6GYQkhxi-d0KNqOv$%MV|M?!D3HYDI*+;8$_w_&j z_@8fg>h0%-^S`oG$p5uCH@9$)|M?yt0~PjB-CEHk0hnu%KP4OHQezG-q>pNIyDh=| z+J1Htp}ytTj%)VVK`oxU3WdDu{40`oULy#si`BJ+1gVRQka)EKBWnhn21SBNb*u>M zr6hu4{H~23HR2?yb>x=Nv7i+j2kTf;(auM(WDZa4qbxv{!k&)0x!^iJp$+aKyf@Z& zmo&~|nb!ya9A6S*#3_!CUB(d=TVz2Dvt(Lft09s7lIPv30V8yMF&3WP^gTBM$JUyM zVSq$)hBC5tL73bnZ1v#RF^0wzdK$#T81+e$?8uMABUusDao%c4u1_u(${I}_u$xd6 zbIEW_aY7`<5U7iXYaO>XtN>Qzl-rIzI;2FnZtY~pvS58lSsS4h*qAenpiXQ~HCJ*cU&Fy*IMA%*0r~YS6>$N2;m$>Gy@45( zD;3riPZPB+cy{TVETvTV#Hn@4HBdNo0aXQ3SDlJ0xSzeARN;|;ZL8iAh-l3zS5-I8 zdU1$Q1SRR=;`XT!U@})!NC#$%!A?vKWQd*!s;Jytv8N1D(NG7-1a$HT_VNoG6rGN( z^#Xx%vt83NIc2Y!d+oGfQ?iv|+0Y}AiEJq1nORG;&F&n|up*@>?XXd`IAb~Ql`VAK z33ZYyLudv9A$SNzz=)|aPINJ6x`i}!g4m%1ksOEJ02}pd3vrHv>;;wqlK4-Xxp781}DT+vB0~uuA`RdGSan6EVr??7ojmWP*bU4*hb8t zH!T_TbYWpet0rP};mKhFQe;pmY%)oi8aXy&lGv-P2m#|BJ4~IX%WGX>!(lXZ;Ur#R15B{bCsWWaaq`~y z05pLqBCsf}aKs})4fINh{aFgQh@hg&OK69m+o3UHRWy*Q-_O^~;RHseBsGPLs#K7K z%&(^9m7c&W8^rlH+f1Dt2tKjGgH7b^kB$3c1WrW{)Xo0SJ7^~oUI+?c$gp@z%qFF(~cwRJAT{ zPOl=cJm$Oz9Z|jd8Cj+IXPeRnzS`J*Ax&twvrQi3B!uCHDs~tMp_jX25cE+3H|@(< z1VULiS)fLl4jMJ@Rt|@ef!EMbVBjVn1M4my+LKvuC* zmJIcd{BwkIe$mI;e;v&o)0Te4KJIS+U71Jw&%OQk+kYn6e^=)ptuEi&fB*2GZ+GhL z=ce<&xSY@b4u9O|fB!C@&lRPr2obNYsTD+>RHGjJvpTynEuL9j=t6ufH3?$$Vo9 zDvvHqEUvEa(dazLu$?R!hb$aij;LKWiSlDoV-dc_u1WZS+Zmt2C|4;GKX{kY)7S>w z*ZNm6O~SA0-~U}5OEF*Nlq{S<6rx7%lLZMMb{{a2gZfw9k!bt6FZt7bqFBt=AK0|> zOMVKv;;?>$2X3C9#-G#Tn8c-F2Ib(c^)p_qYuSSo4eLG4&JXi!J~pEYk6zJcne_f3 zOxYcqNG41Xb3zgDWbp1Bzx&VC#@tF{&TaR6tF-C=6@!N^5-bopqj!F;u{`g;Y-*m8 zTxn8p)s5v9M9N~EPOh4ffcD)zV+xgugV^?q_JNi?wW-^VRa5tAlZd z!b0Buv$%LK|9zLw*OUK{f)L^U()_w0S0{(OxPqb1RA4Vt^RGJ(M~h~~A<-`-x48&H zCGtm^&{DU*+(Ph?hp(J|%0-=9h&$9!#c8hUmFO#Z`E$v7NPA{LSUsqJ9`;;8B?(WX zG)pcU!x6}TjW{_iv_3OU|C#3I8rkV5+a#k(q6~$jYI+td&CO459dr-7s~@81VR!WW zJlnlEJ$;dFbY8ss@gL8BdG&MeVl}<&yc*A+XP?F&7JvRYI{WZpapz<+UHV71xVXJM zXs#wFTPN=x?mZuVeA=CP8p7rB)8ohP4xT$SmEY{<2pzA}^DZq+-g7(Ik}WXrA4kLM zUIRh8!P2w;T8L@g^F88L;!A&fJU@Gj&1Rx3+uzm3yhrf2++S!AwiNz%nj5%zM-R@9 z`_aSQ{_eYn(TlxTPd8p}ocw)Zcd*$U2K$#g!^IbK=bs)OEI)f6Ed4!ubR5h)Z+DiK z-^G{9OWCXC_aA4TZa!Ul`OD76>fEDOD>KgylZ|IhcSrAjR!;&T$zB+arU}?X=XL?e zbHP2f^w2no}5K;&^+j@F8*{4QQfd!OeT{SYURro3L4cb z1plO^S-E*>db{WUc=_pF?;pKSE2FdCqx0o=o5vR)lZ~GjPJUb-u6DY!n^|x0V)1x9 z`1E4<@$zEh)!BG-w)}TEU!Bgy%=_`fWcxVmU!1%c58r3wPcL6SKXsSJQs`?#hn7~a zqt@HeE6zANxvZMkuIktKgBNTUtK@YNzI<(e{-e}yu{-(Kn=)e9*x#C7nBMFo=JPtL zNI95$0#(cdkE$jrZe0P; zg&&S*)7^eD4t6gWdgIeC;+NM+!)0seS_W^whLa0XPhVq7qrPrl%}@(c>e03-}~iNyY=z;R@Ptn zX<`5P!?VHOhtWoQ@N@s*;$`RQUx59fdG9)3FSZl8X8Ier>5)cmf(e1Qv2)&reOMsAdwxmR(j z--K$Yai4VXn_JV*#onv^i`K^9Up;#EJPF$SzkIm-kbRsT2D96v-GyITzpT95**Y6$ z$Kl77?9<`?%KPo%KY%wqO~z0EzOnc`nn}*KUcCF|*@x%h#nwNTSBJ0u@$%xg(a$wo zZ^-6bDs$zEM7ek|`vu}fN&B#aCErd{`!{dmFDJ9ZpTp%&8h(nNz8F7jjvgIH(c$r6 z)c>%&|7d3PaOGm<)h~N9f8Th1mK<(v9iCkT56_!Bm*eB{hm(K&d~hBf&dhARdigBf zdbZN}aeL;xb#WWj?}p_DK3}}+E8od?@<;eM_+MSN2&m}m_VESypQZV^d;ib(_>}v9 z9?dQ-tSqhE`+xrMpKo{S?dK-^PtpIgxPd;ib3|3m{$VfOBvLnzVvF@wp+X69$- zXHf!LugEi>5pmP&hx??t)+uoM?M8cNtG)9~UCHZ{mBRH3=F`VSqtMr5iVA~XYo8U0 zBHe5aOWIRpWxwA_k~m3Orc+l_>lJvV5%hZ8bIl#b)Vj24<9wy@7s03ozg8sH?_@mW z5Hp>7utuN{EX_^10jEg7h)z`PPfp12S&-`Irlv#$aehw2%r=9AM5IyF4`Eh+Ny3vg zZ^asaiF)dxlILMwQ|lF$RwVbX)9|Tnc&f(ZTL+P*Fd36$vxZJH9-*}6ZcoFhsEHA7 zwHjy}$>o%K{5M7aYEZ7d$B!RV(!KJ&^iI<5)G*r0>#rlRvE)Ur(Mo+*AwCPT8|6N( zt3jBi!D+Zge>S9!Vzb|`Ro_L4~7q!1n zzr4ma-|+J^f#3UR{kQly_#a7n@y{XuEiB*5f8XOXLH?Tu5pecC|JNV?^X*Q({akCQ>m+NY^u2$;m(G(4UauSq1^~gMh61X?Z z%}#3z_Nm?6-Y=c0n{)_0tznSB3i1ST64UMjJXXT}mp;osRe2cP{|TmoN=6A5S$?cU zK1NyAQfCcKm-9=@AW@D-B<}N5jb4OVq-xc(@ME=1J&4j4=Zf#uC{IJ(E)k~XxbS3N z7IXPQlAfzg_FSVU()qSMdAnZaBpw7bI{s)yMM6TX;sw~s#{DzCb`q&3A109ZV{M(^$PU!*mYGb z_9eZxcV0HP+goott)C8C`v=k|He`Fm7MQ%pBQC%=9gj26imF<{EHn%Ju>G{X**pNI z`1WbDz1`Z9rXB6^v*gAIfggCi>7_DXUX`kMe0Frw_Sz`O&WPa6X247)Pk1?qYdPlI2pPSq3^fPdo=0QsxG&i>jArFYWzoIvHVgoD;E2he!?MYHot{n&a%3AmECpnc;nredi6f*RgA z+}_qs2R^v|Px?H*4KhXbh*}-z$BU@nf18B3422)1QJqbyyaA^^#al{P81@QJsjb%2 z=Hd2%nx!VEZd@fNJq;|Bo~^Smw`gLVVe&k^%H*YdThdb9B;qTsDyNqzU1>~rJs4p{ zfQfUhi{kG$V1EBWGLHYCn;eE8v$8cVTfL(xhb8c>j@F}+>%Z1JHavme|5NW+I&6Fx z!?bHvp=L^H^fnrv#5F^uQ`IT`aM179%pYky2x~PEQO1KI-(U1kYmBMlsKOq-&Tr`x zr2S*f?E{!3Z=F3A&8;nvskRSa>?m&Gn&l8*8{UP=a)Wdjj4%;tEzwt=Wi-;aBY(g{ z4STA*bHqRLRjPNL?#MOwsntjmQIdOgnf=*VINF z_rqXF9oy3@-3V)S*8`qQpTs$mHZ;2OqBGGwgkEKWnX zrH;UJTWsjsW2HYzHZJ{}+h!7;gYd#Xy|FB!t96&l9XOz=6@9Uk6rae+YEI)Xz3?P$ zQ0Zs)S6r777Uv05v0U06))hJUg2gqK1&D?bmg0EHDvcJRb2Cg!re?llsd^{Qj2vzs z$Az)2zL_dnfrzHh^ns}aCFmn(oz)tc{L1b7g^R3TADJG=I>ornmZTB)& z#ACC(AwRR`7$a(CD7GK>3qz}utq%Bc24xu^)^WkF*7#bw)vYu;>J)1C0~2( zU-6CNI@ZEk_0KcJ4rlafr&p^iDo*Kp3M)2U5bI-?6R6RgvY589DtDE+e6>i_-q~+; z4p8FRHS((#Ts=8ex>KODfwrbhJrzI}O$bL4~dH z;B)tvDQ~N3w(N>nQ#F?VobPxLepxM7H@8Oup6LN!gdVQdrPt*p+zNSx{bxpzm2b-) z)Vk%A!`SjGkDnu1{oRggKidJloA<#{*c?sGC}yrs#sYunYFw^@Rd+QhZ|_*yfPehJ zMwlPyk2&1YBg?3GSDg_%1qT9kB+UQI+$;4i@64*;q_RloPP&|G0z%6{v>RjowX@{Pn#RC8y`Jk{Q3B^bXG z1^Ka>^<hMOe|*3e}s;Go|{ou2aK zQ!SU3D^@I{VLLA8U3cCuy9g$2RGFpgv6`E(65fu`Huy_%RXh?xp)lSjM&dzRio1W7 za<8UpQ{M4+m8CVMk0Ik^tVZq~4|x&k=n%fiGmYDwKqjGg@o^j1!<8<1!C;1GdgTKgdf0(+aU3D364w#MGTQ)b`~@1(Y^Cm#@>qm zA-xDkVeVKTW>?+WJ$UJ1zds4Lqt*T-PoU{wlXe_|Vs(-HR5pf^dZ7{){E zbdsTnDTK=<*BnRhR6|$au3-yP1z{vN?n9CmcRTHWw9L@+qaYKv_;+#P%+Q>E8~poC z-96pyY_zxFCEeGRU0$t%y{4XVm)=ZTZC6;^>+C*lZ?|-VaHgef3%hD_%bGjBn8MZ( zulPNOW%(q*EAgy#;7i6&$}CezZE1)(|M!9<7^G9)D{Csa2%^liPhd=|Ux0>*rO7_u zu$p;svY?>&>bzZmx)K5JZVhv@?wW~2#no>gtCB5rJhgg6{CG~O^+(`6vOak>{9Ii| z;86QSql78;tc%3hRVziv>K-hzl{%JU!F(x*+qAfGlUDbj)!Auozio9oyB&9NedmJ6 zakbA1)$R8YR_C(jF6dPHG2Skv{`9)a)^x<_vOHORV_5>WF{OU}RX@EmMxmtENpUO2^q`vw|kQNnegvOr=(Dz=xf}>v;ouDnlZq$#wZMFQzZkcE8bN9=gP9<R@c5szqG_-r3v9Sw1@6+$6QWA80vH8 zZ#&jCHCr$V6^Hf2jzg9Bc8$nel+(-A5}6;G>YQbJjE;X7GBHuFH}X4gGR{}4zOGvV z2kN|;law>hzlfjW?mn61TtoxbHJ(LrAr=UTPD_d2CD<_h{K--2-HFk^i%Pv-2>0OO z#2TY90^-U%oL{6#Uau`qR^fSvChdei+F0JKmh=6p_=Kl2Rpvv&{-Qo4XzAhu;lUA$K>p%W20! zs1ggWKmlUSH(2N!!ZTSYt(r%-o|r)Z!5EEK#Kr!=_xex#Nh5r;f-GntS5x2ZY_&RS z;}xEWsCUf-?Vsd?{j6A_XO4za3*759*RGZ4b&f}Hjh#26AW1`Z+%yW_LZp=fBE;AM zddGFvKMkXD>+1F6G}K-lI9c>J#xwo11t!_}9|zX_mHYUD_@9NP`TO{v@9~)s|Ff{P zxO5-?^DprEcBkHcZaDw*^Goyj_@Bl5_@D3d$p`ifg04n6Y+yCVTSWO_TtbJd>zab9 zT*GM)B=5t-R3W9xqf!7I#%+kv#PP7pRR{BE??*10CnvW<>uZI!mBIcx zs*fu)`ZJufvojm$xW!}wB|cmHMfaTt#~H7lkL)$R3;6aqH|(}jP_3__0W($?+~g4f zeso7x;w^*G<#nmamMkIOyRI0mmmbShgIn=^KmS}(^B?D9<$tMR^9=-oyUYLZ*y6qX z|2;kvr?&beK{O8-9di%Nl{LjrT&KBywuFTEf%m3fwBl3TcVi|W=yytIb zI60FW9G?vK5rg6B0w-ShJONy{gJUOV-l^;6JgB4P?Q?EA3a?XkXYXogMqTY6G@pT7 z<8;vlwvt3~{#CI?)~Qmw^ZZ44d=|&=)BN*4w>F;d?*4eYj8>ww(upW=`4Htyc4f=gMZUF!!AY41bc7Eq-(q02&g%6WH zkJx|P?ZXMx{;XlpLN@|~c9JOQAKXx9S~tQ(;BaeIA5mYmuTK@9b+N!zbk#Q+rtP|k ztxqf6m)URQBS`4Bj&!EthnlM6bB z%^r;48PWG%1ld{Rq#q+NLPp16?in=)Tx=>Y`I{*~PmZOXK`d*ky0^Q3;27}9K5zaK zjFOwlRjJo<+!|(dERMcev*WFoJ&&iEJjmvG{KiZp4MB$lda{jhut#ZI;>a*9mAeL9 zsK1GPG5`&icxZWK6K zsWand^cIP?r7Emi^~PkNGJsW$maxNbL(~f%&3|zO%b_{ffo?9&r$J^bnx}^H#km?FLB?z7I|~ z>q_YuYb8g2O5k^Br;T%=Br2YsleIx;rn*kzxt4mFZ!4 zG0hQk;>#>w0)pr8)Z1H{OpY%{AaiKj-gR@vuD)=>-Z)-5se#NW5R4HFHH#RT8@Y^3 zCg1N&84Zb+(l6V@@ulP0&w_qPBS6kzPY=PA?3jWs9nkV2eW4h^03iq8htF5yk3jE#ih$5zzTv2OlThIJaOrF4Q}dJLwzoF;}cO%4ki!_U~GHG{Y+ z#v`wJWAP8Qe`^=6>-CWw8(0htku7gwV#z`;b)L_xj**bB~nVqwXYZ1RW z8S=J={BVfk$dIl9eXZb8*HJZhx%#Vvh=`BY$+904E;@n3Um-*dn$?OfcLb`fM(M~& zCObzBzwbpTDaFZUolFsM4pU+i8~_BYsq3e?x-u&EMbLkb;Mei#*)^&*LEb370C9Bd z@SnemeWTG2ho{*YeD(05*8X_BPRk8r`UraGXj%1yE-?TA^DcemEW)b{7A>ny&rLP> zm21|?ZKQ0y+~2=s-9&)raZsW%3c4lh3`R=?4HV0!WQF5?*yzWnwWGg$7J|vyUZ!LP zuMDw?2?pgFpl9@|{@ymY-}7VrKdwFO>-O;_`Jd%V`O&jkO^>KyFF!oC0J5C8dg zr`~>U@c%3>EEV!UFRk4Bf4%`ABaGGBuChdf`=fdctK=?$}!mGL*y5s-DQTE~BK z*m`i`SfjObYuIDbd#vF12B?z*E$hk}ozFdf9Za9hPCt6{d3o_lua|kVWTnioWOHNy zLLAm@mOEP(vb8ZjIe`U6vUWPEm;Qb&QRgvfEP-i9BRh;L43qn@bOpLNl!CoO(D;fS!CUgL5PI{0X}GdN71f-ZKf_^kN&T&4)&6MR_wG zoq1@6lJf%)NMKyC+UPF?x$5LCg?J*=r!L7ZF+}0y-ln$8X~-otH2O0LSNeIW0QI`VEur7^E{ptarJ3RFZmn{NmY@9n#$^>j1~dF~QXQR( z5GiTanDnhCCSnc6OtVaG5J~wsnA_#dD`v@?l(wxj!e`Rmd5ffRh3t?zAW7E1ppEj0 z-^5ubq2cB_ujI#8fCBOWbFuO_M9AxGY-Q4(&;a?`oj`TJdj=gnn8K)j_R4!ACc_Zv z2WhQ5?A^rha0#Q3yn4VEq9M{J;@;rK932PU_X-tgMSD&TA1-(lpsLrgYL`5=bxJ7b zs4i0SS4?YCn*Tt8=5SXzxd#r)(Fm+{0`vkLrZ1s!%Ap&Pre#BRB}W=;aSlEZ)eI#s zUE173zPeC^qfQc=Y-FN$`^oj|=5N^RtlJRhJMxDH zPtAh_1u}(v@mIAlJ8O956I2cbc5CzRtvO@D)P#EA@UFxA;axcteoAa;G3ZUhuE3ov zD(A$*XkOIWcH}r>svT$fp49D9KdBoQViO~IDxbO2UFpFlW8suJeAXVqYP?0C#RE03 z9z0OyF*QvA&n0@Ja7#uOXhN{17)l7+((?pDR_ZLvM*BJy9s_K(_QwNSv)N?44PN8v zFzw}m1Txh72-5P8_5X_;`_EGUdF9^!|2;mX{{Pk4x!Ji#D~tF3|3Cca+nsv*xxxRx zv@*L=sQ)~>a_|5D9-l9W|13`qQ+JB*-h>1gyzk*Xj(EYk;0EjJB8jr_Y19wpYq*v4 zU)KejW`j{LO8h5c?}>MDG^9knasNE@A4KO<2}Gejp)}OppbNg!^w#mGHzOWUi{2fE z3K%M@;_KuP=~>q++NCIHA`L<9$Hug45KGmmEOuOnX)*N<;Z!$;Gk~g~)g1QK(X*7G zb4Xey)r}r<2ENY~9i(b>qv}5BCT2Zlh2QSCHaj5S!bs50re))t2eZMhLsV`|l+@#! zozYf*=dfdVXJb5UxH$YX(1FDBJU746n1%nF6PX#O$Nw4xA3JRD-2g>sKl%iZFE4_a zJO}KnZjD)aC&_J7(EB!JHxoFiWTLpL*;_=4bvi1sc$J6O8M~yHJxG;AQhMlj-?pbF0rZm)*+1dnx;o{ZV#bc#l()*h;WMV1^Na35qwy`5qv^WwtGLK(bbHhsAbXWKZbOi9vZc_8 z-gSv}y>k1sLI0Wp%8ZS_TN(fp&!ZC{zxMMP(?U@tAf3FrPA6Pu^Lj$rpa~CqO;f(x zTR&~t90b1>g(jkb7McjkR*DcWB+a6c;iQT7~5r^N_X&aWDc$G z2*YUWhEVCgsGCDzMNFwy&o@)Wj!|LRW=F2 z(LumaEI!(DnZogxorykY>Zk6Y zZ?~k9D&PHr>E8XusZ1^rtxt&H9%_Qq^f#BAuv4*IUPRBhNsG>C!)r=jduw5G^NWOj zYw(1RnG&!_&I8Sl`cGb;aRg_a&oeT~zoV|_c6PFNa0J~o`N$VIgK{ZHCc1(=_k79o zW!|6?mU!haqb@{~yKLN>rS7coq%1DlF=W1QF#}gqg+3Yapuu3Seqf(8>+gY&TG6mflR+SPZHKoATl!GVLlhI`Au$P0Kv^V;`ZD${AlUo-RlofZwQ zF`c!AuP!Dkqr>naN-u_J7(& zWvT8^jn}JupYPjGzu*_-;K_&}#&~kjSwSOg@9%2JfbkM`VIXVvis)e7dxJPZFo_cp zqwQ}LN&~E?9J#HYMx_2?Lq>f{=|)P|F_PX`v_MkkTp<)@kJQ*8XJE9gov!2vR3DmEg{e2|&{w_jxRKT}jca`$Vn(BpTRc+ei5ZaE*)7pl|y^ zNyPWvqr4{tb({Djk+T~?a(e!H{tX+UQ0%SdU@oB;BjvWq+afFu#cOdvTAZF{GIEL_ zifH6LzW4@&<2~L`73faMcI>banoAmwVY+AoCxCQG`98~69Wk%!x?w!wvg($!KV zRoMGw1auvo^8Hcz%QUDV@AE&uVbBr~qjbX~+nRR6=SkI!43)C2PS zkv7h08|Ys?3r*OQcg2i1WqC%$AgZt1=fqB<^A-4c3XlSzVA#&e%#wPbQ zwKTUnpEFuqv&^`_u7q**A48ktgqEDQ;5Q8K>d3o+9HR%_7Jam9ysqxIpS5=oK!yK0 zXmwsx-)LIay@C|SZ`5`EyBv`9Ixg!r6n>1d+N}A(^3yN&|2g=NeuR3{aT4`TziuMn zFUbGBICr1_`@4K5;6LUcEiA39+~Ys~@SksY>h0%-^S`*fT*&{uxV(6e|M(uCyW>A% zn}hpyP=(HT2%--88W6F7N>@1St>+y7S=8@)mLK*`ugf_UO9F?sgEvI4G^PNx}B*n%4gJ^Q&uw`_Ajd@Qd>gG{egOs<-h)_{^b2E=?Nx`N3V{}rX8ia z`#V0sONsv~Jf#Cg z^1*$E0#-vIm#^Mtv@nm=(TTP;O#kIGy?!;Vr*hsEff(F0<< zQlQ@?W0bz9N)?{xNDriK(A8w5uN7w`IR z`@wP8w;Yi?wHg8-$rYV!yQCT$U-+0aIVy3$+3fuKmufw~;#EV(RduBs($>S~Aovs` zNGR;3Dgt(ijSCMo)Mh&g=>kghs*{(tLxE~DP zmp?14q1d@{8yLpJX}%n;>#@+t-26guCqO_?Qc9&-NDzEugVm4KMnc)WYjevBt4mYf z!WjN0e1JH0Dsi1RT;+A<=4Gd%6LK8kUp^B-Us+=RvTTyn!_g+6XUbt5By7>~*?qaK zMg^ysI6TW8O(Pkpr|kV#CsEk%@!d~0!*Cp9=PElkM8q7{tJA*-Kn>q>(BrE(!ye){_oP#!oB|gJwD%9|2J=Kc3NAl zor89Bd%u2%x?h56m>f2tH8K`xr6?HVSXt5_eCHa~ae&7teHz}&dYmHJ9FL|KPy!NaR97(H>YDVlc`st#N@WBXgoQxa<*vnWpT# zB@xLVE{j5x^1v&0p$DpE2&qFMriO>Mw~;tQtn_9E`%<#qSW^J`qZ+E&N3Rl_Vz3_3 z&BNS`hePyUN2sjAXdP6d9_c>EV4!ISh9Kze zi888ml?zHIFC{Lr;C;v%y{yH=(Laa1=%X_oF>~xq&kcUNtk%IpBu`T|__YUr3j z6L=3@c3C`1^$NcS^_Mj_DkhPlWvowbLoRUvD%!*`Z|QP&6rNsp!9ICfe$m`?GJV3Z zxhgm3&452Ow86j*IIo8{1EZZ`ct16ORUXnYk;MtE7PfLnsfW93vh0v6`G4)LRq3m#)8F2gLTZ3*`JjXEoel!em64WPY zyznLxZR!~42nu3qA6>UQSbUsponA#4J&AS?xI&CjM3a#Iq1}Kk)}0k zNTElKGz?&6_ktuCr0_>pvkf@IodCXcuy7g&=Zu%Pw@@fA4{9alTdX`Y9*P4^X0*m+ z9dlXkntKJm#%JEZt?GcGuN*^feg!!m4clZ)UJg3JYveXp618PEcFjSP+=!{;{z}25 zVl1ARu6AEUTU`amB{r#gQ5J!d56k%q1t@P@E%QrjW#;0C#H#n(0*I)Q5@U<~{;Di% zq^UsS8M0wVPjLZtu@R|iLQl|uUl}EBMOw6aZxtrRo7Ed zolu(ZmgMG@3^blS3PcpCa>Do=mE%^0;u^*wcDG%(2}Whq!)Ps zU$zBh0j}n~DOcQh`q(GDB z?{{7l4${-3o95B|mL&?&bJ4(*xpjwZTb=gP_Ga^-y}R@FX|uiEvN3VjozeNpXVfpA zi6J3C;jkNiAx)Kw9lXtw`o$n~3wo<^mS1=Ap6+%w+FKyc=9jFvD41|k5<%cBQdYtz zu!Juy)#*%tN9~oqyd@*!vbd;%67&VrFKGJ+Y20CN5-0mzhrJOWd$t!^-yhOqoz^cI z^L6z_^A$#K&3Z^-#w00XbP#*eH@znG!{*1E?~SKXl4gbkK+GExR4C-TZC$aWmGpa* zCSX<>KLu=b7~W2faf}*X&RCPgj{<(3d6Y)`=jT$&xE7q07v;rNSqy7t>Y-X)e!DnJ z!LjR=36sc|R+Zwa5?npaW<6&Wq^@e=`|B&K-W=nIG*Vu9)(T;z6jRax2W@RS7D=%d zl3`FwGdkQ+%3V^pvGTHc6h(5UMKVUJgiVt!nK-R_QN<<<`K~9;>((J)w;pxb-nvKJ z(5m~TL$YNX-y64x@^4;vwAYuH zo!9GbCN^>DJJgB^%QTQ%)1qwyH^9-Uos1u4!U{HPT^Ys)P$>MY{0?j|yUR`V{uh5W zBbb>{`_TZy9z(3FlcKfO>pAEm@T`vod&rH%D~FF*3wu1Ez{_4^(ydaGjJ=qbx0n;# z&B#0JCT7R$VIrx{c^BNBhyzw2o5lcE8~I%zjtP{09j#BM_6hV}PVuJHNs%C35;9wd z?#9@LD#sUYoO0o8m8b2(&-`uJ_R@`lNUo}Ti3pkZCUHr3U8z1mMb@ffSRDO4{O)E5 z;(RP6@i^Rs8lJ3_t2IBV2K_B$r5mL+XFL-LW6R`YV26~qm>4r56Dhp#UhEP^o% zB;{Et6De0fZek^_1e{M>RCY2-+3E6^8>A?cA`NmPbJV#OubocOpzO}9%uTR3yHF-z z97vQByV4mQ?)uI(PY|yQ!v#d3(j{gKETND#(jR_~>u`-CU%kBDDoplw`iGRQ|w#QD3ePL!cwvm-@{&7$}{PIQC<=!ra9s@r^5qO-Oe{f>pZ-4{;g7}a5x%vC} zkMHrB5dX2fx;VeEdLRGshyQ%LQ*S>vod4yyg{6G_$NbXLef-Dw_>|S;`0eF3uCKD; zq;bEgQV1hCwfb_G$Pqtd{w?Zm_@L3cjwP`#x}j1|>vmeKsXBD7(bxtKXCp zUlQH=De*-(Gm>OR@?hSL%0iXS?R7);e16!;WM4Gz84a#rKGnPMq)@{kCq+(tz-ZBr zbDM4@|3WH$v-kOgVx<_IkR#X43_?D(;(By>@N23%2!>QKtsCA$IpuLXAS#4?7DO&F2 zl|YVr$OEiII1@hh%uBdkr2R&vhxwO1A#8xjuK ztpp=n<>x3nt5r==m6`Lo8Q0pTk&^fm7(l#3DHpd%i^toJl>i{e4om z7)^3x9UM~IVM+NCF&gQbISdV>quy#rqT1fD7Or;(8Z&2ds+=D7vv8#27ITE~$QhUN z4mTS7>@RMe*@?>`g=h54O^ATgLq6?nv0uYf#~BAQBScl(IvtIf zUXY$0$3fC-oMi)GtIAC(fy~0W8S-%fzoigTj#WIqu@KTxAreR05a~b*JoJ~n>Ktx) z*Fr-1vwwp~FtOm!z*Dfv{}^sXu%#*CS~w6<5fop)VAd8Mwdtcz+(2GR^EwJH z$%a~Y9VT^52$D|#Yjb#++#q*PQ+mrJrM&4lkKA^a<|f5ey*Iu6H~3ilAA{z97yIAr za?$>`bZ`Ir9-sNuQv2WP(xbV1>)*e?=i8ln`?>!7FDxuB=g3qt@NdvhH!Ocnq9NA@$n-^`?kUly^3m?G=c_$t0Q;&3Lr81Vu-(4}KE!56!CUNm!Xztlw{oZj!YQzZt8D{qa=@3xqUt`s_H z&8&?`Ga7dRUVGzva$36t$hhYIu(xP1Q~J#cFiAH4_#vxurSuv+#0F0=zj54r7zC%AuQL(>CV=cVHgX zW4;EWc5|AVl0-En2C+%WYVuX%UPz*37ahzQzD~xelUkzYG&oBmrIAdaLtfk1bxgXLiLX@^EYJ#yJis!Ajq=B2n5$G z8_Dc7BWWTOzAwQWlGTA|ynk8D8Dc5j9b6%Ii0c^0=f-w^nwak0lxB8Q5nLJ9*`!

d;c-ApLIpey zW7{`*Ul2z9|F`#U+ifICg5W#8A~I5&38VlJASp@$MQJFB%Hk>AmXxx(mST%RB1lFF zL|_nrC>E3F^i!XC?wxb?WuNyK=6yb;zGU4l?r!ek0fG{x>{2tbyF^6z)!f|N%-k*z z7?i*J(M@*T3Ao`^qR>aA_l7ChA;72s{LAajt&OMJ7~cUBr*94}rty8$o{!rb&o`dD zp*qjDUcJyhkk2Z6IPFuEv$JOJAN}TF&C~T+o-lg0#dnn4xPYA4Qxw$XjO}qz{}Q z*2s__qZ2A2sYvSt6fc;_yXmuM&z{D9y6ovN1HzBSCu;U%OxsxxraAX5K@Ja#6uRdo z+KSAjpI#l-WkWG{>sLN8r?%->eNeQ$zGD_sw_8m2lkqq?t1HftIu$D}JKO1eIy{ug zE=w)&m~Tf*rqr%CG6 z6=nS0wfH?#S);RuSXUwlU6@#9jH9C2(Pk|QrwO4IpR9?bgSYHA5i+(JwENH=bJk%p$L)4i(xRXCsR0TByDEF~#sE zr`d2QVlV1>1!GuQ|I&sRoobfeYTZd^5aokDhQLWU0VgU)F}_Mbz;}`1G7(=j-J&?nnUrJ9#ODSr z12;{^gEI=ta^}#qs=zF>VJj({{u|h0#n5Mii~`BeqU{`A5Yx*U{SYuoe5-va4wa)S ziIHnH!;@EUU%sjT(umf#Bl0^Zor4YBQbd3G)5g|DgxY|gC6Im=un-C{(o0}t`n#*R zbjNGrGMTVUvx4a0N>L&ce+z^+fLx+-$E;EcjZ45$omc6BU74*72u<~7YxCD%H?}a2 z)_c~`Jl=TrN`Y$g<@Uzbo9NZc$h`k`^JT;!-&)_?-l(rXezo^#ykKi7pvhdIm*SWW zM=4?$>YmCi&R`y?s}TE0U#`wTdQ8-HbCBHZe_|feAK{gVDTR^$y0p|q%wMrbLj?II zi6=4VP2N?*nFKD5?##U5^9E@twc&kzCU1qauG%jLX(ZKA`e;#*j zFKs=l z@#+%Ywarox!=Lini!e}-cA3oV(C~n{ZJECsXVA86xPBj&m*(vEARlucak3+oxdH(i zUhn)>b{|?!X9#`)FP2&m9RegRx*e?u^r&1lUo5p(`kq7@mPVzRQ$4lt-8rVFV;K_y zLVmz_(K?%DpK(wtGIP1OmDBm$X!qe*_f0RJIFnd-FN@RQ``#V=)j*z5ddsg5b;>*e z=LA9CoD!VHF%X*bYS4BSSeNTib?c#XLx21Hb0Y<-?>DqbuJz@shE4aw&|gg^)C4kWMz(k^_^F z7PShQvn6Lts)E-hdr>PAGbO7&{lw@TwH#49q{n!hr!}t><=Bq3m}9V(1t_O}xGDuV z6~m<5eh#OIXol-++Fn&ZbpRPfm-ERM8X<~jzkU|YbDc|U98Bq{R9E5#JCdxH>o`tI z9JwLftm7r5N>bDU3O_(K=JM?~E4QO$leOx{M<6ZUVjsN$zc*5}?yPZ3Cy4{=jkKh0E^>)2| zX7B$+2=?IZ|2v&KH~!z>!`cJ*CmJNfqcz3x#31NA05ckrcpku6 ztEy6=FOC-EM-X$?;*VK+3Ws|faq9B5_%!QJj@J}`)uGzLA0Q27;11C$ zlr*A9kZlTCt%sF|di1~lS7c(aPjp=J2Mbh-QntJ{ly>?*YHF4~W3y5Mm6W11c=r>Q?Y;Fp}?eIl6lqVD2KXY^^cH1cFR z$?e-w((fY#7MDk*xs%Ob zeq35w?k?Rc&E6DUTr2~jy$=C1Mf0%UfH;b!TSJ33ZFzI#WY2wnQMU>XSQ zR;RrZ>M2p2wE=H>mhOXr&UpzH_Luv2_g7X!BkC^75&8Xg+THZTex9VCCM}f7!0fXZ zO-CcO&61*oWi+x9h#lB2@2@CkVbx!SvBDX+k6m(*(V*R3)j&4@_2X_B;s*n@@#}y~ z&1mW4srnxU$i_@acb4wRN$Y)}c4^d!?m6I6;(Y6v7qHu2EDdTgJSf=lX1G?{O;1C zqFNqFR8;*~(YZ<02I+JH_yD*Nb?-}fdWht#7|6Xaf>EBiBm@Xht2iEK!w&%{(!_g; zT!F2H+}t@J&g2ZX%1XJLetMWp2NiJa9p(qqqV+K=&>2~@Ih_DzsXbtJ%jvONmsP(+ zi<~ifQGgczX!0zmQB0C-P(-)QU*{S~lYA5+c#Kc{8Md1ted3kws+gXr@@EhW*#obS zYwn7!s1-Ghs6#q%E*y=szBm`uuNK&yke6USn4S!a9;dUd!$H+L%qGp~Bpa%Ot=S)n#Ea0xxkm+M1*kd@CCgxb>O2Ma;BQ#vI=#9D8r z`$=-|e!o15Hr--P0_3B=czA#Rere0-&+bl^Epob^@&t9&mF0W;ca}?3=mbn<4vH^b z;$>P*e=(QKrwu$-U0=-swjY*=uA zy+dPH2iC!dIl8K9V3N2**y8md85O`u@L#qq%{X^D|Hs@go>)VSW6>LOR(JsS6iaeA z31EvlJCstXxd@t8_Fa1g)| zmnHFb2;qhKE5L9wcS%<;n8cDuT(G)FF{_EAB#WYc`J|oIL{&5Y)ZF7`T*Q*kMc8?l zbOS+t(G4R0V8N)29xP~`*8|W4Y5kT$BCSw*Ks{Ioj|ctiBS@)5u@1 zl`535vJ9cRXsDP1$R_(OpMO4JK~1| zK+X_Y2@ywGe+}|%9E~CI-@`4{${A?f#?ztOHvy%K^=WycF6 zXB=`dfuIr`=+B4#(s@5wx`qmn5?ldoI>bbOQ8)U>zyHUB1u9?{O;mrN5CkEhiWhN| zjI*SLUde0mCSVQRKGRH3Ahft@CM{q<`5?6BOhe)@meSX_gaQw@laIo_wcvGr!0aR< zg#H#k?7+5x57hvfr_Xip-TS#Pn%q*CoO<%%ORMd@j(&}kEQY-Z^o#GWZJMtW4t9lC z(1Gsg!{zB6I^{xrQ$VaIF@#gSgOe7l2dx#TH`%^lb)HK=Cyp36= z$>s#E7!E+{M<01U>xa-H4U6sjrlkRJ z6oWGuKvrlMPJkWhMhyKnqbsQ{AzVe=!FN%ny&Pyjlb2Dgx=v+otfL2JBm7^ELv>^ zY&f>+b-2?4qk(?<$;nM)2QbKHpx+>K(QlA>i?P?ab&jn=F7As+{ZJjYQJSGNN}?v7 zvM({yl(XEXJ}w~vAc`3xuxeD`f&Ij1EUu_S0|cme6$hDI?S=zYlr=o`5{=Q)tgX4A zC3@vdKn-bqFu?NKMl$-x|NDQ(PN813XQUbkPpkexkSY0QFElE1_l+GY^~n z0FEgPd#(7SY3MHztjZE>Ri4$ggA=*druIp$UNNp&VhbONNJnWv37&FNMG&T{U7 zZQ=uG&1l9^GjdOwkvuLU!p+z%;O%Ecakb&Pd-TXD@u@JXU;%`x~dxNWDA*IIMqmK}0Xxkj+I^r9%=I=X+7g1X9XM-C}ajpT z0hRHD0l=YRJ*1Mj!sV%U0J-$P_I%HW2kMlB^edssoWnwCG0q^v2ak`3NH-XJWCMoD=~E9e#LH^Lo=W6> zOi7IM>0~rjVx7|m``$SDQC%$kT*($5&Blu*iw+W1H>x9SeZjN>;uHn_L>mZG+kEdtL&=q_oYs`Ie4O&=4$)lZ^f(1e0#3lz2mVg| zoksl(qTv_qTJ0~Hn!sZPq;7ku-Ce@EFCpsw--<{f{6aJwod9UzehA`jtC5fm1C0SU zVh#@fc|NJt`C?1)TVwP;=8;8-66F;P8ogR=Z*Q+Su0g8@S=4G#Jl7U6SVe7rI*jE0 zR^35%#;W(K0fLGA*n(k=C&+6;ceUEfJW7WjvvEEI@JAoPMnQ3c3RHWLYkd!so;UUN z78zqu`f|Qx@)AAOOb&CoIwT%Z%mZx!pSHD1|kdFaLwRHzC9o~46#0K+# zqOgnygEScy(R9Q~Z&Www;IJKS(&8uytJY6J2ugPK71u`q z3m0?>##VzoA7MB&iU+KaQ=tdm`T&7|-sD};Y?VdNEgO_HIkG(-kXi}P-mOE~>!T2zZULyy2C;8430qQ5P1yr@q4}=;)W2RM#CO()vVf^5cBKyasEB>|w?X z&;Y}H?$PzZ9`OZm`Y9Z&xx2W4*m8>L!SnK1ZPG|B?`T3i4X{TLF-`6@y?0mDIi~uq zAx7^7$xDuBp&T8UR1RS-Z3TGsd;961^+wgusKLJ{_F$UO<~*Bdr;qOIi`f8V672{Z6os0w6Tzw z<`T;x1JyUR9Z-P=SRCE1X7Y#P9?=$B2|&XPt{veVAYdCO_hG(yRTYF_$Q<1m2B&Xz z$X?Cci)svzg8(8M=KYK}uAT`ruRf|31>*!j{AP{5NBM}YoAwl^nhpUoi=7yj3f8$u zj{pVZ-Mxr3*HJN5at7ciTNWDVrhT&LLKM)+(h9;Ejh5iQaL6VE(+f%<2Q+hJCbIZ$>)58p%QmNQSQjbK(i$F8l!JO~9(Q;+DqJ zkcw|xaQCV2iZ@0+O&$A>i6HFNKBREL4yyo)5shkk2z2}mg~XG<+O?x6dbq@|>CZKQ zA_iaR>)En6qmK?i4gfDO%(Sy$Yo`Dn4VKNPs}zW;Ml^ZzX+d;|L>zc!#53Zfi8+M> zTrJ(fgn+}c8p5qz!;Rk0Q!+Lq`xV8m^rtlG6s_7@r}=mQ6crct08+`21sa`I2h#~S z#L#wrk$j-jnHe8|60xwg+7r#nrt_ks8gcO405(beU1JviM0MD7L}S1ojly_ON4RQ@ z(-l9|WXTw7*343p6&zGoOpk^a;gFcL%W~9cicO9N$D$!8TW7)|4<{VGk;q-qdbQTi zaW!Dexh-j-R_(Twq=ORzH^?Y(22Rk)nR-I=5Va_KzC@{-!^mDrsC+=zAT1NP?BO17 zW3)e2C(==ZIZ2RR$p6Ys>^fb89?t9g~l+b??C*41Djw+FtEs zT2Pp3tYymaf^ANmfc%&v2=dmFJTn~<%=?6Qk2%ce6)scZ=@*I6k2Gg`?H1!58nv9q=(poh63_FXojsZnk zs}5Q>4I2;^HXvty7%8&!p$5V~$RNaos3k7Q)8rWN6aj#Zw5@_{G~HL6&M|mVXvhf@ zTD?F*MFwk?;?ay|wP_y|WS~e{&_S|^VZyvxN&h1lZ5K#Vjg5B1HPo~=6y+NOB2Uuf zq=4nF@rYn_88RjjfykV`YKOm4Y@Is4j1EGL3Ajsu8f+I$f49NvS!**`X9x=bDcUfh zJDDJ>?p-a2!cHL7pdaH9$Za8w)KG6i+j>B&4=t>7jOHK1&) zf3=L0O;DGEz^eIH2>+}31%TER2t7m?O@~t@LZtm8#qTIMP$+0V0+8}+rC>51X9~XU zn`@=Zp78yz(Cxz^{)K&9{rgJ|BEcw@Kp(OxMKdJW;_YG^0?!Y77eyo-lnciP*pd0tZW? zsr7vE^fF3XQ!?&xGZGinR<7}eb0H&E_xGbUG!N8}tW!gJ)=pS%C-aoaJGK7!`9`$) zEPDCsO|NP~7pYR3L8c5=8nd$<_D(uBx6dM}?h7i!q zp3agKCqrcXcIe!n#WG#wa;Gcslt(unFfDnz^<0mpt=^h)?gobOsjqFI z_d|5?06aD~<1ryRwL%8yR03_#Lmm{EBt}4os+P^Yq2pQ5xCV&WK>^mnNx@V?Q`X%! z-!#^7)Gm3@1j6<7G44-2aD_rgu=YtloE#6_RL7xF=$ps2$f0*S&9@?TFw^aH;zEk6 zwUd6o4ij;~s9P#bOHEzFbr?-G(R93+J)eZgC#=w+tl(z=@dt^vKWTZKyc2XW2(8ty zgXdZd38z2tx8kYRZD<@wT{un-NQ*fg6%%#(o{(J$-xX{8kyn?e$+%z0kPuvE%kgR` zBc>w2=iE?_yap5~dJL_g4^zd?Vkg0>ef8@`cw1GRcNUZRth0$;iuiJTzVJLS5ESLf zJFPsr@_uxx_dHO476jp7s01OMs~!~9nIuvf*L@!!czE6r1>~WQnWV5X-p==yoG@X{5EYJa$ zQ0BDY%Z1ELM59$3r5BaWC~ut;%hU!g=wgqWC8~jW;p{FUuXUy?@JR_eCBLz^!w*Ba zfYFn*4q`%Dfy%3Pu#tl^lF#CFQDz8)VLaesl8@?uCZ-FuiJSye1d8t~r_s$b|8u$i ze}ZSjm#71;uK!Bgc1z?= ziNEF9(ESd=O8MGA+k`ZAKGkOQWNYK;#>+RG>(964J%Ti!m+hdgUnjkk6^yxQsDiy5 z5EmWZT^U?g0H82DjvIa!__2bFv4*Wf(o{?1Y%oV%o7mk%lxj(B|7B*3;7f zLy6Umc7Cj2q=cu(8Q4~0Fv9`-ZHJkEbaX)CL;{CU+d`JBC;0xMk7 zk{DB{DH=8itH6t=9L0iWjFR9JP@Y5_x8#}>t}`{NAajItl}6-mD;zDrHL)I}HCgOL zZLyG(k|;?L05Ml`x?*<-5w|}Jq}#Xs>j4ASMo|8w2q&J9SBh!JH4Rp}V3Sghzzt)H zwB`~CUMQGbuZ;Od2jF5pStqJRWmB`(hm;hXvPUwT2TYmS1^8XKt(%Lro`GtrQ{7rH zv&re);w(JY{;MY`E1|4O2gmX#|6}e(`Il7W_dFV4b!QiPD*k@;z$*ULROd)RRmOI@>w69JF zqu8bvk-`nqbX4zl^j;&{h>S(Oep$y2?xoS5@`%-^dYFkDp(ljL%3+S$`o%o`jI8WJanCFE9cgtDA$Ypdp;zX*u zRh$?>8uxWvAZP`%wbx5Z_Zh8dgbcKz7doha)HGS^8(sW&da`T86YV;XgjI7?RF~5T z(*X~r63Zlg@F@e+g!uddHkZgaPgCOz?mk+&ynw(*XUb(v^wyY5n?uVazPFM4b~?LE zL8N)D+-#=Os`mgzf^?wEOC|OG`KUzwiHXTpzD>*W2eZ{ol&nyT1Of+qrwA|N9ot)%AaK z8VdgbYQn#4JpR+GSAT9sCf3cyZ%T%J|J%ma_U5aXrZU8s&5}{esKT_9URme3WlVoT zPa;)@G9ZSmH=Yikh=@Q|W5|xhR#WJ>oN9koCAg4>n;Tb%V*m*cT=e&*yKov}rDl*F z{fs%8GeBb9nEm8fPZaW4=dwU%^H+q%_|0)LM4lBGHlBu!BY^2p*o_N)$02lt6S+cr zrZ;UAfa&OHtauLcBkO0y0T>r)!(?>oyFQht29>ApOfYFhN%cbh>st9@%MbHYRs1Og zkss>35NuAZ9q-rJw)s3_^&V?z;->bsN8>ks`<~y$O{+TMPpCT5x)#%#Lf#MA#A{5w z2{oi%i$-?EU_Vl@SCSd<7q$bw=q>!&%CsD3LVLsa={^M*1J6Yrs7IFj4T8OZ_9wgz zsie-9v_664%cn-Q1#+tQmX$GDo2I+6G04<64D;1;O9v^CF)9yQqd z8;!EC%QmBE(^uQ!`-U05kVr{cZ#26uNoO!vl0@W10b0@q@HAOdlcrKlayb`@BPY1G zH!vz|@&qd`Tdn=c$YyCK3d*HpYr9I-^0;;L)ml|^@M{eadKol4#oXmk>bkvsHlQRSn`?-R zX19cNSf9K3zvYz6xZ%&(TA1=7^|dE240O2=*y!r=S~cqGT(!bbT6UJf=9^O+oOj-q z@!vnS^<&u<%n+PXE)r2hSWfFT(w}_=xmYF5h^EM;AurkjMj@UPD?1f>+2At$p-R)R z{x9Ih`2~G^j{RTv&W-->TRdU?-{Rt8=l;^&8~xvR|6CGp_FDS5WdAQMt3B`O|CVmz zzki#@=&ej-FO+d8z_4o}hrwipZ$1X3qEL1e%q<@VLJo@{sLkl~I6F9o7)0d9Zw*e$ ze)(4lrG^Kr=f#cAT;z0)o{0@dVuR~d#Tc1c*M-9mdT~I38O|G~Vk{~_oi;gd{`6Dy zgNCDcug9Xfl2ZGdL#$=nrwXwnHn|++zH=Omj>f^mkQu-}q-QMV?h4N= z?bh!OA6;gY^adg6Unk?_q(C1^+k`Xh3j32OET?a-BgU=ywSYt#A5hMs7GxKWduT4D zLuoDmw0Y3>A!+e-RcGYumLpfTkcMQhH8~!Aw&jtDYYqBPYy< zL#a|ivr0TQu38pRDO9)I58e)-q3IZXSJ?wpBla~T+7tJpR^I-;S8`+=d$o>E(+#T- z<+y(=jMGMDQJcJLO&PYtkbqZ=eLp)8?xpBVN-;`bTe}n8f&(V1+Rh4$?H(XICY<_d zLUGZwz~T}HYcDIu0B>JQ%NLZoWZ*mmh8U0zI*8#^W({XQ9pu9!()4p+Oq7$HQL*o^ zJ1F1FHaL!QGEvHuK=DQBT{RxDf{datVqWvi0mO^s6DmAhP6 z{+!oJ~^u>5J@5)Mt_&!7#vtew%H90`ZrX zNcJXw4K@W%Q6=TblH0G|!p-=z&F34A>l)f#UozCqk7>BYm66feXr_Xm!=?~#JrXtGNT!di)=tx89?#g*#-n! zgB;}elDuv(ox_<|fL_L?6^OUL24b{M7BD`7fYhh`l06PfXl5t*byzAn?Q2tqgB;j# zB_K{GhxcL=h3oMY(lYd-JJByu7f34oV+vI%p8j#ZPYj$A?)2c=b>M)_}8Pv*i>GzlH-eaL-|InF1Z|m5z%T*-^9*s zsbs^(SSuSfMIH2M$4cjNhY6uQw1H|yn-Id@SjHXPZ5Qe_jU^Dr1_!3aN<+iyOiKtq z39&fDOe1jJVfzq5n%GWP2Nse#g2w{OQ4-kZaZ=7N!;WOw@ZorY^CAo1S=h6 zF_iQY9>%-6qN#ykH2D81Jph77>$&4Bx2BZXETut=%^pYPNxZ9l+~AcLgOXmN-w^72 zM#;EH_3p8!6)z>V;If4 zZ5!X1);Mubxv^$MuhwJ-9u}BfCX%+7u&)C1b_Lz<2`rm~{(H3Fb!`0`h7@`NixsV5 z&6sQ&dz1(eFQW?+;BDe2N(ttiic9B&p1D3GqOM#k>{XV5gCV*d$v2AdH0)YB!)85a z{L)Jm6S>JqSMWDQV~W zu)jr{UyiLfP8RR1^aSr-kLg|9Xj3Y;y0cq#PTEGhpB<4=TKb9h$3?{^bdMVtAJakn z>S@k(J{NKUUu=Lk-#f9sm$uKx*^DlD@vFicY{;kkky6V zB}SHoLN8N{G6=X#0!{fua##sNZFjAyjQ#`R&wnqnS)IQYWv;~;rpYoMYevQ_lK5mu zSUyPGgZzjVVQ&MuGPTEnrz{(*UpQ9t^oe$DLMeY+oPF7_J$wWkmeeuXVbdJq_vf(6 z`6tv0hxNY!y!(PaKEwWJ8T@~4^uJ&KsnGwf-0j?7?%wEszx(Hs)8<M9Z}a$S+LHv_^%Q%VpS*p$`Sfy?ZMBmRBz=4Tc=P4c&6mHzZ|$B}vjW(YWJKA^ z6q~iJj_Z@eDsAWT(i2uo`ZHes&TYiB4xUmuBy;9e#BLrpOhz^PssHH9MD?adTZWH4Trts%YA7DwG$P*oL36Y&$0tfPEDy4AyxNkC~0Qord7lwoNd>U zK!{boT%>*OKqqYS3JsG{ahy-;CN7Wh0uT|Wjd!E7zPfqgPN=_|SDrhe?nUDog#O-O zw2P{}4Sy)r`{}0$y;`FOrca~l2>2ydmJ!~GrjIfFW>mT`RyGD?;OkL0JFyx0kPG>( z3KtN2YFQr-+nRhamxpS}N7c6K`>EP5vsUwRk5$L>B_?+4y>T7pBHCfqK$Wu0Uj=0x z-_jpM z65TP*6vyH+U>T;LCZ*-j3Gc(`p&e<=L3ON(49I``+))%uqNtKkpuwesCk<343K*3=EasVy<%JDG|0A_;&?iMBZ^e$ds#7#{&TtiOHpCy4p@ zBo<$IM@0|U%1t}REgU%i@_KViEwS@np#e1d2G-uS#x}zTgXvj>%eR=GkCrl?@xd*P zVE>7?W+@1!Md+gvLOWp`f3U}?=@0FDO;|u#+C5!xE5c5YkzD;EJXdKMty?RfF>T^N z+ypbo0EF3Y%M7fF3T6mg&I{XUgTi{jVa?0~)0DIDa7ch#C{IDeit)ZP`eNLC8(SXqR;5oW+#?1&0*E2s?nRvvQ3=!4ks_p6l)E4H4Z zUjc5v7by%&Ri|mc62zJfmkmGSg@IgV-id)eCvprxIGqi|6dCty z!x_>Kn)}?rQE~R5sy6K5^LpzQ*f{B?FcdJ5F#0Kz)9JK=)*a1Y)}zWqY7UbS&^q`I zU@~i0FPOowWB%YS%K*rp6nIN=@bb` zUDiv{bkwNwrmC9Hn~klP>(AeBY;C>T^1NO`$>e05^|D)-6rBt$$@eL?{f7*Eh9oJe zWLJFdUd~>Zd_>ea;Dv-S`oZ!;>uyayhuOH8$j$Wu!}()+Sya`YT=seI8;Heo(u~$hYPNb(!{T&?(M4aqh>^pDt&o9R;<>i=r%($(1;&4$_*-} zG0Rs@`ux%WlvU`l96}Ygqcm4Cj*W0ONl(B=nAKj)q-*9#vZFE`w$^iDrcU*Z^ju(p zCNy1*a;SewLA|E&8#-^hNUnDi=1IpM^&2;%tsYGvw9nBX-%kb*2%sJC<))`9+!&%? zyUinY-v@(_xfL{5*7Qo4^|rb{v*ZW_``)d3;r^`j%4VR<=bOz<%OFH9sLSax4Y==g zmRy1t(FC+sG`hVObyvM*S4)RE$k(DmW^1?yiL>RK#rxvTL+GrtDm&3-{b8x1i=7T2 zBfoeMEp<8$lNd9E6?J!bK|44IKj6$nHR3?`k;QxGeGeK>`YnaBYVX9(hXGi742=m*jw7L{?6i>pkdrDkGNlFI4$V!802&~EMKxt=F%|5q|m{h~fT z!~U9v_br|Z`@egO-Ie<{_J801Gt)5rn)fJ0%@L`bTA=*_bFWn;X=jBAp<*;l(I`1P1(W*q*PB)LZ~EfxnL@1k zxsmTpNR=j--Dlt-PJ#@GB>U6iObY%wM2jnsaT<1e$-qn#Xe6KoaoJ@|2jIQAQsZu{ zYD5Y@!H`ON^rBO#2XVY*JsD21+=0(VR}{Dr)Pr`bT~v37iflbZ)#QxeJ#N6JifBDL zj*?bVn!EDy>|L>utK+(I?MAiKQ(h&i*)nz>dSDm6P!y<2V@CCoTdP9NEb9_bYy~%l zYgEEZ8puB@7hRG6iCl@UsgKWy|I@j%bi@CBizm$gDbe|kT8kV0@4J5j4usd<$L#&T zytLd|^5g$>A^!6X|M&HutH=MbKEc{idSN0`}wC>sXBims!#x35gI7uvRta|`mKoCA;;u05CqpR>X!YVS8G~s zAQm(bqlJUL%;j}GmkaeAF4>jd)fN8C{7Lv2;hS>T&XQ3XC3+=C?4K^*vGUzQ^P@a;5t*5kE^d2KSc1JkHFwJFk* z@uXOv*kMtcG`fX=!U7~1e#BgO8@ISp1~#*EbP~3vm!63>_Y)hac`e#|oF-#MtN8Z6 zb?aOlQuXc%Wa!}AdBUlSJ-O_jdpV)Q30q93lA!5(L?GQIb1opaJ@=$=+bOjYBANV2DO zA(*|6Fh!4OknE>wMPhc+)Rk?BZQTF80FgHH=`p^x#q8Ym7AHGF*LdUbeO)hNqbMY} z+%q+*ji%0V_>PZC1a+EaFC-C-+_~%Xo9^$6yHlNYZF}SS#*;T>)ADTV)eG%J`fBUx z##Z$BuW&h-Nllch3h|nq7tU>>h<61Si)dhC{h{z;vKRUGH3mT~lFl--k(cRLH?tAg zChZB_d}ozL2Ujw1f#<48(k@SvHcxuAt6I9iBTOEwR?Q$kTraDYbBtXCmN7$GCv4M2 zkU}@Xog#CKN1%bFF~l%ZC&D-4>9w{?DK$+ERXGBDt*6u@pF zt>bL2#_Bvk3`(gYOk=Lay4~Q!8u>;X(&^YVkvW?{+b4x=%()3gUV1@Gcw@CLiwl*# z%&-u0{E`MBSk~-9Q^bs#gdD@0c$rajv2s1ymk?f0@Igz9B|fNB5tDMh4kyRmyLB$W zdC`)&a`(zjRi~mefGBs{EPrDfV?LN1vBFiuu-AkOr7@I82P*&R82RdM<RaA?IGh1O?9l;~6`qUS)?$RMan=~PObgt?$} zK3Fj-9_Eu)(i)j296rIa2|5{z{q8tp87RMoQj|ci{vkJRrS1~~ge%79a z@ai%REiEnK51jnik6zfJmkmhKzrAY$l)i>`=I>>)sa|B?xc9tjYe_d`{YkhX%T^>f zWk#MWg3{~~xhJE8WC(5YtoP>Lb2Ny;_&#Wm$gOsz{bgO~%Ns(vz|TEGXPU_%AEx9W zUsx(N?_euZ2>FYuFyE10FC}jd1<%KQ{~3~!moR*p_FDS4(Ct; zTM%?)>mt$_slMT4wSG_9if7M7_fiB9dP)fHp!cfyfj}SxHnt_PQz9T=%U~VG9;J$a z1(Q-iz+=TqOd*HU`~7_1+s7An0OCFG83S|n`l|-LoE%pU&aH|h=?r7e%w`|mGnPfN zdvaE24Pz!XdlFbS4mC7C&!DZk2x)SDs>RUA0n&C1GG1SkDw*XP|JM8LOU-Aa>Yq{n8oL{mhs$LUEn zRm>@kO;R#3{mN~bZ5!Yxm17eXB z$-|+mQ$ET1r~(#H*wG{Bpb~++ICO`U zh*46ST&l&H8!R@&zELN!kOB1RzfaRCAW=RhN3%V7c8W>tbau<9k{?Vgq`_hvV4?2m zSLhU3acsWfZ~Iy6jV(MV`ntts6vHcUJ2ES55KCL3;y-vVdwY$%-{{NyDqHJCNTE9a z$mPaWj4^b{(Ubnf1{*3Q0q9Uiy^dFd&@@5H{5t5kR=uUte!dpmjzhb* z3Jt$H&|WVeb8uM&-d8#FmYsR8atLU*T-eJ=)Sprw=YZf!W9C>QjkYQIg>vah-UpRN zpY9=nuoNSWw?y^jX0#PoqARn?bkJ|iW&YTs{-Wvs#t~D zilWV@1!V0}8~!jI1F7XTAfld<4-|+5gS@yRNnfhiW*G$~*%0Vbx!okaC}WbuC2qB4 zmcpS3E*>!&!Jmvt7LgoFfa^QLlc7M8k68{Z?eGYhdUHoqv7^5pf%RA73N$o;Z)9Hu zwpz}1)5EhAAsfO~*QD-*>5~EJA~uro6ycF;zJVTN2B_w(iCHGAjC3$zuabFh=QjTa zGV8ey7s-l08-IjgbpV3oNFLV<*ogg#ii|_}VD5v)0Ve#6r34IiOUPAR~f8%^0;6kV2BLrB{`cxjKF3VX-qK=$(cn*@nrmoQoELt=u=`!p@Uv z!gS?xkH|r$q=K`9fkKvHpRPC9JclmBLvztAJ_$3163E>Tre;!r5r{G~S3zk7%lQh* zMf{uvrC!{;1@L@^8g4M)v$wASbecjSH@Mv|+#_L*!}rcC9=FPJ#^Ks@Cqmj5mRT{| z7VBeI+ZZd()J7e?%7rJ5?8+qK`Yv(_GSENhLCsVP%BqO;uy1c4ok%&}E_A}$2)c|x zr-3N%#6&Youp6=E;_H<#a=97bQuBf;< z3mm-x7E#jl4p!PNf9m?5G~@40O%W-an{`um=EUB_yY?Ug+j-I&fP$stBI;*dDk37) zwb77+9{yce>Dq`#a{KmYT{_LGT`l{A$$5|0Yg$|YkuQ$((;+76%cm1Z5uA_ZU5}-G zb6z~@AxgEU{#3FTBHV=q8mskFAl55DpZQh@9CA!{o!8_1BrDJ&4Bg8d5P7ZGl;+%> z69o|5%AZ}j{Ncs7YeG=rF_!GcgqyoT(vaovY^*5-6nHz-{v&efEbn0(o{3L0+x4zA zb(}s2gxOFn$I+Og7if3}u!HMJw2TQU&0U1O_3Y;RNI*q026Fx$q@}_gDxKeVEqDkJ`xu z4(Z|JM4>0%tzH?`>*qnM0&8Pt$=_AcSdVHtG%&j|4vV?VV5>g523BsLd)HSQ2JbjB zN>WBSLj)yIXHr8wJVW_*^a?_8AcKy**r$3j=#OeV{aeuyV#(OU*^!CI*rK z8oD)dT@dEUUg>V5UTFJ7F77-*+G`$-UPSHTiLauQn8#jPeY9Ftei} zsNuE49zZH9azsVG*498OPo4-@)9h}Pmi15a!Qx{R$bla{i)cIxP3Tvu{ew~K#s0yV zsfJvD6&8%@z)3Z>wm!$&j)FHkRMS$dt%BU z@l!KxKK#@$k0!?#I_|*;CfQ#lbFUBu<^zn$EztVXDbS7#iF2tGpcB%#ToG_ML))lK zX#A5#ZM(k5#(X)2|X7B&*;@yrH|F^rm++Dnh|Mo4OE60DU!R@``&I^pwrhc7#Q2dklVIsTLA~&{M z&ErMj#epqKf!}Ih6zWZVrXWb*uRc4}8~lEg!&nqI?G~Mm-H2|-z^_hEOrifa8YE|G zDo4kY1rTFg=uoVz_mGoq8>dM6vV@~Oq@U341^zrX?7!j;;h!P_x!~`3XHCJg;4eyS zf%dBwJnaQ!n~FbIyM1Z52)A*m* zAtwU>+nJK9_Xnt8T~#B=bDSV(J;dxX6!*=P*f1Hdlgu)6pQaGJoI4O15p)Vd#;XnS zgN6of(1xmk*8vn#Z8T0lW;rIEktO)P*0h5+AfU?O%de0wXSD`b0E1+|8SRhrQw7!4 znhqXf7lTKHl7oG#hk>t!oQG*4m5e8MmX?fcZQlC?8Sa4NnKi1G9VOb4kLp;5Xo%mC z6m?1w^=LmklLHY?;G~(ME7x7NV@x$ie>)my7|3Cs&ESC65Fwg0wxjCOY}#s(+ed$g z?d?@6MUP`yk*94+J2E5(hAI&i-KpJFhMY9o60V+%=}NQi1|@}D0YO;~j-f$8dd={f zdOHv>RsW#o{TOQxy7%VSnf7Z|slzgRjS9R+q&?L2NWf^Jme2~`T{pn~lFl3T-AhojJ!jj*4*x!6yAB}-(3LT1<1 zj#*qp8)o``g{MjJYLtTOL#f6fQ5;VLP+hUW<4obX!gh$attc4!6WL7B)Frpoh$>n# zBQK`v#2BBcWpJ=RxPEhuhYlXk%JZ}Puj<*<9{~pru~)Jp+gCKe2DQY*#a{}CixSr3 zPQzUG=N$RYIlT2oZD8`A0Z?%7awNbh64_Ne#O_?YedX>Tp*YOq>mq`8+`*LG#$@RU ziAH^Wlb|nf`%~aGoX9ltYQtPM<>S8b@>0B;Wv{8QWmAZCn)~LPLw%e3L{}iEwgmrd z$bon8gYM$}N#36-vb<0ktA4==H7;yLiTn0wMWg*u-eXRZ;zKW>BCvxFwW?tE z+>f*+30zE4N-Gn@9q)FV5#MIxow5$mTBt)-iInO!#@-s7t@6!Nf))h%!3VtM=Q}F8 znt~nU2AZS$<%@aPW+^L$7-d4Z*?h5gJ*PLst#e0la?#Uo{9C#vobY0+n$Oa@#NMrO zwk6GgozEj2uqjoAaIkmlylOLDyc;S;gjHyDev3Un0s}a;9*-Uo1K5DFdj>FM6^376 z%<{_G;aDHZ+hh8okkxt1H_D_ynd>qcsJLpSp{oM=U+qHri*7LO{U62BZ-EBknr{QH zod2nNw|kTS>DxRN`Ja~VuXL7|ZY}`7`{(QJdiz|m|J7z+_V)js#l_Ce{ol8EKIi_= zUfNyd?oVIvm2LsQQF5nR`D!kF7pKO(g{)K|@8RaXcvIMPlyX28Y1w7&n5aM#?!QoW z+Mj}#yt50V2U@hJ6s%BlQnUxR>?6b?+V?`Elz~uC3qO(IC#c7!lgLI8H^EB{wGO4$^<{r_# zBQb?2Oi^j9I8Q(|G57aPH17R`U zz+I+~5Idyfrle-5;pRP+@_urM;VdFXhA6{>+9DW~wujV!#YBB|_!V*yfdDWZD$-eI ztu~m~fI{A)YslbeLd)BneQA2x9;&&Q_NB%4+m|20qYo$~fnvp8ZojRK-!?b?Vt$q> z0lqHd1HSHbTUxEu!ia<|)^C7%1Csky%}bgi=qYJy1kcv|yyog1aRuxPI#ymf zRs-@eTh<2dNqV(lRfFs?j{J?y>!jMnlXC}qH2Ps3m(goX;->LHKhW+OZefSUn8LI? zep!tjrkENQ!@`(r80G9E^zx&Z+of^pFaBsviu5Q_v$sxadaby+vs&!ELHDex#>M9t zA<>m`i`iP-(b@>eF+G`sQb1?&B(Mw#+nr#6W|{Pn&QlJQtePIb-F*I(_0ujHLNsaZ zD>{6L->X{KeEDYM*RAz88^Kl-Bbles}TSjsExhf4<(Xx6ft%AB)|R|JUNujsM3td9JMg6&b!= zb?d?SY&6Mb$zqh84uM(m3LYyq>piPSt2E1>?_&bLMQLz2|8f;{Gdj*s(m8a|K^3%{ zhh1vRbXxoNQ8pn8iV{ z?p`9LA7(yRo0+4;SPE5-sX*LlPe*;Q8FBP@Sf|k@4Vp=V${id|hvYlXa;CX`kvd#f z+Zp>~QwgLXxNLwxTM!nGbPoYNlOR`hKg+7A-e9e|Z&8VMMA`#{3$t=aS_x_zSn7ZQ zkQGn$JLrSPj^A`E>7YpUWXXCOEq0rZ*0t2IPB;W=2>5?$nC)NrZY6N1!2O`m>o10} z?*XG)N1LAK7*TOY-@6^0_CYC8x>;aCUT^G@l8G&wA1gFWlOfq261eM0GulUm)V@|_ zwW5UoBwP7ZsPSP$o^>O7;lU!q;2O3l>#&t*K1dGI^}#^wM9j&N=~jNL0JS%Wmc z3-1gb~1*4iMlpg(9nWv z>Gr}AYl|P4d@C)Esq#=Oh0Dt#o!7jL!V{n&W2W|#3h*)C;BDo0+&qx z_-+s8+Slv{zA9=LlRkuTQnOV1OifF?Psd|^U%px~r8qVwrg-K_Ttv6dVH$1R<#7~~ zsh!sCNHpbnQoUZZW5A%+7n<0$Z7?K0Ws@hsDn;%H@FT0YYG@!?UKp)PHFaU@Of#vDHdH9So-ZbgljV z7vq8U$#|gY`SSk{)z?Y@@%9NWR0ftZ_> zbD(^bz^hrNeY5DE7r2n`xpx$K>h89)A?}L8C0>nYV}XlF2Pk_2#>Sc?Y;DvjC_5xv0C~Qw7GY}PA6}2AF#98b%>kVhOqSN`jc*9kjZXwzf#;*cl z7@bV%CK7`#ku8Rf*hKV+oYDrRkhhlBp#O*$GVJOW)fb^NTo@k(8F|-Esmz8rydqD$ z%#{Qkxv7-M(BVfI5PUP42l$}|6tDzaDk-oxf|(Xuv%0Z{TP4Sr{j*IS?fQl4Qs4Xd z#!NfH)`I@rZAgX%lC+|Qmrh@S!a#;``JwIY)P(ZKFDAq`ehA7|)c3jBHe9c*u(WPQ z(`Yb?ITYjv-Md#zu1Pef#DLR?%0! zdXtxna|B{@Vyy+^vN`S{mpg@^1Q1&Z2>T@E6$!7bb<(OIj@hoW2(Sc21B6f}o7`b)SjC$0;;0apjfJ$mNrM4xv-dqk#2{si9f3*tV&Z8z-Eisx z4Xw3^GzSn%IzOo2?dU;rfi@27?dEW@wD@?V-ua~V=AG_J=Wa8ar|2T=8S+u*N zigugPVs#O0?Y=6qGP}sqy=Js@$)J`NRhi{EAl`oOz+5-y08t}lXt9j}CJX6)l&o2C zvYbd+ZmcX%S1GlX+Wyvjky9`){a3rrjEwJ$6T2ZXKTX=Wd?eLxI@f~;hj{1B@ovL5&c30i>Ac3u|`|+k1#rdFb zY3Qtq8GvgOmxN!qXp6r^y&8bL>;yZUt=#&h8!Irvxs14gFa}8H-7~m zl-WnfCqYn#a2w;aPn-Q~o|VSb;dIT2a(XDgus{KNSlvkgj zN8_QOUhRcc`#;bStZv_Q+qk5l*ZXC~asFQeZ>K|(1dQijMExA^3y;CCRwq~KYsJ`C zMO8~gCH9~%5)H##3{(@=a-{`76ipy%V+JX>Wk-I(r;4F1wm2nOcwoV@3*~+Hm_rr@ zQhSw-czHX(`(h_Jf!(=bWkxnPq|CfaiLu;!dT*%OZHH;bH6ybKT#PreXR3nYv`-7E ziY_pg5+u;h554Hkq}%-p81CQN5L>EYdA9``?(`JT0j=$()x;=WvA$Qd6~Jw0j7hry zQ`}mjIlrRY;I6y*F82hk+y~>8ns4Jr;K<-CP&T|WFcc5u-x6If3-s;uKUV)Awz<5H zK0d?$=MKbwxzYcB{ij0ze{ZGJx!1kX|9|(-*W2~>xn%z@FRl3T-&XFdbZ_+k-{Se4 z_)q_2QJ?0C@}w30R}A)K)aAi^dW&dmJV)TA#uxb5Up3Ye$CqJ`1*N;!Jn@J-&U7+v~o#RKl79KBxZRAFN=$TnjORgTowNot3+B5c(_C~_q3%^>MuCNUu7TRq_av?9BwJv=1Nz;_n z__HDHE>J_Ag(hE0d_flw{AUzVLJITq^KxOB>UteLmw>AD81Aa?+69o(NRC1Dl zbCRFX=y&XNorD|wnw(d(ji`ng+h5I-v_sFsm|;@bDQv))bK4jpnaS_%M0e_G2Oxec zLX4R3Or{K(wYt|mB0d!hMX~`mM3q}W&zS?32n=$99P5}?S=x_WgftgJ`sPWZXfsj( zj1DsT7oaCGwVa6tzg-?EtY%Qe3amWLbF<*{M-E3gx>>U!9p&N<3yJyI`Je?Gv ziNuW65FVt+AlY(StVa3*N}mK7Tj$Y^O@_2-Efrt2DX$`(i~0Z@;%s#7(@gcEfG9IJ vdwGK|^dA_bg#TW&t~nx%^_K=w`J?%*o9E`ad2XKnEYJTBNns@W0LTLXiv{!& literal 0 HcmV?d00001 diff --git a/packages/docs/public/commerce-example/07-account-erasure-interoperable-4/attempt-1.txt b/packages/docs/public/commerce-example/07-account-erasure-interoperable-4/attempt-1.txt new file mode 100644 index 000000000..4b86a747d --- /dev/null +++ b/packages/docs/public/commerce-example/07-account-erasure-interoperable-4/attempt-1.txt @@ -0,0 +1,20 @@ +{ + "startedAt": "2026-09-08T20:53:50.264Z", + "commands": [ + { + "command": "npm ci --ignore-scripts --no-audit --no-fund", + "exitCode": 0, + "output": "\nadded 10 packages in 433ms\n" + }, + { + "command": "npm test", + "exitCode": 0, + "output": "\n> openiap-commerce-protocol-example@0.0.0 test\n> bun verify.mjs && bun test composition/app-backend.test.mjs composition/receiver.test.mjs\n\nCommerce Protocol Example: 213 checks passed. No store or production service contacted.\nbun test v1.3.13 (bf2e2cec)\n\ncomposition/app-backend.test.mjs:\n(pass) account deletion waits for in-flight fulfillment and retries provider erasure after app restart [65.19ms]\n\ncomposition/receiver.test.mjs:\n(pass) the original SQLite and memory composition remains compatible with the receiver [39.13ms]\n(pass) one inbox scopes event IDs to authenticated emitters, survives upgrade, and discards erased users [5.20ms]\n\n 3 pass\n 0 fail\n 20 expect() calls\nRan 3 tests across 2 files. [174.00ms]\n" + }, + { + "command": "npm run test:tooling", + "exitCode": 0, + "output": "\n> openiap-commerce-protocol-example@0.0.0 test:tooling\n> bun test checkpoint-tools.test.mjs\n\nbun test v1.3.13 (bf2e2cec)\n\ncheckpoint-tools.test.mjs:\n(pass) archive extraction excludes macOS metadata and preserves source hashes [11.12ms]\n(pass) patches preserve path-like source text across additions, changes, and deletions [46.39ms]\n(pass) failed attempts get new numbers and private paths are redacted [0.45ms]\n(pass) unfinished captures do not hide completed records [0.71ms]\n(pass) checkpoint replay follows predecessors instead of directory name order [1.11ms]\n\n 5 pass\n 0 fail\nRan 5 tests across 1 file. [74.00ms]\n" + } + ] +} diff --git a/packages/docs/public/commerce-example/07-account-erasure-interoperable-4/changes.patch b/packages/docs/public/commerce-example/07-account-erasure-interoperable-4/changes.patch new file mode 100644 index 000000000..059660e97 --- /dev/null +++ b/packages/docs/public/commerce-example/07-account-erasure-interoperable-4/changes.patch @@ -0,0 +1,639 @@ +diff --git a/BUILD.md b/BUILD.md +index 94a7142..f9c0629 100644 +--- a/BUILD.md ++++ b/BUILD.md +@@ -109,6 +109,15 @@ Check the visible app after purchase, cancellation, expiry, reload, and deletion + operations. Include the passing local conformance report and its fixture scope. Keep the main explanation short; + link the specification for details. + ++## Match the selected store ++ ++Read the store table in `INTEGRATE.md` before replacing the fixture. Exercise ++all evidence shapes the provider advertises. Keep the app account distinct ++from the Amazon/Meta store user, and reject a claim for someone else's store ++account. Recheck ownership for Amazon/Horizon access; never invent subscription ++or notification support to make their flow look like Apple/Google. Prove ++negative rechecks, outages, conflicting bindings, erasure, and restart. ++ + ## Then extend toward a production provider + + Ask me which real store, backend identity system, and deployment environment to +diff --git a/INTEGRATE.md b/INTEGRATE.md +index ba56c4a..7cfb8c3 100644 +--- a/INTEGRATE.md ++++ b/INTEGRATE.md +@@ -23,7 +23,7 @@ Use your favorite package manager: `npm install`, `pnpm install`, `yarn install` + or `bun install`. This example's runtime is Bun. The contract is + `openiap-commerce-protocol` package 0.1.0, protocol 1.0; it does not require Bun. + +-- `npm run demo:bridge`: maps Apple/Google OpenIAP purchase fields into the ++- `npm run demo:bridge`: maps Apple, Google, Amazon, and Horizon OpenIAP purchase fields into the + installed verification schema; rejects missing or unsupported evidence. + - `npm run demo:consumer`: sends signed lifecycle events to a SQLite inbox over + HTTP, repeats deliveries, rejects tampering, and reopens persisted storage. +@@ -62,7 +62,7 @@ for the app team. Follow these boundaries: + UI, targeting, or product catalog API; document this host adapter explicitly. + 2. **App connection:** the app uses its OpenIAP library to fetch products and + request a store purchase. Its purchase callback sends evidence to its +- authenticated backend. Use `client-bridge.mjs` there to map Apple/Google ++ authenticated backend. Use `client-bridge.mjs` there to map Apple, Google, Amazon, and Horizon + purchase fields into a verification input; this does not authenticate the + evidence. Keep server keys and user selection on that backend. Verify, bind + under the ownership policy, read current access, fulfill durably, then finish +@@ -83,9 +83,48 @@ for the app team. Follow these boundaries: + + The current client `verifyPurchaseWithProvider` helper supports IAPKit's own + API. A different provider name or base URL does not turn it into this protocol. +-Other providers connect through the app backend's REST or GraphQL calls. The +-Apple/Google helper does not support Amazon or Horizon, whose protocol evidence +-requires store-specific user identifiers distinct from the app's user ID. ++Other providers connect through the app backend's REST or GraphQL calls. Amazon and Horizon require a store-specific user identifier distinct from the ++app user ID. Pass it as `context.storeUserId` to the bridge after authenticating ++the store account link. `startAppBackend` requires `resolveStoreUser` for these ++stores and rejects evidence belonging to a different store account. Never ++implement that callback by copying a user ID from the request body. ++ ++## Select the store before implementing ++ ++The same six protocol operations carry these four evidence shapes: ++ ++| Store | Purchase evidence | IAPKit access path | ++| --- | --- | --- | ++| Apple | `apple.jws` from the store purchase | Bind the verified subscription; read its current state and listen for lifecycle events | ++| Google | `google.purchaseToken` | Bind the verified subscription; read its current state and listen for lifecycle events | ++| Amazon | `amazon.userId`, `amazon.receiptId`, optional `amazon.sandbox` | Bind the verified receipt; each entitlement read rechecks RVS | ++| Meta Horizon | `horizon.userId`, `horizon.sku` | Bind the verified store-user/SKU pair; each entitlement read rechecks Meta | ++ ++For Amazon and Horizon, use `entitlements.productIds` for access. IAPKit does ++not invent a subscription record, expiry date, or lifecycle event for these ++ownership checks. An empty `subscriptions` list can accompany owned products. ++A negative store answer removes the product; a failed store call fails the ++read. Decide caching and outage policy in the app backend. Reads currently ++fail if an account has more than 20 linked Amazon/Horizon purchase rows. ++ ++For Quest, verify Meta's user proof on your authenticated backend before linking ++that Meta user to the app account. Follow the official ++[Meta user verification guide](https://developers.meta.com/horizon/documentation/android-apps/ps-ownership/). ++For Amazon, establish the store account association through your application's ++trusted sign-in and ownership policy. Receipt possession alone does not prove ++which app account may claim it. The runnable comparison uses explicit fictional ++session links; it does not implement your authentication provider. ++ ++Keep consumable fulfillment separate: record each granted unit durably and ++idempotently before finishing/consuming. A verified SKU is not a new quantity ++to credit on every read. The protocol walkthrough demonstrates Premium access; ++it does not implement a wallet or sell a Nami paywall. ++ ++For IAPKit setup, configure Apple bundle/App ID and Server API signing key, ++Google package and service account, Meta App ID/secret, or Amazon RVS shared ++secret in the project. Keep secrets on the server. Enable Amazon sandbox only ++for App Tester evidence. The local comparison requires none of these real ++credentials; its external store responses are fixtures. + + ## Deliver and prove the connection + +diff --git a/README.md b/README.md +index a11d8e0..c806211 100644 +--- a/README.md ++++ b/README.md +@@ -60,8 +60,10 @@ If port 5181 is occupied, run `COMMERCE_LAB_PORT=5183 npm start`. + | Data / automation | [Event receiver guide](https://github.com/hyodotdev/openiap-commerce-protocol-example/blob/main/docs/receiver.md) | A ready signed-event receiver with a durable inbox | + | Integrated platform | [Integration brief](INTEGRATE.md) | How the roles compose without splitting account authority | + +-`client-bridge.mjs` maps Apple/Google OpenIAP purchase fields into the installed ++`client-bridge.mjs` maps Apple, Google, Amazon, and Horizon OpenIAP purchase fields into the installed + verification schema **on the app backend**. Run `npm run demo:bridge` to check it. ++`npm test` also exercises all four fixture shapes through verification, binding, ++access and erasure. Amazon/Horizon cases include negative rechecks and outages. + It does not perform a mobile purchase or authenticate store evidence. The + current client `verifyPurchaseWithProvider` helper uses IAPKit's own API; other + providers connect through the app's authenticated backend. +diff --git a/ai-task.md b/ai-task.md +index 7a2e80f..e6aa254 100644 +--- a/ai-task.md ++++ b/ai-task.md +@@ -1,63 +1,13 @@ +-# Review the completed backend +- +-Apply the Fable 5.1 max CLI review to the final checkpoint. Add the missing +-first-binding grant event in the same transaction as ownership, reject a +-premature expiry without consuming its observation, and verify both rollback +-and expiry boundaries. Correct test labels to describe what they exercise. +- +-Repair patch generation without rewriting historical source or screenshots. +-Build patches from the preceding archived source and verify their hashes. +-Install and test each archive outside the monorepo with npm. Capture the revised +-final screen on desktop and mobile, then export only matching source evidence. +- +-Keep the original six checkpoints as history. Explain their incomplete discovery +-and missing grant behavior; do not describe them as conformant providers. Keep +-all changes uncommitted for maintainer review. +- +-Apply the second review: retain gate delivery state for delayed expiry, +-retain store occurrence on delayed binding, preserve consecutive failure logs, +-and state actual package contents and runtime requirements. Add a ready-to-run +-generic event receiver for an existing backend, reusing the same receiver +-handler. Demonstrate signed lifecycle ingestion, duplicate delivery, tampering, +-and persisted inbox recovery over real local HTTP. Keep all samples fictional. +- +-Add composable integration roles: experience, commerce, and data. Ship a short +-AI integration brief and a backend helper that maps Apple/Google OpenIAP +-purchase fields into the installed verification schema. Test invalid inputs +-and exclude client-supplied identity. Keep paywall UI APIs product-specific, +-current IAPKit-only client helpers explicit, and store/device proof separate +-from local fixtures. Reuse the existing consumer and contract validators. +- +-The first bridge test failed because store evidence was nested under an extra +-`evidence` key. Keep the failure output, use the installed input schema's +-top-level `apple`/`google` members, and rerun that boundary check. +- +-Apply the third CLI review. Make the integration brief reachable from the docs +-site with absolute setup, source, and build-brief links. Accept signed webhook +-delivery behind a reverse proxy that preserves the public Host header. Keep +-unfinished captures from blocking completed history, retain equal-time fixture +-transitions, record the observed duplicate response, and configure Yarn's +-node-modules linker. Preserve the proxy failure and rerun the checks. +- +-Prepare the standalone example for its first public commit. Rewrite the README +-around clone, run, inspect, choose a role, and verify. Put receiver and capture +-setup in repository documentation so the example works before the docs site is +-deployed. Preserve every earlier archive. Record this documentation revision, +-verify all source archives again, and export a stable current-source download. +-Add CI that tests runtime, tooling, archives and the documentation export. This +-revision is a local publication review, not another completed external review. +- +-Fix the first Linux CI failure without rewriting historical recordings. macOS +-AppleDouble metadata must not count as source. Exclude it on extraction, omit it +-from new archives, and add a portable extraction regression test. Capture the +-corrected tooling, verify every source revision, and rerun GitHub CI. +- +-Correct the final CLI review finding: exercise cancellation at the expiry +-observation timestamp so the check reaches the expired-state guard. Preserve +-the earlier capture, record this revision, and verify its archive and patch. +- +-Apply the Codex review: authenticate webhook body bytes before UTF-8 decoding. +-Reject altered UTF-8 and inserted BOM bytes with an unchanged signature. Reject +-authentically signed malformed UTF-8 before storage, and accept correctly signed +-Unicode and BOM bodies. Keep the reproduced failure, preserve old checkpoints, +-then capture and verify the corrected revision. ++# Cover the four IAPKit store boundaries ++ ++Map Apple, Google, Amazon and Meta Horizon evidence into the installed protocol. ++Keep store identity distinct from the app session; Amazon and Horizon claims ++must pass the host's authenticated store-account link. Add matching fixture ++provider paths and execute ownership, rejection, outage and erasure cases. ++Compare the same application backend with IAPKit's actual handlers and local ++Convex storage. Mark external store calls as fixtures and do not invent a ++subscription lifecycle or a consumable wallet from a SKU ownership result. ++ ++Run npm test and the provider comparison, capture the current source, and verify ++it from an empty directory. Preserve the previous checkpoint. Keep all changes ++uncommitted for maintainer review. +diff --git a/checkpoint-tools.mjs b/checkpoint-tools.mjs +index 61adf66..8ef96bc 100644 +--- a/checkpoint-tools.mjs ++++ b/checkpoint-tools.mjs +@@ -31,6 +31,7 @@ export const SOURCE_FILES = [ + "provider.mjs", + "erasure.mjs", + "verify-erasure.mjs", ++ "verify-stores.mjs", + "webhooks.mjs", + "consumer.mjs", + "client-bridge.mjs", +diff --git a/checkpoint.json b/checkpoint.json +index 4453b9a..9aad24e 100644 +--- a/checkpoint.json ++++ b/checkpoint.json +@@ -1,8 +1,8 @@ + { + "step": 7, +- "id": "07-account-erasure-interoperable-3", ++ "id": "07-account-erasure-interoperable-4", + "title": "Delete the account", +- "built": "Account erasure with shared receiver and retry coordination", +- "result": "The account identity is removed; retries and restart cannot restore it.", +- "previous": "07-account-erasure-interoperable-2" ++ "built": "Apple, Google, Amazon and Horizon evidence, ownership checks and account erasure", ++ "result": "The same account flow covers four store evidence shapes; Amazon and Horizon access is rechecked.", ++ "previous": "07-account-erasure-interoperable-3" + } +diff --git a/client-bridge.mjs b/client-bridge.mjs +index 1d5d64a..248d314 100644 +--- a/client-bridge.mjs ++++ b/client-bridge.mjs +@@ -2,18 +2,43 @@ import assert from "node:assert/strict"; + import { operation, validate } from "./contract.mjs"; + + // Run on the app backend; the provider still authenticates the store evidence. +-export function toVerifyPurchaseInput(purchase) { ++export function toVerifyPurchaseInput(purchase, context = {}) { + const { store, purchaseToken } = purchase ?? {}; +- if (!["apple", "google"].includes(store)) +- throw new Error("This adapter supports Apple and Google purchases only"); +- if (typeof purchaseToken !== "string" || !purchaseToken.trim()) +- throw new Error("Purchase evidence is required"); +- const input = { +- store, +- ...(store === "apple" +- ? { apple: { jws: purchaseToken } } +- : { google: { purchaseToken } }), ++ let input; ++ const required = (value) => { ++ if (typeof value !== "string" || !value.trim()) ++ throw new Error("Purchase evidence is required"); ++ return value; + }; ++ switch (store) { ++ case "apple": ++ input = { store, apple: { jws: required(purchaseToken) } }; ++ break; ++ case "google": ++ input = { store, google: { purchaseToken: required(purchaseToken) } }; ++ break; ++ case "amazon": ++ input = { ++ store, ++ amazon: { ++ userId: required(context.storeUserId), ++ receiptId: required(purchaseToken), ++ ...(context.amazonSandbox === true ? { sandbox: true } : {}), ++ }, ++ }; ++ break; ++ case "horizon": ++ input = { ++ store, ++ horizon: { ++ userId: required(context.storeUserId), ++ sku: required(purchase.productId), ++ }, ++ }; ++ break; ++ default: ++ throw new Error("Unsupported purchase store"); ++ } + if (!validate(operation("verifyPurchase").input, input)) + throw new Error("Purchase evidence does not match the protocol input"); + return input; +@@ -39,15 +64,50 @@ export function runBridgeDemo() { + assert(validate(operation("verifyPurchase").input, input)); + checks.push(`${store}: matches the installed verification input schema`); + } ++ for (const store of ["amazon", "horizon"]) { ++ const input = toVerifyPurchaseInput( ++ { ++ store, ++ purchaseToken: "receipt-1", ++ productId: "premium.monthly", ++ userId: "untrusted-app-user", ++ }, ++ { storeUserId: "authenticated-store-user", amazonSandbox: true }, ++ ); ++ assert.deepEqual( ++ input, ++ store === "amazon" ++ ? { ++ store, ++ amazon: { ++ userId: "authenticated-store-user", ++ receiptId: "receipt-1", ++ sandbox: true, ++ }, ++ } ++ : { ++ store, ++ horizon: { ++ userId: "authenticated-store-user", ++ sku: "premium.monthly", ++ }, ++ }, ++ ); ++ checks.push( ++ `${store}: uses server-selected store identity, distinct from the app user`, ++ ); ++ assert(validate(operation("verifyPurchase").input, input)); ++ checks.push(`${store}: matches the installed verification input schema`); ++ } + for (const [label, purchase] of [ + ["missing purchase", null], + ["unknown store", { store: "unknown", purchaseToken: "fictional" }], + [ +- "Amazon needs its own adapter", ++ "Amazon requires its authenticated store user", + { store: "amazon", purchaseToken: "fictional" }, + ], + [ +- "Horizon needs its own adapter", ++ "Horizon requires its authenticated store user", + { store: "horizon", purchaseToken: "fictional" }, + ], + ["missing evidence", { store: "apple" }], +diff --git a/composition/app-backend.mjs b/composition/app-backend.mjs +index 1d63f4f..5803dbb 100644 +--- a/composition/app-backend.mjs ++++ b/composition/app-backend.mjs +@@ -3,7 +3,13 @@ import { createCommerceClient } from "./commerce-client.mjs"; + import { createErasureLedger } from "../erasure.mjs"; + + // resolveSession is the host app's authentication boundary, supplied by the caller. +-export function startAppBackend({ path, providers, receiver, resolveSession }) { ++export function startAppBackend({ ++ path, ++ providers, ++ receiver, ++ resolveSession, ++ resolveStoreUser, ++}) { + const db = new Database(path, { create: true }); + db.exec( + "CREATE TABLE IF NOT EXISTS erasure_requests (user_id TEXT, provider TEXT, PRIMARY KEY(user_id, provider))", +@@ -48,6 +54,16 @@ export function startAppBackend({ path, providers, receiver, resolveSession }) { + try { + if (url.pathname === "/purchase" && request.method === "POST") { + const input = await request.json(); ++ if (erased.has(userId)) ++ return new Response("Unauthenticated", { status: 401 }); ++ if (input.store === "amazon" || input.store === "horizon") { ++ const storeUser = await resolveStoreUser?.(request, input.store); ++ if (!storeUser || input[input.store]?.userId !== storeUser) ++ return new Response( ++ "Store account is not linked to this session", ++ { status: 403 }, ++ ); ++ } + if (erased.has(userId)) + return new Response("Unauthenticated", { status: 401 }); + const work = clients[selected].fulfill(input, { +diff --git a/provider.mjs b/provider.mjs +index 37c5b19..3a50693 100644 +--- a/provider.mjs ++++ b/provider.mjs +@@ -31,9 +31,28 @@ export function isEntitled(state, expiresAt, now) { + + // This adapter recognizes one fictional purchase; it never contacts a store. + function fixtureEvidence(input) { +- return input.store === "google" +- ? input.google?.purchaseToken +- : input.evidence; ++ switch (input.store) { ++ case "apple": ++ return input.apple?.jws; ++ case "google": ++ return input.google?.purchaseToken; ++ case "amazon": ++ return ( ++ input.amazon && ++ JSON.stringify([ ++ input.amazon.userId, ++ input.amazon.receiptId, ++ input.amazon.sandbox === true, ++ ]) ++ ); ++ case "horizon": ++ return ( ++ input.horizon && ++ JSON.stringify([input.horizon.userId, input.horizon.sku]) ++ ); ++ default: ++ return input.evidence; ++ } + } + + function verifyFixture(input, fixture) { +@@ -43,7 +62,9 @@ function verifyFixture(input, fixture) { + if (evidence === "local-upstream-outage") { + return { error: "VERIFICATION_FAILED" }; + } +- return { accepted: evidence === fixture.evidence }; ++ const current = fixture.currentVerdict?.(); ++ if (current === "outage") return { error: "VERIFICATION_FAILED" }; ++ return { accepted: evidence === fixture.evidence && current !== false }; + } + + export function createProvider(path, now, fixture = FIXTURE) { +@@ -89,6 +110,18 @@ export function createProvider(path, now, fixture = FIXTURE) { + } + + function entitlements(userId) { ++ if (fixture.pointInTime) { ++ const current = fixture.currentVerdict?.(); ++ if (current === "outage") return { error: "VERIFICATION_FAILED" }; ++ return { ++ userId, ++ productIds: ++ current === false ++ ? [] ++ : [...new Set(rowsFor(userId).map((row) => row.product_id))], ++ subscriptions: [], ++ }; ++ } + const subscriptions = rowsFor(userId) + .map(snapshot) + .filter((row) => row.active); +@@ -126,8 +159,14 @@ export function createProvider(path, now, fixture = FIXTURE) { + capabilityNames.map((key) => [ + key, + { +- provider: supported.has(key), +- implementation: supported.has(key), ++ provider: ++ supported.has(key) && ++ (!fixture.pointInTime || ++ ["initialValidation", "entitlements"].includes(key)), ++ implementation: ++ supported.has(key) && ++ (!fixture.pointInTime || ++ ["initialValidation", "entitlements"].includes(key)), + notes: + "Local fixture demonstration only; no real store integration or profile conformance claim.", + }, +@@ -200,7 +239,11 @@ export function createProvider(path, now, fixture = FIXTURE) { + const row = db + .query("SELECT * FROM purchases WHERE fingerprint = ?") + .get(key); +- if (updated.changes && isEntitled(row.state, row.expires_at, now())) { ++ if ( ++ updated.changes && ++ !fixture.pointInTime && ++ isEntitled(row.state, row.expires_at, now()) ++ ) { + enqueue("entitlement.granted", row, row.observed_at); + db.query( + "UPDATE purchases SET entitlement_granted = 1 WHERE fingerprint = ?", +@@ -224,6 +267,7 @@ export function createProvider(path, now, fixture = FIXTURE) { + })(); + }, + subscriptionStatus(input) { ++ if (fixture.pointInTime) return { active: false }; + const snapshots = rowsFor(input.userId).map(snapshot); + const subscription = snapshots.find((row) => row.active) ?? snapshots[0]; + return { +diff --git a/verify-stores.mjs b/verify-stores.mjs +new file mode 100644 +index 0000000..30d87ff +--- /dev/null ++++ b/verify-stores.mjs +@@ -0,0 +1,142 @@ ++import assert from "node:assert/strict"; ++import { createProvider, CREDENTIALS } from "./provider.mjs"; ++import { operation } from "./contract.mjs"; ++import { toVerifyPurchaseInput } from "./client-bridge.mjs"; ++ ++export async function verifyStores() { ++ const checks = []; ++ for (const store of ["apple", "google", "amazon", "horizon"]) { ++ let current = true; ++ const input = toVerifyPurchaseInput( ++ { store, purchaseToken: "fictional-proof", productId: "premium.monthly" }, ++ { storeUserId: "fixture-store-user", amazonSandbox: true }, ++ ); ++ const evidence = ++ store === "amazon" ++ ? JSON.stringify(["fixture-store-user", "fictional-proof", true]) ++ : store === "horizon" ++ ? JSON.stringify(["fixture-store-user", "premium.monthly"]) ++ : "fictional-proof"; ++ const fixture = { ++ store, ++ evidence, ++ userId: "alice", ++ productId: "premium.monthly", ++ startsAt: Date.now(), ++ expiresAt: Date.now() + 60000, ++ pointInTime: ["amazon", "horizon"].includes(store), ++ currentVerdict: () => current, ++ }; ++ const provider = createProvider(":memory:", Date.now, fixture); ++ const check = (label, actual, expected) => { ++ assert.deepEqual(actual, expected, `${store}: ${label}`); ++ checks.push(`${store}: ${label}`); ++ }; ++ async function call(name, body, credential = CREDENTIALS.server) { ++ const spec = operation(name), ++ url = new URL(spec.path, "http://fixture.invalid"); ++ if (spec.method === "GET") ++ for (const [key, value] of Object.entries(body ?? {})) ++ url.searchParams.set(key, value); ++ const response = await provider.fetch( ++ new Request(url, { ++ method: spec.method, ++ headers: { ++ authorization: credential, ++ "content-type": "application/json", ++ }, ++ ...(spec.method === "POST" ? { body: JSON.stringify(body) } : {}), ++ }), ++ ); ++ return { status: response.status, result: await response.json() }; ++ } ++ try { ++ check( ++ "unverified evidence cannot bind", ++ (await call("bindPurchase", { ...input, userId: "alice" })).result ++ .bound, ++ false, ++ ); ++ check( ++ "matching evidence verifies", ++ (await call("verifyPurchase", input)).result.isValid, ++ true, ++ ); ++ check( ++ "verification alone gives no access", ++ (await call("entitlements", { userId: "alice" })).result.productIds, ++ [], ++ ); ++ check( ++ "verification credentials cannot bind", ++ ( ++ await call( ++ "bindPurchase", ++ { ...input, userId: "alice" }, ++ CREDENTIALS.verification, ++ ) ++ ).status, ++ 403, ++ ); ++ for (let i = 0; i < 2; i++) ++ check( ++ "binding and retry keep one owner", ++ (await call("bindPurchase", { ...input, userId: "alice" })).result ++ .bound, ++ true, ++ ); ++ check( ++ "another account cannot claim the purchase", ++ (await call("bindPurchase", { ...input, userId: "bob" })).result.bound, ++ false, ++ ); ++ check( ++ "owned product is accessible", ++ (await call("entitlements", { userId: "alice" })).result.productIds, ++ ["premium.monthly"], ++ ); ++ if (fixture.pointInTime) { ++ current = "outage"; ++ check( ++ "an outage is an error, not cached access", ++ (await call("entitlements", { userId: "alice" })).status, ++ 502, ++ ); ++ current = false; ++ check( ++ "a negative recheck removes access", ++ (await call("entitlements", { userId: "alice" })).result.productIds, ++ [], ++ ); ++ current = true; ++ check( ++ "a confirmed recheck restores ownership", ++ (await call("entitlements", { userId: "alice" })).result.productIds, ++ ["premium.monthly"], ++ ); ++ } ++ check( ++ "erasure completes", ++ (await call("eraseUser", { userId: "alice" })).result.status, ++ "completed", ++ ); ++ check( ++ "erasure removes access", ++ (await call("entitlements", { userId: "alice" })).result.productIds, ++ [], ++ ); ++ check( ++ "erased evidence cannot be claimed", ++ (await call("bindPurchase", { ...input, userId: "bob" })).result.bound, ++ false, ++ ); ++ } finally { ++ provider.close(); ++ } ++ } ++ return checks; ++} ++if (import.meta.main) ++ console.log( ++ `Store fixtures: ${(await verifyStores()).length} checks passed. No store contacted.`, ++ ); +diff --git a/verify.mjs b/verify.mjs +index 060c6f2..424d7dd 100644 +--- a/verify.mjs ++++ b/verify.mjs +@@ -8,6 +8,7 @@ import { runConsumerDemo } from "./consumer.mjs"; + import { runBridgeDemo } from "./client-bridge.mjs"; + import { startLab } from "./server.mjs"; + import { authentic, createReceiver, deliver, sign } from "./webhooks.mjs"; ++import { verifyStores } from "./verify-stores.mjs"; + import { verifyErasure } from "./verify-erasure.mjs"; + + export async function verifyLab({ compareSigner } = {}) { +@@ -427,6 +428,7 @@ export async function verifyLab({ compareSigner } = {}) { + } + checks.push(...(await runConsumerDemo()).checks); + checks.push(...runBridgeDemo()); ++ checks.push(...(await verifyStores())); + checks.push(...(await verifyErasure())); + return checks; + } diff --git a/packages/docs/public/commerce-example/07-account-erasure-interoperable-4/mobile.png b/packages/docs/public/commerce-example/07-account-erasure-interoperable-4/mobile.png new file mode 100644 index 0000000000000000000000000000000000000000..c5c65fac85b8b66d708e1d0d18c4f99ce9d63e56 GIT binary patch literal 126051 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%0AuP6u(ZYYQd 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 JOvu3Re*m1wwfO)5 literal 0 HcmV?d00001 diff --git a/packages/docs/public/commerce-example/07-account-erasure-interoperable-4/source.tar.gz b/packages/docs/public/commerce-example/07-account-erasure-interoperable-4/source.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..854c426506bd2febda77c2763c36bc086f9332c6 GIT binary patch literal 54372 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 F0{}yj55xcf literal 0 HcmV?d00001 diff --git a/packages/docs/public/commerce-example/07-account-erasure-interoperable-5/attempt-1.txt b/packages/docs/public/commerce-example/07-account-erasure-interoperable-5/attempt-1.txt new file mode 100644 index 000000000..bf145494e --- /dev/null +++ b/packages/docs/public/commerce-example/07-account-erasure-interoperable-5/attempt-1.txt @@ -0,0 +1,20 @@ +{ + "startedAt": "2026-09-08T21:03:40.777Z", + "commands": [ + { + "command": "npm ci --ignore-scripts --no-audit --no-fund", + "exitCode": 0, + "output": "\nadded 10 packages in 648ms\n" + }, + { + "command": "npm test", + "exitCode": 0, + "output": "\n> openiap-commerce-protocol-example@0.0.0 test\n> bun verify.mjs && bun test composition/app-backend.test.mjs composition/receiver.test.mjs\n\nCommerce Protocol Example: 213 checks passed. No store or production service contacted.\nbun test v1.3.13 (bf2e2cec)\n\ncomposition/app-backend.test.mjs:\n(pass) account deletion waits for in-flight fulfillment and retries provider erasure after app restart [67.59ms]\n\ncomposition/receiver.test.mjs:\n(pass) the original SQLite and memory composition remains compatible with the receiver [39.47ms]\n(pass) one inbox scopes event IDs to authenticated emitters, survives upgrade, and discards erased users [3.69ms]\n\n 3 pass\n 0 fail\n 20 expect() calls\nRan 3 tests across 2 files. [183.00ms]\n" + }, + { + "command": "npm run test:tooling", + "exitCode": 0, + "output": "\n> openiap-commerce-protocol-example@0.0.0 test:tooling\n> bun test checkpoint-tools.test.mjs\n\nbun test v1.3.13 (bf2e2cec)\n\ncheckpoint-tools.test.mjs:\n(pass) archive extraction excludes macOS metadata and preserves source hashes [14.63ms]\n(pass) patches preserve path-like source text across additions, changes, and deletions [67.02ms]\n(pass) failed attempts get new numbers and private paths are redacted [0.53ms]\n(pass) unfinished captures do not hide completed records [0.95ms]\n(pass) checkpoint replay follows predecessors instead of directory name order [1.30ms]\n\n 5 pass\n 0 fail\nRan 5 tests across 1 file. [101.00ms]\n" + } + ] +} diff --git a/packages/docs/public/commerce-example/07-account-erasure-interoperable-5/changes.patch b/packages/docs/public/commerce-example/07-account-erasure-interoperable-5/changes.patch new file mode 100644 index 000000000..feef45cb0 --- /dev/null +++ b/packages/docs/public/commerce-example/07-account-erasure-interoperable-5/changes.patch @@ -0,0 +1,29 @@ +diff --git a/INTEGRATE.md b/INTEGRATE.md +index 7cfb8c3..122ee9f 100644 +--- a/INTEGRATE.md ++++ b/INTEGRATE.md +@@ -91,7 +91,8 @@ implement that callback by copying a user ID from the request body. + + ## Select the store before implementing + +-The same six protocol operations carry these four evidence shapes: ++Follow the six-step purchase flow with your chosen store. Verification and ++binding use these evidence shapes: + + | Store | Purchase evidence | IAPKit access path | + | --- | --- | --- | +diff --git a/checkpoint.json b/checkpoint.json +index 9aad24e..c2753c1 100644 +--- a/checkpoint.json ++++ b/checkpoint.json +@@ -1,8 +1,8 @@ + { + "step": 7, +- "id": "07-account-erasure-interoperable-4", ++ "id": "07-account-erasure-interoperable-5", + "title": "Delete the account", + "built": "Apple, Google, Amazon and Horizon evidence, ownership checks and account erasure", + "result": "The same account flow covers four store evidence shapes; Amazon and Horizon access is rechecked.", +- "previous": "07-account-erasure-interoperable-3" ++ "previous": "07-account-erasure-interoperable-4" + } diff --git a/packages/docs/public/commerce-example/07-account-erasure-interoperable-5/mobile.png b/packages/docs/public/commerce-example/07-account-erasure-interoperable-5/mobile.png new file mode 100644 index 0000000000000000000000000000000000000000..c5c65fac85b8b66d708e1d0d18c4f99ce9d63e56 GIT binary patch literal 126051 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%0AuP6u(ZYYQd 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 JOvu3Re*m1wwfO)5 literal 0 HcmV?d00001 diff --git a/packages/docs/public/commerce-example/07-account-erasure-interoperable-5/source.tar.gz b/packages/docs/public/commerce-example/07-account-erasure-interoperable-5/source.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..06e43c4cb2ed9e51147b63ff98d341e1d81abfce GIT binary patch literal 54380 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 openiap-commerce-protocol-example@0.0.0 test\n> bun verify.mjs && bun test composition/app-backend.test.mjs composition/receiver.test.mjs\n\nCommerce Protocol Example: 229 checks passed. No store or production service contacted.\nbun test v1.3.13 (bf2e2cec)\n\ncomposition/app-backend.test.mjs:\n(pass) account deletion waits for in-flight fulfillment and retries provider erasure after app restart [80.35ms]\n\ncomposition/receiver.test.mjs:\n(pass) the original SQLite and memory composition remains compatible with the receiver [47.71ms]\n(pass) one inbox scopes event IDs to authenticated emitters, survives upgrade, and discards erased users [5.11ms]\n\n 3 pass\n 0 fail\n 20 expect() calls\nRan 3 tests across 2 files. [224.00ms]\n" + }, + { + "command": "npm run test:tooling", + "exitCode": 0, + "output": "\n> openiap-commerce-protocol-example@0.0.0 test:tooling\n> bun test checkpoint-tools.test.mjs\n\nbun test v1.3.13 (bf2e2cec)\n\ncheckpoint-tools.test.mjs:\n(pass) archive extraction excludes macOS metadata and preserves source hashes [13.56ms]\n(pass) patches preserve path-like source text across additions, changes, and deletions [68.17ms]\n(pass) failed attempts get new numbers and private paths are redacted [0.65ms]\n(pass) unfinished captures do not hide completed records [0.97ms]\n(pass) checkpoint replay follows predecessors instead of directory name order [1.41ms]\n\n 5 pass\n 0 fail\nRan 5 tests across 1 file. [104.00ms]\n" + } + ] +} diff --git a/packages/docs/public/commerce-example/07-account-erasure-interoperable-6/changes.patch b/packages/docs/public/commerce-example/07-account-erasure-interoperable-6/changes.patch new file mode 100644 index 000000000..b1e23da0f --- /dev/null +++ b/packages/docs/public/commerce-example/07-account-erasure-interoperable-6/changes.patch @@ -0,0 +1,100 @@ +diff --git a/checkpoint.json b/checkpoint.json +index c2753c1..9344586 100644 +--- a/checkpoint.json ++++ b/checkpoint.json +@@ -1,8 +1,8 @@ + { + "step": 7, +- "id": "07-account-erasure-interoperable-5", ++ "id": "07-account-erasure-interoperable-6", + "title": "Delete the account", + "built": "Apple, Google, Amazon and Horizon evidence, ownership checks and account erasure", + "result": "The same account flow covers four store evidence shapes; Amazon and Horizon access is rechecked.", +- "previous": "07-account-erasure-interoperable-4" ++ "previous": "07-account-erasure-interoperable-5" + } +diff --git a/provider.mjs b/provider.mjs +index 3a50693..3e23093 100644 +--- a/provider.mjs ++++ b/provider.mjs +@@ -212,12 +212,13 @@ export function createProvider(path, now, fixture = FIXTURE) { + fixture.startsAt, + ); + } ++ const expired = !fixture.pointInTime && now() >= fixture.expiresAt; + return { + store: fixture.store, +- isValid: verdict.accepted && now() < fixture.expiresAt, ++ isValid: verdict.accepted && !expired, + state: !verdict.accepted + ? "INAUTHENTIC" +- : now() >= fixture.expiresAt ++ : expired + ? "EXPIRED" + : "ENTITLED", + ...(verdict.accepted ? { productId: fixture.productId } : {}), +diff --git a/verify-stores.mjs b/verify-stores.mjs +index 30d87ff..01bc808 100644 +--- a/verify-stores.mjs ++++ b/verify-stores.mjs +@@ -7,6 +7,7 @@ export async function verifyStores() { + const checks = []; + for (const store of ["apple", "google", "amazon", "horizon"]) { + let current = true; ++ let time = Date.now(); + const input = toVerifyPurchaseInput( + { store, purchaseToken: "fictional-proof", productId: "premium.monthly" }, + { storeUserId: "fixture-store-user", amazonSandbox: true }, +@@ -22,12 +23,12 @@ export async function verifyStores() { + evidence, + userId: "alice", + productId: "premium.monthly", +- startsAt: Date.now(), +- expiresAt: Date.now() + 60000, ++ startsAt: time, ++ expiresAt: time + 60000, + pointInTime: ["amazon", "horizon"].includes(store), + currentVerdict: () => current, + }; +- const provider = createProvider(":memory:", Date.now, fixture); ++ const provider = createProvider(":memory:", () => time, fixture); + const check = (label, actual, expected) => { + assert.deepEqual(actual, expected, `${store}: ${label}`); + checks.push(`${store}: ${label}`); +@@ -130,6 +131,36 @@ export async function verifyStores() { + (await call("bindPurchase", { ...input, userId: "bob" })).result.bound, + false, + ); ++ for (const [label, offset] of [ ++ ["before", -1], ++ ["at", 0], ++ ["after", 1], ++ ]) { ++ time = fixture.expiresAt + offset; ++ const verdict = (await call("verifyPurchase", input)).result; ++ check( ++ `verification ${label} the fixture deadline respects the store's access model`, ++ [verdict.isValid, verdict.state], ++ fixture.pointInTime || offset < 0 ++ ? [true, "ENTITLED"] ++ : [false, "EXPIRED"], ++ ); ++ } ++ if (fixture.pointInTime) { ++ current = false; ++ const rejected = (await call("verifyPurchase", input)).result; ++ check( ++ "a negative ownership verdict remains rejected after the fixture deadline", ++ [rejected.isValid, rejected.state], ++ [false, "INAUTHENTIC"], ++ ); ++ current = "outage"; ++ check( ++ "an ownership verification outage remains an error after the fixture deadline", ++ (await call("verifyPurchase", input)).status, ++ 502, ++ ); ++ } + } finally { + provider.close(); + } diff --git a/packages/docs/public/commerce-example/07-account-erasure-interoperable-6/mobile.png b/packages/docs/public/commerce-example/07-account-erasure-interoperable-6/mobile.png new file mode 100644 index 0000000000000000000000000000000000000000..c5c65fac85b8b66d708e1d0d18c4f99ce9d63e56 GIT binary patch literal 126051 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%0AuP6u(ZYYQd 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 JOvu3Re*m1wwfO)5 literal 0 HcmV?d00001 diff --git a/packages/docs/public/commerce-example/07-account-erasure-interoperable-6/source.tar.gz b/packages/docs/public/commerce-example/07-account-erasure-interoperable-6/source.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..6c3755c995bb14a525af8ff15fc480d3f0213186 GIT binary patch literal 54644 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 R?emZF{QnP~xr_kz0{~T<;HLlp literal 0 HcmV?d00001 diff --git a/packages/docs/public/commerce-example/07-account-erasure-interoperable/attempt-1.txt b/packages/docs/public/commerce-example/07-account-erasure-interoperable/attempt-1.txt new file mode 100644 index 000000000..84ac558bd --- /dev/null +++ b/packages/docs/public/commerce-example/07-account-erasure-interoperable/attempt-1.txt @@ -0,0 +1,20 @@ +{ + "startedAt": "2026-09-08T19:44:05.187Z", + "commands": [ + { + "command": "npm ci --ignore-scripts --no-audit --no-fund", + "exitCode": 0, + "output": "\nadded 10 packages in 642ms\n" + }, + { + "command": "npm test", + "exitCode": 0, + "output": "\n> openiap-commerce-protocol-example@0.0.0 test\n> bun verify.mjs && bun test composition/app-backend.test.mjs composition/receiver.test.mjs\n\nCommerce Protocol Example: 159 checks passed. No store or production service contacted.\nbun test v1.3.13 (bf2e2cec)\n\ncomposition/app-backend.test.mjs:\n(pass) account deletion waits for in-flight fulfillment and retries provider erasure after app restart [157.46ms]\n\ncomposition/receiver.test.mjs:\n(pass) one inbox scopes event IDs to authenticated emitters, survives upgrade, and discards erased users [4.32ms]\n\n 2 pass\n 0 fail\n 19 expect() calls\nRan 2 tests across 2 files. [243.00ms]\n" + }, + { + "command": "npm run test:tooling", + "exitCode": 0, + "output": "\n> openiap-commerce-protocol-example@0.0.0 test:tooling\n> bun test checkpoint-tools.test.mjs\n\nbun test v1.3.13 (bf2e2cec)\n\ncheckpoint-tools.test.mjs:\n(pass) archive extraction excludes macOS metadata and preserves source hashes [15.19ms]\n(pass) patches preserve path-like source text across additions, changes, and deletions [59.68ms]\n(pass) failed attempts get new numbers and private paths are redacted [0.48ms]\n(pass) unfinished captures do not hide completed records [0.91ms]\n\n 4 pass\n 0 fail\nRan 4 tests across 1 file. [112.00ms]\n" + } + ] +} diff --git a/packages/docs/public/commerce-example/07-account-erasure-interoperable/changes.patch b/packages/docs/public/commerce-example/07-account-erasure-interoperable/changes.patch new file mode 100644 index 000000000..cdc93958f --- /dev/null +++ b/packages/docs/public/commerce-example/07-account-erasure-interoperable/changes.patch @@ -0,0 +1,341 @@ +diff --git a/checkpoint-tools.mjs b/checkpoint-tools.mjs +index 6e6cfd4..112a019 100644 +--- a/checkpoint-tools.mjs ++++ b/checkpoint-tools.mjs +@@ -41,6 +41,7 @@ export const SOURCE_FILES = [ + "composition/README.md", + "composition/app-backend.mjs", + "composition/app-backend.test.mjs", ++ "composition/receiver.test.mjs", + "composition/commerce-client.mjs", + "composition/export.mjs", + "composition/memory-provider.mjs", +diff --git a/checkpoint.json b/checkpoint.json +index 75c152c..4860ddb 100644 +--- a/checkpoint.json ++++ b/checkpoint.json +@@ -1,8 +1,8 @@ + { + "step": 7, +- "id": "07-account-erasure-reviewed", ++ "id": "07-account-erasure-interoperable", + "title": "Delete the account", +- "built": "Account erasure with readable identity state", ++ "built": "Account erasure with shared receiver and retry coordination", + "result": "The account identity is removed; retries and restart cannot restore it.", +- "previous": "07-account-erasure" ++ "previous": "07-account-erasure-reviewed" + } +diff --git a/composition/README.md b/composition/README.md +index 00ffd08..f0da5f6 100644 +--- a/composition/README.md ++++ b/composition/README.md +@@ -19,7 +19,7 @@ required. The runner creates its fixture credentials, webhook keys, temporary + databases, and local HTTP ports, then cleans up after itself. Installing + dependencies needs registry access; the composition run uses loopback HTTP only. + +-The existing six-step dashboard remains available through `npm start` at ++The seven-step dashboard, including account deletion, remains available through `npm start` at + `http://127.0.0.1:5181`. Set `COMMERCE_LAB_PORT` only to change that port. + + ## Follow the code +@@ -49,7 +49,10 @@ and an optional `extensions["partner.segment"]` string survives storage without + consumer. The consumer also rejects a malformed successful API response. + + Each emitter/project has its own configured endpoint, secret, and inbox +-database. Equal event IDs from different emitters therefore do not collide. ++database in this baseline run. For the IAPKit replacement run, `startAppBackend` ++keeps one application endpoint and one receiver alive. Configure that receiver ++with named emitters and separate signing keys bound to each project ID; equal ++event IDs from different providers then remain distinct in the same inbox. + This does not identify duplicate real-world facts across a provider cutover. + + ## Make and verify one change +diff --git a/composition/app-backend.mjs b/composition/app-backend.mjs +index 04475a7..1d63f4f 100644 +--- a/composition/app-backend.mjs ++++ b/composition/app-backend.mjs +@@ -21,6 +21,7 @@ export function startAppBackend({ path, providers, receiver, resolveSession }) { + for (const row of db.query("SELECT * FROM erasure_requests").all()) { + try { + receiver.eraseUser(row.user_id); ++ await Promise.allSettled([...(inFlight.get(row.user_id) ?? [])]); + const result = await clients[row.provider].call("eraseUser", { + userId: row.user_id, + }); +@@ -83,7 +84,6 @@ export function startAppBackend({ path, providers, receiver, resolveSession }) { + ).run(userId, name); + })(); + receiver.eraseUser(userId); +- await Promise.allSettled([...(inFlight.get(userId) ?? [])]); + const pending = await drainErasure(); + return Response.json({ + accepted: true, +diff --git a/composition/app-backend.test.mjs b/composition/app-backend.test.mjs +index 7f2da7c..dc43f6c 100644 +--- a/composition/app-backend.test.mjs ++++ b/composition/app-backend.test.mjs +@@ -19,7 +19,8 @@ test("account deletion waits for in-flight fulfillment and retries provider eras + const gate = new Promise((resolve) => { + releaseBind = resolve; + }); +- let rejectErase = true; ++ let rejectErase = true, ++ eraseCalls = 0; + const server = Bun.serve({ + hostname: "127.0.0.1", + port: 0, +@@ -28,8 +29,10 @@ test("account deletion waits for in-flight fulfillment and retries provider eras + signalBind(); + await gate; + } +- if (new URL(request.url).pathname.endsWith("/erase") && rejectErase) +- return new Response(null, { status: 503 }); ++ if (new URL(request.url).pathname.endsWith("/erase")) { ++ eraseCalls++; ++ if (rejectErase) return new Response(null, { status: 503 }); ++ } + return provider.fetch(request); + }, + }); +@@ -65,12 +68,21 @@ test("account deletion waits for in-flight fulfillment and retries provider eras + await Bun.sleep(10); + } + expect((await fetch(app.url + "/access")).status).toBe(401); ++ let workerFinished = false; ++ const background = app.drainErasure().then((pending) => { ++ workerFinished = true; ++ return pending; ++ }); ++ await Bun.sleep(20); ++ expect(workerFinished).toBe(false); ++ expect(eraseCalls).toBe(0); + releaseBind(); + expect(await (await purchase).json()).toEqual({ access: false }); + expect(await (await deletion).json()).toEqual({ + accepted: true, + status: "queued", + }); ++ expect(await background).toBe(1); + await app.close(); + app = startAppBackend(options); + expect( +diff --git a/composition/receiver.test.mjs b/composition/receiver.test.mjs +new file mode 100644 +index 0000000..24e83b4 +--- /dev/null ++++ b/composition/receiver.test.mjs +@@ -0,0 +1,97 @@ ++import { test, expect } from "bun:test"; ++import { Database } from "bun:sqlite"; ++import { mkdtempSync, rmSync } from "node:fs"; ++import { tmpdir } from "node:os"; ++import { join } from "node:path"; ++import { WEBHOOK, COMMERCE_EVENT_VERSION } from "openiap-commerce-protocol"; ++import { createReceiver, sign } from "../webhooks.mjs"; ++ ++test("one inbox scopes event IDs to authenticated emitters, survives upgrade, and discards erased users", async () => { ++ const directory = mkdtempSync(join(tmpdir(), "commerce-receiver-")); ++ const path = join(directory, "inbox.sqlite"); ++ const now = Date.now(); ++ const emitters = [ ++ { name: "example", projectId: "example_project", secret: "example-key" }, ++ { name: "iapkit", projectId: "kit_project", secret: "kit-key" }, ++ ]; ++ const event = { ++ eventId: "same-event-id", ++ eventType: "subscription.canceled", ++ eventVersion: COMMERCE_EVENT_VERSION, ++ occurredAt: now, ++ processedAt: now, ++ store: "fixture", ++ environment: "local-fixture", ++ projectId: emitters[0].projectId, ++ userId: "alice", ++ productId: "premium.monthly", ++ subscription: { ++ productId: "premium.monthly", ++ state: "Active", ++ active: true, ++ expiresAt: now + 60000, ++ willRenew: false, ++ }, ++ }; ++ const old = new Database(path, { create: true }); ++ old.exec( ++ "CREATE TABLE inbox (event_id TEXT PRIMARY KEY, body TEXT NOT NULL)", ++ ); ++ old ++ .query("INSERT INTO inbox VALUES (?, ?)") ++ .run(event.eventId, JSON.stringify(event)); ++ old.close(); ++ let receiver = createReceiver(path, emitters, () => now); ++ const post = (emitter, value) => { ++ const body = JSON.stringify(value), ++ timestamp = String(Math.floor(now / 1000)); ++ return receiver.fetch( ++ new Request("http://localhost/webhooks/commerce", { ++ method: "POST", ++ body, ++ headers: { ++ [WEBHOOK.timestampHeader]: timestamp, ++ [WEBHOOK.signatureHeader]: sign(emitter.secret, timestamp, body), ++ [WEBHOOK.eventIdHeader]: value.eventId, ++ }, ++ }), ++ ); ++ }; ++ try { ++ expect(await (await post(emitters[0], event)).json()).toEqual({ ++ accepted: true, ++ duplicate: true, ++ }); ++ const kitEvent = { ...event, projectId: emitters[1].projectId }; ++ expect((await post(emitters[0], kitEvent)).status).toBe(401); ++ expect(receiver.count()).toBe(1); ++ expect(await (await post(emitters[1], kitEvent)).json()).toEqual({ ++ accepted: true, ++ duplicate: false, ++ }); ++ expect(receiver.count()).toBe(2); ++ receiver.close(); ++ receiver = createReceiver(path, emitters, () => now); ++ expect(await (await post(emitters[1], kitEvent)).json()).toEqual({ ++ accepted: true, ++ duplicate: true, ++ }); ++ expect(receiver.eraseUser("alice")).toBe(2); ++ receiver.close(); ++ receiver = createReceiver(path, emitters, () => now); ++ for (const emitter of emitters) ++ expect( ++ await ( ++ await post(emitter, { ++ ...event, ++ projectId: emitter.projectId, ++ eventId: "late-event", ++ }) ++ ).json(), ++ ).toEqual({ accepted: true, discarded: "erased-user" }); ++ expect(receiver.count()).toBe(0); ++ } finally { ++ receiver.close(); ++ rmSync(directory, { recursive: true, force: true }); ++ } ++}); +diff --git a/consumer.mjs b/consumer.mjs +index cb052b8..1e240f3 100644 +--- a/consumer.mjs ++++ b/consumer.mjs +@@ -7,7 +7,7 @@ import { WEBHOOK, COMMERCE_EVENT_VERSION } from "openiap-commerce-protocol"; + import { createReceiver, sign } from "./webhooks.mjs"; + import { validate } from "./contract.mjs"; + +-// One configured emitter/project and signing key per receiver database. ++// One app inbox; named emitters can bind separate signing keys to project IDs. + export function startConsumer({ secret, path, port = 0, now = Date.now }) { + assert(secret, "Set COMMERCE_WEBHOOK_SECRET to the provider signing secret."); + let receiver = createReceiver(path, secret, now); +diff --git a/package.json b/package.json +index d920e9e..8186b2e 100644 +--- a/package.json ++++ b/package.json +@@ -5,7 +5,7 @@ + "type": "module", + "scripts": { + "start": "bun server.mjs", +- "test": "bun verify.mjs && bun test composition/app-backend.test.mjs", ++ "test": "bun verify.mjs && bun test composition/app-backend.test.mjs composition/receiver.test.mjs", + "capture": "bun capture.mjs", + "verify:checkpoints": "bun verify-checkpoints.mjs", + "test:tooling": "bun test checkpoint-tools.test.mjs", +diff --git a/webhooks.mjs b/webhooks.mjs +index d8e18c4..f9b059d 100644 +--- a/webhooks.mjs ++++ b/webhooks.mjs +@@ -34,23 +34,58 @@ export function authentic(secrets, timestamp, body, signatures, nowSeconds) { + } + + export function createReceiver(path, secret, now) { ++ const emitters = ++ typeof secret === "string" ? [{ name: "default", secret }] : secret; ++ if ( ++ !Array.isArray(emitters) || ++ !emitters.length || ++ emitters.some( ++ (entry) => ++ !entry.name || ++ !entry.secret || ++ (typeof secret !== "string" && !entry.projectId), ++ ) ++ ) ++ throw new Error( ++ "Configure each emitter with a name, project ID, and signing secret", ++ ); ++ if (new Set(emitters.map((entry) => entry.name)).size !== emitters.length) ++ throw new Error("Emitter names must be unique"); + const db = new Database(path, { create: true }); + db.exec( + "CREATE TABLE IF NOT EXISTS inbox (event_id TEXT PRIMARY KEY, body TEXT NOT NULL)", + ); + const erasures = createErasureLedger(db); ++ // Upgrade old single-emitter event IDs without losing durable deduplication. ++ db.transaction(() => { ++ for (const row of db.query("SELECT event_id, body FROM inbox").all()) { ++ const event = JSON.parse(row.body); ++ if (row.event_id !== event.eventId) continue; ++ const matching = emitters.filter( ++ (entry) => entry.projectId === event.projectId, ++ ); ++ const name = matching.length === 1 ? matching[0].name : "default"; ++ const identity = JSON.stringify([name, event.projectId, event.eventId]); ++ db.query("INSERT OR IGNORE INTO inbox VALUES (?, ?)").run( ++ identity, ++ row.body, ++ ); ++ db.query("DELETE FROM inbox WHERE event_id = ?").run(row.event_id); ++ } ++ })(); + + async function fetch(request) { + const bytes = new Uint8Array(await request.arrayBuffer()); +- if ( +- !authentic( +- [secret], ++ const authenticated = emitters.filter((emitter) => ++ authentic( ++ [emitter.secret], + request.headers.get(WEBHOOK.timestampHeader), + bytes, + request.headers.get(WEBHOOK.signatureHeader), + Math.floor(now() / 1000), +- ) +- ) { ++ ), ++ ); ++ if (!authenticated.length) { + return new Response("Invalid signature", { status: 401 }); + } + let body, event; +@@ -64,12 +99,20 @@ export function createReceiver(path, secret, now) { + return new Response("Invalid event", { status: 400 }); + if (request.headers.get(WEBHOOK.eventIdHeader) !== event.eventId) + return new Response("Event ID mismatch", { status: 400 }); ++ const emitter = authenticated.find( ++ (entry) => !entry.projectId || entry.projectId === event.projectId, ++ ); ++ if (!emitter) ++ return new Response("Unexpected emitter project", { status: 401 }); + if (event.userId && erasures.has(event.userId)) + return Response.json({ accepted: true, discarded: "erased-user" }); + // Inbox insertion is the durable effect; downstream jobs can consume it later. + const result = db + .query("INSERT OR IGNORE INTO inbox VALUES (?, ?)") +- .run(event.eventId, body); ++ .run( ++ JSON.stringify([emitter.name, event.projectId, event.eventId]), ++ body, ++ ); + return Response.json({ accepted: true, duplicate: result.changes === 0 }); + } + diff --git a/packages/docs/public/commerce-example/07-account-erasure-interoperable/mobile.png b/packages/docs/public/commerce-example/07-account-erasure-interoperable/mobile.png new file mode 100644 index 0000000000000000000000000000000000000000..c5c65fac85b8b66d708e1d0d18c4f99ce9d63e56 GIT binary patch literal 126051 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%0AuP6u(ZYYQd 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 JOvu3Re*m1wwfO)5 literal 0 HcmV?d00001 diff --git a/packages/docs/public/commerce-example/07-account-erasure-interoperable/source.tar.gz b/packages/docs/public/commerce-example/07-account-erasure-interoperable/source.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..d4330fb8b580d076c6fe777f64b84a4f8542dfdd GIT binary patch literal 52317 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%0AKzc83CgFpx0%DU;Lbw1UZOee&)Yv2 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 literal 0 HcmV?d00001 diff --git a/packages/docs/public/commerce-example/07-account-erasure-reviewed/attempt-1.txt b/packages/docs/public/commerce-example/07-account-erasure-reviewed/attempt-1.txt new file mode 100644 index 000000000..9893b519e --- /dev/null +++ b/packages/docs/public/commerce-example/07-account-erasure-reviewed/attempt-1.txt @@ -0,0 +1,20 @@ +{ + "startedAt": "2026-09-08T19:31:42.943Z", + "commands": [ + { + "command": "npm ci --ignore-scripts --no-audit --no-fund", + "exitCode": 0, + "output": "\nadded 10 packages in 452ms\n" + }, + { + "command": "npm test", + "exitCode": 0, + "output": "\n> openiap-commerce-protocol-example@0.0.0 test\n> bun verify.mjs && bun test composition/app-backend.test.mjs\n\nCommerce Protocol Example: 159 checks passed. No store or production service contacted.\nbun test v1.3.13 (bf2e2cec)\n\ncomposition/app-backend.test.mjs:\n(pass) account deletion waits for in-flight fulfillment and retries provider erasure after app restart [75.21ms]\n\n 1 pass\n 0 fail\n 6 expect() calls\nRan 1 test across 1 file. [156.00ms]\n" + }, + { + "command": "npm run test:tooling", + "exitCode": 0, + "output": "\n> openiap-commerce-protocol-example@0.0.0 test:tooling\n> bun test checkpoint-tools.test.mjs\n\nbun test v1.3.13 (bf2e2cec)\n\ncheckpoint-tools.test.mjs:\n(pass) archive extraction excludes macOS metadata and preserves source hashes [27.60ms]\n(pass) patches preserve path-like source text across additions, changes, and deletions [101.69ms]\n(pass) failed attempts get new numbers and private paths are redacted [0.54ms]\n(pass) unfinished captures do not hide completed records [0.78ms]\n\n 4 pass\n 0 fail\nRan 4 tests across 1 file. [161.00ms]\n" + } + ] +} diff --git a/packages/docs/public/commerce-example/07-account-erasure-reviewed/changes.patch b/packages/docs/public/commerce-example/07-account-erasure-reviewed/changes.patch new file mode 100644 index 000000000..1f5af0ec7 --- /dev/null +++ b/packages/docs/public/commerce-example/07-account-erasure-reviewed/changes.patch @@ -0,0 +1,29 @@ +diff --git a/checkpoint.json b/checkpoint.json +index 2b4698d..75c152c 100644 +--- a/checkpoint.json ++++ b/checkpoint.json +@@ -1,8 +1,8 @@ + { + "step": 7, +- "id": "07-account-erasure", ++ "id": "07-account-erasure-reviewed", + "title": "Delete the account", +- "built": "Atomic provider erasure, recipient cleanup and late-delivery guards", ++ "built": "Account erasure with readable identity state", + "result": "The account identity is removed; retries and restart cannot restore it.", +- "previous": "06-recover-reviewed-8" ++ "previous": "07-account-erasure" + } +diff --git a/dashboard.html b/dashboard.html +index 68bb6ee..4504686 100644 +--- a/dashboard.html ++++ b/dashboard.html +@@ -302,7 +302,7 @@ + for (const row of rows) { + const tr = body.insertRow(); + for (const [, key] of columns) +- tr.insertCell().textContent = String(row[key] ?? "Unbound"); ++ tr.insertCell().textContent = String(row[key] ?? (key === "userId" ? "No user identity" : "—")); + } + $(target).append(table); + } diff --git a/packages/docs/public/commerce-example/07-account-erasure-reviewed/mobile.png b/packages/docs/public/commerce-example/07-account-erasure-reviewed/mobile.png new file mode 100644 index 0000000000000000000000000000000000000000..c5c65fac85b8b66d708e1d0d18c4f99ce9d63e56 GIT binary patch literal 126051 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%0AuP6u(ZYYQd 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 JOvu3Re*m1wwfO)5 literal 0 HcmV?d00001 diff --git a/packages/docs/public/commerce-example/07-account-erasure-reviewed/source.tar.gz b/packages/docs/public/commerce-example/07-account-erasure-reviewed/source.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..0d2ccf6885aaea383362fd09c1370a60e9a32e80 GIT binary patch literal 50838 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 H0Hgx|;}+on literal 0 HcmV?d00001 diff --git a/packages/docs/public/commerce-example/07-account-erasure/attempt-1.txt b/packages/docs/public/commerce-example/07-account-erasure/attempt-1.txt new file mode 100644 index 000000000..3ca8e3d35 --- /dev/null +++ b/packages/docs/public/commerce-example/07-account-erasure/attempt-1.txt @@ -0,0 +1,20 @@ +{ + "startedAt": "2026-09-08T19:22:04.465Z", + "commands": [ + { + "command": "npm ci --ignore-scripts --no-audit --no-fund", + "exitCode": 0, + "output": "\nadded 10 packages in 1s\n" + }, + { + "command": "npm test", + "exitCode": 0, + "output": "\n> openiap-commerce-protocol-example@0.0.0 test\n> bun verify.mjs && bun test composition/app-backend.test.mjs\n\nCommerce Protocol Example: 159 checks passed. No store or production service contacted.\nbun test v1.3.13 (bf2e2cec)\n\ncomposition/app-backend.test.mjs:\n(pass) account deletion waits for in-flight fulfillment and retries provider erasure after app restart [91.28ms]\n\n 1 pass\n 0 fail\n 6 expect() calls\nRan 1 test across 1 file. [175.00ms]\n" + }, + { + "command": "npm run test:tooling", + "exitCode": 0, + "output": "\n> openiap-commerce-protocol-example@0.0.0 test:tooling\n> bun test checkpoint-tools.test.mjs\n\nbun test v1.3.13 (bf2e2cec)\n\ncheckpoint-tools.test.mjs:\n(pass) archive extraction excludes macOS metadata and preserves source hashes [15.55ms]\n(pass) patches preserve path-like source text across additions, changes, and deletions [75.72ms]\n(pass) failed attempts get new numbers and private paths are redacted [0.95ms]\n(pass) unfinished captures do not hide completed records [3.34ms]\n\n 4 pass\n 0 fail\nRan 4 tests across 1 file. [121.00ms]\n" + } + ] +} diff --git a/packages/docs/public/commerce-example/07-account-erasure/changes.patch b/packages/docs/public/commerce-example/07-account-erasure/changes.patch new file mode 100644 index 000000000..dc064d782 --- /dev/null +++ b/packages/docs/public/commerce-example/07-account-erasure/changes.patch @@ -0,0 +1,2296 @@ +diff --git a/AGENTS.md b/AGENTS.md +new file mode 100644 +index 0000000..d5632c9 +--- /dev/null ++++ b/AGENTS.md +@@ -0,0 +1,22 @@ ++# Example acceptance ++ ++Read `README.md` for the runnable scope, `INTEGRATE.md` for product boundaries, ++and `BUILD.md` for the implementation milestones and completion checks. ++ ++Before finishing a change: ++ ++- Follow the running example as a first-time reader on desktop and mobile. ++ Explain the result and the reader's next decision before implementation ++ detail. Keep a short record of the tasks attempted and points of confusion. ++- Compare the affected responsibility with the corresponding IAPKit handler ++ and test linked from the [purchase guide](https://openiap.dev/commerce-protocol/getting-started). ++ Report the actual differences; the installed protocol remains authoritative. ++- Replay changed implementation instructions in a clean project, using only ++ the documented inputs. Run the startup command, tests, and affected demos. ++ Retain failed attempts and verify the repaired behavior independently. ++- Identify the tested source revision, commands, results, and fixture scope. ++ Do not infer real-store support, full profile conformance, or interoperability ++ between providers from a local fixture run. Label an AI reader simulation as ++ a simulation, not a human user study. ++ ++Do not manufacture successful output or weaken acceptance to hide a failure. +diff --git a/BUILD.md b/BUILD.md +index b5884a0..94a7142 100644 +--- a/BUILD.md ++++ b/BUILD.md +@@ -32,6 +32,14 @@ Implement the backend in my project. Do not require an OpenIAP or IAPKit checkou + and do not invent request fields, response shapes, role rules, or enum values. + Follow my repository's instructions. Keep work uncommitted for review. + ++Read this example alongside [IAPKit's service source](https://github.com/hyodotdev/openiap/tree/main/packages/kit). ++The [purchase walkthrough](https://openiap.dev/commerce-protocol/getting-started) ++connects each step to both implementations and their checks. Use this example ++to understand the small SQLite flow; use IAPKit to study real store adapters, ++project authorization, account erasure, and the GraphQL adapter. Compare the ++relevant code at each milestone without making either repository a runtime ++dependency of the new project. ++ + ## Start with a reviewable local result + + Use the stack already in my repository. If this is an empty project, choose a +@@ -66,26 +74,46 @@ Build these milestones in order: + events profile requires the public HTTPS destination protections in the spec. + 6. **Recovery:** reopen the databases with pending deliveries, resume processing, + and prove that neither ownership nor receiver deduplication disappears. ++7. **Account deletion:** remove provider identity and recipient copies, retry the ++ same erasure after restart, and reject stale account requests and late events. + + After each milestone, run it. Show the command, actual API result, storage + change, and passing assertions. Capture the working screen. Do not manufacture + logs, screenshots, conformance counts, or claims about capabilities not tested. + ++## Complete the local implementation ++ ++Before calling the result complete, implement erasure for the account lifecycle: ++remove the user identity from provider records and event history, preserve other ++users, and prevent a late retry from restoring erased recipient data. Keep ++provider erasure separate from the recipient's responsibility for delivered ++copies. Exercise erasure during delivery, on repetition, and after restart. ++ ++Run the portable conformance runner for every selected profile and binding. ++Do not finish with tests that expect known conformance failures. Keep every ++previously exercised case in the completed run; changing declarations must not ++hide a failure. Describe fixture-only capabilities explicitly, without implying ++that a real store API or notification channel was connected. ++ ++Copy only source and package metadata into an empty directory. Install, test, ++and start it there, without the development database or output directories. ++Check the visible app after purchase, cancellation, expiry, reload, and deletion. ++ + ## Deliver + + - A runnable local backend and small inspection UI. + - One command that verifies the demonstrated flow and exits nonzero on failure. + - A short visual walkthrough, with real captured results for each milestone. + - The exact scope and remaining work, including real store validation, +- authentication, erasure, multi-tenant isolation, public HTTPS delivery, +- operations, and full profile conformance. Keep the main explanation short; ++ real authentication, multi-tenant isolation, public HTTPS delivery, and ++ operations. Include the passing local conformance report and its fixture scope. Keep the main explanation short; + link the specification for details. + + ## Then extend toward a production provider + + Ask me which real store, backend identity system, and deployment environment to +-integrate before using credentials or external services. Implement the remaining +-operations of each chosen profile, including erasure for `accountLifecycle`. ++integrate before using credentials or external services. Replace fictional store and session adapters with the chosen integrations. ++Keep the completed profile behavior and erasure checks passing. + Run the portable conformance runner for every advertised binding and profile; + also run real store sandbox, recovery, isolation, and load tests. Treat IAPKit as + an implementation example, never as a replacement for the protocol's contract. +diff --git a/INTEGRATE.md b/INTEGRATE.md +index c497c13..ba56c4a 100644 +--- a/INTEGRATE.md ++++ b/INTEGRATE.md +@@ -36,6 +36,13 @@ gives the endpoint, configuration, and limits. + + ## Task for the AI + ++Use the [purchase walkthrough](https://openiap.dev/commerce-protocol/getting-started) ++to compare this example with [IAPKit's service implementation](https://github.com/hyodotdev/openiap/tree/main/packages/kit) ++at each step. This repository shows the small local implementation; IAPKit shows ++store adapters, project credentials, erasure, and both API bindings. Follow the ++linked handlers and checks for the responsibility you own. The installed ++specification defines the required behavior; neither implementation changes it. ++ + Inspect this repository's purchase flow and choose the role from the table. + Install `openiap-commerce-protocol` with this repository's package manager. + Read its `SPEC.md`, generated bindings and schemas, and signature/lifecycle +diff --git a/README.md b/README.md +index ec1ec9a..a11d8e0 100644 +--- a/README.md ++++ b/README.md +@@ -1,8 +1,8 @@ + # OpenIAP Commerce Protocol example + +-A runnable purchase-to-access backend, built and reviewed with AI in six ++A runnable purchase-to-access backend, built and reviewed with AI in seven + milestones. Follow a purchase through verification, ownership, access, and +-signed event delivery. Inspect the actual HTTP responses and database changes. ++signed event delivery, and account deletion. Inspect the actual HTTP responses and database changes. + + The backend uses the published **`openiap-commerce-protocol`** package. HTTP, + SQLite, and webhook signatures run locally; the store, users, and clock are +@@ -23,7 +23,7 @@ npm start + ``` + + Open **http://127.0.0.1:5181**, then click **Run step 1 →** and continue through +-step 6. Each step changes real local state. The dashboard shows purchases, ++step 7. Each step changes real local state. The dashboard shows purchases, + current access, delivery attempts, and expandable request/response details. + No store account, API key, OpenIAP checkout, or IAPKit account is required. + Modern Yarn uses the included `node_modules` linker. +@@ -44,6 +44,7 @@ and the [complete build history](https://github.com/hyodotdev/openiap-commerce-p + | 4. Cancel | Turn off renewal; queue an event | Paid access remains until expiry | + | 5. Deliver | Sign events; retry a failed receiver | A repeated delivery has one inbox effect | + | 6. Expire | Advance the clock; reopen SQLite | Access closes; ownership and delivery records remain | ++| 7. Erase | Remove provider identity and receiver copies | Repeated deletion and late deliveries cannot restore the user | + + Restarting `npm start` creates a fresh temporary database, so you can replay the + walkthrough. Step 6 reopens the existing databases **inside the running process**; +@@ -109,9 +110,32 @@ and Google Chrome. The [recording guide](https://github.com/hyodotdev/openiap-co + explains how to preserve a checkpoint and export evidence. GitHub CI runs the + runtime, tooling, archive, and documentation-export checks. + ++## Account deletion ++ ++Step 7 runs `eraseUser` using server credentials. The provider removes identity ++from purchases and removes identity-bearing event records in one transaction. ++A repeated request returns the same completed job, including after restart. ++ ++The app owns already-delivered copies: it erases its receiver inbox and retains ++a keyed deletion marker so late signed events are acknowledged without storing ++the deleted identity. The example also refuses rebinding erased evidence. ++This is a local ownership policy; the protocol does not cancel the store subscription. ++Database backups and the app’s own account records remain the operator’s responsibility. ++ ++Run `bun verify-erasure.mjs` to exercise deletion while a delivery is in flight, ++late lifecycle events, repeated requests, and storage reopening. ++ ++## Replace the example with IAPKit ++ ++The OpenIAP checkout includes `packages/kit/scripts/docs/run-commerce-interop.mjs`. ++It starts IAPKit with an isolated local Convex deployment and keeps one app ++backend and receiver running while switching the commerce provider. See the ++[composition guide](https://openiap.dev/commerce-protocol/ecosystem#composition-proof) ++for the executed report, source, and command. No IAPKit account or store keys are needed. ++ + ## What remains for production + +-Real store validation and sandbox purchases, login, user erasure, tenant ++Real store validation and sandbox purchases, login, tenant + isolation, GraphQL, public HTTPS delivery protections, and operational recovery + are not implemented here. The backend advertises **no complete profiles**. + Schema checks and the local walkthrough do not establish profile conformance. +diff --git a/capture.mjs b/capture.mjs +index 53904d7..9ff8993 100644 +--- a/capture.mjs ++++ b/capture.mjs +@@ -9,7 +9,7 @@ import { + rmSync, + } from "node:fs"; + import { tmpdir } from "node:os"; +-import { join } from "node:path"; ++import { dirname, join } from "node:path"; + import { pathToFileURL } from "node:url"; + import { chromium } from "@playwright/test"; + import { +@@ -46,8 +46,10 @@ let lab, browser; + try { + mkdirSync(current); + mkdirSync(previous); +- for (const name of SOURCE_FILES) ++ for (const name of SOURCE_FILES) { ++ mkdirSync(dirname(join(current, name)), { recursive: true }); + cpSync(join(root, name), join(current, name)); ++ } + const sourceHashes = hashes(current); + if (checkpoint.previous) { + assert(/^\d\d-[\w-]+$/.test(checkpoint.previous)); +diff --git a/checkpoint-tools.mjs b/checkpoint-tools.mjs +index 06b5f3b..6e6cfd4 100644 +--- a/checkpoint-tools.mjs ++++ b/checkpoint-tools.mjs +@@ -8,6 +8,7 @@ import { + mkdtempSync, + readFileSync, + readdirSync, ++ statSync, + rmSync, + writeFileSync, + } from "node:fs"; +@@ -18,6 +19,7 @@ export const SOURCE_FILES = [ + ".gitignore", + ".yarnrc.yml", + "LICENSE", ++ "AGENTS.md", + "README.md", + "BUILD.md", + "INTEGRATE.md", +@@ -27,6 +29,8 @@ export const SOURCE_FILES = [ + "package-lock.json", + "contract.mjs", + "provider.mjs", ++ "erasure.mjs", ++ "verify-erasure.mjs", + "webhooks.mjs", + "consumer.mjs", + "client-bridge.mjs", +@@ -34,6 +38,15 @@ export const SOURCE_FILES = [ + "server.mjs", + "verify.mjs", + "dashboard.html", ++ "composition/README.md", ++ "composition/app-backend.mjs", ++ "composition/app-backend.test.mjs", ++ "composition/commerce-client.mjs", ++ "composition/export.mjs", ++ "composition/memory-provider.mjs", ++ "composition/purchase-flow.mjs", ++ "composition/run.mjs", ++ + "capture.mjs", + "export-docs.mjs", + "checkpoint-tools.mjs", +@@ -42,12 +55,18 @@ export const SOURCE_FILES = [ + ]; + export const sha256 = (file) => + createHash("sha256").update(readFileSync(file)).digest("hex"); +-export const hashes = (directory) => +- Object.fromEntries( +- readdirSync(directory) +- .sort() +- .map((name) => [name, sha256(join(directory, name))]), +- ); ++export function hashes(directory) { ++ const entries = []; ++ function visit(relative) { ++ for (const name of readdirSync(join(directory, relative)).sort()) { ++ const file = join(relative, name); ++ if (statSync(join(directory, file)).isDirectory()) visit(file); ++ else entries.push([file, sha256(join(directory, file))]); ++ } ++ } ++ visit(""); ++ return Object.fromEntries(entries); ++} + export function sanitize(text) { + const roots = [process.cwd(), import.meta.dir, homedir()] + .filter(Boolean) +diff --git a/checkpoint.json b/checkpoint.json +index 5ee086d..2b4698d 100644 +--- a/checkpoint.json ++++ b/checkpoint.json +@@ -1,8 +1,8 @@ + { +- "step": 6, +- "id": "06-recover-reviewed-8", +- "title": "Expire access and restart", +- "built": "Exact-byte webhook authentication with Unicode regression checks", +- "result": "Access closes at the deadline. Restarting preserves purchases and deliveries.", +- "previous": "06-recover-reviewed-7" ++ "step": 7, ++ "id": "07-account-erasure", ++ "title": "Delete the account", ++ "built": "Atomic provider erasure, recipient cleanup and late-delivery guards", ++ "result": "The account identity is removed; retries and restart cannot restore it.", ++ "previous": "06-recover-reviewed-8" + } +diff --git a/composition/README.md b/composition/README.md +new file mode 100644 +index 0000000..00ffd08 +--- /dev/null ++++ b/composition/README.md +@@ -0,0 +1,92 @@ ++# Compose services and inspect the boundary ++ ++Run the same app-backend client against two separately implemented fixture ++providers, and send both providers' events to the same receiver implementation. ++Only connection configuration changes. The runner records the results and source ++hashes, and fails when a compared outcome differs. ++ ++With Bun 1.3.13 and Node.js 24 / npm installed, run from the repository root ++(or the extracted source archive): ++ ++```sh ++npm ci --ignore-scripts ++bun composition/run.mjs ++bun composition/run.mjs --record composition-report.json ++``` ++ ++No environment variables, `.env` file, store accounts, or IAPKit credentials are ++required. The runner creates its fixture credentials, webhook keys, temporary ++databases, and local HTTP ports, then cleans up after itself. Installing ++dependencies needs registry access; the composition run uses loopback HTTP only. ++ ++The existing six-step dashboard remains available through `npm start` at ++`http://127.0.0.1:5181`. Set `COMMERCE_LAB_PORT` only to change that port. ++ ++## Follow the code ++ ++| Part | Source | Responsibility | ++| --------------------- | --------------------------------- | ---------------------------------------------------------------------------------------------------- | ++| App backend | `composition/commerce-client.mjs` | Validate calls, verify evidence, bind to the authenticated user, read access | ++| Host/paywall callback | `composition/purchase-flow.mjs` | Purchase → backend fulfillment → finish; display pending, canceled, failed, or fulfilled | ++| Provider A | `provider.mjs` | Existing SQLite purchase and ownership implementation | ++| Provider B | `composition/memory-provider.mjs` | Separate Map-based handlers and event signer; shares contract metadata, no Provider A business logic | ++| Event consumer | `webhooks.mjs` | Authenticate raw bytes and persist one inbox effect per event | ++| Reproduction | `composition/run.mjs` | Start isolated HTTP listeners, run both configurations, compare results and failure cases | ++ ++The app backend holds the server credential and selects `userId` from its own ++authenticated session. The host adapter receives a fulfillment callback; never ++ship `commerce-client.mjs` or its credential to an app. Real SDK pending results ++resume through the app's purchase-update listener. This fixture exercises the ++callback boundary, not a particular paywall SDK or mobile purchase runtime. ++ ++## What the run demonstrates ++ ++Both configurations save verification without granting access, bind only once, ++reject another owner, preserve access after cancellation, and close it exactly ++at expiry even before a notification. Both emit signed events; a 503 retries, ++redelivery has one inbox effect, altered bodies and another emitter's key fail, ++and an optional `extensions["partner.segment"]` string survives storage without editing the ++consumer. The consumer also rejects a malformed successful API response. ++ ++Each emitter/project has its own configured endpoint, secret, and inbox ++database. Equal event IDs from different emitters therefore do not collide. ++This does not identify duplicate real-world facts across a provider cutover. ++ ++## Make and verify one change ++ ++Change the `extensions["partner.segment"]` string in `composition/run.mjs`, rerun ++the command, and inspect its storage check. The purchase flow, client, and ++receiver modules stay the same. For a provider implementation ++change, retain the expected access results and rerun against both providers; ++do not edit the expected outcome merely to make an incompatible result pass. ++ ++`bun composition/export.mjs ` also runs a negative control ++inside a temporary copy: changing the SQLite access deadline from `<` to `<=` ++must fail the deadline check. It leaves the original source unchanged. ++ ++## Bring another implementation ++ ++Use `createCommerceClient({ baseUrl, credential })` for a disposable test account. ++Supply a provider-owned setup/transition adapter in the runner for its fixture ++purchase, cancellation, and expiry; those controls are not protocol operations. ++Keep the client, receiver, and expected outcomes unchanged. Record the exact ++revision, configuration fields changed (never secret values), commands, result ++report, and any required code changes. A changed adapter is evidence of work ++needed, not a reason to hide the change. ++ ++Run the published protocol conformance runner separately for every claimed ++profile/binding. This demo advertises no complete profiles. External teams can ++publish their own report without an OpenIAP account or hosted checker. ++ ++## Scope ++ ++The services communicate over real loopback HTTP in one Bun process. Provider A ++uses SQLite; Provider B keeps state in memory. Store evidence, users, clock, and ++purchase callbacks are fixtures. Both implementations were authored within this ++project: this is reproducible implementation evidence, not independent company ++validation. It proves neither real store verification nor production reliability. ++ ++Both providers start empty. Moving ownership/history, rotating credentials, ++cutover overlap, process-crash recovery, and a real SDK purchase need separate ++tests. The baseline receiver stores events; it does not compute a revenue ledger ++or grant access from webhook arrival. +diff --git a/composition/app-backend.mjs b/composition/app-backend.mjs +new file mode 100644 +index 0000000..04475a7 +--- /dev/null ++++ b/composition/app-backend.mjs +@@ -0,0 +1,114 @@ ++import { Database } from "bun:sqlite"; ++import { createCommerceClient } from "./commerce-client.mjs"; ++import { createErasureLedger } from "../erasure.mjs"; ++ ++// resolveSession is the host app's authentication boundary, supplied by the caller. ++export function startAppBackend({ path, providers, receiver, resolveSession }) { ++ const db = new Database(path, { create: true }); ++ db.exec( ++ "CREATE TABLE IF NOT EXISTS erasure_requests (user_id TEXT, provider TEXT, PRIMARY KEY(user_id, provider))", ++ ); ++ const erased = createErasureLedger(db); ++ const clients = Object.fromEntries( ++ Object.entries(providers).map(([name, config]) => [ ++ name, ++ createCommerceClient(config), ++ ]), ++ ); ++ const inFlight = new Map(); ++ let selected = Object.keys(clients)[0]; ++ async function drainErasure() { ++ for (const row of db.query("SELECT * FROM erasure_requests").all()) { ++ try { ++ receiver.eraseUser(row.user_id); ++ const result = await clients[row.provider].call("eraseUser", { ++ userId: row.user_id, ++ }); ++ if (result.accepted && result.status === "completed") ++ db.query( ++ "DELETE FROM erasure_requests WHERE user_id = ? AND provider = ?", ++ ).run(row.user_id, row.provider); ++ } catch { ++ /* The durable request is retried by the app's worker. */ ++ } ++ } ++ return db.query("SELECT count(*) AS count FROM erasure_requests").get() ++ .count; ++ } ++ const server = Bun.serve({ ++ hostname: "127.0.0.1", ++ port: 0, ++ maxRequestBodySize: 32768, ++ async fetch(request) { ++ const userId = await resolveSession(request); ++ if (!userId || erased.has(userId)) ++ return new Response("Unauthenticated", { status: 401 }); ++ const url = new URL(request.url); ++ try { ++ if (url.pathname === "/purchase" && request.method === "POST") { ++ const input = await request.json(); ++ if (erased.has(userId)) ++ return new Response("Unauthenticated", { status: 401 }); ++ const work = clients[selected].fulfill(input, { ++ userId, ++ productId: "premium.monthly", ++ }); ++ const pending = inFlight.get(userId) ?? new Set(); ++ pending.add(work); ++ inFlight.set(userId, pending); ++ let result; ++ try { ++ result = await work; ++ } finally { ++ pending.delete(work); ++ if (!pending.size) inFlight.delete(userId); ++ } ++ // A deletion can race the upstream calls; never return access afterwards. ++ return Response.json(erased.has(userId) ? { access: false } : result); ++ } ++ if (url.pathname === "/access" && request.method === "GET") { ++ const result = await clients[selected].call("entitlements", { ++ userId, ++ }); ++ return erased.has(userId) ++ ? new Response("Unauthenticated", { status: 401 }) ++ : Response.json(result); ++ } ++ if (url.pathname === "/account" && request.method === "DELETE") { ++ db.transaction(() => { ++ erased.remember(userId); ++ for (const name of Object.keys(clients)) ++ db.query( ++ "INSERT OR IGNORE INTO erasure_requests VALUES (?,?)", ++ ).run(userId, name); ++ })(); ++ receiver.eraseUser(userId); ++ await Promise.allSettled([...(inFlight.get(userId) ?? [])]); ++ const pending = await drainErasure(); ++ return Response.json({ ++ accepted: true, ++ status: pending ? "queued" : "completed", ++ }); ++ } ++ return new Response("Not found", { status: 404 }); ++ } catch { ++ return Response.json( ++ { error: "Commerce provider unavailable; retry the request." }, ++ { status: 503 }, ++ ); ++ } ++ }, ++ }); ++ return { ++ url: `http://127.0.0.1:${server.port}`, ++ select(name) { ++ if (!clients[name]) throw new Error("Unknown provider"); ++ selected = name; ++ }, ++ drainErasure, ++ async close() { ++ await server.stop(true); ++ db.close(); ++ }, ++ }; ++} +diff --git a/composition/app-backend.test.mjs b/composition/app-backend.test.mjs +new file mode 100644 +index 0000000..7f2da7c +--- /dev/null ++++ b/composition/app-backend.test.mjs +@@ -0,0 +1,91 @@ ++import { test, expect } from "bun:test"; ++import { mkdtempSync, rmSync } from "node:fs"; ++import { tmpdir } from "node:os"; ++import { join } from "node:path"; ++import { createProvider, FIXTURE, CREDENTIALS } from "../provider.mjs"; ++import { startConsumer } from "../consumer.mjs"; ++import { startAppBackend } from "./app-backend.mjs"; ++ ++test("account deletion waits for in-flight fulfillment and retries provider erasure after app restart", async () => { ++ const directory = mkdtempSync(join(tmpdir(), "commerce-app-erasure-")); ++ const provider = createProvider( ++ join(directory, "provider.sqlite"), ++ () => FIXTURE.startsAt, ++ ); ++ let releaseBind, signalBind; ++ const binding = new Promise((resolve) => { ++ signalBind = resolve; ++ }); ++ const gate = new Promise((resolve) => { ++ releaseBind = resolve; ++ }); ++ let rejectErase = true; ++ const server = Bun.serve({ ++ hostname: "127.0.0.1", ++ port: 0, ++ async fetch(request) { ++ if (new URL(request.url).pathname.endsWith("/bind")) { ++ signalBind(); ++ await gate; ++ } ++ if (new URL(request.url).pathname.endsWith("/erase") && rejectErase) ++ return new Response(null, { status: 503 }); ++ return provider.fetch(request); ++ }, ++ }); ++ const receiver = startConsumer({ ++ path: join(directory, "receiver.sqlite"), ++ secret: "fixture-key", ++ }); ++ const options = { ++ path: join(directory, "app.sqlite"), ++ providers: { ++ example: { ++ baseUrl: `http://127.0.0.1:${server.port}`, ++ credential: CREDENTIALS.server, ++ }, ++ }, ++ receiver, ++ resolveSession: () => FIXTURE.userId, ++ }; ++ let app = startAppBackend(options); ++ try { ++ const purchase = fetch(app.url + "/purchase", { ++ method: "POST", ++ body: JSON.stringify({ ++ store: FIXTURE.store, ++ evidence: FIXTURE.evidence, ++ }), ++ }); ++ await binding; ++ const deletion = fetch(app.url + "/account", { method: "DELETE" }); ++ for (let i = 0; i < 50; i++) { ++ const response = await fetch(app.url + "/access"); ++ if (response.status === 401) break; ++ await Bun.sleep(10); ++ } ++ expect((await fetch(app.url + "/access")).status).toBe(401); ++ releaseBind(); ++ expect(await (await purchase).json()).toEqual({ access: false }); ++ expect(await (await deletion).json()).toEqual({ ++ accepted: true, ++ status: "queued", ++ }); ++ await app.close(); ++ app = startAppBackend(options); ++ expect( ++ (await fetch(app.url + "/purchase", { method: "POST", body: "{}" })) ++ .status, ++ ).toBe(401); ++ rejectErase = false; ++ expect(await app.drainErasure()).toBe(0); ++ expect(provider.inspect().purchases[0].userId).toBeNull(); ++ } finally { ++ releaseBind(); ++ await app.close(); ++ await receiver.close(); ++ await server.stop(true); ++ provider.close(); ++ rmSync(directory, { recursive: true, force: true }); ++ } ++}); +diff --git a/composition/commerce-client.mjs b/composition/commerce-client.mjs +new file mode 100644 +index 0000000..7b5820f +--- /dev/null ++++ b/composition/commerce-client.mjs +@@ -0,0 +1,46 @@ ++import { operation, validate } from "../contract.mjs"; ++ ++// This module runs on the authenticated app backend, which owns the credential. ++export function createCommerceClient({ baseUrl, credential }) { ++ async function call(name, input) { ++ const spec = operation(name); ++ if (!spec) throw new Error("Unknown operation"); ++ if (spec.input && !validate(spec.input, input)) ++ throw new Error("Invalid operation input"); ++ const url = new URL(spec.path, baseUrl); ++ if (spec.method === "GET" && input) ++ for (const [key, value] of Object.entries(input)) ++ url.searchParams.set(key, value); ++ const response = await fetch(url, { ++ method: spec.method, ++ headers: { ++ "content-type": "application/json", ++ ...(spec.auth === "none" ? {} : { authorization: credential }), ++ }, ++ ...(spec.method === "POST" ? { body: JSON.stringify(input) } : {}), ++ redirect: "error", ++ signal: AbortSignal.timeout(5000), ++ }); ++ const result = await response.json(); ++ if (response.status !== spec.successStatus) ++ throw new Error("Commerce operation failed"); ++ if (!validate(spec.result, result)) ++ throw new Error("Invalid operation result"); ++ return result; ++ } ++ ++ async function fulfill(input, { userId, productId }) { ++ const evidence = { ...input }; ++ delete evidence.userId; ++ const verdict = await call("verifyPurchase", evidence); ++ if (!verdict.isValid) throw new Error("Purchase was not accepted"); ++ const binding = await call("bindPurchase", { ...evidence, userId }); ++ if (!binding.bound) throw new Error("Purchase belongs to another user"); ++ const access = await call("entitlements", { userId }); ++ if (!access.productIds.includes(productId)) ++ throw new Error("Requested product is not accessible"); ++ return access; ++ } ++ ++ return { call, fulfill }; ++} +diff --git a/composition/export.mjs b/composition/export.mjs +new file mode 100644 +index 0000000..cfb9c06 +--- /dev/null ++++ b/composition/export.mjs +@@ -0,0 +1,125 @@ ++import assert from "node:assert/strict"; ++import { spawnSync } from "node:child_process"; ++import { createHash } from "node:crypto"; ++import { ++ cpSync, ++ mkdirSync, ++ mkdtempSync, ++ readFileSync, ++ rmSync, ++ writeFileSync, ++} from "node:fs"; ++import { tmpdir } from "node:os"; ++import { dirname, join, resolve } from "node:path"; ++import { fileURLToPath } from "node:url"; ++import { SOURCE_FILES } from "../checkpoint-tools.mjs"; ++import { COMPOSITION_SOURCES, runComposition } from "./run.mjs"; ++ ++const root = fileURLToPath(new URL("../", import.meta.url)); ++assert( ++ process.argv[2], ++ "Usage: bun composition/export.mjs ", ++); ++const output = resolve(process.argv[2]); ++const temp = mkdtempSync(join(tmpdir(), "commerce-composition-export-")); ++const source = join(temp, "source"), ++ replay = join(temp, "replay"); ++const run = (command, args, cwd) => { ++ const result = spawnSync(command, args, { ++ cwd, ++ encoding: "utf8", ++ maxBuffer: 5 * 1024 * 1024, ++ env: { ...process.env, COPYFILE_DISABLE: "1" }, ++ }); ++ assert.equal( ++ result.status, ++ 0, ++ `${command} failed: ${result.stderr}\n${result.stdout}`, ++ ); ++}; ++try { ++ const report = await runComposition(); ++ const names = [ ++ ...new Set([ ++ ...SOURCE_FILES, ++ ...COMPOSITION_SOURCES, ++ "composition/export.mjs", ++ ]), ++ ].sort(); ++ for (const name of names) { ++ mkdirSync(dirname(join(source, name)), { recursive: true }); ++ cpSync(join(root, name), join(source, name)); ++ } ++ mkdirSync(output, { recursive: true }); ++ const archive = join(output, "source.tar.gz"); ++ run("tar", ["-czf", archive, ...names], source); ++ mkdirSync(replay); ++ run("tar", ["-xzf", archive, "-C", replay], temp); ++ run("npm", ["ci", "--ignore-scripts"], replay); ++ run( ++ process.execPath, ++ ["composition/run.mjs", "--record", "replay.json"], ++ replay, ++ ); ++ const replayed = JSON.parse( ++ readFileSync(join(replay, "replay.json"), "utf8"), ++ ); ++ assert.deepEqual(replayed.sourceHashes, report.sourceHashes); ++ assert.deepEqual(replayed.results, report.results); ++ assert.deepEqual(replayed.checks, report.checks); ++ const providerPath = join(replay, "provider.mjs"); ++ const original = readFileSync(providerPath, "utf8"); ++ assert(original.includes("now < expiresAt")); ++ writeFileSync( ++ providerPath, ++ original.replace("now < expiresAt", "now <= expiresAt"), ++ ); ++ const negative = spawnSync(process.execPath, ["composition/run.mjs"], { ++ cwd: replay, ++ encoding: "utf8", ++ maxBuffer: 1024 * 1024, ++ }); ++ const rejectedCheck = ++ "sqlite: read closes access at the deadline before a notification"; ++ assert.equal(negative.status, 1); ++ assert( ++ (negative.stderr + negative.stdout).includes(rejectedCheck), ++ "Negative control must fail the intended assertion", ++ ); ++ report.negativeControl = { ++ change: ++ "Replace now < expiresAt with now <= expiresAt in a temporary provider copy", ++ detected: true, ++ rejectedCheck, ++ }; ++ report.archiveVerification = { ++ command: "npm ci --ignore-scripts && bun composition/run.mjs", ++ sameSourceAndResults: true, ++ sha256: createHash("sha256").update(readFileSync(archive)).digest("hex"), ++ }; ++ writeFileSync( ++ join(output, "run.json"), ++ JSON.stringify(report, null, 2) + "\n", ++ ); ++ writeFileSync( ++ join(output, "source.json"), ++ JSON.stringify( ++ Object.fromEntries( ++ [ ++ "composition/commerce-client.mjs", ++ "composition/purchase-flow.mjs", ++ "composition/memory-provider.mjs", ++ "composition/run.mjs", ++ ].map((name) => [name, readFileSync(join(source, name), "utf8")]), ++ ), ++ null, ++ 2, ++ ) + "\n", ++ ); ++ cpSync(join(root, "composition/README.md"), join(output, "README.md")); ++ console.log( ++ `Exported ${report.checks.length} composition checks with a clean-install archive replay.`, ++ ); ++} finally { ++ rmSync(temp, { recursive: true, force: true }); ++} +diff --git a/composition/memory-provider.mjs b/composition/memory-provider.mjs +new file mode 100644 +index 0000000..dff6b8a +--- /dev/null ++++ b/composition/memory-provider.mjs +@@ -0,0 +1,266 @@ ++import { createHmac, randomUUID } from "node:crypto"; ++import { ++ COMMERCE_EVENT_VERSION, ++ HTTP_BINDING, ++ WEBHOOK, ++ providerCapabilitiesSchema, ++} from "openiap-commerce-protocol"; ++import { operation, protocolError, validate } from "../contract.mjs"; ++ ++// A second fixture implementation; it shares contract metadata, not SQLite logic. ++export function createMemoryProvider({ fixture, credential, now }) { ++ const purchases = new Map(); ++ const outbox = []; ++ const supported = new Set([ ++ "initialValidation", ++ "subscriptions", ++ "entitlements", ++ "serverNotifications", ++ "expiration", ++ ]); ++ const capabilities = { ++ specVersion: HTTP_BINDING.protocolVersion, ++ implementation: { ++ name: "Memory provider — separately implemented fixture", ++ }, ++ eventTypes: [ ++ "entitlement.granted", ++ "subscription.canceled", ++ "subscription.expired", ++ "entitlement.revoked", ++ ], ++ stores: { ++ [fixture.store]: Object.fromEntries( ++ Object.keys( ++ providerCapabilitiesSchema.$defs.StoreCapabilities.properties, ++ ).map((name) => [ ++ name, ++ { ++ provider: supported.has(name), ++ implementation: supported.has(name), ++ notes: ++ "Fictional store only; no complete profile or production claim.", ++ }, ++ ]), ++ ), ++ }, ++ }; ++ ++ function snapshot(purchase) { ++ return { ++ store: fixture.store, ++ productId: fixture.productId, ++ state: purchase.expired ? "Expired" : "Active", ++ active: !purchase.expired && now() < fixture.expiresAt, ++ expiresAt: fixture.expiresAt, ++ willRenew: purchase.renews, ++ }; ++ } ++ ++ function emit(eventType, purchase) { ++ const event = { ++ eventId: randomUUID(), ++ eventType, ++ eventVersion: COMMERCE_EVENT_VERSION, ++ occurredAt: now(), ++ processedAt: now(), ++ store: fixture.store, ++ environment: "local-fixture", ++ projectId: "memory_example", ++ userId: purchase.owner, ++ productId: fixture.productId, ++ subscription: snapshot(purchase), ++ }; ++ if (!validate("#/$defs/CommerceEvent", event)) ++ throw new Error("Invalid event"); ++ outbox.push({ ++ event, ++ attempts: 0, ++ status: "pending", ++ nextAt: now(), ++ deliveryId: randomUUID(), ++ }); ++ } ++ ++ const handlers = { ++ providerCapabilities: () => capabilities, ++ verifyPurchase(input) { ++ if (input.store !== fixture.store) return { error: "UNSUPPORTED_STORE" }; ++ if (typeof input.evidence !== "string") ++ return { error: "INVALID_REQUEST" }; ++ if (input.evidence === "local-upstream-outage") ++ return { error: "VERIFICATION_FAILED" }; ++ const accepted = input.evidence === fixture.evidence; ++ if (accepted && !purchases.has(input.evidence)) ++ purchases.set(input.evidence, { ++ owner: null, ++ renews: true, ++ expired: false, ++ granted: false, ++ }); ++ return { ++ store: fixture.store, ++ isValid: accepted && now() < fixture.expiresAt, ++ state: !accepted ++ ? "INAUTHENTIC" ++ : now() >= fixture.expiresAt ++ ? "EXPIRED" ++ : "ENTITLED", ++ ...(accepted ? { productId: fixture.productId } : {}), ++ environment: "local-fixture", ++ }; ++ }, ++ bindPurchase(input) { ++ if (input.store !== fixture.store) return { error: "UNSUPPORTED_STORE" }; ++ if (typeof input.evidence !== "string") ++ return { error: "INVALID_REQUEST" }; ++ const purchase = purchases.get(input.evidence); ++ if (!purchase) return { bound: false }; ++ if (purchase.owner === null) { ++ purchase.owner = input.userId; ++ if (snapshot(purchase).active) { ++ emit("entitlement.granted", purchase); ++ purchase.granted = true; ++ } ++ } ++ return { bound: purchase.owner === input.userId }; ++ }, ++ entitlements({ userId }) { ++ const subscriptions = [...purchases.values()] ++ .filter((purchase) => purchase.owner === userId) ++ .map(snapshot) ++ .filter((subscription) => subscription.active); ++ return { ++ userId, ++ productIds: [...new Set(subscriptions.map((row) => row.productId))], ++ subscriptions, ++ }; ++ }, ++ subscriptionStatus({ userId }) { ++ const purchase = [...purchases.values()].find( ++ (row) => row.owner === userId, ++ ); ++ const subscription = purchase ? snapshot(purchase) : undefined; ++ return { ++ active: subscription?.active ?? false, ++ ...(subscription ? { subscription } : {}), ++ }; ++ }, ++ }; ++ ++ async function fetch(request) { ++ const url = new URL(request.url); ++ const spec = HTTP_BINDING.operations.find( ++ (entry) => entry.path === url.pathname && entry.method === request.method, ++ ); ++ if (!spec) return protocolError("NOT_FOUND"); ++ if ( ++ spec.auth !== "none" && ++ request.headers.get("authorization") !== credential ++ ) ++ return protocolError("UNAUTHORIZED"); ++ if (!handlers[spec.name]) return protocolError("UNSUPPORTED_PROFILE"); ++ let input; ++ try { ++ input = spec.input ++ ? request.method === "GET" ++ ? Object.fromEntries(url.searchParams) ++ : await request.json() ++ : null; ++ } catch { ++ return protocolError("INVALID_REQUEST"); ++ } ++ if (spec.input && !validate(spec.input, input)) ++ return protocolError("INVALID_REQUEST"); ++ const result = handlers[spec.name](input); ++ if (result.error) return protocolError(result.error); ++ if (!validate(operation(spec.name).result, result)) ++ return protocolError("INTERNAL_ERROR"); ++ return Response.json(result, { status: spec.successStatus }); ++ } ++ ++ function observe(kind) { ++ const purchase = purchases.get(fixture.evidence); ++ if (!purchase?.owner) throw new Error("Bind the fixture purchase first"); ++ if (kind === "cancel") { ++ if (!purchase.renews) return; ++ purchase.renews = false; ++ emit("subscription.canceled", purchase); ++ } else if (kind === "expire" && now() >= fixture.expiresAt) { ++ if (purchase.expired) return; ++ purchase.expired = true; ++ purchase.renews = false; ++ emit("subscription.expired", purchase); ++ if (purchase.granted) { ++ emit("entitlement.revoked", purchase); ++ purchase.granted = false; ++ } ++ } else throw new Error("Invalid fixture transition"); ++ } ++ ++ function signed(event, secret) { ++ const body = JSON.stringify(event); ++ const timestamp = String(Math.floor(now() / 1000)); ++ const digest = createHmac("sha256", secret) ++ .update(Buffer.concat([Buffer.from(`${timestamp}.`), Buffer.from(body)])) ++ .digest("hex"); ++ return { ++ body, ++ headers: { ++ "content-type": WEBHOOK.contentType, ++ [WEBHOOK.timestampHeader]: timestamp, ++ [WEBHOOK.signatureHeader]: WEBHOOK.signaturePrefix + digest, ++ [WEBHOOK.eventIdHeader]: event.eventId, ++ }, ++ }; ++ } ++ ++ async function flush(url, secret) { ++ const results = []; ++ for (const item of outbox.filter( ++ (row) => row.status === "pending" && row.nextAt <= now(), ++ )) { ++ const request = signed(item.event, secret); ++ let status; ++ try { ++ status = ( ++ await globalThis.fetch(url, { ++ method: "POST", ++ ...request, ++ headers: { ++ ...request.headers, ++ [WEBHOOK.deliveryIdHeader]: item.deliveryId, ++ }, ++ redirect: "error", ++ signal: AbortSignal.timeout(5000), ++ }) ++ ).status; ++ } catch { ++ status = 503; ++ } ++ item.attempts += 1; ++ const retryable = status === 408 || status === 429 || status >= 500; ++ item.status = ++ status >= 200 && status < 300 ++ ? "delivered" ++ : retryable && item.attempts < 3 ++ ? "pending" ++ : "dead-letter"; ++ item.nextAt = now() + 30000 * 2 ** (item.attempts - 1); ++ results.push({ ++ httpStatus: status, ++ status: item.status, ++ attempt: item.attempts, ++ }); ++ } ++ return results; ++ } ++ ++ return { ++ fetch, ++ observe, ++ flush, ++ signed, ++ events: () => outbox.map((row) => row.event), ++ }; ++} +diff --git a/composition/purchase-flow.mjs b/composition/purchase-flow.mjs +new file mode 100644 +index 0000000..2bf375d +--- /dev/null ++++ b/composition/purchase-flow.mjs +@@ -0,0 +1,25 @@ ++// Host callbacks are integration-specific; this is not a protocol paywall API. ++export function createPurchaseFlow({ purchase, fulfill, finish }) { ++ let busy = false; ++ return async function select(productId) { ++ if (busy) return { status: "busy" }; ++ busy = true; ++ try { ++ const result = await purchase(productId); ++ if (result.status === "pending" || result.status === "canceled") ++ return { status: result.status }; ++ if (result.status !== "purchased") throw new Error("Purchase failed"); ++ const access = await fulfill(result.evidence, productId); ++ try { ++ await finish(result); ++ } catch { ++ return { status: "finish-pending", access }; ++ } ++ return { status: "fulfilled", access }; ++ } catch { ++ return { status: "failed" }; ++ } finally { ++ busy = false; ++ } ++ }; ++} +diff --git a/composition/run.mjs b/composition/run.mjs +new file mode 100644 +index 0000000..7fceee5 +--- /dev/null ++++ b/composition/run.mjs +@@ -0,0 +1,587 @@ ++import assert from "node:assert/strict"; ++import { createHash, randomBytes, randomUUID } from "node:crypto"; ++import { mkdtempSync, readFileSync, rmSync, writeFileSync } from "node:fs"; ++import { tmpdir } from "node:os"; ++import { join, resolve } from "node:path"; ++import { Database } from "bun:sqlite"; ++import { WEBHOOK, HTTP_BINDING } from "openiap-commerce-protocol"; ++import { createProvider, FIXTURE, CREDENTIALS } from "../provider.mjs"; ++import { createReceiver, deliver, sign } from "../webhooks.mjs"; ++import { createCommerceClient } from "./commerce-client.mjs"; ++import { createMemoryProvider } from "./memory-provider.mjs"; ++import { createPurchaseFlow } from "./purchase-flow.mjs"; ++ ++export const COMPOSITION_SOURCES = [ ++ "composition/commerce-client.mjs", ++ "composition/memory-provider.mjs", ++ "composition/purchase-flow.mjs", ++ "composition/run.mjs", ++ "composition/README.md", ++ "contract.mjs", ++ "provider.mjs", ++ "webhooks.mjs", ++ "package.json", ++ "package-lock.json", ++]; ++const root = new URL("../", import.meta.url); ++export const sourceHashes = () => ++ Object.fromEntries( ++ COMPOSITION_SOURCES.map((name) => [ ++ name, ++ createHash("sha256") ++ .update(readFileSync(new URL(name, root))) ++ .digest("hex"), ++ ]), ++ ); ++ ++export async function runComposition() { ++ const initialHashes = sourceHashes(); ++ const directory = mkdtempSync(join(tmpdir(), "commerce-composition-")); ++ const servers = [], ++ receivers = []; ++ const checks = [], ++ results = [], ++ traces = []; ++ const check = (name, actual, expected) => { ++ assert.deepEqual(actual, expected, name); ++ checks.push(name); ++ }; ++ let time = FIXTURE.startsAt; ++ const now = () => time; ++ const sqlite = createProvider(join(directory, "provider.sqlite"), now); ++ const memoryCredential = `Bearer fixture-${randomBytes(16).toString("hex")}`; ++ const memory = createMemoryProvider({ ++ fixture: FIXTURE, ++ credential: memoryCredential, ++ now, ++ }); ++ const evidence = { store: FIXTURE.store, evidence: FIXTURE.evidence }; ++ const serve = (fetch) => { ++ const server = Bun.serve({ ++ hostname: "127.0.0.1", ++ port: 0, ++ maxRequestBodySize: 65536, ++ fetch, ++ }); ++ servers.push(server); ++ return `http://127.0.0.1:${server.port}`; ++ }; ++ const providers = [ ++ { ++ id: "sqlite", ++ label: "SQLite provider", ++ source: "provider.mjs", ++ fetch: sqlite.fetch, ++ credential: CREDENTIALS.server, ++ observe: (kind) => ++ sqlite.observe({ id: randomUUID(), kind, occurredAt: now() }), ++ events: () => ++ sqlite.db ++ .query("SELECT body FROM outbox ORDER BY rowid") ++ .all() ++ .map((row) => JSON.parse(row.body)), ++ signed: (event, secret) => { ++ const body = JSON.stringify(event), ++ timestamp = String(Math.floor(now() / 1000)); ++ return { ++ body, ++ headers: { ++ "content-type": WEBHOOK.contentType, ++ [WEBHOOK.timestampHeader]: timestamp, ++ [WEBHOOK.signatureHeader]: sign(secret, timestamp, body), ++ [WEBHOOK.eventIdHeader]: event.eventId, ++ }, ++ }; ++ }, ++ flush: (url, secret) => ++ deliver(sqlite, secret, now, (init) => ++ fetch(url, { ++ ...init, ++ redirect: "error", ++ signal: AbortSignal.timeout(5000), ++ }), ++ ), ++ }, ++ { ++ id: "memory", ++ label: "Memory provider", ++ source: "composition/memory-provider.mjs", ++ fetch: memory.fetch, ++ credential: memoryCredential, ++ observe: memory.observe, ++ events: memory.events, ++ signed: memory.signed, ++ flush: memory.flush, ++ }, ++ ]; ++ try { ++ for (const provider of providers) { ++ provider.baseUrl = serve(async (request) => { ++ const response = await provider.fetch(request); ++ traces.push({ ++ provider: provider.id, ++ method: request.method, ++ path: new URL(request.url).pathname, ++ status: response.status, ++ }); ++ return response; ++ }); ++ provider.client = createCommerceClient(provider); ++ provider.secret = randomBytes(32).toString("hex"); ++ provider.inboxPath = join(directory, `${provider.id}-inbox.sqlite`); ++ provider.receiver = createReceiver( ++ provider.inboxPath, ++ provider.secret, ++ now, ++ ); ++ receivers.push(provider.receiver); ++ provider.failures = 1; ++ provider.receiverUrl = serve((request) => { ++ if (provider.failures-- > 0) ++ return new Response("Try again", { status: 503 }); ++ return provider.receiver.fetch(request); ++ }); ++ const descriptor = await provider.client.call("providerCapabilities"); ++ check( ++ `${provider.id}: contract major matches`, ++ descriptor.specVersion.split(".")[0], ++ HTTP_BINDING.protocolVersion.split(".")[0], ++ ); ++ check( ++ `${provider.id}: no unearned profile claim`, ++ descriptor.profiles, ++ undefined, ++ ); ++ const before = await provider.client.call("entitlements", { ++ userId: FIXTURE.userId, ++ }); ++ check( ++ `${provider.id}: no access before verification`, ++ before.productIds, ++ [], ++ ); ++ check( ++ `${provider.id}: rejected evidence stays a verdict`, ++ ( ++ await provider.client.call("verifyPurchase", { ++ ...evidence, ++ evidence: "not-a-purchase", ++ }) ++ ).isValid, ++ false, ++ ); ++ await assert.rejects( ++ () => ++ provider.client.call("verifyPurchase", { ++ ...evidence, ++ evidence: "local-upstream-outage", ++ }), ++ /operation failed/, ++ ); ++ checks.push(`${provider.id}: verifier outage stays an operation failure`); ++ await assert.rejects( ++ () => ++ provider.client.fulfill( ++ { ...evidence, evidence: "not-a-purchase" }, ++ { userId: FIXTURE.userId, productId: FIXTURE.productId }, ++ ), ++ /not accepted/, ++ ); ++ checks.push(`${provider.id}: rejected verification cannot fulfill`); ++ check( ++ `${provider.id}: accepts fixture evidence`, ++ (await provider.client.call("verifyPurchase", evidence)).isValid, ++ true, ++ ); ++ check( ++ `${provider.id}: verification alone grants no access`, ++ (await provider.client.call("entitlements", { userId: FIXTURE.userId })) ++ .productIds, ++ [], ++ ); ++ ++ const order = []; ++ const flow = createPurchaseFlow({ ++ purchase: async (productId) => { ++ check( ++ `${provider.id}: selected product reaches purchase callback`, ++ productId, ++ FIXTURE.productId, ++ ); ++ order.push("purchase"); ++ return { ++ status: "purchased", ++ evidence: { ...evidence, userId: "untrusted_bob" }, ++ }; ++ }, ++ fulfill: async (input, productId) => { ++ order.push("fulfill"); ++ return provider.client.fulfill(input, { ++ userId: FIXTURE.userId, ++ productId, ++ }); ++ }, ++ finish: async () => { ++ order.push("finish"); ++ }, ++ }); ++ check( ++ `${provider.id}: paywall selection completes`, ++ (await flow(FIXTURE.productId)).status, ++ "fulfilled", ++ ); ++ check(`${provider.id}: fulfillment precedes finishing`, order, [ ++ "purchase", ++ "fulfill", ++ "finish", ++ ]); ++ const bound = await provider.client.call("entitlements", { ++ userId: FIXTURE.userId, ++ }); ++ check(`${provider.id}: trusted user receives Premium`, bound.productIds, [ ++ FIXTURE.productId, ++ ]); ++ check( ++ `${provider.id}: client identity is ignored`, ++ ( ++ await provider.client.call("entitlements", { ++ userId: "untrusted_bob", ++ }) ++ ).productIds, ++ [], ++ ); ++ check( ++ `${provider.id}: another user cannot take ownership`, ++ ( ++ await provider.client.call("bindPurchase", { ++ ...evidence, ++ userId: "other_user", ++ }) ++ ).bound, ++ false, ++ ); ++ const again = await provider.client.fulfill(evidence, { ++ userId: FIXTURE.userId, ++ productId: FIXTURE.productId, ++ }); ++ check( ++ `${provider.id}: repeated fulfillment returns the same access`, ++ again, ++ bound, ++ ); ++ provider.observe("cancel"); ++ const canceled = await provider.client.call("subscriptionStatus", { ++ userId: FIXTURE.userId, ++ }); ++ check( ++ `${provider.id}: cancellation preserves paid time`, ++ [canceled.active, canceled.subscription.willRenew], ++ [true, false], ++ ); ++ const firstDelivery = await provider.flush( ++ provider.receiverUrl, ++ provider.secret, ++ ); ++ check( ++ `${provider.id}: temporary receiver failure is queued for retry`, ++ firstDelivery[0].status, ++ "pending", ++ ); ++ provider.result = { ++ id: provider.id, ++ label: provider.label, ++ source: provider.source, ++ before, ++ bound, ++ canceled, ++ }; ++ } ++ ++ time += 30000; ++ for (const provider of providers) { ++ const retries = await provider.flush( ++ provider.receiverUrl, ++ provider.secret, ++ ); ++ check( ++ `${provider.id}: retry succeeds over HTTP`, ++ retries.map((row) => [row.httpStatus, row.attempt]), ++ [[200, 2]], ++ ); ++ check( ++ `${provider.id}: one inbox effect per event`, ++ provider.receiver.count(), ++ 2, ++ ); ++ const event = provider.events()[0]; ++ const request = provider.signed(event, provider.secret); ++ const repeat = await fetch(provider.receiverUrl, { ++ method: "POST", ++ ...request, ++ }); ++ check( ++ `${provider.id}: redelivery is a duplicate`, ++ (await repeat.json()).duplicate, ++ true, ++ ); ++ check( ++ `${provider.id}: modified body fails authentication`, ++ ( ++ await fetch(provider.receiverUrl, { ++ method: "POST", ++ ...request, ++ body: request.body + " ", ++ }) ++ ).status, ++ 401, ++ ); ++ const wrongKey = provider.signed( ++ event, ++ providers.find((other) => other !== provider).secret, ++ ); ++ check( ++ `${provider.id}: another emitter's key is rejected`, ++ (await fetch(provider.receiverUrl, { method: "POST", ...wrongKey })) ++ .status, ++ 401, ++ ); ++ ++ const extension = { ++ ...event, ++ eventId: "same-id-in-each-emitter", ++ extensions: { "partner.segment": "demo" }, ++ }; ++ const extended = provider.signed(extension, provider.secret); ++ check( ++ `${provider.id}: optional extension is accepted`, ++ (await fetch(provider.receiverUrl, { method: "POST", ...extended })) ++ .status, ++ 200, ++ ); ++ check( ++ `${provider.id}: equal IDs in different emitter inboxes are not lost`, ++ provider.receiver.count(), ++ 3, ++ ); ++ const invalidExtension = provider.signed( ++ { ++ ...event, ++ eventId: "invalid-extension", ++ extensions: { partner: { segment: "demo" } }, ++ }, ++ provider.secret, ++ ); ++ check( ++ `${provider.id}: an extension violating the contract is rejected`, ++ ( ++ await fetch(provider.receiverUrl, { ++ method: "POST", ++ ...invalidExtension, ++ }) ++ ).status, ++ 400, ++ ); ++ const inspector = new Database(provider.inboxPath, { readonly: true }); ++ try { ++ const stored = JSON.parse( ++ inspector ++ .query("SELECT body FROM inbox WHERE event_id = ?") ++ .get(extension.eventId).body, ++ ); ++ check( ++ `${provider.id}: extension bytes survive storage`, ++ stored.extensions, ++ extension.extensions, ++ ); ++ } finally { ++ inspector.close(); ++ } ++ } ++ ++ time = FIXTURE.expiresAt; ++ for (const provider of providers) { ++ check( ++ `${provider.id}: read closes access at the deadline before a notification`, ++ (await provider.client.call("entitlements", { userId: FIXTURE.userId })) ++ .productIds, ++ [], ++ ); ++ provider.observe("expire"); ++ provider.result.expired = await provider.client.call( ++ "subscriptionStatus", ++ { userId: FIXTURE.userId }, ++ ); ++ check( ++ `${provider.id}: expired status is inactive`, ++ provider.result.expired.active, ++ false, ++ ); ++ await provider.flush(provider.receiverUrl, provider.secret); ++ check( ++ `${provider.id}: lifecycle and grant events match`, ++ provider.events().map((event) => event.eventType), ++ [ ++ "entitlement.granted", ++ "subscription.canceled", ++ "subscription.expired", ++ "entitlement.revoked", ++ ], ++ ); ++ check( ++ `${provider.id}: all emitted events were persisted`, ++ provider.receiver.count(), ++ 5, ++ ); ++ const wrong = createCommerceClient({ ++ ...provider, ++ credential: "Bearer invalid-fixture-key", ++ }); ++ await assert.rejects( ++ () => wrong.call("entitlements", { userId: FIXTURE.userId }), ++ /operation failed/, ++ ); ++ checks.push(`${provider.id}: wrong caller credentials fail closed`); ++ results.push(provider.result); ++ } ++ for (const state of ["before", "bound", "canceled", "expired"]) ++ check( ++ `same consumer observes equal ${state} results across providers`, ++ results[0][state], ++ results[1][state], ++ ); ++ ++ for (const status of ["pending", "canceled", "failed"]) { ++ let effects = 0; ++ const flow = createPurchaseFlow({ ++ purchase: async () => ({ status }), ++ fulfill: async () => { ++ effects++; ++ }, ++ finish: async () => { ++ effects++; ++ }, ++ }); ++ check( ++ `host: ${status} is shown without fulfillment or finishing`, ++ [(await flow(FIXTURE.productId)).status, effects], ++ [status, 0], ++ ); ++ } ++ let releasePurchase; ++ const blocked = new Promise((resolve) => { ++ releasePurchase = resolve; ++ }); ++ const busyFlow = createPurchaseFlow({ ++ purchase: async () => { ++ await blocked; ++ return { status: "canceled" }; ++ }, ++ fulfill: async () => { ++ throw new Error("Unexpected fulfillment"); ++ }, ++ finish: async () => { ++ throw new Error("Unexpected finish"); ++ }, ++ }); ++ const inProgress = busyFlow(FIXTURE.productId); ++ check( ++ "host: repeated selection does not start another purchase", ++ (await busyFlow(FIXTURE.productId)).status, ++ "busy", ++ ); ++ releasePurchase(); ++ await inProgress; ++ check( ++ "host: selection becomes available after cancellation", ++ (await busyFlow(FIXTURE.productId)).status, ++ "canceled", ++ ); ++ let finished = false; ++ const failedBackend = createPurchaseFlow({ ++ purchase: async () => ({ status: "purchased", evidence }), ++ fulfill: async () => { ++ throw new Error("Backend unavailable"); ++ }, ++ finish: async () => { ++ finished = true; ++ }, ++ }); ++ check( ++ "host: backend failure does not finish a purchase", ++ [(await failedBackend(FIXTURE.productId)).status, finished], ++ ["failed", false], ++ ); ++ const failedFinish = createPurchaseFlow({ ++ purchase: async () => ({ status: "purchased", evidence }), ++ fulfill: async () => ({ productIds: [FIXTURE.productId] }), ++ finish: async () => { ++ throw new Error("Finish unavailable"); ++ }, ++ }); ++ check( ++ "host: a finish failure preserves confirmed access", ++ await failedFinish(FIXTURE.productId), ++ { status: "finish-pending", access: { productIds: [FIXTURE.productId] } }, ++ ); ++ const malformedUrl = serve(() => ++ Response.json({ ++ userId: FIXTURE.userId, ++ productIds: [FIXTURE.productId], ++ }), ++ ); ++ await assert.rejects( ++ () => ++ createCommerceClient({ ++ baseUrl: malformedUrl, ++ credential: "fixture", ++ }).call("entitlements", { userId: FIXTURE.userId }), ++ /Invalid operation result/, ++ ); ++ checks.push("client: a malformed success response is rejected over HTTP"); ++ check( ++ "consumer and provider source files stay unchanged throughout the run", ++ sourceHashes(), ++ initialHashes, ++ ); ++ return { ++ recordedAt: new Date().toISOString(), ++ scope: ++ "Two separately implemented fixture providers and two scoped receivers over loopback HTTP in one Bun process. One backend client and receiver implementation, unchanged across both configurations. Host purchase callbacks are simulated.", ++ limits: [ ++ "Same project authorship; no independent organization validation.", ++ "No store purchase, SDK/device checkout, complete profile conformance, or production deployment.", ++ "SQLite versus in-memory state is tested on fresh stores, not a historical-data migration.", ++ "One trusted emitter/project and secret per receiver database; no cross-provider deduplication claim.", ++ ], ++ protocolVersion: HTTP_BINDING.protocolVersion, ++ sourceHashes: initialHashes, ++ configurationChanges: [ ++ "Provider URL", ++ "Server credential", ++ "Emitter endpoint, signing secret, and isolated inbox database", ++ ], ++ checks, ++ results, ++ traces, ++ }; ++ } finally { ++ await Promise.all(servers.map((server) => server.stop(true))); ++ for (const receiver of receivers) receiver.close(); ++ sqlite.close(); ++ rmSync(directory, { recursive: true, force: true }); ++ } ++} ++ ++if (import.meta.main) { ++ const report = await runComposition(); ++ if (process.argv[2] === "--record") { ++ assert(process.argv[3], "Provide the report filename"); ++ writeFileSync( ++ resolve(process.argv[3]), ++ JSON.stringify(report, null, 2) + "\n", ++ ); ++ } ++ console.log( ++ `Composition: ${report.checks.length} checks passed; same client and receiver source across two fixture providers. No store or production service contacted.`, ++ ); ++} +diff --git a/consumer.mjs b/consumer.mjs +index 972ef32..cb052b8 100644 +--- a/consumer.mjs ++++ b/consumer.mjs +@@ -27,6 +27,8 @@ export function startConsumer({ secret, path, port = 0, now = Date.now }) { + return { + url: `http://127.0.0.1:${server.port}/webhooks/commerce`, + count: () => receiver.count(), ++ eraseUser: (userId) => receiver.eraseUser(userId), ++ inspect: () => receiver.inspect(), + reopen() { + receiver.close(); + receiver = createReceiver(path, secret, now); +diff --git a/dashboard.html b/dashboard.html +index b283719..68bb6ee 100644 +--- a/dashboard.html ++++ b/dashboard.html +@@ -91,7 +91,7 @@ + summary { cursor: pointer; padding: 8px 0; font-weight: 600; } + ol { + display: grid; +- grid-template-columns: repeat(6, 1fr); ++ grid-template-columns: repeat(auto-fit, minmax(130px, 1fr)); + gap: 10px; + padding: 0; + margin: 0 0 24px; +@@ -227,7 +227,7 @@ + Ready to run +

From a purchase to current access.

+

+- Run the six milestones against a new, empty database. ++ Follow a purchase from verification to account deletion in a new, empty database. +

+
+ +diff --git a/erasure.mjs b/erasure.mjs +new file mode 100644 +index 0000000..90164eb +--- /dev/null ++++ b/erasure.mjs +@@ -0,0 +1,36 @@ ++import { createHmac, randomBytes, randomUUID } from "node:crypto"; ++ ++// The random key prevents a database-only reader from guessing short user IDs. ++export function createErasureLedger(db) { ++ db.exec(` ++ PRAGMA secure_delete = ON; ++ CREATE TABLE IF NOT EXISTS erasure_key (id INTEGER PRIMARY KEY CHECK (id = 1), value TEXT NOT NULL); ++ CREATE TABLE IF NOT EXISTS erased_users (user_hash TEXT PRIMARY KEY, job_id TEXT NOT NULL); ++ `); ++ db.query("INSERT OR IGNORE INTO erasure_key VALUES (1, ?)").run( ++ randomBytes(32).toString("hex"), ++ ); ++ const key = db ++ .query("SELECT value FROM erasure_key WHERE id = 1") ++ .get().value; ++ const hash = (userId) => ++ createHmac("sha256", key).update(userId).digest("hex"); ++ return { ++ has: (userId) => ++ Boolean( ++ db ++ .query("SELECT 1 FROM erased_users WHERE user_hash = ?") ++ .get(hash(userId)), ++ ), ++ remember(userId) { ++ const userHash = hash(userId); ++ db.query("INSERT OR IGNORE INTO erased_users VALUES (?, ?)").run( ++ userHash, ++ randomUUID(), ++ ); ++ return db ++ .query("SELECT job_id FROM erased_users WHERE user_hash = ?") ++ .get(userHash).job_id; ++ }, ++ }; ++} +diff --git a/export-docs.mjs b/export-docs.mjs +index f7da37e..4dbddd0 100644 +--- a/export-docs.mjs ++++ b/export-docs.mjs +@@ -29,8 +29,15 @@ const selected = guide.map((step) => { + return record; + }); + const last = selected.at(-1); +-assert.deepEqual(selected.map((record) => record.step), [1, 2, 3, 4, 5, 6]); +-assert(guide.every((step) => typeof step.label === "string" && step.label.length > 0)); ++assert.deepEqual( ++ selected.map((record) => record.step), ++ guide.map((_, index) => index + 1), ++); ++assert( ++ guide.every( ++ (step) => typeof step.label === "string" && step.label.length > 0, ++ ), ++); + assert.deepEqual( + Object.fromEntries( + SOURCE_FILES.sort().map((name) => [ +diff --git a/package.json b/package.json +index 36f1f41..d920e9e 100644 +--- a/package.json ++++ b/package.json +@@ -5,7 +5,7 @@ + "type": "module", + "scripts": { + "start": "bun server.mjs", +- "test": "bun verify.mjs", ++ "test": "bun verify.mjs && bun test composition/app-backend.test.mjs", + "capture": "bun capture.mjs", + "verify:checkpoints": "bun verify-checkpoints.mjs", + "test:tooling": "bun test checkpoint-tools.test.mjs", +diff --git a/provider.mjs b/provider.mjs +index 643c03c..37c5b19 100644 +--- a/provider.mjs ++++ b/provider.mjs +@@ -6,6 +6,7 @@ import { + HTTP_BINDING, + } from "openiap-commerce-protocol"; + import { protocolError, validate } from "./contract.mjs"; ++import { createErasureLedger } from "./erasure.mjs"; + + export const FIXTURE = Object.freeze({ + store: "fixture", +@@ -29,16 +30,23 @@ export function isEntitled(state, expiresAt, now) { + } + + // This adapter recognizes one fictional purchase; it never contacts a store. +-function verifyFixture(input) { +- if (input.store !== FIXTURE.store) return { error: "UNSUPPORTED_STORE" }; +- if (typeof input.evidence !== "string") return { error: "INVALID_REQUEST" }; +- if (input.evidence === "local-upstream-outage") { ++function fixtureEvidence(input) { ++ return input.store === "google" ++ ? input.google?.purchaseToken ++ : input.evidence; ++} ++ ++function verifyFixture(input, fixture) { ++ if (input.store !== fixture.store) return { error: "UNSUPPORTED_STORE" }; ++ const evidence = fixtureEvidence(input); ++ if (typeof evidence !== "string") return { error: "INVALID_REQUEST" }; ++ if (evidence === "local-upstream-outage") { + return { error: "VERIFICATION_FAILED" }; + } +- return { accepted: input.evidence === FIXTURE.evidence }; ++ return { accepted: evidence === fixture.evidence }; + } + +-export function createProvider(path, now) { ++export function createProvider(path, now, fixture = FIXTURE) { + const db = new Database(path, { create: true }); + db.exec(` + PRAGMA journal_mode = WAL; +@@ -54,13 +62,23 @@ export function createProvider(path, now) { + next_at INTEGER NOT NULL DEFAULT 0 + ); + `); ++ const erasures = createErasureLedger(db); ++ if ( ++ !db ++ .query("PRAGMA table_info(purchases)") ++ .all() ++ .some((column) => column.name === "erased") ++ ) ++ db.exec( ++ "ALTER TABLE purchases ADD COLUMN erased INTEGER NOT NULL DEFAULT 0", ++ ); + + function snapshot(row) { + return { + productId: row.product_id, + state: row.state, + active: isEntitled(row.state, row.expires_at, now()), +- store: FIXTURE.store, ++ store: fixture.store, + expiresAt: row.expires_at, + willRenew: Boolean(row.will_renew), + }; +@@ -104,7 +122,7 @@ export function createProvider(path, now) { + }, + eventTypes, + stores: { +- fixture: Object.fromEntries( ++ [fixture.store]: Object.fromEntries( + capabilityNames.map((key) => [ + key, + { +@@ -125,7 +143,7 @@ export function createProvider(path, now) { + eventVersion: COMMERCE_EVENT_VERSION, + occurredAt, + processedAt: now(), +- store: FIXTURE.store, ++ store: fixture.store, + environment: "local-fixture", + projectId: "commerce_example", + productId: row.product_id, +@@ -143,39 +161,40 @@ export function createProvider(path, now) { + const handlers = { + providerCapabilities: () => capabilities, + verifyPurchase(input) { +- const verdict = verifyFixture(input); ++ const verdict = verifyFixture(input, fixture); + if (verdict.error) return verdict; + if (verdict.accepted) { + db.query( + `INSERT OR IGNORE INTO purchases (fingerprint, user_id, product_id, state, expires_at, will_renew, observed_at) VALUES (?, NULL, ?, 'Active', ?, 1, ?)`, + ).run( +- fingerprint(input.evidence), +- FIXTURE.productId, +- FIXTURE.expiresAt, +- FIXTURE.startsAt, ++ fingerprint(fixtureEvidence(input)), ++ fixture.productId, ++ fixture.expiresAt, ++ fixture.startsAt, + ); + } + return { +- store: FIXTURE.store, +- isValid: verdict.accepted && now() < FIXTURE.expiresAt, ++ store: fixture.store, ++ isValid: verdict.accepted && now() < fixture.expiresAt, + state: !verdict.accepted + ? "INAUTHENTIC" +- : now() >= FIXTURE.expiresAt ++ : now() >= fixture.expiresAt + ? "EXPIRED" + : "ENTITLED", +- ...(verdict.accepted ? { productId: FIXTURE.productId } : {}), ++ ...(verdict.accepted ? { productId: fixture.productId } : {}), + environment: "local-fixture", + }; + }, + bindPurchase(input) { +- if (input.store !== FIXTURE.store) return { error: "UNSUPPORTED_STORE" }; +- if (typeof input.evidence !== "string") ++ if (input.store !== fixture.store) return { error: "UNSUPPORTED_STORE" }; ++ if (typeof fixtureEvidence(input) !== "string") + return { error: "INVALID_REQUEST" }; + return db.transaction(() => { +- const key = fingerprint(input.evidence); ++ if (erasures.has(input.userId)) return { bound: false }; ++ const key = fingerprint(fixtureEvidence(input)); + const updated = db + .query( +- "UPDATE purchases SET user_id = ? WHERE fingerprint = ? AND user_id IS NULL", ++ "UPDATE purchases SET user_id = ? WHERE fingerprint = ? AND user_id IS NULL AND erased = 0", + ) + .run(input.userId, key); + const row = db +@@ -191,6 +210,19 @@ export function createProvider(path, now) { + })(); + }, + entitlements: (input) => entitlements(input.userId), ++ eraseUser(input) { ++ return db.transaction(() => { ++ const jobId = erasures.remember(input.userId); ++ db.query( ++ "UPDATE purchases SET user_id = NULL, erased = 1, entitlement_granted = 0 WHERE user_id = ?", ++ ).run(input.userId); ++ // A claimed delivery may already be in flight; the receiver erases its own copy. ++ db.query( ++ "DELETE FROM outbox WHERE json_extract(body, '$.userId') = ?", ++ ).run(input.userId); ++ return { accepted: true, jobId, status: "completed" }; ++ })(); ++ }, + subscriptionStatus(input) { + const snapshots = rowsFor(input.userId).map(snapshot); + const subscription = snapshots.find((row) => row.active) ?? snapshots[0]; +@@ -251,7 +283,7 @@ export function createProvider(path, now) { + return false; + const row = db + .query("SELECT * FROM purchases WHERE fingerprint = ?") +- .get(fingerprint(FIXTURE.evidence)); ++ .get(fingerprint(fixture.evidence)); + if (!row) throw new Error("Verify the fixture purchase first"); + if (kind === "expire" && occurredAt < row.expires_at) { + throw new Error("Premature expiry requires store reconciliation"); +@@ -295,7 +327,7 @@ export function createProvider(path, now) { + "SELECT user_id AS userId, product_id AS productId, state, will_renew AS willRenew FROM purchases", + ) + .all(), +- access: entitlements(FIXTURE.userId), ++ access: entitlements(fixture.userId), + deliveries: db + .query( + "SELECT event_id AS eventId, delivery_id AS deliveryId, attempts, status, body FROM outbox ORDER BY rowid", +diff --git a/scenario.mjs b/scenario.mjs +index 525327c..492dc3c 100644 +--- a/scenario.mjs ++++ b/scenario.mjs +@@ -36,6 +36,12 @@ export const STAGES = [ + result: + "Access closes at the deadline. Restarting preserves purchases and deliveries.", + }, ++ { ++ title: "Delete the account", ++ built: "Idempotent erasure + receiver cleanup + durable deletion guard", ++ result: ++ "Alice is removed from purchases and event copies. Late deliveries cannot restore her account data.", ++ }, + ]; + + export async function requestOperation(baseUrl, name, input, role = "server") { +@@ -293,6 +299,44 @@ export function createScenario(runtime) { + .active, + false, + ); ++ } else if (stage === 6) { ++ check( ++ "Verification credentials cannot erase users", ++ (await run("eraseUser", { userId: FIXTURE.userId }, "verification")) ++ .httpStatus, ++ 403, ++ ); ++ // The app removes its event copies before requesting provider erasure. ++ runtime.receiver.eraseUser(FIXTURE.userId); ++ const erased = await run("eraseUser", { userId: FIXTURE.userId }); ++ check( ++ "Provider erasure completes", ++ [erased.body.accepted, erased.body.status], ++ [true, "completed"], ++ ); ++ runtime.restart(); ++ check( ++ "Erasure retry after restart returns the same job", ++ (await run("eraseUser", { userId: FIXTURE.userId })).body, ++ erased.body, ++ ); ++ check( ++ "Purchase has no account identity", ++ runtime.provider.inspect().purchases.map((row) => row.userId), ++ [null], ++ ); ++ check("App event copies are erased", runtime.receiver.count(), 0); ++ check( ++ "Erased account has no access", ++ (await run("entitlements", { userId: FIXTURE.userId })).body.productIds, ++ [], ++ ); ++ check( ++ "A stale binding retry cannot restore identity", ++ (await run("bindPurchase", { ...evidence, userId: FIXTURE.userId })) ++ .body.bound, ++ false, ++ ); + } + const entry = { + step: stage + 1, +diff --git a/verify-erasure.mjs b/verify-erasure.mjs +new file mode 100644 +index 0000000..e3e9d7e +--- /dev/null ++++ b/verify-erasure.mjs +@@ -0,0 +1,153 @@ ++import assert from "node:assert/strict"; ++import { rmSync } from "node:fs"; ++import { startLab } from "./server.mjs"; ++import { FIXTURE } from "./provider.mjs"; ++import { requestOperation, STAGES } from "./scenario.mjs"; ++import { deliver, sign } from "./webhooks.mjs"; ++import { WEBHOOK } from "openiap-commerce-protocol"; ++ ++export async function verifyErasure() { ++ const checks = []; ++ const check = (name, actual, expected) => { ++ assert.deepEqual(actual, expected, name); ++ checks.push(name); ++ }; ++ const lab = startLab(); ++ try { ++ const { runtime } = lab; ++ const call = (name, input, role) => ++ requestOperation(runtime.baseUrl, name, input, role); ++ const evidence = { store: FIXTURE.store, evidence: FIXTURE.evidence }; ++ await call("verifyPurchase", evidence); ++ await call("bindPurchase", { ...evidence, userId: FIXTURE.userId }); ++ const pending = runtime.provider.db ++ .query("SELECT body FROM outbox LIMIT 1") ++ .get().body; ++ const post = (body) => { ++ const timestamp = String(Math.floor(runtime.now() / 1000)); ++ return runtime.post({ ++ method: "POST", ++ body, ++ headers: { ++ [WEBHOOK.timestampHeader]: timestamp, ++ [WEBHOOK.signatureHeader]: sign(runtime.secret, timestamp, body), ++ [WEBHOOK.eventIdHeader]: JSON.parse(body).eventId, ++ }, ++ }); ++ }; ++ await post(pending); ++ check( ++ "An active purchase has a delivered event copy", ++ runtime.receiver.count(), ++ 1, ++ ); ++ runtime.receiver.eraseUser(FIXTURE.userId); ++ let erased; ++ await deliver( ++ runtime.provider, ++ runtime.secret, ++ runtime.now, ++ async (init) => { ++ erased = await call("eraseUser", { userId: FIXTURE.userId }); ++ return runtime.post(init); ++ }, ++ ); ++ check("Erasure during delivery completes", erased.body.status, "completed"); ++ check( ++ "An in-flight event cannot resurrect receiver data", ++ runtime.receiver.count(), ++ 0, ++ ); ++ check( ++ "An in-flight acknowledgement cannot resurrect the outbox", ++ runtime.provider.inspect().deliveries, ++ [], ++ ); ++ runtime.restart(); ++ check( ++ "Repeated erase survives restart", ++ (await call("eraseUser", { userId: FIXTURE.userId })).body, ++ erased.body, ++ ); ++ check( ++ "An old signed event remains discarded after restart", ++ (await (await post(pending)).json()).discarded, ++ "erased-user", ++ ); ++ const late = JSON.stringify({ ++ ...JSON.parse(pending), ++ eventId: "late-new-event", ++ }); ++ check( ++ "A new event ID cannot bypass erasure", ++ (await (await post(late)).json()).discarded, ++ "erased-user", ++ ); ++ check( ++ "Verification cannot bind an erased purchase", ++ (await call("verifyPurchase", evidence)).body.isValid, ++ true, ++ ); ++ check( ++ "Stale binding cannot restore an erased account", ++ (await call("bindPurchase", { ...evidence, userId: FIXTURE.userId })).body ++ .bound, ++ false, ++ ); ++ check( ++ "Another account cannot claim erased evidence", ++ (await call("bindPurchase", { ...evidence, userId: "demo_bob" })).body ++ .bound, ++ false, ++ ); ++ check( ++ "Erased account is inactive before paid expiry", ++ (await call("subscriptionStatus", { userId: FIXTURE.userId })).body, ++ { active: false }, ++ ); ++ runtime.time = FIXTURE.expiresAt; ++ runtime.provider.observe({ ++ id: "expiry-after-deletion", ++ kind: "expire", ++ occurredAt: runtime.time, ++ }); ++ await deliver(runtime.provider, runtime.secret, runtime.now, runtime.post); ++ check( ++ "Late lifecycle processing carries no erased identity", ++ runtime.receiver.inspect().map((event) => event.userId), ++ [undefined], ++ ); ++ const serialized = JSON.stringify([ ++ runtime.provider.db.query("SELECT * FROM purchases").all(), ++ runtime.provider.db.query("SELECT * FROM outbox").all(), ++ runtime.provider.db.query("SELECT * FROM erased_users").all(), ++ runtime.receiver.inspect(), ++ ]); ++ check( ++ "Persisted protocol records contain no erased user ID", ++ serialized.includes(FIXTURE.userId), ++ false, ++ ); ++ check( ++ "Unknown-user erasure is accepted", ++ (await call("eraseUser", { userId: "missing_user" })).body.accepted, ++ true, ++ ); ++ } finally { ++ await lab.close(); ++ rmSync(lab.directory, { recursive: true, force: true }); ++ } ++ const walkthrough = startLab(); ++ try { ++ for (let i = 0; i < STAGES.length; i++) ++ await walkthrough.scenario.advance(); ++ checks.push(...walkthrough.scenario.history.at(-1).checks); ++ } finally { ++ await walkthrough.close(); ++ rmSync(walkthrough.directory, { recursive: true, force: true }); ++ } ++ return checks; ++} ++ ++if (import.meta.main) ++ console.log(`${(await verifyErasure()).length} erasure checks passed.`); +diff --git a/verify.mjs b/verify.mjs +index 0c0f246..060c6f2 100644 +--- a/verify.mjs ++++ b/verify.mjs +@@ -8,6 +8,7 @@ import { runConsumerDemo } from "./consumer.mjs"; + import { runBridgeDemo } from "./client-bridge.mjs"; + import { startLab } from "./server.mjs"; + import { authentic, createReceiver, deliver, sign } from "./webhooks.mjs"; ++import { verifyErasure } from "./verify-erasure.mjs"; + + export async function verifyLab({ compareSigner } = {}) { + const lab = startLab(); +@@ -96,9 +97,10 @@ export async function verifyLab({ compareSigner } = {}) { + "UNSUPPORTED_STORE", + ); + check( +- "Erasure is explicitly unimplemented", +- (await call("eraseUser", { userId: FIXTURE.userId })).body.error.code, +- "UNSUPPORTED_PROFILE", ++ "Erasure rejects verification credentials", ++ (await call("eraseUser", { userId: FIXTURE.userId }, "verification")) ++ .httpStatus, ++ 403, + ); + check( + "Cancellation after expiry is ignored", +@@ -425,6 +427,7 @@ export async function verifyLab({ compareSigner } = {}) { + } + checks.push(...(await runConsumerDemo()).checks); + checks.push(...runBridgeDemo()); ++ checks.push(...(await verifyErasure())); + return checks; + } + +diff --git a/webhooks.mjs b/webhooks.mjs +index d7035a2..d8e18c4 100644 +--- a/webhooks.mjs ++++ b/webhooks.mjs +@@ -2,6 +2,7 @@ import { Database } from "bun:sqlite"; + import { createHmac, timingSafeEqual } from "node:crypto"; + import { WEBHOOK } from "openiap-commerce-protocol"; + import { validate } from "./contract.mjs"; ++import { createErasureLedger } from "./erasure.mjs"; + + export function sign(secret, timestamp, body) { + return ( +@@ -37,6 +38,7 @@ export function createReceiver(path, secret, now) { + db.exec( + "CREATE TABLE IF NOT EXISTS inbox (event_id TEXT PRIMARY KEY, body TEXT NOT NULL)", + ); ++ const erasures = createErasureLedger(db); + + async function fetch(request) { + const bytes = new Uint8Array(await request.arrayBuffer()); +@@ -62,6 +64,8 @@ export function createReceiver(path, secret, now) { + return new Response("Invalid event", { status: 400 }); + if (request.headers.get(WEBHOOK.eventIdHeader) !== event.eventId) + return new Response("Event ID mismatch", { status: 400 }); ++ if (event.userId && erasures.has(event.userId)) ++ return Response.json({ accepted: true, discarded: "erased-user" }); + // Inbox insertion is the durable effect; downstream jobs can consume it later. + const result = db + .query("INSERT OR IGNORE INTO inbox VALUES (?, ?)") +@@ -71,6 +75,19 @@ export function createReceiver(path, secret, now) { + + return { + fetch, ++ eraseUser(userId) { ++ return db.transaction(() => { ++ erasures.remember(userId); ++ return db ++ .query("DELETE FROM inbox WHERE json_extract(body, '$.userId') = ?") ++ .run(userId).changes; ++ })(); ++ }, ++ inspect: () => ++ db ++ .query("SELECT body FROM inbox ORDER BY rowid") ++ .all() ++ .map((row) => JSON.parse(row.body)), + count: () => db.query("SELECT count(*) AS count FROM inbox").get().count, + close: () => db.close(), + }; +@@ -84,7 +101,11 @@ export async function deliver(provider, secret, now, post) { + "SELECT * FROM outbox WHERE status = 'pending' AND next_at <= ? ORDER BY rowid", + ) + .all(now()); +- for (const row of rows) { ++ for (const candidate of rows) { ++ const row = provider.db ++ .query("SELECT * FROM outbox WHERE event_id = ? AND status = 'pending'") ++ .get(candidate.event_id); ++ if (!row) continue; + const timestamp = Math.floor(now() / 1000).toString(); + const headers = { + "content-type": WEBHOOK.contentType, diff --git a/packages/docs/public/commerce-example/07-account-erasure/mobile.png b/packages/docs/public/commerce-example/07-account-erasure/mobile.png new file mode 100644 index 0000000000000000000000000000000000000000..5bca9530735bff12467240c79d4586fce3ebce99 GIT binary patch literal 124823 zcmce-RaBfoyZs5lU4mUwGn9XN7cuzDHyBxLaZJi!>ZmV>SmMdwFhe81$WkIo zd`qOpf~BC8Nk$CD#G;mk6^}$rriKiM{ofy++2%^4Rjt?M^O(bFP9%+aYW&OE%+}t- z%(~dYwxFV>qNt*%q-p{yAaWoyv^AqOqb#GWb{Lchs&y#DqS#q?pcbJ)@^-y^CDhl~ z|0&cV+V%4HbXB$F2Og8=`0CK}PQNst!+LB&!cinDn%VH|<|<&4l7oYTo1I#iUwFGA zz}1X<6-F0M`jujuyg+N3Yg!V+*vukzqR&81j%k_?RM8@~AN6u?_M>LQK9kJK#zxHV zd46T(>E?jRx?DAZY(qMp$oSVUdSOBw9B$`uU6^8<%# zW#Tb8;D_MxRw^rHmstme@DDoxWp6{b^Se$PL zWEb$=kEi{I#!qzW&5{IaYHGGBb>=`IP^nVB(>JNU`O(U+R?>Tww4zs?TVjuaPB{3) zK&)MO^U&lQzpE6?e5j%k+H^a4bys;a?nfIL1X=7;m6iHQV&3YrjS3~+7h8sM)s1$y z->g5A8PsUs<&~8ke=`fR<2c3MYE)?6CxU)cz5CzbOr&>xRm^Y67dGsUp&UDAgDp9{ zIsiJ!dc_36z5oVN|j$R6%5%IS;A%uxP+IKz@gi3wfXEl-*@}HsF&+82n+8{7fN=xUk*L-+O0J@Y)#J2 z-lWBhRqJ;oDZXQ&qM{PrKl_bx3xzP}+vV30oCJQpjD2T(a09Wm)Z8O%PiZ6@W@!$1Y7ZJMCdFSaOc z6?fbUDI`bb}N;>V5VQXS-6r1J$hr3=Z4A z2=z3Zf$KHip%Pa9nBZpdO|r`mR+y5m>`naL-EKLv22cu;|ZXprTuH4>#a=l z$XAWYkRwk0@bCZ+FJ?O=;`5-Jk-g-goG+G=n#yf^3{opq+-p^)C^ZEp+$4`i#>IVa z#KbrD&J*@mEq7&b7q+-t_PE+474%hpIg+IjKHTn;oXQnRHyK~w3U90WE^bMul>X?S zCrXkOR6CKvqLkEmiJ{-~1m}DbahQCULZ(s8?SB3%6N-X@LYbyD8mD~r8SRYS(G)nA zUZvgUoCaDuJb>|m&Dc|&LW|0$pufzXlXs}kEpS- z>7$bh7BCa2|N98^hpa<8N5*KL$ji}G{)!eY?T~M+R*k{GR($(V&t;Bv)&|R|KJkc$ z+&qy06Em|=Q)xPBV^3~3dKC2fqv6duQv`SC!&se{hYO&1SoFb8!A^0CH=x33&h2!W z5TUx-9s&K*l+IzZlgH-ox2x@{tJNkHA)Qu7iuZVe%Ul5$`076uS~cDN7ttK}bbi1e z1YCDzCSjwt+RytZRPLPo{H-?Wm;9cu$8~BHz-3ch<_<24<* zm_Go$8|-JCOx=GpwRyfhkQ(MyBN!PLQRUj#Yxn326X`UN`ZrHSnv>)$7HJ2Q(= z=SSbnMJ;#kn%!U36WLAM8c1A*bV|9~Z(o*bwg`Bf=MR|Dzu?_?!$L~?n39Ft)u!FX z>b;}-?G~#Zf4&Z^GP1U@WH_qHQ49`)^ZBxqdk&M9qI+Qb%f(Oc=T{Aw7jzG^=a<(f z7vB2M*!ZR3C3cYNH9mk4n9ru$_{-`fHK(Pe#eyRSS&fM+#`d=otB5+D(SBzVX0CBn z#7NFmahla=IRm5`0-;Amz&4<}pgEYHSNavk`wCa`6@4wG^c1}3Z~@{={ihL>w!>v2 zHJ7COrF>m-a(uDYK_k(_-GgWhYf*Y( zZW2SnOadg+ufvy3?R!S!0FH;Yi-;D|$$+Md+2#g>DYA9XL=p9#sJG>(;sI)Mw*1Tx z3#riW!@h$Vivg=0OIQ3VH}8WTs!h2)Pkv}fGIPoz3SIW~jHE(08=BUm>L){S*;LZ8 z>V?u!qE|F>_zi~c`$nZ5tec55ULmi|OA(OtD)jrJ)&H>F)CpL~ z6*0LX=pj=tHm*-E=FfT5u99=$F z=p?7p%A1dsRlc5XPqS%xUEYqftM1R^3>X**dTq|PY?7qHj));b6DD{_8TY`RcY}Za zYS3Zm3d6>D>c+@3Hl1wp>3xTxv*qxl#m1KJ^$}Sc@qPX`yzm604P2xK1h*6b~K3(c=VVb;Q5H1 zGUWPxl7^T;;K8 zYB-v>yn5+3j;^kdN+CKYi1vK}*eR|T+%*U+mwr#4wM61OL99NA!DlP@kwM4F!*jAw zkzg%ilEd$Bvfhf+S(HU_Lip*E_rr0M)trSpEhA&OdsX{Xo``hJK}cA5IGLC`NnbG% zc*p;6>ywha3{Ek->|tQf(&H`CYr`w}ch3(@jZSWV;V+l*+=!+jFlCAt?f(A$$aDS2 z^L4jv4M#>8?~&}H?++Ji3+0PON~MApiUS1M*~iDHu+P6#NnH+7GT=F3QXmaO_BroJ zQZ`Y*+l|J`0eTq87y8nNymrtQ9QXMR&zQ?U1Q^NI(B=Gkc7pgmO+X)hK3iemNrN_m ztK~wHMnyvProUB3P*UHHLPXfs1Ia?l+da{S+|Gfr9jdc{Q{b#L=~snqZWS=s)n8cIXY`+mMmYK5A?vC&8%B(H(E_I`FvC@Daz)5Gk>y(Vdzjt#m_VoN@Y>=-- z9(J-r$nVG=P?(*a?f8RZFk>*bq|2?BEr28#{)YNQX zEJfJPyJe?%lU{KZuy$`lxA&wO;b-$`+&esSPbq;KhZZAH>gu6>)@dnrjiDS zKad7w+-9r0lMi@=?I&nSJy40&cEWkZUfg;GaXd^5X;JZ=zR2dP@UrmAYG9*!olDqGe^OMUel|-IzaZhEfw^B9JhZ>PGOzt#u;!29?tIz zsmbdmI-TQs`X4O-!Shd+g3YB)mvpzBX5T4cgI`um-%RFv0_OI z_$;YL#ZAq#WIC2Z<3a`$KF9dHpW_<)3VN309{w$&`=`G~y#<>#&xmk`x?>-7*k4O! zVV{#J6ktDB`S)|W!uVOnm$4qLsnx{`6aLlql2d!)9A*<{AO*`I@=1)AkApMZN@C#xS+V>cb z8*W3hZ`6~L$>0(GuogL%+A(-}vOt|?$mz7VH{rrZ+-Ns#=gH@}^%QoD)9v`ux7UBE z(IJF(+IZ8GmUHJ9S)W-!(YZW!Ilg77_B$Ar?JsvMpiu zQ2{x=G{~W)J8^bojjyj^w?zjH&{@K~54`Q(?F{j?-w-VxIU?v?f19h@-kODwgDx8Q zi1g$%v6DoPiHTu-7pGfTU_*$skr_XM7N-p(rUO#zqL5=6N9`x9AkqtD)ajYjNBw<9 zR1eBL>^y=Zl}vKvow&3X9c%dF108h%ZGosG5k$u+#?W0|ZLH?)`>HVQ8KArxnEl`S zPBDhn2|*O9l&-u*GBu^2Ow3E*uu<_~oy>o}!lA<94ew2oWHDYfuF+|d#}vS7?sFQ6 z@ZY~Q+@(;Ap<2Ua1}IMq54Ds)J_np*+w`!$TaxaOLTF(2X z#&G8*vKDbTEQPg-~=!WS0QNV|L z2MsQRlVy?g&Fcss8i5W_FMIfP=IVCZ_ahf{?Bw%LbvETjXR`J8#4A~euT?8gjwe%1 z%XJ{WM`hU1JJ&}&5kH>zu?70lb3Dj-Xla{aTz&KSQ))=6hO8%eTpZc>@j|@xWNZ zqmz@75(J1=SB3-;z>@yeEgRqTUV$F&6BejINm?Y0Xz9`;KaDbVGIUmStMa=x2gYF^ zh7b1A+tfe(EYNJweU&bgwANx%fe!bq6%S={x9J78kXP`OTUgn6?TyF1EM49fHRGhO z%L|>f`qKPYLHB95VwLrIyhz$QVHXwMTw8kqgvHz*{_Q6!XmdW`NwqqJn$UWg$- zgN7^lOs?2aBJD*_U|4bU+0x|lc&mIGrylL)s1ux!VK02+gz*?}XD}_iA6oD{AcU6O zd2w4Oq!feIpxQHu^ZT>HsfYKLRdbANw4D846yN54Ot~29Li7S!$E-hX)C}uRs88sm zCv&A9g%XOd@lixB=U}X6@$CGq^k`g0r`@mjnl>MthFx#B>5O1mG+BuyIH#Zm7}+cl zv*zj6#76_J)5gk>97A^_!nMsJ|LkX=JK3IU$T)JGnx<0UMjLlXsMBoW^k2AaQBU7Q zjOli*vvoKZu6*=RTo@&pLJ8SmJm&1y*p%lspM~zFUeE0TJ&7AXo{Vzpj$W>DFVMc zf(5EU(2BD~2&&&581bVnBF5}QW(V^e;}i6SehuIIkUL?8?I=cr)`qp~nL&q8d_)sr z_@0wKa0H=05a+WQdxzus^SIj()ClcOhRGhRoc(UARr=qUM^;w-l19f7h3o%ZhNhR3 z21=G9{kwZ z!HPg9U2RgUM>5H7wp(p+h!74q*sZr&y6o_{LUMQ;+zJ@F%Y1uztk5rQ&db{zjKP1r z*kD^{(uSx0t9x&)kj2faQx9vaTD(6H^_hQLHR{S|1RmG=5;3r?bgv`6yK6`W@53@i=|;{TkkjdPN$YGokb?!F;cLskMe|Bqb)#LmNqd#9X)(wW zSXF*5gV7_BnM#N1_J0%fe+{KoAnw12OW@^QY;JBw>vpiRv9p`#U`NIozPh~hhlqL* zN%cA%pFx#C;rM*TB?KP5TC0bw2cMPBtz?gi*+2$6UPEtqGL>HCb$Tacbt_;iQN+jH z(()(>($|m)->t8>FavO?W-=VMy04?y_VoT%Hkh@j8!aF>CWpUmgjz1^jbp`)ZD|NzM zi$r3rLdG4v?T|Aj5wTsKCfo2a=<$~n?W1S&S7KB=1u$trIjC@DM?PbO0}ZfE2?)bbRV^gt-l= zI;WK~2Vc$QKpuB0uaB0TR9 z3kFm!t>&p%yWs8FZ#W8-3r*nY=%nANW3h}0j#UPc(^k-RvUwf$r&{b6!rMGiQPF6X z6y5QRB0Y|`3tRcQQAYx41O*Qt>_#g01A}1H4YgYgHhiCw6?hSKmRL8OK;RkEQi*u; zu^*dElE^Eqs&3Rde~n~@WlIrT>{k{$5(Y>Uc`69sms>ECYHQiY;nl0v({hc8zv{O- zUPHuquNxWoTTl}c6)F-^kVY7cmR1W4!ed0dhkwZhjLv;QNv9I+Qt+~0R>D~|u#$wQw zYL{ngWf+|eX8Ni_oJAz^Uy|+#l`Ol6*F8fX?OLet=*U;6nR^u-$cPP1N4*_x! z=UDu((}fE0Ql>M`Qy(i$& zU?oh*{oD+p#-J;_nq!X5$9-kSWCt*!gFJULslU>ql2}XmJ*M@w(&QBMaFT7JAvf?% z3c>Gb2#YYQlK0Rndf(4!k1(C=HF>MG5SrUz5t{{5QSW^pzt1%xDTzY}vs*B*0&Gf5 zJa`pY;#t`BhLParC=+Rsw0)VB6x|Y<4t?n!)=fRsWV6JMx-TZ`3yviHN;;V%Qt}u2 z&ouc+0&)uf;N~bS!>jbNxqNac9%cXXa)ug`Egu>+110tPTVaLi3INh>s~@$r4j4xN zDu`iEC(M|H9P9r;@)epaTGiTcT;)Cq_MK#Xp#pxV zjp^x2v6*u$%*?H>pBmztn|Xc3K@C) z%?-`Hf~0d%&K9fs2N3H4?l8b()2r?c2sY(^y4>jS@wh4>kX@y*y8Rtz%O9RZYM&}Q z3ZYR%^A742nm4^KGdusI1=#qryJvC#9>$AJr;#GML@$rM5Nckiq4R39-+XO*-6th8 zq+N#GYcr`&PEPu!26>rS4LZTaBcC~)GTCo8I<&Sj2+)?g`+OZuB>tGLNaV3zjnt&} z1%4pz@hnT9lu57W>*m0Qu*FP zTz0f}>NYuRMB^KDyOvn8jiB@;2F_V3dU<;8kEUe@)EsRGNwNpew{-{_4cT2Me+O_8 zP~tM_euBqR6REXbiRLu_u~5mdfO)-4CqIHd z!3l4+OWudFeKt~5pj{4#_&A&YM@2VLtyZeE+3NIpkyX$6yoxnL(dw0f=ai`v_2~y5 zJ13X-$1Z6XVIp*|uh`+z_LS7f-zCor>HYQm?U9tyj0FqeFQkmnLtN-v(JI|$3!sPn z)&W~z!C&WtAE$c!J`W@hj9he0AvrlYo+5y|#mU@``Oc0kvuDD_fJl@NQ=-pqs zm+WqFk_tF;r&}o7aNtA8y>@vsmrr&)*hd`c4~a?^{haF(6)Q_}YVlAsV^pvQ6Sn^) z83kI#&;tYlWmA6YrP}P)N7(e@u$tW;ORoVrp#BS>u$X`VTZE9X9^|C;ZodxQ1tMG2 zWD{!N(StNf3W_iU!`5HW4maZ&qMtwD;oz>e0s?dU2&&90eoIE6?iu2Lf&d=R_t(Kk zc{!X-J`N6XPf-Dlt(0_n8TrmH5gfWCqPDOBD8lb^rBi~9SM*)`((HJ2&ZZBQ0?^RV zfQavhu2+kDuL24NA)1j#V=az?%lq|Ax+S54Jt0&B@ITPZBe1^-{NZjh3^{agD8)Zc z9Q*Btj)I}ZTNN^cR++)9<2qd%77~fWwqHCadoY&XpW0U6q%a?~zhrC$>AWmohThP8 zcsMRV4i2|A#l6TObm-xQg6ULzqv>oIA2SW5Q=!qB-P)@^R}Pw%W)_gZ`{c);G5?)J zmknI?^)5r1n5Fd#veHgIc6ks5uq9Il7$ir!eltk^7E{+2RnpZImJ7$+G~JsB+6F-! zC&$CT=6!DX-o&@*BpeDY3rZbqp&s+2!We9Wzi#!`Y`$AP`Sm1{gxi{Ra+g?NVk z?bP?6bB?lFXLsUy$-G6eW@$rh)uWhYj3Qt)FxA>D&Z=AL+%N9+eF}5WlqzDv_N6J`Bj!@iz3Q2KUSkz#tK_|q4`(JTbIU7Y1Jk-7B%Xy@H^YkO(HSZFRV7o^$z+3K@X0jxQU%ZNz$Khl*x81&ziu+CQ)kbwW* zQR_0ONRp9}Ilj(6H@lde+vD?enMG*hsNCUoaY@xN_RaZWdqt$;al3bY)OYBa(Bij6 zCZxjskoP`%wjU}WX{6{x@Ui*)lGe`FZ#AL(Nt~j`0!2rAy0%`4b^NKA!_v_+h?x9AJC7*mk~BL{*eT zVQ|%{zTWly5s#&#L8x9$%R z>y|f1L_#Kn4$y+_Qj1?}_qZIsdi4_3b2Br~{k0{BbOr6d%#U9Pxp>Ei)7bDwNy$~ZEHN@k@tKgA=hj10 zt5w@S2HuD56m{>kl=RFMm^GaKyjSvfQu5Ne%ZyP(MMbT%NxH~>Vu!xFyZ=-4X9XA^ zBDib#PURy(0pXy;LJ$Dz>CV=s7z!6r7h+)QovE9lc*=891Oz_YoqCYXK0Q3GA-cbf z-$S4kRqu4BKBO1NkJH(I9>*nIHC0cD8l#&e6r>Z7)y;I2z2fNN zV_6>9%2lH4_Vd4bdN5yGk>*x>D&FjNB+eR(M~g$Vw9C6c4BIWatvs((mcG*OE_Fg> zBoOrhFR>W{J%}B$H{3Vly)Fpg=2a{TR!f`x!Ch=M6bj!&ID9uL(2Zr0OAS?3u zdJxe_giVIs{krY!D^&j`gSWP?k&@C{Jd-O$MT~!`%WwNot3oQp&~cx-poWaY@@0fX z{Q4n#dWyA!6q!ks)qnE0fTRVwj-c_s=sP6{8m1M5N21rPUJe|ADd#Qo-aALjAz!p0 zFqBQ?^3Q+Wulb&4v(|F)R`Iwrnab_FZofQk+`oo?1OwtIVEjY+yFvv$XeAT5iRo)4 z6@W4n3)v1NpVOX(SB@+K5HCy)GZ6Eekp1}r;k%B?4OSCFq(lklUq%eN@fa%f%lwr$ zPu@z4Tt_w8)@t?pz1EK6PB_D_q{9k|odx!F#Vp@8e^l#z}e8)#ld; zYW>2eh~7tTKYP2TvT?WASG0>8hCmeIfBrecl(E2`%BXU*3c#pxMsnFOy(o<_h4Brv^2Ib@#jq$oZr5a2@k*?U zy*%2D@kcUa8q9==a-YxRyMKI;{vH2I%;c~)lhHoT8oB7a;mC4lBpFw3v&Wr0 z?BK1B*iR~H_PhE(;&(QbSe`q{VPiyY*HVbidS21X7Q}4nd^i>LXT9CC;`M;QlM+oU z-mq_PZ^aTVGwev!lS&=qb*<4w?HyIf;%E-h+W(g_J@!_y%jb9M3IR;NcWv#M)P?E+ z@VA^GuX=|K(K{M~1SZ=b$2&%_B%9s@nctQaW&!E(#Y8F>DBxWFf)Fh4&4-_ z6vdg30^{fQM07AkDq70?wXS}!Q_Q=R1|HX_7=|k`1^qXN=HPTf?v(x)4|#P|PG}%O zt9XEm;J%q5Da7Z2wyP{p!<1^Ki*bWH8Zq;k)9a`yca7C9yThFI93QtulfN=VBVn{R zo`Wp(n0|b7Ur6wvzo+wGq~31Ck+6Qa>(ll%bd}7zb0fX*_VS>q@o`~K5Pg9FLkGTU z8dv_e4gP;jP?vO~xmE*h<+nxI3HEtCQQT!-QG!h<{n|Ks*Up0nJ&f9&U*5aC9%us& z$Ah?Ty5R^xU;<%e>EKp4qSR+6^h^#|eg1GF!_FSZo;+^Z*?)eeAlvZ}l#sdmHYVp3 zIT8B8ydv*(i;<#YkLpJs|LPcO@f zejn=WW`0x6(GLI*6b={E`lr*8$mK3@zCU#|oDK7F^HfPo|0(u5%yQbYs53*plz{FO zUfw}gCW2($fkL618nyCO^rh)!4jxA34vP55;asSjE!|sFQ3okTYbFx8|Ba7VC8S$`!z0 z_3=V_tYI((wh+t}|NBOl^JD*6GG$=y;LmOXB@HX(Fw*{3N3Z=q?1b##!m7oU$`$E( zSXUU#A0$U^qbPJ=gfOgH-QMxgMSIdS>V7d2NIR+$#-YaGNFhE7+me?dmBMN(sXfb! zcL4ODy(^7f!mrV-yp%_WM@Yv!)XUXmlcC!D6@I<|Tgmzj6wy}i?E7UQzKX^f2qU)4HKG{Jw$%8)_Jd~V|a#>fyI@6hn5bMD>JR2c zDdd~JfifHoBruW$AqEZssP$hs9PKU*nzHkaK3#2Wx&+HcLA)!Q|JuBEEXL*Q#A28D z4|+*lm@kLpIeZTz{9CceCAY%;p1$oGZbE%~WV&m`W!A)GfkpmvZa{$bn7xdF;0R?X z;)Q!Dfzuwna@L=X(f=pN8bWhN*NTTNf!Oh{z|MFt^E(v^PbvNzl^PI&rNCd#S(|4P zbJ(a*D!q3m&A7AXN+#6UC-ViYKcCE|a&sRe9A`b$z_QeC=ZKWz|Dy%$3I~9N52t6Y z<@H6-j{3ieRmo3LkrRP>S_X z6dCDZRg?iFYLZKVk2uC_8vY+ z`K|O*$nG@D%y_752atpUSf)-%5|cxll)vO5Y)kMm|IJHa@0jEm{Z&o4?j_Vw5WYZa za+N=ZR1#~*U2|K=cBPBvxh{9i!+BIZM7o*&MKhN`Jp_4xLro6(uRlC5@vv+hX{(WU z+)2~U9lUyFm(9aXTq0V*7c;P&=!#7nzaWi3=vGsm9BQHQTNX9NBd}-}472?kznhXK`C~ zx~^bfE>W#Z65b4yKwA`X)SHa}uui1$Hprj;r3h4=b$=#IzDp`Dlnggc)cEVVVm0@7 ztJO)Zwb$nMa3Uu+*Bl_pgN*Aun#tvsye!^M8Rca^~Xaq@tsF#Iv{`$QQ zi3;pb<+BYMwKmn&)t$0KtgqicwWiXmHp)b+l;E`z+1c3%1k2Ez?8yiOfdQj)xJEEyZ+irB3&xeFZh}#zza}Clp9#{UhVHvxoqjOC*_@2`W3JNPB zUv$T@EA`r}mnJuS34Fs|G|Tm7CMV7IY zA6${wdQ5FDR4gH0MdD~yX-;g462~xdbKl+DEJ30PqCUSnqn3#=_#Vyx(T68!R{#;=zZjcDL|KL9m3R zaY8NS<>h(p^`?IQM1(qey#5R<*Zc=@Q1VTXL2RY}0fxWZ*j(L*Voyrs(uhQTsfD5} z#clB6x!9*8)-F$*nCw;?`_;cps{d0ZG!Wj|z)GvCniy80%0U)@L~hoPmd zXC16fMzKNz4G-j2J3Pb!Vzc6Y#Lo0Rkcwp?H-2F}1wJsN;7!(O$n_oip6cNe6H^6H zcyEKju-tBiWML5z4OKT#@)=x~0a;_x>5~CW-z=y|38Zg|#AINwi!6f8tHZbv?-A1x zQ)U`<)GX{SHd>_1qyg-|ZV}MW`^BTM2hHzf2v8-2ZI_i5%L64uu)~8QN#3st1gWIM z5bq;P<v80qM7$>f?Bk_I5$Ha0v zS}K-=f;>S`D~(ZSsBRl$0|^mvIGZkCa`SciQ};hf&2p^@mC9dH5{lnH!KCmJNxon; zi=d`D;*tx{@jPPURwv8i!gDGR@r7LnPv(n_bn+4jAJ!U6g7+9wN_Uef!(xmJfcfX^ zB`Ixf0`dg!;{dprnKVD3z5-Ws$es2&4ovb*MyizR)&I1xo zF(FF8_54UCAtenXLjxy=l7|5$qSNVFUn8qECMqu1yQu<11A<-w3CL{e9}4o(M#*xA zR9l<#N}#5SC2&Fp+g3{e+u;lU0iqvwwY@!ZKO#$#!&d71U+D~%>Y9LPWK%xyyTHHB z!_l-DIS~Su8=$eVF^PC_vLTIZzclJzLP^6|P1qK4z^`C*0cz^h71ArX+vDDiw>WsM zYfrzsV2l`2)7Z}>B!B=o8bAR&0-HhS_AJH(cBjoFx#)O_dJllH1jlKHYV>NfZY>osM->a zMy}gpPx`(GsZ2X0eagWLp7iPomm*INPP6NJoCf`{gt|rSWcM}L=q{dX`-@d;Jl2a4 z#V&zlt<43W9NtAclS?jV+OP-Sd2~k6d~I%C*^dF&4xyLWnAiLT?Q-Q>8MkdZk(sD7f$y|KijUw=ixXWcC-*X&w- zxDZ-)dN^OzEg6bT54jDg>F#BC01i0%aT93L()d~r%N^)?F;1#Ojqk& z6Bb#7j__0YErBWB#>0~Z5=z;kX{1Ge4BNao?nv5DX>m`udR^j`VFXp%BJ9QCnS71J%1`@;Dxnj#? zFl;k9ShV}8ZFjj?Ws}WYWn8$tX1P~7o-gXf=<5(z_^ts?=W&DezkjC5nO4Z=_VDnq zR5SXO^GLovC|ichEr@`Tfwz}Hd>HYM4U!g*^kc*>qVJhl%gX2Bg9mcVH z`hbiVT~)4qNBqb^qzngiV!8F;6&b7gMUq zc_A8-0-`$eEDZ8%^iCT%NT4A5(A0w5+6qebRy{v1{q9c}mN|-RAwg$4rMz!wJBYhN zJs=vWM(##4-iirXQl=v5xSgKwEwKja4xR)~uK1`fp7TAYgE8s8?69>hEquJZ*0ZfE z{|N%hatnA`hI%)8UMG7v`_mI30+#SmQSa2unXEt=N3cDEL8T-N(w<&!Lk;X7_>yJP z!`2Ui07$A=Iu?Ab3q__=Capv!rqk%i5%YteJc1p9(qrap96qEI$aXw0*S&78;&28hX*M95+tvh_mu znD0gij5Vs&aSaGAU#8|luPa<|kLNlPve(sdh}^r{(d;)n;aD*9B4~ocTihoEpYEs* zA-*Z3t$#bzcA_enUv`d|%x=XeU~f?gh3|TULICdXrweB)pY-Jt50UapAX!YyZR?|@%aQ?-j(AU6!j2~k;6tii_l0tTso*mx<2J-~LAFLz)5e*;JK+K^2_Z?4O$4}SOGV?e#qY$%#Gv?uaCB7%H}ucU zU~RCiUO-rU*aS9u?vFI4FjxdJp9j6=@l@!o&r*Ee-tFDp-8F_C&O}M&z)%r$bGx_a zg)^L#2;e}2@B1CnZV4s9xlpXg)n*r6O$eZjQL{2|zm35QvMDAcSh)Llvgbn+MKm*D9OOUOi2mXH;`Q6NSBQ8*SHSFPgGnO=ka5cI{%}LRzW`U7nYR`|Q{9gol-jGv3Od_39((Q-;m~ zbO7t#w+U{mnQux;S20`otRb_1O^HpZOs}Rka}Z?^n5_2VrvAK`x_QIEgh(k6 zoH9OG`lgRX2NJR7j(JmU`tk4q7RVa*a0MoqFHEE}@5R zzuSkEJxje+nHtY`WD*p)W;Vkf>$k48NB&*I!O>OZ2RS{xoSFo-$Fa!hXx$d)+#ZNa z2YuF>#@I25xpN4%9;jBYtm6CT$GZxmQ`2p^%Vt4p-58-nwfvGde( zoP`?YPmhxyRX`d@0ynAbiNCx?6=9^I-H#XH*o@>kr2!TkR$a zK|x)DR{N0lsk5M3juvx&nUZ$6g2^Cl37x#xg-eBpNTUuRqNE30zd0LC1(hb`3*tGG z2-xpGOsrk4clKWj*^lzy*%n2_YPt(eH=550-kC zEf6oU>Jtlk|I)mz^la~c!H``1zgYXLpuD;$Ob~`ZaCdiicXtc!POt=*;4Uxj?(XjH z?gWCnI|TQ@oUgn3um57Irl+R4FT)Mzm^9Wzk?lAET>0+%Yo=&GHTM7d^|fj@rHkIvEAp|`f6eFv;M~+nHfBq!_CI9 z_#0CFokIcVj|~weBjjVC%0!5ndF3{pFVsk7KpEWhL4r*FG zj=PA#zGsBN>c?;8zUVhFY%|tQ8WnBWy|zwWmOo}T_c6Rl80LREnVR>0?lVz@MS3An z&UHSRK*h#?0uBz&$)&!6bPiKAyn(je{e-~-Hymz{jjPK}6|6-o4ePZ6S~kdG&wmpx z7|>tL8fUqDuI~R(D{9qh5ElE>{kLKQU+G}+6?Tmd9>YY*caqiI-3~IJsO^*RZv>yyRENF@R?mDI?h~SRnRmx;qTw8cXE;Shq9wM`>e>No0 zX_mt*4!I-l1;)DIEyN=SjYP#~x1^Za4}XZiit7lu`|>nBp)}M=W@1HWa*w=hL3l1# zsiD_cWBj*yQLGc;_C>?R2nWOmS!;mS!)knR zG#^bNlO3@kEbbXw2{5p^8b1ZJJ@XVn9y&hkEt-bL?pC7iOF7JEV_Pz&fhab69Py74 zqY#w2o?#egiju?qtT^OL2NZD(D%uE%&=p_D#$*n_ti<1#E)Sg%E+-z6&0E3;~rlw|TOm>IUu3XJVyTwfI_?{&xJRhdSJ4%TaXXUqS z_J{1z&VQYcKo>1$MG9hT9Rwv;YK&;a5t(7g=DFOEew$W6?e%^v@Fn-V z?sBu+5G4+}z~eN*pvW;8mLsr5P}(fhDMTxl-=Vk)oBw=2z3a(-+t}Qg)Sy{zQPax` ztwt=}y`!Eb-OKqa;0W(sTmbAXX0uxWLn>sap3M?)Roxcx8)$;HDOD2Sd7YzRI=${0 z{9$^cKexE+{g|~H8cS$rV-xk>>+z3@LdoLT1S;bx_!ON)&;6jY^(uu%;|uG)KobsG zn3zd_9>ZAWC^9j*iQwzKznz%U%}&{igG&7x2y6^7Y#^MR8X(wjFv{dlXw#`7Q48RQ zJa#up5!*VOt2ya#78vy&ZJe=ZCHd5<@E`COr5X9$UbB*;7oUIbPft;NjnM6f(_Ix0 zC~qtkW1U+i`PZ^)^Ky5pm{C;($kRm^h=tt|vXPMCYjwNN{N6s*JWHq2C$;EeqYMSK z8g}U_VDMUslPPaeF)`vr+#EmV+vO{{Yexv6&vFOcZ?UIh{Zw?X8)ZK1Hq}}hS4KGT z=PY=BmWJv}Q9GQ!GI|G#!&TRa6~mo0-Jnu!74SwnfGtWVkkpoeXEnL!Y04PJf0txQ zSZj8{t|Zf9GSum@<2{=W)Peu4rB$XM;4=5)^BGG6ayNMsY4+=#!~BV?%@)eqL`Fay z_N-x^AbA45mYs3iL@u%5FOG9+uZMGx`nN2Wco#JoVb8sj2@U$focg#h;!{y8?#s2{ zkrvNYt8r5(r~*pzryK!qGH2;uLFiK7!XlDvh(eu)j0v)fmZ6yyDS>^XB_dq!c5JxB zF8Vt@nnf^2*f%CNPV2sj$NksmT-LC&@?<S>)95qeNPt)6z}QLU?bJ+0CTzFBkcg8d_yI3eZ zV`}+;1E{3EBEIHNl0A9dE~l%-CVxU`7-52^Skj<5a|rVwhI-4a%4ptOSt!#e`rFJc zSM-~gM-NJHFffK>eJB+rvm6|bHE&N4G+S$1nH#?tn~JymUM-k6R)yLRoHfiPorbdy z-GUXwj7ap01$R+2Ou+a;x_|lT{q>F%(R)^bSxL<0ytw3Mg(?Crd=rKb%x+x2MM09s4|un^;|mFd>k4cyH{E5JB@{Pf;8At9FI5Z}YnG0>p%1Ge`;nBmh0!sSQ#2$in2jvhAVBQ`F zJCQHIV1vp;wH>pTNtqi`Pf`8nX_JZ)%qjFj#l2Uhxe7!zNr>}AXAZMTW$Q9b!1ML< z98Y|B%d7hbj>pm=J`1uNW2cyoiuR@7txYWl%YzredmL^qp7&KN@XOp4V!ROfOy@HD@Xj3m*C+X2_%6Sq`R!BHU4vzE?TNh3fR)Vj)^n{9wuL zwRewg2^Kp{@=xLY-Uri$Jdwnx1_Xc5aaQz^4_@HmK6};kivB>X{o3}G55=|0hT4%R zZ7Hj1>DCer4Shu!V;X^0S_{G%mW!Po4fs0GLMm``ulKv@9=7Y{$r4sz>zn6VWGr~@0-J`U8Qx+^H z%`O~In|r=VEC$n5nkryz?1Dni{ZN^OUd z1+XV^g=9aB-W{2#%o0%h%JQ#I^OVF?O}1|m!MvXV8ZwL|x7eGhSQ{TVj3r!N)!k5X zQ%2$WlztR)ZWF=VUdubQ1I zg@iPv`d_Q_UFzlzfQJzCg5PJOH3|9$RlSC|qnre%xzG{aw%Sqb{SJzcGIrmn-s zP6Zyq193vFR^et{C3PV*2+Ts7rXcT`aSPM`?w#cEIJ zWeSpbEHPPMpuZ78BG|ATmUy-(oXR~wq>Pyyi9uaY8jDb*OVz1n6DU595F@__vCN`E zRF2SyBHZjms2XrRZs@M8d8`=tke-vARMMAxcrIC(GM&BvD`p zqd~gW{yv9t!;2u;_n;|zr*x>@3s8~ViT1s@|N1UxPM;*`c19qD%R)u!5J!zLp$rk% zj-y*^P_MaLJ*maCU2iSTLuE|R-vc5?NmR~~QU4iBVE96zk$nz)SvTp7 zjXs5;}$hw}(4PK$*rKGX&U+(1o593upK zD~wZEn;s{5Unh=>iBg%PEPZV26X`v44RoP_gHY(3^rg%6x=mb3g_@Nv^j}OtDAZ=B zb8NRkc)lQf>=hik@=EpEFXUfV9RcJeh5s7e z^d4a7yKtUi`o$np+R2HLm*l|GFcE?PkuK;P;<`h z&YOBtz`h9L@V}by`h5!1tuEZCIr3&Efdul6-Kkl7KsY9CNPcD!t>TiRF2Mxk0-0CC z4&uH)NTxU*ResExRv;0bUv+mroo&MttFUX%=#IbAr^mgE-^3O===c`U~xsE zR#wrFQz9Nn-tsUOVeFMA3-sG+jW^9_apNZO$BeKByaEOR(nSRRx0(jMSXaGR%`b-@Cp+KB!DPL*w4jbN_$_K|V>MMwoIX`G)xHhSr>9_? zk2Qe-F;m!1hHk!9sg4Evh21nw4gVfLAxB@$8oeEe(_^l}&Dd1bK`O$!-z~#p`!iT> zKAFQfnT z9G@k)x~gjDXFm8)Cdrx0Pth2a0x`_D=_(=U&Y%{)rT5*?c+tGvelrr>`v{{zE!bO()Or^Xj1TC4 z_XmN#QhR>%{ii?|!)*%2|KE#<4C_@$n9!n|^))OF^h7-8O?5je5)Qgrtu5{G<-34O zj!{7^9~SEL$&9gmE(XDbdLxaYfUFHHz&KKihAXj{b-E?~U7t2UDEyOp$ZS^F9o?AL zuZaGw*KL$jA%BzRM1X1XFN_{`%NLdjUbT{@QS+(%|pArrD^aZH}*d0Q+NoP90slXk1D-{n#qIPbG5(t#&76 zB~`ZfZa=0v-M~lKDzoQ%*rVN>e*d{zos(nu7rZ+%m9D0+5FHiOajzHscs5I`4I--H zQYTnjR|g4?mBuY+0}vm_5(%I!nPTFjvp)Nzu*3uf{k*8Fzi^wv39j8}n?G!y>_|RW zw<$Szo!|rx;nfC9evkWu);{}z>Rb%Fox;-E(6THze$onn_^rlop=+wZu)|MYi}p#n zY#J1H-#?0GWMBj?U5>op2PwlQ7N(LCuN0$Z(8tkBT(`LA;a2z_}ZGcgeH*{ig} zzdu`jG`s*vh9VBHs1BZX1G7<^e!H%@Df&Jxx}|&1lY(O}gVZ=1B{gSyu(!Bpi|xka zfy%9?2EgQOTgc&P08oV2{iO+TAC~>Et4#2aU&(-^Yw=ZWSxp@nWjIlHSa?>EKVmlN zwUjcf-l)614j62Uqr9koTbEm;ljYjEeQR*P`d*~(a+;@!fWznCOk0a=NGu?HZA4qe zdrMhRr{PpU@vpi_2;wb?R!gcOduA(W*JPKl!&L-!{4ZGHcP}iWsNmA+bSOcwL>?D~ zhCAq9%-D$NaCcyRueQ5mAvh>piMSZ8SRfT2EaV)DE$1hG?Tv*~Bj>`j0*@Im+h+n1 zFIMEdUSfOWcr!SPkh+~Ov)ZCkzPTd3s>q-9OPH*QI1Iz?=3<;ZIG4wiY=(HvjfR2; z@;LtUeg2;S+iayxC^0A#!$8O{9hS!IW+mU0ZoV%e8YfTUcZ0t_n9Jkj_a>|5GoZv^ z&l&{ZBja)gGoIF7IHlW`1mB4COGn{@n}Wx>0!M4vbsKGh;Ig{SzoM#zB*BuJ8YUw2 z&j$WI!{;An_ol}M2{V+jghC-i@PUCue8cm&T%I^&ZZ3|)(Q%6Tld>k$@yw{8>I8Jk zQ+rC_+VnUT&TccwX9ljnLn)uS(d*Sag~T$^Vu{KWj;JDCxz*@{yeo{+~foG7{g>cgjdo za2c*jsL3TpcGmc+mGY{iKEp&>V0BcpBIk>GDP$kZ%C+GCm4=tYX0}O6O+u^H3&InZ z!*cV5~L zsIBqXbsi#3bGW;;0wI~sI*I>@=4yG_kD|~g@1zy{jT*Nz{>O>4sLjVBk%nbed zD=cEBnz|Jo5j&0YBAKm9yo&b#2^{TA1Mh(w3KiJm&hQ`X-`|;v8S{h7R_TUCUggn3 z#AqzWxDX65gca04{pvQex8#oV(}uy3+?DOf2?8uTdM(zlZ)3~r*va9H^EG^EpvZ!X zl|9%GYy^1~;j9Rr{Kmj9F~mZKZE(2_(;$wO|M5~Wfj;R)nW*(Xx$1+|3d2akw05dR zig?cpC04x*A0~ba;K`}*mC-2Lu7%VwQuezyBM=%3Gg~pqkqz@Iu0n@ZA6L>+0dUOk zKc5&mj|{bg#Ue9>H4U8q=VSB9qmAgeJFURjgld?ftY1ZkZi7n==dcUlAP@TJ75svY zLgo1hp7$gb;#9s34eKUqlU$)5$PAX8wkZ=dowR~tunQ&Rt}RR~%tg_!<_28fZ9okJ zgy_KUf{BHd^50?E&vhK&GX8f`y~2j}J@SSPK5ypDh0gU^rCS#D4-DqdI29?(^m3#O zgBUy5&jwg5S6C^&tlR3`6{L*YVkqq7hEX#M7zXS#cAg#XeMMAI@!-f`9F027J|AK- z2P+%cVL6InObY~CC1z{Zc_f|IkzOohPkluq+({W#I z2a}BSbW*1S9$`>{dN(-9xUFlUS$tf;T z{1AG?l%xiZF^-vqt5nJ$i`2op0ohg{!wp%o?>JO;$uaZT&qs-oN)G^v6MrWQ?l;xP zG#ZJiJ@Fo$eapq1+Qfli*jSCEnRlH#YQ;?LPG8&i{?1rPk^DGBx|ZMsT2%9Dv@H%8 znvX+?!CGCf%nqY--AmM%I;H6@q|q7s z6M+aacCZ-G^Gw7wozK^}lrC-5=6ii!4a;L6hjAoQ(aT!kE1{|aedJklrSqv6Rm`^J zRjfaB|Gq=HL}R6|Fu*|ixjfF`2%F9v@ajWRM%txBnUoX{+O^6rGrPFCFdyp6>B)Qj zee6D=kHBC?!$To4f-z4FLn6*dz|^kuh(K9zDr8?IwFWqjgX1*%vtw0uBUi1Sy4_w z%-=xI)p6d|OiGd9XXZ2)2gSm1BeHx#PmgaUQZ;aX6Jg<%T*qg&{zN(#r;eOCbWVLq zye)5NYRT%fx!TNhqt~h>KqqYUJ$#)JHf%1XR;B~YB0=0Hjg5uW*c%1>YfE1@y$R|8N4-sZ*H`=v7Z+brQp#4h z`xM|>`S|z-M-at%$skn1c*4Kn3Hx||*8Jl=9Z{=ntd9~H? zb_S}vU1fq`Gg(T|8GJ*MrXBMJO(?gj7*H^K&0LVb#@4m8q?9ub&;`S_xcpnPjLq3C zdjEFA<5=%FRx@mkJ)6n*7oY%ncwNu5)uR}#TZ__22h{7wRCW!F+H3UNRNEL61}0XE z%oC-i@kKe6li)2GhI*?K$Q8EUJya&vm+ZZcZ)zMPM<^$gvN(TYQ4_+tUM+e^^rF(X zkVpZ&a_7@IQ{qf-{I6@ue1wQ(nvg(`*ArScR8WV*kr;+^>Q=%xA(gTp*UxUJ8^wRO zd;an_*=t5ty*K}OFD#9cvL0&vA+v88WtqCNvYKbXU{trUG4FkS((l!B88Bp=rClU} z3W>vR9;Ktn-gNwIk^R4P0gIt-#E%!-e}EcHS*Xy?hOcSM55|&BZ!U&`k~cVt=y$s_p1>=QfQYEqWE&t47;udT z1bp6qt#+AT*G6Xw#UyqJ@clY>I6q^Q_==gv;f1DHFufys%`1g2BraL#~sm)v<~_?k1-Bxvv<~dcace zjA$9~aDI)|pnqnISoAphB$B%!VetqF`QBwrw-G#G!OhT0OTvGloJbPs;ni}G3fTek z^S*q=mkkZT7txxMtwj0&*@pYgp}8xeLk8N`g|lLNvfqo9{kfoDX?=DZF2VFxucM_% z9UZERg}s4&UuvTfiyCM!Pkl}ZjUk*c3KR+^gnWjsgSZbq(J(^`?|}#8ocn6S2eG)< zJB`bh3)HStKu~I11o58F{reb_dJ$YKgRHl{z{d)%04gxKfq46%)9-bPXj>>$kRm)g zSkm9m`FNZV17~QoYR~ZFBjMU+-SCBAhgP!z$8%ppPxHp|_X4HtzeiK*MMXir{_R*& z%(t*CVUL3%Q`AvZbSaT-;!QtDy>K-oD7*_1p>S`H27Zd_TU_^pY0zVlI*so83*8qB06qZD>J`)9j)Nf&_1~(2qhHZH6da^t+%YK ztl*5$ePYI_q`$hJ(Iafv>4;<2zxc&BbS~A7ktf!Z#Rq*#7Y4s*!W4sX{2HU0|U=a z(%?W=OFi0d5(eU#bI+HT9YKHC5FKId)rs#Rdn8_~toY5W>P;jpRkJMb=lWae-m+(b z8yA9Q+@7Qe1FT|Fy+eKvYlob#&^$tMr^yvsy1mXm5&LHMI43kaGaS=aa8Gov3i@RX zEMjD0T<8H-p%VeS2o-Y+9%{R6()dAwpe9nfB$}?G3pz-DX)q=*kmJC-RCld%@t2yw zQS~5oSW)WO83MQ9zfdKVA;{OgbN+(cdfCItccinLqzBgyy=84E$}p>bzsVJNA`OxJDX$E;_$jW&vzinh;K8dsX4=SkpU2s?8Rscm#c`QM}|5peyW6p+;Yo#U0ZT3}ghdm$Y3`|Lj=0zzDJ` zg4^7EF3O@R!8|psr(!VNG*hdK7WA`3p2;s%3(+SD0 zf3^|nQZZ2ZT+3pvR_7qfBXC6hg8dkM zlU32n(PCyA@<8sfo)YkF(oDJPBv9OrLK)F1YwGQ24X}$1Iie-%!=&tei+9Ii@Sc`s z6%V%At|Q$0QoLVOBa+T5@lp`*PrKT+S+WwF)FX}F-&y(bG%d_0nl2kn%}o*aHSETFw*3(6}`yi+0V^Vlqyg_t2L}}*6=x! zN5#<#TO7j(sDW_)W9Dq3(mg*=*c)I*6nQJ&7R=(}Y6dv6JePDOL2}q$|1%G+k#3Ybl+}1Yd z88HEKl~B&aBNP8`6J8`RakH?;g&# zVc%4kq)~8F0rwQps%zD#r2k2hV#MRL{-bbIWI?Y~VTh}`8|@w}ue|5j@o+j49;NT$ z^nkY#Ne+zBK-};p(GR>G`yl_ygZxN<0pu7eW}W@ zA>&_?<72|A){IfR)9%FlLqcvXPCQ|S2AQ;XyjZwYNDL{%iFWm6A%mAG4?vPq zPF^~qfV=-Pb9cQp2m^*bwK9a`VQym1>J&(E1N>pn>JPQr_{jKbjGU*|Ameja0UAe` zKIStq6kJTiY6@}k!Tv(1x0hGO^hOFgx`_?47aw^+AHkO22-H5D>D5gnI<5_7tW7l# zok%qLz=OZ~19yH)Rg8 zB1ANEc`89dUOt8bUXI$@I7HKc=gJ)BGt!%&j`e4%p+Ow-*a*;na@#DSypT82nF0-J zBnESX&;Da}rkiG&Y5;i{LUf3xDxfE1`)RH#V9nZLx2#oz?`Eq`_;KJzZEx5<9^=*g z_v^4|ruY8qNcoS3z+g~_tzlz&VohO-*=B;xToTt|2_B!=scN2b^ z{%B!40Qz0yz;5^3FEOr+jNvo4=Wu&CXKMAjk}KBUo*2IP_l#pqnb}hX`oQw@7_zy+ zD)6>=!|9=+K%>OBWcwvh(7;47!_c5bsaJ0|8+wdTFyjP6zwf;j`~Gp+K>0k!+ zR)AL#WDR?pP-J5+vv>|y@u3+uz)8fLEdS+u3lkk*#J}(Ovw=5+rCCmxlP2$#m8FwQ zq&um52hLLq3k#F%9*E-UHw=K!65!NnV7%$yrG0^E70@L*iK#)m(hg!)%eB=GpzbQ2 zL@m2P9vG{`<9+I`)OX!L0R^f9tq=uA15wcS#NYKohiK`Npo#x9^lF18EG2T!7bGXeymABX%M-$E|qQR6e8Y*S(pO*MQ`Cwo1=nFlIEBl^hV#O4W0KOwQ6 ztrU{i3IR8pv=HgRO3luUf#%%g>N;pc6JpkSF+*c6VbvAP_;cppkF7~=rqLgiRD4ox zGtABbI25PEVN>bl91mqd^x_qUTFSev1C%r`alqpo#QRB6n2rSF z{wKM-zB>shbirRXKmJ_*B;I&$Oqm+^Bbu}dqK?V>u~otw5{E-Xr(g8*Zf%+!Ys#2@ zs>kz2E{Jgec8{6tTV!IMR%kLsV?z?3{2i^HiIT6QWV*dZl>luo8%64T2jD)%WD*@O zw277m^*IZF9|#-tLh9^x4RV3t)am^$SoCdGtq*F5NAcl{L7SJpjedlDKibeXQg!OR zd>=}!!V8-+N}3H&?ie!KWwJ39VFO8IUp4yh0*y9~8)MIKxdTap|L5$w6K=cz6TaL3 zlSA>srt~xFCx0GlGuR_R^Q$?N$Bg|B_J;qwpIN>f_A;skiy`p^|GDYkDYfq;nRVwp zBpfm+9$Q&@~AfGSv!&P%O z6(|3PY~KYKU4=P**$?_j>~nr`0pkSDoqKU{*+Ah;aw+8yhyR5Iz*N9WcoyzP;U6vY z1m5rF@{iq*=Y{l8Bin>T@Ny{Duj8#x@uCrF|>E=r`lOYE!#BB%%m zoHO*&or2{8dqR3#{*@J1Yjk`!i6Qw={79o1mKe1&^h_gs!d<0`%t7LhiHP!bxT8dZ zOCE!k_5Agw0qh1%c{NT-S{jyxzjw=1d}}Z8|D54VcUE?ybpsIGhv*fHe ze2c}X21Y!0u+{T%a*1i2y2+*#a3LuttLgdrN_jHzb6mB0@r-}F`}IOk1O`p5Agi$W zn`Rc^X7%)Z;>@tVZe?M2-tYSAoK&GKBTtW>>t9qamIkp#81`VIl>)&Ig zPx_9LLqkJZ9v5;+Zfw&T@1|M;8RvITGF{^R1Y^)loNc|YJO6IrktQ@4XHbKAp4k&H z2r(zCiYA)nFE`!sM(5`0Jw0_6x(Gg~^g$5W4173CKG)YHMo;;SVnKtXQVa_I+pPp1 zHjX=wd;bpAo>pX=tls;1HM*)yZEOSvb`Ea3wNPNGZMU9VOt+;xp*o&wg+uY-siUJ1 zQ4stbSsgL0Qg;4;vEDu<>-+Am*t)hadlA1kU#N~Ug=+Z!Z6)tyx(yH%6!QCcE*|}j zg%d%v?Urs(W}kO_`S8^*dQEdSn>n+Ae`I7Rcf}7AZK}Y@<81fvbiG4Q&_~?hV7(aK z?d2|xUC~wGF=lb7zcRKgO?+A>UukdU5bHTAS1`u{Z8lKaG#Lh{eF?> zg0;Imfxh4!2^||$bc>asrMz|Hx>im>v)joZmPW;+;Ae>vY0QdLe@AfVqrGtcRwluK z!iZQzD%d2}-@*qYpipIw)KdFNb-MSZMR+5PYCR~|l+w`FNz>S|FdFmIpDP_!RE&%z z-=1oFe{8icVQ-79UudRiT3}iyBOoCNwp|kR+}^!pEDi*ps&pD6GE_GT_1sMytBH)Y zD#uKgT*NRFcka*Ssa1C@Cey5K(JNPC#{!CPde^^e?22@@E*Y9p;o*XQ_bCk+Y@c}S zV7P8I0+I;|Q&Gl|j*z5yA5jz@GSaplMNEqVFBhb;M76>d%(5LFXkKuPXKU@D?RTqM z6&kAB%CSDlhn?laGseG0gzz#>dfo2!qzwZ;`n_!y&v;G85*bT5ldihoN=5v}DLdxf za|9jaWn_XE|Fju2E2Oj0Dk!8+fLL)3iYlO0?oxFPaq#z;*~sw3D^}8Yu-MobCPuhC zY+UXJ$Vb2993C%Jkrk3&5iULdG~zJ8_g;BK8?nEyCz56!or~_ z1ahpu`Mm7%4>}^WUOjH<2mkf^;f0?-z1B#RzmZECrC=9XMpa$no?0n9{q8-0UzdS@ zBn)Kk65YO@AJOACFp|!xbLlr1?_3twCDwcj$MpP+@zk90A?kP)00G zi#Q5^=u@D6H0+l_L08RMKr7!Y0$k7ZG#PpnN?$W{Z-U(msISU#2?3Q9__!pQu2^7tXc&XkC*1EK}w8HZBRVx z(R}y6Nt5KB)F?-1%vDn?F^422`tYadPK{aPDMx>uu0($K;L+b9(xirBv}JrY>UoCr z?7r*Afrh{xg80jp^@oj=b;|^rv17pmOI6=HP|?CRv1;U+tg)7CurLi2Xc6ld{f#2^ zV9a*i(hUCyBJhl~oEll5kfkT+_u#aD>Z_N)xE+Im0b!HJ3F=URgpRZ+`XKsS?e(q+ z)**8i{P@SkDZB;<6*3Yww(ufmq$K1wt-^e2N=)6}K02G_(g=^rwn(Z{uY#OeqddJ@ zkfz3?EnhSbb9PrGs(GDR8H}{yPvATrA$EuD+h3GcJcG4bs;7DzWSxOIl;!*}j%?q9 z@Q!w%U;JY|=fUL14n-qgnpxgue`hd+!eG5Ti)R9lo6S_Wu(!wYBkmtVZyRL09>7!= zDxMK-4vZ>cnHPPZCGIdOsnXoP{kFC!6GOqLDa3j$yT8P8vyulp5eA-GyYPihpNv>y zY3yLMMSZ&`gye|3R%nlY4CQV=7$jBER``u;TpJlEvNkF1!9&3mMcdodC{(02^xhzk z?z9u_sR`D~yV5AVVcWKp`48V?V4*qjlP7cd zJrOdkQWN#6aY`;+{I3@5>6gR*#L4;YZf5;9|=> zV|`e3i?@ox_faxR${1&!QWjYE^LbOA+toX^`v(`DiTvJ{RR#ki83~jt7EHHabVvS) zb?vUzyfOV$nJu;Y(%*M5oSEFu_e=$ZKIhBf;IPIopJ>6*owL--Ba`U*P=lYJH#O%& z|JqC5dQu2{oa|1U%kiSQ53#a;U6;F6Ow7baB5{~v{4xlR{yudPcpBhGzsU4eBVnq| z@BNElU_NQ{r0);M&7)*(cl}6H3vClLL^LRCcvG4%r287t^9ne02p8im0*Nn`rE%&B z6$`Y}djUkrG{-|zxB_@tSJ$lj@l=}kh9@zG zz&{R&v05vY3xm(REA>k;f?-_=EKUxj^B_r~*wS^xz6c z$mJ8-bQ@02uD?V6y;V7_6#qBU6yzp#`#q`WB2opwU$0S2{2~4(PiduH>vH=MBW1W& z!E&QOX?A$>u{Ap3Fj`q#(`L;F>VIF`8XFUl3e?y@O(hW%C-+I0k3)N2a9Q-Nq~Fxx zwB?pYISoGXb28SeI+%jg7|Ig+xpTfuUcoG$I5t6KXPB~#kHwIFaGeE`& zxMu-9X=*4D!HsEx4b?IrXlyKKg%cRM0t?{>aYxnL4LAPfr;5{Rb5+FB> z-0|>E^-7(j#mOMR-ooy~o-u#41!tmkW@*L@-yS*Cv2$|o0h5^j%U=%p3>&c?VkRT} zZ~Qb_cb*m{?El`l=^t%BRnO}=dC9VQx~?N4>}f0iU{73bhn!VuLh1bfO{@Nw7yO^W zRrCMIjB6lD3t%&vo0}Jrb0xKw*OqkU&!1%TLB*2kPUZ)**tCWiMvhkg&TAALu^8TA1fa4O}^4ING9qG`km;cBe%y}DSX;r><{XdU`(mcOh&VSLULwqXf)FkJ&>40^o{rr%o5e!s2_R{}QBMTEcl{q4Hd zXMmO~p}pnXC|Bx?L6?Wd4b!}G<(Z3BUFiJcpJ5Pizk>9E-}`_pJAsf!m;j{uF+M_X zRk~elq@>`Z0G(;I-7E-y{oKC~(FtT+i*%JRr`4POdDLPytY=?!wjk!SSSiqfhj>?8 zDQj_zqyli8%G9d)@d9?cwP(NvtR}7G>34hdf%sd?P;~brp*S<9cg{_tpGx zBX%-plT~xY%iBw5kJI5$z>(9IwMgyB$w|3ssm*#Frj$f}0m!kz`mf#edXq?ce)?Fj z{Yn+7XAX!RJBpCa;&a9)xl(I9o11%vACpnNN7X~o)`3~xTK-`$m*2x~ek{Da8>=5B z4IMfp-V zKv=Ebs<`fV9mWGpm3Eu=^!y@E-KWKXexT5Tc@xhD-E5V*m8Ne)fT}B$# zZjqhQ(a}M4MFb<@@rV(o)j4zNd^o<@A&!qwD3`=!Vruzzy9$rRPKU@480tm@TthhQ z{}A}K)@%>F%q5QIO*TwgESF1{0ujEmI&50*w$Xf?*NjuSuhHknP!xqhw|DXh-_-RglyhClX2wB>L0 zy5B)n#UaG3&ep*%;c1uyxFLp0+zV{&a+HiU#53=Y=kd2YWIZY1zBQt+#iTC^<}Cp) zitlxPMVe~^dA`t1PWLO)mGSR(&vu6?KE@B=-kIC)6Aw#MxRSPlWUyYCwi2|j5Nbzg za(w$FHsbns9Re-f>|pxu^~DXl>!02jF-dq#W`pk!^BO=UA+obq1`h-Vk6%3C#ySI_ z2|y-u-2Nw_(9tW9y3yLbG0`UEbvS6h@9+KU3y*{}uGP1@yBYf2A{R{uZ~}I}n?wO2 z#in6<0ZRNXVW*pf>Cer4PQ`&QAliy+3Z`29YPJhzeZ#(bFg7gMxU4F}V#`lM#0)Nm zOZ|zt!Hxdo};?-TdtwGak$rzShzk`XiG>_^&Em6)aPFd$1EB-kweZ8 zMN&MGB4u>&u|~L`$G`lSM10PxR<8$;o-|3Wr#M8~7&e|hM(fpyt-2GLqKt|ujv^5X zx?CJ|U|KsKU4*k+#^fHEA|WDv3yXDQxBxmVJMCqukr9?I)(SvONi@im1lg0&+hR;Q z3LJr1f*xGGrr_GR-od$DLZoR235V7m5Tv!@IkxAm9UW~;Kb4_n=l}dU=WioEaGzY8 zj*nM?2thpX#l;~k)SxK6EW~y~PDWPhwp_R4;t)yMi|VZGysij+BHE>BG&C_2-TS-I zR?V_HMg~tWpS989D=#4dc}Dpm_hwwa@ zE1f>bx9B5c#a78}z35F!E6+F$j;iS76f`SKihEWfm!RKyCWGG@PxT{K2?YQ-_h4_W zVcWIk?~C;PFXHV~jG01RPhcLEiM;Hd`idF5Df0-UJ4lrCZIY(u)N}k?wwo6-)BHT) zQp?3|T3D8UG{33P)WtM6HNPR9me!510ihkFOl*kJpIC>W#AmqiLFol(c6N3NuZMv} zz$DwxP7-zYl++N?L(y1;7OG>TfbfQcg*K7V4R^KCR#;q&xL)Lw`iQcOtz@*b`nv`| znX62zx`f5l z<})M~D!^+O@C#SL?|_4((XXoWZa~HHXm-9++&yIB^(nqWOM$HmCy_;w4jv+Wx?BO` zGduT@PdR`|V-ZmkIqc9+ZeIr3>F6RpVHUZjttMh_e$8TM7+g5Ow}XSq*pXMjz`h6d=G!g3_`^JJ($3 z#Kp|2N&xsJpb-%tAdOx;-v(eB>KpsZ&>skDD9e=6or-gXJO`jZ1dFSH_A5C<>{`3= zmYsbT50IqpX_PHJ5AswRCcXlW$~k2CXg_~L7)|;k&NR_60T2lfkG9LyNuJeWWpsn+ zfPPMA-Y($95))E4!lYQ__xFWB)NnCA!U$cAo?&l{L3(F+=CR%SB?K0AY(y&CMrcJR z{PVkoUC7k#1I*)E+?;rR3t-w#?0uYx?!4@15+@9d8WwJfGb;y^z+HF5fyvo}rVT(#_OI_`14Uqo|A{1x#eh+9UV;g^&F}X1QtyQ27tChOU zoFh=H-c0sNhHIJ9V9g1!23_orp7i$6*EF*q7rGkmamOoyy5a#K28E#{wM(`7rPl-4 zO1a_*I}GC6NYwESW~Nb7<^4bafLsbK5T^h1e(IcFYb><0{goX%Z!tQ9C*y_xL&}(; z?+fTkgm6b(gz@$+UYq#3cC*c!@DXXosPk91Uas9UmQH`ocN60-eZVk~4Tvwa)17AO zUgtP(+3BvScZ|wl8!HyTuheM>Gi`TX&OR|~^jxFNv{$wB2bHP0dh*9}K8YAVhIis0 zxR0=~*i7TM)h6&>6O^lg;0=FrTq-5nW7RQ|=MiKzz>E+h-bP+S-OC!b%^gUb`5jf;vS+8B8Cm?zh)$Bvw?2(5) zIvOm)O`)X|80pIPavgy=uSBz~6#IQhKFI3X_dEYvY0G}8>?@kOO%wT)6N%zNfKbq@ zlhpz+p&lI#6*YaG6gdYzg>Ar?2sV1HKF+jX?5k0)HzmT0mz>VsQ-Z7Q7U%bYv2o}B zi?+86i?eIj#zF}0?ry;?NYDTQLeQYWH9&B8nBWi~Sa1*SZowUbySux)b>)5bZg<
B9AdVAAq4o@?0AhXmN=7Ed&Ltk@}4BGnSS)Segk9ayv{WWpZr1tV&I#c20Sna7+^ z6{#Xu0#%?lJ@ZlzH8P5(H6V5HjobSI&4DJ2a{Z5#B+wlmD0kY<%&aCmyl~vA>x@JQ zL|sVceOFSUhjz3e{BUkgzcO?=pQm$ewe*E-Jj&uC%!WE+K7uUGp!d)50)uG%k- zo;~@mS66PMw_Sg8OKj(0%>;%lmgTBh8-9>M!uIA~K{ZY2^vIY!|;f`br=hgb_MN25(>gwA0{` z6=g+fA&AN|b_uctVn;TIFH4l`gL=pkdfXiwpD?6o=@Vze@_)xVA{ChMjViVEoe>2v z)L}%Cl>`jS4bCVgSzr%_!f;w?H31QYD~&Coq+j53_V_bLE8@4aKLSW*v_JiwH~M_7 zX;{P|kOW+BhCrz|8S4TnD|TX3R0+R&q*j^WsJaLliLDVuR?lQH!wHD63X7~B_7rnG z7vQVE5iB=ZhsW>4zg043EE<0m$pZK$GpKW1D~)6MrIvF^%uZo=seetJxO5bt7Uds0 z>O<6Dx%Gc^tYkq#zz7%;!_!j%GV}VOr2nnltTBr8GUHV0=i-6ovBY1%`!$4ZGv#KtQQ3nd5R5QB!K9CW_{9} zwnVtYRnGV*o*W7v-V1Koa-?(iz55+KZ>6{Pj7FvY=D!|nrdl@84X64<|L{-#E5ilz zTS-#`4wEu^c@yN`3mlt394IU-Y!lpN`LI427}56ciYw`cCae`(BvKMVk4bwilJUTE zAw(^PvX>0(sbDai=!@z)Pub3yBs!e{^8|xd(MdrU41jE} znLRL;PyAx_l|@Nn2O+V>?5gct49v#{zYLu$XLnbRGC*Ql+IE@#J@THR)mIQ_<9yZ| z>|T3pJBEY0|E4J9>~ZH7qp#Pc)Ru8z5;UB+U+f1HOMm?6c6BrBwHrQtb4P}KW7)Gs z(!A8nkw8XB_y;3jQj8HHrs8c20+pjBV;T=rz+ zLmprrS2C5S1TDt>rEufRhX~;>jIqFbhfOF3RM~Tmkrq(t*6AiUkGaq44wXCm(zr~x zC1?ohk*rjHA|~iqBu$nbQ$Z&uKNk6IKdK^G%-54>tVGp^94|J{H(DaSk@jaKHfF=# zGTYo!IXN(oD_*QMWaSHZfH^O$V9)AU}nj&h-nN(qPhZp}q8ie~^z?XC$*AL5Z(sBnjx|n+%?)eodqje>wcU_y zd1`a<{1#riNDY7kg=Q!?&km=sJ^i*9t0>Vfz#WP9*5y(3+T^Rzn4~M+aBO}~S>*6@ zf#`OP-bdH&6?fiTQsBg5(5ZLx#6E`dpO~Mu3xfaH`L5J`nKYC3$B(e!dY7xQ%l>KX z5}V%G{Gk~wA!hQ>)R(^O3D&~f!W-MV_uV; zp8eA*Vjuyse?4L!DYsmO*HWcqlwe5fv6j+>t{7Oh5{LmKhkUhxFEX%%JP+O^^Z&=2 zKvXNyY%y3&kMyM*Obj(t!&963&o|)KyOR-tztMNZ9F+~DE8wY9sWS*Pcy?piw5zaD z_3!lw5TH*AZRiKi3-L;84kvJ}9A9;$qrD9kzQsZ1#7DHp`B4Ma0Xv|@8xle)88GZ-_Fe=-~RrwSGeVqDy4`G z#Gu{hR(2H6Lx_PR1_S`u*a$}6+rh}C9^RDy)yq*sYWvYnMZfsTQIq(&as<-~0%gM> zrfTY{zNSlFtcrO`)H`#WgXM>=f$;w_<<9hmsCLTG-0nS}t;;G7&a$FvF6+IqO(|u8qx#{0d_JPb?q=Z%7M0l~p-Qp|*Lk2Zf|RZFj7Y@s~!E5l$`! z4ue{64BhmYtF-x4VSZ+2<=0CImJV-jHk(dz0ownH6+#D~4S@4BT8;aD379HR$RZ~f z?=SUw*xA|BguH;tU2mk8{EPF~@$$iJdpv91mcEny?i~oBV`DnKHJZ8Zeg;atf}=j&sUzfOq7&sx&2x7 zeC}gRhXZq{FlUq2T9A#-Pa(!Ez~!J~%UV?%Ohvn*d&Fb#)l$90;4S+HOqo%D^$9`l z9!{3T!ZhD}ozFki zc*-9EOUim+*!`d@%ioTAD(r<2=+4HL_q}{_EDD%LR>ROUP)YwwJ>o$NAiFF%1ia%a5$V9RIIKMnaLPJwiO^Sq; z`3CYggT@jB%s<8?s>qS?59Sa2IvuA=jxqKMsbL0zegVCsCNgQl>oXad0EmofDFc}7 zZ@1sG_C}Ir0Icn$gZAIKT+KA3$OYhlm3E6bZ2*w;U+qj|wQVt{K@L_vffn8Zu7b|4 zt_+`5!$(?_n>R8^Jdd4`SdFu1jNgvlwLQ;6@a^ouf#EEsACE=n=4h~ClOd+XX_sN| zZ2?c{;CPQ*-wsC5_aC@_1P_XUpE7fWC0WSY(1g=s;AGI8XLe>*wM6GF?`wQdCuJk- ziVI*r!lxl0Hj#_Zuuc~?{xbs{U)ZcFFLebW55$)XLV=#3jpium0CP!B-(4g|FRrz- z!SNB7Q4$}e*S?By;dCX{w;2J@I3shD5J;1dmjRh)qi0bO^QHJl+#~cxJTJ96j7#o{WDIS))_Nu&HsB#D_-{I9 zmo$!W)%6I%*O&r@Y|866-%)n!G05GHzgg$OM|csi7Pm@2e`}c{(J1`!Y7&^%a)EHv zp8iXux3^a;lR8M>3cDG7Z=3T?391S=`IAcqaPh(Jf)0kc3agNI&CIfNNmD}*f%h{U zD&K(FWbv#T_?bIpnTwb*TF_bFKzlea9r#(3oblu16Q0E0u(l5g5pf_MCPWj4Qi!zG zI5`~<0OJTnqJ8X83a@>XXl`m)F$%2b0a`U4%Kh1GfA!v^&zi&0C`|Y*7{dfm-@jK= za|UNt9kRxB>>E|2$Ko0%Q1&;cXtyyyL4Yp=@prQ_Fsrb9oZ6O8t=*l7Rq-PAKgpU7WToUZP#`8M<-`+XJNg^y5n3na@$0c<&mfKDdsWkR@ z%MG5juJgDfnSUk=$v5V{m;-=GvqDB{tLkym)RZRSOAK<7p`pP{Pg#Tlw3wJ&!2&o! z&e!M{nlV-xUduhO|5=Y#o>PE%oBxQjLZ(oxdI`37FQkV6&R#9$_YZ9_L3195V_edV z()gx3cEE9l%e0Y~eK}rN>QK+IBfp^Au!_G5>Y+Waw@8jk#ibGL;ysa(5IS1W;j4(1 zmv?sJV?tEZ>$%OAW`=vvNHV|YjSMAp=0%I!2#dg_F!BP?9i!3^K@V@{foPo^%j;vm z)@=K@6&qzI^S{Y$@3FpkXTbCG92@o2u?|@NY_|8WSW0WskFjsT45r7x>4JoYhH?y= z73AgyQoiG0OFVyGLn9%0V|P+ztMsKr{5Z%*uLn;~x6W?$Y_O1ryrH8f?49disz8XR zzj2HHrklfjUMqSXfXelgDMC%=yDh<)_O+JGV*0Xp%}S|E{g?t@XCGX&HEY?Zo<{q| zsm-;^;Td5)0LZo?gvkz?FBzvgiaJOlNmH2ABN9#+mKyD#*;~KD55GXYxV)^&Qc|G{ zPwpf`1>5k9>&iqr^s#7<%X_XpkA^Okj09;b^rT0q+hcmL z1v`kJ0qdBLi<3v}>0P)DG8{uF?W=bU%qz-epYzuWXb={8HL!D?a2J~#YhCw^d2JXD zTtF-c1Gq_i+Dv=d*4B3LE=3bbo)U$5t|}s@ZTI4Ie1Vnr#5_HE;7~mXH!L zOI=@~=lmR|JqpfzjS6!NEVgNo~iX#GBg? zqa(9c($SCZ-}$AbznJ1yZPzIq z%jO%7G8VwDecdc5Axn&+w7xbA{I6igKjOef@$%FPn$cr?gbj=XL^65ttm`>{nJXMG zNDg_m@}g2y;o83tw_LAGgZ+niTDn}aC4aTO`=Oi5v3@VH1mzzefL5;Q;(xSY0)rg| z){8IUUo(M>+?K$e}+Y5I$Nf(}Kvm05PALcC&?Ut##CvI>9;MQMldT?9#0pj>7ZC4vv&_3Y! zs*X?l+N}9ru|>)=bVX0Uji6ITKmdNjcNcyDeX60qW5^KyvgWFXA zI3FsfbAc?|z6Bqsh0(QV_6FzQfc{+iO)bPTWFnkxH6|@@6FrFO+i)@gp}PBTiMD26 z&D-RDgoJl=6vq3C#o=I(LfIqN1~7hn($1>27BHL0w=%IdF|rVFI4HZ)=C^^oy|!9p zRH=F65qlD)TBLD0`WToz!Q;2;2@JmMIbh_En|N}LsYjoM&&0GJm^4@GIf0^SFZh|L z?xz@VpXr)}dlOf$rr20!Q%-rKbjpNi2#*kpukQaHyS?(YjM)AU%N00%jTdlm6+ZV| zjkb>AAz_xlo=?outNCUfZ1Q#c#3Cv^={rR5MJU?)eQ(=tHC*u;J-0D2|A^EyZg;x+PSoI8A$+M zPMkO}EJhhMZCJ?Uhjen=!C^d0)9-YUyDIz0%%Si!HyYh-vrHlu&#rGsd0DwL6gGbn zev+Dl&1y0AdlrQEavUGPf5L|@K+)iZrO*A5`m^Pgb6n0U3thD=8{{Qg2nf|Z!u$3y zr2glSAm6Zt08up(2?M9)P>Mjv5E{5I{{9U>XgUb9mf?+I5Bdm7;gnb-n?k#u&GD7s zi3;a68>Qc12!YJcmHO!I6>h~VgS|VP{goJ_vyq{beSw@gBdtGXi zKl}qua00x~jI-Sm@1gPV>eXrC^)d9$@3 zgfsh-T_j}1Ab%MHy|Q#K4oI@Go>`H`pcyBvjO3yJZq|=QZ+?TsH1!~k*XFFe!L;sdAg@JqrB zuTc#;|AkD?{z%3uR1h_F}H_AwN8+7M#ev*Grp z?QuK4PeH-~!7BEK^|zW>>M;}-pB2Rz=ZY*CQ}j7ZE$Rc%n%S-F zw%dLT*Gx2!ANVTJ#t-u!MDYJAfFVdD3e*bqt1!{I25#Pqe2+7_fw{X;d85?XJCmn8 zJEp~uQBA}3?opIN@%=14o(FUx1W|}FjBmcqzE6n& z$7}29dXl)0a}E|td3hUwBtSaxaq_!byW-8XLW_cO^qhbL!+~;Xy8{slN5Jn{a4;Qr`*EKwv6A%(>+Nnhw=qj%wae8nV461S8f4@tm@0^kk8ru3S_EGwy!D@{ zSdY7%{PuQ5ZNy%c+bUZK^xm}oq;yh6Vs|N;>-CoQ?IbS}4)a2@w7U_;-u6}4yuzDy zf%j~;KjHCC8tu=yFOcBiTlBg;o-D^&NPro`UwSg8RIB-$k~cWT6EAqSQnZKx5}22! zUzFkVy_`Je>h!nLAT|yTMA;9ko}b15l+>jHU|JE3n!^P-V_8uzZ=tNR}A+?@}+5w@PYAZr6sPFGHZ z&k_gM-?&R{aAf_Fph2kW%}^M>DK${!mzU_|2JH1-AI}Avh5fQ+I#8~Vp`Urr0X0Lp z&*2|qK>u21Ue`O(k+&;bmH;@$9 z&!6dIecG!YYto`}VYv2fzDp-@%-lsJM^(RJf8nRX?|7uF+|}WZ*2k2V&O}4dN3IwY z5S3+<&&RD^rnlt-gckrqRjoPkX|FzJGxGJ2!57lOA8S=`8odNTY8{)eq;aecx|tJu zL%F;Tu(4RHvN<$KVQq#kSa!^uHu@hqj)c*V} z%DWrH`yrB3R9`=a{AOL`a)yE6V?Gpa>aK=bmsoP8mA=aCvgOr|J^dK~C zQMvwOpFI}hH1&l|TvnN5;1rX81f5#FINmcN_@Vz@?AO-ID#f2r1Ye!CI5o{NWu-Z! zgw3JslUpa%m@$Ml0*<8DaaNo0t2j$DUx!Rrx^*{h8%WRaE-jne=4JTQ9;KT3Uw{b%m{G6V(`SWv`AG z&|tiY(0Xj@es%Y2N;zloo5{wrM;2rG*&<$_C;C|!QON4gG?Tc`JNzt)g1g@bCvhP8 z0?MAg>_9AGM72@nI<}Q3?R&{kvOZkl3mf-n`MW1lqs`T(!1$LPWb?=Yy6O9c&uXfF zLvd#nyUu#?VlyHm_Y~`FHv>H8o)9NWI||~sV??}|Wvj@4>H(S6NgzJz!QAj;a^POp zE4dEBYV+1pKFFOwLKDK1&e(6>;0Hy=v%)cYvDG=}9YNrlRVl3rOp=fk@7Kx$Tlx;+ z{P4Q9Et>?n1=uzJGtAUFzYF7x0OWhQQ)dS)=`s4Cay3 z*#0FbK6*t#`+t9j{5QNBwGa9GSO0KteIH{qq0y>0=C1SM`=)bhK%C0sJ!B0dJ;xCf3Jdl5Z=x_7#)B z|NaToutan?nS&9@qJ9(5d^KBrs5- z+3U_pG`tJM(jcz$uyY=8mMmUYqBSnvy+&r!Q|!66N*j81j+PD@x>e|_i7>Sgf&7V*8Is`w+;YTx9 zTV>^Sr@0$8E2QQ{oBg$U?e@prbwdO6j&D2>^&lj0Z@?(J*z)vq!2c8hp;_mtWO%7K zsnS`ovA`b`v8_kWn zJz=%R^1L_+5ItRPhf>az^6$_b%Kx!()kSxDim+*h-E(@k&M7+>W`d%AzH)~Y+KY(W zPlZhXd>GnRc$1N~*Ppg%FIXn>E7Y)oS)lrv0oB2QLsIcY{5 z;>?yi&m?wJmG>?aQB7Dtjs5frWC~v`aNqDyGDUel;G!Go>FZHTaTgU2Bvkh}>t0+O?MpSqwZl3v#e%iIR-2i@ zy4!S5_h4?Uk4cRG9h#B7%kK_OH$|ChD8>dLDue1rx0xrFLtZO^S;T8z3U*&IFcZiuvu!|M>u6RTRf@stf2m&@<cJOr$g2MoL!JgEsCQrZH*VM#pi2*oelcvz(JEGuTg>vey(zB*`v z5!LeXNt5`Y_V6KMR~t?Evo@nVo@t_0 zT@Rt`pLN@zgO;tww(!5-+TZDlTC8Rm3d6@K6_;GBoZU7aRq0u?uEa($rJo%Q9}6e* zj^s6O*9wQc%!du&-NzaM+@wel{M{_`e=pH3s6{bqueyLkPf-$ldgLBmdMOn`-f44f ze=2y&j*NP0l(fmmitQ4jv}+Pb4TZD!!NJB@6IQ9mjOU>F@m8h%<%Q$hHn(ti0WT?G z+#>K@SRnL_mvZx%>87MKu9P>K`BoghjlgjXnLqfJMq*@e z{zeO7r6Xy0(#~OG?9b21v5T;fTqWB+N;4euxZh59PpMozwgQ!QM&yh*EiI&I-u-0*@FwDWD`NO}u zOy{gq9!+ zKTBv>YrBXG+F(K1v?jj9s*#ZkHj$6*n2OLD_Q2}t9@P&dTv?rDG83C8-+L47{G?zg zM??N<8X8;Gn!bKaqbVs7##y&0aB0}yEWbf`zH_Ui|>e&@dx|`cT6WnS1oeT$(#MmE?vdC?$EqJpa0f zl@V2L$<9k?J_eo+t~L>><+53`Kc|HBW$i_VtVy#AM4R1Fa+a_wTv&TKPx~^3@ka$$ zWi1n5JagP21Z~=Za00u7&)>Yb+>sp3`fXDD&#Lt^QLmhE@}N+W#8{gSUd9{E_yN?p zGB<|`BUGed^wdr!O(T~onGZN3jaGj(7!*o{Qvdz$OLI&2Zu`h1pHkh0^`yCU!V*Z140MXKINn3pH?we zGgfWc%eCCZE~yPqLiVI+IT`I)2GgSwG&S+@3EqoK0H=0mS2qnUwN2-8Fi2~Z!zIxc z)b@ma>^rmVXj?lSd~C9+4T8jpk)xrjl5*e$QW7<7D;_2OgDG z)RgxF+z+^{ih}oWA{m)GlW6jn8_U$ym+!#<_fwozTFZi1^1(2Dpzl5(V+^n853HII*oMP9cL41~^Ry|vqn zxczgULRT;XsA1mf;IOcmC+U`&d!!G;veC+h`d=gIm2xD}NNH(lCEmX;(k}1jP9mYx z?n#$SO9hD;HV;GVive8w^G+5fR#wf%w`Ou0RDnN;`3%QGJF_~UeBq3S6G)~(Jmeav zvAf|ebe#g*o9682z(D`oTd&BbO#d#wuUMtp^{SapVV!<{^E}7I{2tib+sp|qj_bH+ z&S=EpNgSjMuJ_%=yXVFp7Z0EF%CLs4wHnIJ!pt0rrnuPH;2#L<^e^v9p>#2Lb-f=@ z2zds6C2fYy6D7-h{P@SrY6)T^OifN9^mI2#1US+6W!-~>hDI4FZ!3pQjvX1NDcWEI zV9$bC6^lOPTBTfGT(*mf@sutfT(*T!HG?{v7;Eok5C!@P-M!`**XxU!G2fT13Ho(f zNr0T$_Kw%P<0r;*19MPD1VvMV@h}Q;Jj` zts~yB0Rc(VmcJp_P>4EPKQ!hvMjFmy{#eh~U5@$p=fPzsORqPUq_P|bvvF{bO;2}t zXLv(h?6g2XlL*@pf2uYeUpw`c3{sbtMsn8oPCn)^nh z>MdrAVdgyMlf^I?RTVX&DMEF}Bj39i2L>vqEI*^QVbeBimRhl}YU2*+oLrjg1+tL5 z6@6EaxJkMMaXB6mH1!@((-;XDn0t-a`=>Pn8X!sBMN2O(cV|oSK2A}jiG^@8TQAo& zeR(u)uy7K*yXvG-@G}WdYiHY5Hs=3c>a`9Fio#~=jG>kD#o|zTXS2k|qrQC1FgTd6 z9;VP;Qnl1vr7rj@fvtminOTQ~L+@uxgXvp>6dW8HM9g9L+DE1E6V9%BwbAC0Wy44Q zxPVe6{Y!Gc2O&lTrbG}I-BSY^{y_Z|tTL=1Lg-1-wABh47xLb>W)@H-FkPwz&W%hu z1)Z7qXrHL8mm9+v;E%apt%1bk8+(@H&~w1{i9vPDi7x+*kvm{|PYD?p$7-vuTZM(L&7O1u$Rn-{hSCuqEG9}E<4J#^ITK4aj%pm%+`c#B#vT@cCX%!1Ef zmV1KnGVp|Je_|kkPVJ8mR5rY4%ASJ&~()o zC0v)DSdxQx;x%xvus?|3ysQ!Ue!MvETolcyl7oF=Sd`GzP7KeLX)sjNkhsm1N~ z4`6hgXqiltC5I91y|$-FZ2a0B{hu(^MEKGKU9Z5>AqJ+j!25bPbdCpADN${(b_BmS znx6hTVZ0<-fII}*vJtRdwZRAZi{J$b9ai@<#!~<&Tx_y4@6VJRN9Vp^IvQC_SQyv2 zs@K`aD|$ds&TRLxK*r_CqM7Z<$kIG+&+|X%*eI~^w+5Ysr0JgZt>{s&xZgp~Lb+`X zB+#e_K2>VxIswbw2Tq~2QGsQ5(Dm7(UT6#&G9>3lBHO7L(_9|hO^@5QEHws_g^{io zLB4;x>b13Eu88)-yosK!Tw=DY#+y&^Z_BDj14RHwZT-Rz8jkHV;K#R_68qtN6+3$# zPbl+yonC7!w>_TmZFI@rM$_idMxZ%`lKL;=J-d09sujgCEPNib)?W%}VN3F?2{B=P z$8(Rm7q~%zZ$Wdrhk=bmKHs zHOuCuPdD)T4C{a+9vJ_spYIZ|G)I_9 z+xKUKt=~6`78z5|%%Ht_vad*w<+c#=Elm5&54AgdihF8lnK2ugq`|@E@y}&z>f_EZ zdqS@qsC_sdY4$x)*VB5j-M)31w1I_owA38Z0`wM?pNG8!dr-*wF%&<>vIJv7?zfof zNYp#Jl}(@TZauv_;LqCbpkIkup4zw@#&Yd{@9K{cFQJ_O+XlpFJUJG_wv<$DrZZQM zEhpg@sHve@{^A3&83~gC@%+r3*TqAtl&)D@1iB;a8n4^V>x6k`?Xp*@m|KZSH5LKi z-7d#)6873Wa$XG|pVPDv1ZT+lcB72oWo+l`6!QIi`O=S@3=c2d5I*+MnWFVGlaNre zMDgCWl{E5J{0=@oZAyc4x4(@`CM$zxGt(Z_!0``l{#B!3MVb{YWf$EWD>hGG!WaC+ z#@s`CdAj9hG|Hub3~Ik8hae1CIN0V%z>iyhczzOt13fS^4m)}4>uaA@KTjhzAoPiG z`FBuK^WvlBv7H9FK8?W)ZT7b}A?6C1E5Fi{_|v#+&yMFUOuRxZae79<{#mRS2-@0a zL*2OCfH?~K5pP&`Ybc2*`^9**=Qe7zi5!N`FTQ!liVwJ=$f$_kP&yfkFixNZSo1P* z@{`TZ1Dobpooh6xHv9ZJ<+r0~lO5B>8{0eT+;;z^x)$%_3ef+M_v!UAD0NuVM23-& z#}E6kG9SQ7$<8j)>}JzB47R*JfNc|Zpd@h{un4}H;9{hH?C3M3yF=L%w%+w{2z?kq zXmq)2lzF?|PdI;Ra23{*2^Vft2DHpK7`B)s*aLdp@ljBV)1U_H zt<<7jlh-C8>JL&OMDO@&J#Jclg{Fro0lsTd}*Ok`AKMwTF!3LpL2T^ z-QQ((_w%LOWjjns-l-DZ3jX(c%W-c1V96D_@HB^mISj~$htw2zUQt9D9A)TMAMJQK`RFF_z ze2-z2NfE>;*KZ!^e9y5aRJQ%X1Bt3fYJg0p<;i)44ONv@n+p`+s+Nunx9tW?UmeVZ z^{p{X7Ovf#-AcQ>lIcbvefx^DF}c(G1mTgfIjWS@FG9vxbxUi{_O)W`bU**)wEpk+ zNZRNDZ#_~BTg`*^qJEXXAj0ROXF1BnlL7i4a+b5{Uz%cQu+BJf!O|aP3^Ijb_ZayG z*kY1y*?3I8+gHua&EX5ByCKN8U-+sKafTLPg)h8A8}5#QAUVA~T&{2Y#97vTNv)Fp zvUj6p?@T4-FbD;=X+R?0=EGNW^F9m9Z!g0_!lDuA6S9MYuoH#zNNvk*VKz(3+>F>1 zRpk91RIj<|9L4VLZvLd9DOne?`e(mZBH4^wriQ+YStG%aNO6`>pxVT0Z9$@XFLc@) z)*>C=8SL>?$f7$rTT;d+qOi89Q>Cm$v}q8~+L!$4vmku;actHy_=&g-8XB06llt74 z_x48l4Mj9L%A$8Jzx)rpSc>xBTRZ;8qukSm^#TZh0+7m&Fu1<_D zp)ayX;RK0;o}Q1`z8DZZh(wfwqvLe3y3*8ag7A2ec!=}yvi++zTO~SqtED0W{${ts zxd{CZ5P@57shJ__KXcmN7238NFToVw92tor`9K8jcE4?oh^-^A{1Wxz zTWlZQe%$cf6h|4E8+M?AT)&#*nbX60o*(2B>7Pe`k<8U@ziD4u5^^rl`g)3NG@QD) zanGVjZ=kR5J)ci7(>uZjY4$M7K^fCZe+LDOsg5sAhLUF~taZ2yB|e-YYdw8)=VxOp zlYf4)UTXY0mxUmSzQ^u$Faz@Fy>8FM2TvaFt`29K1z-6HW07Lm?oH&^pKlj(@_<4} zaU|TIuXO~>r;3X7L8Pst@+CUO8o0Zua>)+$6VoLn z@DFR7(g{Ghc5A=A)f?$66>5ZXR#sMfyc9+#$hWdD&sZdi633#hSf@ad$1H8HtUO_2 zeSC|Ay8t=)c5nZn%80P(a4}O3cpI^BUY`#rrcLwQ)~cK*6*STT$b{4rRC06h^R?#J z%Wb~&bEsv6CECr%wR{FE&|(;NTLZzf@2XrAPRdqdnKWLl2QAa$qv z<{?0fg`*zLtNm7{UkV8?w8{LA!$8b$mj&XO+FKQ3v3kO%ih=~w^vG1GeY|{{5|~cTelkA7wXCGg)1Dxxgn<_A)BD@vDC$aQ zB9W{QMn)T*ebKk!O>P(8VlpT_lBS9^-&hYpI$xMf#It+eU$@wv(?Tj-$_~W71TuluPMT%Dub4KiA)zF6==)I5@x^Na{&LLqyeSG?JP=S{&A`Ydt;= z=nhvdH{8Ksl@IdRF3~>ZbLwn)xYAPa6M=@SSXW_GZN=#RvA(v(2Fs*WqIIp)bkmmd zmWUt^8tSZ9BI)Y|5I z%KEI58GsVg_3c#S!P$5qvD)(9DQL8Oy$22nxoV-_zS38y$^BgP#iZ$M0Zy{4>HJ9B zCZpQfs%EW4pH!f<==Q}6ucQfx*G;p;SSywfFuM_MT+DWrcpa zmt?#rx6yPmBIr2C#JajL4aqDzzp)`_+sjSvaB0v=Vmer^lP}z_4zYemWPCZ1(u|jO zihg1cT&@sDdeTHg3zv>#JtqS@>-Et*+%_s54mkix;_VtM5jaIltgPCl%9CoXP7CJp zM4)+1bQ@jT=wL;^T39q1Zp&Gdk;MnH`S_vPT`vhffgtnoxyeEvi@A%3+w+r?6U3L= z_ey{)1oo2ZiH^2rfsuy8da32UcU#V4BZAKx2gjb7^xw*?j}MByvI zA^U%fVfbQT5lRux(IB&9=SI%+Y4UJ;743b5u#>%W971URyVagX*YmR;d=o+Rcoz<~ zkgc1(Xz06Zlko5fr-KnFNH0(PcecbD@Dn?rT{%1?!Nh#o!+rm``XkN*g*}_N%kff^ zBN2CAZ|w35l!c%cXyngqZfn9NTFqLLLsH1w>=0zSpB~h@Fsd>&7PGwK>4K%|)n@B= zm+{lJ6;%_!8OJU+fg|H5=>C+f6g=|jFm)`eGOU^_msCcJ{Ecq_a%2L(&obf|?Dj;5 z`?Vh@G_yu+?5q~)aQxs9suOVz{3_S8ukZ<_6y+1)%5oQa0Ex75(fM{90=b8|6mMoH z6}Eq=F3zzZa;{xYJsdEe1Lx8&M;-o%E!V3B3+|f8%RY7Z}T|JA~#6mL3x) z1nn8=c&*JpJWT+@i(mi2>>6Zu^Uii(StVIjzpOhPN-_Ej6D! zDOWpPH^Rs+B4QqQ)<^>&86K@*|zRj-o|&UReC_(tG6y{Gl(TbSy5SI{)i0 z5IqXrdHQ+YG9IEHY+ga;!98;ax+HEK+4pAOWY&`@d3oQ@azmQ#7%u>bhH9s}FR9U5^E zq(ZVMYuF2;X0s*Dz7p}&Mz*w#%_eyvN&sPz4ir+0@+bn)Klm_@6Ojr(At zoXUyW!$FG>rUNtSB=dc|-F%Ie|BKZ%Ne2QS%HGX=9_#dgAb-z0oYWr4Kr~`>uLu~F zL?K58YTswyKyBPz$D)l z9eGb!ugAr~A_&@d&n^MEm{D`%%C6-LM@@pYID3!NKNCMtNnC!B~A zmNI+qdg`;MZi~Lyv)AK|=2H*lcTdFdI3iw`lN=PHx;wo?>)WyH@19mqo0^xq%g+b- zN(<~Dn}W~ogd9y$=4$=1dUgvOlCw__b(bvZ(k;|Ip zo(|it_feb0FMR)#kx|wf*@zE_J|g3F_@H7v^GOmfu1vRI6OB}e_^n%&UQnO6n_sg3 zG9$&u#oyZevnhKYFqYbL_Q#s|S=0C-Pji?1?UD=UQInbAK6EaO->nzRq|Fct#o^~K zJ`?3bN|7w=xg~QIcoQ8(ec#pjcy}o%(rStE=ahjKcCDfU0>{b^A%9&LRk~b9QOmqF ze~!nRSZzUYb$?e&{JC~-tT<^Q+J1$&+G0_|$x}8qq0+dm%G)m~i+Ctr-A0EDm__{Qzw=OO=*~hVbM+}Lym@m(CYI3Xa;WCysj# zy2oQxUjr|0V^Gd8-E1hy%F0^5$qm2bAA)B-mGAplA?z1WA4UT-G2geISGU@NiUOOW z*SFQ^JtI2OQs~OCzhko`)5()+{i^Fm&%`j8q=)Lpi0#mi(Ia8@C)(;u;n!{UnAsRz z@9BG5K@X5x74>IgW?pWBu+nLMCs*({?2Bb4GLVr^6*yHnMS?{YJ^@?3m$S3vde-yE zVqYJE7Ypji6S#AN?Eepw0+IgI!5>HxK12lx2hByjFaIBp8UIrRli5c_50A#23OX_@ z2+z&fy3+ZBd?KBC^u$o~a?KYr48S^P7Ip+N!8SX1T+&<1pHrJh&AC#BBt~Hq;Fjc; z_Waw2a50VbOk4l$LqsH47`XZtX6->t(9KpJyEl7E%?N|hOhJU_?{P2H7G8Qh$PUQT zD@KU7;)RtG>GDa_ypgZKHXFu*V)mrsI^28ZH(|IwP|OS{BjxNrR8Oc?RaGbAa4xsv z0pexKqUY565wWgk&vFy7)W9NFoS*;I_zNJGqS4b@gIX{auGxk~p?!THed9Go1o{xO zJX38zO&>V}CFsQ&?QZ))Q-SZ;Bq>@&&Z0-rbewIQIx2A6AXVzxJ|V|UANV7+B)d2! zqg)@DzpR4G*~<}rD)5j0%Fp)aC!Mk_xANhoS$kQ&OHKJk{)zS}(-jn!bhi0%a&vLB zagR+-PySjyFxEhS2oC-pjEvO7XLSJ48yyk2<-ZBvl5+b9G6dceW(YUX{LfCB|EDG3 z$1N?qlYs?+yRgBeqzSrPrM@sNX+d!FBZ|cAyocveLgFNnY#2$80G=g@2W|YM#Q6B6 zJ2#iWSFn{;BIg^dv?SY78fi_I`i6fmOjC_u#)RZ~_e$$1SYGf8@RGBo zwnIVqZ@!<3ukUxq4Jm?UP$Z_Y75wc^H7d-Pxhmq|gvp2cS%Xr{h)*D|M<`?9F2yC#zn(C6MQou z>JZ?;dz3QU4raPAsr`SHHlCpQcd$2~D9I?!>=={j`h&w<{8Ly@Nm{y4G3F!RZaE(1 zdY>A(E@%={zth+Ms$StBmBaEj#s2NKt+5~C7$?cQ3MTE!P(0v%g@%5~Q!=}9*%6Wr z)kFM)dA{Zj803I(Qk`&QV!~p&{?We@ZzxSD_a+}Sz`4hvg0M6+WO%(!Nce%k>D8G| zt(~P!#9g?&tlA_0xeWSJhw-XW3OL`K;(Q~sp~7+B9X2FGg* z8#1T@2UGb%^82G)LkJ>WdrhSf(a_M4Q0_r%+ibLn79gVzDY?08+=};565qUGW3zc& z``!R&Hd0|eT+$_tJ3TQbx-PrV-PP4iNJxN+&%xH9|vtBSqUX}H$OAm z-P5Jr;EiEkv;4Xr#Aw64%rfAUh%PUVdM|x6=fDF*`x5JVMiz7iuE@Bb<4P4=RLI?Bp z*PzuqZ(?KwpVtDtrai8~aXl98Sg5xK`2=mI!mBbjkdC2ny5Libt*4ln7)1E_vT*A5 z_6|YNWH^$*>P+04vOk3$U1Vep6{w)gD}M^r`xpc?3fPVEFfrBn|p## zpTT|ZHn%-MehFDl6}aYCWCNpiqx1HXfUAA&*Jaok-vBgjE*}4e>x0uu094N!SC0D` zd^OisZSuIHly4RgSWqgr%T|!tDf?e&d+VsI!n|!1Y3c3~kS=LS32CJpq(i#9TPbOf zmX_}B?vU>8M!L@J#5ePg%8>LcS$_&01?lb{d^>NSUTz)E~hu%QOrBDYK6r%b>Ww+9CpA z-hl)`>x4AzRcI&D2fxy9R@y}g7(*)Dz9v&Wz5tfb)j;mcubxxHZ zA9++%R6stWBf%tp+4bsq_uw!i<35*_&()HBbI*z_0y83B!U0Vth^4 zry%-`!%Vr?MTJSd-27k!Si3iw6Vr|KSm&kui~kpeGS;)%Q%2@P23Euz@!6D@{bP{#7G1nQ^5spt!SWHXt%00= zkl=W``y?{C(&DQ5`CfX5>Bkx1`CLYS&ej{jS=kCKFDshJ+S~kk=wbgm7T~bz8zyp( z+U#-#83-A8p1`CE+bI%uv0a@E$QG06Z+Y(@#iFGlD>w|6ha}mk;9y|1TWpd*aLxv# z4p`-G5pWqF?sB?V)~FccSv@>G%x4OZHdEMW$j~@g-szIRM2Aq5xw~_d`-&Z!K<|W@ zwbwI6D8thZS`$%Rg`ZWKwY#f?ULzfe4HFF3j3x+@@&sHGlj5R^SJ+h#pixjE+gUEu zVVCY8A?xC2!isdyve@e;pUhSeW419R6I(EaUG27KnXc}&{E#^N(WD6)&&y+a1YCdL zoIZ&}i+rP_+C)7o00M=Iq7P!y(T&Nx3~G1;@KD;#4lo>vm~~%<)!9`|{Y$4Ohp;Zf zS_3m!Bq@1$Kiwl8(z91qR$>n%5?Oz0?m@aa-(zbzS>UoVs;pI=5};wB>3_o-hF0o3 zfzQ0i+3Ib-0fXv1YKJ}W!$-*NfgtWNp{<^)hF-Q;0<(ok-RuG;DeuqdxMbx35-2pmA07)=CJp%7R zsA)ulTXPnNtI`7HYWb5Ou8mD-M-`Sp2R)M6)7APM;+Viq#QDgCR;pDqiKuR@Zb`HK~b5e9}e zINk5}ktrtihtH=HsVg{A8=c%P?v9?8?t$_>q3A9_l|0|s=H$gLt_QmsJ&Ot2eWzfa z*2nz4sn(e~?;fgV3L0FiuZw0(cY|NiPtVWALNL#JVc>(3e^}UNn9G%ncZ&6^kdK&} zq=zS_V5(}tMN&ODUzFgIcBSl2NqIi|~5R|qTU8grB<-9VANEHCXv{En!vU{g; z+wyN6pcUw+QfWts1EikFP*UA2w^r2{JXLk_Y4v)E&#JtQ9NIBlo%`^!vrzrlt+fo# zr<9(%Hq)TEzBVovCX^6x zx^a_p(0JdSqSNabZ*NyDwE*tUBG3-Jj@PWQ7uYy%I11Ok>nTS_db|2;31h8(Z+GZm ze~*Vo>I@Shc8kr)sXMQ<4|%&)J|DOCcy zL{%sbVN5{LMIi}&CjM^nb4TCVl^Ue9%){EPzgPQnFF=MWc)q=gJUI?S`?E*+->E3i zsGoa=d*&Me`2mB76BZfjet*1_)f)*=5ImuWi1KpVDLUn^xb#ZoPYQSjJlUXSL_H@Z7#`oS2P-y!4K>>O*0ff%>dx;RG7t1(|FJGZWE*#hsN!;gBL^!`;4i|D*YuxL*`h93CvP;N_ii$OkB}FDWE%_Mn#WUg@*m9hBGB zu2k4&#mC40gaujgk5$&g+N_%!&S4S(%Rlan?NjY8}M&y+SdRA$gJ&+xXZAk5cGT3vj z`ntMf*|rACsk*sBaV~EK1f&IZ1?|E3A4_lY5t=rzwl{)Qr_sw(SQygEr*dbc+5O~M zR;W}n4+URJJ-)^B4t`59Pu9T72J@vNj8Rbld^$iowLYU7NhOr1XTdTX3~w$!-iP&3 z8s<|v9*zmoh>MGl-Yj7e@LHvuCdzlk0hF;lgyH3(X{}C?R<+deFJ_$<_$>(RL6gCF zChUREr(5dRb20Ey-!h|>iZwVgJ?@6^8B+Va2yX6|iuC+p!}_9!bn41%D~%u0gY)th z^R@<`1xZ)F#86{%rL%Z7b(dObB$R5kpA%8AqT=pxv}wqtui$wg~$1@ZxE~q20h^hqPgTE-U*Zegzb&aCs>3YH#g5I zgILn!5Pp%#Tvmn?{S=KY+iPp%4VIeSSLQ0k>-9G6fSRiO=+)dBgj5}EIP9~l7OIu5;ETCghHl4rGWeOVk z0}6$A#oxh7*31K7(>WCa`gR!gVHz3R=z9GT0SvcvLu;dmsnzG z2w`{}`)B@eO<{PL@j~R}mHA;j_P6v^kWU)J19@7@>i8vqO={FIf6LjH^e!} zc(0^bm7-CIcqn5X9UP25rZe5|MR$i9JwF_67AS`GxlvM5ww1F+uWxQ<-%vb}EHw@y z4CKkCg+yYOSo(3Da^!fP| zy&mgO+S^LN1MoVZcwHY8s|bR8YIgH^CDXl)gTZI`&llUnfICx|T06}YAtokvbp;e7 z^QRUh6cpnCnsJuea>D{@+3^R#MLxCt@`{QEk2SwC)*rDz?Fp0|zakgAzWfE2BvqJI zYj$1VUA5VsETBx&?ewMPcepte`keRBN?j+~qCvbNdSe{v$70 z;(IVKg@=bLPeHg%RydkZWEF)4=b6N84@1Rx?7s=yJ?3}M6^#rT>L$JUyq?Tu{hia= z>$x4OzI8MR#_M(P_oqwK&s+1tpDzPm ze(O5=h6aUyRM+pfwV?k#^n8W9+4KJDGMNiY5JM1uwXXjK7pZjl?fI6yy?vwm3CV|O z8Q=Mch4djg5X|~QbML8iB@rz^VSRo5rt~#_6ih}dEpXHQyKv3_B{Z6uOWEDqYfg1- zYPfy^rNh&57h9X>8qFbj#CL0{nTzvA{tZt9&%eQjXeFcc*4*yg{_UUiUg-ge@4x+1 z`S=@jJ@lSjs<1xRRe*d&lnQJm12EDr|BbAnymvQaTklHOVk|j~I<&|5O~YAEH7{y8k5i^=8A=?DJYgu%lK{GTFy3b?+>Az5uYS^~RqnJBphgO{U7?|ogL*7g!iOs>;OVU`2(1yfie^5D6!p9 ztN*YXQB3rn^H!4X#&#p@v zCZ-5<=%_#-Wc8sFLc;)Voo2oLA5UKi*Tqj~{GcE=Xe~t10@zoPg?t#^5hXU{Tfd&; zo)t#y*8xvGL=A?tq1qk->PrK&%-lF=?5fc7#KDDn zrGt|xkfE48OX5HNhjubSGSr8^V*w$5btC+<6ZfoEQXy@zzSd$sz#F`1!^lF0#N4Pp zNX5fBpAZlbAXsPp__5sV&SiLW3bX<7A2)}RDn07$Xw)<{@9%EQ1&24kU|#gv6f0 z5!I@e>VWrCsYM_{qti)`CKQzae6?AqIJ!fzMUo0_25}hWYAPy(>*d=0z|`k`e)>wx>uD%y zB$emvqw#Q}FX!x~pX&t+>|v-R_R;j^f$0}-?yG?~x|h7EJVpp8$d}X+B;Bj!j6Lb+ zZ!p1N8&jSQW`r~F&9{mf81>lk@gF@7V}SL%1xrg?4!I9!pss2)VvSt9QiV}7f{?AJ zeVHU(xH2UrC4z*<(8`L*LBOsH9?{;Oos*4Cvr6{`r}!3_l%%nkQDhM=cPllfeio{h zhoF+GcZy+yBlcXLKDU?3hDPpAwS!Be-j_4gJnUY)QOC>$QAr+T3(#Q@Mh8wW(X z+!NSi$h?9lH)DYfBib;TaETei7VR1wL-~?QuQu- z6F>-;q~ux0U+uio0=6*gq*Xm{RZC>k1zv{lFl)Iybp)1{l!&8{bS(%6A}rOpR_bpJ ze9M!V!o$ zv_u$by1iJFZEvP~1(TTs=CvzA7BcHJz9!$IN0`;e{-8qDVs)q;_@7FZV#p84Z#{X; zI4u_QUEt$!a9kdbk4IKoJg*~gr4s165yAFAIJ;G;Kl)(02t7sJmk-Ez{K(o%R$5+0 z$9DYXYqCW{yTkRM7ZKt?+OXDitw4sLgxHa-LbavQ;=`z)|zrDMmELRMX z2Z}Cvmy4^TV$IsqcwTN9IwugqdOVdSKKz{n5r+ms8o}2vz@@3V8NEQrKdI8>B0dNf z7CkDebfqck$aUfBsI2eqa?c+g<*sX+MOOEPZL16pw?2IN1vi(?1BchK?f?nJjdMT7 zE;`o!VZFUhi&voB`JHNOHhv?o(*rjG(1c*uNUbHl6i#_a!sb#Fga3U9GK$A2Mo9%- z^u~N%xDbz(l6n`Kj zd3a`kOq;)0WfZzvL*wUS4-|ys=gUV6W#cXkUt%c4QMmn2J+*ioI~oW}MQMmhj8>ML z(GTWo-JNZ0SailOE-p6w`p&MecM4sM24ii3{Km#cSK)b3dH-#L=X1m*Z@_4ohECom z{(v8uWN2CTV55xmKn+j*F-?hQwXN;lu6F8tb$J7G*jF~aiEQk__%*eDOcE1gSE(c|+CxzKBHzp6R=mj=+VmY8WJvApPsAU)aM z4m!~44}$+eP1PaUyo!F_p z)UxPTy@YC`q0l5PB_%Y4?@Uk#hKwM?!dawBiAHzzyNa;VoItdxDttDVLnLfGK@0lH zK4M}Mu#_%d`ja%fUIYaXxl%B||2|qFErpM_TqyT%v`)c_0E_RJ{~@iIAk-Q?6>9N% z97t$W@T;t3E3tu=Q<(jvs*2kHb*6BKu0_W%Mc*J_CWNp#`n-3sLrH!HkFnLCN{H^< z&ACW`v5BFk*0#jn8&$FSE)mH}Lv7X?fBO1(85wH7I}{g9pO7%Q6AmSVYt|ezGkly% ze7P>zvD|-lQHaWL86q7Wf>oir%=d)pqz;rT4UP+(Vrb;=EF~uNxo zH`}QHbx8Y<&K@mcJ94B|qVFn}jYLmRugIn-mK{{FHOK>qX>yU|$F~53#3|LXJ6r5# zqyBjDy@q%}xkSZva}}N8*F=4zG;q+lyrrVr1{OWID{wubt%Zbp>n*GJ% z3qUijG`kK~Ak~%dI35%g(AL+3(VaL->g}&##v#|Y zbgcXHTZKELDJJ+Ifg2U@9HX)cE;kn{(Lplmii%KWLrA30+m6ZC$Fmom7vecTLL`dGd^jT83HN+6xMmdUTu-ScBea?QYuo2dVI+u35w!5OBbpD zr}^#Mx1bM%*fdJt&=sDt<6_xAeCI0o)EE>I5z(6d95i(R`qSk1CbFda6<*7^Jnj!) zeOLhRb>OUh9KIwx91XY$0PamTbRYRjNGuijW$CX{k|7Lp>-s zuv4PR{hn!Fb3yHzcyhF7nu>)CO)>sD=vJfHxLPuc`iIs}8QR4M6PfSmI5>X{tPRKq z`1trRa4?{*XuNaD0C;yy6`NJUg#!_Xlix-fy&xhYwsBo)cHFtIJ#lHY+R`B6Wyr0U zrVM6I`RW04?szb@G~0z|Jeh=P0xC2FEPmV2o6}dRS9y%b+A99|@dGOl=brgXNQlej zIyOSOfJX|exmlEc;0hp?hQ4OBz002hY=7mP2_c8qB=FTpC(wuYI9n~h^}4}B0GaWR zaHxGzY~nzny>$V=x2DBnAbAppBP!ZF#T|7&JG@OJb{|{I(DPS$Xe4J~M^Z#=*1K!= zc+v-+zURvqKf@&qB(G4e>Xtw8xtE*VTXn%VTYbkY&^*Y?{FF5S-AagO1^1+pWhJ&p(n?W!+1m>I5#Eiq< zNTNvauHva?h0RO(=yG|t7HExs?)%pMaBMsvpzDPQoc@UET64t5xpSkEPfdP}O2a%H z!^5vhR=%N&5Lfc1@i?6?;LaEqe?K#*9X8G@EKDwa=f&^Y3^L(=sIQR+j{EmIM~*CM zSy)=yYJ6(;P_B?EP%x5aD<@Z=@0W2~ezghI3yCate5IhVlE~t45}$QFy`8>}31y2q-=n%zZj_ zE>EOLT02|oW@mw4d8N@__E<>~>&@bsw37#B2(Ux|-k6MBL<}X6YiHxgzb8*NrN!xX{#UPTuWYK^4~IYX zA!}*jQ3mu6$y$a85yV{7riy6~uCGKu0I#vJaT&td^uiz^L9^AAMm$Zucn7=x_V!TR zMSo|nOzeZJq8PbO3VCy066iS9B%=?au&GzvaMp;0Q9$9{H^9)g3OT#X0us%5%s zen1=4`Jr6x%X*?}t@WZYMnbDY z$;?IPNY_}*{1i_o0Xmc397Hz9jrnky#dl%RpV)sttp%!fv9e6DytPTB@rg4N`#TnJ zb0a~OuFct)FsgGd8@N0M8}stOS*%B_X<~GycD2+e|4V@+(~g$)r`Gm4)4^$uyhSM zv>_XboGbhUhSn>3UdGn*cUwUBoKWB_L60vgE1ib`8i2 zx&zj`^{)0k&+9AVmRE}ka$ihI!!(PsHwRM92a0I3s3Y`}Vy;h?4Qej;R|qll#aGhm z+zplkf&zpi2-&TCGGI&S@vfTAP*G)@oNV@dT!f0<1aVK&1U+9+v;xyPw|l1;^2u_e zxV|5y#!F>7g`#{#ChB+&p9>gfm(?+$F{-+^Q|8LO!$?tHRQ7arpM5H!TI-Y-R61(7 z*Hosb--qIM-aacT4*u%IG(SDfMw{qS>Mh!3%V2&Ofc*fPAnHY@ShW&ka~Z#H4X5KS z=&M7OvrKLn2YtpQ#SOMX4-Rw=s`P!2O?4(nxn7u;w@`0RO=a~|Mro-=Qb zLArqrUbai+M!frLoXF52F9^yBjnXVvaV2bm)(3l8&@Rc@Un`L(N-I} z#g_WDieODH{X+>gk&YU*oUfsgz=O@DFM}^w9Uy6^JL=U`b2Nsd!-QjB@z$`D+tx(5 z2(BGLnXp8yiO9dVcBNSs6;EI%Ti&A&?Nh6#y@7(OeybnU>Uw>sTw&CP*c>m9gge@v z9pTvjKJlb+=vrMN~!g;at0)<)TvuW+3ct=4SITn+MsOBbt>F3X9--s}W zC;g}+#-dq%Qu+)=W-0Q~vVz8X079)6rtRG_6}U|{^3z%Zg9o95waVPUB@58ULSSy{L1#BecviOy*K zw87sE zGP&l>xLl^)dvC#3SyF*at$Gb?OX8zu-m5-NIgO-aU4;G?VE&yyBCJ)cp{1Aq2_3Nx zYK9r&*i9Et9~Z6@n6>oxGus=k_tz3d&MlCvnNNxdYbm>^S%e2j<0&&TGhf{Yp%2V9 zd0}GW=M2U>J)Xx&Po!^w+6$|dMVGg9baY#UpBg=m?xqeHItvs_OPaGD8{*72Ha6~& zk5|ehv%vh!COnXyK$#OutD39TeIA7#g)&F{@c1B0D!8@wbTLN-bSQ(#f;ut|Lvf)A zpi$*30hEaUM{Sxp087G=<1>6(OZ&QF=x{GVx7h&fwPw7M9{De6bh}1uhK*i3w*t2af3&G+0Dq# zz+PmOtOBaPKmy9);?h=dZzK?V=<0-j=ip>#@6yxH17=|`+i_!`fC|X)TA%?n1>x4( zT8?&|(hWu^c|^mSwQX--q9XD--z^3^litj-NX%l%N6F8WXt`hAdg6hh2QK}y zwlDIV==Nu%_C$Ywzgo+A0ur2&Yg1E0Zo{szr3I%mYqUHbKE8*ps11h45ctS8T8w3t zLiJ*;!1KcR;x5Y1GX?w+4nSim)tUebPr!cH_2?^yoeo+=;roMl?w8#0;8k+xa-XpP zMrIDHamH$wzYJq4^wpFoyDF2zz{XVIE>QJUo0`0C4>jDz+Yv zx@l{(*99;(pB+B{cbDh0+2;Xd<}dNw(s-ISHm4xy zg@2LX7JmbB+h7nB0&BRryU$oFkv^vIIYEBEyxpKCqB_CXs{QHjg*X<$((}cB+@nyLy9zEmFYfxSA>n${|G6!u`FO zWKwc+UX#&?R=rLA@m%>mn0SF@se|Plw~sjtnNhE#qtDM_9fcGV6Okf96Ahw=p$a01 zWF)&dHT4h(!j@%y{b0ZrbEVm{cLIAcSfkp!`&nI0Lw}p-txL8nqd* zVg6oKb##7S!^vL9nsmX!iNTU=_uigGAbK!PCtdE{r_YSUEJO&I&DE1?P>c6%*f66J zGw(Q9B;p}g9nXb+1tyq}g(f zJ1kxv`H{GO8i>snah3ZRhYuS{b-jIoM33%Nk{-y%DII$|o za?~a-AhP4CEgKulWlR?GIo}+N;k8bSJfX})5PdNa%NQQ|Qz=P7>SUj&3kL1bbo%F8 z&feu;Th8otcxYUKI%7XA3xQ5FK*C6H3(AUViK1hujxcXO?@gU9+Gz(&-FJn z0h~ROh_In{xX!DG?gu^ky|HEgrTgEzlf`V_p@^#!x1k8dPu4q~QNFMI2l0A3mNcDj z$wx+tc^fZ}1uQ0Ql*s8ko{v41KJhrC(~EcZK0w9bU7(WE9;d1vFV(}nlCg+zr|5tS z*{Y~|F$h^%BY8nJd*Zuvk4<P}TWL!_8xdORZFTw;P+BmhG}*J9N&_5He2K2Sqw!9`g#fqql&qEI9J zc8|RglkQTIIpwWRsk~<7>D<0bHuMs8}{14V1E!vM5f?JA^DkKhjio7C16MN?D+*d}mFJ z^=5{Y`dATUxP@ZOA&p8|m_q=#N7^?AC!067aXiw6KW?-!EJ#ar2FYn(d`!~MK|^^K z{8Dh!^2111pm9)kR@qB>MmKr+5CXnhuQo|eb>F8VXRZ~ zpW0dfD*;JJ*u6i7JGD5Vq_-(MpK>`iD8D?(B>dkPkN;W9@Hb;#JPrlCpB%(G#1~z_ z{8M&|cJJ=)v-pw0!;qnTgU`hQhZ(BXrL~a!kHZ231Mu+({^wy94l<%@0p$fR!I9ry zR6zVy6YvkUi4?RD{5v!B&j<%8HQiFF@L$3nUUwVi5#?#{!gfNrfW+YPVA(kcgr5%@64V z`Hh5dyzzbdlb0kf{rV=!ybNDeM^5C6zw2D=iO#_%<_F<)^dbhGeIXKwAOBeF{>V$n zLS%e%0h&QkbZy{?d}h%VssF2!Mv_!={axZe2}^31pwCqOb?s!7WDM1~r|%7ZjfzOg zg6I}M35x&LvGup=-hVtC!pS+Le@+54BA4k)6W|ddFMPEe9FwS#ILAE?!dL?W1O8kk z5+LoN+RkkuS$^f)&S05+SrCoG8E>qDgVjRr^ERF6Se+dM3!b#egD4a0lZEketltMMr}BZYGp>ha)I1{YRTeocifcIv<)J* z)_Un~eec)Hjh=FcA0V&;6b6DGsWh;+q6lG-`MZLI?vveu)1g|E;Y(@N!=s~mry{N9 z`QBdYy&gxindzx1WE2zuw?j3IVUX#Oz^KWIh!_gWiMNJh;DEpa*JMxB7ZL{07Dz}) z7M2!Tt)2$ZQOf;t0Ph=XGY6Qi>F#s-*As!kWz>IsL||n zG;O&sUv0UNr^<{c0O~M7Rs$iAhl{S>&d2+vHPw3;=l$I8ky9QSp_f8~Abj$rx7#Z?P}6PCPBAuJER#8B%e-5? zxW%f1bG}&FHh}%?5d1pxI;w;MP;a0qVLY{enk~1de$Ia%isMqOU5N8ZkKOa}&atQJ zGtK?|y=tMl{Y?n^moH!H(i)u)sD8s5=pEji0perLTC>)y+O!{Img3DL1j~_9Q&VH1>C@{JO!P*QCb8E=%ut0BtWC{~mWu98 z@VfyH2?rm$+xY{UH=OsoXk8e*0f=7^Z?H(tgnVF2VGyy}4#0MMYyyO|N^TW+ue1PZ z?bf+`i`LuBS_3fZzjb%&%9sC!+7!qZ*t62=y_4P`9kt{RWG0F1jncs*si?#P3g!eu&9XRC^vz`cigvRd$xP*~mV>NtFul+S}^ zL9ZJD+vUa8c-bqFx`n<`Wi=P>7y|W1=R+F#CYK8w#-CI9FQmiKyH+|#LtejvtZv`Dmly87&b#jJfj8~dC+%eomO%bBR#8;?8uca+n3>M_K(kP z-g~)39&b_mtl%?*Kpw|RwE^56!z&ouoIi4rm=Z>eu9bF>!89oH0airjj!u0y#*69AU z{yu3U2mSp(8b5Cgfz<<=%!dzaP~;NKdjoA`Z0deXw)^r}B6f4E)%Sp$pT4gC#N1R)a(Ktu&gc5i{fUyT86}Ml5Rii%4us!0rBuF@|nD;A|t4yAUL}3MjZc z-=h+>(NB*6hk)tL0uTww5PT4{J*Ra0H9qxT737SW^q-xc8Bk#}n4)n$Tpej{h=tGB zSRoIZ_y2eg)bPR&`JTNIYRMZ%sdk&X&}X%$a793rr3Qn$OkUG$bEc0~qSgF$%ktRu zXt6oj`|Dt%`1LVR#JRhikO)lt`n8cv*^C$vUeC*!q0@S0xuBBJGx!!5Ol|iT@k#3) z_5-}_2!Gb{;(1|xPtC_igo8=v{czJBy|LQv@9BOW z)Nr)W%*)L^tF;dyT)LJ762729p+YS6HvLdtM7IqwM2)F|=sc%Hs-tuOuz_cgP08Ys zBxmRA-p_%mkcDswG|-U3m9`h#!22-h^s^2zARZVkNSVWFF8X32$kk)=K5k8;#e6p? z69_<7tma*_DdSaRZ}Qk5!vFLx)}*IM{TsCe_Dq)h^$7*i^Ybt!#*;UOSDY;;+NjtV zKN%TByJLws2?+_)gmSB|Kb&_IY$f__(5zmH&9RMW7}*mJ`;aAr`hLG6`!gyRYP|0$ zp1qm(Vpu*KssX(pw;RZ3sx_T3ca{QD@`~zm*XK16zcAPwXj6UPhg(6TUTih6$jR4fziaCl`5L z0AMu`E?dFjdJdwKkNZS}!0Q$;XMnOc0OKkHFoFO}-obKSa9T^6+^-DVPP!>Nwx~=H z9P!!cv#DX%1S+Otj9ymI-0VD?7xrwq&U>X}q;k&rJz@3u?xxSMi`S%Y1eY$$=588^S^0g~1 zZYw||GH65vwsv?Vc+tuS7{p0)wb7wP1}dIyuww<3x>!zN&iiB(OTA1`gbeI_d%Kxg zUtWFzdbuF;+^j-#Bg<<0K@@9i5DUul*4SA_LZZ%lC#_6pvdU@&mJ_AM^WpRiknjPK z8O)txsDj?x521OZNnJ087ji|CIR;e$XjpYH%cN>$q6C;8{<@QQz-w8;-?(o1$5mbL zwa{pQ3REum_?EAmT`%tdUr2H-cgBg3l4QKmRU2$EzaHf_-Lh>G&4QT(>*g>o0B(0_}x1Q9@pE4_kipM3v6LQ&RnB6 zX8Fftl5%MwsMuq8xR~= z4D=$vBD_T(?`-3MCh#>PA_yg(Q8lPFPypyEf&+u94`v1O>`Q>!WED8E>gSzI4>pd% zt;S*R9FHf}!2pf$)b@1&z~;KP4#(5#H5Gk2HBJBP)CxmeI9yhU%KZedT>8KeN&VN+@GeT0_T@kYtuwRXj1*A zy~u4jJXP1az}h)wrh-YgX7(~o19Yy4x^SlucU!(9Z-TH!ECr$lOaVX2Iio??yvWy2 zMXne7$e-wyenR+S2DBaYqN*vg)KNCSe>xoQ00HG9orAwZTjQoufw+PF^K!QH^D>al zlW6>lr2AAMYAQkF=5l`er9SZOKD}z8Lcvc;i%2Od$1^-3G}={E z2@D_F-=Of;jH8gkX5(PPpFnFOUPVP1%0=0$rA6{L#1|no1lRk;js)9CSpCcw>wTjMQ!QP2gn1vI|r(TR>gqYIy$TbS>=8+S+(Psy_439 z5b;ZSk)-mNgoO09j6^)3_W2h0m|YMF5d<`vVJ|Co`XXMn;}Nmy)9l-pxiEhEQPkB*0qfZnRN<(Oq=6%^2G+o9OB^B!35Uf}0Q`HaOLJ zA`)C7Px+#6AjFnJFC+D>?Om-Kv1FIjv08@K7deAHJhB!vMKLsQ3czQk>v-xG?2L9r zD@FGyWQtE*@d;DH;ml*v11Ex-UA|eC19JwTolnQfnEt4;?%^A9X)Md~0$BIZg=olG zB?l~SZf`!d+8rGw*LEn7388)VrKJ7fQs=%(3O4Pj8No4V(67k<#aZ(I&b9srhXdaR z$g1S1t^)V`k8fiRE)2n+VSUz25%5Smz7;uGV? zB_{TP+M0R5Q466#Ha(DcD#V1#mtX=4S~5n;+|2B|x_Va+Wz73{Kui@zSaNuB#f*X+ zm_hi1M>QQ0KEkuC+21Tu6XMa_XjBG@22chR+Me2sca~g24^w1`M3~r^_&5=lPqV)- zzD+1bgP%VE|DT#${*9sKZ`E?fdvJeFVn{6dXj1#fvD{}Ca=k{Gi(||g;RGs9^j>8G zfTt+9yx_~1`hwD6X9-;vX~NH*KeGeFbCTj*GfKUcL@B`oBaMMcj7f}dWMv85EJV6Cix|BW0H8v186(Zg8B%#cD00En5WHE;yAt_R(qKUA;!w7DPW^7ybk(BvFF8qb&_aDL0A7@DNmD>8*^}E7Wk`w+or&}} zfG65e*CI9^9!Chx`_126L9ZoMb+|aG;?bdnX#NHiUZ6?=z-0FtoQwu$J>x1pc07Fv zIK#=*l$2m(4dCwQ?zP;={h<6)wYL?(A?M#;_`{xk2U{!nVY*mm?~A+31Q2-K zVhe?XTpA$4<-R=xc9Izu*4EzVv*me_B$>ki)e(y%DyU=5v8=IPng`Bts!M3nrPk+@ z_3oy#Nm@lPTzrkMEz!|ou_h_Cn9X=Gze?(aPS?dlT6#EbzRSrL>?9{G8yGfbAse0&B5>TGH=aT9kFD8PNC-p+$Veua@VkMGW2nnIAI&N= z4u=~X0}2X~Q^;nVv9z*D**Cu-_hDsB&e4M)9Jj!)4HzEEY#~h&TrpH$m@P3<5gWZ>}7l;alsK z65C3a8udtoTfvII*34vzxl`)-@7LQRZH`QI!g2>rSd>!=EqN}3!OY5-O-aQRI%85r$8`9QN2IQOi$ zxwu8(3260+sa6_)$mH4`kIE9iK3vjlaQG|{ml8*5b8vNpU8s`zjm!GeO>$4qv-c^> zk4xai+unk?*x8txnsNjw$TSu!XA%ONm!UuSBMDp=Mxf9EmpJLJKq9Gq?|B6c_jr8{oX>Ywaeq_8kBco0Z`EFMUo2Y zUS>c*~iWhUh~T$~&qKO8MMpSWZ?6exfQDU*p)xt1o^wcJdkxTr&U zvztFUEA;h@Qyc-ZPpXm>ALMerbC|Uy3VR?x_QI31f$vAFes^^eiTEcnJ4Y&B6bYWH zXX3Rq=sAg-=Ufe)RDnGG>Eb7&Mh_fMz(U2SS;O!QZyX9N;|P4wfy%-;S#|?aA|()n z!MJtwz3tl}GG`?akYY^`;@CY{0vxQY`%{(F&V2O}dVI58D=XfY^VQMl1bCvNVs??% ze{4K7_rS*E!?nJCN*|1j4>=g>Erpg8C36*Hnh2!^5Mi5D;K(3*Gpf_{E+;BV9$~>| zsXga_!O;WMd5&u%J8v;$^IBU{Pxf5Ov#N(X;{9fYGv<0 zV2%!sXqR}w|3lnc2G!Md>w*au2=4Cg?iM7tySux)1b26L4-(upK=803xVyXSUHRVo zoqJAoch&8Cs=EJC6zp1it-0nL{bi>py;T^9f6JKN98c)Wg{u2pJOfKCMNW2qlFRIkW*p5Xh2P*A(uA=qMKF}H-o z!^5TVq&_n#-S}#!o9qEz0(A*^(7nq+@5jy4LFu$)4v`n!W7B_pG~zyxNLmAeApy!| zZnk=!yGN>vvP{i@z0-j-N-{^;LM>uz5SflqyEM9^qa!E?{0Inw)-B0p6f#kI`<6n+ z#R9`Z0AC~DCXc=hFfK%Ne{m=*qVP6{>VPp;gA0R2*+h%$okQhd`v-<-IQYw@=|RZK z;I3_@FoMlYLT0Pvlc{0%^VPBCB9UZO%L%~AXJlmb@Sxx6!!2ZH$Z$Dd@bQ4ihV#Kl z#_D^4`~p|`W}cA;Q>_Q~6`2i-@f@8^;HD#gAajUN;Ri{07#JbJi>3Ss=(YO?baBdX znaKa*oO#33c&Tq{2s%w7a_%eZgl90&9R95C+7}49N!53=!Jfn8md$1e_F2_>w$~I< zFeQd-^?orqocmnbk29-WA_Q=S0djmH-2K6Lzz$SkG!9S5QqpaT>)&eCa!Y!h#};A4`b0B^Enye2*{DDP+VQY28|@~IMW1^1W(2ir?^$-XIe9nj#uYb5xmz*Q$K^g{9$Nv< zs`Xa4rYzMjT_rKt%9w4r??mWU==$zHG}5@hTthszwxUXTULdpD`c**;341Irt+>$i z>a3GTUtV9mx!y7Ch;-jAt@@C?UNy`wrjW!)2~?JvS{mA@(C$>AB|GN-eBikcQii9d zOEDnBm7h{Ld7Lszn&{`rf|Ta3LXfvwFZ;;2t?{igRnGG?=W2oVlG)2Iu7dUx%NFC; ztXD-gHg>V8^AQx(q9VVUOy@8=p`dzRbLaP?L2D@$s*AJ7G+>IY$@9(S&AFC07~?*D zA}ceq-o0-FkRB952$LZf%%Y8zguBkO5w| zICuH*he^TX-J>b|&Og2$QEpwwj5(d)_G2p4-;1hzJ&wO7AG6gim`W(4vKH0F zhwE0!>+-l^rr^rS-e1BwOrDol)y}j%E$FK61OM0Hf*uh8F=nwo@pXQZ&*%AM>>CU| zj~af=9a4wn*pudR2IWsmACFtxz28m1Ox3!1vGGGYGebPWyoxd{`mNEH%4wHBKKe`TWG{uiOMtPaLH;Z`liqpa&f(ta= zx33gP4hgnaM6@B_d0Zak(7zL~voNnX*-@aOf&&UQ>;ES;OcUl@*a+=IUVa^<-eJ`Csr8oMA`{-0Rh|*SDpzguZ-TB#B zXawjiPOI(xmUYuOst`)$KaZPX?+0_Z>A;8!&d)0Fm-i=0r15PMB0 zU`%qEv|HR}Gj4YRw#a-pkfVG34V%SzHGT!sIsfH0=Q;T!Ei>E+v-p_}SCYfRe$2|l zF5qHM&|1ut*Jq{DcC$|Xr6cHNRK8h&EajcVZ`FE%8N0UFu*Wt^5^qEHZ!Ca`FU#dS zF!xndbzkZdwtBsth2p&fQ{S=BF55fW4{f-&p3EQQIB?po*ip$y=;z^epR*#K-dz_V zrA|G*&T+0pOT+Rs7=-v3wTr{_qbscHe(Q4iV#(i!SHRL?6P+sec>Xn zwdGIRBaeGzr@X}7_53`x(a%4o2v30s#Ey=SYqEdr|4xMsk>1T{m)ep_Psd)`uj>oe z<}fuk@lZ+Yo7jo1GKg5g5@ZM^M{N;ozs1orj1e&z{TfF9T}J%%jD_=9r@>?}FbjhqliP&8W@nSN zW7IG6Dyib=VALDNkKgpLvIU*2f>DR;b=9P z<An_Ja5gTj{vXJm);WYt@1L%*tU=dzXCYM}QheqP+GugS z)zJ*^>?@O??y4hM3}0}5V^k464i@%V&flu8HOYPj=`mcccZ=2YQ-a~wr7m!qNkAeJ z#yQUQ+u(c*EaGJg>ia1wCT@?zidsoboJ~hCE>4Z%0uf{s?>gT*L<;<}N}nynHHxWE zUsar3&CK`yH21^`>O;?jVsoFF&QE!SAN9`sED-6FPO$}uYA!}z)qH%<16uOdeZxvZ zh0jBkFCw#=!>Z)R?3x^#2v>a8##RYaIzJVd-+a4jC3tswhD_?#3Ie^5dgQ|n+X)eq z&^dwX-&%1@&v)Rp)I(L-n}<=j65SaEff(P+9(km9i}k05VRv02!<`koI%~PJ?$E2y z$4|oyCm{)6)ar&W`P2NKcOtyXR_;uz&?TROeZ02a3}!sht}xsxiQz|#$rfsR+>zkK z7E!^j10+=uyB+GYs3w&dX0AC z{I(efI9S1x#3od~Lqi>N5W3s;Nl~%4G)~EWrQKL$q(0TVh48s)fFE(?P&_*zh;Vw{ zn9i3)*FkJy;0x&Z803GN{pu4+ef9F@EmNwtdb|M|)J@jcO~->4-0a`By`W#>UA$m< zw^9a!KmhVDfoRPTwX6PJFoRl8V>rw<n}ZhNdcdU=YfZ^l ziZ%o`>KA=&g;4l?{PtrBHaxBr`wG5^km=Y+Zahv5Gn*@J(%bZY>DdTh|B9`=IJWBU z)RR)5qI#T`x=dQDz8!2qC1KlhdFo(0j?;|5dEJ&3%DdAD+!m(~q|l0qQm#@r_{$i6 znq^kT!SXYHEUE#=>u2g@1P8cB+ghrB7L+S3c-3=vQcG!)38=+lAMj0}@5ki8apJUR zt$n6UNA94wgDM8cC`tuGR1e#fod5g_R_hxvv8O$@1FlRPqIQ z=+-G;e$JXYC=-|of5Uja#-+B0gXtw#Z!slbRLw1OUlR^0ttANmp<1bok^t5sFQ`;+ z4T0t$>Y(8O?|!mwaTi)(T7{8deZ4c81vZ$I*BuKOvs&dk6If*8D~JvG)i?T0RYGdr5|C?$G47_ zOH@rlQ7Y2x0Q8s$>1SfmiQ+==25vH@lf^FgaQzL!RPPPetGl{w9(W5j17U9us@DB$ zf{Viw!{Z@_qb`SM3AX3URYYq}!LUBRvk-4{CpjdyAN~W}Sa)Oh^1b5m%`?yT4)4Mj zdvoJ!pRA!_WBK1KBc$;1%d!}c(qvb;O|166@`@E*ZCBaz5hNs{lJJHCRbK8uO)yoPbO#RvqBF5mG*_%DDxRV&PX^0$SG_#p!mXZbo}DO2gr^pZ@=T277Dj+HrNmAqIts+T2Z9N!x@KJ^WzaA& z(Z!6cb}7I-OIxC$++tawxbv!te`chkVG*mDGVvBsf9vi;;#!mfmc$>-%o8jY>VK#U ziC4D_H2}m$Vg)Gq|2B*bbS)X_*s>a+VN->fIsPM#GX;M7j99M9EBq4ay8^neKk6Sj za&rqxst2LB1iutZCOPdjF)BAnRGqo<+*r?An^eJcN7)HkB&Nt{)jh5Z%?#D5x1oaTDE1LE7 zO056-`FmmZ8?xvTvL%R2vy=ZNO>V7wYvbprt5goRgEB*p!fI-Y4itMp5hgaW@8d(4 z?O1F~=5m)p1z-Qb!e*N9JFtXL%!t<$Do;d&ukz9l7M3ydu7)i}N{tf*?oQsxvbteT zwOuM!yY0ajz5#uJIpW&Nk1dF#y#>oZT{W>a98h(>gO{-4XN`xNwWjk+ffoIvT;3aV z-SFnSUdlYen#p^N{jp}%xJNp@ia_k*@{Ippe3O76m)kX=j<1 zL8)P#dZRvnGuJ_NLPE?qskY&MWKHY@3fV-`+F97%U9vR&a)pr`zywC!C^SAM5v=u3B%Q)nP& zm|`+tRJ?44pe#R+LmvN|(tAeTtd80Grk2KfcKh{~&7fn(;oFD%<4^Z%MOq@%(K2u@ zraI~)Ndq!)J6_7{!XH&1qxNjyhT9D8R;}f#b2`??K_(-1K*Xgdh=7*&I>fle!yD=b zkGhSM4y)l2*bd^g4v+=^{J~A;ZhhoK``kQ*cQ}CJzns(WvDV|TTE7D=u-bFEQkmhc z661OELh$?Y$Lc$O*SlF$sA*){)D*OEq(>43vn3dv&S~2fF9yvfT+r6puK81_mkdSE z?+a|*t!)&F8_m@8c#roZ*k2G7ufHZ?i%5zLb347e+g$H?m{9F<{YiFs1EHuV1XMb8 z{D5M?;!`wBxI{?ipfv}zyTuqJMN+I}YI3nX*eOj+u(Oq!T{QF58dIZ32-pGMZR?w( z>?l8p9<{K&X(gH(yKpS%=Nn$CZDCIzlMxYl4X!u7*vQc?E>Aq z+|t=o-@p{F#pUF*C+z;i)mn}uA%>sHGC7)XVE+)~*??(U(NT0)8o|bXiyhZM< z;4wTwuGtGnmL=bE(p9opf-beuSRXxZ>hFWqxSlV|ev(NMMe*DgU0s@Mn z;e)_F;%d!I;nopp(ht~hNIbSuoPriIu?J^~(JRbNvZCFNeZdCAzWqV#1SQW$?Oc^q zK_3B)Cj+%N*9$hGjn&%5ueAieTjKZxC<* zvqz$8UuGqfDDE^T^FGu@650veaes!j-zwnicsuN%Q=X&TszR2%ju$X_Grh_gm_dF|Fd+ZzoN z6Hy;!57*zLxil3ejAs#M_wdA>gtTA%!qBNQ^P>oE+*8+47n7 zHdmM{uy>Eq7mP*6h~5?2!oLGMPMm#LAHMgVmn0U}<#{!x8PE!I9qLkMRfoTOP;zig z4y_q&_4s<4HbIq4w*pX34I#fkr_)zi85z9$Jt*0ua0ApWIvkw9j4S^{`~qNYfnEeZ zhL;Y61wt1(m**O=kxK_PtJ2QW#KOO4titcnxQ`|hAo{-vs!0$pN-Yz8X};eh`7RtB zCbrgbg%?wlT-}1Ai3;o;QW7c&gPZpdyg+Zj-S`OBnC}x~R31!R=e~;lHr*D~(vD#3 zwma+FhCtF^m~2KU{9t(&4sVQcBg(&KWJ6mr_N5ZUTtcRe+|S95lZMN&3Tavcwy=E~ zHI*;kCDz<8*a^I-p?T^=Z@ylqLk)0-^R3aIl=WQ|I0fH;uR#@k-sCcUr-)jd35}jU z>kg@$DtDxgK}xY`Vd?sBEa3TYSiPob|8@fb6GP0j!MYp=F}u%wswcTh4^8L`T?9>Y zpSr{5LC(-=l_V&SIW(mYXoy(@%Km z41+r>9947%ZycD$9}wqnS&k%+dQz2f{h!4F^t${xCdv|H2;Rq!i_#Q!VZXC9u_zti z6?h1`bBVGsN^Ca-M53r8Z`2FjLK6jFI*MlY-zO>y)xI`^+!p|6GpBuOZk zsECZ`Bd45-31|nzN-+@`mici!E!jOkrAR>d56Wd!KSfNq{u^=F!o~gyMn+~TwW{Qc zI8*lB_ca3Mnu(#dRm~@Alx$Q!zU{9sSv0jI*3)Ps8O^7-5bF^|GNl);t(e2Dn z6`mtIv)iz*Pn=V~K_<%My496np;-BSsJ{njtbUAt*+%%onVZ`ON?9w?rlg?A<@dN2 zJQCELT{t{={A`YLX29!eFrTobkS&@kHjX)SrM%KHJJ<6GDRJ9g*>-ilpVHwBrrdmZn)Dt0 zmg0o?D#=l$wa#pN+)@Dtx#;hG**4IEXv4>t<$5-AY#$=Mf4b`M`P_D5dPH#L)eK&j z@+Pk1CK(;viObv=XB^o1rQTE8U`+_wYd;C#@VA78WlbH6=b1dOKbNxSeXWCTq zs+yk<4j@JjS9#p=AX?D1%>01$PN`7R09-IEd{&Q*x(=v2ZaByoBZOA5vSx6)&wC^0 zO;d&v2I(L;cc)>c7SocGNwh%e+0j3mOf+#3k9v)bOib2Y2M?r3-$`yD%4{b zLvG#a>NO*sGVu|gUCL4NH>(SO?rR<<$>CrXNAR z2wASz2sTCMaYv`kz~a9KWn*ZlPR3aX*JZN`1t**rSE zT+&FRK*_~?*dT_kya%H@avH7*9ZD{U{|0pM{j$C}x4uZD-7#>fK;s1@frC*FTe zd>+hpk-EOWG-g!dnd-hZcmK|XaEQlJeZ6UmsSbb*+{Xa2B6VkKWAtqq@iRkE=9bGU z*Sp6^@M%Hc=5JBrA72k?Lgdf7nw_5PZkTNUd?D7=FcX^fT*-8;q~;5Le%V~+GdEN* zxrrvW_9SoNa)`QfxV2oY=J1c?c!6AbqO%!ySZ{T_LzYHZ$$w}ty~c0^aQ?Mz?Zn?i zW+uDspO8n22O?56OI6Y81zKyk;0NYOp?f(PUdN09H=#!Mz;TuQqmvCX{%_|?X2<7jy}$(p@NGIAHGdD^%t=vw$fgc9T(x$1F)nb_ zd$hd(2diPm-yKaEM>-NN4oFdLnYGg*Nc(i=+8Xa+bG0tHOvy;dWYa$O+cL)yGl$*A z7ZlgG>lNI`WGQFs({!RfNw|`*L!g#(_1y}rUcSG}dzV|D@Po+qW6*uQ{QM_&oRr;E zKEZ5JRc>Uz1W^WV)wp%^$=u3q*}IcXJGgTcFS1z+rkG-PnlPMwrbFXR(csr?i3`q* zpZQF|1L>8?o*T>JQ~EjLj?ev|CAivtNvOxDo#Yf4U~w%dF#8kQiiUOMG^c0}be#X5D^o zA7zGD=P@q4G-ROjH|!7}kJ<7sTfcT0sBB+h)R3Smiwv&u^+-D9o$7chRX7$%SY3BJ zdIWOQ-E3@$Yo5*cZ7**+0XGKUF2$J>-u;(lmW#cV^N8aNou&#tBbmnK$p{A)TLtL} z0v0~gy4HPpRET0J12uOT^@u|nL?rb!(gXmVhX3+td!|T8(_p5=-x0HX>ux-k{-B=} zuYmX$+j{F8lWX($a)@msyB3#V&(uV6C1?Q~bV?~#`1Zd2gG_USW}6+DS9b|%r*q-8 zf})O>ZeUT2c#V6XmsgN;C!EP<+0E)7OeU>L6aHmtE2pSMFFohy zf{H1#2xTiL$x@|DR|IAHF?&6FDOyj&NT9^0V$@Y5XPvK7_q5CYQcfck!hbGl_`U0S zcSjC4*wE<`a1)GGU$>9y8#zMo$pGqwlzg9w9Q#bAfXy`5CaAcF4k3Hye?nQ)LZY7U zIphdEGKv)Nh}6IW&g@|%C+lKtOI6^9m@eSuvQ)5@fdY(BPbF2HG*RUw-*xR;f5?QC zU$@?3O)Hi6onX&eHIvn1KOau^;`ATxwN2HT1w;jV^JsVkuK#%3VWa3`dbs-eM6GE#h}}0%+`-2gOmOxUD-~BdZZGnqju(-7&t{EqsEHovy-HW z&?Ik%!w!d0lE#KIpH=V&Bso2Rmg`A$ME}4i;UMGkFgCQ;{wmD}K4__Vj+) z@Uu8h{ctg9^>B|otgIRb0%l;*`E>(^9oZ{o^>F$$4QVulH)vO7aW`rm!Ksw*hgipyITR8YCD@}5^C=R=EV>)kQ(ZVRikV9AtS~{r z%q1?`s;`t;(hM-k1ht?B$`0j~p&)SKq&3o5$ec1Vc$NBnrV#A2V7Y$|hk&hROtBz=aahPO|p zEC=k*p1QzEXcG2b5m6aill>4UK{XUgP5vemvyUHfz8~ty_sOF|3&-YE$>|ARQ|)@D zvr?Oo14-m><+kM0|3@xpk`yw4n1zvkYK5~}Y8PJ}!mrd`O8>zItd(AZ_ePU z7+aE>3w&}Jdt+t!I+p|2J2`FjT*4hWK= zoxy;JLM%=pk-2la+2eBMrm>fDoZRmGc-Yf1EO*k7Etu#y_f*h&DRcQLh>Wm^Risu6!QZBx{hP&F6SVSg{O|J-nZ$@aomh9OtF(2R&$VpGt1wTn0o) z=O=g_?ynm1!dU;sE+f2bP4jBM@sEQy7hLJy!_U}c(xy@5^eEsU?kQy4ijJ-w^|n*8X9$drj76HD7nmsA?z;BX$x z#4makzOhjXxD86$(&Fl2^I7TGI9b>%A!t0#oUchO@iVzi<{S)sWC@+J1D@VGa_Vwx z!|X66Sj^&yr{b1=xFsWQ$!1hac$G$T_$3)RXsoBd-1-~1g-qT7DZo`ER6Ox4z>3BJ zTw}+4wid6u;EwCa8MBkOdV4KEN6cF)B8zD8c#1oGIrzoB>M(%`Y@%V{U3x5z&qdm` zo9D9@Di}e-j-DOQMPZaJ>ujeg;P1bKD%uh*Yd@u0A4_zD+2YgZQdO7?f*tP@ay4H| zb(6?dxBu~d?@ysjT>J-*+ChjE%)%1l6oq-rc)42B{dJclicoHHZ)8yn1d6A9qF$s^ z4TeT`1(6+qm73MO#D++54QTast@cUoqFw>F!U4*8*PW~D9LoPUf2n=j(N|AgclGle zT6q>rhPgck_GuJ%%fT0p7tblD5jULXio*1QgE8L6eREo~RmIFjNy}1vZiDRyPsp{N zC$RgMr|K#j4F@E{v?TAEoOp^qFgLKdjo$@}rS3e>rS4UW9Jv8)!9x)=;ks84c$gX#hmC9%`W$7hH?_T&}Wzs<2}e(2l8rnAXk6-5>;GhUYosM{*E`@|G- zrQU-Y?jM1)5cymw&H&=jb6;Wm5xp~A-|oki?_`rqQy)|MyMFBo^&^w#ltdyC7s_R- z)C&g$4mulBba~!Es;hwFRMC|Vxb~7w_GxVfTb-e5pY z)X|W0qUXc+>WTAAHd%+`y-D`(YcEb8re}~Vlxjvu<=ZUm4$w;$)>*mELS*>G7vi)b zFjYL|I;qUmL9<@>HBC$EdYOu1SuwMKN>jzuO=-L_$tIH7Pp9pQySM1)GG7Rp(dA*a zcK!2b7zEVs(mK~AwCI6)MV!OgUqfs+hx<;RHusG4is}?1HUaDlgx%-D()5rqFhFA3 zw@ro;(Ho!8%HOj{dI1@*@7Viy|7Qp3z75@Eg_5L_DaZr+LbBOX!m>gQZ7z?cPi;w5b6h4-irlZo;%-`#OI5F#{&D+FI$ zVXqBJBl0N1$v60Yq<6h;f3Qscu4|02h@mhJ{clLgwTf_`5S(q!+gZz3x?emhMngQ- zygb%97U|GX$qP^gBu;QR=*~VtgCW>3D_`atbQwXS76x%lD>7@qg`gC?0UYwk-Z!N# z%w5S6jYQ2#XyiodysnsA#szW7;=WCT!s7!=&344yHSiqUOefOu{w8hNm ztLjp{i_o>YSN->()aKHVriu$4PLit2urhCu=ZXQzr8ueE!E$^Ax~k2%9z+i7PK0~6Q(xF0pw+Zd<-)_c5mC-YW+ zu2Au@In7rlVWMAsr!IxTWpD8=Q1X0Y%N)i1&MR>HtZpAIej03a)uAkryq7%e*Wcq? zeLB9qjk4DB!ee}~6dVkp`ib31?q25+zl}!H=?D9N)nKJZ`Z$A0&9rZdK6*fL?YqzZ znYUDTG;!OvNlLvP@GvSgw%7M*H@g#PODb&)(4nNBQY~xb%wFcs3gzBwl$DU^bbI

H{aVEsYtsR(4Rf9K_c-K{KvjR?wHzM6t+isOUoVulrSQ#njkto$ zUG?uV*}5Zo{|$6LBPFhCnG`aKkiDQ{0~jFaO6z-r<_gy{6FtlzL^6d`kQ?0shmyX& z`))LUShEh54$ai8DtHnX)hup?#7XU)FYcVB;^pYb^H|v#Xl^>Q<&luW_pZpOn|qO& zO7=JuRW;wE#=49UKxAZDa;r%%BJHL<|Dl5zmxC&y>T~MQ_A8bD;NJWa2%DHpq2yo` z(CISN6f-ddBn^NzXGZ;r$x{w^xHwJKpIgoVe91n~HzGQGuOT}~`!d~5`b^L7?!5T4 zbn8q5hihFnK^G&jbx$+cgIbOQ!yNb;o?4 ztLya(Y6-n3C11h98GBjX`W1Vmkv6b&f<-N{rV?S6fs5HXM^z~l{-_f_16AD(U=d`8 zPZ{DN#a8J*g&cvV{@`@e-|4;ykx`d(To5`Y)Xu31Gw``9BA1tSGD#4+SPgjA7 zC_r@zzs_<}1mMki3%>Ab1Za84npl^6j@vkF&aVm-lF60o;AijjGUJ-JEHs%E1i&eX@jMw5iWJ8#B0^ zI!Se0iCk0&i1(jGz<}*+`)wxP_Wa8M#WE;sm-N}mFip|(TJr#I%AhAFbXIv8Lv8ec|X z5>WxlvD}`WpduP%T=`qTe9Vr8|2&sxdYG&rV_DcZb-pr@PY*|?dN{Gwu<65SB(k|lI1pAx9Ee&3(`TNmh$JFAyBgV{78Kj zfT*Rv*YWv=^e|`(SYD-H9QXe+qn`=c+P2?#rIEaqGVSFSL{+soH320E5k-O z*6%sk20+P?T?s|U-gcCH2eph8YX#`x>g+zST5S{~ME~j!XN%L`^&is6Y*UJowaj%B~yl2}p?Oqlt zR6b307TNx4tsS}KnV1b$L;ijte$gey`Y)-&_VjOmU*2Lqb$mRlk}lb^79)UY@i|4Y z#xJ2kmys!!S=3A(Ph*4G3(YBVU8k6#vmGaL5Jsrgo!{H8AHGTjgb<(;12AfN)YQ9R zBbl#-Z0Rb{g)pb8_{n&QE9Q%IzFlA@-pVQVu|>dD;9(&KUe@1#o8^#Dt>G!@Dqx|Y z!H66RAD35?$t)iIC8ZUo1o{$_D)}qbh(jFd%DY^G2xcrn(w6P(VZe5hXzIj4dHMmG z$-NqTZZfAr6KRRD@{)Fa2T?s(hJ51PcisVCD(<-{ULsL9R{TnYNTPZi;P-2MkKY^L z_8uweW(tq;fwUzdL`vfS_cP$aZ|0XN%*1ZBR1>Q&U-rDukDTxHSo6~6G{&Rf757DoVO180>=%_vv?Nw^^!Zmg6Q4(YLD;LOD*{bb*+fP zH>~$7XMnE`6@y|8t4XPv%9s+`9C3t5XnPz;Om+bkNBE}t`@F`Odg5iZU zTg@c^D&qZLIkM{V!=NFXwO=tvEQ31yYR!8+zT*1KF& z<#@V4p~^G--H!$rp+iq=1aHTCXZusVHOuvhWBC*Zg8%fbk#a^$Q*lNtRI;)YfL;mE z0O>0$lX4N+td+-bDN6OIiM_anb6TR5tCWep&ZRsG=6)RcIgXSB8u;Tqc(Z!0*Ge<- zhtG?zbCm|cAGRu$rJ)O0Yg>hr~K`&PJJkoMSFK&w%fAaMznufPA#$GViF`C zoRn^syI{{Yx;1?Mud-Qvz^&KR*yQ5k`k?2a0LXJY4e|z{=E;Uou?hZ|IclxAOD5$H&B4+8I4}@LGp|yI8qr)FF1GQnA*6>d+9B zPlP_WJe~KhVGI`5>cH9kcCGD-EQ!Y* z!0L?v1=ovE=DUbQZL!OI-dZdEf{UJ0&1c>}7G#p8YCS1r=QF_qWBKm)wcWjkgByme zCEJh4i9!XPhHrfU$7aY_ijg>st^F^Rt>-S=|DA;p{)FRx|F|1Q*kPyX1<&JqlLF9oC`mjFmwSpHntkS99dD%N|}Pr1Ur+@eX{*XkvT z7~@9UrExtH)w`u|NCfs?lRsa3f}&&QMwx_Io)P;si}KSGl-6^n@=_~MFb>5F}y0n zB{hACTI0j6)|R%BzhZShNKi`+XS;Zjs~VKo1#QS|77IaML@H;VbSruLp(P0sdo*4j z`DC{Yx2*NTN5`d^tf;(bVPA5RfQlvgf@h6Ir3;`kS<3&|NY)VC&BQ6BpjpfxDKnkV z=VcESV_s)2J}Y3&J0AkY0CJ8Y$OC?BnCg4_4_u>JR}0pc>qq1daTLs#EuuJ-Zu(Wz zt$1D{8D$26-hmT8R#+V^dmxv^t^)eXz8C_aX_R}+P$l+uTd0_wNn&*EGxDG~99GA- z?ND^uv&eo|VI)j-3L510y-(!cE-Q#z;w~=FB_t)+28IaINlwxqBillfV;}DZ%_WP~ zje01BP*5-oU(bH;!P0m9q1G?LY8H0!0h;bZZ@*-UprxKon;%Y(ds5r$T!OU45h=-j z)j!w8_oOq)!YXz6HQ*v6qZ43N`f~e0iP>m{O7+6EJp7?#Q?`YoGP_5czF!7+NE8la z#pQ8PsI?ktR;5>fbC`hc5LJ4DYN?K`}#nW9cC+=A7 zunf?{0LjCdWQ<=UHC;WFo(13&EjE(pbN62)FjVOQBwG23jXm~X9XPdrVO46X85EhG z^-2McXuK&D$hZ7`@CWVdoK3x^1^|Fnh`afHMjiPFNPmpnG0`Ld2+N>|pLytu1@;5G zGj1i{rOj;34Qa1!7T*JbuDxz{d;4&`=?>y^Ep|0!Ii$37sFVJEhyDbOFzw=Cu4-_*rNC(?`wZ9{5v)1YE%(?d zWHVXJXPAbwn_*xg=H=eU#RDDB+IjpBcX9x2i+T!YweC68M8_=4zwqnJy9-th)~B)o zA48@Cx3RVii-_&d|8irMZaqB5T59*mn!;KB0IHper^O(jo2SaUc zm;T#Nq5M!1I+8sBC%tVoa3Y-R`#PE|e_fCwr^QIN&S&FX{Jwdd zFYs_?E^R7jS;!giGUx=KzCeIU9}HCsR2SPxdKfF+G7~XCiR8JxQWV)F<$^nxEs0u# zoq@%Ko-zO72KpB82K3rgt<`-$5js4SPDG%Z$Wm+8N3U*%70G2_Z?%}cm7xC3m`Ns(4;qq*%Bk^@~XLnL~CYIg7 zQ%B%Z8;Y`IaSlr6oYovIJVHyW(bf6A1sL2F53LPq%Z<-K|2Rw5*efq$$7^`L-s+hnolzwFmp_TY`5RWE&~UVa`({%+V>+ z3}HO?lU@&hcCFD?e{8ja zeBA0Z(ZXnmvi@~HOEOkXcu!bbD=PV15)v0;2%oOQ%QG+x!Rgu?hK2iFIkzQ(wR1A>Q|kQS{tCpool0 zn~Iz1_TTnQHT}DA?WV_*89e$D`tT7ss~%cC3WTJblBi{GD87xvL@7v+ghJiPaX9h+ z6dg1gx?rhk0XVf^>14(aMSC}Ixb+h%yA(6=QgM~Q z6477l$kM`cugI9Cq3efdQuTnK$trTSkl>O=@Dth_Kkju-?L#!8-X42CZ^}~Jm|C0X z{5_U3#mvXXGIBQ(r=M^gX5Rs411glJPcK)Of8T5J^t)Efw5?u$aBB@Uhu8ijVsKWv ziNI~ENu!uK#SpUWB{fxMgd=d1;bPWea{W7?mXIti{(RXZQ)lht*Y587Z!2GhJp~{Q zsX2D}p)JZa+|fa9o7vl93-#9ct$q*P8fwDDo-0VZgH6l;uCp@qFI=ZDzz}{}HO01w zhEvl;#U%mc=@_P%av=L*5>i0;AwCMz%X+aoRtI++1tQd;$nH;9tntg&`y}AohXDTQp*mMu{C7bgpKSKfdAF#I`&}=r@;=R z@*8_pB77`^{pi{lY^_!y7cqO+i@aB6L*8Fy>CiCbSi3O2nY zU!1n6$LypkW#X@GwKhFT9o%|D1T0?Y(te$^3eV7Tx7vj2x=6(yRa0Wl#Ws-F&)?Q{%gRc|0flHsPx4Wmgp=lFZ-{@erxM9?E-9 z5!n#pGHMw@6$kVqC5?$!(E3kwpZ8K{nE;rsR6}}1SUnAMz=D~>>4lmkR*Pf<2r{ey zQ6r$pNaVR&7Z1;bu*4>K8WSf(UeWCK7Y;CL3-)oV7fBHmJb5Q2oOiagaDed1K>tM9 z&%OIbp@wC9LJw4;p#x!Q!?dQnJDvwp>I~7b*J%cundTmb9Us!hTlDeSj55SwhPhWm|0B9tkZ>ED;R> zTMcW`;I}>pgk?YU8g5@s;%Zkt8hI^~V+qXyMMF?g(3hp7VNrtwVpQH9G?R3U9gp42nOHe>sD$dmHq^syd*<% zASbP{rn8BLJY%cf2mkWj3%qK5g*Onh<6%XmjcCnwcqE=&4KK_@W`a!W_(crIGS($&c>aqWZ&;OlDf2+O%=JO&u zE=yeq5TfSTo6(JchMYof~78Mr*QvR*1tV$I>0|9My zajgV{gM+}ct7n3_gi#=e{yUkakW)r?R^L(N1^P|P;fn!ZNDMGW0IHK1Ivz3{Tp9DW znhf`owgvH{H84g%f(4zN<-1FWxkIydInkZerA;8w&NsR*c(WYIKf54*HY*ADT(xG9vucMLJrKnq@i%jxI2Hk6 ze=2u(*9#u^4VdV@C|jvk0m}D#1yY_pVKJCoM>1H=ADwm;>VRh@E<267Oo!jJau+BzB1z&M} zFdP3^XqHHiGn(#pezjlIA2pW7yMJ^PK6tEI&u+G;#H{jZMEv&jx!IY?a*=AC=m@@T zqjo6q-0`kbpDHya@7 z(|K~>%tx1g52YsFs%MKJEO?+0@H%f_Y_}j=oj{UVsMhsl33&on$0=P2`E1GF2VW8A zkPm==lM1n1mYcr^oJEs$31wW1qTaFeb*>VsCf3!lYY_6;|5{$=1qNk5J^<@C;7~R- zH8Yd=>U!fE8)Uc-`HA#L5z@)GG-PBDLQtWg{7jWg%5@r!vVS)Hyri@N{r8%cG3W7=_7WpIv1K(JCK9tAAsvyt@=Ha910 z#iI^6EZ6DE3$e>IPzd;WL!N9pKPq;0cLR4arLwP|(9qD75=fN^G)8nMT>baYqZG`tBg;Y9@HCnDQ^NCt;(&x!!RJ!^#ODGS9xw6-(y!MFpSV-$If3< zG8aX6R!i4i7Au!rykhr9BZpTXNnwL}1?3_DcXQGT3=4md2;VVP>$a6yPfI1U8Vzz4 z6(sj0b$4~k2SScltF{Jf%|bJOd5X5WJi%dD_g2tX>V^f#4AKPERMe8k*~;4AE@5uF!ppppO%bfn6-; ze0g(RrdfZM(9AOMibj&k&CP8$;hv2JJVk7Qu&@|0F%@eqowY&ZA!kGR%abqMt8?xz zhK7CMdOjh)WjNE!y0<{mTh6>E6o)eHDV8{TI|Za?vNxW-@`v0oqlU=9)4)^bq;1p z@(@)ecmabIbej^J$vYg%5P9up&vY+C%ddf`3|cK}^^O)IrRL`5us5geMpG32d2ZMH zigiLT5`=ML-`_-O95XSf|Afb|?}^fLpRpMCu6G)Y>Asv}=yEo6{n+jaDa-c3efPj} zEexVF&O^6F!(GNZe9jt3gsnT|zZvF!6+`rmCf_P0D^>1n`=}4{6F{oUdOW;)$AmYB ze;DL0VvCi|AmCBF{_kgF_?Ti{yE3TLGqPe)=LmCdbCmvKx(->i*d6ZXQ>AJ;yI0`nV|P z_##|xbi?6q{c8Z{TcR2(OG5He(8PcB4;p6`GyI=*{VgOMdMZBC>%O%2;*nhei24j? z=zmmSMB?*Nn=dsg7JMe)q1ZS8X&6*G_ufvwu-(TpTHP+0bQ_&9gwhmEgW5bEz+Ia% zz)6E3#?P=$NUwBJOF3TScB^i;lh$tiGD~+Jrh(VmBa%R1bz}r3lXUU%W`)O60T&l< z^9>P#po%}EGcL;KOfEZFYB;sbKJu%BYcqY_=odQC*AsVcH$2vFK==zjI(i4rk-T33 zBhLO^)wtu?I0<2yfB52gBvAyb$nNEe5$iyPTWxL?1`CcbOf`8C4gT@ z*mVqSOZz0pXJ)otuRw&zOFuXkUkMhx9rgs;>)#(zo`X{19<01GU)ez=1Z;|{CBQ4_)5bh5+&CBeDS{I;}ay4-)pB`HJTjwa$2snFBuQ@J#)g+=vH3D626IZ z)mNkK&&u*y77sq(x_`dEF4PR$M9)gH9 zo`l!CPv{~|AET^+(Y(n2ca_cm3T%Xr{U6a#{~f63LIogV)2jXOo{R#%4?~GG#%5+i z@T4#%ESpYE4#(V%S9@n?XNd7MNbzQ>73C_m2SchA+>H&D;n`tfL*T657Mm=$So)@z zFCr=$UnaM4H4w*@o`%H%-2C@u>QC!NQsW)nK%~qcB<$s8JMltE85xjb#A|EXZ*KoMaJd%JpVIp8^={pFlIkzl8cuyc2!NKXN*Y7>~7C!egVzKS} zaEtk=mMk9LI#zedsjt@ zm%j)6JUs3pF5nvheu|=xSx|7c+ry2g9X?+_rKo9WfGz5NGf$d!gjS~-$hf>MH0nWp za5&l8d{!jqd4Bc5-~6d7K#SA6Dh7iAnSdW3(YI@Gd&q32RJ~n?FE93|=dlLxt2EcC zlfkt_w+TeX^PhXiVTDS_jTOLFqM{7Ib}_VMbxn=5j6{d(_)izR)w`YRL%BkYTGJRZ z49RGl`bV%AmfV|+EY?aLQbrQ3wQ2JVZ#6V<($JLr_3*Wqi%R994+r(d?}7ApIH@4W zvl|v=eJd#?MJNjB8Pe0zP^Af=fk(13jf$RTgMhU$J^?=J(NaGOigG%obd=?a>+L~6 z2{#p|nz(p@NC+m#?fJ;3WVMt)2ZM<9@fqL;_==;Y)>K_cr6A+_iFWfBaYiO|9evU* zV7TiH@*U9gpv8__8=~r*vLvHAeFqLi+mktMm2EO}S2qieF#EAMrPX zi5!Wu;M7UR@Hb_ie(l5dy-SJ$CCu?;8X=%)svwbC6I&miB0>uu#oD4`tuo6r0xyn2 zmR`B|dsNhzk8qGw!iTBiPwyz$pnr&4v842ra-%PT_`VJYSing)}?&ZUW+RdDi4Ilu&tQz2Lh1;ztXWJLE2A&iWFr9@@ab zAZwv$tDos;OmLZ$hii!rd1g6A+WuwEaf(<#nj?T2`=3>obdKy%qokN4-y`8>1) z6fhcA|BdkAKs%~dEjkv)@JL7ON2_x+W z?ApR@B!$l2RkUPw1t858DI-xMZ($XjgYA*ifKwX)Ss)~jT}Ok^OEP{}YBa}h5vkxY$*RBWsTx`z4uZ;sIZ?}Hhr=79IX?t=gXh_x$~|5xD&|4R)6Kz zj}L0o!s~tvBpXw9yQ54+alyS$crzseF8AMcznVZXz`_NTolO9`1w(m5XZZ2qRy`kt zXXa0zwl6u~?_nqvsb=zP89(E4T^toDqHn@EoigwH5-6GX{EDH{ZF0w@r#zx%z1!F} zGWs^)#aEf>Ni9h>kom_C6O0<9N~DcyH@A5`6SBi+vm~92r=Re-F&8q|@vL?MbK)KfcekMnMy6~|k4x!Rimp3*U6ivW*(mo7jo>2ZI<@Afo&9@h_|pZ*fwxKG|>Y?hOE zLx~li-f`GH?DPTR((n#yY;|^G!sYhH;-8eye_sr2FKlei!$AgzPk2Huvyl`CHW2tk zAB8T6t{xX2M+PVtbHpPAvpoG^|9#&`@?J@hd8iL9h>i&HdBY*0kipxC`!`F(YrP__nr2=KT&ivh6^5Y)e{ zGd#w>sTlwB&|$I_=bMEPFoWTTpowL`PGgNZzEcjS(W(;pp^vI z5wX#B`-|yICT?r%XRr!vdJT}vnVS%{XzwD_`@c1jbRl z$N*+tT^-eQnQBmx=t`4=%!mve8a`y~3< z(s^|CgGKWv!g=$i)_ozgM78|lKBqrQtI<7AY$TG=5gH6|t@pDU}!K{$v(_=(S0>D73#?e5{OkG*l+1rvt3smyx&nQApDDK zA0JTdkLLA%7h?F5?H>YqZt`wn${0OAHc#q8N*Za%{m(^Xqla#-t;0mNC@UMA@o*Zd zxOx9gI=FzP@-<>Xkpwr#D?tf>*^G>g%+JrilTcNKbGD!AMo^>ThD0cmmp%}ytX z1~t{yBBhIylcWnd;}a7_a&5c<=)S}Xz7pgJQvP04EgqNH&(3*a(#9=q&ga!1eIQnA zZ6k3Uvb6^@ma7c|0*^cQ7F~BCR9Y?0l6#c&^yRvlo>Xc44tNy+>oa7u&o>)03~tkW zuTU?6O(YwgXWDA>{6pQMeSgZ__-gkek4Df((A`;*(GoJBQft~}mdftH4XQvRLyG

_{94YjpgQoDRV<$q%vt`IMtPITaQH??H5igEJJ;&HA z+?WeWWMb?o`UWZ)3^R*iW)~c^Cnjc2B?1E}PwNvbzR`oNO%Igjp^!sIFesG{kO9)$ zEK1B-4Vkrb1J<<`6&hOVLT#|ti&655RBK6QG}{Y0q(C^vPhCVuHBLcMg(pk#C;(oi zXM!0Z5gRgbvMDBssa`A-27hS%LM0=Gk)EAtO>rWna6F_UHpG31Hn3fm$Mi)}8bqgh zQn95V=azE?ac$71Voef-OScKO$C?9UqXV~ArBNFRrRJtG^h#6#ouH6mWMel)p9bb| z9#gUsK|2(AYNM~+l%^6bF0dIwu8@**ZBbF3D>a{9v?Nv(gUj=Qlo~m2ftHr7Ta=$p zQ7mCSQo%=1T6ps&w8r>en@FeF`A5)Ln=hb5+FB&hVkt%v=mhO_&H_@Zh&Ot9oZKQI zIx{+KD3>oa7C1IcSc{s5PE*oEB*r-pfaXSRW0BQTQR*g9WH`EwVCDf`Dh75$G3WzI z3dz8uua1+j_@5w}#X7{_00;0{_@C8#{LlCJOu_#=URqjNTD-^q{NX>}?$q1Q4d;J# zxxSjm|IF7{?(sk0<71%0KB`+Qnj`>oE%Gh0VJ_F^;X?YLHnv+5%&+Zdy$JO!w{~2k z%MNPs+?6QgUFTnsyz?4CU|p=PB_v2)T!h4{1sGW~;4~-_OsZo=ST7|J6ytYo{HPHp zQLQ7lgpLI***I9ol8Sadf+cf!VjpDzvJ`f8)XfFg@d<5k58=JBzPqGx7R$Uw0O0tN z5F<`;eC#rgsMsP4Vwfe<3R^Xa?3X<6Rt*@T>x;4Q?56L!5jeKiJPZRQnlqG%Conq)_QBp%6%ppNraOLBd3xlq<<>VVyZqL@pDV~P_ZF@`{0 zJY4IzwP6LYBB$JT^uZw|!gXsWJC+6OOUl{^t-!{dVFY#BQ|&KiI@fC<8|3w;&O zzR6Nbg-@JXr(6StLl;n0Aa&KLxPtrH?Mf9M3D~ykErE#EoN`rF4V@r%C_yCcuoGaTer+Kx6v5StC2hcv0Z^qA{mcnE6Pz$Jee5_q z(dOf_+d_*j`|(3s0_Hi}#~4R-LQ?X{+{r0z^@$pUgSLs`O+u<*K<){hVL?|au}mjB zi;}K$Lt_~JJ3WFt-6eP#5Lufm1`!se6wxq@Tx)}Bjv0ETNR6BInGD~v+!FfpQ%(yp z%JlIS<8jGwJ7C1ouq(#UgpFh$E_qH~<_Qxbh@P-B(ouySJ9$?m!cp$WHfGjgQqY2o z35*tA8lr7?mKdB6Q^^AF(yESHqRU9vF0tIk+Fpdl*g#FChG82qgWjxU(9?y58LgU# z(S;|g>BHSpC+#u3p>s94^`JC(gfhuckYhq6>S&etQo?h=IW6#A&dF8^5=xOlrLf5) zWoqQuj7egzvLXbGd+acEnl7((i4BL*(1nwDg$*#lKA%iMyTr*m;{(tHrij3zw8RmQ z1U1krCH7}2;39&GE-#@Ser|`xh*i=+s(wFTGlvrxnUd5LE~-*N5;DJ$;4SAJN5aa6t5v@ZF3T5-@0FCn* zvu<=A*uq70&yg@;f5tarc?)ou8U-E zlom&s>9IVuX3H7)NpsvRHzhYg4H89)GKi*ru9!vaRio3mg!nAWV5j3CafsejIf@9x zH{wi=i9_=KykzDPRjy!3oYUX z^)s?c^UpS=4Scn}`$C$~aA%u5#z_dn4VCOL5JE3^#USXT1a8`wu?U2+YO+9$G95H( z-Yp#sBLlCYp}@dRJ_goZSWH2&U043H$ujy~SKX+VNPFoxHG!;Rr7Rih9r@P?<@~IV zwf{PrJEkrDihbPO{=2$>_MdzE@3;RH+kYR|m*yYUm+tMqfB4V0JN5Q+)A?Uo%-etQ zk9+&?_xOA&DOE;@czI2&BI=|Zb>W}o`s%EBW_6*bGW|+0DturwG|92#L4E)=!VDj1 zWFQ50tQ*}R!=0>U{V*7gM<&(StkDulI7+!ic7bD)hfdZklRbqbBTSpseL_jCbUsr_ z5T(;3a*`_)R%_g>PR~TMU6~d8&@2l|Af-Jjm#+T!Y{}mLVhsESY~VBeze~#t_xJzz z_)NL~=a=Bm`}_}o{Li;L_4aea`JabVpZEVR-}`^R&xh`R1X|)Xcq2HOZ%#qw(Zz|y z)%ATEox>dt-)6};WMScQMD4Oklpm8Ci|{peO~MD<()bicxk{1v!CSuju?@Jl^{--@ zgkRNP|Ek(j%vU)j3+E7psFC|*L2{ZBeO|XFf4Wahmh1Jqo^^i74^r0@)^G68%=5GO zb2>RDaax!`Iml}Lj2F#X^dQB%dQY=^!#tahz9_?^SF{}_fj@{%c2A}f0`K{}>^VFc zygkS7{^L{V<2b?4z|!EJI#^h?2AFJe-GbW$YJRP8Uf5R2sD zE2p1gLFg935H(bCnk#!H`U+nDRInb>o*58U59*(XT~~}r!qX_tlFQm~1kzzGPEIFU zpPQxs%yM(J?DV5;l2Ij5hN4qBJqwoS7iKpPJ4c;I@1y8pXY~9$+r2nFeUYv2zj*u8 zKcD~l>X+`tqx5qB)p+4N`#65T^vj3Q+57iPJH3r``JdU+()P-r@hItS_TE0+dp`WI z)tTE0;d1%;=~H(H&mEe|Z+2sZj@Q`*mlme)xt(mm7MS3|y5&SLp7aD{uh5w!925#Qb!?Sijdbr!)efuzavG;0g z{pEV^AB($#jm9uIxZD{oy_i4$`1o+;*}Gu*AKBw}F!#K*zr6A`zFb+(Uah?QFt@d_ zwfyqeo%Kiak6*3MJv&O)pEcYaz57}11wfMBFdWSiu!qj=B9P~zdu-{UaT3X|b^lP~ zr8mn+tl2CH2$V!m&U=i+aCrJh{dKuNi8W~tqqiK@5w{^!T>&zFziE;P>8 z!@1{=Uv4~}zt|r9w7#)%G+xp|@o#p4Rc0NAtJZn9C z_@O`A+-RL{22u7htuHnX_a80&d<{|EuwG0i(-vy=^A-vk)hh)5q@`KCd1<=4=l^{9 z@oo2?-H)rIv+m>bmA4!1ix0{AFN?jOR)&xEJN1pMJ9x3w9uGdg7=F0CSbudk9-XcH z1J2j}{>9w8@xx@h9riDJFUG@n+4$qjm(Ne#rLh!xZ0OL^>UGq5J9@<#N4?9kdF`rt zeLr}?cCbob2jR=t_UAuJ{Z4i#|9V|S4C@D*vx~DEeZ+iTM-?dtb5Eg)1t9W;yHkZU zic}&0oTZj-riu^I`xig&FMVi)&kx7zkH^0Z9`?5OJFVT*pVnVQyX$)o!(XGz!_~Lx z>C27x^X+#pFHf_2J#HMt7wfCdZZ_I|9t3-*KV^^R7xo?p?T4G2KQ(T+SI>e}f(Q=C zFmuhl>oIN}hM#{vPCc3{cZ1}@^0e2tyE#!nTdCF6Z@;Pkn6KC5pMQTk&y4$K204ZE z7Yk9JbH^5S09#)4^(^&p^Y-t&cr>^7c)0lM+h5OG{~XTux6j^f1&xiv-J|`Ve|`JQ z*~_K%#@zmJ_x#a^^V9d)`%&Z9$F1F^!T!%54nEB9_v5AP{m1ZqyPod$lX0+nx!4__ zeipyHP8u#+L)UJ2`!$?ihi-yD>>s@!EDWNRw14(y_oxT6m7u8wE1!U=k-UwEI&MJJlbAZIDG!0x&1NR zdbsdQ=jh{kXZ!Tq%ki_Aq2_lL<|nw|bUo0yWaLJ{B`y1&gR)LYlk0JvyVpytM9gl{{-H& zm5jIkvA*;?noG_$U%dVG+56|=#pXX(9t~gp^X0{t(a$woZ^-6bDs#n(M6q~L{|xb> zpncfEf^TQ3{hK%O*Is@2OSrP1h99G?7vqPG(c^X$9kmCe{`-}K$8)2Hs~4-Ue%+h< z$NKZL#n1Y<2&q?YZ;j#cfo-8(iCOCne0MkBLU1ucs6h2EA53DHKII*&3F#r^w2FznLU)lCn&v zu4bN;;FVg??Q+i*cNjBIq*WW|D~-PhMiuzAB(Z+I@sLBzbnd|lK|-)JH{}MLAps-m zsmh<6km0i+)z8h$hzR2RoQ9cg1_y~yq^KXltp1XOy)|#eYJZ8k>Y$hQ`_)Ng~#^ioGbei!9r8ReZYEDH>jBu+|K-)+zXVlZbEBaTBa_v2R z`jnFH75Algl6I$p(N&PF}C@dpQj1@-bd@d#K*z^ z2vGlDL;hQwznA~M$7hQC_jtL!I)9)4>yQ8WcBkHcu0Q_^E6XcOdHHXpzH~4DeUFck z?KX8;buGz(=(3i+??+kaihv!gm>fP2(zB{cf?+ov938bb%}Z#RS?eU1qbzpbf*V=W z*@jb}UIa<_bz}F%i{}1D^G)+*bLa5Q%jW(;Yj+2Kac}!-={8cP8LB6**qqa5tToT% zF*(U52dr&VvS#NkoqU{M(qa-zpx3os@1A`JVOJZoCHNrJvL9F1n$jpW52lx`_yV|9~92iO*(|0 z)-Xt51$lxviCOmn9xLJg3!mkm$~+A2zlW)yl2L+1mY*t-k5QJj)LB8(<-+m`NR;Cd ziTnIits7w$sY>}Q{7^1Z52Ccmx#GJO%F|G_ON41TEoco>9AHZGZuPm3Mp17H<33@`liP5lQbVrPQ+%{ALVEM?#G($ z{4jnOQoet+CQoQ$r^#4-j3O(xco5uqRgcLkW$qCE1VfMq_?sC$P@`~^k9H1@_V#x7 z51X5B4i0zsn`L!{>J}4_N$&J?%Iu#=w+KwYdIkD*4ippBSoM;yKVQZ_k(KrOA_-3oo+HP)2(~kD|NpfR^ zzz@9M^ir8GuL{*WK07*Tdu0@4XGHL3GhnfVz41VKDZ6daxAg@gZ)z^;Xz>aju3`PY z$_dSLZ@=;EMMJ%f$C%Uxy(8GiFOBUd^fPdo#$i((HrBVBs876*|Ms+r+;s%`h6mKYDVc4B`N^Lf`8b{lQs!mPL+_*|kdKy?L zJzHmCZqdXz!{m8-mB~x_rl6&&NyIm~s+?Y?aHTQb^2RAHB1=eP6;(*Ci=_90A?x6Yo5#^xr- zRNF@{b`-a8&2osZ4evr_xj{M%Mwp1SlISbXG8*aIkw4&}nmtwCIpQDrD%HDAcjTIT z)!Jw1aeLT^1yyEdY?~xRdF)^R=EyR+M&toJru%qG*VK9(WAXv&*q&bLMp&!69`Ibc z6(3Y+ z%_KYr;e~&CZCOM|>n@i&a6nTl`eG?5K9SSaoZ4TyVK1#w>1X#>T$d3R=Lu7>T-qJh z6*>5V#Wj`%h=viC;&{m_jTWMFGfWGnX1-&odMD0|9Bv=Sg|V%^o+(&?h^EizNCnI6bGlTn>bNhA25|KtB~WLzzj5C@Q=s_4FAmqO>9rc z9`|^?W;K|202~Q3h-m(*@|(_d4I55$Z6S;bQ-Hd7RTtlC>0-_9D)|<$p{n;}etB+s zei&z1_)mGC^0u2UmBNELtu7Zh>t8;>I#84ZSF)lwc|l`S)yOSY!Br}19wyg;^S(C2 znsN5x>Pe2N0h=6$6|+Ia?W;PqaTirAPU1($q=}E^`5p-qPtEd%{LGqTjHsBQ*nZqE z46RPLI^f3{lx2Ka#|6Jy<7??wx6<%DO5!1IsnPOX6M(dg6iBMPwrRY{2RYq%-vTeD z`%GUmKY|dhjR)@cSD=x7y0U|Jc*dH4@w+WgZVYu$@U_?e72hbXV=b(d|2#+Ra893g zdbP}=;*7qhuwv5%u|9S=ff~&zi)kCna#xwlSBpfgorC87Axb>EMt;?Tt0$*QcM5bi z(AHGt$Ew2rpV1OgEg26h_()Bttm;#l`p3cUPK~ueP+==P_}u+v%G+w1ExIDsRE6a~ z=Q|#RUslW2&FztZXS%=_p@(aA=_m3MZiT$U{xhS<%C|)iYTa_iVQl%8$IpqZ{_ehN zJ=+1joA<#{*c?sGC}yrs#sYunYFw^@RdqEfZ|_*yfPehJMwlPyk9pkD6U(T0SDg_% z&EWU?mv869xIHs(Z4{j5`cu8SaWy zai$ZKz}u>L0ypS|xuKT5z7Y!I_lBD#3s%!*Dd3>rMV+4Un+o&Q-*Hbk=WhJ~Fp>6P&;%f3p2!+CUe>4&g+EU#8vy^)^Q=u>c1a0PuUX3sAK5H=PhMIcmC}FE&5I zfhaIrm%s?iDYP&Wb-sKu40YlOFQxC zvUdH1H{p1}gz0dJ$j3uREYcgvFHZ6qNC$tB;r=jlml+jU*(v0Jx2$U5NoA9+y?hOo zxiUAymx@I@EseVt9&doYf#-?;veOB?Z`u+FSb_CN{rIDO?703qcZpbP)h0aKCfhO# z+VrnQbqHMR517T#BtIWyUEf1wtl1r-^wD%5{<$R zJa#QsP6jgpnL|GZaTaKl{vfk0Fk=3B5N2mFvmV_$e`V~g_#e`Xa1`c_^T=3aGZ{?pBlYMV#P2XTBnl?MNA=FF1g}3dS`07 z`gR3dn3)hpa^pTCX>oVI_0OgmdVUmS;uildE}R*f({GJ`zp1;e-Tn2}CcLEky0Xiw zRj^~~8F%URwAFTnwY~k_t=4u^Hwb51%C@kpHn*&~;|mnvidX!e!?Jvm;FWmRJoF{w zAB!wgNNs6|Isf;9Bp9SK-YaV=xCo-mv`=76t6zYIiKWRt-LRT@adJXI@zr^|097Rd z-rXAJX5BRtiHfV=K2-%<=y+=Ni1_iGQtOYvd*sRV+3<5!8G%FXQ;ia)*t0GYV^^&Z zA**|^$X4oDiUsqfAa2vijhnW*ht2(+#`c@${{HU1ySTn{LFBl~CxzbyY9GA{lZpS0;#o><41wxoq#N~fS$l4d^J#w`}7ByT@*Y-jiWmQyuc6=S0By?g~n zzc4yMTZWyeA9>qq`H$T)&)Vnim$3}Zltr-Xdh?kWx@T7^+D+#;D0e;NVBmVtT00I! z#Pb+sjBi~*2+cTWKuuX)`zHO;6pxiAgxk;_y2BlFISFB?&zZmNSl3j2!Xz{~tRL+- zRDo~Th`f_>da+s}^Fvdevusb%@$W(=rt0-Ze&T)ztSChLzbTR)*l!|DTX;=rn z0BZ$&++8qX=~`uO9BAjci#mdDt@&7+yB+F>-wjkDcQ?4pX~#jR5(}?D0b!rN#s0we`cM2xBYd=iENCECQ{Ua+Z0@V|S9l_#?llv%f07gS zlVXLQIT}hWaIaTfyH=jpIUd0^cHWGFBn{bdQ=9M>BCSjyLW~`t+pe z^T+>uyHjsJH=O^4g~|AzrTTsT-|zCt2lfntjz&4GV>QQHMEP)BLMRWC4-jiBaY1pa ze~qwkE&`pK`lrONE!aq})dB z&m;EVcKdKbwLfVXw9t*fpq(TN`Uf}EnbwUk5jfmR*+&$?LPGP>$(HPd$0 z#8&8DHMY7AF^U z4x2p~!84-ey$G_iTCX1?FhWMhVD33J4_s^}FYlWvKu?aPok1*Xs=T**aOfED$v$uX z5{#0Y$yKRiIc_yGIu=J?ui5cdi=M~ROde$OJbq)Qk%pi-0zKJAIM}1GEpcR+mWo{i zF4W&dJ{f?9OFXnZvhnU&v{Ac5LC{%`JNyq?OPE=O65~SHN3)=MZW<_Aqe|FTJDc~A zWfMjl#&>^11TgXQm|)of7MKjJ@_&rEb~IF<2^)~v%&KYaXp3fa-cQYjqa zemDvV?@x=WU?}I%YN~6tn}Jk5gBF-Cn&>;bYuB$>-0uH z!;4vtm=j-S@e&X`ho|1!)MV1W9D&TCEqd3@8N2$-347ys>7)iSqd+i5Fw`t!WNzdl zGMRqAGiB5yT1vlc6UP^h=O7FEA&mezgFQV2Q?g?UI&?sbhxD0Z1drF+#wfBucfi?F zuOsOgPIjUPrbkYgd_8DAhA$a4XQgV#?edq7xaqB=ic;WWa!a=g z5>|f~Uh&Dm+9kZHkg<_4{M3q?I@Zm9%CJs@wUkaUOpn1-m$SrBX30%qWB3_+v}O=j zlkv!F-dOxY?cdrH*LD7)_O58})-2qjZRAS*s26rFJ8&u_Aes+Gf|mk@l?!npp=4M_ zVCt1-ZxzCG5bt4pJ^m{XRXGMy3VRVS=+_1O5}u9VRDUE1BF8n4a|3V$@EeerlBHv2 z>cu#%1-Vc^_jT7|KCO|-W#lJb7w+612EC_v>3r=P)HU!2v+PnmT@(t1F{oUj+Sk2!0)(o?WAA6XcEJ3lK;5 z1pf0kv2WD+;qWv&gRdSw)Y>19*J-(COdmn_94)J!&?N={VBUqVoJDw*!J=iA+4-3o zzjDnwxs4R9m;3wYteXh%JPt}!MnSh^oxx~{poU`EjI40n4{QDSv~u#7PeL#`+slls z;FTdZF~Oi*1N4l()Zg0%_j`V<|Hrk5ece7jC;#)pef{_E@|oiQS$;hKsJ?XX|M|mz zzTK&}pPT$Y3-$c@Us_(S-}`^Q$LBNiKNCz0_y$N{7~w_Eh#QhX-^sCJUi!van{B>B zG#*bg8c(MDov=dhC7_#pP!Cz|DgrHW=QX4f_7T5qfoP|;Q7CsCC@eC!yyYH1xydlaEctHPI2zHfYy$ zQ+6Ytm+JG@lScoG+A#Af+H(HM4G@<+fY{4n_#xX2vHVX`DUY+>>?3Nt2lUrB)K=@# z6BSw#;|*ea_tOcF-?dTK#WTYua+9j(CUwgscx(upxlN~H*PqfW$HY(HbI(w16n5`@GM=?NA92@=9dWrLh^I5I?) z{D`h3!6ckVOJN!$_$rU0$t3|TGRF%kNj~|fHg`PbfzyfO|AwLFg)ylTzJR;R0oOPv zCtTS|jB$^K=?e>-2I5BaPtlN#*rOBKP0qmw2brPN^sBDqN;HUSR5a94(UTCNY1h7u z5%C-_a=$pa2Fln2bUurb+vPPQz{}Ter0rc$KsOc zwOFqkUil;Xl?4iAb0V!dW5RS%df@P`!~5Y~ITU`HQfM*g&cd$1HD2cNO+Ad}MV$db zjw7Z&aF*}Ks$J?ItA>TxWEJkgE&BqqTv9ebp3@lcS$hbp@doWk57dHs@IaZzKs(0J zGnY<{h(O$uy*-)`Y$OrbA$h9d9}d*v$}Zi z|M?!D&xrpiP7Y9YiZ9;e2^zfXqRfDJk*eTEs_G(%vT!Tvhw?StO8T$sf{n7ls2e5z z6S4Qi+c+9hBFDIY9{LZWWxBvcRh?2Ax8{)*3uBC5&%PouE##HaBOsZ|yIiB)kxJ@M?0MP72Iw z#c>tJ_~|8!Pz5109_-OKAgXD|%p^pFjqXGWG3>;=(K~`L0j*azmOs%6?Er!gNXS`F4 z^CbW4wP{N18$M&IxTVXa2MxotT#lye1}@T( zAj_ClD{O9isAyJn)z_VLxcSm=Zlc`Ds_rtRTa+I1OTSSljeOxe;)mKe0aWt-wN>Ex zgQXXyAMV1F>16jd>+QPOe$16P#Gyn8=+1u)+l-4n>|A0sqyx9ell}w)yoFyxog@Yd zfBg7y-CKQUu3|gDl)FyhNBg<*zqoS#%2kH)%ig(zzTJ{aj%4=>rhE4rrzEX}GW|#d z_fQj@roZ{zgq>2g@*+CTO+H*M3w2GcQ*SLyQf86RZw*0s;+<20T;!r__)-7K>qE_P z#`ysAX-*_{J-4%yy@R*uu2JWo;c?2vnospN`5ynt=ZjoU1uXH(Uq)SlAa~igH%rx7 z;c4Of+WTa_aD(NpW+wV%FoXs_x%z>9)(r+y>f|q<3{79HS?D6g29pjOoQGYfdf%~W zSKm#7b1=vU2QzgH_m+Q=I~mMGP}Q$}&!sY*?)z(IzQ5C=!8NAC)j&T(FR|B)OH~;h+^E3Ez@9d{Q-IG*e%y&pWD5 zfzM2Y31@tc6D&`E<{<}qGj(w%ka*9Dw`ph=ayt8n9{6*o_xxmX>vH8vd}twJfC>lt zkqt=W#mp9I_1BTpIAF?g?$d)>c`XX+V|JjY}}D$PNs|)-a^W%lrY=lCw zx17V$gkp@8+a_;|uwWOj#YJgxc9zM=seUD*k@xu0YY>k2ctcg7J0+vB!$N2-Tm~79 z-)>>}!iwU@j+j?={V$$yS@!J1)!aMQ9PIrv0=f=P`Ti*UWfs(scln=RGct`#1o^7w zWRh_Hwnlyv+Ta(U(vb_U{hsYU?ydvrh^b;G_qrG4;EZuH2dU>UaO!HXp+CQqPFpzv zmUpm9MZG}RMes%W-|hPNyw!<0mETXaaZcMn|ME#_!k)Y4J~>QC%*VyDr8 zs(yefGJ@~}FbrflXv2#-E=xJ_0-HljTi^vTTyOQ#cCR(9;DVBVUYlaG*9*etvHUW7 zFSd5pcYl4e*EoDmAs2?oed8IM+}G6d{G)}O(c+qA#szjIjH`bi+TeCta^8Y37~a*1 zcLO;_54tV-XxBI{AGDseb`Yh7|2k~$zbL=fw5)ptDURQ$>cmGmwCr_U)@>;K5M`CR z`N8tjFZKU9_>X>s>Qg(3x~E?^5#(p&f2I8I_xO)*|0%|Q%-2^|9<9vZ<3IlJpKo{S z?dOK`zqB$@|6zG)`M&IdO(GVu_@$TctA%MqD>{LX>ywo1p;eRJ=P-tGP+C)ygb}2HPoxbIO#Zk` zEDLY=(>OludlfIKF%e!T${SLIM9>XJm@qCKk8sSXYG7-mTRx-aoU&?I9D{WV>={j% zAY%9fWs@&St!0E;|H=DV!c(V=N3V{}rW&QXHo5H|YP(0U(bxydzbD4f!8IqQfM92yH^0nNI7Uros>1m_G>|Z|7>sPaS zDkm<|UT{8t1I1*HX=3#!N(Y}LSZ*m5wJ^aTzIIVHrq)+kKfP- zzn1UmITlC1Lsw_~{GIwT%V%>ex`QWDwrfys_k-cP;%9|5Om?o^28Qu)mM@3vdYouv zeqnKPCqO_4efncjg2)>iEPp8163XscnO|9av^?W2jNxy>2Z&Rr5<_~!RbFLoUUVw< zLylSe%O@h}D@*L3mraa%IN9LyOgSurgbh1ByDv7`sNfV6$7Z>sX(S`HCDoRDQP}VD z-A|_DgUz3~C1flG=3}x-eC2#)R{wYN=YP!}J}>^GejoqwT|QIv|D~nH#ie`w|BwIq zcBkHcu0Q_^%Zp136Y(EQEBE^U_xOBc{olN`vESTm?i{un+XvM<)O`_X!}PETt&y=n zD@9=#&dQPo!93R}k2gGqVmsZ-dYmHJw8v2&QAX$!Rtem{A%;V<=Y0SNI*MzpS}YGVv5G zV}0@-a*A_M(WZ`hQUfxNe9g~oQA_WZ<&oIb5JP^@VS3z)zO|qUB1>)qR zbG||WvfEZm``lV-xiBKJ>U~)p5j9d^Y_Z>86(vhF8R$JjHtgsrE}%{}FInyB2|BX$ z``@4XS?^8uOg~4xYw*@2VK>eEGDgd}pe_oRJQszM129wJfoY}bln?U^Q#r>$rJ7m_E*dyDw2fdC zw4;8M;oUM$wKUf5Mg5SF=K9l&$}PCD1|4go}aQJFjMQIGxcqHjIL3ct5G&u!-=SAUIJw3Wv9^IELQHY+48s?v^ zI%M12Z*8?U8i%djoi|&J)^^i|#$9(t7p9+4zjzu(h5&`bZuo`NR4#<@HcRRk1IsPw zt;(5w-NoD5-Cu8Qf;^jFvdKlk_7Z%k03kngr9iXE+_-=j1Ev>V57tEc5;kk)bR4tnuLKA z_v_4~Fz7!&mqNz1=w!YqE~dv~SR+#p)uWX+OLdBoeNvh-iF|22DXu3m*0XHZb5=p> z>P>uqePz9yLmiPuiYpIVA*_&M3OeA}tqsQ_Db_+V3~FgcM?FfpGm1J^UQ&-qk=$vK zjFBo~)1*r#PODyUv57{$>q+yvbqLt4M_RPE?h!Y%>VD~vEy%lBm`tHuwqF!SN_!2u zk!SdszYRq%ux4Cb?Nu16%(ClAh)JP+Xilc zqfbFXvgh}luXW8U zhmTkbdpw}{%WiGjtx}NqeKH5|Wd3b8`)}P%0*}|jR8pPyF1R}p2dqFgi*c+r0DOWt zrcnBIv_75Mr_g&b#hbD+lLYCKkl8wPH^w$%Ilgeil_$>Dw5sSzE!>7}FW)GL zh>&@25|{MVm5KvYWUVTO#c|KW?{0=5&c{*`kHgKY;mJz5TEo+75Z^*px=~tl#xs>L zHceUvc1U@Pi2>AHXc)^u+$c&Ec6_58!wFA#GoM}~Ki_ycP13v$j&H}=nF;t#9j_zh zmARGl?wofT>Mb-(9cb=GwY#DF`CI1hNA9kSOim8ELC@m}gTTKqBLh9MkC_Y;9o?IR zfdmui)hbt~FCa*d*O@FR9A95FPBHW;Oyu)QpSu!pK6_Eo$tYx}E1z$WqJ)Zy>s(J^ zj)kS4CyYxI24#0`G^Jxa&LDJVCrJ3>OfAN|zX%U-Hus0e4`HQjM)h z>=ln%Y7Jv=GQyRz=`_?qd>$)Zd&_MmFe9ar}iMsE5z z@gJNY_#5EBKO_EQp}u?{|M5LOQ{q2XmLAV9EZoO`{NX>}?$q1Q4d;JlesMV;|FLji z|NZ-XifVFvdAW`2t86&g+;6HB!bnc7zT72p#7~@mi@F;=Xtb(hN$iVms8nGIc@%ZF zgLdVUsgyz4B|cq!QEGh2ck5@y7vaoEk{QW^c{eHxRXWAj4N3I*VJD&eqA|t=q`+Q!pLJQB-F-?|PnBJw4hNpLV3onshwP8eA zKr7KOax1_yUi^fDj$IJ&)f^%s=JY^LTsJca`Pho<(dEIfsq!Egjy-QLXC_-yjW$s0 z0sTRH9gnlha@{HL?d0Vs)a9{E3(MZ9jy<)-?gi{B=f*7a1Tfoq_FLC&5xDY~Rc{f) zdJ>&RXj3mLv0dh0t@qNY_|9Pj@;at<$?dTE?Ki8m%42{1tD63TR!b+UwD^Trwh`8* zM=LpJ{1PmSjtvP1>=uL(uJTKiomI-Fw#wZ3{G4lT)5zz%syV$NO+nEakH9H(V`{CO zsXgDK6wb7s+5SGQTZ|^Tu^bMm?XaYLi5QJ^%^ZfB(NS+TBvEZ|SPR#?1C5z8Ia5pz z2U$4Maf>-ZcwecCuf?ROE${|KBN#ceh>i zmd6)!OG7*U* zZHRQB1s?j#UUd$)ylXw7{Mo-jB$!%vXnLw(sb3ScbzV~|cCD$MF_oP!%>23CSbwv( zyMKt8zLw`7&CfXXdUDx6gu$sjofoRfg4i0T8L8#3<$oV;MzEzR;aWHlQ4thhzhKrD z9<^Dddu|{vWqTb3mt;e&x(<^nCIrdnfweijOm2|7XDhvBu2SA~oJVdu3saQhs@|L4 z{tJAp{f|NO|1$Q!#e4hT_xMb)|2KewL+m#Eb+_rIq^Op={~iJ z=JyMKclBQqyU`LBq2c!l{O50K1^)B!;fy0YPb$HaUDRqd?@{dy@AZT11p-CbBaYLd ze@Xoatxh}gKOZra|K+gNItVw(8@y}@oTpsSjGxwqOnKSXN;BV3m9rdpNmdY=l7~h~ zcpk;$^nhA3I`NNK$IA44Rpmb_g)iMSgsT(N?3$g8j~_WXu!Vl;RaDEQ5i}TFow(aC zKN#9^Z8RR;x;B>_Pz998R%7p{h!@y_F167FKiR$WqM3vHrLGm>^nSOUDlkY~d23{T zw>3?4!O&@IW^F{8(YOn6?2YfWI~(ymHX^*yI)Qkn zqPxDlHO4_5kU{qKMBUhabQ-lOp%6DkmOZHtj49HcZ(GA>Nze)R;QoobxL6&ET}+jbs{;yr#mQ#IXB7NygznXrKAEzP5!g_mm@;LT}p7@Le$4&6*P zZF4?w2j)>d=4&8oH>as7NK{i`5Sx~)CSN@6g(OOL(ZQVIt2a)a)DjgZFU#$*hS#JD zS*i=(u5ef$a+y*pX~^;rr8p!kAGZ9t4HNb1*&q=8WQz65VbRtKW-{^exO5KHOq;3jg1xQ>B*ZfxhLsp;NLg=RMu z!Ig2HP0KY)O~-+NkjZpPSXjhFdc~eHa)Xf z)!4ZUsDQ^|Z2Knf3&N-|F{u2W&u((;Pry&FqKbYbes6?=V_p~-z^{9){pO|y<9mxF zRh$bq)5JdN$j5``c5~y9-`U#VeW7C@w_7h-hicxq(8%Y_XUOf#tpn{8fOh*P7>iVc zwvZHW#FC@N?5F#B&dn>sVFw%CQFtF0xofULQB12-JFP5jLB>AXjXM>YzPZe_JByo3 zPG9AZjYp~FLtVO;GTzdh1mn*Um|?F+Md?>YqOlMnmryy$oL6-0<%x3 zdS|7u+Ib!c((9!mb}voTfX#&;c6$}Kp|W(Fe|cbTZPPLQ0KC0&Y&KK3n~vK-k_49( zkQ}*FXUE;nj_V(KJ-6oNL<=(JhicJ0^*T2)OqRSJ4<^Tz>nZG2RsBP|P5+C%>fZ7V zg06wHtdIiCcBin*I6$*@j+Ci9;_^@Um!ER{Ogrh+H=lMIs`o?TVaLy154`uzltZ6; z{JMidzpMMe!NzJbrePjE>c|c>Cr>>jAx^=#kkjG73$Jcc9TT zFF$?tvwD^BchBPYTxE@}9%4g@Aa!A4l`)QrW>>qlD4ZsQR(!H1k`CT-+>9f-?}G3V zb@u}BsZhzp8=^MaKu`^uG4lFU^jr(EoZC=F_{lMw76eQepTaH(0Ad2w(OP=g(Oagk z2rLxwv?zcXjF9gdRE<_shs6ho)$4oL8KA-%F*xF}EjS0M8UT7qg-6KPX3*}7hg$ZD za@%pdW&&KOIhAcf_w-Y8I8_abpyl9+Tov=RGEbD4fJ z-?f^Kv(nrnu)aJQ@)csf$vNvVnH1_-7!lyLVm-1VZ9^Mc z_=ywB>lek4Esl$tb0Do`Dk_v8fe28UI%y8(zfzMJCgU+^v5=k4&qfOEPO>p&buHB1 z`maFvL! znr=~hUnc0Aq;D-706SOKcjmhVa{$OEI9Yf0Hm8Q4?5tv{f#7UNN>s{!=B|KS%}mNM zX5tHjmVuilli@j~WjS|fT2*3}`LLCgP5%vSv0~`6VMdAM=h1e~E{NsjjD851B(`c_ zi9_YAN@C<%&G78i+m~VAz;VB`MjWPfTCKA&VUEBSmG4sFmUqfT?3Z-6Klkjt^gRFGle*_DS0O7ACIDC z^8>sTE`mLq9kJwO)vHLz6CQQ5;<+!sx=(K~<6($B-u!fuAOmQs+JGf=f(Evh0-CG^ zdL@q8bd(~8q3)^N;vD9Yx(cz6^yK;sq{l?vGzZDe{s-nE{SjV^m{J<~-{8py_9yPtw$ol5^CY-zZ7rX8!||G=GF9_3isrnKb(bkWfyOXyJM!3@i*ne>`$i zE^107UR|QQ_E`#I_;X%+kp>FNE|Z%bIvy~$E$dg~4BD0r*Z0Hn(t`aS<`b?XPJX1a zRvz$v4-;+qg(x?=3s;3sVonvV_ zmN6kAgz_Y<$59A4zxBTs) zPL(I%oFK@XQ-Z5F22yig58AE*>uMdUZas8v=x3jQZlvJ#{f0Kljh-B);s3yA$Bi8d z<;l)xrONNm$9__tw32B{J3U@Qy;9*uR6X|jW1(i|jb+Ymykab#TnZy=AtVhMq>~M{ z0OisT z*QMa*!!RkgkHaM*n&Iy?ZLj)1bpRPfSM$jh8X<~jpMDn2bAwB49!wdjR9E5#2a>Fn zzj1<;ICDd|Stm+Jy-8UMDE$C^u~2Nk3GtDwI$=Q92-kNqOiGsq92tat?L|G4%D{)vXk=y+XmJTVA5 zkHC$FB%VibR;%+9R6o=8cs4z1J&2=@dB+hRusT#* z_yeS&48kE=g_1@T39?NgtM$0@P>=razegqq`&8#8f7GGRsEJ~FuK$jrAB4xyLH?;# zWPi;@$KcF8QD$8g zt@DNAfLjHyF}4Lzm>*9-tJ{yh?J2bHE!l@^x)5;rZJHjfq^UnV;Fp}?eIl6lqu$bL zcl>FsH1cFN&F$TBG8iBPmR824xs%_N9zEu@Q}3GJ(>xy@Boop7AS=d7Chtc_!&G#A zoQ&NL6t_Ffjz_Ib!3Q#cqs7fW{EOO*5K7KC(~pXAqLAevot~xXC_GAMVRXSQR=2$x>M2p2wE=H>o*saM&P53o4ps*D4_4PgBkC>55&8Xg+r9MEKAxtZ zrY)4o!0odi&BkN3&61*oWi+x9h#lCj9IW2E*IV;fVWMyb?6J!ZG8(kIuNvqDpnlQ| zL;P^4Hhvv&sTnPQJX8NsfNac#ba(lloV4BtYL`ac=z#++CC;}_cmaFurP835!h?bx zU+$o*{?`jE^EkAk-GjlwQlO2}O7JEWZ5UWSfEiV6G1P9AXxmJoy(AwFAv#=550gWG zK^@Ykhu>RXQdG+$iHfS9C^|Q-+92I-03QGsqTWLZPY;ot6$7~!MljAZmxKTTY85Aw zZ1f=jMVfeDkt^`EkefRP#F?JMR#`1~Gf0n;*{}kR{iFPFR$2v*(V}3CeiWd^-iu)bh3tXX$2E6FSJjG|M${o4I2Vp5*+85N>Q@W=PAEz+AI?rkMW4&r*5ROP9c9yI zbefIS!B+194QWQbqlruziHA!sOkKL+UFjZ0!>mvn8MuT#*30!FKg`N!3qo!A>Vt)# z+bx|EA!4mJ)59cr@NiHbMVqWx(*XGxEFC>Ocv#vp`mwu{Ws6*{r#wOZ>FUaZgL^9_ zDs&32GKa;NF7XPjroWggWpZkd=x*TPq~Yk3v!G-QRdlVFEG_p2KCtHU2_6Y@*Ui$d zRcG94(9DXJsW=T7_?l4&h6ls^@Ix6h61B+5;7U{~^)j90&WRy8m{%xbqhZdlIG zUi4mDEjBE;zuuv-s{`xs!vbAZH84$FB5d(`n2ZbHB=|4emS&v0-T$;OjHlKS<3#j^ zoE09xeZ`U-O#|4X&bVkbaLz5jw&owx$zZY0? za0@(NfZdRQS`N~+m1OzhgHrpHuct47yj&!;X|{9OWt7dg=f31-Y5!m_C{yTzSvCwE6-j!K9#p_@ zDL{8Ef8h0Sl;=}N>@w^8Ai4kWaN!<^q{F#fVtFtNL!gJFql50l1ON5^e3}ljB&rJ; zSn-%jI&cuc5tk+Lb_n66`76M1Gj~ZQ7%XB*Brf>5M=`63qa=&s`|?RUuZgN={-L?Y ztGI||pNp{bF6jn>{Gyvg{87iKj2?Bg&g&8AfwX>0A(2)nJ)$0LfXAaj_7SAiqF9en za}YoN+yDCSQKbs&QAd3sK1Y^7e-Bc3{Fw6f>m(BY_unb03Pu>+0U&1xtb~Z8Y_JY>HjXDy`0w$yYULa>Zj;%_?VEto!}n1Q7e9Uh2?7)A zD5*ZvtSl+)+G@Z(r-3nk&!`m3M^W@b9o+euY!EXLIw@ABwie?cRU9tdQ#(HapYdiy zN186V+m;=7#?Cn8Vgf-WIMAPu{iXAMvUCj}KuK@~wAly?{YAa#Z~yvlk2>^%T{Q9e zBZVLc0rh$jN692hS{RkQ9&Z8Gfc2SXdJ3t_=l&2~1IesdaAd8$LD5O(ZnQ@yOOK6qoukOrPF?cef|eyR zw2<|V4F!SC=565!^V`efsRwB~GNIOOw}XyPpgMu!R!?CQbAniZkvUV)W#|{3g7w0o z#3NX}o*jN}b`oz+vVw>Q8cyd;LcNe56;}*?6Dm{}T==8lC@%Ei;V}0M^M)z%`$5qF zttYttoJz-AVA5(P8{{y{esoY^YBrpfCTXTzgzA36RRNw&uYmSFU%>N>lKFr6d0P)u7a6%*++&7J zh=-U>Q`6EAIEvvp3?M6X2q!>~6P2?23wXjL!WRY%GGHkHtG#8)A+)(|07+nBPN`#A zrAOoy6@iUW5k}SI(1MJ7eeQsRWkv~l2l?TQT(r{ZCY^Ur&$kBfSo3WV(8ie^**mB% zGYB|Ed>RcZL1VLz=uE`8)9X{k;X)oIW-TF2;aMRChdcaAqpg_Ep%V0-on*s-;$iB7 z?*wP2Z{SOIF={xBr)>hX1JB5|rN$mBLZY3=&(mo;UK1aY$5e>5<;+?MCB8K9qQpxK zvU*H}tg+^O23#N%@qwrO$s6$hsW-saPT~4?ekNyDO4fo|S{PdHGx$$&)C4JEB;k;B+lEX|Nj#+pcm$tY%9mwu%Nu>36uWlBfx;ueI*s3px z({Vl_>C*pT-^hLGpf6^EZ(q8Dv|?FRx8{w~vZ&8l#H#w1Wp-u@wgv$lQyBJIaX{JZ zR3cR$k2-GM>5+u1st#>6dgmh+kt)~1)|j`S(P=Nn?8cmtHKy=~*h%CC z&tDTnVyZ|=z$w2)Nvt7wh_YGx&$o4kk|;Jw3f#AxAEgxyq!J6w+Y@!>%^L+M3~SPU z_2p4-Q2qeO%oZp5@8H~Lg`WJZSYTe|Xj5lmL?=MrnS0uZbDHc8a7uFz?Cl;nYsPbq znz4J*jOB3=5pKrr3*LTK6j!^XyGM_l5}yj=3Kl>JLW@p+7f+{Vq`%ygpfJs~p`wI> zdA$*W3n`B00EacpE{N!68|t*EPw9|^Q=+?8>Okv|t9vkXResDjeMsNA(DQ=MDMIT~ z+_W+8P>li(3KSoMZ(Q!V>=^sO2DFi-R3IUbzgaN=w zU_GRgxWez#*8$|x|Jw6CA04Vw5(=w?ssdJU0&bDeJ9QSSOA?USDSjnU=F@rXM$~g; zJY5wPVqx4Ya1INl1vG;UA3P2na@b&2kxdvT7e+n8x-Nf5U2d+r|KY9Jd%ee2< zQJ)MbWH))#A-Cecx100rRdIogl2d42$HoF}Z*DyQd9!^wxRE}t9sjcgU);w3e2uFj z{%2)rMg6{w|M}fta{u4#uD93x{oh-`8NLNYh2%ghl0X@)Yg;+Q-WlA zP#LMX%UTT-L#B$E+RiQTuT0T`k)c)p7~<5`S7(qoVw^ygoZ&fCM%Nk)ZQ-ctSnr}q z$)BMW3>7yIzUKtRVAD698WTt6Si{@3S0mMt;u%Nm0}2+4?0Cj?8xJv+ctM62sCbV? z5>mZG+iZ8Dq2x-UPHRf0K1q3WN9Zndc9Mc80T*B!02iqKPNP8v+3<^Yt@fu(P2i~l zQm?(-?k(fDFCpvxUy4W}d?y->PXV-GAA-EwY9!>tKx4p-m_xvSo=N&P&RBI{H9#Zc00RHGB_$VlTQGse7YOU{M(etJ@Z;>+wl`m%_lUL}e zW@?zr)gd8@avo?87^fUMSE&TuyZQx+hkOD^s=YgS>CoauavjVAUWH{m9Hz;rh-PCh zdZW5Yhez#bixx-8VYNXDqEb3Kgw%keG#x;agX63KL4|Z#Yq&lFSh%1waJCxe`54oo zQ9fXWoC-bO;A*NCz;0P&pIWFeH4&Jq`BTjEkbG45hV~thOlHR?(LO9OhH~sj$+Wf) za%sQQQKYloRsZYtp_cuAJK9O7(SE7e{XPx=-EVLoKsw+lfH0O=Arzc*{i;(lW(V0Yo1V{m_Y1CH)gW7;E2_AE-FI%_!a;6~$B`zJ5=#4W z2b$WoL`Y#b?yGmO@DB)$V6`opoCP7W30fe1i>8l>Qy&0ym7wfN28^t8A^C^An0Cg= z`59!pfzA+jy+Im{Dfp$*5Md(5Q{->|`fp~YN3)?K14E<`aQ`S9WyQ&w_U4XYYe7h1 zq%&8rM!C$9?(m-GH=@4x=PojNU!goJ7&1h3^J+`77KNO%7Hf6VavV0C+nn6DG z1}ULQ1#w#LxYY*ZV>9|Wf#VfSG-}TdhH7v)PVzUwDjt)ys5nW$_z&@ta7KU z=IUG#n^z|f!jtSzaIj5@i@+Kb>NtnpRMcuu%WJJz%8#k*KMJ)w6kkVK<}j-~5>KYI zc#P&){EgDGMx3CH$Vby=Jz|s9=n>U6pDL9`(h;k4KuiQgmZw@ zY+S~NIpj6QR*3k`8a;|Qp4ff3#eE?vPq;`-&ROvl52^V68sh#SPs!6N!=0v1@WE_6Wa_Cl zTI(#I41vhtTo0j+3b|hq`97RYAsU1*{O9BY9azi@z}ga5SF1hK++Dip3T2}(DFx0! z{as`J_EdG)bmT$+sa{nyWzq6k&uqmaG+8XfFKb3}BNs6ET=4-~uxl$ObRsA1p29Vn zVv|#$v0TKJ#(A$vdX1wu;;1WEuGM&v01Mrgv_z*6FeQfhl)$a#jmN?iBYdeR^q^3S zvhRyi=_g8Sr6j6HWGQHwtX+@y8MD#(QW5Fn1PgND37!vYYP@QY>WL9()T8lvpVpZ7 zjAmeX;yNK6q38aieHi%uqxJpT>8zj}&G?mhj~8rf>SUwG0y$8$m00}Qh+sY-ynD(u zHi$@gt5bWcmVBQ?HXZQr4A;JX5t#&t;-tB3?4xZmL546dNZ0`nP!<^5wVl~`4Ao-I z!nJ_L!jU+gjXO4>oH-F0Em(d$;^WQe8yGX20cuQ?7o<6$%Dfa*vZYSY)C*nNS+an%+_Sqi)ae;C#AOlOLv1n=Q2 zEgDU|L5n6MW{pJlCX@B^NDJ5~-C148hH2Peb6G8ML17jr zfTsumY@}_qL*vbxZ68a%ns}xTw^eIgTpdA7&LPuwaCLRKdN+pAj z;IUjFNi`125r3hkwW%oI1Q2`8&`?!eC(g_KYP!+DDRXk*nF7vTwU0hZ&L=Q9Rn=&PHyA zK1HOngtQE8X7CJ^Cv6Eu{IsK=)m=rtjF8u1XGie&g)zJ3$D1`ia&a|>$+)T4taUg^ z6dr+^4Dgk=7>yUXWes)MH3r3NK-pON2-FaX@WfVU%Rz?ItQ_RN)%*fLYX*cK(rc!p znc}L`!LefN6&xrJG9Lj*`L#wYnM^VT-}XW_m9YI!=yu^8`$8S__3eMXmG1pp``_2N zD(rvv9xkswT)nmb{q8Th|8I8J+v^JZAKdoyf3B?D+W)@FMLBq*i|9E^y^x<6PLo)P zHT~khslzpm*J|dq5R-2{X@?Zq<*zw8@K1P_*^k?ulpgR`wN3{(+I;vi-61^~@Eud5 z2}8A$(3imrR*zJG{D9?KNy-F12$(pM&TM=H@(CN`@l!&4C9o(l@1z+C1Epo{z2RKS zjKzb4XdRu%G$iZPke;=Zmf5L1Wa$!itvf zvqAJ`^Pk?>Ve-${+gm?xZ2vj>+5=#r^%;n>JH-Kb}%o?^3wg)2lSZt0J@{{uq?vT5V-uqx^;CG#L#@C0ggVm{K>Ds zGO1}R=}6b)ZHOI!&~xhg#cxNBEhLsj{#Lp@fu}sW$&e|)+wGt9Xxi$odC%Q;Fh2FP z4ODuB?)!kp#>yEJqEjp6Tug7Ee{sk=9!q-&=+LKSS6=9N9yD$MB6d)KwLssQN@#kx z*Ji6x9Y^hw2TdT{C=L_a(uXh?4DxB8=A-G!&@E6K8ilqZts7#E_^yjHKY4;P-ASh| zr1-OTG8oihA}$zpOND8vslRZ80aHyho!C>)-#qdOD|9G7D3@b*2Z{Mc((*WYC+OE8 zAyUH*p1)#9IQ@yg6(_V|6PiH5xk++J>bKdrn5r}Llzar(?x*obnxW2;$)J#d{QS9Igey?=8Ct>kl!~3j0bo`8>c`FSwyHSqEGF|=XUlUG@zwZz>3P>9 zD9V#}T6uEq{pft&_dxww5QKxF5`=WFdQennk|;o1_v1I<;(0^vg3|-Vegv@5VSsQ* ziUSI~4lvhmZ~&7G+Jr1_)~H@#-)_}AMX2Ig*} zh95>z;EQW_Xr#_bgByxD1KiBZEmk?U03V>r+CVIi8}E5`v0Zn)qA)4|F3aX=>H#dSC&?9 z<9~ktSC#(%%XhuKuGs(gR#sR1_`j9qm0SJ)*SL&o9u~aGek+a*03Jvk{^^GSI440} z!Y0=zH1Ch{LE1lZRQ}V`@gSSHZ{*G!f623v`y9lcve`hpMKpCi&1Up$d-M6`%Qssa zKkZ06f^@2u?Vzq-7d@087$?Ng2i7}`W49pb(C`_W_rXK~CtRR1+QR|2_)zW2` z{MArtZdqRzg4lr++>5#5vtqveID9rgXcsfZKZ+%)19a=O2=zu20Z)88HYmza#s=DKEn+=A4KP$#+i2$}3Pwr{gIe{R%x(yO+o9+h+oacHfvjF< z&7+WH?Z@g}e!OP*e6C(j;rCaxB*qkKiiQnhFR)7acDz^~qI-I&PwW{px^ zwA3yd`%f+`o5E$Cnfj7O5<;57UMyVlKgP<*zoc@%@9k!*PrKBc0%+8F$(qWr36|D2 z&Qj})?f@as;@_2Oc&o~DGkoYtK%R-dpFl;Re5jzdd0Jgq+rX&d)@r8B!gOg(%*N3B z&}_8g&Pi0l+B(xTD%b#&km;_wrv7=PHiY{3?p@y!Q;`k^ZBNpp;GmKT=0m2R&Q z9Vj|)l-<-K(yw8fj_bXy-fJ~NQ7p+^zpCQ~_tI!j^QUPY`dRZStR_R;rjr>(V}QC%Zv!Mh~p$fEYRAVw7 zcvhkHG6N0O)xLf;ZTR=^&9mR+71sX*+<3mAkI&Kn^t!kDpRaLM>3<$9J-okktN;1k zUspt--$)-|++zMBP% zj>f^mka0jq)JFh^E#O%rv-ZB*e0A|S4b^0SWaKa6XVt_ zIn_2Qq--2>rRWw^7l`{PWDnUFxC0EoFm{9K9$N+cBv?Sz&lvn$z@g=W1D~?LCS2T0 zVwfj0i{?tcVdyXu6iXQou{YbK>IT_RHGE3iXk-vn*Yu-}1GO`D@JAcY>U=h>D`MI8 zMAM+VOfVm1NEZAC@^-^~IKZ0Ho>ta{n#|!FwW3A^l@Fit(KQIGAFwvKP~eP%Qq76O86LLhr&?_-I6Fw z`?ZzkbPEoc=+kyqV8)jK*)d60&Jqd@(^9KT7_7cjjsfnzmhz;UoEtlczz_q{ahK>$ zKW{h(=`bH17nC}JVuPVQcU0_!<_^mD*9wlKoN_!H9S&y$@-L@*)p*42t`vxhbxkr0 zyaKB=dnmhi7p_cgAt{I}d)?X9fd z%74HAE1bCEX8X8e|KGpY^W*3R7ER1F! zeUV#&dQ8$ISn^Eh-+V^}NI{`QvN!o_^}u~qNjdV(omX!mMdORDpEe!W1xz-9sfk+C zJRcUmN5ZpLKPw?)>&@1ym+z^K9n59+Ok|<7UJ9Jg2LyHWtHvc%gsAicw!6 z*Cc4|RV)%A0~jrI@`_|~{Bd^)D|f_iA(?zXnwJMh7e_#Lz6H%q3y~E^i9D(oHm73B z9BX^8dtI6r0VNi7c90oOXNB5#1q8^Y` z`bU5Du}{3d2B5mrR0#C?&wzFBpKt9zyear2#L|pTYu!%KNTzMUHr$UIXJ>`|I~P3k zOBVn7R6c{=SFGgZ^4&<@QL9UaYSowGqqR*~Lk6+j$gU1r*M-R)HYNxZyEPWYb@aqIA}N8pS^ zpEq$4VDfuS-cI<59S!Z4Ks%q@cH-8vxXBxCj}rUZk4EED{OB-)T0(xp<9JVhXui-U zK*Ik|=^+q2TF+f)xizK4W+@GFZ1y-RPjt;9y5+?n(@k{VN1e|&nG~tsJ@&NXrKA?z z)`48%?zZ90yb}j$Iwq5~?xjr-{sX6|<`m8H<`v&_t~B#0|GwfYDwt$G;`&Kt$1yzo z7@y2s9iKeuJ)`rEt-FwtjTz9`@zwQrRwJO!*|X>oW%EjljVU{|IXrO{>D(l3FJWH==Isf(-xpZ60R8u9zv~Y57mO;wf@oYrFD5snKBWgn zyLe$j1*dMVxL_vAxO7hFnd?I$>dCdjUgbM*FhqAFc}EeRhFwc%*sSM_UwYZ{A~(NX z2CCozm>hIbW1H@PQC4^Oj2qA{Ta?4Bug`&PLW0P{0ZfP$`B*^p&Vza zI>qTo9}{Pa#+8Z(%H;4Dnf=NPmQGxS4Hb#sLA_s*g7@%?dn$pNusM?c9$4g7D~NAVQP?Y zg9MuLiR7>nhT85K6NUK$;m?0Bv7?c{7Gg-+O-L#{BLpf1;h665o}me$3cm`goxi?z(MFAP%9kP{|4~x z3;OsB|DToa(yjjYYg`rj-=)>1Uhg*k>-T?MaoXHSAM^J=6nnd0j{mxUtN;BPm#?Nh zO(3dEv6uPj+qYZKuU6TbYBQU^Y`%Q+{+G?|ovl|d;W&l7x9^{By?nm)@<;gnr_HB- zc=hU!&6*X!o+V>S;HucH9d%rvCRS++^rPl0DkKFrfZ<*7tzQ1r4R+}>mU!=R`+D? zII+q`iUE(1U!YhBxY|fmY3qgLr_{c?EY=5zL#hbCR`&Yazx>ZDDv)W9eipHHg=-}S zX)a$vppEHvMe+;>W^G-?rs6TlisGqkd6It2KbVKCWTK?NcAC39Y6@W4>(3QaWLg#> zEL3m0_MJg`RJ1Xxw0sInF$PiEDZ=dw6`~87$q%jz@wXj7-y$jI+99dKdDUO;D?d;> zQNhc(rQrM`JLHlTlua56c&vr;hDUB@Y0N|3b~B|2vC5Z=bRG@R37foF4H_3{+9y>s~ajLH3tTMmtFVvT+D{4>O|#fA*tqO5c6= z9nhhABYI@|G^!5$wYkx+e#g|X7h{{iZ$_m{<7Hz&2K6-RW+yfyA9C7Fi%J=rkU98` z*$mC8RW}P{Taz~o-Kjpj;K~oNKKcOWi7*lC0?M+$lX!6IFP5l6(iUsoh_~LInNGm$p{}0PZp+4r{yp9Qwc#E(C9WEU_X;^pO`b0vTgtI#1TuZHAa-7cV zLT#w67hBIZ(AxH5W9z5Q=b{_y9XKX_CD5m#FMLxDQKlp{gsi|5!fi?TE8Ew=QQ3XX z%^HW>s_$sLXpTU`%K5jLesWBre8Q|l=}9TjxfHb;BqM6>&8 z_yo{l#c3I#Lj(%2GHmmSbNtS+YBEZrsokZ z-(z|)TFQ9F2e)*B{RiHfrO;`M(8nc&c5|`X1}WtcefI5coZjj)8HY=Kkx?JTOf;3lE2+NK_Xd%U*Q0 zBTj*M20j>OnW%10y|HKag5p4@N-PwtqB>s!L-UhTA}6k4+bFju2ZC)nQVFj>B@yzI zW?C=oK2AwXm(FxaI8diQ_Q#o+wWIc)phfbd@Q#(QP&C3En2Q}z0d57A(ZI?>&KP|V z8~%Q+a$&{RQ}ipq?e`;vVX5jg9aMr?v*EJgC%iC_QqnsyFy=�SKpa!y}Xupd_F8 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 C_2Bma literal 0 HcmV?d00001 diff --git a/packages/docs/public/commerce-example/README.md b/packages/docs/public/commerce-example/README.md index 20b31da3e..6ed1c2d14 100644 --- a/packages/docs/public/commerce-example/README.md +++ b/packages/docs/public/commerce-example/README.md @@ -3,8 +3,8 @@ Give AI a small job, run the result, and inspect what changed. If a check or the screen is wrong, fix it and repeat that check before adding the next feature. -This example grew through six executable source checkpoints. Each folder holds -its AI task, source hashes, actual HTTP results, and verification in `run.json`; +This example grew through seven executable milestones and their review revisions. +Each folder holds its AI task, source hashes, actual HTTP results, and verification in `run.json`; `source.tar.gz` runs independently and `changes.patch` shows the added code. | Step | Ask AI to build | What the run demonstrates | @@ -15,6 +15,7 @@ its AI task, source hashes, actual HTTP results, and verification in `run.json`; | [4. Cancellation](04-cancel/run.json) | Stop renewal and queue the event atomically | Alice keeps paid access. Discovery can now advertise an event the implementation actually emits. | | [5. Delivery](05-deliver/run.json) | Sign, retry, and deduplicate | A failed delivery retries after reopening storage. A repeated delivery has one inbox effect. | | [6. Reviewed recovery](06-recover-reviewed-8/run.json) | Enforce expiry, check persistence, and map client evidence | The reviewed final version adds atomic binding grants, rejects conflicting expiry, closes access at the deadline, and preserves storage on reopening. | +| [7. Account deletion](07-account-erasure-interoperable-6/run.json) | Erase provider identity and delivered event copies | Repeated erasure, late events, in-flight fulfillment, and reopened storage cannot restore the account. | ## What review changed @@ -43,7 +44,9 @@ from an earlier internal prototype replaced by this example. No live store purch production-provider conformance is demonstrated. The original [step 6](06-recover/run.json) is retained before the reviewed final -revision. Apply patches in folder order, including that intermediate version. +revision. Apply patches in predecessor order: follow each record's `previous` +link back to the first checkpoint, then apply that chain from oldest to newest. +Include intermediate review revisions; folder names do not determine the order. [verification.json](verification.json) records a fresh extraction, source hash comparison, patch application, and npm test for every archived revision. diff --git a/packages/docs/public/commerce-example/ai-reproduction-source.tar.gz b/packages/docs/public/commerce-example/ai-reproduction-source.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..0be572d9626b956c273a6619b9b535765c65856d GIT binary patch literal 1521914 zcmV(uKMwN+7{<$AI_~EkI=wI+t?_UOkX{*16e{RcUF-%Bwli%>8Rciz)Fr~@= z&YymyVG^-aL>jHoh}HHasX{1_l3W!snOG$hle|?5jY6o9l0;&e!pzKBDghq~1#(iT zHkK475o#m~Ik?|jC6-CFGBUg*6iZ1ev0NMtK97!&NX4W{VzE*p4<{)F5)nxt6pGbq zGD#p8fyvZj`~#9WMj+HkV@U!H_*E%U#ZpNwicmP9T%jQer2>hJgr-hsAgt-K3^SSCRfTxLJ9f@P(_1&fo!6I*Uikll;BYtn+T0YX-}g8_NCIn|1s=2 z44$ox4VC00o~)Iq#A-lPk(e5(CNbG0g^C1dB33z|5y8@;C7K9y1Gq|MaH(`e5;zls zL1nPOfZ!_0MJp$h;Cvp=-Xvj!SU5?c)sP|46k0j>MW_;keP|>CDWEBsLnu{fMI^A7 zD0otU7IHDTK}03-iOulgGXn4%Nup7c6wz`L7*VO!kVIg~LXAQt0hi!XG-8=jp%SQK zNg{zp5DKWR1_WYINzQ8QB*5(8pGklcE`S?|LpXB;Fh-0Lg@Vm!!5?4?W=tx{7f?+YLDDD?bHJO4 zCHR4L{>&dFfg0XPtOR2tl^CoJEQTKnXehELg#qG;`3`7EaLTc8nTRdIRAMnnDHX`6 zW-R^OkeA>BFj+8Of@>Y-ud{n>ShyWQD3AzEgi4_ek3f?ksZau9D8LrkRFW$`nzJYh zjt8egw_sB73-SsTa*awMm5Sj?6yRAf4d4_t8eJSClxo$IC^7Lo+A};JByx3Piili;_4iKTF>8o(OjD8QD0Cq-f@ zm>tfifefX=cnb)JQXz*Ng|-l_P)!0Xf#0hpiL_#T0Qe7hSSu8nAaD+14bs>uag;=%RU^XM z6WVd8v!Anzv#;A=_#h2zRvkfsH;SXF>d8{L7;i5hzrj!&lIm$re<+d|jeup43uNG& zA@wv88PMgv8if+)TCf4Q0I0|Su|vgS3Y8eF9)~_GQR|xbKM*1i)2sjEzY&ar3V}s!v zu26&nu24q^l<=rT0wq*!m~De1gD;8#&P5HLAgN=)am%PA4-H8R&x#M#qC}vi5VA#4 z;uhBl7!)d z7#R#OGZ1Gn#sL5+f6b15JR%E5MI5X~qB1f;^$B^(2g8k~wm4N(v# zKH#8~P_V(?&{M!*Lxz!H#tw`}B{m0shkFK3$)Fkn`$U#X8!DBkBfx<57U2N&GMh_d zbJ0R&Fl0pS)*e4uY0N|L2I9p6rBin$99C3z5Yr?P`ZgJ4= z#45w#)!hj=c| zN7%CQVbO3BAoN0w7Ty7L3qU$l0IOAy#$bNFx2N;?03VOx?tURIK3)O7Za%&t-p+pR zgQ+y6LZMEMR!PDmG(ca*kc|EWmQ@3ZCIo;1qANby*#FIV@C-2NQ`3;~iUqnFS|T-7 z7O4g_A@n6-{iGQ8>&;Fq3A-OZ6tFri6j&CI4wed)K9V`ep#p3H0@Lb4BZc5)vX)h_pZp{Pp}a{C;bw zj?meNBLn~&sSqv(033)vI3XW{KC0{ANEP7{@DG3@0>F@%RzVl=^Mn@N7g{cGsF+;f zPAo)vWMe%CjJ8}64fYU@SPA2JaI;8@ZibGQ3XPy96uefhXFLc*fmex*q=1N9DOJQG zYilfM(Bwf^NsPmxp%4&?jm$I-Zq3X*#h@fE_i8c3y~Jpm z2qVpo4@gBkE>J4r+7(a-gPlQ{RpD?!gE=mQ>xv^40=NLw2H*r49uT}1rI;jEn`t5h z2yLk>)r2eo_3Q=iQK6632)pB29FsxZEdhjt=2MR-v0#K*D6+{IeK6}OK?vCa4u^wE zJ*EaU1uIsd*#HCppd0vxlW+$R1{}~N02izHddCzp0|{s*EJnbGgayzAc&ZweR?J6e z?kDo#3pa!C23tL(A_39>+(PqUPCo)^kf}6)JrI_IaF-yW$51ul37A3ppuGT12G3Fu zD~5_jgMtKjYz8_Qke$#`V;UPGZfp?{7D4<3q`?e2sStC*@P!7tq=ausHlTQw7&vxn z=r|&hQP2X6#07UAq4uMinf&?rZ~y4c?!PVm%VIKEKgEApbk3jn@9&BKddPtl0Dd5p z{d!;xQz{tnfZi1V?jjsaGBX7e$al z9~e@jX;91&MpB_I5#df3W~2=W3!*}`1gO1O^o$7DB8ZV;7y>+s;uCsj39e9u8E0Tu zoDrHA$iu}(_8GzrxH%&FK%hnpDNC7yrM9 zv#8)PJ{Zn70uUF%dMR{}fFb4oSFsl#EyEk5oG}eB3WF6I!$dxr#3#TS{9U9Fs%bJ!cY$|CW3I_!2v^tj1-*FL(dR$2xpL?Ay@;>`mZ7`WRgDO!bcGpIH)Tz z07Ttk0vNp0LTCWS!+{}qE?g{!&N&sZZhr@5g8RQfGc!eF&yM4#w3x? z;K2Nb9i0J4&a6AEEAHt+_$EQT&1W##EUXDUqKR0F1*$;k z?ISb@uonW_eCOeAqy2m#e?XlAXe^vW!opWbFA)GzjE7I20^G zua$=Z5DPUeMI=#Up)vq=RSFf^fWlQ`1=&D8$R3aEb27AC`moQ|2d3k`n zi2DpVKCm1n9%QVucoqf71~3H?5~b0~eKBW;g1KFg)o>SztarQgkAXu291pHA=_r;X z1sn|LMp-Tz%#5K^fZNn(a)6%&94xt%$kahihT>xsfb@wV9@!`xi&9O~NbFy2flblt zJ)#!Od{8+DGZsKhEm8B>|?UtTfu`^icq*V+=~!tVH6th5)Ig1 zWQ;||H^5k`252E6!W?1>5t=nPFkvXThfxECcJNuIk+{Fw9EU=oM)3ysx4HyEX6kaa;EsR5Q9@HqSxM$#$x zIf5C0JqErT*az7Nx8T+X3Jty9rm#Ij^@L;)5sd;734~256&AL@w$7#K$sQD6`ULoN~q5@pD| zF&Mu(FIzmHMFDaGY=RL#LJyvTD^MJI(vU_$iEE)yi&7$Z#57cZEHp-~P;D#?i?Gu4 z%wi0^u^El%r*;54g~^w2HGs$vgaPx0a*cR^8fCbESu%t}^}1P216CCgQb6)`ccw5o zT)+n+u@LM;AH>A1=zl#X%C8sq#L|eE4ZuU|iZCM!p(Zh&%}nOPMe4Ifb>isAmZ7K% z3L@h%4E_EvlT5}^%80^9X6hx6^`@|H)K`scyBtf@Nn>#xf`@s4-Gh}5a4DhMaJ2&# zvPJQa2!s}qy1{%Icr5x*u7P?2l#oQ}RD&W%$we6dK&2CMG0dG}evv-7OXO_{6^yt? zt%Wim#3E^6vHB$d{)Aal5zeJl3{cmRPeY!^DB1&8$6}I@Mv&r~gv$mfLxOAq87N_- z!zg;g#W5%ft`QB#_}|Za4`zD31F6@ zPErVlxm02d;=l?gFdjB2ruq@cf`|pc9sOm*@DSGF4yTdZs>Ljy01xZoyg*dZ#6syb z%64L>2s26=HO}w)ggWrGNK!Qg#`FLe{P!I+L)UO@`E2%qz0pQoW-5BXpVBE8A!4^vW8PF;~ zod&>Z)(_YqJmiQQaHv=@CK8Jb(AR;4Zv(55k`P)`uQaJR{kj!bv46C^U7$JVZc*BnSntqJCZn_q7cQ6w((O2ErQ$szei^CRrKG9^_Dg zQbNHpm&jwp(?#Gp3So;dt+1?X9ixvuPQg>=X!)3m8-}4)HGU{DNIQeSk*Y(5 zd_H2VAc=2uz%(DCAefI-Eh--n3See~2)Cd(iJ_PVxev(kgXfLy9E%Y`orhUby;j6b zr2cMr2Y!TgeN=d&5SF4?5i-tT7MP>p1A8Top^B&)H6Qr^fUO{2*T-exZuLPKJkl7A zjDf*DgjSG@XI-(ShN3bp6)G~stTP1ogn^>qwuwN@VX%k}+ynR`jG(d+M;Vcm0NE4< z9*aQBGx!5W*8$LjjOQiC!kq%F#t6)A57#RbU~vHG9RLK1oJ3+mJaGi6<3HNh-y25s z-G+wv`g!@d@rmjW%xN|P>{QIP#po?3Quk_X2E*8>wh5yL4wGQj76v{r(2VLO5&ol+ zobkgoC|)wo@y3ZRB4B_Qe?XOr%6vo^5+I5})fx$``axWXABzG;BPjsXV~7|KULlRb zm`vtC`t=cD1fUqoUx=^}E({opDpe8%fkaWgC#G2H19Y(p6_^T*9RZ@M4sivxTZHQL zyg^717O}#aK)+TTRs&LMWmp^u#fI=4Br-p^BpR%cUXbf51Ecj)u);i)fTQ3vge->p z1rUa)0oy2X#RL?k0)SI64!8sqGGP|r^Qck;V-dV`7AUz&wEPeu%Z4h%af zBTE+}=h``-dH|=RKnr2}e(v)i?$TG0U}0-0Xhb9$tpnDfIpYLO!iUI~TDhh>_FbG*vNv;AVhFF1j z9V4#e+~M&HqNo(J&h@Lk@Pc-sKn28%Z&c`NPn;2-Kz|Z>6e`w%Do8BX0=bf5)iHpR zl!D3N16ZWNhs6;g0vMs?lW6##p^8u}g@p)-3OkG$j)LMZ5ILcQqv{uT;8*w%ib(79 z&j78UP(XVR4KxiwGgO}e7lTw2)TRW#>C4tAB;#-gaY9(c+K`n2ZY8RShM{J-X~Lr5 zEl050Mh#QH`ZJ}HycKGqt{O;%0Ep010RRWi z2U?{F-a;5yZ2v@e3RY5Y93UqOR`k6XSP(}Ti^F~`hL6OC@@Y);WI!uPC=oE^3-%B7 zH?p*VTCT=rm}=B?f^x-JOO+xlj0&r(;1g(UTyC%`Aglp|z*UCk4?Z+0gYZ5AwX+6j zZ7qS-{XK}sghW9mrg|Y}#&8UFcEr;49z0T)coa|%&|&HeDF;Af5x9a!mGG!7JRU=y z6z{XatNc+)S0ClYwXVLpoCpvTt`)A{1zK3_r9ts=yo(IX98L1~8%D9i1Hw2fDFrGu zifl02$TBhbly|`VuLu5=o>5PAp8YA;YDg$PmK^(@{z8 zKu{3l64g~i$tSXyVEqaevW=LaU;$Ens2XpLK}XF1+`|O_W2=!w0#?9{yFy8nn4%JS zB0&Q^JPf26=EM**)Mv0VA0aa1szZssXdYE>D3qw(iJ&$aLp_8UHWa=CP7|Z96x6O{ zT+*n*df}j+Q^PI#7KV+(EMHO8fBINGe(O;fqkD;Ph-OxRkcb;)931uGl+tO^}0gv2m{hJHkRV0~r^ zr3~>Apojp6%V+=s+CrC^xCs#vy9eiYL=v?@67}^9cwz*TE?AihP7+H~fx(~(rSa?L zoiI-tWk>K>Atn^YT|!1~y7ALcA%`jy8laa1N^;$%8GX|V#*xUes8jf0X6C0Lc7tMO zVJO^>%skAeK?Me5sze30vHcYpw5ksr8c7lkA@vPj`fMW(-SCD~AYKkwAvVsNSPg-p zy%`2Sh{gzFEref)y9s9rr+JX9 zU^>kQmFmGsph3p#v;bC6*Qxo}D-c7Jjb_|ahLK$j{sS48P_AI(h))ofHlin?2#ty~ zR0>6y11jZ4)f-`W#XAH`z~vUJlqjJU0pnsQvwqis!(VqD7#2<@4IS-E6Np3z zoC2&XC;GF+;n+v|1_gZmdSiiUIDHRay^;n8y#az~8CV~DI!xUF)2+abfT5FttZ#zD z(=T4WfHefb{3#VMKqFN^U=5j1t0W`cgcZ=B-Qx(#$VT}PgP~GVp;V#P3k24tj)k}M z6$yl@K$%aRJ)r@>+ari@iDk zMpRMtDPDYqhqO=@9<|vSzil?z1B1h`0Kypj$JwdxHH)|kvU)P}&YZw8UVC+l0iv4!ai z*oasqR@VZ-ydeT?Tn(uoiN<%p-ElclLWeE1e$j~j2@2#V<89)+hO%EcUcl1ga16e_ zvzz~OZk*^5Mo|%XM2NxkdKxJ@0;a$KuhAv0mF?IMN(M`VFaXfx&hg)rLj@ z(xb#YF#)z4%? zsLQBMR~lX$s@Je}%X5r+*RintU-qNJv9NaZVaUhEJ3-A102#|7TB=DhSg~LT+9*)C z4_N?$>x}KN@mn9v^fgk@5F7az`mT3Uou*sEixJ4i0ZW+x*hG;TAHN1&C%n6iD8Ext z1TmNm(YuC**C(LYs2D{_areV)v=P=J*E8@qt+99}R(4G^nV>ER^cEJ3jZlC{A~eI8 zfrwPcR%k83Wl)QiVH4F;1ZIbvi@Uo- z&uzV)dpzrjTHYNHC+KU?Q0G02@!-2cJcaywa2JDR_S4G(&|p-ex>|ySTm}O;SQbPj z7US;-dHs~MqrUbs5R(TJXx=ZHd7HVF2cMR zqZbB*Lr>cQuZY8&PxPAxoD8$#*h_Bo6}5l*^ZpZl^fnci7Ri5|@tO7*KsG>n{TthiIp}_UBmnfUBmo)bPbC`rE_^~2G{I=fczWxkp0a7;9tl; zd;x5I`_E?ldH?JGcKPR0ff=^5<@^@;XYi;1blS04KhMUp$9rWkznAEgR7+rd8E^72 zN?g@zip2b0n9R_}-@$AgfNkg;Hj|i5P$y?mdobwe%=h*zV3S-4NVY+zIs?g zhnIun$x*zpOiUqETxEH6|Dz^dSjZeT=HObS;C z@U~qAs{S=ZxAAbV6`cx*W=pRZ5#auXQRDtSMvVu~if#M)}Q#_{~G;oQ2IovC6QP)yb%~H0JmZ@sBA897=Mpb0E2;C&hN1Zc2qki!$@WR z?KXi;<+ADAUs3LN*#xjVTRQJ=w+U=JI&c(;VU6k$e}2g}QCmbdyw^bg9tGp?B_I*6 zHBiHK+p<`{bVE7z`j@y6?{KO2%9UTg(gk}Fi_sEL8V|2OHhLQiI5QTN&130fV5@#g zMS_QMA(AU7gs>QL)(%8#is496*&0fY!p09PTRSSpmd#?Z>)KS_U)WSTgH2`pzuQzM zlTBrFxGWaS4DAYzr*9gxH#5WDsDi5*eKjYcZR}Y*d&X~|28raXhIRd5(QdG-n-u8g z;}hcS>+9y@=ixOv*q#(P)m$Pnw>Q_fwo>t0O)8N~Gbfwld=74dl?&hl#Uyikl{hl@$FOR-=D!78TRVziSC~OF?m}82YFw1n&8NSr3$bMHqa=_E=|6kD(zxZe#r2 zeEov4_5IX>ZL}()=0o301`F>omW`$2>!1+L(Ek@p6B>Hcj0#qaS}4$nc=}$ge_a{u zvp`>mB#^74(Tgt>aN}N57MuUg1HhQ-R6}G^}(4r)2t-j9{d(#k&&ZE)oXmo~vZbxT@QbKub4#k!! zW>P{~Z15+8O9z^Q$qBW!)tB>81QLpIT^0onMCXB#@B%d2UuX_C%bvlsHtd5a*u?+! zlL#lNo#i4Q!%J__`@!u|zoJ|qrQtWyGy?Uc5cC~1YI_EqZO<_pRG^NP3lWK^@a-A( zMu2Mx!SogS-JZc>u{{WLZbCSz?#4Ufw!)6B2;c3SplS)u&(-fUG1!joW1K7(NCpABPuEJ(4B(X!@VX z;QxI84|RY2jX}VF;r}riww(I;Ul#LE{^yVX_Y41zP373p*?3;#ANT(_R4$M8+k%2T zD#MOzl!E#PTtMJWaJk%np9{!k(*ORTAjjCP{oDONI`IE^Y=-T>!~f&3sVrN7FZ2vp z-{T?5fw7nN5YiGZQ0l+K0TUfa=P<2QTIUVYR<UM7U>A-Z>-X4yHkHY?WB)1z`A^t?E|tk( z{F6l?z?v{PzpSYHUH0FW&iE(Nf*cM27Iyz21mN*Ftbb1kn8TymvFOIT`&%IZ*A{?I z<4Pn0@qYRu3j6=lD}{;I^BTWZ82^$-KtF~ZgP@|Fp9@my(h@<=ifWwZ?{3Y)E4S<7Ag@p(_#y=Eu05Zj8{E~QoFW}%1TEYN0{<3%M z?`a+b=$*=8+tUA&O2zc{zutGA{Koz-CU8l9>i=Tc{;~i61MPqP*Fyh3%g?f-((P=y zzpL_#O{Mc#zsu~iIJT^RwDOC|wqyP~%|6qX$@&M}em0%=OC$LYnSCCWW6LqhJ^cfv zW^_95m*Dm{n0;F+gUw|bP}JWaXJ8uF*Z(tSAJ`J!PaWg`wAp8|s6f5|uKf>;GZY^jh3&uwdh6r{Ez3S z^}de?fjBlj1{ zZ69V@T*y83*wHhqn%Yb^+@p_jqhR}Lmgn>ZoH5Do7Co-1Js(&5Fi!Wlpj1~~9=%;O zw9QS2$(osN-PV@9SkkD)kK9vUpLIdY^G`T!>c294_J&wp{)Y(uz(zss63U&%XRLm4 zH-lle<+HR_d~!kS^5TNh>&`U?FDw~a%*~E{c*tjZNaiCy+T+fqcc**_uMzK^JE3ja zyEh}3yG*Zskx7YvIpRk7?Y!&4F*?f{ab)ewCa-kg#9bEOU{&fi*JP{n?vBce&py57 z(A+^zz2^nJ4ZIuot!G-|-ME1n5j9o27k<*+=&rPWe(FrE|+35PX^QaaVh24huy1(!L zHTPP|l|gNEx}GDyzCXTn!2N{1eIK5h&_dJZVyl~PEpI#=Su%hcP4Z~<*mFg~WSL3w zgQxGBjeNf-`r7N-F`a^6FWs^5^*57*z;E7zA2_|8L$%oZ>EOqKgAUs)5jviDKJK}i z`KD}XaD$xZ9y^;=uqPEnwK}w`IG*G8*!AKP?#}7Ej}%cvg5t3UH_UsstaD`Hki&iV zd>?ZtcK)Ng*OMZwcD4?CYH|1d<);AgZ=5e2F@1Zl&5`8+ zws!NXp}m58=XcmG9OZUzPldl%>tZX@?&LWW&LuV5${R$NP8w!0gq7BKW$*hR&vkxx zBXwfT1o`T&-#cn{e4o7Qu5{C|4h2<-J+5{4$Y^KvLh||D=DRNM(~=zfhc>^iIT+*V zqb)NtySsnXlZEj=Ce7Ze2<>sKmFU3x4>PtZineYaZ(h?o#lhoF!8qNgV-uyv4~IAo z`@CsWk-S&;{=fzisv)!*6qT_%ZE&`ukL^Dog+El^xle92OGyUuFX&W9LLsW z&NQ#q?UuCH(ZYMe4?E6nrpugN`ds&5%Bqn3QgE>Zug=1-S-@jsta%) zQd@QUXq(#XcNf~8ic9l47z9=2ay#NcmtzO8s>v2l^*()G?w*G{(eG0B*4 z=xovG;(7h2Ub`^HByC8~J0?C2_GMN#ezhZB)@E>jyDM+QEXtOK1wK8|ef`Lm1s0$8 zI`J@0sanqQkI13S+@{>k?Ij;#C#PV8rg?~Q3-F3a%x6xe=Lm+xmNpGH3~IoeAn zZ0H~8E}R#q9sc}5$i9Y_b`|O~1Ghyi=;h`w_33R|+;+sano^gB7aJvSE#uA%9m!nT zdYJkBpsqIi%$#h^n&~>Pwci-g{l2hKV8mkC(yixAy56^49TC^ir}$7QgMW3xf%_3j zMQ^S9E$c8WCf#HZcX?>v;pH}|p`Wu_rh8{utanm>yL!ixxM(=C)6G_xQk8N%fJ%lb^KvO3Qm`UVX$YHBmQL zIzNA(E*J~G5@49VR+jvH= z;mQ6F8dlr3O@5XBa7OgWV8=&$`c(dSl1O5^v3(wGaJiynxXf%+xiwUNLS)+S()~l< zT_n$<_szBKbeXzo@Ae5ZmkeF`v}Io4!A2uyTCKCn+dcHX@_qY>J58Q+9N+kAME1fy z4c?^+7jK<5*)@P|VzYN}iokNqqGyhcFDqwO3_3Z~e8rHaF--TF9b3)iTiMJ%c7i$i z$e_NCZÍ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

V`h6a>+l_g8CicZ4OC)Ug)_m8sD^|&U8V@ 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%0A!&wR3Qw2wzyyIdTP_=xTL&jIPs30q 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
b1?s@?Ia!{WT@F7jyz7CdYS8uC4(4 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%0As7`&QaYUljXsuQ;qkf4+S4NNc)6))MuKM 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
XWx>JZSCjhNX{H^=8b^)Wj#q>sm*o&st;t{Y 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ˉcK7SYz3Llca8|ehO>N zx~;2JP9Dgc6{xGdX%xfS_1}?rex+2F^7y46Pd;G8pO8JD4r9J#y5~i{98ac0ZbigP z7#_Md(odc0VJOI6$i=~pw<5`yMN``azG5B#5Vn$c#*>Pdf2#32G5gV_)7IZr zk)MtLG$RbQwy_~=a5#9_N+ZZ4_)$>t(PfqY?8_8KhoXpxdF!zkE?^KnJzK?}x;f@G z`|Y(i)vlPvH2oRv;y>dcN^f2(H3OiYvL-SjYzGN13$ECa4O5(o#TbSvmMJY(cyHQ8ZpY=-eR(||9sg*17R=LFGl1jZW@ivn9b?-Q#CF; zH_9qj(W+SD13hHdm>~fBNeC6$8@1=^`TCHbSli#Yq|MkF)qJiA{Pk;TLSQ?IypBC>(Pdp?SPG!Hpj#K% z5bQsDHG2Aj<>RJlZyVh8Q(*9O%9E)Zd{CZ&o6ouQ19^ug$Gol3u`j=Er(Wg>+yNfP z+hqO+0h#t!54g#GRNthnT0yT1J@cK*iAKcD`^_21Q!xB3Q++JkJ^(Oddp<^Va| z2chhtY1WYe^s9Izp9%|Lxh5vYy5--}pbi}k4SPqw=gUI?)uhx462JQX+zQ?45^W02 z9KYQxHe7(W4mr7tL)2o;Gz8Q4J=T;xIAVbrw)sbA8Tzyi&V{OljsBhKrN_xL zN;X0@R~aiQC+#C|a_Ucs!br4l;nCI^(NETj^TJl; zdu3sK%-#jXz=4^moGpjvdy%*JS$O~8Vm|?uBGL+nYm(Dc4+k~-5Lu=5RQr=bP&vF? zY;FJsD@J`=%6=Y3g!AQLm{O<-hG3n?Z{tA+rW%9w*C7GAp#I7I86=^j;xC30H}k^@ z{N0Zdn9-#>X2wK(OQ1dRlx#Y}nJiltd0<3`y@?bBQ?q4Juyq zNq0BLf{)nwx%@`3|C_|EZGHqu52ThfqvRX#AaMVX>=WBlKp$|@L){wTV0kz{S)9Kt zS%Q=H9M{WBSN;khI8jv~_uj(50CV&6;|1Y?)Fhf;eDCSmuC=;JOnGdqgJsu);z@uO zcN0Bo#G|r;n?)<#PY?d#OEP%M*V^z-CJ|j*E;Ze?c0>YgC>TwF?WAv`ZD>xJH~lJic?_R3aq@(~GP zu;y+XRY!fTbZB5~NM@#_+rlRfsIhUDiRdURuZWU@WXwIB%dp(s+|H+`q?$ZS{Wl~j zKYz9y*nqTvudXnjBo$3|Jnm|DN+UDvugZ|@4yegV@kO}msk&{^#y9aqmE6mr$+3r zM$rdiyKQj_3HFP-WA*fu*jcTzh7z0N&}gmzf1EEqgXz>wj+yb)2NOWNVHv`gA4B#Y z6EfuGXpBu_smNs1F0z+oL5$!p~je*fvVUi#525hg7!nN zpyGHzYa)fnw%__8mny-s>bjv^4S`VWnJRn3(WLuWb z)z_!V5E}YBioF${YwOC_Y4C3KKFj5>gCX@rUH28^l)OzRbzKVjsHIVq(V9DpB(&2!n&U9}FcN!t|)_U&+ z2177jz+ZeYQDes1azB%Z$Yrv~YjstUcYCxn`x_XaXgp79dU{$Yin`_kt@BY;6(R$( zFPfbw0;e3;(EYBcoc1~XWY#M`{b5=SDpqAbWobFMps_TrS1g6K&1g%HD~OAW<=2}e^!GT4x4)grdX<+JzrKe|9>yU=c#dX!3UaCEs zptEz)VFN)DnJEXj6t`I!Wi)> zHM_@b(Mv7eaOR72(cCtV0=&PoEZ`Dbb+|TOP#*4T;}T}DC#Z_{U!LeUUd6iAd8ofq zdLlA^49Fh2oBSrI!(Y%<6K17h-oSp_ZnofaF<1Yi^Hv{u|7TCq%gl2lYP`-^K!3C7 z5^4Ej$`4PM4oePI)O<9NM6l>FcTR_SYkRW4P9`mBO>-zgS~Zu+=3s=%8vcB}_rbuo z%|Z741&f?wL-h))Z!VKaQI}hmI`$%oViT-wrh#`R9amw7R`(eCd{stgdfFC^JzQ5{ z`Dmf22edhz)8VHT{md^B+(*Mpa&mM5E9(&&33p{lO-+_JyGN@V#o#KJcDxovY{si#l>3}*;W?-P>4i=t+DqcIkEkTBA^jwYGU1JzFmRZ5oz<7c z7jo)jwZ1cbF?y9i*}g-%<+NT+YW=!jVATF?yx%qMBXw6LJx`z8iMbn^|>Z<5zx1y!A2nCCyf-ou1DA#&0>F# zRf5^b65Ac~7CP(gi68M8hpxjsgHVJd|L8Jqow-J$Ll68EGJHL z6N7*-`aHYy^w=Al-kVzCZ1xQa4pvO!Dz{LPY$zVgj*gFxzm{;#%fMTAtE;eU@Vj7d zQMB%hi;3G@=;`V)H8bO0r1O^fyC)3Z!eS51OwH4qywaAXQV6UO2<7whL1AHg;rc;$ z*Qe@0kV#@bgfYrub8QT1UI*#MBTp(;vEb!JOoc4cOQ^Bh4fS`|e2pP)C<6Wj3;pj} zKz7GdmBGtT3w?57j4HX%vFfG0o3qyQt9ffD~{D%tB(kf`Nd-8795pnf5ezdyyFnhaK7X?x;Zil=KHPp=^)*xqz6*r zM|-}0VBIPf!Lg<(#n*eue05ic!$rY_HB?WDO|VO^_V+rMp4)^S%zXxp&(wN!M*dq> z0;dg&6+wNqAihz73i@KGaIvwCjyvYVm;OB^zaGF8pM{0$wj8{L`C&*#&3}uFV(pew z-Q`2;GZPVp#?CEr(dpjx$+f;#u6-7Hr|8SCPV~T0j=E7}Vp>T_YYq1BP`2==kNq{d zxU-@6T3)|F?9pmmt~;#!xe5>p{efv?c-P-&+Qj3i8qg?C)8M#YvuPuR(FTV0O;a96 zrHa*A-|)HTV^uy-m4%W_yMACZ$XiIT2n7HDoH#iC!LLQU-!0bHlok}E?ne26e#XbA zi&|@3sAcD;CHKSav>+##2N9@=in7v>kcfHj!=*7Iy1%LWm+gP8zf&#PwVB&GeTFlM zyJ$vKoABFyZ)TsYc+T&5tESTi^(#_E@ui?i=wOjgxM%)T$k=WYfRW!7K3nM&a~d8# zU7+A3S@+cd_nMqo>+<<_cwgTi^s%8#a0f#hB_)OW3U^bYQ6SzMM3G^maNWdkM4$<# z?6(VGZJlL{bfeez#uH|KMxpvQrad*IHz@X-WvI`@h+_OsCW~_)x~&RLftt>?Uh`)* zN6`}CG#eJgr=>;4PxJ>9>hjvQZItiMMkzhpU9htpGQ4{PTo2+@h0>~sIgFY=Q*Wn|IEfz z`%^_LjnZ=COMGIQ1&6(Y>GVeTz8y4*ZQJ!GxNP^{T#&Kp+nUSa z)>c?aa_rkR2)b?Ev9^q&%-6SeHpR7wpP!|I!`J8-ZcWhM`2faX}_bhRw8qIDQgeC=b3f$nj2+i&%-W>@tg}d(zwzZex<)b(F60;nreSomr=U9 zIOkoLwD{k_MuJMp>y;nLwG$S^c9gv49=iQA=6^C;cDLmRWobtmV4tr#*pcNzL5m-M z#>BApQ|HCT=C@w`_HZXlw5Irv^YF{RwQ!8XengaVm6~FJNjf^EM@Qc4J!<{}f3r5_ z?$AJDb-6tuC4r2LR;w}9zO?Ak)z#G<;YmhONL;-^C{d!RD6f9W z8m~AwRPw&Bl0XD-a9+IPV~)HMiX9y?@}p_`i6i-S;tCqps8$aBkaQ2{3$3HyHp=iK zSoe()8Vi+C6K~n-mBsufB4P~tMnQ1es5q<@TVC!uyaXlEv731%M7bEHA$Ka?9XmJm z`r7fo2FeE=|Noga|F6IPdkVr&OLcYiKEoxB4~ln}x&FQUYS}c$EU~HC&^hsMardCh ze~aocvogK+|Jt<1c@GDt=h@#oe)%4g5Tm7~850*5(?xXbs_JU#`o%TzFEGR^{#$og zPNwwzACtd(2vpbqZ$D_a)@-e_jfED7zAyR?s4xCw;(B#85p}Z|otZsTSNs0%=c?%c zFL&vG?P*DC>uZ7&E-r=Y{T*$JQos057P|=2QUnFAgMzC44{NqDsdwY?KjyqAV|7-& zM__MN;xC``5Yf)~3as944r4s;dEMHV8?>NeW;i%Y2VefPLlnI+lqv=EJ~#V@9Sc9T z;YcS1090o<-ko;O@=t&G5Idm(0`vLqX1%7n>(NW0SO31|Po}4j2nx*2Tk<%B{gwp1 zyH4$}IcDZVvnNseQMy%soZ7y?796JT+ksJc501S`vqZq(i%HANqdNKTB7G&;Dv?;Drl9_3lp3; zS2ssf49_+>`5ngyQININp9CqLG5SI=E-JXqw3+7gJLhL}Q?8#)FX!fGL*tp5m;^4i z8eJ+-yR)y0gs7TaVwmyqN(MQ=z|wk}+y{SJYX?#W(20EP$UW2q|0w^+uxdhlbRIPG0Wp?97vO3p2B{THhAg#f+&- z>{MXcDG6331pBR3a$DOPRCY5ye9+xXmSti>AyCuR6Msu~h$&Fh=D)^!D5Rv^|?L+EZXuLUF?) zCPe(8rwFU+1H_#_cC!(RWy8R@&yOQ4NEBG9?d&#GL`iV`ziSS-)tp8o&<`AHO|R`V z4bp=(jKEhez2)e|IZI~MBH3=U; z2NN%~qpA#e3#Q{IhjXhsf`a-E)@B-n?qE-9)gKSgiBE+n%5DELC4EZ%Gd3Dc*CJ*$ zo0F7OT3Qi^OXnnihI=Z;cxi=qn|yhBrB3{^V%;hq&h1}Vxcd$dLpfeFnGKf7E4-uo z1nHvh^JO^rFps|&_B4)6l6s+JIpB$*(Qgv+@~bucePqfHc8&GYuE_QGtP80{ex>Aa zt^wB;3KG)2eR$m*cc-gsGVQ&3#zseK%AIe=*eDMg-8tOpvISkKXDT1?l9xEpdU~hU z`ZF@IWQFOiBJCsMt_VdPk=7nAdmDZVn^JAQcX0xvS&hYtY0e@axw(xLWX7;I*lq3h zG`i&*086yxuy?3i>}FN<3KL&2t-*IW^5AgZ&0mf8duT{a1(d`h)Xgwz3!7_w3K3?iMS_Qgi_vU?i4ka6Z z9=9yx?!D1*Mr0XAWnzQ|YTgrsZtLpXHC>s4* zh)YWjGYW05hsSANtSj9)RR&>fF*e>uddFESV00#b8)e@NrgyZp4?ua&?xMq(g0NXz zB6%;_B;24(VW)EU(SZoW7t>L36_cmxQMyI(qV_ETRHVTa^~{XkY$hALj({3xH9*9M zvINKX9=q z@%WTLMovBRy@8_I89|7UM_5D@nV_Jc4|LTSF84PjhL1Gf+1dF?h#YsP@@K8^YpMq4 z9fs>u_<9&~L|$TrDfIX1twWd@;{DlXUgP7+NFa4Wcqi07?FtV6y7r(4@gCjy!0kcV|DR8O8g z$t#bmY5#(pui&kiCSHJ>?R4&QSQ3F*kZ!3n{5G#^H|F-axVR%u@x9%)Os%Zhm3g-$ zg`JLs>Cd5pe!G8ayoecX5H>>~`6h^l$aO5GKn;)Uas`;Q;YGE1%Vx15wV+Gri^s}o z8H>}oqvoYo{4{fQzBi9R-F;K0ri=H=&G?$8#FQSZKr?oF+J?3UVq{J&iURdauIHz{ zPCvK7m}=AOs%%vHjh^8gLgasp-g2=IYAk*+KC|0YA!CbAj9%e#R^{amORd*m9C|J- zOwzkkM9%&7N)D662~w`)yj1CxrETRp$nYy^f?*u3^~3VeV&@x< zyb@BAN9s%x5SkN%B8K2kFGzfs{#%U9DXC8c`8NL>T?0>vO7Cx+a})z z%xVp>sW^EKo>SY9)Zo5if1PeE8!}j03LsUV_k8aTp8N(=QJ3wAXNLb_hBFsbIpjH< z+}64}7&N_ZN6!-O!F)s2CiiCYGLfS0%|oR4lxoi<#2bhFMn}0vMn)qIg|!xk;VLlp z*fR4@zEJ=C978K@u63R8`k4YF< zgdEE{_Ez$NEPL;Iq0GU{C9b_)v*_(yC+o((vx|$R&DcBj?!H2;-~qte&~Q5=gSt>8 z{1;ILt|N6K0BVyDSNn7^Pw^r&*|Kbo#zDAR!7zMFF!SRtV{Tfp#VoD+Qb8LG3}ZZ> zEr9C-tHF~8i$HSps?01b%Am6Hy2;JK=^vrYttn4bF1KC)qqo8v z{5Iz+Pc?w|xJnrp``y6oLz+^?Mwe`*7`O>}I$sKci3UwDbRqdBxoTsEl3A^eWKAPx;{`5TI#0 z3!pyn(k}KJb0z{%)H)5a?|%n!Dkk8K{}ffl%iN~V+BjuxvYs`c0n?E!y!696gFgvM zW@&>5#U)AAnfEgs8z7xyryy~>k=aYFoL_S)d?zEq@z zlvJQdXXKC}%Ojl2?*U$+*r+}oTYFVBByd5Tww(||vQ9!UVDOgl#Kk)*dD02NeCV*V zoH7{}-`zJ*%XG-`nT?fF!4D{8(LFSLr_$$U*Ml!e=DUJ_E-mHD?(cP-gG22wclV~u zz+ydQ=FfC{9Lgu zu^A;Ur-g78g9ZS?QR=}rI9;deTj^O>IHM2Sps4S;hUKSA z4-3b4-mXs>ltAihki2@DjWSqzqxW7ZlSa@fBpK!cAktzW;HRq zUN+)btgo!9Ag;wW<+NrVCbGuFq{Jk~ZrL6*4={X;ARD6{V5=xCE*oMJE{#E7+~j{tgL9DdZQk`2pH@`UKf+VuC1pnpiu?O zdx$qTD@An{29a^Krq*{$d;Cu(VWJt`eBJ~Cu_x%cff z?4!R(K7C=1m{MRtIF&;G+%R<@87~iK{pNQoRc>+1PY=^bAK|<-pYNulM%Acw z3M2sA`_O$WAY0w#-p@B&Q(`WS3|PuQe{D+%Yv;6{@kH98@jaVarrUzr)s-aUu)SJO z&BLSbPaj9^RydMgOn@@<-Y~p>|LRTsR0LI%kBx4zpRKN(_}65d%2c6l92_*{ITpL0 zf0OVO!q(q6b+4niUU+-6F{X10T_S5x;QrZ?=|;rhrsThs_+dq?5M3p8@4zELJ#fWI2Ot`%IL`fD|`Z)SU;X2c7s zn2n-UCvaPY{ByV&8H;Gx*?NsP#iXC}<&$OTy~sc~c}hmvC-Iw;Nt!WWa%%h^_b;PP zB&6K$&4^F&>0+_#OV9?P>C_8MeVVzM*%SNtfIUeIWp!9ENv4uk1(41& zGgU3FFn*#}#>q!qSoXQfU+#NkWR?@(B_kkgqR?D{NT3}H2psXd5%e&T-!_qbep`RG zC5k(BKdHsl2ynwZ6q1!T5|Vofy^e<)CMWB@Jo0mjjf)L!VDNuK6x`a7yC_t94E3(} z#SSk{%mf9v*UDDsRy@p`|6Ob@qa-WWEk}W(XrB=N(j?^0dB4>`or?SOKlI3jhO>F= zf1ZS`@b(SYtUFtlSs)Eot{1`@2EwH5tZfem4-f1!F2xub8CilRwKaF43|ZMl{gKo^ z<1(9!eqW-M><_2p8)$5#&6i1Qhmm zwh|#Z<>ieE8+KH8Dy}n8gL7$Qy5>U-`Y1%I{Vlz8M?1w7$~Sc&&)9O>9@F7y5EfZ%$YuCa;Njq5HD9T7 z8zkkya+~Y)mX6zHqQ{Ipi5$R7j@l*ztd$vYhuKIjH|{vbW#YuG{Jg)Ba`18N$a8JZ z3RQ^AcaQ}+6MM$1!`&I*1osynY&qW?eZzq3fF<%qB)G`kpO}LQ)gOKQwB?H8jgHGU z7xvH^Z=K>)_P}4#B+u>#++Ua9y1#-X-}h#Hd&sM{btNYu!+5qA3h-$<_fr7(1M-1m z7B_p%51mX;inUE1(Cu?>hvs6eiJbgSvs^hzncrdGMeTz;RKyMBcrA+av$Qf2$Dg;^t4d$*ESQ;H`CyNW z!06W%0a|1i5&CUV1{|ii>?$OE-di>*uHRFo*8l~T{b3LNO`1)bc|FLks=M-l2me%i zk&}?tLSpqDSw;B`_6->OB}R5kma27IW!W!>ghwo|_|t#wu(@%78Ae=>xM~A<*@wi) z^-aVBS2l1bnJ4VVot3 zO;TLRAbpG{&rIOId{v8-Oyin!>yCtF0F|iQZIwT1#MUMweyDt%-!{1*yQ86MbWiJm zPJT{PayOv{F~%&{Hqm-HhP64ZMDOmfi#Xw@YHoBKc%9|ci(0@fHIkm0J_(H4yJyR?}@iCk)jeSWeYl7 zQLX3&Jc(Q%T@26axWk#aJDmBYZ!M(yQW65$OR0#Bi4*aB=-sG$i}AdD%kc5K&f4>?x@f5jowaElQaw`)Z-OjjKOeQGke7B$| zcYVE;(p_Qx+p`0oruTtVRkR`*mY*&ZDC>XLR_v(aRGQzAB0$ob9i=B0O?u16>z*lD zQ|Z^=7cV_szQ#{JhBkCYsTcb^kV&Zie)&D;6Xn;I!FJ>9>c@l7d<2sW1mlZdsfm{7 zb1(8gJPnzbAp|~@nx}Ks9RrO|HEXL%Zr0kk+h&&NTh3rd_LX_4?d(FmBEbR*EiC-a zdVLh}p~%XCU>q!2I!!VPHMu|E&0;o*kLw4pUG#LE9P7HAX_%dRh3j+}{6PTR&>N-< zZ}_&%|M8uEldiI6q!0U-jG?YWi~A~`6QjdLrqn zu;xWLw@_Q!JTu(_hqBycj;Fr3=~F+q)D9Rt{$N5SjwqQ7U{dAD#tadG_-{lbui#*^D2-KEC4=-APTJchT|HyOFe z*DFpTcbuQ)+@s{L-1pj8ZanlK<$1{P>fxnLu7%maOpO_4A?;ST95t6wD(-~!1Ik=U#ZXkZ+*txjO_s2i(Hyi$QgmsV%y?qTr2mFZz%xc@`IB?o84Slmv zv0oTW;n4$1x{M6{nuA~h@>AG3IQ)s55{+hS@ z3M3Y9rerzI5TwyE-WaE|GGO*!`iV3Z?Nzm|g7q(;!qP1)T6t>}q_079G-2V*j15Ar zI#o8a$n0PyrD6E5=G&M*Brz;`8Hq>bc~ zj(Lk!%h_694yd3i6u1PwaDD%5f7+)b@o1J{f6*hrV@EX25$~UA&WaqBuggm2;t>Q@ zTff)Rtr!RXPSdrjP57k>aBH&d&sd>%9D<|4;N}rT|APy=)_Yvsz-WSCNefTaD1+d^ zRD)78x*PYAA)+}i`{|PI?1Vvk(RvwiUa4b|84rM(%XJ*|z4zRN9-?DMp!>Fd<43OgBHnAkI5!~uJ<2P^vP^jS6|=YAW%*7%KrVev%V|N zhg$_`Y;<8Bg5hLu&0Xg-%Gq9dcouVVe3IMPP}-!;3}^0<@8N2X;Com3r(Eb-P`&&% ztHhfH(Qc2>){vYLIWY!&lGQ7V~530ZkT_=0-Sz9^biU3JKw!e4lKUIzV zi72tfg5HM}O$Vr9;_pEZ!gZ_A-Fh6EAa}*2ZslWI8sd5LnKomxU-_5S@iCoTxvp02 zf^_r6Rg*;`PM6IUz3uV4^X2QY>5!T#Z0ZN)esbFxlZ)3a9W4{146&|0e+HP#s95~% zR%`{GG!)g}&;>C=9$g1LGW2vzxY8=5;yxOx=ry?Kr^w7(xIQ#D&C4qSIZEFP3ywM> zB%JrZ3J_q8N0eAnQ}7gO47-kJHYjf2wplkDuA@iBoAwDSKK)6^5u?O)Uc|>t8@G4Z z0ywM?Hh^2CVvBUC3r0=O>V2d3Nn=IA^HMTBqZx4Nvb@n*8v$mTVuZ!Gn$tO6mMeH`PoQqG6WK~VT zY@(~hX?&`f5ICeh$#k)P#FRTyro(D2(r|;q&CNCY1TkWT!7Kbmc(^eiOAbicNm`Fd zp0%gb$abj|KEnC&#gO}p@#W)3hyr*dB~M|_CP6?V-tmc;?`ahmKUBnC9iHr*p)D^j z&x_DxJvXAo!D;Jgi>>X6IAc*YyvPdyDpMLhgr2lryUV0;lDoqP?csVva zR9$b}u%!Lq=-|cgO_leTe>T}pdbjeeEMqI$uXdz)c((P^s@?XEQYKH`H{v6F6w;Gq z<;2CM)Z}#3LLjWQhfN#&@JCP-@!lA@?O@L3trqdi-qPjuW)!naC z;?WsOv|62tijPAUPrF`Y_FxMRJvQ3{S`{{yh6)8;mUP&|;)X*l&Xkz5WxD^=!001ZN~)02zvAe%)BkMnt}-^=Y#EMcy*ShM zxx9Y+7FIp(oZ+f{3d_B5-&o%qZGr&32|1A&9BgbPF+WQ%Q!P_%ZP(`&K0H>-)Gt*V zqCo}*m;%BBcSC{M0xui>n;Af@LmJ=aLP0{O12`KzrK96vKc``!$^QC-)pjE|1kRkr zs?*wI?kTfC_dUo1binv~S2i ztln?vZnN;`K*mMj!HS?Q<&d7vxLw3GUgCn-!vSw&%i229 za?uN07+4@3aWIzg8W$^3_JScV4^Qf#%-!A(yJs|$tf#y)e$Z7OA9 zOX^Da_&&I=q5^|2c*e$p+_tXg<^BG7BIvsJf_`AWu51TQzRk5yO+VC1*X}ztc(= zSwNV_2O|w?&rd^Yz8bMIYO%~!f$END1Rodc3;OPHRp6H3KW|qDX-teV%k)2-9Zb*q zR;1Tp&MmWGViOA>VG9q3HbTnw`kaQ{^7`D*=1`M`XH&f#}%V1BZAA}Xy-fUm99sXK-gLZ7lR7NNEd zjZAsCYb)6|WBmJ=h0apzipMnj9KQA2<83X&)xNk0NvQ@rK;PmLf7;u;9L25SUvD)iiD@j?$aXs=o}(Nd6Le3>?T@U2PI|EMweMpA_^i2u4-`kGO(WhPK5{ETJJ_iDGpWnnZ{G$?pH-!v^QhWaJ>00$NM(N&60 zGj+jqkU!=VD63rS3w8s}4YnSuKVEx%*O1fYn5udiv5_Oqs^6ksn;m(?GA}VP0A3J? z7^r?GrQ9qH9nKP&JvsKurs<1dnW!je(PV!0Znx{qfdTTaav(Net5uZYefsUYe0pQo z1RByH>37n~(eFdxqBL9SLk?s%YJ>*R{Dh`6+4rr}+4JP)!o0sjA&q zUI#j^d_d+iw%INj3Ug&w?eZSWf zEG&SZW!rQ0bK!;WtOq_XI=ir|y9DuJufmio-5XM>)M680+^<%+Ow3Hp)DN-iTPxvb zczTl2BkFC1+&(n%kyL|mJlr4AgsP?e2r;7V?BM*1Iv5-IE7_y_OXM((*^q15_>%$uClTibzsuSkI1m>&(&E5 zxGGJA&-}S?ugL)=x1T)_Au_N`6XyUh#amYp`n42MjS|yWvl7wv(E|gWaO;B zlG8H_uFi%Z;5i>dSB&LnJfRzQ#K0IbDj`5hB4@+mXAx@ZJX87mgoGoSld?)GtafR{ zK%mLWsus;m>%XTA{A(8baR1F88Kgm_(HvGIHkNmMY~!3(zBqM`%AKITTjW}Cdpd#D zxA*qybT8$h7HrD1K0U@IDOJfYx-!iQRt~?Q?RFp6zuq(3iWq<41%| zT+iKpp!2XKdc~hbQDouFdaB76%g()XgHK#jQ&SpZEb@O?d(W_@x~OdsMJym-0g)~$ zT|jy#A_7uFN4kQvKtOsY3IftQNDaOB-g^y%UP2AML+CY-iI30oesj%y^JC_k^Dp~4 z=Vb47)>`|%_g-u5hA`0kq+NKT?(J9Yk)tZoPP@z;to&B+GG|XCrN;P5ue6tV5(m|^ z*SQpMs%=-i^HZyNZ4Ifl-Wh&+u&%atfGhgw=*XOuTcZ6~UK#oZ3^FYClrA=~Dbmmb z>a1UucV`xspGh~@Ir1iq*_@s)j8^I6W`oApQHUo=kGgUGoLcucHf^s7wH-n;k}nhZ z1uU%c6le9@(}i-QO}nE*v7dK~0WM?L-oWAU&bXuEU^_kb8{j|>Q`NR-`=$|`ic0;w z`mU00^)A{xizg?q&o6j&-cvD%A3{@PyOy{Jisph!CBABB?oQOcg%whfxrN zq`3W9*nQ$9fxOtHzjB0=3s~y%&zJuk;o{Pu`RrC07!tM)UP)cwJ|(0$u^1mHOXIx4 zX}B#l_UY1)bf5pE@})uDY3v?S)MQCcZ50eJn52faAS$jkuC%Y)%;IqOjE zTQttDRE-|Xaf3R;{Fac(5N2*HnCr?)Us~2yq|s67WvJZxP5zvw!Betd`7ANBU8>qP zuP=*v#ey4b_|;NAx9Z*809i~i_YiY;Q?P=prI2~W?|b^4v$lqzV%${)WaZ_JOfG_g zE?QcgP~M!Jl(6WeYj0Xv8Iqirwq+!z1ST*TOoa!U5X-9en?j67O|AKANW3Z|#MeYu zC2a!)+~xkLDQ5u#Sn#NiZ&;GdrJp;PP#P~qMtTnWdjWvGv>^YVH~&@$2`>kJ zd(qhCxTko4IXXinKjTlGE4JGnCsgsv%7T+N%R6*MNgk#STE5pdcp?;yW0Fwqj6!n&e_QB$9{UgSGZ(94kR%&BO$-6k7#Q)YKg(yf%7}++;lMUJ{VJ1in!CKb%(jelWySo}V@^&d{d!cL zGrK5j)JyE`mJMnakk;BD}^WouUlQSmph z%gt%$B^w(Yy}c*q5|xz1U1MtfC)>%>XtWBGypWuuby zrJ>)N{0-yYU*Ph34@A_~_p zC^e0im;Fxmqy>jLIpz2Zb-2LKz*_daIn@R}23@5lg=e=s|13+Qq2Y10+lW@DrY0fn zX+53leC0|C(%;RFnbC2bc7vJ~^^S0DOVJVz0g}Q1*Q|j3fXHZc=r)!Y5D+Tqy?_1uyc{H(u4dxu|^7uZ$q1x3#r%mTT0vumE}RpOd|Z-`hf){Mz+9>+WQfr{RN5HBD4W zTrDlRaNnhWO+TW4>9jdqXH))vJ&t2#ZB<30D-WEI>tnd}i!&z6WZThNPF4}tH#i6z zz`sv~Mh=Cqktz@+iYd;dO8rP*AFQyLPLv(dX5`TO{C6x1vEmqvwO`$_2jFi1bJ6*J zLlI$7rEBet=ik?T)Yrs@Ew_nDP(72>gnk(Ff_jITBrUuTEF?>5(YW2Ui0bFJVo<| zhlNsVn+2+x6MbP>BcG0cnTk$W%>jD$wKje+uu4of)0LHlm1bS{@fWixD7;Ds2u_rc z%?fm0tQQ%iin*trLv<36Jf(rM=PEhYXv z!Wpgd=fKP9`1oUPcFrHcr_61Wtl9a6t%LF(Q`T@~J3L*SQN65Wo9l<7xs)gPqXYdLv2_`6Yuu?h)nztcO5yCQPA9UNfMYU+85 zXc^VWh)64u8mvtpz@iK6EBol_8SU_vo<8l19c6QzGo>jO@n|p&PWm+5vOnE81DrMB z`rE_(zK`7d3CdxbDK(cH7u?LbxwpiB07Yl>rw~j`OiEOqD`<1r@xjrF^LFR6fnIn_ zY^lJYJ-jn2^NRR=e4hFa5;npdRc6i$SQV*`v^|CMBVKB*8?|;^N^+9Dl61dg;%ya+{tdAmo3O zEb~V+nJFnsJgQnUwPslhPj76GY)#+jB*uh`xy`;_i&an0Xte8ia1-~0=--?WPoWM> zgp`!F$xaKM>#BV-W%XavYC%fG-0J;PAoqC6^Iy@&wtGze|C>hh_q_N2Pe-r+d+T|q zd44|eF2Z(#!!94M6d(RiGR^m9#5kc&t-ZLo_wgsONpPk`%r zK(048jgBXCE2}G5{4j{DHJ%T9>|5uGC*P_A!C+|u!Jd^_H~a2Z?Sa!+n#FRKkp>&V zH3_fj{(k%fpDca=^XBH6sJ@k$OAx*q7oQgQ4FvnM7NM@Gp%!0do)p_`Q0n)h&Wh0* zxwA6yL0MdkoAnAB>4$1?7Y|%n`5GHcVQp;4!uaZnneTL08d9xY>DC_~lN=}B-Q>LT z>FLeHOCuwV9i#%Bz5*8iAku+{Cw+M-PfJ^>vx`VeBsBl~FY0J}Ss=SkdR~FN97n;_ z`Bvkgm)?x*GzV#VdimQtCe~MxF>$54$NoAT$(%SihW{2Ue85?1O6!)uLP9yCUKT%F z4^U+wQqSW;KfZNbZr9FmtyA6C*9WjeRXKhBUTB%h7_5FC%cw^zEp zEzAK`UGh*`@YmrteEKvdmsmyOl~h&mojK;#JgHm5PxJf2mJDQG&_(O zP#}g_nJK~I{H*KG)%r`@9k()GAQJOtTxG>xL*z^Y-w6=ZOGGSW@dgh zHm;V38hQyG6HoN2=hg=j*JL&=%|YIRDLddqk%k9vwuGfP+=+4ujIf zERFoSljk=cCnQNB+NA>+inFK*( zzuq8_CqJLPVoSi{qqHJR{2Q0eodPef+k#rkNPxx6z7(yc$m(;Ut%c{isl>HOsx)*JF(NZwd-n+ILs9}iMdP&XQ*uyX*A3nB-t5d*dZ>Xf8LM| zRUF@8pKb12Q>!k6_4Zwpkm)F@7SzugK%5Px>s&4`Ms8JE4~6Z@6{`&+iXz5iC24hc zK(n3~K?#k6^L4hlT^jeF*vL-ZRvA%2&RLUk2e$mWf6DM{o=yAAd@8FpvhPP989B~( zRJie93Pa=O;wvq!lki)mVsr88rmMU=iIR7Y$6;+%n)ppHOVzg`N@&CiEyWX3O70Ag z^)J-*F_RE?Yw(751$t|kUra-;a{>|ys5hmS%Zh4LB-p_h>Dh{d^Xt|> zAfg4SxX*dmN4zu7W4wlOJwu5)T^1dg@~DkdASNkh3dy4V0|MhpV))q%K(3ePm3^_n z$wQf()?AqWf}QqBcGWT1w^tZEzE5EsVI~1CpFP9?q517KysQ(z#4YV|6OSwHu`hcE zt)|$CdX}Nt&Gg5)LmwGpEKayu%-5&V-ez1y6|#RB9bGEJ%}53VD#}qdJ9b7W8`blJ z2Z}*AtKG!--WV_JwZ!`Bj~i97UAc^gWv!{*IP;NZ}yxlR#3wRxi^_bq8&kjl=nWhI5`_Y2O6%I=gPw=e! zOqqN7@|p8H7#Q9H5~8A_niOlfLMu#VwW=jwb-m8YC=hIbdbk-*QApxlI7W8a;zg~H zR`Bv*XLW7>R`6;X8Zi_^HRy=b{GzHvL33voBqRn|MhYo9o3;(?qn*~_~$o0{9hFK zJwpP6f%J2{{*D#Mcjzs<0B=3|d>09+octWD3uwOkZ#mb=3G?z|D};7uzgJ&)M1)YK z;qK~5f_ijx9Offb1B~^6EWNC6Gc!{2_$rKIWl4kM400V;^AxC)PAV#x=bAj*9Zx8@ zj9;qF=)<)Ir!<^O^RbGJruYkKZ}j_4QCN!md)oR%>}a!t8>wWb9Pu6&pK@cuGu<3- z?3O-CIX+XB?ILBdx3$=@)J(c~dVkz;uGCxFTDSIOiTn>x{mA`S*7(;XC+BbrQ84w^ zP*yc8KsJejS8=c(;duI5Q%Y7gfSI0I?6I7j_G`AzE5|LYUw|$91vv{}k_AMcK8ykj z58K$>V>jrB_dT_X=5lApLjTBr{K>nQ&toPj$7>UUbG6=mLUcWqekmp$SU$1Uenp)> z6|ylF?V8MZy7P+hRsH2q6Lt#H9!uBiBO;^#<>VQ!ublhd`HMrV71d{^ynWf{%a1zi zs~;BkzB@ofM4Rr-&O2S8{{lPakU|r4a#Bj+uLmMl9MM4v6G0dx)@f}|7W_GxkkTH4 zu^QgnolU!cIA> z*XZTI>uPE(^SBXm6OB^TI(rBRWfyCprMZ?-RY=;B2%JBM3~6WiItVR5VMfC)*#AGDVoee{)E(FYalpdY=y6gP|9IbdBi*_I(m-F z;~99pmvV4>Fga>+L|fF8OFj7+8#!-LkzVlrhM7>LKNd@G^FE(1wHTfT<>ZVEE8~6G z(Uy=5hS`Hhc5b#~fej+L`#p+tSZsFim+rlLua;-lmWjpp9r~ey9%mZezQL5^ju}>% zPB+JrIFhd_W}=^mcM=nIU4<nnc*ny7ZWl?J9QFZ*)neDv2_AKZa9 zcVu2p*6!(FdHk+*@m9KMpDeD(M~1mJGy?7p>F5yjm23bj4wm_gsp~z*+s{Oe^*s*F zCU@{oK-0y76`1MKZhMksPZY6U{ur_03&>ok_A#DhW0s&o8Z5RO~L{#aN^xb5TDC6>Tt+Brql0s^d5v+M2AG z)EGs$+#JUVH~5D7CDX`Bg@AXb7ZC9L(}`%@w)U<UdDZrm3u!W&(M3)7!{j%#7jB(GKQvr#VVx@t$o1xGW!Q zeY#mV%=BpQ@~x}e$@NaKINeM)G;F$eKAEEw4jcQasDRX@1!NpDI#rAB3K8xNX=y2k z&oR79W{kaFRfqR)+H}^)?BrI(3yF>}=spwVPmM9AcWt;le(WZz!|!@x%SSFMW_SJ~ zabzA|tDbZjp9j)a1ZfuZKd`ztl)8wqzV~T-Y_{+09w`l^M?ew^`eb4?)3KUcWxU!z zc70fm%i3V)xU>$r=IX)Vgwgi=Gc_45ZNM$Arz`lmc@9r8ahWm~v7bzD(LH{=lN*)s zTK!f=z_Da(RHA$+)_`}Iw{t?5CrQ56Ci94fX1>nO_{!WTYuf*omyNAER@VjnEqXUe|JYtJ2n;ZJQRAog(Gk?69~PfR8_a3m}=D z%0~J|l()~q#fyz}H<*Lo#~>zr;NpxMC>2BF;eFdjI5-QkzVw=2019B^T`%l2)@c4@ zuOe%^wogKY^8y+6kEiPBkmjEZ6|77nyX`Z$Q6r$*UZzISa(UZQBcDigTF^s7W5Hkx zsIVP6-@JHdePta|HHPr)S;J>l&G*!HjgN&|M~kd~L&5X?8?R15Q_~}ej#hZIhHrc; zGg{cywSTJChau;yVLUyiug@frU}0-nuf5H7G}lPEwDed_M!Yqxp!CYgdf0zgPme;q zc&e)DWL5f1P#ksF&Ns;UWNOi;UD{Q`6yzV}+|Ksm z7XD)G&daKXCVxW3EI`>-ryXn&m;GFRQ}~4#^X9_1oYsWKM&VKHZ8i#=7tp_hesS+? zNB`7v*mW`yuUcP(o0|tT*&_5tXk@uQv?7JHPI9;Ii*k5)DQCNoBOD_V-1oeI25?d9 z?U7Ew8*G0<)$EEsq$fEC)Cf$HB?dzdPYGQgh6bbs;M%3zQWqxlz%sYN%iws2kb>MXtPG;tpCQEQG1 ziHol1x0VqGW1<5|u0%Z`O4Qv;;YLVz8%yPUE8akS;`u3K1D(YJ{5mt7@9yt0|0r^p zO_7MjmT6AvO{3;Obgh zn=&4kp_}u8bG~o&zFpwZo5Ffw0Rc~4PgGSkN}U|$9S#bDf_N09p7zQ1Sqgc)k;CBG zJb0kWR~-B+APYw18togfh2=R&LE+&X=7dSe$@OrK6ruJaEX#zan$+*~!I_HoT1;7G za6oWUow0|St~_!AY)VX{G2gN<(Pvr!hg`;-RIHukYb&4t2-s{}>zu>(X5`c)pF+vK zkOX%(ad|aaH0u7o{nb+B zlk$hLF)>*=z)fv|4+>gZ+Ok5gUy6j*9(*-6FKZbpXrz?=_;JGmwAu`ibkR!o&C4?| z$;M4P`ch5PqaqpM0VZfP`wj_)$16bg0=3`B*!=^TYx@e@A;^~Ze6L6^eJ&D#0pB;m zM66_9d>|#CY6mcy?Q$sH&c6J$vj~MVb}vp%Rt*K-#p$6u{0D`jZ5EZ40k?5I?_6Tv zrX>H@LKZ^PvrwECF@KuehcN#x@_s*;_-~Q-5k%lm>w*E+&5^`bPTi;YZ!I7yEIvNs zENMoT;lYCk%*^I^T7p{ST141qZ2eBL)5UiPg%2jDW+N(UW#svdp!mJbio=Qr6?9bC zJ64D;{=5|WEcW@JKVIq7Bkb*f5AnEvp85pRW?_8RVIuJdhd-*oNDRoLv{JB7k^Drs z+bu!=^sj*q6Ke+5({rQ-xNc38?x8NppAThN7bh=wzh-2#%j{m(1EA`GrsT04ca@`>%utpl+=K_?>+HP(Qp{Jfl=zFu>4vyvaZ%*?mM#nr;1 zB1XnXB4Q$*C{jHmr*kj-k(`{7@tQCwFm!Zc8II%($ASDTj=rg0iY|s_jST z8n46#uLi1w{z)Ws?FAiO>oZfete|g12M_!g!yg;lI|wpaao>G-aK31_d@=f_omYL_ z*Kx=2Xy-r^Nvpd#R;TZ6>w4*DdE>Y(w-_T_pjw@>KQzMuwd>4~8(qr_kY%(+_F&|A z)YM$7ELElC+_0|WRw|t?^H*c5;YRboLQ|krXV)4=ecA2U=HTLVrCpdP<@^PPjC<5} zwZLLBtIY|}OnY;q_8I7(kwKy<57NkWy&h7Qbn$6u2WZt9b4%_y*pWs3L<7pKF_+^O zzoXdtZsD|`TntUCUDrcy^y+;jKb+sY%bv*PV=It(u*hxd2p(nNWbW-8EjNf|FQnu* zc?xazY>ZJ?KbmD?q~zVP2RM+nY%T(%phA~5@V8| zQ9Wx~Y1u>Fx~WwtPRsfDrBZ)2Z|bP|M+i~y;Q>Y~;1IHUXhN8;4sh6(a#wjNx;s=- znj1ch9K>AcTIJWB@T#eCh}85YJAy|<-WGg1f-IYC!C-hW%+(r)x`xs(|3FoB6_(5k z$h!oh@i#0y=q2a%lRk8Fo@!(kg8^YUCe@h^tBJ$c_eN+*iIM>IUyw9<;G}fQY7^+r za9?aakot_^zS*bz(=zi>^{6QG&nhY-t#+o#4W&ou(?XfXOAjH(XA{)-Gc&Si1ndsy zkJg7dhp&a4qNAf5UC$J$^FaiR3WBZ&4e)EXlf22_fGT-`-vpdBDmH=J%8=eJaCL?sa=!Dabt7o1NFNAUN6?3l%3dRLRybD$+9IKiZnT>$lN!Gqoxf z+qIG4ZGQLti4a^SaE2h$!TGTLu!u$$7CP!YW0L^_4a$ro_or{oFotfRW(P#uKEQW` z9PI~lmkSyWTEqx>PfC7$qgGG|f&TDL6rDYButy+zelxkkZoBKci$v#!#l*zVc#Wy4 zP4WEHd-G0Q&wd!`-aL9oID|Treq^-dzSZG~WY%g>^QH5ssvBc>xSdI3ouR}DfhKBd z0BfF&0luTq>}p~NrQpEuxX)b`<2(6gDbKRsl+z1`QiD~hJu3sE-?vGaM@22TkEN76 zVo}}64!~I~%D4Q&Sq22;4g9XK=S<+<^?ht-Qug2jP#+Hmhk=a^J~~q$6HV$SOD7^I zD9BECbC9nYvu4uP+f-AVRM%!*t)>=+nlBQiL^OP9C*Zd(LtERSXhc`>dtf6Yo$ar9 zM08d4u2<`wc<%Xe7zmu>&eywZ*_hF?7AFVq5gI<(IzT(Pv+y(!~cH%$wz7urBbo`$c%yzy=V(Ox>=es}RXBZcxu zlQ=XY3+zx(FtIl!37@k#+iR+EgYK&aOjVGBD3r*=e?4m!z2w2m*RHoZ%asI6@QWf=7zMaErb&*hOkyyXOh*qc@&zN z475SAV+z-Uq5B)-a(PxMEWY#9LKDSWastplZkJ89s~_=OG;<$fHkUP4F-FcBJL;a? z>>+UhxEe7ZLqCWFspU1;P7>jxi4B@k(7?dYi_lZhwv+-96kuxCT%nPMi-Q(41zR>@ z(3^X!lIrb842qv|8$BRAyK@QnSkF7jq5DEe^ePEXLmtn-$9`I#pRYAlc9txfz;Clu zUTt0D6&4Y*H=70D?GC+rwjpy;E8%wX{$?=YN66mKWREw&3L+3R!e%kZK4}irNzwp2>#wqpOo7jX){9wy&r{?O_OZHDQn@`e?JFq>M>YntT`o<-_W9qb*(cr6VY5jHnGm0eC2(}^1XCVOkk zjh|5=QBhHK(fRBYoUY^H-qy_mWne(HYkRabap+uGYIcP(++s3(y?1!8?sDZzGvBVG zfe2)B&zPotUn)Q&|L*|6*#cw{Rc9UPUhQZz*XqkKLRa(H-@(Byzy=)FNCFQag9 ze3DsPN}bTzwwP|AUhrmc*+)`3xwO$^dzHIN#|$_^RG^w0P!Sci0gDi9 z+vBdR|F|-nP!nHvm}e8&hd-ZHlGC$XU4(=jxndcN9tHpMxhZGG_FUOXMzDnsB@-K) zhYfs*@ zPnJ6aRvhhjR$f|5t*15bD%5hf0t|5Pj8GEa9>y{o3$>DrGae!Kz1-{iIkLgh+Tm`~ zuah(susnOq(EuA9dYnrP2Q>o`jft_A&AWB0#22Gd-5mmMt|iKg%8$?VMMjmDF&1aN z7lCG>*GSK=x~|oRmpj_(g$xfVv}f`t{@CU(?VlAqJX1`@lJs8$1NXo)!|#RptaDSl zQ2V(C>+B@wSB^XVUA~f1uK0@gUT{kXPYjQ3P1fd{3mUm@t?V%*_67|bxmH*JkG`0q zBK4_-_;NLiUA%qal-i@J_hJ(vL|dTkhp4$~*HspeJ96$E8x%uxSCpa@loSdyLTw{s zmYqRbSYY{80vU;0?}V%|TkPGP`DxHhvT2}KUuCfhJOAknhGQT{nng-K7_yqJz%%{> z8PZoolY6r+`-gu@Dy^(K3$lOIS7c`q@{N8P`DA%%nfbx}Zb!4>rIErJnt9~QSLylM z+O}cYo7eZoD+)d+&%$O6Ct6ZCO9%Z*>}R1nH#}# zcxa0Sk!sI}sw83=;7^}K7KylQJl!t`=2r<0*iHR@pbqcH(t0zED9lxrmE2;mFILA5 zKV=t<@wx8yzS6WtzIK) zf5bJ93aPuy$}Q))LoH+VTSQe-c@v?K&=-nQJ=Nhi7b2uW6ulZ(aKAWpK&}#C>5R}P z{=M0n+>L-K5x1S|BSzA_sm3SCYQTef<&*d-4ybBVX562-f>1LoHeHF0neNNg)&-VO zizZZ4Oqa@mKosEm$XG`3!n|OhfcT^6@R(HTQx@V*^KM`-E8Cn zQIdI7M1%W$AE}TVG6qDbqN0k0f~HrOc$8*2`Et>>HKAgcxL8bL`P<)emh zqRA)Ai7_6rtKcNDgf@&tH_%DHu|R3y127{LNS9o&bK@eHBfB(5mYu+nj0MZ1SHxL@ z&GzT#8`RBD!q#LG9!0pYGp35rQa#paZ&Tqaf1j$p>ng*{Omag|iZw``C|=LQ#kuHi z;+t|SE-oIeY7;iYr3=*icV-_Y^0$us4xO}Vq%~uzlZiaz{VRAdiKCTIvqz}h(bpWJ zb!6mE$8(iOA2ePLf16$}ze}VVp_+1eTR3~LQKvdQ>fNE&lHVytrRAf6fl36%gHA*f z%AzaUXE|8F( z8^De`Src2f>xo%6w!a>)TWS=|YSLPt^{+-8O0AalYiP712oFN(*bT zZ!N=}#-mI0tzQJ4j@5f-moBfb;FNqBVc)hF(?QWJ4^VI3F`cUy>$(j427A|I#&s5> zRMuW%3{@_d@P8cwukKEGPamyMVp&%yHZM-0X^82?>tZ_dI?V z!YIeq{-zz^em3z52*p>IztGIxY5F$7A+T|I#He5~W@v7(5qIskwMJ@Ypyz>BI=;k^ z>+m_>+s_s$`TQs1yih)1K}b4aug&hx8Zjkv-R@YJqE=nO=h|9xWQnrndvs5<9Aefz zWe4xSwSXM$4Edb?vhIE&tI<Cg@u$II8_?oJN`7i{PZf@B14thG0{p2gTNC?M;8B-2#Yy1K4j zIucUs)!JJrT`4|!@`Sqz{MF-&3R_o>m8jtNC113G_Ji%)1A7QKzQ0Vbh!(jhn0k>% zC=Pu1CH(QUm+j{&MUD1Xue9jsI7^2JE~(otK1fOD=jW-=2?Rk5Q&W>^&P+=v?+Db^ zGBPr%Dt!3(iKz{M^G-Z?XVPi)lo}k*W2|*u5KMSos(c27Dy#Kx5XE#kT2D?a_Ql%z z-i^Z03;6GpgJueHz58Mn+kKf?n0jR8thMT1_ub*~(_%&PT6X{z<&MX2dIq{N*)CH- zEI7j%XL6OS8qXRDS}v}f0Cn}YUcY&oOrf@}muh-N3A?(00Dc%g{@Ck2FLIat0rqY* zrgsjkRIeC?6HQ8*OBml8=3p^(J$IQ zLXdmWW;cUIwJ!JZiAf!$-YIN=ytX-~>Prk~U-Rkee4}6}oG}jX+MkX=<2SLa!gGWe zj0iI`f=;+?dB^+ix0hczp)S=g*26To^IIM$#(!@2z{O2BH2PZR!D6AYFc`<8ix?g1 z`L(eB%_F?)H`QFJn_!a@5^Ir4H`)C_2}NYB-mmL^rD$=hMQB5B!SV}Q-KGj_1VTwO zRt!&9QJRePKGIdWlI?=SWo=(vpyPk`FjkNIhB)6eJnlLn1BPKzU$+3#GS%t12||!L zMW0i$r5{gsPoC`%-Vk%JhW9N52XnD(Iza`*AZ;C?iUxZC2m@7qW-BJPWxh9DKR-L& z5#GbW!Hkz06A@lX8N*8I&%&oQ#x03xpD8AKxGsi$X}tQ@$gTgf;h}=PYXB7i zqe3z#NZ$RuNIguxre-c*Lpjwo6Gl8>((!)rJ)N|)wf^>GmT2XO+ZBcc{PKn#-z_RQ z_YukC%ga$lN5%#QUJE#_PymIc$L-r@zSCP zdyJc(MW?r;0y1;j9>d{!G4&$=Ye1C0-sP%#Q)#?EC_X8d(7nAky}99*j?fv#Cp+`n z^yFtY)mqhVSsbGv{#o<~6FPc&AFsNy9(V-L`1n!ntVl-I4MsgTuGo+l4B#F#yZ?YV z`;zy|>g`wE%bFcZ-^moEgh!YCfNL-`1W$##zSzjLq5KAqOFFano0f9EK*9`$pHWmn z_K?i9IXgRBxTaR+es(~_WptstH*W6I_a<5_hW0t?Gt%mPna~0&8{u-H($i%(O*p)h zPv;tPcLtRAG(0Tok%tUO))T4p9e{t)T#={K=&Ifq5K_dx>qk_ioCzZk&vcgCmP%7E z8Cyfv**t}zO)ZN?3}OUJJ_EIh_Y5}hD$Nl4BfC0&1JFj>vw`+e)2YpCytIN0o*bP} z)yX1DkrGtLIO`8D$Pf8Ga{fHk*emV=i^;v=s_W?bDyL+zEC3;|L*CryGcp{U?@KQ^ zy88;faeA6Vt%{DjNfRSuyKAqiwC6un0X4eJf96`&Em`*zwIugiZNKe1b zXGj(9aA#L3;bTIQY3v*i2f4Gq4IBcD+j0<}j>?RE<~CJFErRi5`iOV0*4B0M4e1vz zw#MS;s?~+_=Dz*UPLZP!4&%mZNLH$&LnPPTvmJfqQJ%v781r(rV1Qpf{ zcI^%ESnHITNpN6Mj~gl{F5K@GM&lQ>?XDZ-8Eb8Z!AUiWlv7_)d+K{OVQG^~|9T;J zGeO>^dcjZrz8sS;;fe829#I^&16p9S@1^y;9pZX5C{qx0m{^iDY6eqsCVF}{_v8Zu z#rOJ(doA$}NBjkDhG+4{hed@m?C~P>eN+?u$#TeqotRtjE&i0dXghwc_K9z&u8<;5TQ!!g7`)(J70pY@?9< zj;M{uDnv%c9(EfCXCHDyM;G0fps>roao|_Y2Ab@9aua8IikjiKY_J&c!m>%_5^E)1 zzhvL`^fV@eILhd4v$>z~;CoIRZ>Wr~4qcFZyQgpi_tgVj{4O5x&!3n&8wiL|6BPwD zMyKd@!*wjq3h09LyeEC!U;Qx7l{MwH-V<7WXAQ z{Hj<_UO|R;XgJg0amCGyDLnmwWwMy(L2okN+eKcy_fSz$v!__JVZXPx8w;hbaj!Q$ zivT@ERE?@k^Og_=hGbln=c{Rt6;VDTB`2rkE-=zul+&OVECF{VvW>2H(0BA5tvs>a z3IkY+-2ig+jbxEOoObo=j2+Vw=T@bOnJ~1vB|Ed%!egJsGK|QK@q89ppLKU!H@CiG zr)%v-Ld&)j>DrM(f)lyAKJ%-ppN*s8|E_aOTWLktnaaTDqa3*^wO@@9KEj z%{8IR9#xoLL{3FMU+%)1_pA2se3E)$bUrZ1Kdah%zA0glYmZaw*EL#Bjl2SjH`j?y zgF$0FBja{x7;5h__xg$|w8#QTyUIuFO51#WoT(=Y*~kgqV~2w#h9}27cY9El+ptK# z@i#0xiH!?rZ()|h08#C#B^+5Cb0S&aaF5GjgP0%JLQa{0#ZeF`Yc1dg19spU=Orqb zdxs1ar)wP>s zf&(!V(3?*#_Lv{X-LU0*gsFhVuL@h^PY1Rl1CI{+Vl!UTXNOW{7N=jKcXc#SN}Xx9 zu~Xwd5O#30a<5n~Ph~#nknUQUvbZ}GwI*d;E?>TkCI>qZ!nPu>9;QI?$8ICDJliWU z1Hqm@sY+{w(k#woJkGPJRA3u#_`4gjROSS0e+|=J7ashEC-0~{xtTt2PvqDo~ z$o8nSP_D4Wrot20rY{I=G5yUKE)T3^iQU}vXsrctNLn7VfKcsqnT ztu&tqWdLw-oy>x7hE|2g7oX`1LXDrAdEBkq#Zqnoi=q8kyDXDA?j0W6)@PXq{5zNg zDZ-vSS(t*wL>f3d?#k~jaHb7)hn=2&wI?{gUC4oYCTt3{Th4Dd-B_Tu8n&0T zrrnI{&X(>>I{n!SzQQ|-Q8TPwX&ku59pdLJ{T!qz^>kW{-2#MM|)$J?a@1{_Tr7MMdP=6kRv^9L_D`$F?_qZbw8g{nFL#m^}7|~+}!s6ozph^{1m!M_QX=T2#1j@ znkNcFoFqJ2;E4-6nr#jMNlZT^@8N3R?}tn?UTGA!Gh?-d7~lWlYKKou9)qU+pWSB9 zaU-qNVUBt3 z!XrEYOmFI{B{Fu^JSQ*U6fw8~0;!x2ay148@l?WY?mz4?I(be1+Ptj8i@)cHEH9Ou zf}GCvv4F%3B^3?35DilX1Y0rJc(ryZh7E1i3XEQY11YHa0m1J23n)8vkQBfkak}sIKfCrAmc;#s|3=o{g#DL} z)j@msU*zq1&u=39aef-a#cmCH_`@d~b86^L=w%fqurv!%Obl5h? z{Xg$+0VrrlX-JA|X=`UiB?GSSY0Uq(768mwUe|z>zc;&xDvje~X2^9X{59j|Bn9%cIpz#v%#edmpXc^mo8(-}GKRoY; zj80Cbp`;}vr|yi#>1AeK3=co<@sEuf8_W5<@f-1pNH(?E?i0gn247!48%aj>Z)3yR z2~SmhuJ%|Cum1>pfAXW9lHpM3@P5yIUQ%_L-VtSvqlv|31m4jnk({qqHoGlfiq3=L z0PFs978+tTjz*)GCxWFzZc8=50fSGqrdLE3>;3B~$L9oo#=7qAfww%`U$#w+67yR| zM@Q8l%a;-1>0|@tp{FJK9?#?x`~73zyE|R`|NZk=EQq@gz{TaG7WsCx=y5t$=eTPH zo=$4CD)-p5)nfw}W#oa?cTY>723A|TpRN&V&Q@{g9c;B<9Rzl;(O{=Qc;~25+mcV) z!Y#;;YE-Dp_T-Ii*(EPXfs&Ie^ub1n`^_mlBQvlDASJGUGjI^u&0#R@vGiQ?Ll@C= zM2;ghr`Q($!Q2Vs>7V%K76V_j0s6L=w-6C6Z25qX{gYa=D zEq!l7DD7NhBS<}0md)f?O+`h;K)PD9K7^hQ)7RHqSz-0n((FSo8;be=VC*g9qHMc& zVH8mT0hN+gkrue6a}bb@p*uu6hVGbA6p%(zy1QZM5|Hlhp}U!ZA%>Y3Z=dJ?+wb1{ z!~TBtxz1x9Ypr9g3v{#`9ujQ53{8v=WYk_8bDt_vtMLemxEV=VTXD$jHu7PTVMXlD zHuzPOojEsyW0*!KUWt0wfaVdFA6Mo@n^>s!t!y?$>AY{|d90JtJGn4cS|iIXcSOzB z1T+*_P*`wrJYMtIg#{QdBV)K7Um9WD+8Z43`s&}+JqcnS7$C43>+S#D+mR8Lho`J@ z@AD^OO49WsBphBxXGz=gJp#Cr@!&n06HImIg2N+|-+3#}OoMg{%W8+aL~ry7cVw{D zC&ufeH!fmiEX$3Pg~6|H2!>9~%p0E5i?LO&@2t|H(OU7O3Q}lG5>gU@%Y7j}hX$Kz z>akbd($a1vMe6N~vpEYte_W*i$H3C9p7rI6m8H734?9pJw~3LN)R8^Gp;^~Qtg6Ny zSb|k$W|d|ii9o!XgjgB%s-$Mvq@fQ<*}Zv6TGkM83ByO!B>V`BHpmg#MB1;qX1I*f$7zpY7kPk1<#({iWwHvnjG&!|+bB$9R%LZ++PanV%lj2!Z-m_qXAdbUQcjnE z3d%>M{hU1T9}`A|ghxaIGZfc$_RbLDh6WP;Zlyx!Hj`2D(OFye3rs}VUnLd$;}7S` zzBZ?%?BJoEJgK<3{9%z*T&g)##ntlWMt+>S+1D3*iOH!7N|;d>7G~8+N(^xaMx~{p z_d0_-(y7;oiSMjyK2L7qE%(*l`t1>%Dbit?hj)@KS<}j(j$?oKpO*r?6AQwxg;=>* z8{O8sg_87)mfLQwZzjm3dVWuqYAr!iDjgXe0AOF_+$({%C1GV{0dih)xM=FwI1*c} zLe|ET(UXb=AgvGPGBZ1Os#Hn8Hci>SEOYf)rGIrKKmZ)^eFJ%8*k(bH_Lfsn@T$A> z5!A=pL-QZr+qEM=g)P!KFi@B83*#llQ&~1LVsicheWIjQ;-(oyga)(2d?`rS8-(_- zgPE$UsT;TYAm@ez8Tp2P7uc!DK28XQLZSSGbblzjaba@35UwIjSPi^rtdx9}k(bTesjb2|Z@TVIX=<(USH!t?~cXVPoIfWAQk##+kDnBiL|tOXKe=y|1q8g{9vYG{|1m!GLDGRoI;8)GqDUq2Fs?5(ZJ1$}ERv(G1EpUZERZEbRnMS{^TGIn5q>xqM! zYLqcw0n;Na6*YE>+3b0&t>Yx3-wa0HENtagTR zCy%4m2uzbz<7bNnDU}5AA{e!Us7>vli$$i1rb1m+LB%$pWF9~C(NG@tjgQ+-z4!Fu z+cp8?R!GxfugNsUY+O?<5OxBQEdL2mzmyc@0D$+-auLaCqPgsP06z;1$I`6&b)V14 zV&c#vq`JM`L_KcqEhva+s?^92?%&loFGQD`5`R3~ZDDV1Bfo%NyIrWB0Wl|xM-jlu z@gOT|slAm7ARgY%Z%^xy2-6 zcX0cmt!U2QomRM?I0a_sa#9fz?Tld|E+ov=zKIa~dY>p&OrcYsr(!q_L)Yx7+>{U} z+1crlF2J~0nQqWpl5&M{>4L*5y&`kJ@tIEH^<#<7*WU5Y&^iaTRKkSNNhoxQDYC`Q zapgfvQfix*;p{5vB0H##Q&(Aab+U%dPBhYKapM>k6BN-qaw9=Z-RKx-_|mXcZBxO+ zUJQI5-M?)=JBrRBUGhTBrp5F$)@8=Mg{+nIrmK3Y$$ivGIUQ$i(4~~F4a{r0>FnLc zeD985yoEtk<>ahyqRlmS;lj!3k2K9m@l3sd+2z>^5RLk)oqMIUrI2-@bJ}KK_l=GQ z?wRt`rB(&Le3vfkV*Z2W0m2Sxx4qg5`!_7I(Wc~sO7e0v^VKsWpFj5vkWCOSw|TSE zEM%4EJ{9)3rM%FaPuJKw9(O<74x`~rvA`rwJQ_}WP8;t)O>M=5-?IgWrzJPHeLuU} zl~tD86*YNViitI$@1UpOsW9oZHhtu_53t^G9AlUVc=_(_k@CgNT+kV{K!6USQ?;Y& zLNCaGiQRjOOD)ZTgDKKZN$xM>W{#Iy_GicTgCZ#7Sm4Rah7El_Vwg;NK3-nlbUL9+ zezziRb$z7(Y%JzN=#+-=bg|dgsRCgL(J+P+ytGi8o$jsSiMdiQKQ(O(r|{a0VCStG ziAT#JHpONxF0LLveqCFK z=lZ7CL|OTFJZ913da@Hc1%CFba*D$ZE$V0*A4og$qAQwzvGxgKO4O4SG9?4`N2b9o8FqK zO?A%R`)Z|>7yd%7?XzW>t{l6=VRBu)AEJI|EfBHewtn(1d(d4fun3zOHSxaaSq9zj zJ0h6<1%cSiEzVj^UpL;rxtz^or*l{~uRG65M-v*S6uckEow7*W8@&#w+}1$>xy!7CzgVa%a*Ik43h&D4J%{y zD0d5&YW8F21jM^!^eoz*d$n<*TA=pC$#AA^&bYxrk8+)%3#RZEGoNH<*=6O_nGxfE zvVd*G`n6*PI8-y0c8npli2l~E2eJ3?KH@VfQ!GJV#$}tD?)(@B1VHAAcw8vKb`yN^ zU9k{C3oUEatsFbW0Jt!6bWgSA7n&E98~K-ZLG7NDR)U|DV`pC zCwI=vi8FI zDeBvDy|Q5vdnuJBx2h+=11^MI__GI0#V`%@e3(BQK$G{~8Wxs3pRYQp@SXRtw6<~I zzLc|h{0X?5aN2xsn}j&*0;{>8(i>)2s75)@?`%!CFu?b{HW)tHpSm#jl-rb8Yqrs< zFt739?eBx-Tzsl3_X~sTF5sb0svh(cDFOK2J-f-_b(!5t)6n=5g77Ta1;(KQ$L%@w zvd>n}Vzo&(HVcRSc~j@+7OLYbzy1DAx^UU1-a|zF_CVE6HWEgS;aDUD8nvxGP=eSk zeX}y}r+o39u)!HgD5_Pc@}ov`x};xhHT@#Y(dApba-#H5e#%Qu-s0uYcntyXwwluE zM7^(lErI(}1!FaC`nq!|!eVUcUf{Dk)2-pW%D||vs0rsNMyvl zc`C_9%am@ppXt)(rzZrFYk`q%oZ%8nzy$@nZ?p0CT7Zv=WNV&lj1s2|a-zCF8t13^6MqM@L>`xkY*eOW zMxQC@>tztppuUzU_TL4=3{tz^Vf*^-hc7N19R*|S}u*fHAcBcFfW zk(}yR!?gB@o%QVj(x{!O;g03~JMxGaxM9$E{NG%_PyeSk?+h3Ec2=FOOh z>b3|<;nk1viNQ2Mq4|$|C}}AY8>|}a*x;C=2SrA!#^0z(<9brqbWikW3QZ2Ln)oMc zrB4G>*?#bwSZHafWic9uNdFjnXD162<~yz|KNK6KKO`Qj?ty!G*G6|>mIKbDDU8cI zlo=GcIGN-W71tiz*ucm6g}S+TYFI2dMyfLUgPf3risje5U;NV9yuci#s-QkUW?KSUvq!1l?K61U_xD z62WYEQMlyshmO~07b|GEcDG}a(~(WKmE)7XH_R)o2z8;&WMT-|M-rm=ALZ8}h zFIDUBY(W^oJ1L0uIhtTuql@sW?Wa`N2bmAjl@@IMh6sM2gL++CtybR=hjM`XZpXYJ zeCdJMpE;x-j0^Ijox;;0Dk@i10fn;oxcKI$oUD9FVBM-OlNpocF4~6d>}5NimcuFF z)KJ11jco{ecUw3?j6|d$>zf*z)LWY@G00bl^YOR#PB4ZKe3;A!IlDeTe}vqT5xHfb zhknr`XL>@Llq=Te+waqZcCHg{fYT?oMi6RGR%yIO4d1NM3z+(^duTporq*ebR=O@u znJY`CGXek*z4Idh-^PA?a&+7}8ozY#nBFTwMSiVwxW`&_rW>U8I2Mb=#i+%j=i+p| zh?ITqJxgDSrS_0sOEhRe|4~rhIVL@;kSl=LfRs~&R-j#XKV_vEx9mF#z1>pK`rW(c z_-^Nx-o<)EyK|vc$SEHW>y?9d>kaho;GUHJaj{X% zfy9gG#b^2&bV7f!UI~AM{ypW!rAyT}cMe`HQ8k8Af~ag^(rcrl8~{u6cl|(Mg?N$R z<-`&bn=**kFOOqOOQNRH>$&TBsFnbrld)nO^u$O zKJW!k?2RcH12@tz{-817WikT;#B|qD3}Q~yxP@t?4)%~Jg`oqb_fm;%T1@3eMh&J^ zLpB3zxkG#W_1;KA-dgf9^b!AU1AT1)!1Yhoi?j0_)1|1T$N2U&DltRB<`vqlA^b{v zb`N)clQl8X>2& zIbQ%Su-<%zWn+ndp_V?#JU6$DM!*-dp_|`Cl%SOSW5IA5Ea%D=4_a8ei;e5N!`8P7m7((2@dgjn{&^l zjHTEMNVCf9(`CL-{HKL5NoG-z-;Hzb=W>YUh7{y6lpj6dzy)bAz+~Jw#_Nk zn=Nl7$57_5b3%&)NTw(qMsTSe3~}!B4h?D+3oOJr=&Be^_sGn;el0IApVa2$x4@_b zicIzPz38~1s(a+Yc|tRQ`pV_q%+1Y5_yjla1h|=7p71P3XTYVMnlWAI=}DsmK7ZTRSjUnO_sQVOnpxR^GArKrXw*)%$H3`@ztCt5WpQGJI}sA6!z zOD7@pc&p!sdz4?n4cGEY)vL|w=_xm=!oTiNe+oHo7qS7laEC6E?RT)e^ z#X7Z%?5n?5+dy4)_<3x;io8VyMa&w5cb-2dPOzKfF`s*m$$0;#!|f$gFQzLjVDQ&U zM%sFhKx1P?jGnRIrQ^YPK$2!rmF?%`>GI`DF9p`O%e4VYj+iTM8|R#9k=425v}G=# ziK-i`5j;R5c@myaZbWeS`87I~z~qai=W#0!vEKDBYjxU|jh@KrnQ|qa=8t0=)?8d% zb2GIe448QfwA`789ZLq-*(ood!zj(p=^*dOKd$dFI~`7F-d6oo^<^Cz=K4`=zlDSJ+xOVryVkzJxGMI zS@n$18v3U#q_@^&e|>{)WBSN#Z+x|lU+)Pfh2aj0!VRD1$wvn|DTC3N$iact*AexW65z&DGkZ8e zWMaS) z7hS@Eelk*vFiJ@vG8N!;)a^z&UZ8Av5rIq>`2o=7f#@w3cvbt<9=~iZ4=M=B+p?26 z1UQAc516*6Qhr<79rJ0&Q++p9LMML1sa%MIX@-jl8=+dR$FA`G+#CaLU-zST|6$iw zRyArLhJjDQSPZ2J97O9OooP!pZZ;!F_)$Saj|ku34rk>b2Vq+R#}wlg)A~=3@vZu< z_ZEEi-uSW5G&n{ON}->(ov=~PCP=QfHdPIbfYFjN2b^NABe2;qraoPR8(&wKe62E?>;AN_@j9!04pgP>F6MNQ; zo?!Bz7M3tQcXi#70o^fwTZ<8MKl#$RmY6;KZ}1du_vSBUut`#d07-AR9f1smI@)z< z{2&#VO*npnV0*(fK7SeH6EcY)UwTH>@4ChT_PVDg_kn=(k=-=M5av`AG=D|Ke~?NY zKzyLr8WPQiW4#(xiT!YhS~Q**Rgl_ZLCO$SJ8EZZsY?8mVf9FBu| zpWAl7=^8+_Q+rmy&lm0yJd#1bljh*yt5&l_m&n?~nIZj`zSnb8=0}aZ9k@wT4*!6D z7szjsEkabE!d5Sh6zFMzX5piRP23-SHp9zP4i# z*LRlr!(y~il(GVP5 z!C(IRN7T=q^CcO5b$9~#>A3f}5HoA80^v-K$xJu{D4jQ|M@I^sZ&fr5e?5*+AWZjarv+&x4sxR@4jd_g^Yl_C4 zt;Gwit)YmG*bV2052b2+{^o6^wUG`+(&qi6IyTxl=Wjb;E7iR>etlG3+;n1M)y~}k zN11UMW^m>b~fNz?LpQ3+1V@q*~pc9&J2@VeKPzqfBQ^!`>h{A-D-z^F%7)5lo zy1u{Q?FeD@ZH2#wI)AHSua?#z#FDSQqwCwH#-@f%7h~c2QbEhUh>zX

Hhz7(K1ZXxVVD)SJHwdHP`wfKlD(iFuu16_UGry+9#YmHG|bh zv_E4fC-;%Zs+j>bZWjrU9p3eNOX2(}f=hIYe#>-KiPhHO19ew{^c%w|=I*$`g!88F z?QMEfs*0X+SP&+Q~ zD2b;UY24O$=a1NchOJOZIGLZ2`|#-*GnUt>tnPnv0a(mX1OhQ9OmrO-c$gxnDk+tC z6YBfb-`LNc@G*Y5ac)*{>(K_gk7EB$DUFyv_GdB4By47ehpvaPN~r(*HEpfUPE7scXfzlbi@Ckq{aE%qI!z3$ z26jhXD=ACofo|sw#&#EqSTM*&EUj(;2sh0g&W==)HM=`!?$Vo@CeR7x7Uj%l>t;*NfHuv{BiYlW z2)26cmmx5w)u{!**poH*`E$vQAg9-;+x+k%O|6yFVNuVd=p>;spZq-DqB3D8 zba=JCt|7>KzFtU7YGkoejGf)@_V*9U{{HNl(_^tl%V82tDYT)T#lbAy3rc{4?DE~} zVJDQWJJ_Y$GlA%Q&rn)JgJ!$E;tr`x7sgFA=|8PNnu(0rnrmk!JyOY3BUi}mTiT~Q zpU$^l9qK1iP`nj%lu$LYN0!LN)Exvzgzqob8?|W-sZXd`+KD}V{!C7INbC*bY@HlY zL{vr#<+`(qF)i&Oki*S`hg%Tidno$G3vC7jjfY`UC1hu`q ze2tamRUIHQV#$ZX+BzPy+~hgRY=bpIiFb2L7ZWp?wFH+^;>i*}RRm;4L1{UY~K$Fn=H5 z!C{ZM9MEoYcD2A!|B6XZUv9J?s%G0hP7)kDEhfj&ldn#g;qa>Um>7)!SslQN`K4xJ zC_5eO4BE>M^HIK_TP|;Qs{K89DqF@@O$qHGOrTYUseJ&VxHEUvmlnR1e0sdv5$#UK zlBkKBRnP$LvH~MHYTgbl(=Bzee)!hNTa%}#YzywcXisC~x9UZJMPoNM6C!D=tS+%u zi)XK%wZ&rma9&>gcR@Q3n>cG!tItetfC!%BUA9hN4knNCI}A%mZ&PWIJ1-Jc zRwP)_A2y<`GwEp-4H6XR{H$k#Ifi?#R-nnG19|wh9mJHMp0(XR@%)6*RhJ4*Yjtra zSDq`-i?i9<9I&$GE71#1t94N6k=0H%QsB4#^uZ9*aAK9Y2Q7DOR8%k52R(V4;a@Nf0cZFT@^c0ynFVw{k$C&MXmR7t zJim*kVEzLElVK>|Ws8Vq2zc!RUz-!)3-DV2ER+_*!J0P@YlsZn;L}~DVYLr=yY>r; zHF-Fa7k=j-13m?unIrgs6l~PW>{lcWx^w&aVr+x+Uhf6&Ng23@+*8%;{~5gmcps7A zoaqcjVEGBPXDX z8o@u80ttHr&^Gbe|H3UR^*r3@2vm?igAYXhT7g1<-IKHe2hendkj*R4D&54@l*` z6E5x@0xBpez%N&O0$m+!*y-6pCFKKY7sk!;Nl7i>hu>R6^lpUtN_-I0q9G-Bu0T^M zykS{=sM%Ljow%ob`TDJaVYUAp_ai2~cY4HSDmia*tpd|Unx|7mAX{kDqWqN*>>8Aq zC-TR|$Rt=40p+iifQA5?TKf?e)q2jRZN}N>S@g57t`Cs( zIVWPxrc~1=napy03nkp!Vz;S*uB!)XYU+g-U+~s_T-7u+Ud-m<94hK1DnzDDyr(xj z95Y-{pUlUL{k}76d<0VUx?6h4*AI#sFCSfP{SosHhyAevr|qM4>x|r?TM9&I*1o^4 z!C2*TOZ?a9H|*@}00t{M;t4YIL+Q-f$N(yc5SjPV#f|@}#>y^mO&ObbTv*Z|6&`?fU#V zv1Dgw{j&NS?yCXx@8Ji3&%`~%s30N?1nS_ks_~>f2s$3yL7k)HdC1n}AGHTw*pZmy z#ZRZjW8BCvD=|A+oeu&&*IV-hZkph>`aTwxWWs|`plk+6Lsf0qhf#xc{L_2mRYkyJ zg{GF;ntb!?<;1_H{PvF3CZ@LB)@BD)J&BEtotz#m`KZ?_vvA=(FJxfNUGFn;&1)0! zlUw1Z8>Z@+-!*TkHe|MhLaOF|>;;IBTFCjdV=Q!ADyR*8@`a#Kv&Lp-8U#-Z_HRa| zt}{g%w?c1zzbiv9pQYmdd&4e?=&zqN#}@4lK8sg6IbA46Ao$%bWxe%a1to_uG7E%s zHskqBnok{b!^6T98C*i$m6Dwxp+mP#Oyx#|xcEal_pGfI)T;@Hl3b)@wDm0&G52&I zCdIQ2;6dwAgCCTnY9I+^SBYE$WVcEX6HBs&%Wn_#wz>JV1^>N&FV6hk3l~+%!ygi0 zOZq3+&3ypwYnF?LV|dK0Mqo5DPcmOkXmM0Gd8e`kcve*{E?51JaIl7lCjfiXQ>0AR zJU#PE8d^U&+1lEg(&nlqKoQ`f5TTFoK&7VYLbI~6wT@<`1MV3%{RNCDVkjoz@wl2U z+owS#Mb=pUTnU{Imm|Nh2<2IA#z!ERf3>yD999_4hA;wxrRG*OaU*3TS5H^P!D6Cg zu?7LSr^vur9y_JpKyUBp3Fndhz4mt1%CXZ^+)2E>|BJj&+VKC7_t_Q3w;!#`Bn6k% zYVi*ABc4;fprF~@*^^fY3kxpOYme62y@=_dU2cuz{>RQ5RGMEJ6PWai~Q{ zvs3A5mm4tL1U`81NYwLcttp*u%8I8@8+g-3Fy8=**w-FOzxM?y_|D1cE(plLO>6Tr zwO4Be#pGpidN{if5JY|t2WFf->KS?VLsg@|xcVXR0&_SOEEnvNF6wr15*4#qQ&F22 z4;mA^+a}|I5Y*ZW8Y%_bS*Veyk{baBok&aD7)N+ScyL58$Q)FfJg1I*7$Xd%Yx4B& z?&(S3)E<^Ce?nznQ0|~tW)Ls9=yUp(=WR+L(r)=nsSCJPmiez%5?cN`JG*eWz+`A1 zO2WrFK$tTJsPs{a8RK)eU5JPXI&irW7Ut#vps$+hI`UmrDvQc4zkQ23ainj*4po-K zx6x|@FbQ;|x7Of4#?y*QDA#V0j%hs4d7yu~wzRNv5>`x_Hb3WtDkIz2(a3mbJbBk z?0?r5X%}mFVfJb!ANcK`W=n1lSM+tfe(g>zoW)%Jl!{IUJLuxTFjpdA&Q`1P6;JzN zPo%QL0?Vsc?Rjm;gWa6mP#b;CY}Z@VQnJ#c3*_FY(|JjQMrMUKa=07-;~^mMf{y{- zzK$L;nfT%-!*6d?=MdQvL!aD-=FX3>U$il7s@(}}_QYHuYS_GmgzOlhX+BzIWxBb0 zoc!DEq1#YgyQa$XMCgvTyZ3ya&0WYM)wlTFQ;_N|w;R3ZtNpbEFZsc^_q(HtST9;zlqDi z<)gjb;2FeOUj7)@G*xsl{|VJIT8hd~H(Gq}Kw}y9OH2eb9KKg~&r6gd%HS&l6A-X7 zZWIyIf3tCZdo#JIP!RonttGGV8a=^84w|p9nN9)F2v6vY(Y&CfZM_4k)ha-Pudbkr z@&)_#zeZqxTu2NJowe8H@xmLxkCVf2sM7fXR>n8{;E-uG)h#S6`G2nS)-rTfQJ84v*R0ON zjl3kC%ru~sHd%obiLn#G>Vl!G#R$Xf>kDHpH=#C@#j63BI+OK5O65ATyb#~dg(}mg;NSzl1>^hXb8oTBmzpH|YK^zcplDl*k!<#?FMh&qc{R@oFu&WocIN^Hpr6<*2J`Z3 zfwZdFp5WT=nJxU@u(x;^;e_%mLm4)R`!+2&1qNL$?Ubp-CMsL%WpuyYyE;3o@!+?g z5SIWt0DON&CnfoXqKAhk$48r?NUUOP8(4;TK3VDP37f}ph1>cAeuLRcJDgHnO@>ju zF^=35V5iLap-dBEWu8C-;Jz!N@dT3|wN1`pEF7gOir72j)w3i+!v!j?sOs$}3cx5r zn%$^kGmBQAE*oXX1|@HAp+{IMcnvpy#z_7vE=hg!h@tN{1OAOtno6B5QwVc)cUX(h zTC9~mGIya4`|DR`0g4^-l=Y?Y#>$VE>=%=R0;X%Fq473Fw!N|n$m8(<0$pJr4xCpu z7diD(yQzVfIA*SF74S<{?}OPa2BncxVfrYWg&YdfBN3neG%aT1G(6&m1R#0=WNS+1 zD<#DMX}3MXO>ln;W=-m1#$Fey0n`uDDzR+3IH0NYa9%q* zTnyjWaFh6=k<*dN1k_Rb7MlM^SaKu!ke%;ani?hDSUyplX6z-qp6ky(Ja1qQeUzr!<>mEO zWvv(8>^GWO*9XcpfGXYFhx=O`8ARc1Jn*@0{{h*&Z+;wF=V0L#R}R6FvMpO-zEU@> zX-XjXp(Gu0$e5m(9yaOnr0@YsO9%Ql{wtRuNpL_AI-~aDuCuWBbu`x>{167b5=SgO zyMO^5?rG|%bcvg}KGAlRs^?Cg-YgevnISYzxpO;B=R2wiS|Hk1U-3lDP*3D^jjfpX zc~!0(eLRZb{QS@X_9G@H`w1N_g~`pvyC&IJEP{yxhF~H)LG*B@N2W~E#T|z(bi3+W zNDJR9WbXa52h=nSMEum9R7#>S3i0-!`C9A6oc*2E*wMUF9UC81j*&&Vb4o^V9I=53 z`ml#+^%pqx3K^5ns9UBY(IGKcvv|j!I_AbDtZN(f^sdq)E7-m?$Bk{KDRoZq@DM? zabbA$n2d}w^8sgws<;Q^)G^e4aRUvvj5KO1Qf}v}oXy3bIatP`4=Z$>Urk7 z#FerYagoHX6ffV{5ov3wZJ^5}4hAoVlGM>{rzhe7S3s!0)!yfYS1nqaY+izb{TRMG zR2kdZ*&8o0!sat~)Y*xmm}tHB^l+F!Pi@-jQ6`mN8L9>t@D%J*K<{PJd3_w9`O)oV<2L3Be`bm4>`8fP`42}n&$$j|rB#${?< zlUX95r*-ix_&Iq~?0nx)>0`?QbLrc+zSx(3U=0$)3*(LCn0WNQ^38`h-j(IVk+Ck` zSMMriwLTLsMmeCn&q2vNHKOi&r*rtn4vVylElk=vUUsSs+-Lye6i!UDL-(Q=mzAb! z(X7&nJT+V5K+zrd{YS^qB+({sj~!+P2FOgPT(V==QL*gq^wA;Lc_ zD?G+9JebEQd~@ZXhd$ z_Lm-{;*ec!eG8BwvGQJJ*wH?ozc?NbC&;-J^6Z{Or#6ut**HGh=8V;-;pLU+=+MxN zRaZlil5Vhkw`j`}zs%cy70GU6zO;cFqT;868H?IRoTxz-@_{=}@9T~h9d7W2)pg~9 z4ezfUthSnusqsaz-shv8MRqPjrgxk=Se9C@$c2B#aa%OKd&lx4b%ArSxMKj=K~Mk9 zjV=IC;pgi&bGQJ?DCT$Qc(aKA6iYsJ=knWa9j)UXSDwqbZM#%u1*7@0nZjhsjTrHj zSMxqryI=V7IUe{oB!C?5!s|a{GS0uuK+b;O(MT4)1pt`G26m8kC|m(OxMI&<5NwLP zD0zAC(r~uUSJAE{AtM1y*+D50ggjEX7nfx6NICgzhe0eny#);FSi=cr1ZIbQAeg6x z!FcAHMhFicx{)0GiP74pCg{1U2ZZ8BJ6?CR_;HujD3cDN773_)n7|{B(2~uCIwzEV z{kbJS$slH{xwdZPrp(T*q-4iwCfGFg=nf56$yb1(E~F(JcVSV7{==$Q&_EJSL2<}g zbuA7*5 zzF$4ClHjn=VI(C!f6+%jU-0hsQH6EYoo{?tNs8V%h+PmR#0(Fc&GXwTN4knU_F>x@ z6*2uZc0`*zxtic0>V0{6&X#o8+dz@4ivn67A4 zD=_ej6G>N{9FwYZazU%L} zCTQBDj?IYk&uWwrjS%6^cxg}lSjVfzd7%+bgRKWM+MJ8^=-?$=zLc}s0>JG&zr(W^ z&ll@Gh{oJpz$ZDK7402SK-v_cIxvQIx?;rcXIq7SvO9dbH1oZJ*Uv1Hq0xb!pm{rT zU?N|EK9PwnyQcewiwkq_oMFrG=Gt5`zj^|v38;f7rp9H9CQA0f7Lh2HFrOG8 zNm#Zd`z#4h`*^Nwwl=&ap37{3QE3~P61zE!Z`M;u-}C?(V=9fL((*NJRK>-y zvzqDVZp6mk<^#t=#;Opmu6HnXG*ru5=Ft~Qk3%c_}4r^$E#N+nG;$ZKKm=bESj9RN^&-0z4m7uU-z73x>&lW z3k;JPE)>nT*X$P#iPd2z_a6okSa?vIc|$>M_OSa}7U}YOqb=%|V2nH-7IVx0Z_K-j zS<46(7Ao0p+V0xLc=D6n{j0Y3AtD%Z!WyLa&9zzx$2fNGf&Tt zhDJfX`lMHuZkcX!&BjCx&=XS@YUX0KS*RtUU}&grNT1G6|CID8H3``>6IB?(V;Grt zGH1W@(Z&(>pSp8NbaXVC1MEY)r%pKlpHX=jvv}4ZH92~?d#J?Avc<^QQN0M6SYAxL zi^@gPQg&iX9^G3N#Sgf&e4UdM&->5E;ty_*+D%OU3}x!)Qm$YFqfmu+p{)=-NverB zkzJ91ikb>ZOVDd9)Ym`74S9hLjDN>DCO0}ZmZYZGMJoKc_FbS~_Pqjt|Glw@^>*`} z`42n7(&h@{FA}2@)6ZI_KCLeLUB`B`xgE}@>Or3q#>T~g49Yn+Avg{GOEH4!`oCi~ z&Bb_E_-}_&6I+H~`=ou>WnqZa>FhNl9y~+*~e= z0B70nGwociT;KX=Sebx^{`PB=5JNH8B#GX6(f`vw{=f9d%l&6`Jl1cT|M&j$|E`XgvDYUk>pl;;=zr3^FGDC+p z&s93g{yVnz@$cj2CI^Pd-vknX(nQ09Lq|-jCMPF19}%gwH|o`px!IJ9xc=-9?(0kW z$(mhiZf?M$fb?rOX5{PVDYe~RZ+_)>2&jI( z1S_>1wlF64QyRi;@hN6z&CAJKtnqOf87`B7Z;^(FYtxDL<8sLDjOX;BmYM>%7ezp< zqT_3n8a4B7r?3C?iLPG%YYa{=N7mhJr|n=BnHGV8INq;-T7exWhY6gVqTYzP&g`&S zKA={7Ab+7M_p5huFVJ%PjpzM)dq&=uJM%I54~2vdsdz|IiE6&o6&f%14eU?S=*!{S ze>#TQ)#oM6`&cFnMAG&Roa!(hFV}`k%~kOM(_mhp9*R2IWEcA(D;x9ZYa>7O;%I-7TsS4q7ystw<`jc&a8!(X zR16$(?uSBSi;6m)_fs+DFV^z+@McP>lj3P=3e-2$In2J7)(gBSrH)Lva(+!O)aj>P zHcHPPVbS}?0RN7DcuLnunG|z#;pXVkbarWNrsxVVJ|AD5=&U;~SfP3`S*K}hTWk{v zYb*X}5K)BvfvMW>JOrKdhCwqfuCQ=fRvYMQhh1Fss83)G(?jDNz`5e!X)fy}7rw#mmlq+zd9H%W3}Fbo12%6?pwQ>Zv9J!-X@q zBt7w0t^_(U@ZkveF~`VEnHP8ZG!>TaXV{oN>Nw+`ET;}a7tx3~KmMVEb@ zhN{X(=w$w^7>eD!u>Co8IioM4anaFFX^M06XelY$`(HhKMv|i|CTKGRcp`P7vptc>8@p$j&BLd(|d) zGetWqvz(oRFNgDE>y5-rsIOlWB4|_N;~9ncL|F9{l;YyNxVY|&&?r${H1zWKZ;#>O z1dLCuuf(V5vc`vO#jGrBCuX|HdtzU|l5TD?o$s|+Eu+(4z2f;`tS|t7)YfNcC?&|s z7>~DWZ7qLBv5mn8PL4!U&wR6J{fM-`!@snlJpt`+t9AbWdu|7MNBd?2hv25W70qm1}QRJ>R2SGN=x_^QH1iN}(YU_9`_+cQ_Yc z$w7c@r=G3c_5D6atoO*)9D-R?R~HB zv-;hnMX$z;7;<_x?|zgL1|9qjYgvE({1fr>0!sgQqv|YkK~X<w+Uz&`)uN+u^kU3Sr6c#I!;S2>5dp*+9G5sar)K81+C{Q4yhZ;XbzdD8 zSM#h1AwYmY1PcxcPJlpgcXxM!ySpbOxI4k!-F{k*KCAcHyLb25 z`3q*w>C>mW`mMLBtE*LL?>tTGr#{tZ#BDwXRn7hw8i`sEs9v}2{tWDsHJP8k#hhmT z`r{x@wdASrvL{&Iv{%N0Tt-S(P^zPfYK9DJYVSc+$DKi!{}wPJlL@{V~u{ z6eoLwj@ifGcJr9M`+4I}S(?T>S6ovw2Oorotlg$BSgH#0XbJK0I$oP%;Rc1MT<^)r zxf7aSN{ES3()5XT_t*hCVxls0yLuq`gx`|JjB;`dQh85isRsrpnbc?amBrbqSq_57 z6`~asCL911`qmcFUZ2e}si>%+c8z`H2aA@1z6_wk*29CaZn zC`32Y>kL@oj&nXU7X8M~yOu5&Ig*weqZqw+l2ASzJ^d5^#3fQw3$m4D2pq!4rWV3W zOERH_gW;=uA_!k!QWf5xUqYw;`A8ECj2!M0FW^Hk?*gxHb;H7ZW&3+F(-VIHe1RgI zqJkpZ4+8&zmNxZI`WNx>TXb}zoSesI8GP?`KY{*!dwkBfLMrMT_`An7MB==A-}}9E52(iS zwGczF6Jujzp$1t_?bG91>r;GU5>w}gWqs__>35$+WI=HmIvx@pI+C=<*JpT(N0g8l zTR=(C3!Tb=1mbAO!ivIVq+FzQB;k)2RPwE*gY9PJRJI>ydK43)-+K}ge!wf=PQgvL zGY;H^$L_@%f6L^bI+MM)1IcnhA4?oQ2G(^2-SJ5Z$4ScG?cbrY!as+~F8A$Q^fvG{ zISE_itF^~hdA9)ZNyth`NePvbQ#&+*a$U7MuLWLtrWrcm)A`?U%0HOGGU{Z(lF zs02Qm0tyN@j7HF*qWn0?hyc_5Ljkg@0{k4zA;95+5A|aD8n^&a@xXDIXgIr3flIK;_y_9o)OJ0cr#=5sbj%m zewpL3XqiA$kuYSQmB`cJ;yH}3StfQeYG4$FC{DAd` zh<|-c!puC~c_ONz(KP5{BMT(b;eBWWgF*s>pvnejFqas}GkQ6Y!0?HcsYq@{4ay@s z3O;h&-+4U|XEHGfb8|}pPd-yqsBwa_G>Q+MurT)qZ)0N6W1=Z956sM|2l^!?#qH!U z{)@^}BN;INR)66?(BF8x-{s$aKgAzUj4voEIw@KTA}cK|kttwru7QgP^E)C6>NrNl zN5#d*$45uM;j;hdZ6%%$+($7~7Mc}u5z5NM=a=Mk#B7O6uFc}Y+&dItF)>g@f!{{I z&0b%pgcMUzOJriL){A!u!T+h(C07D9t_JG{sEz}2+fcRR6B5wR()}%K1TQR1*hbM0j*o3WDh0n@`)SZ=(g5{aC`-UVe!8quZ%tQIP?KKu{2e+|jZ|Ey3DzZ}&|NZ$j4xU9u_9!e2UptQJfoNBc zy&T_@%zZQ^%q7eZ8CY(n802LVRT6+|lm%*DreJ_14f|4%XhSJmPE$HngcH>=C7e_-UG z<{|lZm+-^iFE=L-!`d=jVRFJ(P*6cp(IHLGRZU+ZOEr%QeS zqQt`Tk<+M)l1!M4Wk0MlfHQ)KHkBut8}$X6Mx9Y-TW#{(WMab{&LDO*qipWu!SGy-$Em+0HC4$j>%&+z*O7Wmd zVrFJGjzr@8|PsANbF4v#c z@uR)d$jFEt=IaF96Yx%jgoP|SyZSsN)q2#NB*w?fY<)M8l_6s0F>rKGqnFu^(ks`fhQrI6>sqJEg@UglW@~#a3-y(R%3^;~Sjh#U#<*F1hRU&(_gD#ocUx zCl=1uP?6Tvjww=E)OPB zad)=1HhVxsB}F+&X=!N?cCo=eISc3EA{8UY3(xyDhzUkiG@b59gLjw)k2f#)vxG!a zd>@z;vdAV&yLl&@-q%K4WYm|aBOst6;*ZSaLFaO;3y_eIkmtOwW-S*A;H~x0E_W~G zm^PnyNwpZU&&ozd#-48Apm}cF{u9jz1Y&Dv#|X(Al8a2hZX>1UDDs@QSCUgvNMqHL zFhY?;gUL|h|C52qSGaSr+`E*+Wu$$nq$p@01b~JA37e3ZNJ&Pucf57+`O~kCE+xmu zs(ktiSw3>Bh`pm>`!nbSTZe1TdoxZd*0Uvkzk}fzt4@BwAE-k6b&(vlDGO{dm#cRE zuHj^Pyeuvz6}i!0xd!yUuCZ8AU{jwC#@v&=W;&^CEN#s6#>r+xs8*pZHchCuYy#BXXW%mbxjx~57PnA~Si0A8379sQn`>!D4~xI`@_K3)Xg+$=xO zdtClbh9Dcu9#^x`*XTe*T3B@aHzfTsUH$GCB^7lz0h{6MX{WMxb}AP;+0BDVz&IQN z87Vnbrx)jaOlN*^IAB;+DIL=fSy)+nuhI zT;68}dftDz+ZIQt5i&=B>^M|!6h4^(y1`DV@^e7d6X*{3fN0RaF-3SV=Vq!j7sN+ru zp^nEa-1COc1uZ=;kz&}g7XQp$A!H|@8~cd%Q`(bGucP3tdege4;RN%PNP8|u5`Kh!H8cc;Aj89 zVXV6{jherx$dackeOyj%YLorm!t!FrAS~sTNN-n5olh@P5keUdpx8debSIUQn{(%Q z?0hMbkJh`(HJ;FH{}QYkcXvpi_g7Ug}0N~JD)d71_B}I&S23kVZ7Nf z!qw*{WI`gM2d3swD9uG)c%l{D%9ztQ*}X@+PV3v>JwQsDf(`?L;~kaAXJ_aE;Y&WZ z*QX&nlM@r61MfodxDFxoSnM_cy;2S+w6vbCLQ?NhCYZlnyy4;2qHp*W256$6y%2N zJ~F2b4pQ|E_S@NcYYX?D+5jzm3h#5AzM?&2dbtj~ubb z{`TI@OncgQeX^%@2@DB$_og2|o?n^VkN-?4@OxIWP`TBdPETWDZVEbBYSqXcSOQ*L zPlx2>Y(_mGA_sWd-WxhxjX>>HqpzflxK4$4ZCki?Ia=!8>1Foa>F=%T3Vu0Q0 z=`?4}8v=dpX6NQS+FR%Sp$7)Ek$d#-soY!~wWi&eg+IE4I6c5_9Y7y26RpY61CBhy z_*EKrwm@^njYACvwhxb-W|;AeMTEK4m>ALzui>`PyK|MlJ=zx5qXthkia zQjJf2Tix-YT}*5orh1l)nAF+X>CE_48iTu*rPk7Lz?JE$3oo#9N2cC-DHg%q3*x=M zFN~`uB0AbX?1!AL-PT1x%GTWM;447~wWlWp1e7tdxE%INzcNpFIa}}t?y==-@=RO{>vaIw^dg^{aM2WO?*tE*FJ<1rQP(R4CtgcFiwX z@{vXXW&d_)Aj&ReTeY&F!mj=O8Ws-TJ8O=HbPm9!9Z>LTm3wAjVM2Q2{s zd%3F>huM-BNGRD#>#A4>3Fj6ptia0p~-P}dL}O);r13EAR@~zBO@cNtSl><@Lk{U z59Sj4`tAx zIOxK%m|K_yDG;3CGG079%uc{__v^!-hlT!0x0;BEw~M2iz!rYN@ja6=9XrU)=QWFY zQ1;!cml2`wcsy=j`S`E|>+?Qn^E$>Bk+gXERD7#J<5E|reo-G-^lFaqZuPoRIlHIQ zu9D^IlC^^27GfTW2ZTWB=j7D;xU5mHfi8cG!CaZ7TwaStWR4B3f3nT}s?_ z>^@%Wd|FM?6#pWGU3p>kpWM0Bb(^t<)SkAt7`Rw0PJ0m9Qdx27LPM3c-}965BsZ_Fr#)aavh!#0G&p}~jSTZT+3drV%QO)i_w~Dh;uD}v z|FhL*0r|x~Qg*ZLcI-~!*?QOZ5nBC;lhtxO!ivXf3Zblab4Lg7wDl6NTU~SpO_jyf zv9tO7KIk&_a0}b{h`Y`#WcOt)6Vri8xr|?ZI{xnIMgqO1Yo|u7nLh@Ys)(E0XK(pJ zlSwcM(odtx_7y0&1~3SjF+hBo$KvBG&=%i>znBzD7XCC%9DNhfo6Kbi8o{(c zyx6_iycnFlJQ41laQ7EB)Dl9+eIuj%vLQ$$=*en-ZAb*zc_pZnrUN_%aSIlit>|bc zN@s7~Q0B@ZF{<>{Bu{6AW~&HM``Ck{Q&NWf@$hgjOlQ-O!w#l$^G=K}@R&+<)6*2F z^R}-l0$-GUMdlWScXLxwtF;gvbtYI~HsjG78~Zp(IY5&#-$p}AJG?lXkR+?#yLYdc z#6BW!JN#MMb_ydUrNwPcpTdQe*+`k4P*zYmwN*=7Sz20{d60{f$%3Co#3OpJ1l|-_ z;@6UrlATPG{7c7H*Rjq$T?=3fBg`+YTxz#`i*2J*u2^b(W4~442AS#fD8*%UI{nS& zy?1|xQ|;iXJdKR$g3rCXxvww30-DLbV>HUx{OreD zdTwee>dJhKq4^bC9^3+|Nwjy~8JM zI?&<**ux0tNG3av0vB36ukyrO5zzfZ+1%GkhFdwOgn-2cCYVN0r6X$y#n(v{3Km?if2UscCYFcNH7u!H-q?8$`;6a>G>3y7m6EB9#I@ z+HVu=%ab7+y4lHgnc#T>oSl0Lasxm& z&<=4nHI*zi9z7;PA*FCHQ57rdxt_E+l@xKio@&k2ehZ2sF}fHVI!7_>&N47CG%{3z zBxhGmPR|so=N7fbY-FpJ&%wWt-k;id{_ykR_m$1cn7b4JR%_ckCcY=a{F*i-e*`0b zZ z`BhhyY0qkm@e?ypXQAwYVWWh#eRxu^#80-rBMDof3{|Ssv(e8-p+6Le zAjbQE3Idrc*G?$Rx?av4gF|){8Uds>8o2ikdsMV{*SF;4WI8^!5j5`!fo(?|-k_fE z&0ZYNc|*K;5Mr6J<&0gXGToculN$Ew-f$bUWlAbCVYZ@Rc!>MnU|oH-eil{Akam4f zlSw^uv-3FL8u(^^BW5FO5#^Y%;^H^Id(N-&k}h78c8RfATpUc{_E2YS35kK$olzbX z>K8EJNKYMk*~vhEh^_+ls^6_WSL5NDZlDNKCvU7;LDA#B%Ilq}Qk~W!BVqFyYhFiN zDB0C{QD&dN`B8Ds*-|BwPvh0`C?=JYavVW#xZGM#XTUU#au%uV*2h$cW@4hPuMQ07 zOT3|&IH&Vl$o%#4VhyK-1MSE6EzUb=xaRvM2~{Jd8spjWKN+X`h~D8dS&z3sQ7kY` z?pKZJoasdw!6DgE5{nU>M~#Kg?E+@eo+(2{c~DelYAZLY7MmF|B8=R6=EGBr4_yag zXzTIV02<4Kn1mS43S$C4oq?f`_byh;&dWD>b{U9XV?$Y>Y>2xr~N);(A`lOgpyWQ2@8@7K3 z;dtSI9^+L!TWOI-)vt*8%l`(&%nJT8yHQ>dSGs+1h*rDSeyPD1CI zfz#8~Gf{Sjj)wwsv-Y$tn7>W@Z;aiDi~{;ctWF;U-fuzT|K4#X{~J+wivGVXeQo&n zM)Ci1r_xCg|G6LSzrO$euYYYsWPNhY&O`Ez=HUn4?g8YyR~B&JLdr}_%g8}J$hUyk zK@b-okA;gBpOlnjgquW6$CHNqC(5BmMMb4fE+!>4)TZi?oVYF9Y4-7ohM|&SoMBuG zwmwiuSkwp@tXuXeC@^$Y;@!eGy*F$4Fc?3W{&Xrgr8!|I@4-XuC&gf~W^2!{<5p5K z2h+Wq)$9K4-Svr~7<2k5LyS3fv!Ai80jb!RG zp<@L_(B!YrF4NFO>u5DE=DU9)r(`5$NXKlqayV~4C-FJy&n`j8j28Cm?-Z3pS_#Le zAn&D1tF4Cc!R6-W=D#GeGBZxwh*wx&Zt!7M7LjW#`L;IoCL79|s-K(ehx!Y1EV;sRObY1 zM3DvvFAKFxn{2CG(hpyyu?tU*#ddrvOCwxFI|0@^$Jq8ootsQfPWWFOLH&!8k0?b} z%3ediNNQ-C!wF6=A7lhg9d2EY#%sI<(O}MC|E>=hSoLTol;zB5W6MTtB#abO7CTx^ z(%r?D;xb#AE&o8Lk0k-PHdNlH_afXP!k5iA4p&Iwti2wHRJF8`Utyuw^*-r0@Q}gR zWHR!%O~V`>+B>~%mso^xR zySMChJJ&z#w0tid9j!1}Z{1`Ev97N>qKesJJIziQ1#)=i++stCk7T{|A&sBRYgf@iQTB@D!onV z4c`R{rqr-NXXj-K8%Nd2uO$^W1_nD|VRqO7%kD}UoHETJua{@1FPTKJg!;_>2DYd> z=zd$+;ynpTyAfgJj*S-jFvO%xdn;lc?BFYSIY~fyKgm>clZ;)Sksoe7l3%8!!Rvz* zXJlkpQ1)#`S46~ktK?=ODanR+o`~H=L|b{dNS_Q1#vA^rZbcxR`3q$wxtuv!k_zh! z-0-pyrr*U^^*0BqVLv$yMv^cw*x1|Mzz3IyU+6RE*u8Gn?aob>-5q)FUVg}a&w98h zY>-cns}_4{nFz zBu%$ths^rEW6Rp`dh;pD=y0VkYznh}3JL5J8>oy42z!g>w(~n`A*)zTWwZb6)@cvC zJjzN=7awMS0jgnQ%@?z@REzK6Ma`s?3_CC9X)!=&^Key5O6u+DmQS=%$|ppvq_hz^ z5#Y0Z9d~pHbg`UIT3DG@QfjWT9@L3j?2^?19FDhr@bf{g=jL?GdYxu)onKi~T&NK+ z6R)wc$Ygdo-XFD(VX7n`pkKA>>x*9>c==h`5Og#Z*SqmEIZ;6=Z+heT4sjP*SAK5( zR$Yg#R||SfbW^PbJsH__n;Q+4I8~AMK$|}O%KW&RMpj5b^RBHs=a2kdMQuUL?Y3bG zBQmmE#Yn~1@n#RLZFkT8pUV<3XsBu?JAZk=t>vt>+&D-tN8yHn`7@#TmVW&3E2KQd zGkcZBZKS?p3GOO1-U_`+J)sQAE67t zpSKzNWzB8F-7=bWcZ0|BHu`Px&c}>Z_sx48aey*tl3K0FhFJ+WlR#gQ4V4!s_zk4d3RK znd(jTmJ^xfK7;wciQMAk!|j@zO&WZ8%^TU<-K%I@Dz_pftWNd*T)^FYDepNU25!e= zShK*?S|l@e;hc(aGE#O#mr_0%2T$=Q`RA#@#Olm8o+EB|H*55O9|6L`qKXgj)89V= zo1!{A!w+QXbGq=}VD_gWARwN*hzUKn8i%?_YPAC4niv=zx+X=sUpm7;sNM+h3jCUi z7Dr3M{=Rz-T6#&zc}@N`7?4;!jheP_y5fr0!gmARo!R`u8cMup>&tj+wndp0ls30h z$Cw_s*V8DHpB;)mta?X8q?acZB^3o1*@`8w9C6f`4#V>CJf-iz*zxI|O$XE$7Mh`r zgkuc$qT-6c%?|5IMPT&d&6G(>A7^<1yd3QrnOV$cOUU9xFNlOHKM%ePxIFGfO4?;+ zW};heT01x?&&d%Q?!%}aO!%C)Z4taA5gZKk_RJ^ON8XH;F>@9E>|h?~eRC{*&@(&) zpWrrIR|K9}Ge|XO-dNw5L$0w|i3YQQ=bzt?oEIQuRtdw8)BHLYQGNx5wcXLn)6UVd zkzqU*1y%XDgap>H*&Src_te2NKjWx`70vUlz)5 z&*$;HV~q&FWTfPB({ReKUzi9VE#Aoz<@dNjy)PBTjFN&r5h@g!#0Xh2xyXc39tJBO zY0sVh5AK6C%*+wG8~`X_U-lUBTd4IG^^BwJn7+!-$x$Ff@$q`Q&g@ewEZ%=_j-jqT zA9^9LFrXkDy@;$>8&Wj^8NF0hQ3(wU9ja1s)RHHjogBB4tGP)Q7BXsvav@+db=vTpHEIUu8zscol zFOg1uMzLi`egE=h2Jd3;tGU>s0cy}(xugs71PW_Orr3P8w&(%JMbeDL?)Fxr9*|BV zRC=Fzce2nT+zZP%Gc#`ldB4b9>EhP|g0z#9UPdl5#)5nj?)}eZ*Cy3Z%(=ed@iS9z z4CohEGVnF$JE}zDiYzs`TH56A>TIPcsmp=QA?6Gmb(Wo%aLkUPhQ^0|1*Qvhde@_j z3=zFHZ&_JB4z4g3iL2Mxp)vy$3r5;HI&VQSadC~V=l&`9@5R{ey@`^~GYYFNnfPguV8##S53;iP z5QU2v^y%vgc@<0=D3#%CY|6{c7nhJw8U~WxGF9%fU&PVD z5C6mhG&xI;tdg##v23f9W@jTP6=Q4fhhS|<&!Z^9@2Lul zn;m9kcCaf-g6oNZ>N!`pYo%%PhN&A}N+kMb@pjbTYHBc&KlWmR*G^`u1$WxH?`-dn zLA(m46tPYD^tw}d;-8D;`s_js4X%E~Zo=eJku zXgP)_B$-+C9FoD81lYYDYZjNxmmq@U_STLL3FysMrT=l0zS5p|fyd=}5t^6z@YA4Z zc6`FHUUh1!ui?BSBHi1mXm-_Je&$!?e$MVEgA>dG&nH_Wn$2Y3gu=AmKvf*L&~%?+5jJlPi$=Dbk4m|a3wYX z={pzQW{cvS9Ia{zWp`>S5SY?21dX7D>+$V$eAu-M zM@FKRk@~zCkhq>UIy$yQK6n2HZ`Sl-kHF>XcA+)Wo~FrNS=SK zLmE$`ve?C1Qd~m0u7J3Sr~C+5Tv!yg&s*Sit^#6p7|3R+1BYMy;NM60@Sw?5i;uUABB9uk7IvzCn7jYoM z+YZwI42;t_m$xDYQp9=<$#t%mvA0GTaT`Iqth}FBn0=4eC>% zl<%f7dQQcEzcVh?5HW%xn<@EJ0jJUR?spSedG{P*iGCGv`9hNb8QAu3A*`ia&xgTG zk;tWZtcyOkZ17x3C6Whqv3Ph>MS`&QXVEuIb>`i{wM9yIC&-SAUhBU>TOox;Y9MMy z`I3RJ9i_vqoDQ=ka}{5ZRA1k6G(mkS9((Z1qvxp17meuT4)@!3HVZn=F}w@T8b`y3 zSGK-rM?Ej!31}uHB}w2k`)2qOGjWA>uwbfK1BbTfGldVVtrl4eXTL72C0Ogo3R0^p znJ(725u#7NZ@YC>oJP_dNU^)0c0D~VJy4B6V1}H}ygXS~ux#*c`c5aZy(n zWB$--^U##F?M5_^Uy0Q@Yd?*t6A{UO4qEvcODl?ksY4UBd>=Gvn!R1F+l{o(=nvYL zq<@q8b)VpeQPP)%K88g!BDHD;{vij9xzw~yd3w;f?51H?2+#ea(%@ zMZ)k+;KP9-PY4JEn!9ErgBPYF67oo+dA$G+Wqr8jI6LWzoPhk%dYtTD6pDh2Os={Ra*9#4IuzH<=jV{S7x`x- zJ)`r{B*nmbBg0I^IKij|tC|>Jkehikc=SNv_@%42*8-*KbKk4Wyj@eXhw)n9wRGH&$d5DAA13yiYxlip0@#{%QfXAi?VMd*b2N7xUsxs7WuHh9v|GS3?5d*vo@F~@5^W~Bahl8QC zR)QDz*~ib%%URz(pRP)wq9zL=D0|v*hB$R*V{GXA`xOjXm~TqU&&pb;xa}*rBhBAhLszqkPH~hQTO~QKi>yaO)gCpozoW!W01=ahmnn zA|W9im(Mxu3)Ke4nJd?>OSCkPrZ0QlHh7(5;lp6yKRu7nj>Bc+c7R|p6m+p8o2VqB zdQx>%n%W!Q)73Ms2$j_C-(#yWlDl%ctVGe|lOegSh*Qebrecx@A~6Yc9PX$0KiUPA z;*@_V=H=(_xQg(}qmBw{Xe8z2Yy!3Pqgt?Fs`&oC5{tEtj^3L!JnWD9Yw2Q=;?hJ6 z9F$B`(Twgwfs z9?xni986GnnJ3h0eeC;nHF5>LCpRx|!dBLXNTM(LZM22)sMX5Y?QZw^rA#Zx4bu03Id;!OUZc0Iq--B!{XJZLG+DevAavTVQn+g!5AwKFK9bYTEMD~% zX>(GImM8MWJi7rY57MtRv1iHpBvn6P=gXgOclC5{SCTi=Mq*IHM9)4~Erk_JdgS>5eE z>jq;`dJt!FazSNUWjIODZ$>(a$NS=JWRk+ENcpjB%NN_RZj^+J=jSClg=ar4RDBTO zmwmvo{<^%bLfXo4{xnq7bW081mx-r`X4cMhn*8TE9VV*S8eQXInuW}1!*$DJ-<*kf z>uRiH50bbV(l_1~tEuEjd!Jm-PfQ)oFS0ThE9Kt$mh-IC$j9DjGMlGdslf4N{zW$o zJXGfCx$B0m9HF$2^ml4d^+(UHdZpWHd-?lCNMJ>yPXYotDS6f7X}5atW>ke7(?vH3 z2y!>oAt+?#twYH0G=sq^=hO;o?St5$2JaJVmiv$ZPVOdGca{=mnuzIQL%k@5)@D3z zod&0kp6?zVl}zaI5C^Rou6QvLNbN%a|FZiSlL6w(oHhCtz@(g_!})E~m-Wq-dR!P} z)Th~>F{i||fp}QX!xJ||`va~JmWz%6XF!<0B+dMJflfwm!+3jU=20>$E3ImoWHHOE z@Oph{O=!hOGP1b%G#S6mSi|wQ+aD7X6T4By9cj4x2do9^lB$w4qqQ5PWQ@jfiLpWv zm{Nm-Vn(EaVC|;qq0k5RGI2slOO5iC_2Fdi`+Mdp#bK4 zH%n$14BWq9P+9oV^b62=b8JP~LOtDWb0nr$QS~EtrJIL@d2szngh6s$rHZ>b62$0j z8FY}hzu$F!_%N@21$?--Oy@bC$+L=azgTMXCYWl?Z%M(YFqMJeyi*fVO`z#>XDQO2 z9jJPbw|?=^?609Si?&%QRP-Vv5&#)0EQ-ghWoE*gEv-NO#iK2K1f6kmrM=BAHYiQg zFp)&NPX;t&Zr9Y@DiQEIX!&4|CV|)cVq(7Yq0i3&18kvEr~xpR_9F1sX!C{~W4o{} z_C~~8EuRhI)LBeO$?NE?NBhwO0Y3M)n3&-@Eg6|bGiBlqxRSEEi$1Q9o5^e8bN6t( z)Wld|%zm+&nhK>2hh2Y`$7mWyQ&Y)&Yc*6i%hGhuwPLgq3JS~k`ym~rc%{!1UX7(N zPfe9C)mo_lV7Y0#pbF`o@$fX(Y)%%FbUY+$p~JP6C_9xT4;(J3tlsY_*xbBF8j$cV zk1{Q#klfbC^pxTwBQxX~85w;c;PjkTH+I2JsGv)hn?0@%_dv1wmwQ&6X6t80gM=CY zyX7`+K@*wmHK+oG+sx+`m2^P4q>;|NzZ@QT4K*3dW}eAx?|nGX>f3D(d`N-+`v~TK zk04q+mK^sVvw=6fm3V{|&V)+ikf9)yda3;m6wZXOcXg zo3NVung00~1qHPLsALJ{5)l65GD!b*KjnpCj!|@U3>(bX=-{^O-Q?hZ@~GtYsRn4e zdV1|(V91oEJX4}uo*{N4|6L(bR8$C(m3Sl&Mb}-={}fjw`I~#_&v6ST;kQFNecbzu zp8Oj79j;|Y_P=<^YeZ!!T5hjad3b2MsD3{5xlqE=f48BW8XD3L{^am>nx37C z+c=Hg#5DXDr@}xdN{CE+{Tf$lO;-gW6@tn8v;(>889Z1cUZss63?}&os^(-T`w3-M z^rkQ`M`N;z8j%d{DfdH-VQQSUOSldOCK9y_@_%eA&=Wlgd;`o#f5R|dd1}{B z)&E$vI4UY$K2}vuQ33kcoeaajBoIAFTs&M?d%$!L$8>LE)LI=!9m+luNy#YWg$+Fw z))8k%p;B_Y7NLfX{JVMF&*$nymnNZ{cr<1M1|}F!nSUakqqmT%u;IqD_M=I#M8AH( zKO40d!($P+ zKWXc&fr+MWgb|NN8*jR{^d(Y4so|5HC@-LzkFkaMs45cTIwa&g;s4|q^HKfRwDE6M z=>PDgWL+uC!|p{^I6>b=pU{Z%lQoo`b@aDY5ofpH)Jt)5bLuOT&B|TiRrm4{sJ1vl z7Z4m4!RZJ-eC6YVwhDX_3CwzgLaXq34=ACRDRXTNg|!UwSg@agr;!cddKG`yY0cFF zfZ9lG*@(kz{1m_#kGPEZ8aR{->mhl?%YK)~`SGAyfcKT1z0+caO~g@5fSZ(TEgY1& zl2K4Nz^qF?k&f3cb+Uxj0%}4H{z)9F5-GKfm;KY-mviFBvbamx`MHJaQ1;pYI3A_F z4eJzj_w>B>#xUyL-vZ@)Bv?g7B@;#R22@mq_bn{xA$>a_b~+AP+ORvTc0D~% zxZ-twRZXnYL67t!s=bdh;zqerd3G=TG#td+ORX(SEp0Nmj3rRwns71~9Nu*E+Z)gi zF*u=v$?5~MeSNk3_U(IW>fq(M_+QyWp!i zm?=)%2k)f~V-t#%7B|k%fUA`uG-{=Mk=ZCgU01h(Je#r7^U{Dgn?m*yqa+xZrkR}2g^^;T~_s7ZaTkCK;vCnF)DQD>yMJaWW<8jbyy zki4McXbjd4^8u1*3+yB?C<8W!Y^B_3bXGy8kXkM-z38_``z5gvWFO!rKful*+u`0Q z8+fQ5&2f14)Ihs+%7i}@U z@|KY@M7p}U>in_H3}A})&=0E1{)F&-seGkEi2KEIIya^POM~OVcEL{{E~5)4lc!4qBJq@wd~=*Q8txLK%3Fal zMC?V1A@K*!Cy8~2dPRn>4kua#_9mQJ>d+C<%G5L8_k6jWr%6zyRCb@Q;dR)m5cQ;! z%#kv5#CZGJ^ehKq+TvpxBdWoz4F279x5LY&1|OoJF8`85hH9N@^McShm$M&+@$dRS ziuXqc+|#Z!5W+fSYdBSeogyJYrKXgWd*E`?<*!7q`)1LvWuMFQ1+}zXt8YnXUBC}N zuj|dLUSBuqgQ?+Un)*cE50I3!Wr65vF_=32-YCIBm4}|ios%%UvEXp761gg+AOXKR zLM~zp1E9}sPHkLVt+F!-f&bO6a-ORl!@<6Caatm!IG>|ssFm{p+OTHHaxI*^yS~Ci z*NsEvkO;FmbCG(ndTLXmo!aQi@kmF^+O`L=G)R*Y`y2#$*{l--3tQ> zW-2d))Zd;!{*0!yKf)0=MR={*++5#Sg-l%0JBPE08z?t_5pBHqK!%L1&T%BGO_17C zdtiEC`T^AKN=sXMIjm7KU+HxlD35T9pn4*kokzed#d%;1`+tMQ<;+sRoW(y43 zsKP`&7%$e%FMCIs0^l2LYb{%Dovbh}MZI&zq}^??ywy#_CSvDc<8r-!$8dCdzH<); z7hVc9G_wvr%_AodjPJd~qin-ecCuslUSVbVDwu2&SPyCBHmzH+Q`|{-wUW>uUIPh!;)r?ms<~xXDZ!L z=Czl=%aeIL8~Hf7a*LhsCNk3aOorRLc3~cl zg04hw34@u@_Gh$NRI8gVAo$D(aDDp~fq}Kn&dyfT7-r zhg9#am{xTGF4z~(f;EE|Qt<0o=A_R)$fMgG-`0+1>QXKBbo@=5%&u^8(u8}VcJ{&j+%4=3v+G(nQsgdVro7b+!t<<8F@c^0!=+Cz z;uLEeD_}H@zuC*xa5D&HXH!)vOYV(bMuj3Q|H9W$HpsVLgA#$4;7p?je^=y+ z8VhY7YU#yuR-2+&ntXFXF0U4N@mxOm`9zJlBCQ5HZboY4X~aVEGM%;-wy#COMMi_% z?zb47&ND3DU@#O3`G?^rAQOY1r)f{qPDrJfn5mWC0^ffsQ)~>@zdzaf@Y8Y-?4_2( zh5&n+tI7HXlm*s5-8AFw3H>EDd(>=*M<-_fo*Kft6-SfW=K1E1Y&u#Jn~EHdPO-$* z+T(5#`f6ZapACebsd9}E)1Xmci-@x10YX@u3Myr8X(_kKQWt_Y*%dr=?n^I~;wV@B zPC&#e>PP-Yd7yVMD+K){9R`BP-D*-c$nf?~@6}HQ{Id14oVL=q@@cS378VyWQExVL zL+HpPQycBY55*#If2cgT?+nK^tK<#{qhK`LthRYRr%5I#J*bLO^9!%5(=Y0>K9UI! zUtiR^yo?)+udc4cQj(12A?B04f*@gKA9RtD@s3bHgt)o6mvczP5%0KrBc!!kU^JC7 z4b4h$7mZB6WO!qqxxGhEe;onXl8BGY1t^B7bf=_t>xEbv>rP}mMC9N01EwdVKB}BX zAuiZY660~Q*fg5o)t$m25&>2h>g>?F&BL|W4>hMOoP)U``6h!7etvqJJ!UN~!b<>!Fe;#~8tl3>E`U(?U=TkZs188HNiZ9?_H=Kx z&}Yg0dbKU!?pHth0@^O#74uXAl~%?t4_*M&FZKaJa>~nrwaUo=R;wku&DZgD`Ul&c zW%=^oGaOrEu!cCDS1!_;7rWdXTD*Yu=ERMA#Pwb>L#}(6qpH_596uOP;%;un9 z&=)5*yOWWtXf=FmgVks}-8(iAO>1*++_@gdJz5NItaR;c`n9@R*y%q?$Vn(US7TFe z2_3#y<@1dMA5>4~>aMy@WoR{!&HD8WLV}}D9gG*}=d#|5T))vO*Wp(%3CH2p8+)y& zILV7Og6>mao{>!&4Q#MEK^bLzM=9U%duQzRW?gT{PV(guyT?WFL~da}a@NPdBgh|- zSIX$Ld>yNF9M?blkUUcs@ZxBuGoTcYNu;954A^!Q@JhdG-he_%b`ctH;^E~J-EBOdvJG$;O-6$1PJaH+#Q0u2Wgz(9w4~8HQLij-rt@3$5(Uj ze79=mR8iH{XPuDTmoy#!_`v!e`r&$KnZ>d9Cue1Q+}EFUMvZyb3&4QPOmjI- z-)-F{N1;|>c-b+`ev2E~%*33Fl6nX1B0( zIX^0wgU3?gX~Z#hj}`CN_Mct=*c2*M1)eMxlR_a#w{LM3yCjYvJ2~rle}?h{lV0b* zMNXFrVP31BT4;<&|Le>|<^VrQeCHd304amPh2SR~`HZZ!nfEpR+3igFEzK6d(ZSHf zA<9@{o)62h@1f=@p4azUNPF(3n`|Ie35eBXzqE6d&7YmYy}0m0d#w1`;6pv(m$}$n ze*9I#wr@MU2<%cZr~J+*-AUAZ9JYqzZOTt26Zg3S&WmfO!|gHI87+Vd&}GG`-UXdX zE1X4}*LBHr!JK7?NHV3hMCcR3?_IhfeniDQIMEgXIahaVRB2WOiEO-`=pi-E|GI~* zThZ_3&01G?34a+`*Y1_wlyU%565AE?#@;J{9%DP05PxN?`D{Gk&~x=WE!)x$lotuK}#{ z6uINTkC;9Qqd~5h8Pq#H9qp0;A98W=OOMZpDn6+~WpVuynOm;D0rA7CZd!B|ZCB4?G?o z9v%Uy2Ot}$gB7d7qY9r~{&$j>8~NyH2z0(9EBHpoMzu0Gteqzh{KH%hN-d2u7^#Fb zNytVkOtws%i_mG*{xjchebYU{`|#KpwD9oyoU$b=@GlWqJ>Nh!tnGk5lvVj>`31g_ zqvjh_70uvZ8)J*GLo|VGnbm)atFSP%;7ebuVw|ASl4T1!2MY@)+rr{3PIx$*3_uKE zChumae^UBO3o~ z>9La1s$xb|H1ourWHa@TR8-Utu&^uI7K;meXte(tG4obtM22+JczL4A&E4%SS;2TH zoiwx`G_)wo6g!B3$j02ES9U~xi14=`i{OLAg!MAg*+J9=-(ZF)5!kQ4$A1cB!~bJ? zL9U^hTXK0_1afcy*=VBjyH6%&=(re+$|WX$+<7w_r4T+lZE>OWQ3t2uACqm1WA;)&^nW)l|4%}g z>@f}mxVS}m-zVbrabP=@866|(ORkQH)70wy`CFuvtgL4UUnOHxC7Ho&hx$FqG_&3P zW#RPnbmX?J<~MZ`N1;tULLPTE2C~i}$5VGVH#2f#K|hnEwUr+$E7#eR{nT;x#rb$1I9_qoiTM5ML|&jf&ztjd$By1KexgIHPf(WB$T@^pGq*2~AP zj;7zgILnC@&H?o|ZXSzMm{c(nh+v+dU;Kn0QkXS#2^`I>X#tgaleuWmroRfor9XKI zF{x>Er+7Pxi|y}D`nciY5hhYQzK9$qB_;;-c)RfJG&aad%U|93-9J`o0RVt5oB4MI zM)3c61s1KcGFLRH$83|V&-2;`tf-_l)BHR*BxU{Vm{*f4wG6rmkB#WvfXHNG#-so*O?^W>FQz?Wj(> zAH-$m9Mo~4-h}{%TtAZ2r7da+5uICRN=7|bHHYEgiV=5kaPaI+Fow-+>|hZZ=O6_5T%^gk zPo|d|SL2wp;$C24qG;5vUEpNQk!bpGn!zzl*wgdXvNB z;!vXCdQR`k;*-=gaB%1mqIQyZ7S|ntN@#pS{+B;Bm)D+%p`S6(F;K1dQ`bL$&-!73 z){w$d=Tv9ZzItuhLM+(WP*<*2Tp_`AJ=Wq#iVgIN!KM%Od0JIkzgmLRnc>>sAYxoX5S%Wf`Q6E8JoTZ<$7A^x$ln zaEPG`4th`*l0toR3XO8V74lvyUdWTg=uE)sAE~L>%ln^eqnPxut$5pngamile1Q`A z)2r(X$js4*NGSaqP_ePnq=v}6E@ek!>v=v3QFhA%Hv~eyD~soa0E`yZUD;&J)pm_y zWiIm<8_of)fH|tp3qbJU^z(YXzc@!))Ef_V`5QSUB~EzB*nFk}_u#=$n8Z84c!S~5%WC`wI@PXj$x;cQ+1 zibw4PzIE)}kd&0l#KWgI@DJwzOxWkDaSaxKlzGO=e9Y|x;6B{8z@w7(fI(=NJ%AO| zp?1TL$mP@169QL0ni8pap)*6o*WS^-zTqhv8VZUD(8k_z13YB)%}%T!oT3zja4@7? z-MYEo-rlO{q2Zws;SlfdZWjvm3K6d(BtFp+MI^oRdu5miL|v}Jj-NKCqcf`D@X(Qs zEZXjGSY(dN5?rkp?JqJLQDWiSsZCY*I@J573FQ(Verxq7GB`k9{EXm^dA$=kE}BED z4k8y~|H4FqtZpAz&j+o)kaOvHts~2W7d0SqqOZI&_3rK-;X?R#v-s-t$&>OumS+2N zve^jZKamq7kSpkhG@yQ}%PBBu0sJfj^<{wZm=kb*zZncJl~T(2>F%pu1qcy)$W~>P zRoW+BeAZpj-Re^-rPw8QG{>)|3n3$H>$owW%{zn6jB9@U$?Iy-QhRfag8GC|CR^)8 z{KZagLSB9<+R@I8qUZNcvz9}&X<0sMSY5n5?7eT-HCk?8S=9@8Vs;_X4y|6=ZfEi9 zstej1MFphp7y`PgSw8u^&R)w)qag(Y1D26Fx$^3o~TS;2X zSmGPC;ZEbWWJsmt1r(ky5E=|OGyG84(__b0NACBimZtRR23_3g=XZ%yb*%jkrjML_ zp!=}`J&V4ye}AgB;2i}DCu-58W_V--7c1Lqj`@2V3BOYfQcXUer?PR2r4l02jeWf(_~LLD0@u?)G5_Ery?Xv6Iy$f_ zoaei6y@+|bAH`-?DbaRb?u69q{TieG4-n*;W}V(lP-#0kO`&@F*+jovlzm4ma3}Hz z{PE1CshK0RjzT01fuvbsmf_X=E(j((s?n5L*pR`mq2;cwt`z7PBF@cI@EBG9B$~`I zXmzgoxY@U|!l$hzqU;p5$LRJh+tIM3z>`>bfO?>mqV#Q8s8?62Ko4pP!|;B=yX*wU z$H&KIMh4->0H2qIN|VF-`nJyXhdjQ2c(HGImtL0Dntcepf}hJGo>xcDa{ z7Nc&<8Y3)a4{+y_WHvY#X}hhM@xjq=BkHoJRr|p_YI5E+;8lQ%3#OMB%DwKPU3S@J zMOQa2M+l3*J(WR~V?J(@6aX9`n#_$tDW1$7suL?`i!2wr6;f+YY%boA$cjBp)oLVGz}Lud$n^meXmaBDEXR>Y+|7;Qb(`5Hv9{j<@j5 zeepB_6fR_@zP-|<_F`osnOdI461P7okR!KVkOA#ZJg-j|?pvgqUZ3_|A!BlIa1c^A z6K~u8Nlh&F6Y7-Oi8D4!c)rF7_vh11*nIuN*!t zJz@cLr;v#ttZS#Al^+!newTKg_2UjNa-AwiT%Z7duunqS;SBu(3w+R-OLpr_|oxwK|W8P%ZhV4!0(VZ=p!dHF*U7Btx4O9+cziV{bt{g ze&y}{ks_ZS_4oQ!_#m7Lg?Y2|YL+rB{8g|sIOM+}QvS=Kxqtgw!n}m`r#m}lf#Ecj zeXQ@L=pd5K^Pk^zSqXA63$cp+mU~XoeF?I8^2L9wnpXOuyum_CEA#sfItB*PEz;Xj zb-Ta1^)MX|S4vWfl8O?djC7R5Oia}68p{(RMA9Swl<5Sj+UCahF>rEb%>R&$nxH<1 zNrmX?nc>hh{1&{w?@vuH)UmZ7BEmyz$@Kj6^y2*NUSV@M%{4?k4N;Tbr8Yj3gZBHu z^-zC#DxR30-0F`}DmE%UHYz$&QqqVXIFXO(uy1;Da&q#!Nn_=p%#r@Cn%!$h?JvKbrirBn#y-i^ZT;r#Y;fP#`1 zGn0@a30Z+-NFhyZF_ih+|2)%O%>?;aaE^vgTv{^(5;px;y)U}CyPM)dKKq5Ww(q|$zQXN=h=2waO+^v}3!8?Ee?0{5e$x>B zJGfob@bCr)20soB!a*h$QemBTzI3Jv4TUl%_`3}GBtgCAy!gC>C96P4f(88|9+IbL zXAkU-&@^l9`4gS#6qJ;dJY+wIzYi~rN6C+{7biu_7GJO`jO|M8AFJcMoLtEfQgK`0Ci%p*+bV`5J` zA4DBaGgGnBqA9%8T{?e;e8Y!bQUdt3asPL>lS4>em89k6whjbX(>Iu->%ov(vp%=deq7z4!i`T zd`=T)V56hu9r^zKyYj~OagNNu?!ao~>#u(vqUoQi#={{F)3O8Td%1CJ1t4Hx5H3Ig zxT}Vp0s_0m)$R1nq!o-d%W!5KatGJVLGAh6y?;2<6@9xLdtpC6fV@$vAF@JY!qXdszuscoXF zY9`Nd{_yYZ^JVjvi11iNSy^k0NE%aa`PP|*rCi(x53de^0M-> zid#xAe-~$tEe_p3Krvu(0u|314Q8hzP3Zl*Au3et94yk(@|ZN_kT=SUsV0*C8w&;U zAs)+bo57a9=MzQ3_!k$$*>G0OmtS*L+M&!pikU$DXY@FwHCRa=_3t#QF7?&O>@k10 zf}NB}+>J_EvKIXR(B1iO$K(GOY4ljrd2^-TlxzMbbMgUKuSlY3(D^!>#JMx zqmDzkNs^Y4NoVo&01HzM0EgiJJerIg4Gv(tyuAF;RJn~sh(T_KRLX21aN?tD?Q`bc zx>G1j9MuNDg zxbCKwXHy;4;gI3c{(6_t?cJz=)sX+yR&j-r>(Ua>-e~dBEavkVo(03xldF|9P}Mv- zCR)|6@q8enaQ_EWjsU0Uk1VKZPdGSaB4Nws>=^rgJkCq(kkge{@k{s!-cuL2|6x9R zQhs-D->vP>Tw%4x!&ePk!dYFh)xej;#KaOr!fv;*!J$bbO!^%G`=zp=hb#CQp;Lr~ z>bBd9SBOqv14f~oFL$UX6x8cjL=$vuE6Ls`1?o_>a%GOk*Q<~gTC1& zv6`9nF{i^#A+-_~)Y51NK9Rq}oS z?bNq8Di;psRj&b&)PakWjTz1Bx7ct-2W-E1jGv^3T=Q$t7+6gFI8Cb@ay)Hsv=g)ivNal*7Qb}3*=v>(l?YRD8*huZgMZ<7=XF`fO0V^O80}Mhhn&TC=yN(M=y?zIaK%}!(P7zvycJr+ z?yE6zc6T#!W;#^;v&-JpT%!x{&Mu@)ry1-hF}W_KKWW(I${$vBTDI}N*)35#+D%erSeXLO_ zv3BNIBrn@A&GJc#9sh@FI2Ns zh>p&-)f!@fF>4uEtX6eD{nqy3fX5A0i~%C%_AD$ud`}zmy(_F!cg7wFq~>yHZXP{5 z++J&y;*K7%cLc9bqCorcyW_4p{?oTt*I-G+e@-X7{WTngVz&|9KYM6Oe~OhQ!c-+XuFb;?&X)$tLOMQK?JK z2abMzeh(8hbM5bh#QJNpn~=5yi)4jlg4=IDOjov4%xThUIXrC!2QWVA`9rHbu@w1E zdJ+rG9j~B~GoP$b_q1OOhi|~#-QW2!;|ITMKU*?4P4T$mj*9RioXnrU2a2`3+bka~Ka6GKF!ZvJRYUaJTd(j3 zposJ2m4?-+qe@NhQ=EUjjw}wn&;3D!?GrK?DsX^5j;L3%m$Cw+rWj# zHGbiDFnNh$h$E=2LOjks`T;U4Q}MB=H+P$+Ceq$6*P0K%h-1I4F4g;sBR+HbAX2fj za-j{8qw}}>V;nILC^-rO!h3v`2*lkYsc!ILk&T3%J_K^i#63c3WM-u$Qw;hdfYX8` zjPc)Dw*}B(0Lk-u zN^PAqa^VDl($0s01HZ#L+=Pn-P> zTFhg6j5|ADbm9dtVdM|*ZXzDz*mP$y7OH)nCVUX(H2pvyg1~Orkd)QFT|6n>XF~dY zqKf(F^BuMFA0U0{gkX8MGc-&Ap@#qX=jyeYlSif+xiL)$W7aUxMoLCf^>W59-WDZyd$@`phb=7F%)gHluiP(C@t}VPfL9nw{3ln~<83JWj+9+^i@%hO5=offjpdiT{` zqC)ywpDY1tsf?nG%Jnn~v$f6p;HDI_Q)Hw2yl*Fe#Xt~*RY6VlMboS?i(D~;MnH#^ zw9`MWJ}(qmzZ}iitaZ7bo^|zCmwFQO2W5n8tUgou1P{v!fnyPp{oTW}Exl@WMexUxx6RCo9%p3wgXMPeu_vR=5BUF0I zE#w6bOXc7U5&a_+3u>0Y!g3L_38ZpN!i5FjR8A79TI8 za0&_vS)6w7?DtpZePan}dj>z}kpRsOq;m&rILH)=zuW}gX&1KIAR2YM9-ltlSCmNk zc97V^;N({B6JvTk+%Y0z{x~n9Ys!U!9`HC}eSuMTcaDgTlx5cdW@lgC*BceN+}gG9R916&ON2c)Ze zql0)`<Co%8|vKJ{AjClN9cCcQk~hfuFnl$38=&`*7MEvfEiG8Oy)<4p{zC+cvkx-stE#@rBoXIoy(|w#>X3mJ^c^c ztj^c%NCOh{-;@t)j}LQ9r95q>U4DKRy&5S~ZXeHYD8>1v=Q`Q%ci1RAPthvT1%rQo zwp?quxO#tX_pLsP@PvE9sL1B`Nf(Z7$CZ}Sv5Wk9diBoZvrxEBkCciBm;Dj*Ts3PO zw5+Jfz;jLq^=g7USjBA2nVABIUT1>8>KZ%kwFg=0gCJfy?a=`?)=mndXK%tn+;^*M{aqdW9(YLvke@;+1g6pLWDel<89dcD>zWu8Ew5kJV=G=wu_q1S9I& zZgYzi=;gj7#@X3fEiCSvMq8v^A~2~G1_qWqaexDY{AA6$3zeFF3rm;YuDe2BkC|+=8Wqp$lS+v5lJ}<@B`T)QDh9eOlJ#iLYtBk9+D+{mm1I{R zmqPEB1_nN|PORwa8YMk|6^6He)q3}my=}*F(3f(H)ELL*uFJTw_O6IN<<9e6^?-qa zkw)jLwLWc^qf!!It*@A~v9+xMxnlo@Z}GR_Bp8&GF%}tFH#b$SFy6ha(`A@}J#}U2B;>0#}g< zzcc+l6sK$*h76?4do8xDkHX#C> za9sHCFzAcdgR;W&yxaZkKH|-7KUtrOS{{#_AM-JHk;sbrNv!*Eel68xh#%4+sznh6MjQUC+CK_Y4}x)lPv8LF9!~3wtmJQFFsgrh z97gclV51)pFTMTSad-q?JOuooopbrGhuZ(!YzpTf{69Ug^gj(<`M1@DX3h6M+Y*3% z`+R#GUps|3fsRddcQP-xNlhW=&BwiY%1`XL;VHH!Bdh5DYcnS;4N?V(TT6+A?!qHt zu>8xu41Cdp@H;BM<@Qv^^`Gv(G}ZJR0`efL@~;mQ>bro)**jX6?_)!H!%)QsMz=_? zsOjen>xYo--F-c=&PaN}@1UK~7<(U~+U-xg5%B!^%}(v=EOlSaW)CeE_|5X!SbS?M z&xtJoV!&KJgJAc5d}hRY=k0q$WYyd9lPQYT_H$ls^EvKZ066#xY){E9$UZ7t6Q3Y< zD;{aIN5s9u{k&1Ktc6+R4I#4ixN_Jx_`LtH z>Wt2|!AnhM^LlS)k#xNZ`P?;L^&r^67eg?M+}JLaQ3iB;#`H-ovpLB&6~0PP}e*>f#-)e5L%;H^i-f zSkl;g5(x@y(aEHI!?Z4PGlv+;d-~Pi4LM zRrfR~2wo$-?-BkvQgaFMj&OX1Yo*=2`S8rdaSQRveeZ_SOa4hp>VC|VX9)2oK62Z} zp%hjvgdYido#Y>>T~1N-xNo@D%2G}!fcBEk1C(Fc)!9_Wm6v9C3%}iz=#-g7y{G`0 zUE}cUk#Ju9GW;Y&Go-Zg$Yl~QXo`D}LntFP2Bu%0BN7Tq~!vI3w zm-=I&G4E8Bi}fF(xT`}XzGP;a_pi2sTB(_h5RaF+CvaW&-L&~V6TW^eBIv#VsI}PK zdQ9k=cCkuXruzcH7zT28OF0C=rbT20Xv^esA^NRz!c!K5h?vM4+^}AdvwR^>WJY>(X z*8vVSa!>1lulK<74U(QsFqfgq)MUtI02MnI8+wsO5y;lY&cwoo?&)A+wIxh3J32h_ zn{tKSBy#ou^yMptRLw?5VO5n{sZG<~Egl_{(^IcsS?`3!*DAkRY^Gw_u+R`i9iAGW z5Lp~Y!{fC&xd&Bqh*EU9eqGzyNp_)>dtGl19=f(1n#|2+190pabo#sJWVQL*t`HpJ za{CT8CYaXE%&#_kJ#|B5>)}j$mE6coP?7UV?B80(0H1-k)D%?h$uuv%9e3?~?K$g?+$U?e&kqeDZ4$Y$+1b}P%0D9qiUz8l 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

  • #pp1>Jbym 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 z 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%0A(K)AQQ0L|RV#mHGDM!o< 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�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 JKEeQ)8~{PUMpFO) literal 0 HcmV?d00001 diff --git a/packages/docs/public/commerce-example/ai-reproduction.json b/packages/docs/public/commerce-example/ai-reproduction.json new file mode 100644 index 000000000..76624ee52 --- /dev/null +++ b/packages/docs/public/commerce-example/ai-reproduction.json @@ -0,0 +1,976 @@ +{ + "recordedAt": "2026-09-08T16:19:57.230073+00:00", + "scope": "One separate-context AI built a new local Field Notes app from an empty project, using the displayed brief and public references. Another AI reviewed and replayed it. Same host and tools; no prior conversation or existing local implementation provided to the builder. This is not a security sandbox or an external-company adoption study. Completion review added erasure, explicit fixture capability declarations and full local conformance. The current documentation brief has been strengthened since the original prompt recorded below.", + "prompt": "Integrate OpenIAP Commerce Protocol into this project.\nProduct and desired behavior: Field Notes is a subscription notes app. Build a local browser demo where Alice can buy Premium, cancel renewal while keeping paid access, and lose access at expiry. Bob must not be able to take Alice’s purchase..\nServices to use or own: Own the commerce backend and event receiver. Use fictional purchases and local fixture users for this first review; no external accounts or credentials. Choose a small stack for this empty project..\n\nReference: https://github.com/hyodotdev/openiap-commerce-protocol-example\nRead INTEGRATE.md for my role; follow BUILD.md for a commerce backend.\nInspect this project's instructions and stack. Install openiap-commerce-protocol; use its SPEC.md, generated bindings/schemas, and conformance tools as the contract.\n\nImplement the connection using existing project patterns. Start with a runnable local result. Run the applicable success and failure checks, fix failures, and rerun them.\nShow the running URL and user-visible outcomes, with source and verification commands for future changes. Separate fixture evidence from real store/deployment checks; list remaining work and product decisions.\nKeep changes uncommitted for review.\n", + "promptSha256": "4009e4594d627c78fe1154a1d987c5a709c41c8b1cb6d66aa6dba6562353ada6", + "reference": { + "repository": "https://github.com/hyodotdev/openiap-commerce-protocol-example", + "revision": "e52900c2f040a0c9aa895e4a605b4f3e84940652", + "briefs": [ + "INTEGRATE.md", + "BUILD.md" + ] + }, + "runtime": { + "node": "24.16.0", + "npm": "11.13.0", + "contractPackage": "openiap-commerce-protocol@0.1.0", + "protocol": "1.0", + "storage": "Node built-in SQLite" + }, + "localTests": { + "groups": 13, + "passed": 13, + "failed": 0, + "lifecycleVectors": 100, + "note": "Vector cases are nested within the test groups, not added to the group count." + }, + "independentAcceptance": { + "checks": [ + "Unauthenticated discovery succeeds", + "Capabilities validate against the published schema", + "Alice starts without access", + "Fixture purchase verifies", + "Verification response validates", + "Verification alone grants no access", + "Verification credential cannot bind", + "Verification credential cannot enumerate entitlements", + "Server binds Alice", + "Binding result validates", + "Alice gains one product", + "Access result validates", + "Access response contains no purchase token", + "Conflicting owner is rejected without disclosure (SPEC 4.4)", + "Bob still has no access", + "Premium note is server-gated before login", + "Alice can read her Premium note", + "Cancellation request succeeds", + "Cancellation preserves paid access", + "Cancellation stops renewal", + "Cancellation preserves the deadline", + "Subscription result validates", + "Access remains active one millisecond before expiry", + "Access closes exactly at expiry without an expiry notification", + "Expired entitlement list is empty", + "Premium note closes on the backend at expiry", + "pending checkout grants Bob no access", + "canceled checkout grants Bob no access", + "invalid checkout grants Bob no access" + ], + "observations": [ + { + "path": "/commerce/v1/capabilities", + "method": "GET", + "status": 200, + "body": { + "specVersion": "1.0", + "fixtureOnly": true, + "profiles": { + "verification": "1.0", + "entitlements": "1.0", + "events": "1.0", + "accountLifecycle": "1.0" + }, + "bindings": { + "rest": "1.0" + }, + "implementation": { + "name": "Field Notes local fixture backend", + "version": "0.1.0" + }, + "eventTypes": [ + "subscription.started", + "subscription.renewed", + "subscription.recovered", + "subscription.entered_grace_period", + "subscription.entered_billing_retry", + "subscription.expired", + "subscription.canceled", + "subscription.uncanceled", + "subscription.revoked", + "subscription.refunded", + "subscription.product_changed", + "subscription.price_changed", + "subscription.deferred", + "subscription.paused", + "subscription.resumed", + "entitlement.granted", + "entitlement.revoked" + ], + "stores": { + "google": { + "initialValidation": { + "provider": true, + "implementation": true, + "notes": "Fixture-only descriptor: Google-shaped evidence and local subscription records. No Google API or store notification integration." + }, + "serverNotifications": { + "provider": true, + "implementation": false, + "notes": "Fixture-only descriptor: Google-shaped evidence and local subscription records. No Google API or store notification integration." + }, + "subscriptions": { + "provider": true, + "implementation": true, + "notes": "Fixture-only descriptor: Google-shaped evidence and local subscription records. No Google API or store notification integration." + }, + "renewalEvents": { + "provider": true, + "implementation": false, + "notes": "Fixture-only descriptor: Google-shaped evidence and local subscription records. No Google API or store notification integration." + }, + "refundEvents": { + "provider": true, + "implementation": false, + "notes": "Fixture-only descriptor: Google-shaped evidence and local subscription records. No Google API or store notification integration." + }, + "expiration": { + "provider": true, + "implementation": false, + "notes": "Fixture-only descriptor: Google-shaped evidence and local subscription records. No Google API or store notification integration." + }, + "reconciliation": { + "provider": true, + "implementation": false, + "notes": "Fixture-only descriptor: Google-shaped evidence and local subscription records. No Google API or store notification integration." + }, + "entitlements": { + "provider": true, + "implementation": true, + "notes": "Fixture-only descriptor: Google-shaped evidence and local subscription records. No Google API or store notification integration." + }, + "revenueAmount": { + "provider": true, + "implementation": false, + "notes": "Fixture-only descriptor: Google-shaped evidence and local subscription records. No Google API or store notification integration." + } + } + } + } + }, + { + "path": "/commerce/v1/entitlements?userId=user_alice", + "method": "GET", + "status": 200, + "body": { + "userId": "user_alice", + "productIds": [], + "subscriptions": [] + } + }, + { + "path": "/commerce/v1/purchases/verify", + "method": "POST", + "status": 200, + "body": { + "store": "google", + "isValid": true, + "state": "ENTITLED", + "productId": "fieldnotes.premium.monthly", + "environment": "fixture" + } + }, + { + "path": "/commerce/v1/entitlements?userId=user_alice", + "method": "GET", + "status": 200, + "body": { + "userId": "user_alice", + "productIds": [], + "subscriptions": [] + } + }, + { + "path": "/commerce/v1/purchases/bind", + "method": "POST", + "status": 403, + "body": { + "error": { + "code": "FORBIDDEN", + "message": "A server credential is required." + } + } + }, + { + "path": "/commerce/v1/entitlements?userId=user_alice", + "method": "GET", + "status": 403, + "body": { + "error": { + "code": "FORBIDDEN", + "message": "A server credential is required." + } + } + }, + { + "path": "/commerce/v1/purchases/bind", + "method": "POST", + "status": 200, + "body": { + "bound": true + } + }, + { + "path": "/commerce/v1/entitlements?userId=user_alice", + "method": "GET", + "status": 200, + "body": { + "userId": "user_alice", + "productIds": [ + "fieldnotes.premium.monthly" + ], + "subscriptions": [ + { + "productId": "fieldnotes.premium.monthly", + "state": "Active", + "active": true, + "store": "google", + "expiresAt": 1791536400000, + "willRenew": true, + "renewsAt": 1791536400000, + "startedAt": 1788944400000, + "updatedAt": 1788944400000 + } + ] + } + }, + { + "path": "/commerce/v1/purchases/bind", + "method": "POST", + "status": 200, + "body": { + "bound": false + } + }, + { + "path": "/commerce/v1/entitlements?userId=user_bob", + "method": "GET", + "status": 200, + "body": { + "userId": "user_bob", + "productIds": [], + "subscriptions": [] + } + }, + { + "path": "/api/session", + "method": "POST", + "status": 200, + "body": { + "userId": "user_alice" + } + }, + { + "path": "/api/premium-note", + "method": "GET", + "status": 401, + "body": { + "error": { + "code": "UNAUTHORIZED", + "message": "Choose a fixture user first." + } + } + }, + { + "path": "/api/premium-note", + "method": "GET", + "status": 200, + "body": { + "title": "The quiet morning", + "text": "Some thoughts need more room. Take the long path home. Remember the light on the water." + } + }, + { + "path": "/commerce/v1/subscriptions/status?userId=user_alice", + "method": "GET", + "status": 200, + "body": { + "active": true, + "subscription": { + "productId": "fieldnotes.premium.monthly", + "state": "Active", + "active": true, + "store": "google", + "expiresAt": 1791536400000, + "willRenew": true, + "renewsAt": 1791536400000, + "startedAt": 1788944400000, + "updatedAt": 1788944400000 + } + } + }, + { + "path": "/api/cancel", + "method": "POST", + "status": 200, + "body": { + "status": { + "active": true, + "subscription": { + "productId": "fieldnotes.premium.monthly", + "state": "Active", + "active": true, + "store": "google", + "expiresAt": 1791536400000, + "willRenew": false, + "startedAt": 1788944400000, + "updatedAt": 1788944400000 + } + }, + "message": "Renewal is off. Paid Premium access remains until expiry." + } + }, + { + "path": "/commerce/v1/subscriptions/status?userId=user_alice", + "method": "GET", + "status": 200, + "body": { + "active": true, + "subscription": { + "productId": "fieldnotes.premium.monthly", + "state": "Active", + "active": true, + "store": "google", + "expiresAt": 1791536400000, + "willRenew": false, + "startedAt": 1788944400000, + "updatedAt": 1788944400000 + } + } + }, + { + "path": "/commerce/v1/subscriptions/status?userId=user_alice", + "method": "GET", + "status": 200, + "body": { + "active": true, + "subscription": { + "productId": "fieldnotes.premium.monthly", + "state": "Active", + "active": true, + "store": "google", + "expiresAt": 1791536400000, + "willRenew": false, + "startedAt": 1788944400000, + "updatedAt": 1788944400000 + } + } + }, + { + "path": "/commerce/v1/subscriptions/status?userId=user_alice", + "method": "GET", + "status": 200, + "body": { + "active": false, + "subscription": { + "productId": "fieldnotes.premium.monthly", + "state": "Active", + "active": false, + "store": "google", + "expiresAt": 1791536400000, + "willRenew": false, + "startedAt": 1788944400000, + "updatedAt": 1788944400000 + } + } + }, + { + "path": "/commerce/v1/entitlements?userId=user_alice", + "method": "GET", + "status": 200, + "body": { + "userId": "user_alice", + "productIds": [], + "subscriptions": [] + } + }, + { + "path": "/api/premium-note", + "method": "GET", + "status": 403, + "body": { + "error": { + "code": "FORBIDDEN", + "message": "Premium access is required." + } + } + }, + { + "path": "/api/session", + "method": "POST", + "status": 200, + "body": { + "userId": "user_bob" + } + }, + { + "path": "/api/checkout", + "method": "POST", + "status": 200, + "body": { + "outcome": "pending", + "verdict": { + "store": "google", + "isValid": false, + "state": "PENDING", + "environment": "fixture" + }, + "message": "Purchase pending. Premium stays locked until verification succeeds." + } + }, + { + "path": "/api/me", + "method": "GET", + "status": 200, + "body": { + "userId": "user_bob", + "status": { + "active": false + }, + "entitlements": { + "userId": "user_bob", + "productIds": [], + "subscriptions": [] + } + } + }, + { + "path": "/api/checkout", + "method": "POST", + "status": 200, + "body": { + "outcome": "canceled", + "message": "Checkout canceled. No purchase was made." + } + }, + { + "path": "/api/me", + "method": "GET", + "status": 200, + "body": { + "userId": "user_bob", + "status": { + "active": false + }, + "entitlements": { + "userId": "user_bob", + "productIds": [], + "subscriptions": [] + } + } + }, + { + "path": "/api/checkout", + "method": "POST", + "status": 200, + "body": { + "outcome": "failed", + "verdict": { + "store": "google", + "isValid": false, + "state": "INAUTHENTIC", + "environment": "fixture" + }, + "message": "Evidence rejected. Premium stays locked." + } + }, + { + "path": "/api/me", + "method": "GET", + "status": 200, + "body": { + "userId": "user_bob", + "status": { + "active": false + }, + "entitlements": { + "userId": "user_bob", + "productIds": [], + "subscriptions": [] + } + } + } + ], + "scope": "Separate verifier over real HTTP in a fresh database. Fixture clock moved directly only for the exact-deadline assertion; no store or production credentials." + }, + "cleanReplay": { + "directory": "/var/folders/zp/pwtvb2g50tz9hl05qgcgg63w0000gn/T/field-notes-completion-1g170af6", + "commands": [ + { + "command": [ + "npm", + "ci", + "--ignore-scripts" + ], + "exitCode": 0 + }, + { + "command": [ + "npm", + "test" + ], + "exitCode": 0 + }, + { + "command": [ + "npm", + "run", + "conformance" + ], + "exitCode": 0 + }, + { + "command": [ + "node", + "/Users/hyodotdev/.codex/visualizations/2026/09/08/01a0803b-b945-72e2-b34b-b16056325b77/commerce-ai-reproduction-20260909/independent-check.mjs", + "/var/folders/zp/pwtvb2g50tz9hl05qgcgg63w0000gn/T/field-notes-completion-1g170af6", + "/Users/hyodotdev/.codex/visualizations/2026/09/08/01a0803b-b945-72e2-b34b-b16056325b77/commerce-ai-reproduction-20260909/completion/independent.json" + ], + "exitCode": 0 + } + ], + "negativeControl": { + "detected": true, + "exitCode": 1, + "mutation": "processedAt < expiresAt changed to <= in a disposable copy", + "restored": true + }, + "sourceRestored": true, + "applicationEnvironmentVariables": [] + }, + "negativeControl": { + "detected": true, + "exitCode": 1, + "mutation": "processedAt < expiresAt changed to <= in a disposable copy", + "restored": true + }, + "uiReloadChecks": { + "source": "Clean source-only replay", + "results": [ + { + "stage": "purchase then reload", + "banner": "Alice’s Premium is active. Renewal is on.", + "access": "Premium is active", + "noteVisible": true + }, + { + "stage": "ownership conflict", + "banner": "Ownership stays with the fixture purchaser. No transfer is allowed.", + "access": "Free plan", + "noteVisible": false + }, + { + "stage": "cancel then reload", + "banner": "Alice’s Premium is active. Renewal is off; paid access remains until expiry.", + "access": "Premium is active", + "noteVisible": true + }, + { + "stage": "expiry then reload", + "banner": "Alice’s paid period has ended. Premium is locked.", + "access": "Free plan", + "noteVisible": false + }, + { + "stage": "account deletion", + "banner": "Account data erased from this provider and the app’s inbox. Existing sessions are signed out.", + "access": "Free plan", + "noteVisible": false + } + ], + "errors": [], + "mobileOverflow": false + }, + "failuresAndCorrections": [ + "Published runner exposed known-store mismatched evidence being classified before schema validation; ordering corrected and the case passed.", + "First source-only replay passed installation but failed 3 of 11 groups because data/ and evidence/ were assumed to exist. Test bootstrap now creates them; final fresh replay passes all 11.", + "Reloaded Premium account showed a free-plan banner. Initial banner now comes from backend access; purchase/cancel/expiry reload checks pass.", + "Completed the previously failing eraseUser operations: atomic provider deletion, app inbox cleanup, session revocation, in-flight delivery coordination and identity-free replay tombstones. Repeat and restart checks pass.", + "Declaring only a subset reduced runner coverage during review; the final explicit fixture descriptor declares all four profiles. Tests require every original case ID to remain covered. All 46 final cases pass. No real store support is claimed.", + "The first new erasure assertion expected HTTP 200. The installed binding requires HTTP 202; the server already used that generated status and the assertion was corrected." + ], + "fullConformance": { + "passed": 46, + "total": 46, + "ok": true, + "exitCode": 0, + "remaining": [], + "claim": "All four profiles and REST pass in the explicitly fictional fixture environment. This is not real store, public HTTPS, or production conformance.", + "priorCaseIdsPreserved": true, + "descriptorScope": "fixtureOnly: true; per-store notes explicitly describe fixtures; real Google API and notification integration are absent." + }, + "readerSimulation": { + "method": "AI cognitive walkthrough of rendered pages, not a human participant study.", + "journey": [ + "Buy", + "Verify", + "Connect the user", + "Open Premium", + "Keep it current" + ], + "personas": [ + "App owner who wants Premium with existing login", + "Service builder who only needs one commerce responsibility" + ], + "checks": [ + { + "question": "Where do I start?", + "answer": "Overview, then Follow a purchase. The sidebar keeps reference pages separate." + }, + { + "question": "What does each word mean?", + "answer": "The story explains purchase evidence, provider, binding, authentication, entitlements and webhooks at the relevant step. Each reference page opens with a definition and an example." + }, + { + "question": "What do I choose and hand to AI?", + "answer": "Build and review orders service ownership, a copyable product brief, then observable customer checks." + }, + { + "question": "Can I move through the story and return?", + "answer": "Five steps, Next/Previous, URL state, browser back, keyboard focus and smooth/reduced-motion transitions." + }, + { + "question": "Where is exact implementation information?", + "answer": "Per-step source links and expandable API details; Profiles and Authentication explain responsibilities before contract tables." + } + ], + "browserVerification": { + "checks": [ + { + "route": "getting-started", + "width": 1440, + "overflow": false + }, + { + "route": "implementation", + "width": 1440, + "overflow": false + }, + { + "route": "operations", + "width": 1440, + "overflow": false + }, + { + "route": "profiles", + "width": 1440, + "overflow": false + }, + { + "route": "authentication", + "width": 1440, + "overflow": false + }, + { + "route": "capabilities", + "width": 1440, + "overflow": false + }, + { + "route": "conformance", + "width": 1440, + "overflow": false + }, + { + "route": "rest", + "width": 1440, + "overflow": false + }, + { + "route": "graphql", + "width": 1440, + "overflow": false + }, + { + "route": "webhooks", + "width": 1440, + "overflow": false + }, + { + "route": "versioning", + "width": 1440, + "overflow": false + }, + { + "route": "ecosystem", + "width": 1440, + "overflow": false + }, + { + "route": "getting-started", + "width": 393, + "overflow": false + }, + { + "route": "implementation", + "width": 393, + "overflow": false + }, + { + "route": "operations", + "width": 393, + "overflow": false + }, + { + "route": "profiles", + "width": 393, + "overflow": false + }, + { + "route": "authentication", + "width": 393, + "overflow": false + }, + { + "route": "capabilities", + "width": 393, + "overflow": false + }, + { + "route": "conformance", + "width": 393, + "overflow": false + }, + { + "route": "rest", + "width": 393, + "overflow": false + }, + { + "route": "graphql", + "width": 393, + "overflow": false + }, + { + "route": "webhooks", + "width": 393, + "overflow": false + }, + { + "route": "versioning", + "width": 393, + "overflow": false + }, + { + "route": "ecosystem", + "width": 393, + "overflow": false + } + ], + "journeyNavigation": true, + "keyboardFocus": true, + "deepLinks": true, + "buildOrder": true, + "errors": [] + }, + "limits": [ + "No external human study or independent company reproduction" + ] + }, + "sourceArchive": { + "file": "ai-reproduction-source.tar.gz", + "sha256": "bc65cf19a6a0536a5a4b1b2954228f1fbee05b111b8ac27578865c3b498429c4", + "files": { + "README.md": "6280632029e0e6c2dc071f53731b551520004abfe0cf97db40f328dd173fb508", + "REPORT.md": "ddfe24dffe176faf2bb0a1d0ada96324699d7df34afd21d93a472d9f38495aaf", + "evidence/1-contract.log": "d94792e342b3df0de824d333970dd7cd0f601c449f708a0c2dd723bc05fc764f", + "evidence/2-verification.log": "eb3f1a263c818b8139fd345655d651ebf2bf65dba54f9fe52ffe419056820dd1", + "evidence/3-ownership.log": "7815c3add851e235a2ab1a03c97d2f30e6677f30c398a92459d66ad52187dfce", + "evidence/4-lifecycle.log": "7b74f954fcb2058f9533fcd7320fe59e843de858ded98b4bd5cc321c68d9bc85", + "evidence/5-delivery-attempt-1.log": "b56bcfee1a0ad3af06534583cb534387bab1ccc248f44ab4848455c66a850951", + "evidence/5-delivery-fixed.log": "4523ca403b61804f039b8b8cf965d9f0888924849ca774907f6a6f53c16a75c7", + "evidence/5-delivery.log": "6730ab0a39cab3e11de7da7329bbfcb75f43a0007422875c87e7c64d95db8b9c", + "evidence/6-recovery.log": "035b25a0438f09fcecc8abaa8b1f581c4e14ff06134e954219ffeed1683f739a", + "evidence/7-review-fixes.log": "dc72c313826af492797804e406ef29bf3a966ea1f8cb89956efcc111362c24eb", + "evidence/capture-attempt-1.log": "eb1c28d258ff586bb46e7cb080847f97587e50cda89f51ff33c3b33dfd7d1c65", + "evidence/checkpoints/1-contract.tar.gz": "b4115c91b37fafe873959b71b0ce87a12bf436e8126668108b348dd735dffe61", + "evidence/checkpoints/1-contract.tar.gz.sha256": "eeb3aea44cb7b43e2bd6ca6913954a489231bdab4247570dbab6c201aaa14b76", + "evidence/checkpoints/2-verification.tar.gz": "d71914193e9e971523519897528f8051f5f3c9ee30148abebc4958afcba0488b", + "evidence/checkpoints/2-verification.tar.gz.sha256": "3d26516b08a3ae5de6faf2a12365d231d8c3ac4b6e03c9197d1d12286cc78953", + "evidence/checkpoints/3-ownership.tar.gz": "d08bb3c1cc603b22fc675edc72a51f7798bdfbd45d3274d570c234629c2acb2d", + "evidence/checkpoints/3-ownership.tar.gz.sha256": "97c847d8673e4f9efe5c7362dd0f077a3e09f903193f7305de14ed0d53d60894", + "evidence/checkpoints/4-lifecycle.tar.gz": "2ffc72fc141f7836187305077b00253a097d2917e13ca02b0c337c2f150eecf9", + "evidence/checkpoints/4-lifecycle.tar.gz.sha256": "d67467dc07e13d6454e09e82d4239f0a3553a6d5d5c8ee9f3c77f2537e13784e", + "evidence/checkpoints/5-delivery.tar.gz": "d101955c14a9dba3ec0eaa50c8f56cecbac5607baf75e48dd6f60e1fa243a7e8", + "evidence/checkpoints/5-delivery.tar.gz.sha256": "0162e4cbf901254b6d4e544d3f87d0acb934fbd755b8bd8c196e1388f3120ef9", + "evidence/checkpoints/6-recovery.tar.gz": "d3afca2dc4b0055ef2ca4e3af121535f38b0a7eaf9fd9358534d142236769e62", + "evidence/checkpoints/6-recovery.tar.gz.sha256": "ad494daf9293e538ba8dcbe23bf120edf4660778cfbb9d527233f3a89de9e9f1", + "evidence/checkpoints/7-review-fixes.tar.gz": "31afcfbf188e6be061ded7b7fc0746e8609ea797ae49fe44ed70b37729d1e79a", + "evidence/checkpoints/7-review-fixes.tar.gz.sha256": "f25a513e1fd9601595a544858a0e1fd0fe68760cf5b8224794bb824a7640e670", + "evidence/clean-replay.json": "1fadb6e53b2e17a2f22cb8a62bdc970ad8df7430ae547a53dc6c199b85ad0b79", + "evidence/clean-replay.log": "48464a9bcfdafb2112b1e5b0539af7df8c0442623ad8ecf7f063713b365227cb", + "evidence/completion/account-erasure-desktop.png": "6f0f4a0faf2928b4ee0850154ece078f9c1876a1bfa48763d4b429f9e1a1cb4a", + "evidence/completion/account-erasure-mobile.png": "2256ac7d6eeb873007654b772a276ea1809cdbeb886561b8d6d76651b6601880", + "evidence/completion/browser.json": "b626baa3f3c5e86bcd3950be5ea9eb3a113cf59d4c6dc8747e3f9737d919b9b3", + "evidence/completion/conformance.log": "a3d5305f544f0d270482c31782b50a7c6a02094ee549c0b29cfa1b7b5e3dcd88", + "evidence/completion/independent.json": "f78c4e6c348bd675dab2d476b4dff77d8b579d8db8ca26866b88d4f0db238a3a", + "evidence/completion/independent.log": "2d6eece9127c5211aeda362058c99726ef82ecc31a28cdd136403cb009b4615d", + "evidence/completion/install.log": "086f0031e0f96fdfdd22598faefbaf0a8c26bdb2c540c5a3606b3d12f5862191", + "evidence/completion/negative-control.log": "5755842fa7e8d701ad8bff9f4cfaeeb4a86b1b388c1681922077fafead2ec38f", + "evidence/completion/replay.json": "a9d0b34e767033e6b79a98f2bdbc0b0fb3a186887c905d970eef6246952ab35a", + "evidence/completion/tests.log": "9681cd1a2698de26cf8eb56372eb044c4f8eda7bdf1c1f2a4c01ef786eacb022", + "evidence/conformance-attempt-1.json": "2ed54eccca4aa66dba6e2638985ecec153329c7e2f4fc49fa4b7a5e899f2bf88", + "evidence/conformance-before-completion.json": "d724a520af517d713a99e526e61f850a150d372c191ee5c8ecdbcb2e30be9287", + "evidence/conformance-command.log": "cd3541b979afe62ae7d7b13769f5d7e54d7f737ca94b9648e1a59b0b196ea958", + "evidence/conformance.json": "0f1d7c0597b9fe6cb0f12e157123c970c6552a29de0277a5965a029e7af91945", + "evidence/exercised-demo-state.json": "6439a5794e83d915e60265bc666496592fd2ceb084037a34bbbca82b43bb3164", + "evidence/independent-fresh-tests-failed.log": "0c449ca91898a0fdeb7e6c5803a58eed808aaea99c967b3b5a088b6ab4431eef", + "evidence/independent-replay-setup.json": "0f6eacdcac73c3b03587de85e0cb8066d2b2e80bd8342fb667f5536fe72cd7cc", + "evidence/initial-build-report.md": "f28fc67873461520db456868d2ebe0881a4572a55128b78d55e6281e2137456c", + "evidence/openapi-check.json": "219318259c8a4be71555404b095276053d29c8f826c8c4770bbafc98f38c27dc", + "evidence/ready-desktop.png": "617090264144026603431511d26c44f43ecfe9a13ead4426901266ed1fc705cf", + "evidence/ready-state.json": "7c39eaa1084849167be8df1e63e7c22c31a5cacd4518bde8ebef14d0f7e9e32d", + "evidence/reload-checks.json": "9d58a31e967b959c9afaae9a655dc150518ee84f1762e3ffa4c8dcba295ce0f6", + "evidence/reload-checks.log": "2ad392c520d825998fbce6a341b10324cac102e5e507ab81c6ba85573e280161", + "evidence/reload-expired-mobile.png": "30442351c8f64d497364f09d2b600f4adc7076952d2412758466b11fc41d57a6", + "evidence/screens/2026-09-08T16-11-15.208Z/1-contract.png": "2f0032f99377097a93ed07e349eb19f86ae521dbb0da2b8da695c69c6b367306", + "evidence/screens/2026-09-08T16-11-15.208Z/2-verification.png": "62cb3d00ea83fcbfe12576248808e1b71a3ce06cbabcc86649e3e75e6d26a2f5", + "evidence/screens/2026-09-08T16-11-15.208Z/3-ownership.png": "04aaeb977e6e5e7946ec08501b96b54f2eee5f5edfba1c1796f1705cc4d6cd31", + "evidence/screens/2026-09-08T16-11-15.208Z/4-lifecycle.png": "5c20a1da1347ba4378341be8910caa5e5b6c2d431314b9234c7c71d7d369bfe5", + "evidence/screens/2026-09-08T16-11-15.208Z/5-delivery.png": "9cab5594d76349b35f621fc203151a80225c35bcf4399b52220d0b9aed05ef3b", + "evidence/screens/2026-09-08T16-11-15.208Z/6-recovery.png": "1083b0fc9ce6fe41889ab1caee643ffbe0c09bf43205f0608d6410f913084511", + "evidence/screens/2026-09-08T16-11-15.208Z/capture-report.json": "698da611a63462b79476a4a3de55295213bd931dbefd77e134aaf3ee72109247", + "evidence/source-hashes.json": "1403e1b24cd3634b12d50196f38225347ca4c6ff20a3e3e8a61159475364da16", + "package-lock.json": "88049c5e7cfd4c51f9cc6ed7e7642779413b38ddf047a7cb758dfd7513b50ef6", + "package.json": "984428792cc161c2e2a83962109fe4229d5bc7ec37da19042bf085638454792e", + "public/index.html": "967816f80b828120dac7cd72ba10cf3c0d3deab3b1e042f63abd6b7a45a1c87d", + "scripts/capture.mjs": "6488a11f1c8e6464228362b3a4733164ddebe1607eb442f7d4957cf8a9f7d836", + "scripts/checkpoint.mjs": "35e29cfa747220d80fabbae12a8931b57bb076d32226603f53b89af9d57c984c", + "scripts/conformance.mjs": "6b1457c3e8880739226e79fdd592e7aeef15c8b68950ebd8c5165ee788b84feb", + "scripts/test.mjs": "5a59ef823a34da5d6cfa76cb20ffce0e0f718f8b3b01786fbb6761c695cd5e13", + "scripts/verify-reloads.mjs": "e9ab67840e85efb7075fea9fc19fba83859b3c1fc5e065ced4f3fdaa643044e8", + "src/commerce.mjs": "d373761c691b44f7cdcb44fdcc0029e0f756e86945b7b6789e061d0fdac42845", + "src/contract.mjs": "24f4a402661b36e60b3751c49397432740a647840cf3a95d8c00ff4fc8ef1bb5", + "src/fixtures.mjs": "c67fd2ac930f9afb6e7895195730f49a533db5a5e473cc24768a32eb5728195a", + "src/server.mjs": "9326a0a20248ae82097677a209e528a62ac334b476d3cfd6704da237efd7f4ab", + "src/storage.mjs": "c48f186e80a24d8e98100c5628f28aa159b388941137674cfd8f3f1ba1f492d2", + "src/webhooks.mjs": "d3f19ba5a64cd8d23e065ed6210a3614b00a9cb3b656451497efee9a125c6049", + "test/commerce.test.mjs": "422240cb19a47162875a25af183491c100bbbfe16635965a8b16983f104e595d", + "test/webhooks.test.mjs": "64091205635640e80d41baab1b24075391b307e3d53cf1b25aa533025f931a71" + } + }, + "limitations": [ + "Fictional store evidence, fixture sessions, and controlled clock", + "One process with separate SQLite commerce and inbox databases", + "Recovery covers orderly close/reopen, not OS crash or machine loss", + "Real stores, real login, multi-tenant deployments and public HTTPS operations were not exercised", + "External recipients must erase their own previously delivered copies; the local app demonstrates its own cleanup" + ], + "independentBrowserCheck": { + "source": "Clean source-only replay", + "results": [ + { + "stage": "purchase then reload", + "banner": "Alice’s Premium is active. Renewal is on.", + "access": "Premium is active", + "noteVisible": true + }, + { + "stage": "ownership conflict", + "banner": "Ownership stays with the fixture purchaser. No transfer is allowed.", + "access": "Free plan", + "noteVisible": false + }, + { + "stage": "cancel then reload", + "banner": "Alice’s Premium is active. Renewal is off; paid access remains until expiry.", + "access": "Premium is active", + "noteVisible": true + }, + { + "stage": "expiry then reload", + "banner": "Alice’s paid period has ended. Premium is locked.", + "access": "Free plan", + "noteVisible": false + }, + { + "stage": "account deletion", + "banner": "Account data erased from this provider and the app’s inbox. Existing sessions are signed out.", + "access": "Free plan", + "noteVisible": false + } + ], + "errors": [], + "mobileOverflow": false + }, + "initialBuild": { + "recordedAt": "2026-09-08T16:19:57.230073+00:00", + "fullConformance": { + "passed": 38, + "total": 42, + "ok": false, + "exitCode": 1, + "remaining": [ + "eraseUser: 3 cases", + "undeclared REST binding: 1 case" + ], + "claim": "No complete profile or binding conformance claimed." + }, + "localTests": { + "groups": 13, + "passed": 13, + "failed": 0, + "lifecycleVectors": 100, + "note": "Vector cases are nested within the test groups, not added to the group count." + }, + "readerSimulation": { + "method": "Cognitive walkthrough by the implementing assistant, using the rendered local page as an imagined first-time reader. This is a simulation, not research with human participants.", + "personas": [ + "App owner adding Premium with an existing login and paywall", + "Data-service builder receiving subscription events" + ], + "before": [ + { + "question": "What will I get?", + "finding": "The opening says connection and working behavior, but does not identify the concrete deliverables." + }, + { + "question": "What must I choose?", + "finding": "The brief asks for service choices before the page explains own versus managed commerce or which roles need a full backend." + }, + { + "question": "How do I get started?", + "finding": "The full prompt occupies the main reading path before role and acceptance guidance." + } + ], + "changes": [ + "Named running local demo, behavior checks, and maintainable source in the introduction", + "Moved product role and own/managed service decisions ahead of the prompt", + "Moved user-visible acceptance outcomes ahead of the prompt", + "Collapsed the long implementation brief; retained a direct link and existing Copy control" + ], + "after": [ + { + "question": "What do I get?", + "answer": "A running local demo, behavior checks, and source for future changes.", + "pageEvidence": "Opening What you get back paragraph" + }, + { + "question": "What do I decide?", + "answer": "My role, desired customer behavior, and which services I own or buy.", + "pageEvidence": "Choose what your business runs" + }, + { + "question": "Does a paywall or data service need its own full commerce backend?", + "answer": "No; AI implements the selected connection and does not need to build every role.", + "pageEvidence": "Your role paragraph" + }, + { + "question": "What does AI do, and what do I review?", + "answer": "AI implements and tests; I review purchase success, no grant for pending/canceled/failed purchases, cancellation versus expiry, and retry/restart behavior.", + "pageEvidence": "Introduction and Review the result your users will see" + }, + { + "question": "Can I actually give the instructions to my agent?", + "answer": "Clicked Get the AI brief, expanded Open the brief to copy, and clicked Copy; copied state became true at #build-brief.", + "pageEvidence": "Observed in mobile browser at 393px with no horizontal document overflow" + } + ], + "limits": [ + "No measured comprehension or task completion time from an external reader", + "An independent company still needs to validate its own product and service integration" + ] + } + }, + "updatedAt": "2026-09-08T17:24:34.999638+00:00" +} diff --git a/packages/docs/public/commerce-example/ai-reproduction.md b/packages/docs/public/commerce-example/ai-reproduction.md new file mode 100644 index 000000000..7b5918ba3 --- /dev/null +++ b/packages/docs/public/commerce-example/ai-reproduction.md @@ -0,0 +1,86 @@ +# A new project built from the AI brief + +A separate AI, with no conversation history, received the implementation page’s +brief with the product and service placeholders filled in. It started in an +empty directory and built **Field Notes**, a browser app with a local commerce +backend and signed event receiver. It used the public example and the installed +contract, choosing Node.js 24 and SQLite. The example itself uses Bun. + +The AI produced new implementation source; it did not run the existing example +as the completed product. Another AI reviewed the result, tested the browser, +and repeated installation and checks in a clean source-only copy. + +## What passed + +- All 13 local test groups, including 100 published lifecycle cases, signatures, + ownership isolation, retry/deduplication, rollback and orderly recovery. +- 29 separate HTTP assertions: verification alone grants no access; binding + selects the owner; Bob cannot claim Alice’s purchase; canceling renewal keeps + access; expiry closes access and the protected note exactly at the deadline. +- Clean `npm ci --ignore-scripts` and `npm test`, without installed dependencies, + runtime databases, output directories or application environment variables. +- Reload checks after purchase, cancellation and expiry, plus a mobile layout + check. The parent reviewer also exercised purchase, ownership rejection, + cancellation and expiry in the browser. +- All 46 portable conformance cases, with every earlier case retained. +- Account erasure: transaction rollback, in-flight delivery, other-user isolation, + session revocation, recipient cleanup and retry/restart behavior. +- A deliberate `<` → `<=` expiry regression made three related test groups fail. + The disposable copy was restored and its source hashes checked afterward. + +## What the review caught + +The first clean replay failed three test groups because output directories had +been created during development but were not created by the test command. A +reload also displayed a free-plan banner for an active Premium account. Both +were fixed and the same checks were repeated. The builder’s first portable +runner attempt additionally caught an input-validation ordering error, which +was corrected. Failed reports remain in the source package. + +The completion review then implemented account erasure and finished the fixture +profile declarations. A reduced-profile declaration would have skipped earlier +cases, so the final tests also require all original case IDs to remain covered. +The current brief now requires these completion gates. The original prompt is +preserved in the record rather than rewritten to match the later instructions. + +This was an AI implementation and review exercise, not a claim of a perfect +first attempt. No human supplied implementation fixes during the run. + +## Run and inspect it + +[Source and recorded evidence](ai-reproduction-source.tar.gz) · +[Machine-readable results and exact prompt](ai-reproduction.json) + +Extract the source into an empty directory. With Node.js 24 and npm installed: + +```sh +npm ci --ignore-scripts +npm test +npm start +``` + +Open `http://127.0.0.1:5197`. Start as Alice, buy Premium, switch to Bob and try +Alice’s purchase, then return to Alice to cancel renewal and advance to expiry. +Open Account deletion to remove her provider identity and the app’s event copies. +`README.md` explains how to start another fresh database without deleting a run. +`REPORT.md` and `evidence/` contain source revisions, commands, failures and fixes. + +## Scope + +The published portable conformance runner reports **46/46 passing**, exit code 0, +for all four profiles and REST in the local fixture environment. The descriptor +says `fixtureOnly: true` and explains fixture-only support in its store notes. +It does not establish a live Google integration. Notification, reconciliation, +and revenue integrations remain undeclared as implemented. + +Purchases, users and time are fictional. Real store validation, real login, +tenant isolation, public HTTPS operations and crash recovery were not tested. +The exercise uses one host and separate AI conversation contexts; it is not +independent company validation. Provider erasure covers its own records; the +app demonstrates separate cleanup of its received copies. + +The documentation was also read as two imagined first-time readers: an app +owner and an event-service builder. The revised walkthrough follows a purchase one step at a time, +explains each term where it is used, and separates reference pages from the +reading path. The build guide orders service choices, the expandable AI brief, +and customer checks. Twelve routes were inspected on desktop and mobile. This is an AI reader simulation, not a study with human users. diff --git a/packages/docs/public/commerce-example/build-brief.md b/packages/docs/public/commerce-example/build-brief.md index b5884a035..f9c0629bd 100644 --- a/packages/docs/public/commerce-example/build-brief.md +++ b/packages/docs/public/commerce-example/build-brief.md @@ -32,6 +32,14 @@ Implement the backend in my project. Do not require an OpenIAP or IAPKit checkou and do not invent request fields, response shapes, role rules, or enum values. Follow my repository's instructions. Keep work uncommitted for review. +Read this example alongside [IAPKit's service source](https://github.com/hyodotdev/openiap/tree/main/packages/kit). +The [purchase walkthrough](https://openiap.dev/commerce-protocol/getting-started) +connects each step to both implementations and their checks. Use this example +to understand the small SQLite flow; use IAPKit to study real store adapters, +project authorization, account erasure, and the GraphQL adapter. Compare the +relevant code at each milestone without making either repository a runtime +dependency of the new project. + ## Start with a reviewable local result Use the stack already in my repository. If this is an empty project, choose a @@ -66,26 +74,55 @@ Build these milestones in order: events profile requires the public HTTPS destination protections in the spec. 6. **Recovery:** reopen the databases with pending deliveries, resume processing, and prove that neither ownership nor receiver deduplication disappears. +7. **Account deletion:** remove provider identity and recipient copies, retry the + same erasure after restart, and reject stale account requests and late events. After each milestone, run it. Show the command, actual API result, storage change, and passing assertions. Capture the working screen. Do not manufacture logs, screenshots, conformance counts, or claims about capabilities not tested. +## Complete the local implementation + +Before calling the result complete, implement erasure for the account lifecycle: +remove the user identity from provider records and event history, preserve other +users, and prevent a late retry from restoring erased recipient data. Keep +provider erasure separate from the recipient's responsibility for delivered +copies. Exercise erasure during delivery, on repetition, and after restart. + +Run the portable conformance runner for every selected profile and binding. +Do not finish with tests that expect known conformance failures. Keep every +previously exercised case in the completed run; changing declarations must not +hide a failure. Describe fixture-only capabilities explicitly, without implying +that a real store API or notification channel was connected. + +Copy only source and package metadata into an empty directory. Install, test, +and start it there, without the development database or output directories. +Check the visible app after purchase, cancellation, expiry, reload, and deletion. + ## Deliver - A runnable local backend and small inspection UI. - One command that verifies the demonstrated flow and exits nonzero on failure. - A short visual walkthrough, with real captured results for each milestone. - The exact scope and remaining work, including real store validation, - authentication, erasure, multi-tenant isolation, public HTTPS delivery, - operations, and full profile conformance. Keep the main explanation short; + real authentication, multi-tenant isolation, public HTTPS delivery, and + operations. Include the passing local conformance report and its fixture scope. Keep the main explanation short; link the specification for details. +## Match the selected store + +Read the store table in `INTEGRATE.md` before replacing the fixture. Exercise +all evidence shapes the provider advertises. Keep the app account distinct +from the Amazon/Meta store user, and reject a claim for someone else's store +account. Recheck ownership for Amazon/Horizon access; never invent subscription +or notification support to make their flow look like Apple/Google. Prove +negative rechecks, outages, conflicting bindings, erasure, and restart. + ## Then extend toward a production provider Ask me which real store, backend identity system, and deployment environment to -integrate before using credentials or external services. Implement the remaining -operations of each chosen profile, including erasure for `accountLifecycle`. +integrate before using credentials or external services. Replace fictional store and session adapters with the chosen integrations. +Keep the completed profile behavior and erasure checks passing. Run the portable conformance runner for every advertised binding and profile; also run real store sandbox, recovery, isolation, and load tests. Treat IAPKit as an implementation example, never as a replacement for the protocol's contract. diff --git a/packages/docs/public/commerce-example/consumer-run.json b/packages/docs/public/commerce-example/consumer-run.json index 428988b85..743788f1b 100644 --- a/packages/docs/public/commerce-example/consumer-run.json +++ b/packages/docs/public/commerce-example/consumer-run.json @@ -1,5 +1,5 @@ { - "recordedAt": "2026-09-07T18:19:57.523Z", + "recordedAt": "2026-09-08T22:51:58.185Z", "scope": "Real loopback HTTP, signature validation and durable deduplication. Fictional lifecycle samples; no provider or store contacted. One emitter/project per receiver database. No business or revenue calculation.", "checks": [ "Health accepts the proxy public Host header", @@ -30,11 +30,11 @@ "results": [ { "event": { - "eventId": "9d14a7f3-78ff-4009-9cdf-954fdc34c916", + "eventId": "8848b69f-ed2d-417f-832b-bbdc92b7d572", "eventType": "subscription.started", "eventVersion": "1.0", - "occurredAt": 1788805137493, - "processedAt": 1788805197493, + "occurredAt": 1788907858142, + "processedAt": 1788907918142, "store": "fixture", "environment": "local-fixture", "projectId": "demo_project", @@ -49,7 +49,7 @@ "productId": "premium.monthly", "state": "Active", "active": true, - "expiresAt": 1788805257493, + "expiresAt": 1788907978142, "willRenew": true } }, @@ -60,11 +60,11 @@ }, { "event": { - "eventId": "14fefd1e-e3fc-42a6-bd64-90cea4544dd0", + "eventId": "10462632-3097-4a0e-9b9c-1b122814d84a", "eventType": "entitlement.granted", "eventVersion": "1.0", - "occurredAt": 1788805138493, - "processedAt": 1788805197493, + "occurredAt": 1788907859142, + "processedAt": 1788907918142, "store": "fixture", "environment": "local-fixture", "projectId": "demo_project", @@ -74,7 +74,7 @@ "productId": "premium.monthly", "state": "Active", "active": true, - "expiresAt": 1788805257493, + "expiresAt": 1788907978142, "willRenew": true } }, @@ -85,11 +85,11 @@ }, { "event": { - "eventId": "ef5407dd-fb63-499a-a70b-d416e3df0179", + "eventId": "db2d47db-4e58-46c3-b56c-d0a6d744c95e", "eventType": "subscription.renewed", "eventVersion": "1.0", - "occurredAt": 1788805139493, - "processedAt": 1788805197493, + "occurredAt": 1788907860142, + "processedAt": 1788907918142, "store": "fixture", "environment": "local-fixture", "projectId": "demo_project", @@ -104,7 +104,7 @@ "productId": "premium.monthly", "state": "Active", "active": true, - "expiresAt": 1788805257493, + "expiresAt": 1788907978142, "willRenew": true } }, @@ -115,11 +115,11 @@ }, { "event": { - "eventId": "40720621-a06e-4d0d-b3d9-36ded09162e1", + "eventId": "c0794713-9d34-4430-afd0-58b01c7f174f", "eventType": "subscription.canceled", "eventVersion": "1.0", - "occurredAt": 1788805140493, - "processedAt": 1788805197493, + "occurredAt": 1788907861142, + "processedAt": 1788907918142, "store": "fixture", "environment": "local-fixture", "projectId": "demo_project", @@ -129,7 +129,7 @@ "productId": "premium.monthly", "state": "Active", "active": true, - "expiresAt": 1788805257493, + "expiresAt": 1788907978142, "willRenew": false } }, @@ -140,11 +140,11 @@ }, { "event": { - "eventId": "8d10d963-0afd-4610-9cf0-fec12a53f230", + "eventId": "8a6b95a5-4c30-402f-851f-3be8105a0f44", "eventType": "subscription.expired", "eventVersion": "1.0", - "occurredAt": 1788805141493, - "processedAt": 1788805197493, + "occurredAt": 1788907862142, + "processedAt": 1788907918142, "store": "fixture", "environment": "local-fixture", "projectId": "demo_project", @@ -154,7 +154,7 @@ "productId": "premium.monthly", "state": "Expired", "active": false, - "expiresAt": 1788805196493, + "expiresAt": 1788907917142, "willRenew": false } }, @@ -165,11 +165,11 @@ }, { "event": { - "eventId": "b704818a-ca47-4d85-b5f5-da61ab75caa8", + "eventId": "24984b15-4f8b-48b2-b583-2d65399b2b79", "eventType": "entitlement.revoked", "eventVersion": "1.0", - "occurredAt": 1788805142493, - "processedAt": 1788805197493, + "occurredAt": 1788907863142, + "processedAt": 1788907918142, "store": "fixture", "environment": "local-fixture", "projectId": "demo_project", @@ -179,7 +179,7 @@ "productId": "premium.monthly", "state": "Expired", "active": false, - "expiresAt": 1788805196493, + "expiresAt": 1788907917142, "willRenew": false } }, @@ -190,11 +190,11 @@ }, { "event": { - "eventId": "c2bef40b-58ef-4fd1-a84e-e91e6c810a12", + "eventId": "0b66ad2e-6b25-470e-ab7c-61d305f58d71", "eventType": "subscription.refunded", "eventVersion": "1.0", - "occurredAt": 1788805143493, - "processedAt": 1788805197493, + "occurredAt": 1788907864142, + "processedAt": 1788907918142, "store": "fixture", "environment": "local-fixture", "projectId": "demo_project", @@ -204,7 +204,7 @@ "productId": "premium.monthly", "state": "Refunded", "active": false, - "expiresAt": 1788805196493, + "expiresAt": 1788907917142, "willRenew": false } }, @@ -216,10 +216,10 @@ ], "inboxCount": 7, "sourceHashes": { - "consumer.mjs": "3bd1a07e87e5e367775a3deadc71cd205dfc8e9757e632f2406791ae5db7ad73", - "webhooks.mjs": "60ee5a726ecd664e0e13b7eb3f44199abb5d600c696ccfca816e7d070104d2a0", + "consumer.mjs": "d8e168238270309157d52ca777fea30f1d37bae38b96e88148314c894bdb1b4c", + "webhooks.mjs": "4838bac7a9083440998409aa1ab543999495ea6a907036bc78ba2002feb588b2", "contract.mjs": "c97b51ed48875303c382059af5dc321005d677ab2ea834a6e00c060308bc2ab2", - "package.json": "6ff038e4eb85ed5e17e5e7b91149232a5c62e589e7a4083f152aa18dde944c92", + "package.json": "396fc93b7d50240739af2b817c172ffab8692245bd919de3b26ee713b56d455b", "package-lock.json": "6f5333cc45203d6a27fec82c9370a8c25fef7faab591467dd2ff3c79acd6ae1c" } } diff --git a/packages/docs/public/commerce-example/integration-brief.md b/packages/docs/public/commerce-example/integration-brief.md index c497c13fd..122ee9fc3 100644 --- a/packages/docs/public/commerce-example/integration-brief.md +++ b/packages/docs/public/commerce-example/integration-brief.md @@ -23,7 +23,7 @@ Use your favorite package manager: `npm install`, `pnpm install`, `yarn install` or `bun install`. This example's runtime is Bun. The contract is `openiap-commerce-protocol` package 0.1.0, protocol 1.0; it does not require Bun. -- `npm run demo:bridge`: maps Apple/Google OpenIAP purchase fields into the +- `npm run demo:bridge`: maps Apple, Google, Amazon, and Horizon OpenIAP purchase fields into the installed verification schema; rejects missing or unsupported evidence. - `npm run demo:consumer`: sends signed lifecycle events to a SQLite inbox over HTTP, repeats deliveries, rejects tampering, and reopens persisted storage. @@ -36,6 +36,13 @@ gives the endpoint, configuration, and limits. ## Task for the AI +Use the [purchase walkthrough](https://openiap.dev/commerce-protocol/getting-started) +to compare this example with [IAPKit's service implementation](https://github.com/hyodotdev/openiap/tree/main/packages/kit) +at each step. This repository shows the small local implementation; IAPKit shows +store adapters, project credentials, erasure, and both API bindings. Follow the +linked handlers and checks for the responsibility you own. The installed +specification defines the required behavior; neither implementation changes it. + Inspect this repository's purchase flow and choose the role from the table. Install `openiap-commerce-protocol` with this repository's package manager. Read its `SPEC.md`, generated bindings and schemas, and signature/lifecycle @@ -55,7 +62,7 @@ for the app team. Follow these boundaries: UI, targeting, or product catalog API; document this host adapter explicitly. 2. **App connection:** the app uses its OpenIAP library to fetch products and request a store purchase. Its purchase callback sends evidence to its - authenticated backend. Use `client-bridge.mjs` there to map Apple/Google + authenticated backend. Use `client-bridge.mjs` there to map Apple, Google, Amazon, and Horizon purchase fields into a verification input; this does not authenticate the evidence. Keep server keys and user selection on that backend. Verify, bind under the ownership policy, read current access, fulfill durably, then finish @@ -76,9 +83,49 @@ for the app team. Follow these boundaries: The current client `verifyPurchaseWithProvider` helper supports IAPKit's own API. A different provider name or base URL does not turn it into this protocol. -Other providers connect through the app backend's REST or GraphQL calls. The -Apple/Google helper does not support Amazon or Horizon, whose protocol evidence -requires store-specific user identifiers distinct from the app's user ID. +Other providers connect through the app backend's REST or GraphQL calls. Amazon and Horizon require a store-specific user identifier distinct from the +app user ID. Pass it as `context.storeUserId` to the bridge after authenticating +the store account link. `startAppBackend` requires `resolveStoreUser` for these +stores and rejects evidence belonging to a different store account. Never +implement that callback by copying a user ID from the request body. + +## Select the store before implementing + +Follow the six-step purchase flow with your chosen store. Verification and +binding use these evidence shapes: + +| Store | Purchase evidence | IAPKit access path | +| --- | --- | --- | +| Apple | `apple.jws` from the store purchase | Bind the verified subscription; read its current state and listen for lifecycle events | +| Google | `google.purchaseToken` | Bind the verified subscription; read its current state and listen for lifecycle events | +| Amazon | `amazon.userId`, `amazon.receiptId`, optional `amazon.sandbox` | Bind the verified receipt; each entitlement read rechecks RVS | +| Meta Horizon | `horizon.userId`, `horizon.sku` | Bind the verified store-user/SKU pair; each entitlement read rechecks Meta | + +For Amazon and Horizon, use `entitlements.productIds` for access. IAPKit does +not invent a subscription record, expiry date, or lifecycle event for these +ownership checks. An empty `subscriptions` list can accompany owned products. +A negative store answer removes the product; a failed store call fails the +read. Decide caching and outage policy in the app backend. Reads currently +fail if an account has more than 20 linked Amazon/Horizon purchase rows. + +For Quest, verify Meta's user proof on your authenticated backend before linking +that Meta user to the app account. Follow the official +[Meta user verification guide](https://developers.meta.com/horizon/documentation/android-apps/ps-ownership/). +For Amazon, establish the store account association through your application's +trusted sign-in and ownership policy. Receipt possession alone does not prove +which app account may claim it. The runnable comparison uses explicit fictional +session links; it does not implement your authentication provider. + +Keep consumable fulfillment separate: record each granted unit durably and +idempotently before finishing/consuming. A verified SKU is not a new quantity +to credit on every read. The protocol walkthrough demonstrates Premium access; +it does not implement a wallet or sell a Nami paywall. + +For IAPKit setup, configure Apple bundle/App ID and Server API signing key, +Google package and service account, Meta App ID/secret, or Amazon RVS shared +secret in the project. Keep secrets on the server. Enable Amazon sandbox only +for App Tester evidence. The local comparison requires none of these real +credentials; its external store responses are fixtures. ## Deliver and prove the connection diff --git a/packages/docs/public/commerce-example/run.json b/packages/docs/public/commerce-example/run.json index 97733ed5b..a2cb1cd85 100644 --- a/packages/docs/public/commerce-example/run.json +++ b/packages/docs/public/commerce-example/run.json @@ -1,5 +1,5 @@ { - "recordedAt": "2026-09-07T18:20:02.056Z", + "recordedAt": "2026-09-08T22:46:50.749Z", "scope": "Incremental implementation of the installed Commerce Protocol contract. HTTP, SQLite and signatures execute locally; store and clock are fixtures. No full profile claim.", "checks": [ "Fixture request matches the installed schema", @@ -76,7 +76,7 @@ "Verification role cannot enumerate users", "Malformed input is refused", "A real store is not falsely accepted", - "Erasure is explicitly unimplemented", + "Erasure rejects verification credentials", "Cancellation after expiry is ignored", "Expired fixture evidence has an expired verdict", "Tampered HTTP body has no inbox effect", @@ -132,18 +132,109 @@ "apple: matches the installed verification input schema", "google: maps evidence without forwarding client identity", "google: matches the installed verification input schema", + "amazon: uses server-selected store identity, distinct from the app user", + "amazon: matches the installed verification input schema", + "horizon: uses server-selected store identity, distinct from the app user", + "horizon: matches the installed verification input schema", "Rejects missing purchase", "Rejects unknown store", - "Rejects Amazon needs its own adapter", - "Rejects Horizon needs its own adapter", + "Rejects Amazon requires its authenticated store user", + "Rejects Horizon requires its authenticated store user", "Rejects missing evidence", "Rejects blank evidence", "Rejects non-string evidence", - "Rejects oversized evidence" + "Rejects oversized evidence", + "apple: unverified evidence cannot bind", + "apple: matching evidence verifies", + "apple: verification alone gives no access", + "apple: verification credentials cannot bind", + "apple: binding and retry keep one owner", + "apple: binding and retry keep one owner", + "apple: another account cannot claim the purchase", + "apple: owned product is accessible", + "apple: erasure completes", + "apple: erasure removes access", + "apple: erased evidence cannot be claimed", + "apple: verification before the fixture deadline respects the store's access model", + "apple: verification at the fixture deadline respects the store's access model", + "apple: verification after the fixture deadline respects the store's access model", + "google: unverified evidence cannot bind", + "google: matching evidence verifies", + "google: verification alone gives no access", + "google: verification credentials cannot bind", + "google: binding and retry keep one owner", + "google: binding and retry keep one owner", + "google: another account cannot claim the purchase", + "google: owned product is accessible", + "google: erasure completes", + "google: erasure removes access", + "google: erased evidence cannot be claimed", + "google: verification before the fixture deadline respects the store's access model", + "google: verification at the fixture deadline respects the store's access model", + "google: verification after the fixture deadline respects the store's access model", + "amazon: unverified evidence cannot bind", + "amazon: matching evidence verifies", + "amazon: verification alone gives no access", + "amazon: verification credentials cannot bind", + "amazon: binding and retry keep one owner", + "amazon: binding and retry keep one owner", + "amazon: another account cannot claim the purchase", + "amazon: owned product is accessible", + "amazon: an outage is an error, not cached access", + "amazon: a negative recheck removes access", + "amazon: a confirmed recheck restores ownership", + "amazon: erasure completes", + "amazon: erasure removes access", + "amazon: erased evidence cannot be claimed", + "amazon: verification before the fixture deadline respects the store's access model", + "amazon: verification at the fixture deadline respects the store's access model", + "amazon: verification after the fixture deadline respects the store's access model", + "amazon: a negative ownership verdict remains rejected after the fixture deadline", + "amazon: an ownership verification outage remains an error after the fixture deadline", + "horizon: unverified evidence cannot bind", + "horizon: matching evidence verifies", + "horizon: verification alone gives no access", + "horizon: verification credentials cannot bind", + "horizon: binding and retry keep one owner", + "horizon: binding and retry keep one owner", + "horizon: another account cannot claim the purchase", + "horizon: owned product is accessible", + "horizon: an outage is an error, not cached access", + "horizon: a negative recheck removes access", + "horizon: a confirmed recheck restores ownership", + "horizon: erasure completes", + "horizon: erasure removes access", + "horizon: erased evidence cannot be claimed", + "horizon: verification before the fixture deadline respects the store's access model", + "horizon: verification at the fixture deadline respects the store's access model", + "horizon: verification after the fixture deadline respects the store's access model", + "horizon: a negative ownership verdict remains rejected after the fixture deadline", + "horizon: an ownership verification outage remains an error after the fixture deadline", + "An active purchase has a delivered event copy", + "Erasure during delivery completes", + "An in-flight event cannot resurrect receiver data", + "An in-flight acknowledgement cannot resurrect the outbox", + "Repeated erase survives restart", + "An old signed event remains discarded after restart", + "A new event ID cannot bypass erasure", + "Verification cannot bind an erased purchase", + "Stale binding cannot restore an erased account", + "Another account cannot claim erased evidence", + "Erased account is inactive before paid expiry", + "Late lifecycle processing carries no erased identity", + "Persisted protocol records contain no erased user ID", + "Unknown-user erasure is accepted", + "Verification credentials cannot erase users", + "Provider erasure completes", + "Erasure retry after restart returns the same job", + "Purchase has no account identity", + "App event copies are erased", + "Erased account has no access", + "A stale binding retry cannot restore identity" ], "standalone": { "version": "0.1.0", - "passed": 138 + "passed": 229 }, "milestones": [ { @@ -673,6 +764,97 @@ "previousSource": "06-recover-reviewed-7/source.tar.gz", "passed": 138 } + }, + { + "step": 7, + "title": "Delete the account", + "built": "Idempotent erasure + receiver cleanup + durable deletion guard", + "result": "Alice is removed from purchases and event copies. Late deliveries cannot restore her account data.", + "simulatedTime": "2026-10-07T09:00:00.000Z", + "purchases": [ + { + "userId": null, + "productId": "premium.monthly", + "state": "Expired", + "willRenew": 0 + } + ], + "access": { + "userId": "demo_alice", + "productIds": [], + "subscriptions": [] + }, + "deliveries": [], + "inboxCount": 0, + "responses": [ + { + "operation": "eraseUser", + "httpStatus": 403, + "body": { + "error": { + "code": "FORBIDDEN", + "message": "forbidden" + } + } + }, + { + "operation": "eraseUser", + "httpStatus": 202, + "body": { + "accepted": true, + "jobId": "f350d8b6-da5f-4374-9af4-31cbd392efbb", + "status": "completed" + } + }, + { + "operation": "eraseUser", + "httpStatus": 202, + "body": { + "accepted": true, + "jobId": "f350d8b6-da5f-4374-9af4-31cbd392efbb", + "status": "completed" + } + }, + { + "operation": "entitlements", + "httpStatus": 200, + "body": { + "userId": "demo_alice", + "productIds": [], + "subscriptions": [] + } + }, + { + "operation": "bindPurchase", + "httpStatus": 200, + "body": { + "bound": false + } + } + ], + "checks": [ + "Verification credentials cannot erase users", + "Provider erasure completes", + "Erasure retry after restart returns the same job", + "Purchase has no account identity", + "App event copies are erased", + "Erased account has no access", + "A stale binding retry cannot restore identity" + ], + "totalChecks": 34, + "screenshot": "07-account-erasure-interoperable-6/screen.png", + "build": { + "request": "Delete the account from provider records and delivered event copies, including concurrent delivery and restart.", + "change": "Added idempotent erasure, a persistent deletion ledger, receiver cleanup and the seventh dashboard step.", + "review": "The running example checks erasure during delivery, repeated jobs, storage reopening, late signed events and stale purchase requests. The shared app waits for in-flight fulfillment before provider erasure; one receiver accepts separately authenticated providers without event-ID collisions.", + "id": "07-account-erasure-interoperable-6", + "label": "Erase", + "source": "07-account-erasure-interoperable-6/source.tar.gz", + "changes": "07-account-erasure-interoperable-6/changes.patch", + "report": "07-account-erasure-interoperable-6/run.json", + "previousSource": "07-account-erasure-interoperable-5/source.tar.gz", + "passed": 229 + } } ] } diff --git a/packages/docs/public/commerce-example/source.tar.gz b/packages/docs/public/commerce-example/source.tar.gz index c5c569d9be5f1700487159fbb78e40a7397d01c8..6c3755c995bb14a525af8ff15fc480d3f0213186 100644 GIT binary patch literal 54644 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 R?emZF{QnP~xr_kz0{~T<;HLlp literal 34042 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 CK=1DW diff --git a/packages/docs/public/commerce-example/verification.json b/packages/docs/public/commerce-example/verification.json index 2eab99cdf..057079b86 100644 --- a/packages/docs/public/commerce-example/verification.json +++ b/packages/docs/public/commerce-example/verification.json @@ -1,5 +1,5 @@ { - "recordedAt": "2026-09-07T18:20:43.843Z", + "recordedAt": "2026-09-08T22:51:18.098Z", "scope": "Each recorded archive extracted outside both repositories; patches applied in order from an empty directory; published dependencies installed with npm.", "results": [ { @@ -12,7 +12,7 @@ { "command": "npm ci --ignore-scripts --no-audit --no-fund", "exitCode": 0, - "output": "\nadded 10 packages in 375ms\n" + "output": "\nadded 10 packages in 407ms\n" }, { "command": "npm test", @@ -31,7 +31,7 @@ { "command": "npm ci --ignore-scripts --no-audit --no-fund", "exitCode": 0, - "output": "\nadded 10 packages in 362ms\n" + "output": "\nadded 10 packages in 240ms\n" }, { "command": "npm test", @@ -50,7 +50,7 @@ { "command": "npm ci --ignore-scripts --no-audit --no-fund", "exitCode": 0, - "output": "\nadded 10 packages in 274ms\n" + "output": "\nadded 10 packages in 238ms\n" }, { "command": "npm test", @@ -69,7 +69,7 @@ { "command": "npm ci --ignore-scripts --no-audit --no-fund", "exitCode": 0, - "output": "\nadded 10 packages in 254ms\n" + "output": "\nadded 10 packages in 269ms\n" }, { "command": "npm test", @@ -88,7 +88,7 @@ { "command": "npm ci --ignore-scripts --no-audit --no-fund", "exitCode": 0, - "output": "\nadded 10 packages in 265ms\n" + "output": "\nadded 10 packages in 273ms\n" }, { "command": "npm test", @@ -107,7 +107,7 @@ { "command": "npm ci --ignore-scripts --no-audit --no-fund", "exitCode": 0, - "output": "\nadded 10 packages in 269ms\n" + "output": "\nadded 10 packages in 255ms\n" }, { "command": "npm test", @@ -126,12 +126,12 @@ { "command": "npm ci --ignore-scripts --no-audit --no-fund", "exitCode": 0, - "output": "\nadded 10 packages in 267ms\n" + "output": "\nadded 10 packages in 261ms\n" }, { "command": "npm test", "exitCode": 0, - "output": "\n> openiap-commerce-protocol-example@0.0.0 test\n> bun verify.mjs && node --test checkpoint-tools.test.mjs\n\nCommerce Lab: 90 checks passed. No store or production service contacted.\n✔ patches preserve path-like source text across additions, changes, and deletions (79.4485ms)\nℹ tests 1\nℹ suites 0\nℹ pass 1\nℹ fail 0\nℹ cancelled 0\nℹ skipped 0\nℹ todo 0\nℹ duration_ms 127.779166\n" + "output": "\n> openiap-commerce-protocol-example@0.0.0 test\n> bun verify.mjs && node --test checkpoint-tools.test.mjs\n\nCommerce Lab: 90 checks passed. No store or production service contacted.\n✔ patches preserve path-like source text across additions, changes, and deletions (59.002209ms)\nℹ tests 1\nℹ suites 0\nℹ pass 1\nℹ fail 0\nℹ cancelled 0\nℹ skipped 0\nℹ todo 0\nℹ duration_ms 100.578291\n" } ] }, @@ -145,7 +145,7 @@ { "command": "npm ci --ignore-scripts --no-audit --no-fund", "exitCode": 0, - "output": "\nadded 10 packages in 294ms\n" + "output": "\nadded 10 packages in 266ms\n" }, { "command": "npm test", @@ -155,7 +155,7 @@ { "command": "npm run test:tooling", "exitCode": 0, - "output": "\n> openiap-commerce-protocol-example@0.0.0 test:tooling\n> bun test checkpoint-tools.test.mjs\n\nbun test v1.3.13 (bf2e2cec)\n\ncheckpoint-tools.test.mjs:\n(pass) patches preserve path-like source text across additions, changes, and deletions [55.46ms]\n(pass) failed attempts get new numbers and private paths are redacted [0.66ms]\n\n 2 pass\n 0 fail\nRan 2 tests across 1 file. [78.00ms]\n" + "output": "\n> openiap-commerce-protocol-example@0.0.0 test:tooling\n> bun test checkpoint-tools.test.mjs\n\nbun test v1.3.13 (bf2e2cec)\n\ncheckpoint-tools.test.mjs:\n(pass) patches preserve path-like source text across additions, changes, and deletions [50.67ms]\n(pass) failed attempts get new numbers and private paths are redacted [0.47ms]\n\n 2 pass\n 0 fail\nRan 2 tests across 1 file. [71.00ms]\n" } ] }, @@ -169,7 +169,7 @@ { "command": "npm ci --ignore-scripts --no-audit --no-fund", "exitCode": 0, - "output": "\nadded 10 packages in 272ms\n" + "output": "\nadded 10 packages in 347ms\n" }, { "command": "npm test", @@ -179,7 +179,7 @@ { "command": "npm run test:tooling", "exitCode": 0, - "output": "\n> openiap-commerce-protocol-example@0.0.0 test:tooling\n> bun test checkpoint-tools.test.mjs\n\nbun test v1.3.13 (bf2e2cec)\n\ncheckpoint-tools.test.mjs:\n(pass) patches preserve path-like source text across additions, changes, and deletions [54.37ms]\n(pass) failed attempts get new numbers and private paths are redacted [0.39ms]\n\n 2 pass\n 0 fail\nRan 2 tests across 1 file. [71.00ms]\n" + "output": "\n> openiap-commerce-protocol-example@0.0.0 test:tooling\n> bun test checkpoint-tools.test.mjs\n\nbun test v1.3.13 (bf2e2cec)\n\ncheckpoint-tools.test.mjs:\n(pass) patches preserve path-like source text across additions, changes, and deletions [52.24ms]\n(pass) failed attempts get new numbers and private paths are redacted [0.53ms]\n\n 2 pass\n 0 fail\nRan 2 tests across 1 file. [69.00ms]\n" } ] }, @@ -193,7 +193,7 @@ { "command": "npm ci --ignore-scripts --no-audit --no-fund", "exitCode": 0, - "output": "\nadded 10 packages in 262ms\n" + "output": "\nadded 10 packages in 286ms\n" }, { "command": "npm test", @@ -203,7 +203,7 @@ { "command": "npm run test:tooling", "exitCode": 0, - "output": "\n> openiap-commerce-protocol-example@0.0.0 test:tooling\n> bun test checkpoint-tools.test.mjs\n\nbun test v1.3.13 (bf2e2cec)\n\ncheckpoint-tools.test.mjs:\n(pass) patches preserve path-like source text across additions, changes, and deletions [50.87ms]\n(pass) failed attempts get new numbers and private paths are redacted [0.55ms]\n(pass) unfinished captures do not hide completed records [0.85ms]\n\n 3 pass\n 0 fail\nRan 3 tests across 1 file. [68.00ms]\n" + "output": "\n> openiap-commerce-protocol-example@0.0.0 test:tooling\n> bun test checkpoint-tools.test.mjs\n\nbun test v1.3.13 (bf2e2cec)\n\ncheckpoint-tools.test.mjs:\n(pass) patches preserve path-like source text across additions, changes, and deletions [62.29ms]\n(pass) failed attempts get new numbers and private paths are redacted [0.56ms]\n(pass) unfinished captures do not hide completed records [1.48ms]\n\n 3 pass\n 0 fail\nRan 3 tests across 1 file. [82.00ms]\n" } ] }, @@ -217,7 +217,7 @@ { "command": "npm ci --ignore-scripts --no-audit --no-fund", "exitCode": 0, - "output": "\nadded 10 packages in 273ms\n" + "output": "\nadded 10 packages in 286ms\n" }, { "command": "npm test", @@ -227,7 +227,7 @@ { "command": "npm run test:tooling", "exitCode": 0, - "output": "\n> openiap-commerce-protocol-example@0.0.0 test:tooling\n> bun test checkpoint-tools.test.mjs\n\nbun test v1.3.13 (bf2e2cec)\n\ncheckpoint-tools.test.mjs:\n(pass) patches preserve path-like source text across additions, changes, and deletions [52.12ms]\n(pass) failed attempts get new numbers and private paths are redacted [0.63ms]\n(pass) unfinished captures do not hide completed records [0.87ms]\n\n 3 pass\n 0 fail\nRan 3 tests across 1 file. [68.00ms]\n" + "output": "\n> openiap-commerce-protocol-example@0.0.0 test:tooling\n> bun test checkpoint-tools.test.mjs\n\nbun test v1.3.13 (bf2e2cec)\n\ncheckpoint-tools.test.mjs:\n(pass) patches preserve path-like source text across additions, changes, and deletions [52.53ms]\n(pass) failed attempts get new numbers and private paths are redacted [0.77ms]\n(pass) unfinished captures do not hide completed records [0.78ms]\n\n 3 pass\n 0 fail\nRan 3 tests across 1 file. [70.00ms]\n" } ] }, @@ -241,7 +241,7 @@ { "command": "npm ci --ignore-scripts --no-audit --no-fund", "exitCode": 0, - "output": "\nadded 10 packages in 269ms\n" + "output": "\nadded 10 packages in 309ms\n" }, { "command": "npm test", @@ -251,7 +251,7 @@ { "command": "npm run test:tooling", "exitCode": 0, - "output": "\n> openiap-commerce-protocol-example@0.0.0 test:tooling\n> bun test checkpoint-tools.test.mjs\n\nbun test v1.3.13 (bf2e2cec)\n\ncheckpoint-tools.test.mjs:\n(pass) archive extraction excludes macOS metadata and preserves source hashes [13.85ms]\n(pass) patches preserve path-like source text across additions, changes, and deletions [52.15ms]\n(pass) failed attempts get new numbers and private paths are redacted [0.42ms]\n(pass) unfinished captures do not hide completed records [0.90ms]\n\n 4 pass\n 0 fail\nRan 4 tests across 1 file. [88.00ms]\n" + "output": "\n> openiap-commerce-protocol-example@0.0.0 test:tooling\n> bun test checkpoint-tools.test.mjs\n\nbun test v1.3.13 (bf2e2cec)\n\ncheckpoint-tools.test.mjs:\n(pass) archive extraction excludes macOS metadata and preserves source hashes [12.45ms]\n(pass) patches preserve path-like source text across additions, changes, and deletions [50.19ms]\n(pass) failed attempts get new numbers and private paths are redacted [0.54ms]\n(pass) unfinished captures do not hide completed records [0.68ms]\n\n 4 pass\n 0 fail\nRan 4 tests across 1 file. [80.00ms]\n" } ] }, @@ -265,7 +265,7 @@ { "command": "npm ci --ignore-scripts --no-audit --no-fund", "exitCode": 0, - "output": "\nadded 10 packages in 276ms\n" + "output": "\nadded 10 packages in 279ms\n" }, { "command": "npm test", @@ -275,7 +275,7 @@ { "command": "npm run test:tooling", "exitCode": 0, - "output": "\n> openiap-commerce-protocol-example@0.0.0 test:tooling\n> bun test checkpoint-tools.test.mjs\n\nbun test v1.3.13 (bf2e2cec)\n\ncheckpoint-tools.test.mjs:\n(pass) archive extraction excludes macOS metadata and preserves source hashes [13.18ms]\n(pass) patches preserve path-like source text across additions, changes, and deletions [50.50ms]\n(pass) failed attempts get new numbers and private paths are redacted [0.56ms]\n(pass) unfinished captures do not hide completed records [1.11ms]\n\n 4 pass\n 0 fail\nRan 4 tests across 1 file. [83.00ms]\n" + "output": "\n> openiap-commerce-protocol-example@0.0.0 test:tooling\n> bun test checkpoint-tools.test.mjs\n\nbun test v1.3.13 (bf2e2cec)\n\ncheckpoint-tools.test.mjs:\n(pass) archive extraction excludes macOS metadata and preserves source hashes [11.25ms]\n(pass) patches preserve path-like source text across additions, changes, and deletions [50.24ms]\n(pass) failed attempts get new numbers and private paths are redacted [0.52ms]\n(pass) unfinished captures do not hide completed records [0.79ms]\n\n 4 pass\n 0 fail\nRan 4 tests across 1 file. [79.00ms]\n" } ] }, @@ -289,7 +289,7 @@ { "command": "npm ci --ignore-scripts --no-audit --no-fund", "exitCode": 0, - "output": "\nadded 10 packages in 295ms\n" + "output": "\nadded 10 packages in 276ms\n" }, { "command": "npm test", @@ -299,7 +299,199 @@ { "command": "npm run test:tooling", "exitCode": 0, - "output": "\n> openiap-commerce-protocol-example@0.0.0 test:tooling\n> bun test checkpoint-tools.test.mjs\n\nbun test v1.3.13 (bf2e2cec)\n\ncheckpoint-tools.test.mjs:\n(pass) archive extraction excludes macOS metadata and preserves source hashes [12.14ms]\n(pass) patches preserve path-like source text across additions, changes, and deletions [52.30ms]\n(pass) failed attempts get new numbers and private paths are redacted [0.54ms]\n(pass) unfinished captures do not hide completed records [0.69ms]\n\n 4 pass\n 0 fail\nRan 4 tests across 1 file. [82.00ms]\n" + "output": "\n> openiap-commerce-protocol-example@0.0.0 test:tooling\n> bun test checkpoint-tools.test.mjs\n\nbun test v1.3.13 (bf2e2cec)\n\ncheckpoint-tools.test.mjs:\n(pass) archive extraction excludes macOS metadata and preserves source hashes [11.15ms]\n(pass) patches preserve path-like source text across additions, changes, and deletions [52.33ms]\n(pass) failed attempts get new numbers and private paths are redacted [0.47ms]\n(pass) unfinished captures do not hide completed records [1.45ms]\n\n 4 pass\n 0 fail\nRan 4 tests across 1 file. [82.00ms]\n" + } + ] + }, + { + "id": "07-account-erasure", + "archiveSha256": "382af7547188b623958a204e07cc101996bc448d9fa6774d7128a377f708a074", + "patchSha256": "ff027cb4e540e0f1cf9886a8c78e884d2ea779ad465dbd739a70dee62a119664", + "sourceHashesMatch": true, + "patchAppliesExactly": true, + "commands": [ + { + "command": "npm ci --ignore-scripts --no-audit --no-fund", + "exitCode": 0, + "output": "\nadded 10 packages in 283ms\n" + }, + { + "command": "npm test", + "exitCode": 0, + "output": "\n> openiap-commerce-protocol-example@0.0.0 test\n> bun verify.mjs && bun test composition/app-backend.test.mjs\n\nCommerce Protocol Example: 159 checks passed. No store or production service contacted.\nbun test v1.3.13 (bf2e2cec)\n\ncomposition/app-backend.test.mjs:\n(pass) account deletion waits for in-flight fulfillment and retries provider erasure after app restart [50.32ms]\n\n 1 pass\n 0 fail\n 6 expect() calls\nRan 1 test across 1 file. [116.00ms]\n" + }, + { + "command": "npm run test:tooling", + "exitCode": 0, + "output": "\n> openiap-commerce-protocol-example@0.0.0 test:tooling\n> bun test checkpoint-tools.test.mjs\n\nbun test v1.3.13 (bf2e2cec)\n\ncheckpoint-tools.test.mjs:\n(pass) archive extraction excludes macOS metadata and preserves source hashes [12.33ms]\n(pass) patches preserve path-like source text across additions, changes, and deletions [52.82ms]\n(pass) failed attempts get new numbers and private paths are redacted [0.55ms]\n(pass) unfinished captures do not hide completed records [0.88ms]\n\n 4 pass\n 0 fail\nRan 4 tests across 1 file. [83.00ms]\n" + } + ] + }, + { + "id": "07-account-erasure-reviewed", + "archiveSha256": "8470f4c123f182446036700e268a7263dd94dd2eeb11f2fce18e2343c3ff584f", + "patchSha256": "640aff152ff7f504baa55fc79ec0597a0023a553b96a8b3dd06c9b529a93d3cf", + "sourceHashesMatch": true, + "patchAppliesExactly": true, + "commands": [ + { + "command": "npm ci --ignore-scripts --no-audit --no-fund", + "exitCode": 0, + "output": "\nadded 10 packages in 281ms\n" + }, + { + "command": "npm test", + "exitCode": 0, + "output": "\n> openiap-commerce-protocol-example@0.0.0 test\n> bun verify.mjs && bun test composition/app-backend.test.mjs\n\nCommerce Protocol Example: 159 checks passed. No store or production service contacted.\nbun test v1.3.13 (bf2e2cec)\n\ncomposition/app-backend.test.mjs:\n(pass) account deletion waits for in-flight fulfillment and retries provider erasure after app restart [46.72ms]\n\n 1 pass\n 0 fail\n 6 expect() calls\nRan 1 test across 1 file. [113.00ms]\n" + }, + { + "command": "npm run test:tooling", + "exitCode": 0, + "output": "\n> openiap-commerce-protocol-example@0.0.0 test:tooling\n> bun test checkpoint-tools.test.mjs\n\nbun test v1.3.13 (bf2e2cec)\n\ncheckpoint-tools.test.mjs:\n(pass) archive extraction excludes macOS metadata and preserves source hashes [12.12ms]\n(pass) patches preserve path-like source text across additions, changes, and deletions [52.56ms]\n(pass) failed attempts get new numbers and private paths are redacted [0.57ms]\n(pass) unfinished captures do not hide completed records [1.02ms]\n\n 4 pass\n 0 fail\nRan 4 tests across 1 file. [82.00ms]\n" + } + ] + }, + { + "id": "07-account-erasure-interoperable", + "archiveSha256": "c8f2d1ee5c2038196158d13698c3d573f175efd204f691714ab3495a63bedf17", + "patchSha256": "5c0b9e7cb060f8051c4c96aa224cdfe94f5437bab24ab7962f1d1730556c9c1a", + "sourceHashesMatch": true, + "patchAppliesExactly": true, + "commands": [ + { + "command": "npm ci --ignore-scripts --no-audit --no-fund", + "exitCode": 0, + "output": "\nadded 10 packages in 280ms\n" + }, + { + "command": "npm test", + "exitCode": 0, + "output": "\n> openiap-commerce-protocol-example@0.0.0 test\n> bun verify.mjs && bun test composition/app-backend.test.mjs composition/receiver.test.mjs\n\nCommerce Protocol Example: 159 checks passed. No store or production service contacted.\nbun test v1.3.13 (bf2e2cec)\n\ncomposition/app-backend.test.mjs:\n(pass) account deletion waits for in-flight fulfillment and retries provider erasure after app restart [70.73ms]\n\ncomposition/receiver.test.mjs:\n(pass) one inbox scopes event IDs to authenticated emitters, survives upgrade, and discards erased users [5.17ms]\n\n 2 pass\n 0 fail\n 19 expect() calls\nRan 2 tests across 2 files. [141.00ms]\n" + }, + { + "command": "npm run test:tooling", + "exitCode": 0, + "output": "\n> openiap-commerce-protocol-example@0.0.0 test:tooling\n> bun test checkpoint-tools.test.mjs\n\nbun test v1.3.13 (bf2e2cec)\n\ncheckpoint-tools.test.mjs:\n(pass) archive extraction excludes macOS metadata and preserves source hashes [12.26ms]\n(pass) patches preserve path-like source text across additions, changes, and deletions [50.87ms]\n(pass) failed attempts get new numbers and private paths are redacted [0.52ms]\n(pass) unfinished captures do not hide completed records [0.83ms]\n\n 4 pass\n 0 fail\nRan 4 tests across 1 file. [82.00ms]\n" + } + ] + }, + { + "id": "07-account-erasure-interoperable-2", + "archiveSha256": "958e7cec476ca8254254f2222d361090c3e0d6599e74064381674ca9ba08de51", + "patchSha256": "61c76c1785e50e3e48cfa541d8ac9173df09746430f534b792ce16e3d2a84c96", + "sourceHashesMatch": true, + "patchAppliesExactly": true, + "commands": [ + { + "command": "npm ci --ignore-scripts --no-audit --no-fund", + "exitCode": 0, + "output": "\nadded 10 packages in 282ms\n" + }, + { + "command": "npm test", + "exitCode": 0, + "output": "\n> openiap-commerce-protocol-example@0.0.0 test\n> bun verify.mjs && bun test composition/app-backend.test.mjs composition/receiver.test.mjs\n\nCommerce Protocol Example: 159 checks passed. No store or production service contacted.\nbun test v1.3.13 (bf2e2cec)\n\ncomposition/app-backend.test.mjs:\n(pass) account deletion waits for in-flight fulfillment and retries provider erasure after app restart [81.75ms]\n\ncomposition/receiver.test.mjs:\n(pass) the original SQLite and memory composition remains compatible with the receiver [54.54ms]\n(pass) one inbox scopes event IDs to authenticated emitters, survives upgrade, and discards erased users [5.18ms]\n\n 3 pass\n 0 fail\n 20 expect() calls\nRan 3 tests across 2 files. [251.00ms]\n" + }, + { + "command": "npm run test:tooling", + "exitCode": 0, + "output": "\n> openiap-commerce-protocol-example@0.0.0 test:tooling\n> bun test checkpoint-tools.test.mjs\n\nbun test v1.3.13 (bf2e2cec)\n\ncheckpoint-tools.test.mjs:\n(pass) archive extraction excludes macOS metadata and preserves source hashes [12.64ms]\n(pass) patches preserve path-like source text across additions, changes, and deletions [57.15ms]\n(pass) failed attempts get new numbers and private paths are redacted [0.47ms]\n(pass) unfinished captures do not hide completed records [1.04ms]\n(pass) checkpoint replay follows predecessors instead of directory name order [1.42ms]\n\n 5 pass\n 0 fail\nRan 5 tests across 1 file. [90.00ms]\n" + } + ] + }, + { + "id": "07-account-erasure-interoperable-3", + "archiveSha256": "9f688f195dac38d32f7fd389e64f6cda3bb13691798869cd55e1c0d1f78c9388", + "patchSha256": "b7e551872a03c2e65744988ad448fabd4e9c2c7632ba89873d41604c8bd3765b", + "sourceHashesMatch": true, + "patchAppliesExactly": true, + "commands": [ + { + "command": "npm ci --ignore-scripts --no-audit --no-fund", + "exitCode": 0, + "output": "\nadded 10 packages in 318ms\n" + }, + { + "command": "npm test", + "exitCode": 0, + "output": "\n> openiap-commerce-protocol-example@0.0.0 test\n> bun verify.mjs && bun test composition/app-backend.test.mjs composition/receiver.test.mjs\n\nCommerce Protocol Example: 159 checks passed. No store or production service contacted.\nbun test v1.3.13 (bf2e2cec)\n\ncomposition/app-backend.test.mjs:\n(pass) account deletion waits for in-flight fulfillment and retries provider erasure after app restart [68.02ms]\n\ncomposition/receiver.test.mjs:\n(pass) the original SQLite and memory composition remains compatible with the receiver [43.15ms]\n(pass) one inbox scopes event IDs to authenticated emitters, survives upgrade, and discards erased users [4.11ms]\n\n 3 pass\n 0 fail\n 20 expect() calls\nRan 3 tests across 2 files. [187.00ms]\n" + }, + { + "command": "npm run test:tooling", + "exitCode": 0, + "output": "\n> openiap-commerce-protocol-example@0.0.0 test:tooling\n> bun test checkpoint-tools.test.mjs\n\nbun test v1.3.13 (bf2e2cec)\n\ncheckpoint-tools.test.mjs:\n(pass) archive extraction excludes macOS metadata and preserves source hashes [11.89ms]\n(pass) patches preserve path-like source text across additions, changes, and deletions [51.06ms]\n(pass) failed attempts get new numbers and private paths are redacted [0.42ms]\n(pass) unfinished captures do not hide completed records [0.92ms]\n(pass) checkpoint replay follows predecessors instead of directory name order [1.10ms]\n\n 5 pass\n 0 fail\nRan 5 tests across 1 file. [82.00ms]\n" + } + ] + }, + { + "id": "07-account-erasure-interoperable-4", + "archiveSha256": "a4b9e26bff92a0b097c754cc0f6ba4c51be676d2efe85d597daaf9fb60734402", + "patchSha256": "bd4061242e9a5ae9241af255d4e2d12bf53463b008ff90c6c98008e8af3c912e", + "sourceHashesMatch": true, + "patchAppliesExactly": true, + "commands": [ + { + "command": "npm ci --ignore-scripts --no-audit --no-fund", + "exitCode": 0, + "output": "\nadded 10 packages in 413ms\n" + }, + { + "command": "npm test", + "exitCode": 0, + "output": "\n> openiap-commerce-protocol-example@0.0.0 test\n> bun verify.mjs && bun test composition/app-backend.test.mjs composition/receiver.test.mjs\n\nCommerce Protocol Example: 213 checks passed. No store or production service contacted.\nbun test v1.3.13 (bf2e2cec)\n\ncomposition/app-backend.test.mjs:\n(pass) account deletion waits for in-flight fulfillment and retries provider erasure after app restart [75.34ms]\n\ncomposition/receiver.test.mjs:\n(pass) the original SQLite and memory composition remains compatible with the receiver [58.99ms]\n(pass) one inbox scopes event IDs to authenticated emitters, survives upgrade, and discards erased users [7.18ms]\n\n 3 pass\n 0 fail\n 20 expect() calls\nRan 3 tests across 2 files. [216.00ms]\n" + }, + { + "command": "npm run test:tooling", + "exitCode": 0, + "output": "\n> openiap-commerce-protocol-example@0.0.0 test:tooling\n> bun test checkpoint-tools.test.mjs\n\nbun test v1.3.13 (bf2e2cec)\n\ncheckpoint-tools.test.mjs:\n(pass) archive extraction excludes macOS metadata and preserves source hashes [12.41ms]\n(pass) patches preserve path-like source text across additions, changes, and deletions [64.06ms]\n(pass) failed attempts get new numbers and private paths are redacted [0.66ms]\n(pass) unfinished captures do not hide completed records [1.17ms]\n(pass) checkpoint replay follows predecessors instead of directory name order [2.04ms]\n\n 5 pass\n 0 fail\nRan 5 tests across 1 file. [97.00ms]\n" + } + ] + }, + { + "id": "07-account-erasure-interoperable-5", + "archiveSha256": "7f2c16e87db038c949d99873b75ae12ea6a081775b46f67567b4d9cc0ca6c57e", + "patchSha256": "97d80477c846449a93b48487468229111103fb6f0c02f291accaf4bbe401e6c4", + "sourceHashesMatch": true, + "patchAppliesExactly": true, + "commands": [ + { + "command": "npm ci --ignore-scripts --no-audit --no-fund", + "exitCode": 0, + "output": "\nadded 10 packages in 471ms\n" + }, + { + "command": "npm test", + "exitCode": 0, + "output": "\n> openiap-commerce-protocol-example@0.0.0 test\n> bun verify.mjs && bun test composition/app-backend.test.mjs composition/receiver.test.mjs\n\nCommerce Protocol Example: 213 checks passed. No store or production service contacted.\nbun test v1.3.13 (bf2e2cec)\n\ncomposition/app-backend.test.mjs:\n(pass) account deletion waits for in-flight fulfillment and retries provider erasure after app restart [101.58ms]\n\ncomposition/receiver.test.mjs:\n(pass) the original SQLite and memory composition remains compatible with the receiver [70.35ms]\n(pass) one inbox scopes event IDs to authenticated emitters, survives upgrade, and discards erased users [6.20ms]\n\n 3 pass\n 0 fail\n 20 expect() calls\nRan 3 tests across 2 files. [288.00ms]\n" + }, + { + "command": "npm run test:tooling", + "exitCode": 0, + "output": "\n> openiap-commerce-protocol-example@0.0.0 test:tooling\n> bun test checkpoint-tools.test.mjs\n\nbun test v1.3.13 (bf2e2cec)\n\ncheckpoint-tools.test.mjs:\n(pass) archive extraction excludes macOS metadata and preserves source hashes [15.24ms]\n(pass) patches preserve path-like source text across additions, changes, and deletions [56.47ms]\n(pass) failed attempts get new numbers and private paths are redacted [0.55ms]\n(pass) unfinished captures do not hide completed records [1.12ms]\n(pass) checkpoint replay follows predecessors instead of directory name order [1.84ms]\n\n 5 pass\n 0 fail\nRan 5 tests across 1 file. [99.00ms]\n" + } + ] + }, + { + "id": "07-account-erasure-interoperable-6", + "archiveSha256": "e0a75086014cbc5ecd7f42d39342cdc1be1d5e03aadc401bd4b2092ad3e875b3", + "patchSha256": "e53409eeedf577436a0b5d7c5b673f5742ff253d0a5f5ad09301fe90bae5827c", + "sourceHashesMatch": true, + "patchAppliesExactly": true, + "commands": [ + { + "command": "npm ci --ignore-scripts --no-audit --no-fund", + "exitCode": 0, + "output": "\nadded 10 packages in 304ms\n" + }, + { + "command": "npm test", + "exitCode": 0, + "output": "\n> openiap-commerce-protocol-example@0.0.0 test\n> bun verify.mjs && bun test composition/app-backend.test.mjs composition/receiver.test.mjs\n\nCommerce Protocol Example: 229 checks passed. No store or production service contacted.\nbun test v1.3.13 (bf2e2cec)\n\ncomposition/app-backend.test.mjs:\n(pass) account deletion waits for in-flight fulfillment and retries provider erasure after app restart [72.34ms]\n\ncomposition/receiver.test.mjs:\n(pass) the original SQLite and memory composition remains compatible with the receiver [63.30ms]\n(pass) one inbox scopes event IDs to authenticated emitters, survives upgrade, and discards erased users [6.49ms]\n\n 3 pass\n 0 fail\n 20 expect() calls\nRan 3 tests across 2 files. [212.00ms]\n" + }, + { + "command": "npm run test:tooling", + "exitCode": 0, + "output": "\n> openiap-commerce-protocol-example@0.0.0 test:tooling\n> bun test checkpoint-tools.test.mjs\n\nbun test v1.3.13 (bf2e2cec)\n\ncheckpoint-tools.test.mjs:\n(pass) archive extraction excludes macOS metadata and preserves source hashes [12.75ms]\n(pass) patches preserve path-like source text across additions, changes, and deletions [67.75ms]\n(pass) failed attempts get new numbers and private paths are redacted [0.44ms]\n(pass) unfinished captures do not hide completed records [1.13ms]\n(pass) checkpoint replay follows predecessors instead of directory name order [1.44ms]\n\n 5 pass\n 0 fail\nRan 5 tests across 1 file. [102.00ms]\n" } ] } diff --git a/packages/docs/public/commerce-source/example/README.md.html b/packages/docs/public/commerce-source/example/README.md.html new file mode 100644 index 000000000..c6e194f56 --- /dev/null +++ b/packages/docs/public/commerce-source/example/README.md.html @@ -0,0 +1 @@ +Commerce Protocol Example · README.md

    1# OpenIAP Commerce Protocol example2 3A runnable purchase-to-access backend, built and reviewed with AI in seven4milestones. Follow a purchase through verification, ownership, access, and5signed event delivery, and account deletion. Inspect the actual HTTP responses and database changes.6 7The backend uses the published **`openiap-commerce-protocol`** package. HTTP,8SQLite, and webhook signatures run locally; the store, users, and clock are9fictional fixtures. This is a learning example, not a production provider.10 11## Quick start12 13Install [Bun](https://bun.sh/docs/installation) for the HTTP and SQLite runtime14(tested with Bun 1.3.13). Use your favorite package manager for dependencies and15scripts; npm is shown here:16 17```sh18git clone https://github.com/hyodotdev/openiap-commerce-protocol-example.git19cd openiap-commerce-protocol-example20npm install # or pnpm install, yarn install, bun install21npm test22npm start23```24 25Open **http://127.0.0.1:5181**, then click **Run step 1 →** and continue through26step 7. Each step changes real local state. The dashboard shows purchases,27current access, delivery attempts, and expandable request/response details.28No store account, API key, OpenIAP checkout, or IAPKit account is required.29Modern Yarn uses the included `node_modules` linker.30 31![The completed local backend: expired access, delivered events, and inspectable responses](https://raw.githubusercontent.com/hyodotdev/openiap-commerce-protocol-example/main/docs/build/06-recover-reviewed-8/screen.png)32 33The screenshot comes from an executed source checkpoint. See its34[run report](https://github.com/hyodotdev/openiap-commerce-protocol-example/blob/main/docs/build/06-recover-reviewed-8/run.json)35and the [complete build history](https://github.com/hyodotdev/openiap-commerce-protocol-example/blob/main/docs/build/README.md).36 37## What you will see38 39| Step        | What changes                                     | Result to check                                      |40| ----------- | ------------------------------------------------ | ---------------------------------------------------- |41| 1. Contract | Load schemas; start with empty storage           | No purchases or access yet                           |42| 2. Verify   | Validate fixture evidence; save a purchase       | Verification alone grants no access                  |43| 3. Bind     | Attach the purchase to the backend-selected user | Alice gains Premium; Bob cannot claim it             |44| 4. Cancel   | Turn off renewal; queue an event                 | Paid access remains until expiry                     |45| 5. Deliver  | Sign events; retry a failed receiver             | A repeated delivery has one inbox effect             |46| 6. Expire   | Advance the clock; reopen SQLite                 | Access closes; ownership and delivery records remain |47| 7. Erase    | Remove provider identity and receiver copies    | Repeated deletion and late deliveries cannot restore the user |48 49Restarting `npm start` creates a fresh temporary database, so you can replay the50walkthrough. Step 6 reopens the existing databases **inside the running process**;51it does not simulate an OS crash or a new process recovering external secrets.52If port 5181 is occupied, run `COMMERCE_LAB_PORT=5183 npm start`.53 54## Use the part you need55 56| Your role            | Start here                                                                                                        | What this example provides                                           |57| -------------------- | ----------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------- |58| Paywall / experience | [Integration brief](INTEGRATE.md)                                                                                 | Host purchase/result boundaries; no paywall UI implementation        |59| Commerce provider    | [AI build brief](BUILD.md)                                                                                        | Fixture verifier, ownership/access rules, REST, SQLite, and delivery |60| Data / automation    | [Event receiver guide](https://github.com/hyodotdev/openiap-commerce-protocol-example/blob/main/docs/receiver.md) | A ready signed-event receiver with a durable inbox                   |61| Integrated platform  | [Integration brief](INTEGRATE.md)                                                                                 | How the roles compose without splitting account authority            |62 63`client-bridge.mjs` maps Apple, Google, Amazon, and Horizon OpenIAP purchase fields into the installed64verification schema **on the app backend**. Run `npm run demo:bridge` to check it.65`npm test` also exercises all four fixture shapes through verification, binding,66access and erasure. Amazon/Horizon cases include negative rechecks and outages.67It does not perform a mobile purchase or authenticate store evidence. The68current client `verifyPurchaseWithProvider` helper uses IAPKit's own API; other69providers connect through the app's authenticated backend.70 71## Receive events72 73```sh74npm run demo:consumer75```76 77This standalone check sends fictional purchase, renewal, cancellation, expiry,78refund, and entitlement events over HTTP. It repeats deliveries, rejects79changed signatures, and reopens the SQLite inbox. It needs no provider server.80 81For a persistent receiver, set `COMMERCE_WEBHOOK_SECRET` and run82`npm run consumer`. The endpoint is `http://127.0.0.1:5182/webhooks/commerce`.83See the [receiver guide](https://github.com/hyodotdev/openiap-commerce-protocol-example/blob/main/docs/receiver.md)84for HTTPS proxy setup, database location, processing responsibilities, and85expected results. Event ingestion does not calculate revenue or grant access.86 87## Build with AI, then check the result88 89Give [BUILD.md](BUILD.md) to your AI for a backend, or [INTEGRATE.md](INTEGRATE.md)90for an existing product. Ask it to implement one milestone, run it, inspect the91screen and responses, fix a failure, and repeat that same check.92 93The [build record](https://github.com/hyodotdev/openiap-commerce-protocol-example/blob/main/docs/build/README.md)94contains independent source archives, patches, screenshots, and execution95reports. The [review log](https://github.com/hyodotdev/openiap-commerce-protocol-example/blob/main/docs/build/REVIEW.md)96keeps the observed mistakes and corrections, including unfinished discovery in97the early snapshots. This implementation grew from an earlier internal98prototype; it was not generated from a blank project in one prompt. Task briefs99are implementation notes, not model transcripts or editor recordings.100 101## Verify or record a change102 103| Command                      | Checks                                                                    |104| ---------------------------- | ------------------------------------------------------------------------- |105| `npm test`                   | Current backend flow, failure cases, request mapper, and receiver         |106| `npm run test:tooling`       | Capture and patch tooling                                                 |107| `npm run verify:checkpoints` | Every archive, its exact patch chain, and an independent npm install/test |108| `npm run capture`            | A new immutable source checkpoint and actual desktop/mobile screenshots   |109 110Backend commands require Bun. Recording also requires Node.js/npm, Git, tar,111and Google Chrome. The [recording guide](https://github.com/hyodotdev/openiap-commerce-protocol-example/blob/main/docs/recording.md)112explains how to preserve a checkpoint and export evidence. GitHub CI runs the113runtime, tooling, archive, and documentation-export checks.114 115## Account deletion116 117Step 7 runs `eraseUser` using server credentials. The provider removes identity118from purchases and removes identity-bearing event records in one transaction.119A repeated request returns the same completed job, including after restart.120 121The app owns already-delivered copies: it erases its receiver inbox and retains122a keyed deletion marker so late signed events are acknowledged without storing123the deleted identity. The example also refuses rebinding erased evidence.124This is a local ownership policy; the protocol does not cancel the store subscription.125Database backups and the app’s own account records remain the operator’s responsibility.126 127Run `bun verify-erasure.mjs` to exercise deletion while a delivery is in flight,128late lifecycle events, repeated requests, and storage reopening.129 130## Replace the example with IAPKit131 132The OpenIAP checkout includes `packages/kit/scripts/docs/run-commerce-interop.mjs`.133It starts IAPKit with an isolated local Convex deployment and keeps one app134backend and receiver running while switching the commerce provider. See the135[composition guide](https://openiap.dev/commerce-protocol/ecosystem#composition-proof)136for the executed report, source, and command. No IAPKit account or store keys are needed.137 138## What remains for production139 140Real store validation and sandbox purchases, login, tenant141isolation, GraphQL, public HTTPS delivery protections, and operational recovery142are not implemented here. The backend advertises **no complete profiles**.143Schema checks and the local walkthrough do not establish profile conformance.144 145Implement every obligation of your chosen profiles from the installed146`SPEC.md`; add store sandbox, isolation, deployment, and recovery tests.147IAPKit is a reference implementation, not a substitute for those checks.148 149MIT licensed. See [LICENSE](LICENSE).150 
    \ No newline at end of file diff --git a/packages/docs/public/commerce-source/example/client-bridge.mjs.html b/packages/docs/public/commerce-source/example/client-bridge.mjs.html new file mode 100644 index 000000000..90c61bbdc --- /dev/null +++ b/packages/docs/public/commerce-source/example/client-bridge.mjs.html @@ -0,0 +1 @@ +Commerce Protocol Example · client-bridge.mjs
    ← Provider replacement walkthrough

    Commerce Protocol Example · client-bridge.mjs

    Source snapshot · 2026-09-08

    SHA-256 a6760f1a9059e650fa19ef96403b16f7860390fce390262276020bd2cc7d5078
    1import assert from "node:assert/strict";2import { operation, validate } from "./contract.mjs";3 4// Run on the app backend; the provider still authenticates the store evidence.5export function toVerifyPurchaseInput(purchase, context = {}) {6  const { store, purchaseToken } = purchase ?? {};7  let input;8  const required = (value) => {9    if (typeof value !== "string" || !value.trim())10      throw new Error("Purchase evidence is required");11    return value;12  };13  switch (store) {14    case "apple":15      input = { store, apple: { jws: required(purchaseToken) } };16      break;17    case "google":18      input = { store, google: { purchaseToken: required(purchaseToken) } };19      break;20    case "amazon":21      input = {22        store,23        amazon: {24          userId: required(context.storeUserId),25          receiptId: required(purchaseToken),26          ...(context.amazonSandbox === true ? { sandbox: true } : {}),27        },28      };29      break;30    case "horizon":31      input = {32        store,33        horizon: {34          userId: required(context.storeUserId),35          sku: required(purchase.productId),36        },37      };38      break;39    default:40      throw new Error("Unsupported purchase store");41  }42  if (!validate(operation("verifyPurchase").input, input))43    throw new Error("Purchase evidence does not match the protocol input");44  return input;45}46 47export function runBridgeDemo() {48  const checks = [];49  for (const store of ["apple", "google"]) {50    const token = `fictional-${store}-evidence`;51    const input = toVerifyPurchaseInput({52      store,53      purchaseToken: token,54      productId: "premium.monthly",55      userId: "untrusted-client-claim",56    });57    assert.deepEqual(input, {58      store,59      ...(store === "apple"60        ? { apple: { jws: token } }61        : { google: { purchaseToken: token } }),62    });63    checks.push(`${store}: maps evidence without forwarding client identity`);64    assert(validate(operation("verifyPurchase").input, input));65    checks.push(`${store}: matches the installed verification input schema`);66  }67  for (const store of ["amazon", "horizon"]) {68    const input = toVerifyPurchaseInput(69      {70        store,71        purchaseToken: "receipt-1",72        productId: "premium.monthly",73        userId: "untrusted-app-user",74      },75      { storeUserId: "authenticated-store-user", amazonSandbox: true },76    );77    assert.deepEqual(78      input,79      store === "amazon"80        ? {81            store,82            amazon: {83              userId: "authenticated-store-user",84              receiptId: "receipt-1",85              sandbox: true,86            },87          }88        : {89            store,90            horizon: {91              userId: "authenticated-store-user",92              sku: "premium.monthly",93            },94          },95    );96    checks.push(97      `${store}: uses server-selected store identity, distinct from the app user`,98    );99    assert(validate(operation("verifyPurchase").input, input));100    checks.push(`${store}: matches the installed verification input schema`);101  }102  for (const [label, purchase] of [103    ["missing purchase", null],104    ["unknown store", { store: "unknown", purchaseToken: "fictional" }],105    [106      "Amazon requires its authenticated store user",107      { store: "amazon", purchaseToken: "fictional" },108    ],109    [110      "Horizon requires its authenticated store user",111      { store: "horizon", purchaseToken: "fictional" },112    ],113    ["missing evidence", { store: "apple" }],114    ["blank evidence", { store: "google", purchaseToken: " " }],115    ["non-string evidence", { store: "apple", purchaseToken: 123 }],116    [117      "oversized evidence",118      { store: "apple", purchaseToken: "x".repeat(16385) },119    ],120  ]) {121    assert.throws(() => toVerifyPurchaseInput(purchase), Error);122    checks.push(`Rejects ${label}`);123  }124  return checks;125}126 127if (import.meta.main)128  console.log(129    `Client boundary: ${runBridgeDemo().length} checks passed against the installed contract. Fixture fields only; no SDK checkout or store contacted.`,130  );131 
    \ No newline at end of file diff --git a/packages/docs/public/commerce-source/example/composition/app-backend.mjs.html b/packages/docs/public/commerce-source/example/composition/app-backend.mjs.html new file mode 100644 index 000000000..3c43768f1 --- /dev/null +++ b/packages/docs/public/commerce-source/example/composition/app-backend.mjs.html @@ -0,0 +1 @@ +Commerce Protocol Example · composition/app-backend.mjs
    ← Provider replacement walkthrough

    Commerce Protocol Example · composition/app-backend.mjs

    Source snapshot · 2026-09-08

    SHA-256 4b2b617634026ab2d1d936c29e246f47eb2f2d31769ff204df745785f9f6f55d
    1import { Database } from "bun:sqlite";2import { createCommerceClient } from "./commerce-client.mjs";3import { createErasureLedger } from "../erasure.mjs";4 5// resolveSession is the host app's authentication boundary, supplied by the caller.6export function startAppBackend({7  path,8  providers,9  receiver,10  resolveSession,11  resolveStoreUser,12}) {13  const db = new Database(path, { create: true });14  db.exec(15    "CREATE TABLE IF NOT EXISTS erasure_requests (user_id TEXT, provider TEXT, PRIMARY KEY(user_id, provider))",16  );17  const erased = createErasureLedger(db);18  const clients = Object.fromEntries(19    Object.entries(providers).map(([name, config]) => [20      name,21      createCommerceClient(config),22    ]),23  );24  const inFlight = new Map();25  let selected = Object.keys(clients)[0];26  async function drainErasure() {27    for (const row of db.query("SELECT * FROM erasure_requests").all()) {28      try {29        receiver.eraseUser(row.user_id);30        await Promise.allSettled([...(inFlight.get(row.user_id) ?? [])]);31        const result = await clients[row.provider].call("eraseUser", {32          userId: row.user_id,33        });34        if (result.accepted && result.status === "completed")35          db.query(36            "DELETE FROM erasure_requests WHERE user_id = ? AND provider = ?",37          ).run(row.user_id, row.provider);38      } catch {39        /* The durable request is retried by the app's worker. */40      }41    }42    return db.query("SELECT count(*) AS count FROM erasure_requests").get()43      .count;44  }45  const server = Bun.serve({46    hostname: "127.0.0.1",47    port: 0,48    maxRequestBodySize: 32768,49    async fetch(request) {50      const userId = await resolveSession(request);51      if (!userId || erased.has(userId))52        return new Response("Unauthenticated", { status: 401 });53      const url = new URL(request.url);54      try {55        if (url.pathname === "/purchase" && request.method === "POST") {56          const input = await request.json();57          if (erased.has(userId))58            return new Response("Unauthenticated", { status: 401 });59          if (input.store === "amazon" || input.store === "horizon") {60            const storeUser = await resolveStoreUser?.(request, input.store);61            if (!storeUser || input[input.store]?.userId !== storeUser)62              return new Response(63                "Store account is not linked to this session",64                { status: 403 },65              );66          }67          if (erased.has(userId))68            return new Response("Unauthenticated", { status: 401 });69          const work = clients[selected].fulfill(input, {70            userId,71            productId: "premium.monthly",72          });73          const pending = inFlight.get(userId) ?? new Set();74          pending.add(work);75          inFlight.set(userId, pending);76          let result;77          try {78            result = await work;79          } finally {80            pending.delete(work);81            if (!pending.size) inFlight.delete(userId);82          }83          // A deletion can race the upstream calls; never return access afterwards.84          return Response.json(erased.has(userId) ? { access: false } : result);85        }86        if (url.pathname === "/access" && request.method === "GET") {87          const result = await clients[selected].call("entitlements", {88            userId,89          });90          return erased.has(userId)91            ? new Response("Unauthenticated", { status: 401 })92            : Response.json(result);93        }94        if (url.pathname === "/account" && request.method === "DELETE") {95          db.transaction(() => {96            erased.remember(userId);97            for (const name of Object.keys(clients))98              db.query(99                "INSERT OR IGNORE INTO erasure_requests VALUES (?,?)",100              ).run(userId, name);101          })();102          receiver.eraseUser(userId);103          const pending = await drainErasure();104          return Response.json({105            accepted: true,106            status: pending ? "queued" : "completed",107          });108        }109        return new Response("Not found", { status: 404 });110      } catch {111        return Response.json(112          { error: "Commerce provider unavailable; retry the request." },113          { status: 503 },114        );115      }116    },117  });118  return {119    url: `http://127.0.0.1:${server.port}`,120    select(name) {121      if (!clients[name]) throw new Error("Unknown provider");122      selected = name;123    },124    drainErasure,125    async close() {126      await server.stop(true);127      db.close();128    },129  };130}131 
    \ No newline at end of file diff --git a/packages/docs/public/commerce-source/example/composition/commerce-client.mjs.html b/packages/docs/public/commerce-source/example/composition/commerce-client.mjs.html new file mode 100644 index 000000000..8145dcc74 --- /dev/null +++ b/packages/docs/public/commerce-source/example/composition/commerce-client.mjs.html @@ -0,0 +1 @@ +Commerce Protocol Example · composition/commerce-client.mjs
    ← Provider replacement walkthrough

    Commerce Protocol Example · composition/commerce-client.mjs

    Source snapshot · 2026-09-08

    SHA-256 f1f1a056bc76801df25111cb12fdcde501d507a5461ef8b15bfe2f57979cd03c
    1import { operation, validate } from "../contract.mjs";2 3// This module runs on the authenticated app backend, which owns the credential.4export function createCommerceClient({ baseUrl, credential }) {5  async function call(name, input) {6    const spec = operation(name);7    if (!spec) throw new Error("Unknown operation");8    if (spec.input && !validate(spec.input, input))9      throw new Error("Invalid operation input");10    const url = new URL(spec.path, baseUrl);11    if (spec.method === "GET" && input)12      for (const [key, value] of Object.entries(input))13        url.searchParams.set(key, value);14    const response = await fetch(url, {15      method: spec.method,16      headers: {17        "content-type": "application/json",18        ...(spec.auth === "none" ? {} : { authorization: credential }),19      },20      ...(spec.method === "POST" ? { body: JSON.stringify(input) } : {}),21      redirect: "error",22      signal: AbortSignal.timeout(5000),23    });24    const result = await response.json();25    if (response.status !== spec.successStatus)26      throw new Error("Commerce operation failed");27    if (!validate(spec.result, result))28      throw new Error("Invalid operation result");29    return result;30  }31 32  async function fulfill(input, { userId, productId }) {33    const evidence = { ...input };34    delete evidence.userId;35    const verdict = await call("verifyPurchase", evidence);36    if (!verdict.isValid) throw new Error("Purchase was not accepted");37    const binding = await call("bindPurchase", { ...evidence, userId });38    if (!binding.bound) throw new Error("Purchase belongs to another user");39    const access = await call("entitlements", { userId });40    if (!access.productIds.includes(productId))41      throw new Error("Requested product is not accessible");42    return access;43  }44 45  return { call, fulfill };46}47 
    \ No newline at end of file diff --git a/packages/docs/public/commerce-source/example/consumer.mjs.html b/packages/docs/public/commerce-source/example/consumer.mjs.html new file mode 100644 index 000000000..d94016226 --- /dev/null +++ b/packages/docs/public/commerce-source/example/consumer.mjs.html @@ -0,0 +1 @@ +Commerce Protocol Example · consumer.mjs
    ← Provider replacement walkthrough

    Commerce Protocol Example · consumer.mjs

    Source snapshot · 2026-09-08

    SHA-256 d8e168238270309157d52ca777fea30f1d37bae38b96e88148314c894bdb1b4c
    1import assert from "node:assert/strict";2import { randomBytes, randomUUID, createHash } from "node:crypto";3import { mkdtempSync, rmSync, writeFileSync, readFileSync } from "node:fs";4import { tmpdir } from "node:os";5import { join, resolve } from "node:path";6import { WEBHOOK, COMMERCE_EVENT_VERSION } from "openiap-commerce-protocol";7import { createReceiver, sign } from "./webhooks.mjs";8import { validate } from "./contract.mjs";9 10// One app inbox; named emitters can bind separate signing keys to project IDs.11export function startConsumer({ secret, path, port = 0, now = Date.now }) {12  assert(secret, "Set COMMERCE_WEBHOOK_SECRET to the provider signing secret.");13  let receiver = createReceiver(path, secret, now);14  const server = Bun.serve({15    hostname: "127.0.0.1",16    port,17    maxRequestBodySize: 64 * 1024,18    fetch(request) {19      const url = new URL(request.url);20      if (request.method === "POST" && url.pathname === "/webhooks/commerce")21        return receiver.fetch(request);22      if (request.method === "GET" && url.pathname === "/health")23        return Response.json({ ready: true });24      return new Response("Not found", { status: 404 });25    },26  });27  return {28    url: `http://127.0.0.1:${server.port}/webhooks/commerce`,29    count: () => receiver.count(),30    eraseUser: (userId) => receiver.eraseUser(userId),31    inspect: () => receiver.inspect(),32    reopen() {33      receiver.close();34      receiver = createReceiver(path, secret, now);35    },36    async close() {37      await server.stop(true);38      receiver.close();39    },40  };41}42 43export async function runConsumerDemo() {44  const directory = mkdtempSync(join(tmpdir(), "commerce-consumer-"));45  const secret = randomBytes(32).toString("hex");46  const now = Date.now();47  const consumer = startConsumer({48    secret,49    path: join(directory, "inbox.sqlite"),50    now: () => now,51  });52  const checks = [],53    results = [];54  const check = (name, actual, expected) => {55    assert.deepEqual(actual, expected, name);56    checks.push(name);57  };58  const lifecycle = [59    ["subscription.started", "Active", true],60    ["entitlement.granted", "Active", true],61    ["subscription.renewed", "Active", true],62    ["subscription.canceled", "Active", true],63    ["subscription.expired", "Expired", false],64    ["entitlement.revoked", "Expired", false],65    ["subscription.refunded", "Refunded", false],66  ];67  try {68    const health = await fetch(new URL("/health", consumer.url), {69      headers: { host: "receiver.example.test" },70    });71    check("Health accepts the proxy public Host header", health.status, 200);72    for (const [index, [eventType, state, active]] of lifecycle.entries()) {73      const event = {74        eventId: randomUUID(),75        eventType,76        eventVersion: COMMERCE_EVENT_VERSION,77        occurredAt: now - 60_000 + index * 1000,78        processedAt: now,79        store: "fixture",80        environment: "local-fixture",81        projectId: "demo_project",82        userId: "demo_user",83        productId: "premium.monthly",84        ...(["subscription.started", "subscription.renewed"].includes(eventType)85          ? {86              price: {87                currency: "USD",88                amountMicros: 9990000,89                provenance: "store",90              },91            }92          : {}),93        subscription: {94          productId: "premium.monthly",95          state,96          active,97          expiresAt: active ? now + 60_000 : now - 1000,98          willRenew: active && eventType !== "subscription.canceled",99        },100      };101      assert(validate("#/$defs/CommerceEvent", event));102      const body = JSON.stringify(event);103      const timestamp = String(Math.floor(now / 1000));104      const headers = {105        host: "receiver.example.test",106        "content-type": WEBHOOK.contentType,107        [WEBHOOK.timestampHeader]: timestamp,108        [WEBHOOK.signatureHeader]: sign(secret, timestamp, body),109        [WEBHOOK.eventIdHeader]: event.eventId,110        [WEBHOOK.deliveryIdHeader]: randomUUID(),111      };112      const response = await fetch(consumer.url, {113        method: "POST",114        headers,115        body,116      });117      const result = await response.json();118      check(119        `${eventType}: authenticated and saved`,120        [response.status, result.duplicate],121        [200, false],122      );123      const duplicate = await fetch(consumer.url, {124        method: "POST",125        headers,126        body,127      });128      const duplicateResult = await duplicate.json();129      check(130        `${eventType}: redelivery deduplicated`,131        [duplicate.status, duplicateResult.duplicate],132        [200, true],133      );134      const tampered = await fetch(consumer.url, {135        method: "POST",136        headers,137        body: body + " ",138      });139      check(`${eventType}: tampering rejected`, tampered.status, 401);140      results.push({141        event,142        httpStatus: response.status,143        duplicate: duplicateResult.duplicate,144        requestHost: headers.host,145        tamperedHttpStatus: tampered.status,146      });147    }148    check("One inbox record per event", consumer.count(), lifecycle.length);149    consumer.reopen();150    check(151      "Inbox survives reopening SQLite",152      consumer.count(),153      lifecycle.length,154    );155    return {156      recordedAt: new Date().toISOString(),157      scope:158        "Real loopback HTTP, signature validation and durable deduplication. Fictional lifecycle samples; no provider or store contacted. One emitter/project per receiver database. No business or revenue calculation.",159      checks,160      results,161      inboxCount: consumer.count(),162    };163  } finally {164    await consumer.close();165    rmSync(directory, { recursive: true, force: true });166  }167}168 169if (import.meta.main) {170  if (process.argv[2] === "demo") {171    const report = await runConsumerDemo();172    if (process.argv[3] === "--record") {173      assert(process.argv[4], "Provide a report path");174      report.sourceHashes = Object.fromEntries(175        [176          "consumer.mjs",177          "webhooks.mjs",178          "contract.mjs",179          "package.json",180          "package-lock.json",181        ].map((name) => [182          name,183          createHash("sha256")184            .update(readFileSync(join(import.meta.dir, name)))185            .digest("hex"),186        ]),187      );188      writeFileSync(189        resolve(process.argv[4]),190        JSON.stringify(report, null, 2) + "\n",191      );192    }193    console.log(194      `Receiver ready: ${report.inboxCount} events saved once; ${report.checks.length} checks passed. No external service contacted.`,195    );196  } else {197    const consumer = startConsumer({198      secret: process.env.COMMERCE_WEBHOOK_SECRET,199      path: resolve(process.env.COMMERCE_INBOX_PATH ?? "consumer.sqlite"),200      port: 5182,201    });202    console.log(203      `Receiver: ${consumer.url}\nPersisted inbox: ${resolve(process.env.COMMERCE_INBOX_PATH ?? "consumer.sqlite")}`,204    );205    for (const signal of ["SIGINT", "SIGTERM"])206      process.on(signal, async () => {207        await consumer.close();208        process.exit(0);209      });210  }211}212 
    \ No newline at end of file diff --git a/packages/docs/public/commerce-source/example/contract.mjs.html b/packages/docs/public/commerce-source/example/contract.mjs.html new file mode 100644 index 000000000..69767bad7 --- /dev/null +++ b/packages/docs/public/commerce-source/example/contract.mjs.html @@ -0,0 +1 @@ +Commerce Protocol Example · contract.mjs
    ← Provider replacement walkthrough

    Commerce Protocol Example · contract.mjs

    Source snapshot · 2026-09-08

    SHA-256 c97b51ed48875303c382059af5dc321005d677ab2ea834a6e00c060308bc2ab2
    1import Ajv from "ajv/dist/2020.js";2import { bundleSchema, HTTP_BINDING } from "openiap-commerce-protocol";3 4const ajv = new Ajv({ strict: false, allErrors: true });5ajv.addSchema(bundleSchema);6const validators = new Map();7 8export function validate(pointer, value) {9  if (!validators.has(pointer)) {10    validators.set(pointer, ajv.compile({ $ref: bundleSchema.$id + pointer }));11  }12  return validators.get(pointer)(value);13}14 15export function operation(name) {16  return HTTP_BINDING.operations.find((entry) => entry.name === name);17}18 19export function protocolError(code) {20  return Response.json(21    { error: { code, message: code.replaceAll("_", " ").toLowerCase() } },22    { status: HTTP_BINDING.errorStatus[code] },23  );24}25 
    \ No newline at end of file diff --git a/packages/docs/public/commerce-source/example/erasure.mjs.html b/packages/docs/public/commerce-source/example/erasure.mjs.html new file mode 100644 index 000000000..33f46f281 --- /dev/null +++ b/packages/docs/public/commerce-source/example/erasure.mjs.html @@ -0,0 +1 @@ +Commerce Protocol Example · erasure.mjs
    ← Provider replacement walkthrough

    Commerce Protocol Example · erasure.mjs

    Source snapshot · 2026-09-08

    SHA-256 2dddb3ffd929c9d05333e88193f7cb3e5874ef5b29e68c68a1b25997d09788ea
    1import { createHmac, randomBytes, randomUUID } from "node:crypto";2 3// Retain a stable retry marker without storing the user ID verbatim.4export function createErasureLedger(db) {5  db.exec(`6    PRAGMA secure_delete = ON;7    CREATE TABLE IF NOT EXISTS erasure_key (id INTEGER PRIMARY KEY CHECK (id = 1), value TEXT NOT NULL);8    CREATE TABLE IF NOT EXISTS erased_users (user_hash TEXT PRIMARY KEY, job_id TEXT NOT NULL);9  `);10  db.query("INSERT OR IGNORE INTO erasure_key VALUES (1, ?)").run(11    randomBytes(32).toString("hex"),12  );13  const key = db14    .query("SELECT value FROM erasure_key WHERE id = 1")15    .get().value;16  const hash = (userId) =>17    createHmac("sha256", key).update(userId).digest("hex");18  return {19    has: (userId) =>20      Boolean(21        db22          .query("SELECT 1 FROM erased_users WHERE user_hash = ?")23          .get(hash(userId)),24      ),25    remember(userId) {26      const userHash = hash(userId);27      db.query("INSERT OR IGNORE INTO erased_users VALUES (?, ?)").run(28        userHash,29        randomUUID(),30      );31      return db32        .query("SELECT job_id FROM erased_users WHERE user_hash = ?")33        .get(userHash).job_id;34    },35  };36}37 
    \ No newline at end of file diff --git a/packages/docs/public/commerce-source/example/provider.mjs.html b/packages/docs/public/commerce-source/example/provider.mjs.html new file mode 100644 index 000000000..ee9933975 --- /dev/null +++ b/packages/docs/public/commerce-source/example/provider.mjs.html @@ -0,0 +1 @@ +Commerce Protocol Example · provider.mjs
    ← Provider replacement walkthrough

    Commerce Protocol Example · provider.mjs

    Source snapshot · 2026-09-08

    SHA-256 682b2c24797d5007373c1951641b2f6f156c933e654b2ad1865219be64b15d51
    1import { Database } from "bun:sqlite";2import { createHash, randomUUID } from "node:crypto";3import {4  providerCapabilitiesSchema,5  COMMERCE_EVENT_VERSION,6  HTTP_BINDING,7} from "openiap-commerce-protocol";8import { protocolError, validate } from "./contract.mjs";9import { createErasureLedger } from "./erasure.mjs";10 11export const FIXTURE = Object.freeze({12  store: "fixture",13  evidence: "local-purchase-alice",14  userId: "demo_alice",15  productId: "premium.monthly",16  startsAt: Date.UTC(2026, 8, 7, 9),17  expiresAt: Date.UTC(2026, 9, 7, 9),18});19export const CREDENTIALS = Object.freeze({20  verification: "Bearer local-demo-verification",21  server: "Bearer local-demo-server",22});23const fingerprint = (value) => createHash("sha256").update(value).digest("hex");24 25export function isEntitled(state, expiresAt, now) {26  return (27    (state === "Active" || state === "InGracePeriod") &&28    (expiresAt == null || now < expiresAt)29  );30}31 32// This adapter recognizes one fictional purchase; it never contacts a store.33function fixtureEvidence(input) {34  switch (input.store) {35    case "apple":36      return input.apple?.jws;37    case "google":38      return input.google?.purchaseToken;39    case "amazon":40      return (41        input.amazon &&42        JSON.stringify([43          input.amazon.userId,44          input.amazon.receiptId,45          input.amazon.sandbox === true,46        ])47      );48    case "horizon":49      return (50        input.horizon &&51        JSON.stringify([input.horizon.userId, input.horizon.sku])52      );53    default:54      return input.evidence;55  }56}57 58function verifyFixture(input, fixture) {59  if (input.store !== fixture.store) return { error: "UNSUPPORTED_STORE" };60  const evidence = fixtureEvidence(input);61  if (typeof evidence !== "string") return { error: "INVALID_REQUEST" };62  if (evidence === "local-upstream-outage") {63    return { error: "VERIFICATION_FAILED" };64  }65  const current = fixture.currentVerdict?.();66  if (current === "outage") return { error: "VERIFICATION_FAILED" };67  return { accepted: evidence === fixture.evidence && current !== false };68}69 70export function createProvider(path, now, fixture = FIXTURE) {71  const db = new Database(path, { create: true });72  db.exec(`73    PRAGMA journal_mode = WAL;74    CREATE TABLE IF NOT EXISTS purchases (75      fingerprint TEXT PRIMARY KEY, user_id TEXT, product_id TEXT NOT NULL,76      state TEXT NOT NULL, expires_at INTEGER NOT NULL, will_renew INTEGER NOT NULL,77      observed_at INTEGER NOT NULL, entitlement_granted INTEGER NOT NULL DEFAULT 078    );79    CREATE TABLE IF NOT EXISTS observations (id TEXT PRIMARY KEY);80    CREATE TABLE IF NOT EXISTS outbox (81      event_id TEXT PRIMARY KEY, delivery_id TEXT NOT NULL, body TEXT NOT NULL,82      attempts INTEGER NOT NULL DEFAULT 0, status TEXT NOT NULL DEFAULT 'pending',83      next_at INTEGER NOT NULL DEFAULT 084    );85  `);86  const erasures = createErasureLedger(db);87  if (88    !db89      .query("PRAGMA table_info(purchases)")90      .all()91      .some((column) => column.name === "erased")92  )93    db.exec(94      "ALTER TABLE purchases ADD COLUMN erased INTEGER NOT NULL DEFAULT 0",95    );96 97  function snapshot(row) {98    return {99      productId: row.product_id,100      state: row.state,101      active: isEntitled(row.state, row.expires_at, now()),102      store: fixture.store,103      expiresAt: row.expires_at,104      willRenew: Boolean(row.will_renew),105    };106  }107 108  function rowsFor(userId) {109    return db.query("SELECT * FROM purchases WHERE user_id = ?").all(userId);110  }111 112  function entitlements(userId) {113    if (fixture.pointInTime) {114      const current = fixture.currentVerdict?.();115      if (current === "outage") return { error: "VERIFICATION_FAILED" };116      return {117        userId,118        productIds:119          current === false120            ? []121            : [...new Set(rowsFor(userId).map((row) => row.product_id))],122        subscriptions: [],123      };124    }125    const subscriptions = rowsFor(userId)126      .map(snapshot)127      .filter((row) => row.active);128    return {129      userId,130      productIds: [...new Set(subscriptions.map((row) => row.productId))],131      subscriptions,132    };133  }134 135  const eventTypes = [136    "entitlement.granted",137    "subscription.canceled",138    "subscription.expired",139    "entitlement.revoked",140  ];141  const capabilityNames = Object.keys(142    providerCapabilitiesSchema.$defs.StoreCapabilities.properties,143  );144  const supported = new Set([145    "initialValidation",146    "subscriptions",147    "entitlements",148    "serverNotifications",149    "expiration",150  ]);151  const capabilities = {152    specVersion: HTTP_BINDING.protocolVersion,153    implementation: {154      name: "Commerce Protocol Example — fictional fixture store",155    },156    eventTypes,157    stores: {158      [fixture.store]: Object.fromEntries(159        capabilityNames.map((key) => [160          key,161          {162            provider:163              supported.has(key) &&164              (!fixture.pointInTime ||165                ["initialValidation", "entitlements"].includes(key)),166            implementation:167              supported.has(key) &&168              (!fixture.pointInTime ||169                ["initialValidation", "entitlements"].includes(key)),170            notes:171              "Local fixture demonstration only; no real store integration or profile conformance claim.",172          },173        ]),174      ),175    },176  };177 178  function enqueue(eventType, row, occurredAt, sourceStoreEventId) {179    const body = {180      eventId: randomUUID(),181      eventType,182      eventVersion: COMMERCE_EVENT_VERSION,183      occurredAt,184      processedAt: now(),185      store: fixture.store,186      environment: "local-fixture",187      projectId: "commerce_example",188      productId: row.product_id,189      ...(row.user_id ? { userId: row.user_id } : {}),190      subscription: snapshot(row),191      ...(sourceStoreEventId ? { sourceStoreEventId } : {}),192    };193    if (!validate("#/$defs/CommerceEvent", body))194      throw new Error("Invalid event");195    db.query(196      "INSERT INTO outbox (event_id, delivery_id, body) VALUES (?, ?, ?)",197    ).run(body.eventId, randomUUID(), JSON.stringify(body));198  }199 200  const handlers = {201    providerCapabilities: () => capabilities,202    verifyPurchase(input) {203      const verdict = verifyFixture(input, fixture);204      if (verdict.error) return verdict;205      if (verdict.accepted) {206        db.query(207          `INSERT OR IGNORE INTO purchases (fingerprint, user_id, product_id, state, expires_at, will_renew, observed_at) VALUES (?, NULL, ?, 'Active', ?, 1, ?)`,208        ).run(209          fingerprint(fixtureEvidence(input)),210          fixture.productId,211          fixture.expiresAt,212          fixture.startsAt,213        );214      }215      const expired = !fixture.pointInTime && now() >= fixture.expiresAt;216      return {217        store: fixture.store,218        isValid: verdict.accepted && !expired,219        state: !verdict.accepted220          ? "INAUTHENTIC"221          : expired222            ? "EXPIRED"223            : "ENTITLED",224        ...(verdict.accepted ? { productId: fixture.productId } : {}),225        environment: "local-fixture",226      };227    },228    bindPurchase(input) {229      if (input.store !== fixture.store) return { error: "UNSUPPORTED_STORE" };230      if (typeof fixtureEvidence(input) !== "string")231        return { error: "INVALID_REQUEST" };232      return db.transaction(() => {233        if (erasures.has(input.userId)) return { bound: false };234        const key = fingerprint(fixtureEvidence(input));235        const updated = db236          .query(237            "UPDATE purchases SET user_id = ? WHERE fingerprint = ? AND user_id IS NULL AND erased = 0",238          )239          .run(input.userId, key);240        const row = db241          .query("SELECT * FROM purchases WHERE fingerprint = ?")242          .get(key);243        if (244          updated.changes &&245          !fixture.pointInTime &&246          isEntitled(row.state, row.expires_at, now())247        ) {248          enqueue("entitlement.granted", row, row.observed_at);249          db.query(250            "UPDATE purchases SET entitlement_granted = 1 WHERE fingerprint = ?",251          ).run(key);252        }253        return { bound: row?.user_id === input.userId };254      })();255    },256    entitlements: (input) => entitlements(input.userId),257    eraseUser(input) {258      return db.transaction(() => {259        const jobId = erasures.remember(input.userId);260        db.query(261          "UPDATE purchases SET user_id = NULL, erased = 1, entitlement_granted = 0 WHERE user_id = ?",262        ).run(input.userId);263        // A claimed delivery may already be in flight; the receiver erases its own copy.264        db.query(265          "DELETE FROM outbox WHERE json_extract(body, '$.userId') = ?",266        ).run(input.userId);267        return { accepted: true, jobId, status: "completed" };268      })();269    },270    subscriptionStatus(input) {271      if (fixture.pointInTime) return { active: false };272      const snapshots = rowsFor(input.userId).map(snapshot);273      const subscription = snapshots.find((row) => row.active) ?? snapshots[0];274      return {275        active: snapshots.some((row) => row.active),276        ...(subscription ? { subscription } : {}),277      };278    },279  };280 281  async function fetch(request) {282    const url = new URL(request.url);283    const spec = HTTP_BINDING.operations.find(284      (entry) => entry.path === url.pathname && entry.method === request.method,285    );286    if (!spec) return protocolError("NOT_FOUND");287    const auth = request.headers.get("authorization");288    if (spec.auth !== "none") {289      if (!Object.values(CREDENTIALS).includes(auth))290        return protocolError("UNAUTHORIZED");291      if (spec.auth === "server" && auth !== CREDENTIALS.server)292        return protocolError("FORBIDDEN");293    }294    if (!handlers[spec.name]) return protocolError("UNSUPPORTED_PROFILE");295    let input = null;296    if (spec.input) {297      try {298        input =299          request.method === "GET"300            ? Object.fromEntries(url.searchParams)301            : await request.json();302      } catch {303        return protocolError("INVALID_REQUEST");304      }305      if (!validate(spec.input, input)) return protocolError("INVALID_REQUEST");306    }307    try {308      const result = handlers[spec.name](input);309      if (result.error) return protocolError(result.error);310      if (!validate(spec.result, result))311        throw new Error("Invalid protocol response");312      return Response.json(result, { status: spec.successStatus });313    } catch {314      return protocolError("INTERNAL_ERROR");315    }316  }317 318  function observe({ id, kind, occurredAt }) {319    if (320      !["cancel", "expire"].includes(kind) ||321      !Number.isSafeInteger(occurredAt) ||322      occurredAt > now()323    ) {324      throw new Error("Invalid fixture observation");325    }326    return db.transaction(() => {327      if (db.query("SELECT id FROM observations WHERE id = ?").get(id))328        return false;329      const row = db330        .query("SELECT * FROM purchases WHERE fingerprint = ?")331        .get(fingerprint(fixture.evidence));332      if (!row) throw new Error("Verify the fixture purchase first");333      if (kind === "expire" && occurredAt < row.expires_at) {334        throw new Error("Premature expiry requires store reconciliation");335      }336      db.query("INSERT INTO observations VALUES (?)").run(id);337      if (occurredAt < row.observed_at) return false;338      if (339        (kind === "cancel" && (!row.will_renew || row.state !== "Active")) ||340        (kind === "expire" && row.state === "Expired")341      )342        return false;343      const next = {344        ...row,345        will_renew: 0,346        state: kind === "expire" ? "Expired" : row.state,347      };348      db.query(349        "UPDATE purchases SET state = ?, will_renew = 0, observed_at = ? WHERE fingerprint = ?",350      ).run(next.state, occurredAt, row.fingerprint);351      const types = [352        kind === "cancel" ? "subscription.canceled" : "subscription.expired",353      ];354      if (355        row.entitlement_granted &&356        !isEntitled(next.state, next.expires_at, now())357      ) {358        types.push("entitlement.revoked");359        db.query(360          "UPDATE purchases SET entitlement_granted = 0 WHERE fingerprint = ?",361        ).run(row.fingerprint);362      }363      for (const eventType of types) enqueue(eventType, next, occurredAt, id);364      return true;365    })();366  }367 368  function inspect() {369    return {370      purchases: db371        .query(372          "SELECT user_id AS userId, product_id AS productId, state, will_renew AS willRenew FROM purchases",373        )374        .all(),375      access: entitlements(fixture.userId),376      deliveries: db377        .query(378          "SELECT event_id AS eventId, delivery_id AS deliveryId, attempts, status, body FROM outbox ORDER BY rowid",379        )380        .all()381        .map(({ body, ...row }) => ({382          ...row,383          eventType: JSON.parse(body).eventType,384        })),385    };386  }387 388  return { db, fetch, observe, inspect, close: () => db.close() };389}390 
    \ No newline at end of file diff --git a/packages/docs/public/commerce-source/example/scenario.mjs.html b/packages/docs/public/commerce-source/example/scenario.mjs.html new file mode 100644 index 000000000..bba51cd3f --- /dev/null +++ b/packages/docs/public/commerce-source/example/scenario.mjs.html @@ -0,0 +1 @@ +Commerce Protocol Example · scenario.mjs
    ← Provider replacement walkthrough

    Commerce Protocol Example · scenario.mjs

    Source snapshot · 2026-09-08

    SHA-256 b8ff9024afd67701b5f70916a61fa7d538eaec281aa4b5cc660e1c205932a32d
    1import assert from "node:assert/strict";2import { operation, validate } from "./contract.mjs";3import { CREDENTIALS, FIXTURE } from "./provider.mjs";4import { deliver } from "./webhooks.mjs";5 6export const STAGES = [7  {8    title: "Start with the contract",9    built: "HTTP routes + schema validation + SQLite",10    result: "A running server, an empty purchase table, and no access.",11  },12  {13    title: "Verify a purchase",14    built: "Fixture store adapter + purchase persistence",15    result: "Valid evidence is saved. Alice still has no access.",16  },17  {18    title: "Connect it to a user",19    built: "Server authorization + atomic binding + entitlement reads",20    result: "Alice gets Premium. Another user cannot take the purchase.",21  },22  {23    title: "Handle cancellation",24    built: "Lifecycle processing + transactional event outbox",25    result: "Renewal stops. Alice keeps the time she already paid for.",26  },27  {28    title: "Deliver, retry, deduplicate",29    built: "HMAC signatures + retry worker + durable receiver inbox",30    result:31      "A 503 retries successfully. Redelivery creates no second inbox row.",32  },33  {34    title: "Expire access and restart",35    built: "Expiry-aware reads + recovery from SQLite",36    result:37      "Access closes at the deadline. Restarting preserves purchases and deliveries.",38  },39  {40    title: "Delete the account",41    built: "Idempotent erasure + receiver cleanup + durable deletion guard",42    result:43      "Alice is removed from purchases and event copies. Late deliveries cannot restore her account data.",44  },45];46 47export async function requestOperation(baseUrl, name, input, role = "server") {48  const spec = operation(name);49  const url = new URL(spec.path, baseUrl);50  if (spec.method === "GET" && input)51    for (const [key, value] of Object.entries(input))52      url.searchParams.set(key, value);53  const response = await fetch(url, {54    method: spec.method,55    headers: {56      "content-type": "application/json",57      ...(role ? { authorization: CREDENTIALS[role] } : {}),58    },59    ...(spec.method === "POST" ? { body: JSON.stringify(input) } : {}),60  });61  return {62    operation: name,63    httpStatus: response.status,64    body: await response.json(),65  };66}67 68export function createScenario(runtime) {69  const history = [];70  const checks = [];71  const evidence = { store: FIXTURE.store, evidence: FIXTURE.evidence };72  const call = (name, input, role) =>73    requestOperation(runtime.baseUrl, name, input, role);74  const check = (label, actual, expected) => {75    assert.deepEqual(actual, expected, label);76    checks.push(label);77  };78 79  async function advance() {80    const stage = history.length;81    if (stage >= STAGES.length) return history.at(-1);82    const responses = [];83    const run = async (name, input, role) => {84      const result = await call(name, input, role);85      responses.push(result);86      return result;87    };88    const start = checks.length;89    if (stage === 0) {90      check(91        "Fixture request matches the installed schema",92        validate(operation("verifyPurchase").input, evidence),93        true,94      );95      check(96        "Capabilities use the published response schema",97        (await run("providerCapabilities", null, null)).httpStatus,98        200,99      );100      check(101        "Purchase storage starts empty",102        runtime.provider.inspect().purchases,103        [],104      );105      check(106        "No profile conformance is claimed",107        (await run("providerCapabilities", null, null)).body.profiles,108        undefined,109      );110    } else if (stage === 1) {111      check(112        "Fixture evidence is accepted",113        (await run("verifyPurchase", evidence, "verification")).body.isValid,114        true,115      );116      check(117        "Verification does not grant access",118        (await run("entitlements", { userId: FIXTURE.userId })).body.productIds,119        [],120      );121      check(122        "Invalid evidence produces a negative verdict",123        (124          await run(125            "verifyPurchase",126            { store: FIXTURE.store, evidence: "invalid" },127            "verification",128          )129        ).body.isValid,130        false,131      );132      check(133        "An upstream outage is not a negative verdict",134        (135          await run(136            "verifyPurchase",137            { store: FIXTURE.store, evidence: "local-upstream-outage" },138            "verification",139          )140        ).body.error.code,141        "VERIFICATION_FAILED",142      );143    } else if (stage === 2) {144      check(145        "Verification credentials cannot bind a user",146        (147          await run(148            "bindPurchase",149            { ...evidence, userId: FIXTURE.userId },150            "verification",151          )152        ).body.error.code,153        "FORBIDDEN",154      );155      check(156        "The server binds Alice",157        (await run("bindPurchase", { ...evidence, userId: FIXTURE.userId }))158          .body.bound,159        true,160      );161      check(162        "Repeating the same binding succeeds",163        (await run("bindPurchase", { ...evidence, userId: FIXTURE.userId }))164          .body.bound,165        true,166      );167      check(168        "Bob cannot take Alice's purchase",169        (await run("bindPurchase", { ...evidence, userId: "demo_bob" })).body170          .bound,171        false,172      );173      check(174        "Alice can access Premium",175        (await run("entitlements", { userId: FIXTURE.userId })).body.productIds,176        [FIXTURE.productId],177      );178      check(179        "First binding queues one grant; repeat and conflict queue none",180        runtime.provider.inspect().deliveries.map((row) => row.eventType),181        ["entitlement.granted"],182      );183    } else if (stage === 3) {184      runtime.time = FIXTURE.startsAt + 86_400_000;185      runtime.provider.observe({186        id: "fixture-cancel",187        kind: "cancel",188        occurredAt: runtime.time,189      });190      const result = await run("subscriptionStatus", {191        userId: FIXTURE.userId,192      });193      check("Cancellation keeps paid access", result.body.active, true);194      check(195        "Cancellation stops renewal",196        result.body.subscription.willRenew,197        false,198      );199      check(200        "Cancellation queues one event",201        runtime.provider202          .inspect()203          .deliveries.filter((row) => row.eventType === "subscription.canceled")204          .length,205        1,206      );207    } else if (stage === 4) {208      const failed = await deliver(209        runtime.provider,210        runtime.secret,211        runtime.now,212        async () => new Response(null, { status: 503 }),213      );214      responses.push({215        operation: "webhook: receiver unavailable",216        body: failed,217      });218      check("A 503 leaves a durable retry", failed[0].status, "pending");219      runtime.restart();220      runtime.time += 30_000;221      const delivered = await deliver(222        runtime.provider,223        runtime.secret,224        runtime.now,225        runtime.post,226      );227      responses.push({228        operation: "webhook: retry after restart",229        body: delivered,230      });231      check("Retry survives provider restart", delivered[0].httpStatus, 200);232      check(233        "Retry keeps the delivery identity",234        delivered[0].deliveryId,235        failed[0].deliveryId,236      );237      // Simulate loss of the delivery acknowledgement after the receiver committed.238      runtime.provider.db239        .query("UPDATE outbox SET status = 'pending', next_at = 0")240        .run();241      runtime.time += 1_000;242      responses.push({243        operation: "webhook: lost-ack redelivery",244        body: await deliver(245          runtime.provider,246          runtime.secret,247          runtime.now,248          runtime.post,249        ),250      });251      check(252        "Redelivery has one inbox row per event",253        runtime.receiver.count(),254        2,255      );256    } else if (stage === 5) {257      runtime.time = FIXTURE.expiresAt;258      check(259        "Access closes at expiry before a notification arrives",260        (await run("entitlements", { userId: FIXTURE.userId })).body.productIds,261        [],262      );263      const observation = {264        id: "fixture-expire",265        kind: "expire",266        occurredAt: runtime.time,267      };268      runtime.provider.observe(observation);269      check(270        "Duplicate store notification emits no extra event",271        runtime.provider.observe(observation),272        false,273      );274      const before = runtime.provider.inspect();275      runtime.restart();276      check(277        "Reopening both databases preserves state",278        runtime.provider.inspect(),279        before,280      );281      check(282        "Receiver deduplication survives restart",283        runtime.receiver.count(),284        2,285      );286      responses.push({287        operation: "webhook: expiry + revocation",288        body: await deliver(289          runtime.provider,290          runtime.secret,291          runtime.now,292          runtime.post,293        ),294      });295      check("All four events reach the receiver", runtime.receiver.count(), 4);296      check(297        "The final status is inactive",298        (await run("subscriptionStatus", { userId: FIXTURE.userId })).body299          .active,300        false,301      );302    } else if (stage === 6) {303      check(304        "Verification credentials cannot erase users",305        (await run("eraseUser", { userId: FIXTURE.userId }, "verification"))306          .httpStatus,307        403,308      );309      // The app removes its event copies before requesting provider erasure.310      runtime.receiver.eraseUser(FIXTURE.userId);311      const erased = await run("eraseUser", { userId: FIXTURE.userId });312      check(313        "Provider erasure completes",314        [erased.body.accepted, erased.body.status],315        [true, "completed"],316      );317      runtime.restart();318      check(319        "Erasure retry after restart returns the same job",320        (await run("eraseUser", { userId: FIXTURE.userId })).body,321        erased.body,322      );323      check(324        "Purchase has no account identity",325        runtime.provider.inspect().purchases.map((row) => row.userId),326        [null],327      );328      check("App event copies are erased", runtime.receiver.count(), 0);329      check(330        "Erased account has no access",331        (await run("entitlements", { userId: FIXTURE.userId })).body.productIds,332        [],333      );334      check(335        "A stale binding retry cannot restore identity",336        (await run("bindPurchase", { ...evidence, userId: FIXTURE.userId }))337          .body.bound,338        false,339      );340    }341    const entry = {342      step: stage + 1,343      ...STAGES[stage],344      simulatedTime: new Date(runtime.time).toISOString(),345      ...runtime.provider.inspect(),346      inboxCount: runtime.receiver.count(),347      responses,348      checks: checks.slice(start),349      totalChecks: checks.length,350    };351    history.push(entry);352    return entry;353  }354 355  return { advance, history };356}357 
    \ No newline at end of file diff --git a/packages/docs/public/commerce-source/example/verify-erasure.mjs.html b/packages/docs/public/commerce-source/example/verify-erasure.mjs.html new file mode 100644 index 000000000..b6f51980a --- /dev/null +++ b/packages/docs/public/commerce-source/example/verify-erasure.mjs.html @@ -0,0 +1 @@ +Commerce Protocol Example · verify-erasure.mjs
    ← Provider replacement walkthrough

    Commerce Protocol Example · verify-erasure.mjs

    Source snapshot · 2026-09-08

    SHA-256 65feaff2e8eb0a3247ecdbc0f511c8eef5e07a4c2c63155b07409ba7cb19be88
    1import assert from "node:assert/strict";2import { rmSync } from "node:fs";3import { startLab } from "./server.mjs";4import { FIXTURE } from "./provider.mjs";5import { requestOperation, STAGES } from "./scenario.mjs";6import { deliver, sign } from "./webhooks.mjs";7import { WEBHOOK } from "openiap-commerce-protocol";8 9export async function verifyErasure() {10  const checks = [];11  const check = (name, actual, expected) => {12    assert.deepEqual(actual, expected, name);13    checks.push(name);14  };15  const lab = startLab();16  try {17    const { runtime } = lab;18    const call = (name, input, role) =>19      requestOperation(runtime.baseUrl, name, input, role);20    const evidence = { store: FIXTURE.store, evidence: FIXTURE.evidence };21    await call("verifyPurchase", evidence);22    await call("bindPurchase", { ...evidence, userId: FIXTURE.userId });23    const pending = runtime.provider.db24      .query("SELECT body FROM outbox LIMIT 1")25      .get().body;26    const post = (body) => {27      const timestamp = String(Math.floor(runtime.now() / 1000));28      return runtime.post({29        method: "POST",30        body,31        headers: {32          [WEBHOOK.timestampHeader]: timestamp,33          [WEBHOOK.signatureHeader]: sign(runtime.secret, timestamp, body),34          [WEBHOOK.eventIdHeader]: JSON.parse(body).eventId,35        },36      });37    };38    await post(pending);39    check(40      "An active purchase has a delivered event copy",41      runtime.receiver.count(),42      1,43    );44    runtime.receiver.eraseUser(FIXTURE.userId);45    let erased;46    await deliver(47      runtime.provider,48      runtime.secret,49      runtime.now,50      async (init) => {51        erased = await call("eraseUser", { userId: FIXTURE.userId });52        return runtime.post(init);53      },54    );55    check("Erasure during delivery completes", erased.body.status, "completed");56    check(57      "An in-flight event cannot resurrect receiver data",58      runtime.receiver.count(),59      0,60    );61    check(62      "An in-flight acknowledgement cannot resurrect the outbox",63      runtime.provider.inspect().deliveries,64      [],65    );66    runtime.restart();67    check(68      "Repeated erase survives restart",69      (await call("eraseUser", { userId: FIXTURE.userId })).body,70      erased.body,71    );72    check(73      "An old signed event remains discarded after restart",74      (await (await post(pending)).json()).discarded,75      "erased-user",76    );77    const late = JSON.stringify({78      ...JSON.parse(pending),79      eventId: "late-new-event",80    });81    check(82      "A new event ID cannot bypass erasure",83      (await (await post(late)).json()).discarded,84      "erased-user",85    );86    check(87      "Verification cannot bind an erased purchase",88      (await call("verifyPurchase", evidence)).body.isValid,89      true,90    );91    check(92      "Stale binding cannot restore an erased account",93      (await call("bindPurchase", { ...evidence, userId: FIXTURE.userId })).body94        .bound,95      false,96    );97    check(98      "Another account cannot claim erased evidence",99      (await call("bindPurchase", { ...evidence, userId: "demo_bob" })).body100        .bound,101      false,102    );103    check(104      "Erased account is inactive before paid expiry",105      (await call("subscriptionStatus", { userId: FIXTURE.userId })).body,106      { active: false },107    );108    runtime.time = FIXTURE.expiresAt;109    runtime.provider.observe({110      id: "expiry-after-deletion",111      kind: "expire",112      occurredAt: runtime.time,113    });114    await deliver(runtime.provider, runtime.secret, runtime.now, runtime.post);115    check(116      "Late lifecycle processing carries no erased identity",117      runtime.receiver.inspect().map((event) => event.userId),118      [undefined],119    );120    const serialized = JSON.stringify([121      runtime.provider.db.query("SELECT * FROM purchases").all(),122      runtime.provider.db.query("SELECT * FROM outbox").all(),123      runtime.provider.db.query("SELECT * FROM erased_users").all(),124      runtime.receiver.inspect(),125    ]);126    check(127      "Persisted protocol records contain no erased user ID",128      serialized.includes(FIXTURE.userId),129      false,130    );131    check(132      "Unknown-user erasure is accepted",133      (await call("eraseUser", { userId: "missing_user" })).body.accepted,134      true,135    );136  } finally {137    await lab.close();138    rmSync(lab.directory, { recursive: true, force: true });139  }140  const walkthrough = startLab();141  try {142    for (let i = 0; i < STAGES.length; i++)143      await walkthrough.scenario.advance();144    checks.push(...walkthrough.scenario.history.at(-1).checks);145  } finally {146    await walkthrough.close();147    rmSync(walkthrough.directory, { recursive: true, force: true });148  }149  return checks;150}151 152if (import.meta.main)153  console.log(`${(await verifyErasure()).length} erasure checks passed.`);154 
    \ No newline at end of file diff --git a/packages/docs/public/commerce-source/example/verify-stores.mjs.html b/packages/docs/public/commerce-source/example/verify-stores.mjs.html new file mode 100644 index 000000000..eb53a0628 --- /dev/null +++ b/packages/docs/public/commerce-source/example/verify-stores.mjs.html @@ -0,0 +1 @@ +Commerce Protocol Example · verify-stores.mjs
    ← Provider replacement walkthrough

    Commerce Protocol Example · verify-stores.mjs

    Source snapshot · 2026-09-08

    SHA-256 6a9ea6071aebddac158435b8577f4b31914d902191f6cc1476683ea6d9bac3dd
    1import assert from "node:assert/strict";2import { createProvider, CREDENTIALS } from "./provider.mjs";3import { operation } from "./contract.mjs";4import { toVerifyPurchaseInput } from "./client-bridge.mjs";5 6export async function verifyStores() {7  const checks = [];8  for (const store of ["apple", "google", "amazon", "horizon"]) {9    let current = true;10    let time = Date.now();11    const input = toVerifyPurchaseInput(12      { store, purchaseToken: "fictional-proof", productId: "premium.monthly" },13      { storeUserId: "fixture-store-user", amazonSandbox: true },14    );15    const evidence =16      store === "amazon"17        ? JSON.stringify(["fixture-store-user", "fictional-proof", true])18        : store === "horizon"19          ? JSON.stringify(["fixture-store-user", "premium.monthly"])20          : "fictional-proof";21    const fixture = {22      store,23      evidence,24      userId: "alice",25      productId: "premium.monthly",26      startsAt: time,27      expiresAt: time + 60000,28      pointInTime: ["amazon", "horizon"].includes(store),29      currentVerdict: () => current,30    };31    const provider = createProvider(":memory:", () => time, fixture);32    const check = (label, actual, expected) => {33      assert.deepEqual(actual, expected, `${store}: ${label}`);34      checks.push(`${store}: ${label}`);35    };36    async function call(name, body, credential = CREDENTIALS.server) {37      const spec = operation(name),38        url = new URL(spec.path, "http://fixture.invalid");39      if (spec.method === "GET")40        for (const [key, value] of Object.entries(body ?? {}))41          url.searchParams.set(key, value);42      const response = await provider.fetch(43        new Request(url, {44          method: spec.method,45          headers: {46            authorization: credential,47            "content-type": "application/json",48          },49          ...(spec.method === "POST" ? { body: JSON.stringify(body) } : {}),50        }),51      );52      return { status: response.status, result: await response.json() };53    }54    try {55      check(56        "unverified evidence cannot bind",57        (await call("bindPurchase", { ...input, userId: "alice" })).result58          .bound,59        false,60      );61      check(62        "matching evidence verifies",63        (await call("verifyPurchase", input)).result.isValid,64        true,65      );66      check(67        "verification alone gives no access",68        (await call("entitlements", { userId: "alice" })).result.productIds,69        [],70      );71      check(72        "verification credentials cannot bind",73        (74          await call(75            "bindPurchase",76            { ...input, userId: "alice" },77            CREDENTIALS.verification,78          )79        ).status,80        403,81      );82      for (let i = 0; i < 2; i++)83        check(84          "binding and retry keep one owner",85          (await call("bindPurchase", { ...input, userId: "alice" })).result86            .bound,87          true,88        );89      check(90        "another account cannot claim the purchase",91        (await call("bindPurchase", { ...input, userId: "bob" })).result.bound,92        false,93      );94      check(95        "owned product is accessible",96        (await call("entitlements", { userId: "alice" })).result.productIds,97        ["premium.monthly"],98      );99      if (fixture.pointInTime) {100        current = "outage";101        check(102          "an outage is an error, not cached access",103          (await call("entitlements", { userId: "alice" })).status,104          502,105        );106        current = false;107        check(108          "a negative recheck removes access",109          (await call("entitlements", { userId: "alice" })).result.productIds,110          [],111        );112        current = true;113        check(114          "a confirmed recheck restores ownership",115          (await call("entitlements", { userId: "alice" })).result.productIds,116          ["premium.monthly"],117        );118      }119      check(120        "erasure completes",121        (await call("eraseUser", { userId: "alice" })).result.status,122        "completed",123      );124      check(125        "erasure removes access",126        (await call("entitlements", { userId: "alice" })).result.productIds,127        [],128      );129      check(130        "erased evidence cannot be claimed",131        (await call("bindPurchase", { ...input, userId: "bob" })).result.bound,132        false,133      );134      for (const [label, offset] of [135        ["before", -1],136        ["at", 0],137        ["after", 1],138      ]) {139        time = fixture.expiresAt + offset;140        const verdict = (await call("verifyPurchase", input)).result;141        check(142          `verification ${label} the fixture deadline respects the store's access model`,143          [verdict.isValid, verdict.state],144          fixture.pointInTime || offset < 0145            ? [true, "ENTITLED"]146            : [false, "EXPIRED"],147        );148      }149      if (fixture.pointInTime) {150        current = false;151        const rejected = (await call("verifyPurchase", input)).result;152        check(153          "a negative ownership verdict remains rejected after the fixture deadline",154          [rejected.isValid, rejected.state],155          [false, "INAUTHENTIC"],156        );157        current = "outage";158        check(159          "an ownership verification outage remains an error after the fixture deadline",160          (await call("verifyPurchase", input)).status,161          502,162        );163      }164    } finally {165      provider.close();166    }167  }168  return checks;169}170if (import.meta.main)171  console.log(172    `Store fixtures: ${(await verifyStores()).length} checks passed. No store contacted.`,173  );174 
    \ No newline at end of file diff --git a/packages/docs/public/commerce-source/example/verify.mjs.html b/packages/docs/public/commerce-source/example/verify.mjs.html new file mode 100644 index 000000000..fe04f255e --- /dev/null +++ b/packages/docs/public/commerce-source/example/verify.mjs.html @@ -0,0 +1 @@ +Commerce Protocol Example · verify.mjs
    ← Provider replacement walkthrough

    Commerce Protocol Example · verify.mjs

    Source snapshot · 2026-09-08

    SHA-256 d3bfb64cb50672f9671162d28c82c961b7b4ef65ede147e6653d5c41204ff8b2
    1import assert from "node:assert/strict";2import { rmSync } from "node:fs";3import vectors from "openiap-commerce-protocol/vectors/signatures.json";4import { SUBSCRIPTION_STATES, WEBHOOK } from "openiap-commerce-protocol";5import { FIXTURE, isEntitled } from "./provider.mjs";6import { requestOperation } from "./scenario.mjs";7import { runConsumerDemo } from "./consumer.mjs";8import { runBridgeDemo } from "./client-bridge.mjs";9import { startLab } from "./server.mjs";10import { authentic, createReceiver, deliver, sign } from "./webhooks.mjs";11import { verifyStores } from "./verify-stores.mjs";12import { verifyErasure } from "./verify-erasure.mjs";13 14export async function verifyLab({ compareSigner } = {}) {15  const lab = startLab();16  const checks = [];17  const check = (label, actual, expected) => {18    assert.deepEqual(actual, expected, label);19    checks.push(label);20  };21  try {22    for (let i = 0; i < 6; i++) await lab.scenario.advance();23    checks.push(...lab.scenario.history.flatMap((entry) => entry.checks));24    for (const vector of vectors.cases) {25      const signature = sign(vector.secret, vector.timestamp, vector.body);26      const expected = vector.previousSecret27        ? `${signature},${sign(vector.previousSecret, vector.timestamp, vector.body)}`28        : signature;29      check(`Signature vector: ${vector.name}`, expected, vector.expected);30      if (compareSigner) {31        check(32          `IAPKit signs the same bytes: ${vector.name}`,33          signature,34          await compareSigner(vector.secret, vector.timestamp, vector.body),35        );36      }37      check(38        `Receiver accepts vector: ${vector.name}`,39        authentic(40          [vector.secret],41          String(vector.timestamp),42          vector.body,43          vector.presentedHeader ?? expected,44          vector.timestamp,45        ),46        true,47      );48    }49    for (const vector of vectors.rejections) {50      check(51        `Receiver rejects: ${vector.name}`,52        authentic(53          [vector.secret],54          String(vector.timestamp),55          vector.body,56          vector.presentedSignature,57          vector.receiverNow ?? vector.timestamp,58        ),59        false,60      );61    }62    for (const state of [...SUBSCRIPTION_STATES, "FutureState"]) {63      const eligible = state === "Active" || state === "InGracePeriod";64      check(`${state}: before expiry`, isEntitled(state, 100, 99), eligible);65      check(`${state}: at expiry`, isEntitled(state, 100, 100), false);66      check(67        `${state}: no deadline`,68        isEntitled(state, undefined, 100),69        eligible,70      );71    }72    const call = (name, input, role) =>73      requestOperation(lab.runtime.baseUrl, name, input, role);74    check(75      "Missing credentials are refused",76      (await call("entitlements", { userId: FIXTURE.userId }, null)).httpStatus,77      401,78    );79    check(80      "Verification role cannot enumerate users",81      (await call("entitlements", { userId: FIXTURE.userId }, "verification"))82        .httpStatus,83      403,84    );85    check(86      "Malformed input is refused",87      (await call("bindPurchase", { store: FIXTURE.store })).httpStatus,88      400,89    );90    check(91      "A real store is not falsely accepted",92      (93        await call("verifyPurchase", {94          store: "google",95          google: { purchaseToken: "fixture" },96        })97      ).body.error.code,98      "UNSUPPORTED_STORE",99    );100    check(101      "Erasure rejects verification credentials",102      (await call("eraseUser", { userId: FIXTURE.userId }, "verification"))103        .httpStatus,104      403,105    );106    check(107      "Cancellation after expiry is ignored",108      lab.runtime.provider.observe({109        id: "late-cancel",110        kind: "cancel",111        occurredAt: FIXTURE.expiresAt,112      }),113      false,114    );115    const expiredVerdict = await call("verifyPurchase", {116      store: FIXTURE.store,117      evidence: FIXTURE.evidence,118    });119    check(120      "Expired fixture evidence has an expired verdict",121      [expiredVerdict.body.isValid, expiredVerdict.body.state],122      [false, "EXPIRED"],123    );124    const body = lab.runtime.provider.db125      .query("SELECT body FROM outbox LIMIT 1")126      .get().body;127    const timestamp = Math.floor(lab.runtime.time / 1000).toString();128    const invalid = await lab.runtime.receiver.fetch(129      new Request(`${lab.runtime.baseUrl}/demo/receiver`, {130        method: "POST",131        body: body + " ",132        headers: {133          [WEBHOOK.timestampHeader]: timestamp,134          [WEBHOOK.signatureHeader]: sign(lab.runtime.secret, timestamp, body),135        },136      }),137    );138    check("Tampered HTTP body has no inbox effect", invalid.status, 401);139    const byteReceiver = createReceiver(140      ":memory:",141      lab.runtime.secret,142      () => lab.runtime.time,143    );144    try {145      const event = { ...JSON.parse(body), userId: "demo_\uFFFD" };146      const unicode = Buffer.from(JSON.stringify(event));147      const offset = unicode.indexOf(Buffer.from("\uFFFD"));148      const malformed = Buffer.concat([149        unicode.subarray(0, offset),150        Buffer.from([0xff]),151        unicode.subarray(offset + 3),152      ]);153      const withBom = Buffer.concat([Buffer.from([0xef, 0xbb, 0xbf]), unicode]);154      const send = (bytes, signedBytes = unicode) =>155        byteReceiver.fetch(156          new Request(`${lab.runtime.baseUrl}/demo/receiver`, {157            method: "POST",158            body: bytes,159            headers: {160              [WEBHOOK.timestampHeader]: timestamp,161              [WEBHOOK.signatureHeader]: sign(162                lab.runtime.secret,163                timestamp,164                signedBytes,165              ),166              [WEBHOOK.eventIdHeader]: event.eventId,167            },168          }),169        );170      for (const [label, bytes] of [171        ["Changed UTF-8 bytes", malformed],172        ["Inserted UTF-8 BOM", withBom],173      ]) {174        check(175          `${label} cannot reuse a signature`,176          [(await send(bytes)).status, byteReceiver.count()],177          [401, 0],178        );179      }180      check(181        "Authenticated malformed UTF-8 is rejected before storage",182        [(await send(malformed, malformed)).status, byteReceiver.count()],183        [400, 0],184      );185      check(186        "Authentic Unicode bytes are accepted and stored",187        [(await send(unicode)).status, byteReceiver.count()],188        [200, 1],189      );190      check(191        "Authentic BOM bytes are verified before decoding",192        [(await send(withBom, withBom)).status, byteReceiver.count()],193        [200, 1],194      );195    } finally {196      byteReceiver.close();197    }198    check(199      "Receiver still has exactly four events",200      lab.runtime.receiver.count(),201      4,202    );203    check(204      "Cross-origin demo mutations are refused",205      (206        await fetch(`${lab.runtime.baseUrl}/demo/advance`, {207          method: "POST",208          headers: { origin: "https://untrusted.example" },209        })210      ).status,211      403,212    );213  } finally {214    await lab.close();215    rmSync(lab.directory, { recursive: true, force: true });216  }217 218  const fresh = startLab();219  try {220    const call = (name, input) =>221      requestOperation(fresh.runtime.baseUrl, name, input);222    const evidence = { store: FIXTURE.store, evidence: FIXTURE.evidence };223    await call("verifyPurchase", evidence);224    const bindings = await Promise.all(225      ["alice", "bob"].map((userId) =>226        call("bindPurchase", { ...evidence, userId }),227      ),228    );229    check(230      "Overlapping HTTP ownership claims have one winner",231      bindings.filter((row) => row.body.bound).length,232      1,233    );234    check(235      "A cancellation older than the active row is ignored",236      fresh.runtime.provider.observe({237        id: "old-active-cancel",238        kind: "cancel",239        occurredAt: FIXTURE.startsAt - 1,240      }),241      false,242    );243    check(244      "Ignoring an old cancellation preserves renewal",245      fresh.runtime.provider.inspect().purchases[0].willRenew,246      1,247    );248    assert.throws(249      () =>250        fresh.runtime.provider.observe({251          id: "early-expiry",252          kind: "expire",253          occurredAt: FIXTURE.startsAt,254        }),255      /reconciliation/,256    );257    check(258      "Conflicting expiry is not consumed",259      fresh.runtime.provider.db260        .query(261          "SELECT COUNT(*) AS count FROM observations WHERE id = 'early-expiry'",262        )263        .get().count,264      0,265    );266    fresh.runtime.time += 1000;267    const observation = {268      id: "atomic-cancel",269      kind: "cancel",270      occurredAt: fresh.runtime.time,271    };272    fresh.runtime.provider.db.exec(273      "CREATE TRIGGER fail_outbox BEFORE INSERT ON outbox BEGIN SELECT RAISE(ABORT, 'injected disk failure'); END;",274    );275    assert.throws(() => fresh.runtime.provider.observe(observation));276    check(277      "Outbox failure rolls back subscription state",278      fresh.runtime.provider.inspect().purchases[0].willRenew,279      1,280    );281    fresh.runtime.provider.db.exec("DROP TRIGGER fail_outbox");282    check(283      "Failed transaction leaves the observation retryable",284      fresh.runtime.provider.observe(observation),285      true,286    );287    for (let attempt = 0; attempt < 3; attempt++) {288      fresh.runtime.time += 120_000;289      await deliver(290        fresh.runtime.provider,291        fresh.runtime.secret,292        fresh.runtime.now,293        async () => new Response(null, { status: 503 }),294      );295    }296    check(297      "Exhausted retries enter dead-letter",298      fresh.runtime.provider.inspect().deliveries[0].status,299      "dead-letter",300    );301  } finally {302    await fresh.close();303    rmSync(fresh.directory, { recursive: true, force: true });304  }305  const binding = startLab();306  try {307    const call = (name, input) =>308      requestOperation(binding.runtime.baseUrl, name, input);309    const evidence = { store: FIXTURE.store, evidence: FIXTURE.evidence };310    await call("verifyPurchase", evidence);311    binding.runtime.provider.db.exec(312      "CREATE TRIGGER fail_grant BEFORE INSERT ON outbox BEGIN SELECT RAISE(ABORT, 'injected disk failure'); END;",313    );314    check(315      "Grant failure rejects binding",316      (await call("bindPurchase", { ...evidence, userId: FIXTURE.userId }))317        .httpStatus,318      500,319    );320    check(321      "Grant failure rolls back ownership",322      binding.runtime.provider.inspect().purchases[0].userId,323      null,324    );325    binding.runtime.provider.db.exec("DROP TRIGGER fail_grant");326    binding.runtime.time = FIXTURE.expiresAt;327    check(328      "An expired purchase can be bound",329      (await call("bindPurchase", { ...evidence, userId: FIXTURE.userId })).body330        .bound,331      true,332    );333    check(334      "Binding expired evidence emits no grant",335      binding.runtime.provider.inspect().deliveries,336      [],337    );338  } finally {339    await binding.close();340    rmSync(binding.directory, { recursive: true, force: true });341  }342  const delayed = startLab();343  try {344    const call = (name, input) =>345      requestOperation(delayed.runtime.baseUrl, name, input);346    const evidence = { store: FIXTURE.store, evidence: FIXTURE.evidence };347    await call("verifyPurchase", evidence);348    delayed.runtime.time += 3_600_000;349    await call("bindPurchase", { ...evidence, userId: FIXTURE.userId });350    const grant = JSON.parse(351      delayed.runtime.provider.db.query("SELECT body FROM outbox LIMIT 1").get()352        .body,353    );354    check(355      "Delayed binding retains the store occurrence",356      grant.occurredAt,357      FIXTURE.startsAt,358    );359    check(360      "Delayed binding records its actual processing time",361      grant.processedAt,362      delayed.runtime.time,363    );364    delayed.runtime.restart();365    delayed.runtime.time = FIXTURE.expiresAt + 60_000;366    delayed.runtime.provider.observe({367      id: "late-expiry",368      kind: "expire",369      occurredAt: delayed.runtime.time,370    });371    check(372      "Late expiry revokes a persisted grant exactly once",373      delayed.runtime.provider.inspect().deliveries.map((row) => row.eventType),374      ["entitlement.granted", "subscription.expired", "entitlement.revoked"],375    );376    delayed.runtime.provider.observe({377      id: "another-expiry",378      kind: "expire",379      occurredAt: delayed.runtime.time,380    });381    check(382      "Repeated expiry emits no second revocation",383      delayed.runtime.provider.inspect().deliveries.length,384      3,385    );386  } finally {387    await delayed.close();388    rmSync(delayed.directory, { recursive: true, force: true });389  }390  const equalTime = startLab();391  try {392    const call = (name, input) =>393      requestOperation(equalTime.runtime.baseUrl, name, input);394    const evidence = { store: FIXTURE.store, evidence: FIXTURE.evidence };395    await call("verifyPurchase", evidence);396    await call("bindPurchase", { ...evidence, userId: FIXTURE.userId });397    equalTime.runtime.time = FIXTURE.expiresAt;398    equalTime.runtime.provider.observe({399      id: "cancel-at-deadline",400      kind: "cancel",401      occurredAt: FIXTURE.expiresAt,402    });403    equalTime.runtime.provider.observe({404      id: "expire-at-deadline",405      kind: "expire",406      occurredAt: FIXTURE.expiresAt,407    });408    check(409      "Equal-time expiry retains its lifecycle transition",410      equalTime.runtime.provider.inspect().purchases[0].state,411      "Expired",412    );413    check(414      "Equal-time observations revoke once and preserve both transitions",415      equalTime.runtime.provider416        .inspect()417        .deliveries.map((row) => row.eventType),418      [419        "entitlement.granted",420        "subscription.canceled",421        "entitlement.revoked",422        "subscription.expired",423      ],424    );425  } finally {426    await equalTime.close();427    rmSync(equalTime.directory, { recursive: true, force: true });428  }429  checks.push(...(await runConsumerDemo()).checks);430  checks.push(...runBridgeDemo());431  checks.push(...(await verifyStores()));432  checks.push(...(await verifyErasure()));433  return checks;434}435 436if (import.meta.main) {437  const checks = await verifyLab();438  console.log(439    `Commerce Protocol Example: ${checks.length} checks passed. No store or production service contacted.`,440  );441}442 
    \ No newline at end of file diff --git a/packages/docs/public/commerce-source/example/webhooks.mjs.html b/packages/docs/public/commerce-source/example/webhooks.mjs.html new file mode 100644 index 000000000..519eebff8 --- /dev/null +++ b/packages/docs/public/commerce-source/example/webhooks.mjs.html @@ -0,0 +1 @@ +Commerce Protocol Example · webhooks.mjs
    ← Provider replacement walkthrough

    Commerce Protocol Example · webhooks.mjs

    Source snapshot · 2026-09-08

    SHA-256 4838bac7a9083440998409aa1ab543999495ea6a907036bc78ba2002feb588b2
    1import { Database } from "bun:sqlite";2import { createHmac, timingSafeEqual } from "node:crypto";3import { WEBHOOK } from "openiap-commerce-protocol";4import { validate } from "./contract.mjs";5import { createErasureLedger } from "./erasure.mjs";6 7export function sign(secret, timestamp, body) {8  return (9    WEBHOOK.signaturePrefix +10    createHmac("sha256", secret)11      .update(`${timestamp}.`)12      .update(body)13      .digest("hex")14  );15}16 17export function authentic(secrets, timestamp, body, signatures, nowSeconds) {18  if (!/^\d+$/.test(timestamp ?? "")) return false;19  if (20    !Number.isSafeInteger(Number(timestamp)) ||21    Math.abs(nowSeconds - Number(timestamp)) > WEBHOOK.toleranceSeconds22  )23    return false;24  return (signatures ?? "").split(",").some((raw) => {25    const candidate = raw.trim();26    if (!/^v1=[a-f0-9]{64}$/.test(candidate)) return false;27    return secrets.some((secret) =>28      timingSafeEqual(29        Buffer.from(candidate),30        Buffer.from(sign(secret, timestamp, body)),31      ),32    );33  });34}35 36export function createReceiver(path, secret, now) {37  const emitters =38    typeof secret === "string" ? [{ name: "default", secret }] : secret;39  if (40    !Array.isArray(emitters) ||41    !emitters.length ||42    emitters.some(43      (entry) =>44        !entry.name ||45        !entry.secret ||46        (typeof secret !== "string" && !entry.projectId),47    )48  )49    throw new Error(50      "Configure each emitter with a name, project ID, and signing secret",51    );52  if (new Set(emitters.map((entry) => entry.name)).size !== emitters.length)53    throw new Error("Emitter names must be unique");54  const db = new Database(path, { create: true });55  db.exec(56    "CREATE TABLE IF NOT EXISTS inbox (event_id TEXT PRIMARY KEY, body TEXT NOT NULL)",57  );58  const erasures = createErasureLedger(db);59  // Upgrade old single-emitter event IDs without losing durable deduplication.60  db.transaction(() => {61    for (const row of db.query("SELECT event_id, body FROM inbox").all()) {62      const event = JSON.parse(row.body);63      if (row.event_id !== event.eventId) continue;64      const matching = emitters.filter(65        (entry) => entry.projectId === event.projectId,66      );67      const name = matching.length === 1 ? matching[0].name : "default";68      const identity = JSON.stringify([name, event.projectId, event.eventId]);69      db.query("INSERT OR IGNORE INTO inbox VALUES (?, ?)").run(70        identity,71        row.body,72      );73      db.query("DELETE FROM inbox WHERE event_id = ?").run(row.event_id);74    }75  })();76 77  async function fetch(request) {78    const bytes = new Uint8Array(await request.arrayBuffer());79    const authenticated = emitters.filter((emitter) =>80      authentic(81        [emitter.secret],82        request.headers.get(WEBHOOK.timestampHeader),83        bytes,84        request.headers.get(WEBHOOK.signatureHeader),85        Math.floor(now() / 1000),86      ),87    );88    if (!authenticated.length) {89      return new Response("Invalid signature", { status: 401 });90    }91    let body, event;92    try {93      body = new TextDecoder("utf-8", { fatal: true }).decode(bytes);94      event = JSON.parse(body);95    } catch {96      return new Response("Invalid JSON", { status: 400 });97    }98    if (!validate("#/$defs/CommerceEvent", event))99      return new Response("Invalid event", { status: 400 });100    if (request.headers.get(WEBHOOK.eventIdHeader) !== event.eventId)101      return new Response("Event ID mismatch", { status: 400 });102    const emitter = authenticated.find(103      (entry) => !entry.projectId || entry.projectId === event.projectId,104    );105    if (!emitter)106      return new Response("Unexpected emitter project", { status: 401 });107    if (event.userId && erasures.has(event.userId))108      return Response.json({ accepted: true, discarded: "erased-user" });109    // Inbox insertion is the durable effect; downstream jobs can consume it later.110    const result = db111      .query("INSERT OR IGNORE INTO inbox VALUES (?, ?)")112      .run(113        JSON.stringify([emitter.name, event.projectId, event.eventId]),114        body,115      );116    return Response.json({ accepted: true, duplicate: result.changes === 0 });117  }118 119  return {120    fetch,121    eraseUser(userId) {122      return db.transaction(() => {123        erasures.remember(userId);124        return db125          .query("DELETE FROM inbox WHERE json_extract(body, '$.userId') = ?")126          .run(userId).changes;127      })();128    },129    inspect: () =>130      db131        .query("SELECT body FROM inbox ORDER BY rowid")132        .all()133        .map((row) => JSON.parse(row.body)),134    count: () => db.query("SELECT count(*) AS count FROM inbox").get().count,135    close: () => db.close(),136  };137}138 139// The caller injects a loopback test transport. This is not a public HTTPS worker.140export async function deliver(provider, secret, now, post) {141  const results = [];142  const rows = provider.db143    .query(144      "SELECT * FROM outbox WHERE status = 'pending' AND next_at <= ? ORDER BY rowid",145    )146    .all(now());147  for (const candidate of rows) {148    const row = provider.db149      .query("SELECT * FROM outbox WHERE event_id = ? AND status = 'pending'")150      .get(candidate.event_id);151    if (!row) continue;152    const timestamp = Math.floor(now() / 1000).toString();153    const headers = {154      "content-type": WEBHOOK.contentType,155      [WEBHOOK.timestampHeader]: timestamp,156      [WEBHOOK.signatureHeader]: sign(secret, timestamp, row.body),157      [WEBHOOK.eventIdHeader]: row.event_id,158      [WEBHOOK.deliveryIdHeader]: row.delivery_id,159    };160    let status;161    try {162      status = (await post({ method: "POST", headers, body: row.body })).status;163    } catch {164      status = 503;165    }166    const attempts = row.attempts + 1;167    const retryable = status === 408 || status === 429 || status >= 500;168    const next =169      status >= 200 && status < 300170        ? "delivered"171        : retryable && attempts < 3172          ? "pending"173          : "dead-letter";174    provider.db175      .query(176        "UPDATE outbox SET attempts = ?, status = ?, next_at = ? WHERE event_id = ?",177      )178      .run(attempts, next, now() + 30_000 * 2 ** (attempts - 1), row.event_id);179    results.push({180      eventId: row.event_id,181      deliveryId: row.delivery_id,182      httpStatus: status,183      attempt: attempts,184      status: next,185    });186  }187  return results;188}189 
    \ No newline at end of file diff --git a/packages/docs/public/commerce-source/kit/convex/commerce/capabilities.ts.html b/packages/docs/public/commerce-source/kit/convex/commerce/capabilities.ts.html new file mode 100644 index 000000000..b9b7bb4d2 --- /dev/null +++ b/packages/docs/public/commerce-source/kit/convex/commerce/capabilities.ts.html @@ -0,0 +1 @@ +IAPKit · convex/commerce/capabilities.ts
    ← Provider replacement walkthrough

    IAPKit · convex/commerce/capabilities.ts

    Source snapshot · 2026-09-08

    SHA-256 2e2158922e05ed919bb8c5de5e581d180466cbf4f2e803f3684708f92b52c2f8
    1// Per-provider capability declarations.2//3// These describe what IAPKit *actually implements today*, not what a store's4// API theoretically allows. Consumers branch on this instead of assuming every5// store behaves like Apple, and support can answer "why is there no renewal6// event for Meta" without reading provider code.7//8// Keep in sync with the provider modules; `contract.test.ts` pins the9// claims that have a concrete implementation behind them.10 11import type { CommerceStore } from "./contract";12 13export type ProviderCapabilities = {14  /** Server-side receipt/token validation on demand. */15  supportsInitialValidation: boolean;16  /** Store pushes lifecycle notifications to IAPKit. */17  supportsServerNotifications: boolean;18  /** IAPKit keeps a canonical subscription record for this store. */19  supportsSubscriptions: boolean;20  /** Renewal is observable as a distinct lifecycle event. */21  supportsRenewalEvents: boolean;22  /** Refund or revocation is observable as a distinct lifecycle event. */23  supportsRefundEvents: boolean;24  /** Expiration is observable rather than only inferred from a timestamp. */25  supportsExpiration: boolean;26  /** A scheduled pass re-reads authoritative store state. */27  supportsReconciliation: boolean;28  /** Entitlement state is derivable for gating. */29  supportsEntitlements: boolean;30  /** The store asserts an amount IAPKit can attribute to revenue. */31  supportsRevenueAmount: boolean;32  /** Human-readable reason for every false above. */33  notes: string;34};35 36export const PROVIDER_CAPABILITIES: Record<37  CommerceStore,38  ProviderCapabilities39> = {40  apple: {41    supportsInitialValidation: true,42    supportsServerNotifications: true,43    supportsSubscriptions: true,44    supportsRenewalEvents: true,45    supportsRefundEvents: true,46    supportsExpiration: true,47    supportsReconciliation: false,48    supportsEntitlements: true,49    supportsRevenueAmount: true,50    notes:51      "App Store Server Notifications V2 drive the lifecycle. No scheduled " +52      "reconciliation pass exists yet, so a notification lost past Apple's " +53      "retry window is not self-healing. Receipt verification bootstraps a " +54      "token only before its first store event and cannot recreate a missed " +55      "commerce event.",56  },57  google: {58    supportsInitialValidation: true,59    supportsServerNotifications: true,60    supportsSubscriptions: true,61    supportsRenewalEvents: true,62    supportsRefundEvents: true,63    supportsExpiration: true,64    supportsReconciliation: false,65    supportsEntitlements: true,66    supportsRevenueAmount: true,67    notes:68      "RTDN drives the lifecycle. Google reissues purchaseToken across " +69      "upgrade/downgrade. The receiver requires subscriptionsv2 enrichment " +70      "for non-terminal lifecycle events and uses linkedPurchaseToken to move " +71      "the canonical row onto the replacement token. No scheduled " +72      "reconciliation pass exists, and receipt verification cannot recreate " +73      "a missed commerce event.",74  },75  horizon: {76    supportsInitialValidation: true,77    supportsServerNotifications: false,78    supportsSubscriptions: false,79    supportsRenewalEvents: false,80    supportsRefundEvents: false,81    supportsExpiration: false,82    supportsReconciliation: false,83    supportsEntitlements: true,84    supportsRevenueAmount: false,85    notes:86      "Only the Graph verify_entitlement endpoint is integrated: a one-shot " +87      "check that the viewer owns the SKU. Meta exposes no server " +88      "notifications to IAPKit, so there is no renewal, expiration or refund " +89      "signal and no canonical subscription record. Entitlement is answerable " +90      "only at the moment it is asked.",91  },92  amazon: {93    supportsInitialValidation: true,94    supportsServerNotifications: false,95    supportsSubscriptions: false,96    supportsRenewalEvents: false,97    supportsRefundEvents: false,98    supportsExpiration: false,99    supportsReconciliation: true,100    supportsEntitlements: true,101    supportsRevenueAmount: false,102    notes:103      "RVS validates receipts. Rows become due every 48 hours and a bounded " +104      "worker checks due work every five minutes, so backlog and retries can " +105      "extend that interval. RVS alone does not carry " +106      "enough lifecycle detail for a canonical subscription record, so no " +107      "subscription rows or lifecycle events are produced. A verification " +108      "still answers point-in-time entitlement.",109  },110};111 112/** Stores that can produce normalized subscription lifecycle events today. */113export function storesWithLifecycleEvents(): CommerceStore[] {114  return (Object.keys(PROVIDER_CAPABILITIES) as CommerceStore[]).filter(115    (store) => PROVIDER_CAPABILITIES[store].supportsSubscriptions,116  );117}118 
    \ No newline at end of file diff --git a/packages/docs/public/commerce-source/kit/convex/commerce/delivery.test.ts.html b/packages/docs/public/commerce-source/kit/convex/commerce/delivery.test.ts.html new file mode 100644 index 000000000..d1f5dc10b --- /dev/null +++ b/packages/docs/public/commerce-source/kit/convex/commerce/delivery.test.ts.html @@ -0,0 +1 @@ +IAPKit · convex/commerce/delivery.test.ts
    ← Provider replacement walkthrough

    IAPKit · convex/commerce/delivery.test.ts

    Source snapshot · 2026-09-08

    SHA-256 31cd2dae1ec8da9f2f2a2159a622587ffbe895380c04878eed9f8726b4722bef
    1import { afterEach, describe, expect, it, vi } from "vitest";2import type { LookupFunction } from "node:net";3 4import {5  buildPinnedRequestOptions,6  deliverPendingEventsHandler,7  MAX_FALLBACK_ADDRESSES,8  postJsonPinned,9  resolvePublicAddresses,10  type DeliveryRequest,11} from "./delivery";12import {13  DELIVERY_ID_HEADER,14  EVENT_ID_HEADER,15  SIGNATURE_HEADER,16  TIMESTAMP_HEADER,17} from "./signing";18 19const claimed = {20  deliveryId: "outboundDeliveries_1",21  leaseToken: "lease-1",22  attempts: 0,23  url: "https://hooks.example.com/iapkit?source=test",24  secret: "whsec_test",25  body: JSON.stringify({ eventType: "subscription.renewed" }),26  eventId: "commerceEvents_1",27} as const;28 29afterEach(() => {30  vi.useRealTimers();31});32 33describe("deliverPendingEventsHandler", () => {34  it("posts signed headers and records the response before claiming again", async () => {35    vi.setSystemTime(new Date("2026-08-27T00:00:00.000Z"));36    let claimCount = 0;37    const recorded: Array<Record<string, unknown>> = [];38    const runMutation = vi.fn(async (_reference, args) => {39      if (Object.keys(args).length === 0) {40        claimCount += 1;41        return claimCount === 1 ? [claimed] : [];42      }43      recorded.push(args);44      return null;45    });46    const requests: DeliveryRequest[] = [];47 48    await expect(49      deliverPendingEventsHandler({ runMutation } as never, async (request) => {50        requests.push(request);51        return 204;52      }),53    ).resolves.toEqual({ attempted: 1, delivered: 1 });54 55    expect(requests).toHaveLength(1);56    expect(requests[0].url.toString()).toBe(claimed.url);57    expect(requests[0].body).toBe(claimed.body);58    expect(requests[0].headers[EVENT_ID_HEADER]).toBe(claimed.eventId);59    expect(requests[0].headers[DELIVERY_ID_HEADER]).toBe(claimed.deliveryId);60    expect(requests[0].headers[TIMESTAMP_HEADER]).toBe("1787788800");61    expect(requests[0].headers[SIGNATURE_HEADER]).toMatch(/^v1=[0-9a-f]{64}$/);62    expect(recorded).toEqual([63      expect.objectContaining({64        deliveryId: claimed.deliveryId,65        leaseToken: claimed.leaseToken,66        ok: true,67        statusCode: 204,68        retryable: false,69      }),70    ]);71  });72 73  it("records redirects as permanent failures without following them", async () => {74    let claimCount = 0;75    const recorded: Array<Record<string, unknown>> = [];76    const runMutation = vi.fn(async (_reference, args) => {77      if (Object.keys(args).length === 0) {78        claimCount += 1;79        return claimCount === 1 ? [claimed] : [];80      }81      recorded.push(args);82      return null;83    });84    const post = vi.fn(async () => 302);85 86    await expect(87      deliverPendingEventsHandler({ runMutation } as never, post),88    ).resolves.toEqual({ attempted: 1, delivered: 0 });89    expect(post).toHaveBeenCalledTimes(1);90    expect(recorded[0]).toMatchObject({91      ok: false,92      statusCode: 302,93      retryable: false,94    });95  });96 97  it("rejects an unsafe stored URL before issuing a request", async () => {98    let claimCount = 0;99    const recorded: Array<Record<string, unknown>> = [];100    const unsafeClaim = { ...claimed, url: "https://127.0.0.1/hook" };101    const runMutation = vi.fn(async (_reference, args) => {102      if (Object.keys(args).length === 0) {103        claimCount += 1;104        return claimCount === 1 ? [unsafeClaim] : [];105      }106      recorded.push(args);107      return null;108    });109    const post = vi.fn(async () => 204);110 111    await expect(112      deliverPendingEventsHandler({ runMutation } as never, post),113    ).resolves.toEqual({ attempted: 1, delivered: 0 });114    expect(post).not.toHaveBeenCalled();115    expect(recorded[0]).toMatchObject({116      deliveryId: claimed.deliveryId,117      leaseToken: claimed.leaseToken,118      ok: false,119      error: "destination rejected: host-not-public",120      retryable: false,121    });122  });123 124  it("records transport failures as retryable", async () => {125    let claimCount = 0;126    const recorded: Array<Record<string, unknown>> = [];127    const runMutation = vi.fn(async (_reference, args) => {128      if (Object.keys(args).length === 0) {129        claimCount += 1;130        return claimCount === 1 ? [claimed] : [];131      }132      recorded.push(args);133      return null;134    });135 136    await expect(137      deliverPendingEventsHandler({ runMutation } as never, async () => {138        throw new Error("connection reset");139      }),140    ).resolves.toEqual({ attempted: 1, delivered: 0 });141    expect(recorded[0]).toMatchObject({142      deliveryId: claimed.deliveryId,143      leaseToken: claimed.leaseToken,144      ok: false,145      error: "connection reset",146      retryable: true,147    });148  });149});150 151describe("resolvePublicAddresses", () => {152  it("rejects private, shared and link-local DNS answers", async () => {153    for (const address of [154      "127.0.0.1",155      "100.64.0.1",156      "169.254.169.254",157      "::1",158    ]) {159      await expect(160        resolvePublicAddresses("hooks.example.com", async () => [161          { address, family: address.includes(":") ? 6 : 4 },162        ]),163      ).rejects.toThrow(/non-public/);164    }165  });166 167  it("rejects a mixed public/private DNS response", async () => {168    await expect(169      resolvePublicAddresses("hooks.example.com", async () => [170        { address: "93.184.216.34", family: 4 },171        { address: "10.0.0.5", family: 4 },172      ]),173    ).rejects.toThrow(/non-public/);174  });175 176  it("accepts only-public answers for a pinned connection", async () => {177    await expect(178      resolvePublicAddresses("hooks.example.com", async () => [179        { address: "93.184.216.34", family: 4 },180        { address: "2606:4700:4700::1111", family: 6 },181      ]),182    ).resolves.toHaveLength(2);183  });184 185  it("caps a tenant-controlled DNS answer set", async () => {186    const addresses = await resolvePublicAddresses(187      "hooks.example.com",188      async () =>189        Array.from({ length: 20 }, (_, index) => ({190          address: `93.184.216.${index + 1}`,191          family: 4,192        })),193    );194    expect(addresses).toHaveLength(MAX_FALLBACK_ADDRESSES);195  });196 197  it("falls back across validated addresses within one request deadline", async () => {198    const attempted: string[] = [];199    const request: DeliveryRequest = {200      url: new URL("https://hooks.example.com/iapkit"),201      headers: { "content-type": "application/json" },202      body: "{}",203    };204    const status = await postJsonPinned(205      request,206      async () => [207        { address: "93.184.216.34", family: 4 },208        { address: "2606:4700:4700::1111", family: 6 },209      ],210      async (_request, address, timeoutMs) => {211        attempted.push(address.address);212        expect(timeoutMs).toBeGreaterThan(0);213        if (attempted.length === 1) throw new Error("network unreachable");214        return 204;215      },216    );217    expect(status).toBe(204);218    expect(attempted).toEqual(["93.184.216.34", "2606:4700:4700::1111"]);219  });220 221  it("pins lookup while preserving TLS SNI and the full request path", () => {222    const request: DeliveryRequest = {223      url: new URL("https://hooks.example.com:8443/iapkit?source=test"),224      headers: { "content-type": "application/json" },225      body: "{}",226    };227    const options = buildPinnedRequestOptions(request, {228      address: "93.184.216.34",229      family: 4,230    });231    expect(options).toMatchObject({232      protocol: "https:",233      hostname: "hooks.example.com",234      servername: "hooks.example.com",235      port: "8443",236      path: "/iapkit?source=test",237      method: "POST",238      headers: request.headers,239    });240    let pinned: unknown;241    (options.lookup as LookupFunction)(242      "hooks.example.com",243      { all: false },244      (error, address, family) => {245        expect(error).toBeNull();246        pinned = { address, family };247      },248    );249    expect(pinned).toEqual({ address: "93.184.216.34", family: 4 });250  });251});252 
    \ No newline at end of file diff --git a/packages/docs/public/commerce-source/kit/convex/commerce/delivery.ts.html b/packages/docs/public/commerce-source/kit/convex/commerce/delivery.ts.html new file mode 100644 index 000000000..8df64a5f1 --- /dev/null +++ b/packages/docs/public/commerce-source/kit/convex/commerce/delivery.ts.html @@ -0,0 +1 @@ +IAPKit · convex/commerce/delivery.ts
    ← Provider replacement walkthrough

    IAPKit · convex/commerce/delivery.ts

    Source snapshot · 2026-09-08

    SHA-256 05941b61f771e5437e98f4f10baed4865ccb7c93a27871e6b29cfe8fb265c5cc
    1"use node";2 3// HTTP half of outbound delivery.4//5// Direction is strictly store → IAPKit → developer backend. This is6// server-to-server only: destinations are HTTPS endpoints a project owner7// registered, nothing here is reachable from a shipped app, and no8// client-pullable stream exists.9 10import { v } from "convex/values";11import { lookup as dnsLookup } from "node:dns/promises";12import { request as httpsRequest, type RequestOptions } from "node:https";13import { isIP, type LookupFunction } from "node:net";14 15import { internal } from "../_generated/api";16import { internalAction, type ActionCtx } from "../_generated/server";17import type { ClaimedDelivery } from "./deliveryState";18import {19  CONTENT_TYPE,20  DELIVERY_ID_HEADER,21  EVENT_ID_HEADER,22  REQUEST_TIMEOUT_MS,23  SIGNATURE_HEADER,24  TIMESTAMP_HEADER,25  checkDestinationUrl,26  CLAIM_BATCH_LIMIT,27  isRetryableStatus,28  isPublicIpAddress,29  signPayloadWithRotation,30} from "./signing";31 32export type ResolvedAddress = { address: string; family: number };33export const MAX_FALLBACK_ADDRESSES = 4;34type Resolver = (35  hostname: string,36  options: { all: true; verbatim: true },37) => Promise<ResolvedAddress[]>;38 39export async function resolvePublicAddresses(40  rawHostname: string,41  resolver: Resolver = dnsLookup,42): Promise<ResolvedAddress[]> {43  const hostname = rawHostname.replace(/^\[|\]$/g, "").replace(/\.$/, "");44  const family = isIP(hostname);45  const addresses = family46    ? [{ address: hostname, family }]47    : await resolver(hostname, { all: true, verbatim: true });48  if (49    addresses.length === 0 ||50    addresses.some((entry) => !isPublicIpAddress(entry.address))51  ) {52    throw new Error("destination resolved to a non-public address");53  }54  return [55    ...new Map(56      addresses.map((entry) => [`${entry.family}:${entry.address}`, entry]),57    ).values(),58  ].slice(0, MAX_FALLBACK_ADDRESSES);59}60 61export type DeliveryRequest = {62  url: URL;63  headers: Record<string, string>;64  body: string;65};66 67type AddressPoster = (68  request: DeliveryRequest,69  selected: ResolvedAddress,70  timeoutMs: number,71) => Promise<number>;72 73async function withinTimeout<T>(promise: Promise<T>, ms: number): Promise<T> {74  let timer: ReturnType<typeof setTimeout> | undefined;75  try {76    return await Promise.race([77      promise,78      new Promise<T>((_resolve, reject) => {79        timer = setTimeout(() => reject(new Error("request timed out")), ms);80      }),81    ]);82  } finally {83    if (timer) clearTimeout(timer);84  }85}86 87async function postJsonToAddress(88  request: DeliveryRequest,89  selected: ResolvedAddress,90  timeoutMs: number,91): Promise<number> {92  return await new Promise<number>((resolve, reject) => {93    const outgoing = httpsRequest(94      buildPinnedRequestOptions(request, selected),95      (response) => {96        clearTimeout(timer);97        const status = response.statusCode ?? 0;98        response.destroy();99        resolve(status);100      },101    );102    const timer = setTimeout(() => {103      outgoing.destroy(new Error("request timed out"));104    }, timeoutMs);105    outgoing.once("error", (error) => {106      clearTimeout(timer);107      reject(error);108    });109    outgoing.end(request.body);110  });111}112 113export function buildPinnedRequestOptions(114  request: DeliveryRequest,115  selected: ResolvedAddress,116): RequestOptions {117  const hostname = request.url.hostname118    .replace(/^\[|\]$/g, "")119    .replace(/\.$/, "");120  const pinnedLookup: LookupFunction = (_hostname, _options, callback) => {121    if (_options.all) {122      callback(null, [selected]);123    } else {124      callback(null, selected.address, selected.family);125    }126  };127 128  return {129    protocol: "https:",130    hostname,131    port: request.url.port || undefined,132    path: `${request.url.pathname}${request.url.search}`,133    method: "POST",134    headers: request.headers,135    lookup: pinnedLookup,136    ...(isIP(hostname) === 0 ? { servername: hostname } : {}),137  };138}139 140export async function postJsonPinned(141  request: DeliveryRequest,142  resolver: Resolver = dnsLookup,143  postToAddress: AddressPoster = postJsonToAddress,144): Promise<number> {145  const startedAt = Date.now();146  const hostname = request.url.hostname147    .replace(/^\[|\]$/g, "")148    .replace(/\.$/, "");149  const addresses = await withinTimeout(150    resolvePublicAddresses(hostname, resolver),151    REQUEST_TIMEOUT_MS,152  );153  let lastError: unknown;154  for (let index = 0; index < addresses.length; index += 1) {155    const remaining = REQUEST_TIMEOUT_MS - (Date.now() - startedAt);156    if (remaining <= 0) break;157    const addressesLeft = addresses.length - index;158    const attemptBudget =159      addressesLeft === 1160        ? remaining161        : Math.max(1, Math.min(3_000, Math.floor(remaining / addressesLeft)));162    try {163      return await postToAddress(request, addresses[index], attemptBudget);164    } catch (error) {165      lastError = error;166    }167  }168  throw lastError instanceof Error169    ? lastError170    : new Error("all destination addresses failed");171}172 173export async function deliverPendingEventsHandler(174  ctx: Pick<ActionCtx, "runMutation">,175  post: (request: DeliveryRequest) => Promise<number> = postJsonPinned,176): Promise<{ attempted: number; delivered: number }> {177  let attempted = 0;178  let delivered = 0;179 180  for (let index = 0; index < CLAIM_BATCH_LIMIT; index += 1) {181    const claimed: ClaimedDelivery[] = await ctx.runMutation(182      internal.commerce.deliveryState.claimPendingDeliveries,183      {},184    );185    const [item] = claimed;186    if (!item) break;187    attempted += 1;188 189    const check = checkDestinationUrl(item.url);190    if (!check.ok) {191      await ctx.runMutation(192        internal.commerce.deliveryState.recordDeliveryResult,193        {194          deliveryId: item.deliveryId,195          leaseToken: item.leaseToken,196          ok: false,197          error: `destination rejected: ${check.reason}`,198          retryable: false,199        },200      );201      continue;202    }203 204    const timestamp = Math.floor(Date.now() / 1000);205    const signature = await signPayloadWithRotation(206      {207        current: item.secret,208        ...(item.previousSecret ? { previous: item.previousSecret } : {}),209      },210      timestamp,211      item.body,212    );213 214    try {215      const status = await post({216        url: check.url,217        headers: {218          "content-type": CONTENT_TYPE,219          [SIGNATURE_HEADER]: signature,220          [TIMESTAMP_HEADER]: String(timestamp),221          [EVENT_ID_HEADER]: item.eventId,222          [DELIVERY_ID_HEADER]: item.deliveryId,223        },224        body: item.body,225      });226      const ok = status >= 200 && status < 300;227      if (ok) delivered += 1;228      await ctx.runMutation(229        internal.commerce.deliveryState.recordDeliveryResult,230        {231          deliveryId: item.deliveryId,232          leaseToken: item.leaseToken,233          ok,234          statusCode: status,235          retryable: isRetryableStatus(status),236        },237      );238    } catch (error) {239      await ctx.runMutation(240        internal.commerce.deliveryState.recordDeliveryResult,241        {242          deliveryId: item.deliveryId,243          leaseToken: item.leaseToken,244          ok: false,245          error: error instanceof Error ? error.message : "request failed",246          retryable: true,247        },248      );249    }250  }251 252  return { attempted, delivered };253}254 255export const deliverPendingEvents = internalAction({256  args: {},257  returns: v.object({ attempted: v.number(), delivered: v.number() }),258  handler: async (ctx) => deliverPendingEventsHandler(ctx),259});260 
    \ No newline at end of file diff --git a/packages/docs/public/commerce-source/kit/convex/commerce/spec.conformance.test.ts.html b/packages/docs/public/commerce-source/kit/convex/commerce/spec.conformance.test.ts.html new file mode 100644 index 000000000..c9524cd8d --- /dev/null +++ b/packages/docs/public/commerce-source/kit/convex/commerce/spec.conformance.test.ts.html @@ -0,0 +1 @@ +IAPKit · convex/commerce/spec.conformance.test.ts
    ← Provider replacement walkthrough

    IAPKit · convex/commerce/spec.conformance.test.ts

    Source snapshot · 2026-09-08

    SHA-256 d6a371f0fa4ae8c288b2358b322ff4225d03cf5071fe591c689db0b77c621719
    1// Proves IAPKit conforms to the OpenIAP Commerce Protocol.2//3// The specification is the authority: its JSON Schema validates real payloads4// this implementation builds, and its published vocabulary is compared against5// the one this implementation ships. Neither list is restated here, so the two6// cannot drift silently — if kit gains an event type the spec does not declare,7// this file fails.8 9import Ajv from "ajv/dist/2020.js";10import {11  KNOWN_COMMERCE_EVENT_TYPES as SPEC_EVENT_TYPES,12  COMMERCE_EVENT_VERSION,13  DATA_PROVENANCE as SPEC_DATA_PROVENANCE,14  EXTENSION_LIMITS,15  KNOWN_STORES as SPEC_KNOWN_STORES,16  SUBSCRIPTION_STATES as SPEC_SUBSCRIPTION_STATES,17  WEBHOOK,18  commerceEventSchema,19  primitivesSchema,20} from "openiap-commerce-protocol";21import { describe, expect, it } from "vitest";22 23import type { Doc } from "../_generated/dataModel";24import { PROVIDER_CAPABILITIES } from "./capabilities";25import {26  COMMERCE_ENVIRONMENTS,27  COMMERCE_EVENT_SCHEMA_VERSION,28  COMMERCE_EVENT_TYPES,29  COMMERCE_STORES,30  DATA_PROVENANCE_VALUES,31  commerceEventTypeForTransition,32  MAX_EXTENSION_ENTRIES,33  MAX_EXTENSION_KEY_LENGTH,34  MAX_EXTENSION_VALUE_LENGTH,35  TRANSITION_TO_EVENT,36  type LifecycleTransition,37} from "./contract";38import { readFileSync } from "node:fs";39import { createRequire } from "node:module";40import { fileURLToPath } from "node:url";41 42import {43  applySubscriptionTransition,44  entitlementActive,45} from "../subscriptions/stateMachine";46import {47  mapAppleNotificationType,48  mapGoogleSubscriptionNotificationType,49} from "../webhooks/shared";50 51import { buildEventPayload } from "./deliveryState";52import { emitCommerceEvent } from "./internal";53import {54  EVENT_ID_HEADER,55  DELIVERY_ID_HEADER,56  SIGNATURE_HEADER,57  CONTENT_TYPE,58  SIGNATURE_TOLERANCE_SECONDS,59  signPayloadWithRotation,60  TIMESTAMP_HEADER,61} from "./signing";62 63// kit is an ESM package, so `require` only exists through the test runner's64// interop shim. Resolve the specification's published subpaths the way any65// ESM consumer would instead of depending on that.66const resolveSpec = createRequire(import.meta.url).resolve;67 68function validator() {69  const ajv = new Ajv({ strict: true, allErrors: true });70  ajv.addSchema(primitivesSchema, "primitives.schema.json");71  ajv.addSchema(commerceEventSchema, "commerce-event.schema.json");72  return ajv;73}74 75const validateEvent = () =>76  validator().getSchema("commerce-event.schema.json")!;77 78/** A stored row shaped exactly as `emitCommerceEvent` writes one. */79function storedEvent(overrides: Record<string, unknown> = {}) {80  return {81    _id: "commerceEvents_1",82    _creationTime: 0,83    projectId: "projects_1",84    eventType: "subscription.renewed",85    eventVersion: COMMERCE_EVENT_SCHEMA_VERSION,86    store: "apple",87    environment: "production",88    userId: "user_1",89    productId: "premium.monthly",90    transactionId: "2000000912345678",91    originalTransactionId: "2000000811111111",92    subscriptionId: "subscriptions_1",93    subscription: {94      state: "Active",95      productId: "premium.monthly",96      expiresAt: 1_758_979_200_000,97      renewsAt: 1_758_979_200_000,98      willRenew: true,99    },100    entitlementActive: true,101    currency: "USD",102    amountMicros: 9_990_000,103    amountProvenance: "store",104    sourceEventId: "webhookEvents_1",105    sourceStoreNotificationId: "8f3b1c2d-4e5a-6b7c-8d9e-0f1a2b3c4d5e",106    occurredAt: 1_756_300_800_000,107    processedAt: 1_756_300_801_420,108    ...overrides,109  } as unknown as Doc<"commerceEvents">;110}111 112describe("IAPKit conforms to the OpenIAP Commerce Protocol", () => {113  it("declares only event types the specification names", () => {114    for (const eventType of COMMERCE_EVENT_TYPES) {115      expect(SPEC_EVENT_TYPES).toContain(eventType);116    }117  });118 119  it("emits the event version the specification names", () => {120    expect(COMMERCE_EVENT_SCHEMA_VERSION).toBe(COMMERCE_EVENT_VERSION);121  });122 123  it("bounds extensions exactly as the specification does", () => {124    expect({125      maxEntries: MAX_EXTENSION_ENTRIES,126      maxKeyLength: MAX_EXTENSION_KEY_LENGTH,127      maxValueLength: MAX_EXTENSION_VALUE_LENGTH,128    }).toEqual(EXTENSION_LIMITS);129  });130 131  it("uses the transport headers and replay window the specification fixes", () => {132    expect(SIGNATURE_HEADER).toBe(WEBHOOK.signatureHeader);133    expect(TIMESTAMP_HEADER).toBe(WEBHOOK.timestampHeader);134    expect(EVENT_ID_HEADER).toBe(WEBHOOK.eventIdHeader);135    expect(DELIVERY_ID_HEADER).toBe(WEBHOOK.deliveryIdHeader);136    expect(SIGNATURE_TOLERANCE_SECONDS).toBe(WEBHOOK.toleranceSeconds);137    expect(CONTENT_TYPE).toBe(WEBHOOK.contentType);138  });139 140  const signatureVectors = JSON.parse(141    readFileSync(142      resolveSpec("openiap-commerce-protocol/vectors/signatures.json"),143      "utf8",144    ),145  ) as {146    cases: {147      name: string;148      secret: string;149      previousSecret?: string;150      timestamp: number;151      body: string;152      expected: string;153    }[];154  };155 156  // SPEC.md 9.4.2 fixes the signed material. Every other signing test here is157  // self-relative, so it could be changed wholesale without one of them failing.158  it.each(signatureVectors.cases.map((c) => [c.name, c] as const))(159    "reproduces the %s signature vector",160    async (_name, vector) => {161      await expect(162        signPayloadWithRotation(163          { current: vector.secret, previous: vector.previousSecret },164          vector.timestamp,165          vector.body,166        ),167      ).resolves.toBe(vector.expected);168    },169  );170});171 172describe("built payloads validate against the specification schema", () => {173  it("a minimal event with no subscription and no price validates", () => {174    const validate = validateEvent();175    const payload = buildEventPayload(176      storedEvent({177        store: "amazon",178        subscription: undefined,179        subscriptionId: undefined,180        entitlementActive: undefined,181        currency: undefined,182        amountMicros: undefined,183        amountProvenance: undefined,184        userId: undefined,185        transactionId: undefined,186        originalTransactionId: undefined,187        sourceStoreNotificationId: undefined,188      }),189    );190    const ok = validate(payload);191    expect(validate.errors ?? [], JSON.stringify(validate.errors)).toEqual([]);192    expect(ok).toBe(true);193  });194 195  it("kit's emitter produces lifecycle events for Apple and Google only", async () => {196    // storeForPlatform maps the inbound platform enum, which has two members.197    // Horizon and Amazon reach kit through verification, not notifications —198    // which is exactly what their capability descriptor declares.199    for (const [platform, expectedStore] of [200      ["IOS", "apple"],201      ["Android", "google"],202    ] as const) {203      const { ctx, inserted } = emitterContext();204      await emitCommerceEvent(ctx as never, {205        projectId: "projects_1" as never,206        transition: "Renewed",207        active: true,208        previouslyActive: true,209        sourceEvent: { ...(richSource as object), platform } as never,210      });211      expect(inserted[0].doc.store).toBe(expectedStore);212    }213  });214 215  it("omits the snapshot rather than inventing an entitlement gate", () => {216    // The stored gate is optional. Emitting `active: false` for a row that217    // never recorded one would assert no access for something unknown.218    const payload = buildEventPayload(219      storedEvent({ entitlementActive: undefined }),220    );221    expect(payload.subscription).toBeUndefined();222    expect(validateEvent()(payload)).toBe(true);223  });224 225  it("carries the gate through when the row recorded one", () => {226    const payload = buildEventPayload(227      storedEvent({ entitlementActive: false }),228    );229    expect(payload.subscription?.active).toBe(false);230  });231 232  it("omits price entirely when the store asserted no amount, rather than sending zero", () => {233    const payload = buildEventPayload(234      storedEvent({ currency: undefined, amountMicros: undefined }),235    );236    expect(payload.price).toBeUndefined();237  });238});239 240describe("the subscription state vocabulary matches", () => {241  it("kit's own state vocabulary is one the specification declares", () => {242    // Reading the spec's enum and validating it against the spec's enum proves243    // nothing. The real claim is that kit's union is a subset of it.244    const source = readFileSync(245      fileURLToPath(new URL("../webhooks/shared.ts", import.meta.url)),246      "utf8",247    );248    const start = source.indexOf("export type SubscriptionState");249    const block = source.slice(start, source.indexOf(";", start));250    const declared = [...block.matchAll(/"([A-Za-z]+)"/g)].map((m) => m[1]);251    expect(declared.length).toBeGreaterThan(5);252    for (const state of declared) {253      expect(SPEC_SUBSCRIPTION_STATES, `${state} is undeclared`).toContain(254        state,255      );256    }257  });258 259  it("declares no provenance, store, or environment the specification lacks", () => {260    // Closed value space: the two lists must be identical.261    expect([...DATA_PROVENANCE_VALUES].sort()).toEqual(262      [...SPEC_DATA_PROVENANCE].sort(),263    );264    // Open value spaces: everything kit emits must still be a value the265    // specification names today.266    for (const store of COMMERCE_STORES) {267      expect(SPEC_KNOWN_STORES, `${store} is undeclared`).toContain(store);268    }269    const specEnvironments = (270      primitivesSchema as unknown as {271        $defs: { Environment: { examples: readonly string[] } };272      }273    ).$defs.Environment.examples;274    for (const environment of COMMERCE_ENVIRONMENTS) {275      expect(specEnvironments, `${environment} is undeclared`).toContain(276        environment,277      );278    }279  });280 281  it("rejects a state the specification does not declare", () => {282    const validate = validateEvent();283    const payload = buildEventPayload(284      storedEvent({285        subscription: { state: "Hibernating", productId: "premium.monthly" },286      }),287    );288    expect(validate(payload)).toBe(false);289  });290});291 292describe("kit's capabilities agree with the published descriptor", () => {293  const descriptor = JSON.parse(294    readFileSync(295      resolveSpec(296        "openiap-commerce-protocol/examples/provider-capabilities.json",297      ),298      "utf8",299    ),300  ) as {301    eventTypes: string[];302    stores: Record<303      string,304      Record<string, { provider: boolean; implementation: boolean }>305    >;306  };307 308  const FIELDS: [keyof (typeof PROVIDER_CAPABILITIES)["apple"], string][] = [309    ["supportsInitialValidation", "initialValidation"],310    ["supportsServerNotifications", "serverNotifications"],311    ["supportsSubscriptions", "subscriptions"],312    ["supportsRenewalEvents", "renewalEvents"],313    ["supportsRefundEvents", "refundEvents"],314    ["supportsExpiration", "expiration"],315    ["supportsReconciliation", "reconciliation"],316    ["supportsEntitlements", "entitlements"],317    ["supportsRevenueAmount", "revenueAmount"],318  ];319 320  it("publishes the event vocabulary kit implements", () => {321    expect([...descriptor.eventTypes].sort()).toEqual(322      [...COMMERCE_EVENT_TYPES].sort(),323    );324  });325 326  // kit knows one axis: what it implements. The descriptor carries both, and327  // fabricating the provider axis from kit's boolean is the conflation the328  // two-axis model exists to prevent — it would claim Amazon publishes no329  // notification channel merely because kit consumes none.330  it.each(Object.keys(PROVIDER_CAPABILITIES))(331    "%s implementation axis matches kit",332    (store) => {333      const caps =334        PROVIDER_CAPABILITIES[store as keyof typeof PROVIDER_CAPABILITIES];335      for (const [kitField, specField] of FIELDS) {336        expect(337          descriptor.stores[store][specField].implementation,338          `${store}.${specField}`,339        ).toBe(caps[kitField]);340      }341    },342  );343 344  it("never claims to implement more than the provider offers", () => {345    for (const [store, entry] of Object.entries(descriptor.stores)) {346      for (const [name, support] of Object.entries(entry)) {347        if (support.implementation) {348          expect(support.provider, `${store}.${name}`).toBe(true);349        }350      }351    }352  });353});354 355describe("kit reproduces the specification's lifecycle vectors", () => {356  const vectors = JSON.parse(357    readFileSync(358      resolveSpec("openiap-commerce-protocol/generated/vectors/lifecycle.json"),359      "utf8",360    ),361  ) as {362    entitlement: {363      cases: {364        name: string;365        state: string;366        expiresAt?: number;367        occurredAt: number;368        processedAt: number;369        entitled: boolean;370      }[];371    };372    emission: {373      cases: {374        name: string;375        lifecycleEvent: string | null;376        entitledBefore: boolean;377        entitledAfter: boolean;378        emit: string[];379      }[];380    };381    binding: {382      cases: {383        name: string;384        entitledAtBinding: boolean;385        emit: string[];386      }[];387    };388  };389 390  it.each(vectors.entitlement.cases.map((c) => [c.name, c] as const))(391    "entitlement: %s",392    (_name, testCase) => {393      const sub = {394        state: testCase.state,395        productId: "premium.monthly",396        ...(testCase.expiresAt === undefined397          ? {}398          : { expiresAt: testCase.expiresAt }),399      } as never;400      expect(entitlementActive(sub, testCase.processedAt)).toBe(401        testCase.entitled,402      );403    },404  );405 406  // Drives kit's REAL emitter. Re-deriving the expected list from407  // entitledBefore/entitledAfter would just restate the generator's formula and408  // could never fail — the point is to make `emitCommerceEvent` itself produce409  // the events the vectors demand.410  const KIT_TRANSITIONS = Object.keys(411    TRANSITION_TO_EVENT,412  ) as LifecycleTransition[];413 414  /** The kit transition whose mapping produces this specification event. */415  function transitionFor(lifecycleEvent: string | null) {416    const match = KIT_TRANSITIONS.find(417      (t) => commerceEventTypeForTransition(t) === lifecycleEvent,418    );419    if (!match) throw new Error(`no kit transition emits ${lifecycleEvent}`);420    return match;421  }422 423  it.each(vectors.emission.cases.map((c) => [c.name, c] as const))(424    "emission: %s",425    async (_name, testCase) => {426      const { ctx, inserted } = emitterContext();427      await emitCommerceEvent(ctx as never, {428        projectId: "projects_1" as never,429        transition: transitionFor(testCase.lifecycleEvent),430        active: testCase.entitledAfter,431        previouslyActive: testCase.entitledBefore,432        sourceEvent: richSource,433        subscription: {434          state: "Active",435          productId: "premium.monthly",436          userId: "user_5e91a7",437        },438      });439      const emitted = inserted440        .filter((row) => row.table === "commerceEvents")441        .map((row) => row.doc.eventType);442      expect(emitted).toEqual(testCase.emit);443    },444  );445 446  it.each(vectors.binding.cases.map((c) => [c.name, c] as const))(447    "first binding: %s",448    async (_name, testCase) => {449      const { ctx, inserted } = emitterContext();450      await emitCommerceEvent(ctx as never, {451        projectId: "projects_1" as never,452        transition: null,453        active: testCase.entitledAtBinding,454        previouslyActive: false,455        sourceEvent: richSource,456        subscription: {457          state: testCase.entitledAtBinding ? "Active" : "Expired",458          productId: "premium.monthly",459          userId: "user_5e91a7",460        },461      });462      expect(463        inserted464          .filter((row) => row.table === "commerceEvents")465          .map((row) => row.doc.eventType),466      ).toEqual(testCase.emit);467    },468  );469 470  it("maps every transition kit produces onto an event the vectors cover", () => {471    const covered = new Set(472      vectors.emission.cases.map((c) => c.lifecycleEvent).filter(Boolean),473    );474    const transitions = KIT_TRANSITIONS.filter((t) => t !== "Ignored");475    for (const transition of transitions) {476      const event = commerceEventTypeForTransition(transition);477      expect(event, `${transition} must map to an event`).toBeTruthy();478      expect(covered, `${event} must be covered by a vector`).toContain(event);479    }480  });481 482  it("emits nothing for the no-op transition, as the vectors require", () => {483    expect(commerceEventTypeForTransition("Ignored")).toBeNull();484    expect(commerceEventTypeForTransition(null)).toBeNull();485  });486});487 488describe("kit can produce everything the store mapping promises", () => {489  const mapping = JSON.parse(490    readFileSync(491      resolveSpec(492        "openiap-commerce-protocol/examples/store-event-mapping.json",493      ),494      "utf8",495    ),496  ) as {497    stores: Record<498      string,499      {500        notificationChannel: string | null;501        mappings: { event: string | null }[];502      }503    >;504  };505 506  it("never claims to consume a channel the store does not publish", () => {507    // notificationChannel is a fact about the store; the capability is a fact508    // about kit. Implementation implies provider, never the reverse.509    for (const [store, entry] of Object.entries(mapping.stores)) {510      const caps =511        PROVIDER_CAPABILITIES[store as keyof typeof PROVIDER_CAPABILITIES];512      if (!caps.supportsServerNotifications) continue;513      expect(514        entry.notificationChannel,515        `${store}: kit consumes notifications the mapping says do not exist`,516      ).not.toBeNull();517    }518  });519 520  it("records an unconsumed channel as a kit gap, not a store limitation", () => {521    // Amazon is the live case: the store publishes a channel, kit integrates522    // no receiver. Collapsing that into "the store has none" is the exact523    // conflation the two-axis capability model exists to prevent.524    expect(mapping.stores.amazon.notificationChannel).not.toBeNull();525    expect(PROVIDER_CAPABILITIES.amazon.supportsServerNotifications).toBe(526      false,527    );528  });529 530  it("produces no lifecycle events for a store the mapping leaves empty", () => {531    for (const [store, entry] of Object.entries(mapping.stores)) {532      if (entry.mappings.length > 0) continue;533      const caps =534        PROVIDER_CAPABILITIES[store as keyof typeof PROVIDER_CAPABILITIES];535      expect(caps.supportsSubscriptions, `${store}`).toBe(false);536      expect(caps.supportsRenewalEvents, `${store}`).toBe(false);537    }538  });539});540 541/**542 * Stands in for a MutationCtx. `destinations` lets a test exercise the543 * fan-out and the per-destination event-type filter, which a context that544 * always answers "no destinations" would hide entirely.545 */546function emitterContext(547  destinations: { _id: string; eventTypes?: string[] }[] = [],548) {549  const inserted: { table: string; doc: Record<string, unknown> }[] = [];550  const byId = new Map<string, Record<string, unknown>>();551  const rowsFor = (table: string) =>552    table === "outboundDestinations" ? destinations : [];553  const queryFor = (table: string) => {554    const q: Record<string, unknown> = {555      withIndex: () => q,556      collect: async () => rowsFor(table),557      unique: async () => rowsFor(table)[0] ?? null,558      first: async () => rowsFor(table)[0] ?? null,559    };560    return q;561  };562  const ctx = {563    db: {564      insert: async (table: string, doc: Record<string, unknown>) => {565        const id = `${table}_${inserted.length + 1}`;566        const row = { ...doc, _id: id, _creationTime: 0 };567        inserted.push({ table, doc: row });568        byId.set(id, row);569        return id;570      },571      patch: async (id: string, patchDoc: Record<string, unknown>) => {572        Object.assign(byId.get(id) ?? {}, patchDoc);573      },574      get: async (id: string) => byId.get(id) ?? null,575      query: (table: string) => queryFor(table),576    },577  };578  return { ctx, inserted };579}580 581/** A source event complete enough that the emitter fills every canonical field. */582const richSource = {583  _id: "webhookEvents_1",584  platform: "IOS",585  environment: "Production",586  occurredAt: 1_756_300_800_000,587  sourceNotificationId: "8f3b1c2d-4e5a-6b7c-8d9e-0f1a2b3c4d5e",588  productId: "premium.monthly",589  purchaseToken: "2000000811111111",590  currency: "USD",591  priceAmountMicros: 9_990_000,592  amountProvenance: "store",593} as never;594 595describe("kit's cancellation vocabulary is one the specification names", () => {596  // The tokens live in a schema description on one side and a TypeScript union597  // on the other, with nothing between them. A store this backend never sees598  // may add more, so the check is containment, not equality.599  const described = JSON.parse(600    readFileSync(601      resolveSpec(602        "openiap-commerce-protocol/generated/schemas/commerce-event.schema.json",603      ),604      "utf8",605    ),606  ).properties.subscription.properties.cancellationReason.description as string;607 608  const KIT_REASONS = [609    "UserCanceled",610    "BillingError",611    "PriceIncreaseDeclined",612    "ProductUnavailable",613    "Refunded",614    "Other",615  ];616 617  it("matches the union the receiver declares", () => {618    const source = readFileSync(619      fileURLToPath(new URL("../webhooks/shared.ts", import.meta.url)),620      "utf8",621    );622    const start = source.indexOf("export type WebhookCancellationReason");623    const block = source.slice(start, source.indexOf(";", start));624    const declared = [...block.matchAll(/"([A-Za-z]+)"/g)].map((m) => m[1]);625    expect(declared.sort()).toEqual([...KIT_REASONS].sort());626  });627 628  it("is named in full by the specification", () => {629    for (const reason of KIT_REASONS) {630      expect(described, `${reason} is unnamed by the spec`).toContain(reason);631    }632  });633});634 635describe("what the emitter writes is a valid specification event", () => {636  // The two halves of this file never met: one validated a hand-written row,637  // the other checked event-type strings. Neither took what emitCommerceEvent638  // actually inserted and ran it through the wire builder and the published639  // schema — which is the only assertion that makes this a conformance test.640  const validate = validateEvent();641 642  it("a full lifecycle emission survives buildEventPayload and the schema", async () => {643    const { ctx, inserted } = emitterContext();644    await emitCommerceEvent(ctx as never, {645      projectId: "projects_1" as never,646      transition: "Renewed",647      active: true,648      previouslyActive: false,649      sourceEvent: richSource,650      subscriptionId: "subscriptions_1" as never,651      subscription: {652        state: "Active",653        productId: "premium.monthly",654        expiresAt: 1_758_979_200_000,655        renewsAt: 1_758_979_200_000,656        willRenew: true,657        userId: "user_5e91a7",658      },659    });660 661    const events = inserted.filter((row) => row.table === "commerceEvents");662    expect(events).toHaveLength(2);663    for (const row of events) {664      const payload = buildEventPayload(row.doc as never);665      const ok = validate(payload);666      expect(validate.errors ?? [], JSON.stringify(validate.errors)).toEqual(667        [],668      );669      expect(ok).toBe(true);670      // The internal identifiers the emitter stores must not reach the wire.671      const wire = payload as unknown as Record<string, unknown>;672      expect(wire.subscriptionId).toBeUndefined();673      expect(wire.sourceEventId).toBeUndefined();674      expect(wire._id).toBeUndefined();675    }676  });677 678  it("prices the lifecycle event only, never both events of one transition", async () => {679    const { ctx, inserted } = emitterContext();680    await emitCommerceEvent(ctx as never, {681      projectId: "projects_1" as never,682      transition: "Started",683      active: true,684      previouslyActive: false,685      sourceEvent: richSource,686      subscription: {687        state: "Active",688        productId: "premium.monthly",689        userId: "user_5e91a7",690      },691    });692    const events = inserted.filter((row) => row.table === "commerceEvents");693    expect(events.map((row) => row.doc.eventType)).toEqual([694      "subscription.started",695      "entitlement.granted",696    ]);697    expect(events[0].doc.amountMicros).toBe(9_990_000);698    expect(events[1].doc.amountMicros).toBeUndefined();699    expect(events[1].doc.currency).toBeUndefined();700    expect(events[1].doc.amountProvenance).toBeUndefined();701  });702 703  it("omits the amount when the source recorded no provenance", async () => {704    // "store" is the only provenance the contract calls authoritative, so705    // defaulting to it would present an unknown as a store assertion.706    const { ctx, inserted } = emitterContext();707    await emitCommerceEvent(ctx as never, {708      projectId: "projects_1" as never,709      transition: "Renewed",710      active: true,711      previouslyActive: true,712      sourceEvent: {713        ...(richSource as object),714        amountProvenance: undefined,715      } as never,716    });717    expect(inserted[0].doc.amountProvenance).toBeUndefined();718    expect(buildEventPayload(inserted[0].doc as never).price).toBeUndefined();719  });720 721  it("puts the amount on the entitlement event when there is no lifecycle event", async () => {722    // A receipt-bootstrapped first purchase flips the gate with no lifecycle723    // change. Dropping the amount there would lose it entirely.724    const { ctx, inserted } = emitterContext();725    await emitCommerceEvent(ctx as never, {726      projectId: "projects_1" as never,727      transition: null,728      active: true,729      previouslyActive: false,730      sourceEvent: richSource,731      subscription: {732        state: "Active",733        productId: "premium.monthly",734        userId: "user_5e91a7",735      },736    });737    const events = inserted.filter((row) => row.table === "commerceEvents");738    expect(events.map((row) => row.doc.eventType)).toEqual([739      "entitlement.granted",740    ]);741    expect(events[0].doc.amountMicros).toBe(9_990_000);742  });743 744  it("carries the store's own notification id, not the emitter's row id", async () => {745    const { ctx, inserted } = emitterContext();746    await emitCommerceEvent(ctx as never, {747      projectId: "projects_1" as never,748      transition: "Renewed",749      active: true,750      previouslyActive: true,751      sourceEvent: richSource,752    });753    const payload = buildEventPayload(inserted[0].doc as never);754    expect(payload.sourceStoreEventId).toBe(755      "8f3b1c2d-4e5a-6b7c-8d9e-0f1a2b3c4d5e",756    );757    expect(payload.price).toEqual({758      currency: "USD",759      amountMicros: 9_990_000,760      provenance: "store",761    });762  });763 764  it("fans out to a subscribed destination and skips an unsubscribed one", async () => {765    const { ctx, inserted } = emitterContext([766      { _id: "outboundDestinations_1" },767      { _id: "outboundDestinations_2", eventTypes: ["subscription.expired"] },768    ]);769    await emitCommerceEvent(ctx as never, {770      projectId: "projects_1" as never,771      transition: "Renewed",772      active: true,773      previouslyActive: true,774      sourceEvent: richSource,775    });776    const deliveries = inserted.filter(777      (row) => row.table === "outboundDeliveries",778    );779    // The filtering destination asked for a different event type.780    expect(deliveries).toHaveLength(1);781    expect(deliveries[0].doc.destinationId).toBe("outboundDestinations_1");782  });783});784 785describe("every mapping row produces the event it promises", () => {786  // The mapping table is prose until something runs it. Without this, a row can787  // claim any event that merely exists in the vocabulary and stay green — which788  // is exactly how several rows drifted from the pipeline.789  type Row = {790    storeNotification: string;791    storeNotificationCode?: string;792    storeSubtype?: string | null;793    whenNoPriorStoreEvent?: boolean;794    whenPreviousState?: string[];795    event: string | null;796  };797  const mapping = JSON.parse(798    readFileSync(799      resolveSpec(800        "openiap-commerce-protocol/examples/store-event-mapping.json",801      ),802      "utf8",803    ),804  ) as { stores: Record<string, { mappings: Row[] }> };805 806  /** Notifications carried on their own message field, not a type enum. */807  const SPECIAL: Record<string, string | null> = {808    voidedPurchaseNotification: "PurchaseRefunded",809    testNotification: "TestNotification",810  };811 812  function internalTypeFor(store: string, row: Row): string | null {813    if (row.storeNotification in SPECIAL) return SPECIAL[row.storeNotification];814    if (store === "apple") {815      return mapAppleNotificationType(816        row.storeNotification,817        row.storeSubtype ?? null,818      );819    }820    return mapGoogleSubscriptionNotificationType(821      Number(row.storeNotificationCode),822    );823  }824 825  function emittedFor(store: string, row: Row): string | null {826    const internalType = internalTypeFor(store, row);827    if (!internalType) return null;828    // This drives the state machine directly, so it models "no prior store829    // event" as "no record" — one of the two cases the qualifier covers. The830    // other, a record with no store history, is reached only through the full831    // handler and is exercised in subscriptions/internal.test.ts ("starts832    // rather than recovers when a record exists with no store history").833    const current = row.whenNoPriorStoreEvent834      ? null835      : {836          state: (row.whenPreviousState?.[0] ?? "Active") as never,837          productId: "premium.monthly",838          expiresAt: 9_999_999_999_999,839        };840    const result = applySubscriptionTransition(current, {841      type: internalType,842      productId: "premium.monthly",843      platform: store === "apple" ? "IOS" : "Android",844      purchaseToken: "token",845      expiresAt: 9_999_999_999_999,846    } as never);847    return commerceEventTypeForTransition(result.transition);848  }849 850  const cases = Object.entries(mapping.stores).flatMap(([store, entry]) =>851    entry.mappings.map(852      (row) =>853        [854          `${store} ${row.storeNotification}${row.storeSubtype ? `/${row.storeSubtype}` : ""}${row.whenNoPriorStoreEvent ? " (no store history)" : row.whenPreviousState ? ` (was ${row.whenPreviousState[0]})` : ""}`,855          store,856          row,857        ] as const,858    ),859  );860 861  // The implementation's own code table, read from its source. Google sends a862  // number; the readable name lives only in a trailing comment, so without this863  // the table's names are decoration the test never executes — swap two and it864  // stays green while an implementer maps the wrong notification.865  const googleCodeNames = (() => {866    const source = readFileSync(867      fileURLToPath(new URL("../webhooks/shared.ts", import.meta.url)),868      "utf8",869    );870    const start = source.indexOf("const GOOGLE_SUB_TYPE_MAP");871    expect(start, "GOOGLE_SUB_TYPE_MAP not found").toBeGreaterThan(-1);872    // End at the object's own closing brace rather than at whatever declaration873    // happens to follow it: a negative indexOf would silently swallow the rest874    // of the file and inflate the table.875    const end = source.indexOf("\n};", start);876    expect(end, "GOOGLE_SUB_TYPE_MAP is unterminated").toBeGreaterThan(start);877    const block = source.slice(start, end);878    const names = new Map<string, string>();879    const codes = new Set<string>();880    for (const line of block.split("\n")) {881      const entry = line.match(/^\s*(\d+):\s*"[^"]*",/);882      if (!entry) continue;883      codes.add(entry[1]);884      const named = line.match(/\/\/\s*([A-Z][A-Z_]+)/);885      // Every entry must name itself, or the table's names go unchecked.886      expect(named, `code ${entry[1]} has no name comment`).not.toBeNull();887      if (named) names.set(entry[1], named[1]);888    }889    expect(names.size).toBe(codes.size);890    return names;891  })();892 893  it("names every Google notification the way the store numbers it", () => {894    for (const row of mapping.stores.google.mappings) {895      if (!row.storeNotificationCode) continue;896      const expected = googleCodeNames.get(row.storeNotificationCode);897      expect(898        expected,899        `code ${row.storeNotificationCode} is not in the map`,900      ).toBeDefined();901      expect(row.storeNotification, `code ${row.storeNotificationCode}`).toBe(902        expected,903      );904    }905  });906 907  it("gives every Google notification code a row", () => {908    const covered = new Set(909      mapping.stores.google.mappings.map((row) => row.storeNotificationCode),910    );911    for (const code of googleCodeNames.keys()) {912      expect(covered, `code ${code} has no row`).toContain(code);913    }914  });915 916  it("names only Apple notifications the receiver recognises", () => {917    // A row for a type the receiver rejects would document a mapping that never918    // happens — and with `event: null` it would look like a deliberate no-op.919    for (const row of mapping.stores.apple.mappings) {920      expect(921        mapAppleNotificationType(922          row.storeNotification as never,923          (row.storeSubtype ?? null) as never,924        ),925        `${row.storeNotification} is not handled by the receiver`,926      ).not.toBeNull();927    }928  });929 930  // Both sides of the previous check came from the same object, so it could931  // never fail. Coverage has to be measured against the implementation's own932  // inventory, which is what the Google code check already does.933  const appleHandledTypes = (() => {934    const source = readFileSync(935      fileURLToPath(new URL("../webhooks/shared.ts", import.meta.url)),936      "utf8",937    );938    const start = source.indexOf("function mapAppleNotificationType");939    const end = source.indexOf("\n}", start);940    const body = source.slice(start, end);941    return new Set(942      [...body.matchAll(/case "([A-Z_]+)":/g)].map((match) => match[1]),943    );944  })();945 946  it("gives every Apple notification the receiver handles a row", () => {947    expect(appleHandledTypes.size).toBeGreaterThan(10);948    const covered = new Set(949      mapping.stores.apple.mappings.map((row) => row.storeNotification),950    );951    for (const type of appleHandledTypes) {952      expect(covered, `${type} has no row`).toContain(type);953    }954  });955 956  it.each(cases)("%s", (_label, store, row) => {957    expect(emittedFor(store, row)).toBe(row.event);958  });959});960 
    \ No newline at end of file diff --git a/packages/docs/public/commerce-source/kit/convex/purchases/action.ts.html b/packages/docs/public/commerce-source/kit/convex/purchases/action.ts.html new file mode 100644 index 000000000..4f438b667 --- /dev/null +++ b/packages/docs/public/commerce-source/kit/convex/purchases/action.ts.html @@ -0,0 +1 @@ +IAPKit · convex/purchases/action.ts
    ← Provider replacement walkthrough

    IAPKit · convex/purchases/action.ts

    Source snapshot · 2026-09-08

    SHA-256 55b35837dcfc50a1ab5699376e00d8c5397b737ac256fc0e99fd6bcd11b0ef72
    1"use node";2 3import { verifyGooglePlayReceiptInternalV1 } from "./android";4import {5  verifyAmazonReceiptInternalV1,6  verifyAmazonReceipt as verifyAmazon,7} from "./amazon";8import { verifyAppStoreReceiptInternalV1 } from "./ios";9import { verifyHorizonReceipt } from "./horizon";10import { action } from "../_generated/server";11import { internal } from "../_generated/api";12import { ConvexError, v } from "convex/values";13import { getProjectByApiKey } from "./shared";14 15export const readBoundPurchaseEntitlements = action({16  args: { apiKey: v.string(), userId: v.string() },17  returns: v.object({ productIds: v.array(v.string()) }),18  handler: async (ctx, args): Promise<{ productIds: string[] }> => {19    const project = await getProjectByApiKey(ctx, args.apiKey, "admin");20    const queryArgs = { projectId: project._id, userId: args.userId };21    const purchases = await ctx.runQuery(22      internal.purchases.internal.boundPurchasesForUser,23      queryArgs,24    );25    for (const purchase of purchases) {26      const evidence = purchase.requestData;27      if (evidence.store === "amazon") {28        await verifyAmazon(ctx, {29          apiKey: args.apiKey,30          userId: evidence.userId,31          receiptId: evidence.receiptId,32          sandbox: evidence.sandbox,33        });34      } else if (evidence.store === "horizon") {35        await verifyHorizonReceipt(ctx, {36          apiKey: args.apiKey,37          userId: evidence.userId,38          sku: evidence.sku,39        });40      } else {41        throw new ConvexError({42          code: "INVALID_INPUT",43          message: "Unsupported bound purchase",44        });45      }46    }47    // Re-read ownership after network calls so erasure cannot return stale access.48    const current = await ctx.runQuery(49      internal.purchases.internal.boundPurchasesForUser,50      queryArgs,51    );52    const refreshed = new Set(purchases.map((purchase) => purchase._id));53    if (current.some((purchase) => !refreshed.has(purchase._id)))54      throw new ConvexError({55        code: "INVALID_INPUT",56        message: "Ownership changed; retry the read",57      });58    return {59      productIds: [60        ...new Set(61          current.flatMap((purchase) =>62            purchase.isValid && purchase.productId ? [purchase.productId] : [],63          ),64        ),65      ],66    };67  },68});69 70export const verifyGooglePlayReceipt = verifyGooglePlayReceiptInternalV1;71export const verifyAppStoreReceipt = verifyAppStoreReceiptInternalV1;72export const verifyAmazonReceipt = verifyAmazonReceiptInternalV1;73 
    \ No newline at end of file diff --git a/packages/docs/public/commerce-source/kit/convex/purchases/mutation.ts.html b/packages/docs/public/commerce-source/kit/convex/purchases/mutation.ts.html new file mode 100644 index 000000000..18937dd9e --- /dev/null +++ b/packages/docs/public/commerce-source/kit/convex/purchases/mutation.ts.html @@ -0,0 +1 @@ +IAPKit · convex/purchases/mutation.ts
    ← Provider replacement walkthrough

    IAPKit · convex/purchases/mutation.ts

    Source snapshot · 2026-09-08

    SHA-256 163fa4486aec7ef4eea3d3fdcb5d53f77d02e5155482e2556cb510c7b21bbb49
    1import { internalMutation, mutation } from "../_generated/server";2import { ConvexError, v } from "convex/values";3import { resolveProjectByApiKeyFromDb } from "../projects/helpers";4import { isValidSubscriptionUserId } from "../subscriptions/limits";5import { isUserErasureRequested } from "../subscriptions/erasure";6 7import { createError, ErrorCode } from "../utils/errors";8import { HarmonizedPurchaseState } from "./purchaseState";9import {10  applyPurchaseStatsDelta,11  deltaForMissingPurchaseStats,12  deltaForUpdate,13  mergePurchaseStatsDeltas,14} from "./stats";15import { getProjectById } from "../projects/helpers";16 17export const bindVerifiedPurchaseAsServer = mutation({18  args: {19    apiKey: v.string(),20    userId: v.string(),21    store: v.union(v.literal("amazon"), v.literal("horizon")),22    remoteId: v.string(),23  },24  returns: v.object({ bound: v.boolean() }),25  handler: async (ctx, args) => {26    const resolved = await resolveProjectByApiKeyFromDb(27      ctx,28      args.apiKey,29      "admin",30    );31    if (!resolved)32      throw new ConvexError({33        code: "INVALID_API_KEY",34        message: "Invalid credential",35      });36    if (37      !isValidSubscriptionUserId(args.userId) ||38      !args.remoteId ||39      args.remoteId.length > 6553640    )41      throw new ConvexError({42        code: "INVALID_INPUT",43        message: "Invalid purchase identity",44      });45    if (await isUserErasureRequested(ctx, resolved.project, args.userId))46      return { bound: false };47    const purchase = await ctx.db48      .query("purchases")49      .withIndex("by_project_and_remote", (q) =>50        q.eq("projectId", resolved.project._id).eq("remoteId", args.remoteId),51      )52      .filter((q) => q.eq(q.field("store"), args.store))53      .unique();54    if (!purchase || purchase.accountErased) return { bound: false };55    if (purchase.appUserId)56      return { bound: purchase.appUserId === args.userId };57    if (!purchase.isValid || !purchase.productId) return { bound: false };58    await ctx.db.patch(purchase._id, { appUserId: args.userId });59    return { bound: true };60  },61});62// Mark purchase as inauthentic.63//64// Internal-only on purpose: nothing in the dashboard or server calls this —65// it is an operator/maintenance function (run it from the Convex dashboard).66// As a public mutation it took only a `purchaseId` and performed no67// identity/membership check, so anyone reaching the deployment could flip68// another tenant's receipt to INAUTHENTIC and skew its purchase stats.69// It stays in this file (rather than internal.ts) to keep the generated70// module graph unchanged; see packages/kit/CONVENTION.md for the CQRS split.71export const markReceiptInvalid = internalMutation({72  args: {73    purchaseId: v.id("purchases"),74    reason: v.optional(v.string()),75  },76  handler: async (ctx, args) => {77    const purchase = await ctx.db.get(args.purchaseId);78 79    if (!purchase) {80      throw createError(ErrorCode.RECEIPT_NOT_FOUND);81    }82    const project = await getProjectById(ctx, purchase.projectId);83    if (!project) {84      throw createError(ErrorCode.RECEIPT_NOT_FOUND);85    }86 87    const prevIsValid = purchase.isValid ?? false;88    // Treat empty strings as absent so we stay aligned with the89    // extractor and backfill contract — an empty `orderId` never90    // represents a real Google order, and feeding it to91    // `deltaForUpdate` as "present" would mis-decrement92    // `googleOrders` if any malformed rows ever reached this path.93    const hasOrderId =94      typeof purchase.orderId === "string" && purchase.orderId.length > 0;95 96    await ctx.db.patch(args.purchaseId, {97      state: HarmonizedPurchaseState.INAUTHENTIC,98      isValid: false,99      statsCounted: true,100      storeStatsCounted: true,101      updatedAt: Date.now(),102    });103 104    // `hasOrderId` is unchanged by this patch, but passing it both as105    // the prev and next value keeps `googleOrders` stable when the106    // delta helper is the one source of truth for stats transitions.107    await applyPurchaseStatsDelta(108      ctx,109      purchase.projectId,110      mergePurchaseStatsDeltas(111        deltaForMissingPurchaseStats(112          purchase.store,113          prevIsValid,114          hasOrderId,115          purchase.statsCounted === true,116          purchase.storeStatsCounted === true,117        ),118        deltaForUpdate(119          purchase.store,120          prevIsValid,121          purchase.store,122          false,123          hasOrderId,124          hasOrderId,125        ),126      ),127    );128 129    return args.purchaseId;130  },131});132 
    \ No newline at end of file diff --git a/packages/docs/public/commerce-source/kit/convex/purchases/ownership.test.ts.html b/packages/docs/public/commerce-source/kit/convex/purchases/ownership.test.ts.html new file mode 100644 index 000000000..1d55c5d4f --- /dev/null +++ b/packages/docs/public/commerce-source/kit/convex/purchases/ownership.test.ts.html @@ -0,0 +1 @@ +IAPKit · convex/purchases/ownership.test.ts
    ← Provider replacement walkthrough

    IAPKit · convex/purchases/ownership.test.ts

    Source snapshot · 2026-09-08

    SHA-256 4c0b55f246e4df86af2ebe2f37da0c614f245c105a292f36bb0402332ad2d996
    1import { beforeEach, describe, expect, it, vi } from "vitest";2import { testableFunction } from "../test.setup";3import { hmacSha256Hex } from "../utils/sha256";4 5const stubs = vi.hoisted(() => ({6  resolve: vi.fn(),7  project: vi.fn(),8  amazon: vi.fn(),9  horizon: vi.fn(),10}));11vi.mock("../projects/helpers", () => ({12  resolveProjectByApiKeyFromDb: stubs.resolve,13  getProjectById: vi.fn(),14}));15vi.mock("./shared", async (original) => ({16  ...(await original<typeof import("./shared")>()),17  getProjectByApiKey: stubs.project,18}));19vi.mock("./amazon", () => ({20  verifyAmazonReceipt: stubs.amazon,21  verifyAmazonReceiptInternalV1: {},22}));23vi.mock("./horizon", () => ({ verifyHorizonReceipt: stubs.horizon }));24import { bindVerifiedPurchaseAsServer } from "./mutation";25import { boundPurchasesForUser } from "./internal";26import { readBoundPurchaseEntitlements } from "./action";27 28const project = { _id: "p1", userErasureHashKey: "local-hash-key" };29type Row = Record<string, unknown>;30function database(rows: Record<string, Row[]>) {31  return {32    query(table: string) {33      let current = rows[table] ?? [];34      const query = {35        withIndex(_name: string, build: (q: unknown) => unknown) {36          const index = {37            eq(field: string, value: unknown) {38              current = current.filter((row) => row[field] === value);39              return index;40            },41          };42          build(index);43          return query;44        },45        filter(build: (q: unknown) => unknown) {46          const predicate = build({47            field: (field: string) => field,48            eq: (field: string, value: unknown) => (row: Row) =>49              row[field] === value,50          }) as (row: Row) => boolean;51          current = current.filter(predicate);52          return query;53        },54        async unique() {55          if (current.length > 1) throw Error("Ambiguous rows");56          return current[0] ?? null;57        },58        async take(count: number) {59          return current.slice(0, count);60        },61      };62      return query;63    },64    async get(id: string) {65      return id === project._id ? project : null;66    },67    async patch(id: string, value: Row) {68      const row = Object.values(rows)69        .flat()70        .find((row) => row._id === id);71      if (!row) throw Error("Missing row");72      Object.assign(row, value);73    },74  };75}76const bind = testableFunction(bindVerifiedPurchaseAsServer)._handler;77const read = testableFunction(boundPurchasesForUser)._handler;78const refresh = testableFunction(readBoundPurchaseEntitlements)._handler;79 80beforeEach(() => {81  vi.clearAllMocks();82  stubs.resolve.mockResolvedValue({ project });83  stubs.project.mockResolvedValue(project);84  stubs.amazon.mockResolvedValue({ isValid: true });85  stubs.horizon.mockResolvedValue({ isValid: true });86});87 88describe.each(["amazon", "horizon"] as const)("%s ownership", (store) => {89  const args = {90    apiKey: "server-key",91    userId: "alice",92    store,93    remoteId: "store-proof",94  };95  function setup(overrides: Row = {}) {96    const purchase: Row = {97      _id: "receipt",98      projectId: "p1",99      store,100      remoteId: "store-proof",101      productId: "premium",102      isValid: true,103      ...overrides,104    };105    const rows: Record<string, Row[]> = {106      purchases: [purchase],107      subscriptionUserErasureJobs: [],108    };109    return { rows, purchase, ctx: { db: database(rows) } };110  }111  it("binds once, preserves ownership and refuses another account", async () => {112    const { ctx, purchase } = setup();113    expect(await bind(ctx, args)).toEqual({ bound: true });114    expect(await bind(ctx, args)).toEqual({ bound: true });115    expect(await bind(ctx, { ...args, userId: "bob" })).toEqual({116      bound: false,117    });118    expect(purchase.appUserId).toBe("alice");119    expect(stubs.resolve).toHaveBeenCalledWith(ctx, "server-key", "admin");120  });121  it.each([122    { isValid: false },123    { accountErased: true },124    { projectId: "other" },125    { store: "google" },126  ])("rejects unavailable or cross-scope evidence %j", async (overrides) => {127    const { ctx, purchase } = setup(overrides);128    expect(await bind(ctx, args)).toEqual({ bound: false });129    expect(purchase.appUserId).toBeUndefined();130  });131  it("refuses binding and reads as soon as erasure is requested", async () => {132    const { rows, ctx } = setup({ appUserId: "alice" });133    rows.subscriptionUserErasureJobs.push({134      projectId: "p1",135      userIdHash: await hmacSha256Hex(project.userErasureHashKey, "alice"),136      status: "queued",137    });138    expect(await bind(ctx, args)).toEqual({ bound: false });139    expect(140      await read(ctx, { projectId: "p1" as never, userId: "alice" }),141    ).toEqual([]);142  });143  it("checks credentials before revealing evidence", async () => {144    stubs.resolve.mockResolvedValue(null);145    const { ctx } = setup();146    await expect(bind(ctx, args)).rejects.toThrow();147  });148});149 150it("refuses partial ownership reads above the bounded limit", async () => {151  const ctx = {152    db: database({153      purchases: Array.from({ length: 21 }, (_, i) => ({154        _id: `r${i}`,155        projectId: "p1",156        appUserId: "alice",157      })),158    }),159  };160  await expect(161    read(ctx, { projectId: "p1" as never, userId: "alice" }),162  ).rejects.toThrow("limit");163});164 165it("refreshes both stores and returns only current, still-bound products", async () => {166  const rows = [167    {168      _id: "a",169      isValid: true,170      productId: "amazon-premium",171      requestData: {172        store: "amazon",173        userId: "store-alice",174        receiptId: "receipt",175        sandbox: true,176      },177    },178    {179      _id: "h",180      isValid: true,181      productId: "quest-premium",182      requestData: {183        store: "horizon",184        userId: "meta-alice",185        sku: "quest-premium",186      },187    },188  ];189  const runQuery = vi190    .fn()191    .mockResolvedValueOnce(rows)192    .mockResolvedValueOnce([{ ...rows[1], isValid: false }]);193  expect(194    await refresh({ runQuery }, { apiKey: "server", userId: "alice" }),195  ).toEqual({ productIds: [] });196  expect(stubs.amazon).toHaveBeenCalledWith(expect.anything(), {197    apiKey: "server",198    userId: "store-alice",199    receiptId: "receipt",200    sandbox: true,201  });202  expect(stubs.horizon).toHaveBeenCalledWith(expect.anything(), {203    apiKey: "server",204    userId: "meta-alice",205    sku: "quest-premium",206  });207});208 209it("fails the entire read on upstream failure, preserving the saved verdict", async () => {210  stubs.horizon.mockRejectedValue(new Error("upstream unavailable"));211  const rows = [212    {213      _id: "h",214      isValid: true,215      productId: "premium",216      requestData: { store: "horizon", userId: "meta-alice", sku: "premium" },217    },218  ];219  const runQuery = vi.fn().mockResolvedValue(rows);220  await expect(221    refresh({ runQuery }, { apiKey: "server", userId: "alice" }),222  ).rejects.toThrow("upstream");223  expect(rows[0].isValid).toBe(true);224  expect(runQuery).toHaveBeenCalledTimes(1);225});226 227it("does not return an unrefreshed purchase bound during the read", async () => {228  const runQuery = vi229    .fn()230    .mockResolvedValueOnce([])231    .mockResolvedValueOnce([{ _id: "new" }]);232  await expect(233    refresh({ runQuery }, { apiKey: "server", userId: "alice" }),234  ).rejects.toThrow("Ownership changed");235});236 
    \ No newline at end of file diff --git a/packages/docs/public/commerce-source/kit/convex/subscriptions/internal.test.ts.html b/packages/docs/public/commerce-source/kit/convex/subscriptions/internal.test.ts.html new file mode 100644 index 000000000..2fc157d2c --- /dev/null +++ b/packages/docs/public/commerce-source/kit/convex/subscriptions/internal.test.ts.html @@ -0,0 +1 @@ +IAPKit · convex/subscriptions/internal.test.ts
    ← Provider replacement walkthrough

    IAPKit · convex/subscriptions/internal.test.ts

    Source snapshot · 2026-09-08

    SHA-256 590736992fcd956114a52a8afb7556293ba6b08958202a6f85cc9dd52862d310
    1import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";2 3import { HarmonizedPurchaseState } from "../purchases/purchaseState";4import { hmacSha256Hex } from "../utils/sha256";5import { buildEventPayload } from "../commerce/deliveryState";6import {7  applySubscriptionEventHandler,8  bindSubscriptionToUserHandler,9  rebindSubscriptionToUserHandler,10  drainSubscriptionUserErasurePage,11  buildVerifiedSubscriptionSnapshot,12  getCurrentProductIdByTokenHandler,13  getSourceProductIdByTokenHandler,14  mergeVerifiedSubscriptionSnapshot,15  recordVerifiedSubscriptionHandler,16} from "./internal";17 18type Row = Record<string, unknown> & { _id: string; _creationTime: number };19 20class MemQuery {21  constructor(private rows: Row[]) {}22 23  withIndex(_name: string, cb?: (q: IndexBuilder) => IndexBuilder): MemQuery {24    if (!cb) return this;25    const builder = new IndexBuilder();26    cb(builder);27    return new MemQuery(28      this.rows.filter((row) =>29        builder.predicates.every((predicate) => predicate(row)),30      ),31    );32  }33 34  async unique(): Promise<Row | null> {35    if (this.rows.length > 1) {36      throw new Error("unique() called on a query that returned > 1 row");37    }38    return this.rows[0] ?? null;39  }40 41  async collect(): Promise<Row[]> {42    return [...this.rows];43  }44 45  async take(count: number): Promise<Row[]> {46    return this.rows.slice(0, count);47  }48}49 50class IndexBuilder {51  predicates: Array<(row: Row) => boolean> = [];52 53  eq(field: string, value: unknown): IndexBuilder {54    this.predicates.push((row) => row[field] === value);55    return this;56  }57}58 59class MemDb {60  tables = new Map<string, Map<string, Row>>();61  private counter = 0;62 63  constructor() {64    this.table("organizations").set("organizations_seed_1", {65      _id: "organizations_seed_1",66      _creationTime: Date.now(),67    });68    this.table("projects").set("projects_seed_1", {69      _id: "projects_seed_1",70      _creationTime: Date.now(),71      organizationId: "organizations_seed_1",72    });73  }74 75  private table(name: string): Map<string, Row> {76    let table = this.tables.get(name);77    if (!table) {78      table = new Map();79      this.tables.set(name, table);80    }81    return table;82  }83 84  query(tableName: string): MemQuery {85    return new MemQuery([...this.table(tableName).values()]);86  }87 88  async insert(89    tableName: string,90    doc: Record<string, unknown>,91  ): Promise<string> {92    const id = `${tableName}_${++this.counter}`;93    this.table(tableName).set(id, {94      ...doc,95      _id: id,96      _creationTime: Date.now() + this.counter / 1_000,97    });98    return id;99  }100 101  async get(id: string): Promise<Row | null> {102    for (const table of this.tables.values()) {103      const row = table.get(id);104      if (row) return row;105    }106    return null;107  }108 109  async patch(id: string, patch: Record<string, unknown>): Promise<void> {110    for (const table of this.tables.values()) {111      const row = table.get(id);112      if (row) {113        Object.assign(row, patch);114        return;115      }116    }117    throw new Error(`patch: no doc with id ${id}`);118  }119 120  async delete(id: string): Promise<void> {121    for (const table of this.tables.values()) {122      if (table.delete(id)) return;123    }124  }125 126  rows(tableName: string): Row[] {127    return [...this.table(tableName).values()];128  }129 130  seedProduct(doc: {131    projectId: string;132    platform: "IOS" | "Android";133    productId: string;134    billingPeriod?: string;135  }): void {136    this.table("products").set(`products_${++this.counter}`, {137      _id: `products_${this.counter}`,138      _creationTime: Date.now(),139      ...doc,140    });141  }142}143 144function makeCtx(db: MemDb) {145  return { db } as unknown as Parameters<146    typeof recordVerifiedSubscriptionHandler147  >[0];148}149 150const PROJECT_ID = "projects_seed_1";151const TOKEN = "purchase_token_1";152 153describe("entitlement events across the expiry deadline", () => {154  it.each([false, true])(155    "revokes once when the clock expires before notifications (cancel first: %s)",156    async (cancelFirst) => {157      vi.useFakeTimers();158      try {159        vi.setSystemTime(1_000);160        const db = new MemDb();161        const started = await seedWebhookEvent(db, {162          type: "SubscriptionStarted",163          notificationId: "clock-start",164          occurredAt: 1_000,165        });166        await db.patch(started, { expiresAt: 2_000, renewsAt: 2_000 });167        await applySubscriptionEventHandler(makeCtx(db), {168          projectId: PROJECT_ID as never,169          eventId: started as never,170        });171        await bindSubscriptionToUserHandler(makeCtx(db), {172          projectId: PROJECT_ID as never,173          purchaseToken: TOKEN,174          userId: "clock-user",175        });176        vi.setSystemTime(3_000);177        if (cancelFirst) {178          const canceled = await seedWebhookEvent(db, {179            type: "SubscriptionStarted",180            notificationId: "clock-cancel",181            occurredAt: 2_500,182          });183          await db.patch(canceled, {184            type: "SubscriptionCanceled",185            expiresAt: 2_000,186            renewsAt: undefined,187            willRenew: false,188          });189          await applySubscriptionEventHandler(makeCtx(db), {190            projectId: PROJECT_ID as never,191            eventId: canceled as never,192          });193        }194        const expired = await seedWebhookEvent(db, {195          type: "SubscriptionExpired",196          notificationId: "clock-expire",197          occurredAt: 3_000,198        });199        await db.patch(expired, { expiresAt: 2_000 });200        const args = {201          projectId: PROJECT_ID as never,202          eventId: expired as never,203        };204        await applySubscriptionEventHandler(makeCtx(db), args);205        await applySubscriptionEventHandler(makeCtx(db), args);206        expect(207          db208            .rows("commerceEvents")209            .filter((row) => String(row.eventType).startsWith("entitlement."))210            .map((row) => row.eventType),211        ).toEqual(["entitlement.granted", "entitlement.revoked"]);212      } finally {213        vi.useRealTimers();214      }215    },216  );217});218 219async function seedWebhookEvent(220  db: MemDb,221  args: {222    type:223      | "SubscriptionStarted"224      | "SubscriptionRenewed"225      | "SubscriptionExpired"226      | "SubscriptionProductChanged";227    notificationId: string;228    occurredAt: number;229    platform?: "IOS" | "Android";230    productId?: string;231  },232): Promise<string> {233  const platform = args.platform ?? "Android";234  return await db.insert("webhookEvents", {235    projectId: PROJECT_ID,236    type: args.type,237    source:238      platform === "IOS"239        ? "AppleAppStoreServerNotificationsV2"240        : "GooglePlayRealTimeDeveloperNotifications",241    platform,242    environment: "Sandbox",243    purchaseToken: TOKEN,244    sourceNotificationId: args.notificationId,245    productId: args.productId ?? "premium_monthly",246    subscriptionState:247      args.type === "SubscriptionExpired" ? "Expired" : "Active",248    expiresAt: 1_800_000_000_000,249    renewsAt: 1_800_000_000_000,250    currency: "USD",251    priceAmountMicros: 9_990_000,252    occurredAt: args.occurredAt,253    receivedAt: args.occurredAt,254  });255}256 257describe("subscription erasure across replacement tokens", () => {258  it.each([false, true])(259    "reconciles a granted successor without restoring erased identities (successor erasure requested: %s)",260    async (successorErased) => {261      const db = new MemDb();262      const ctx = makeCtx(db);263      const hashKey = "erasure-test-key";264      await db.patch(PROJECT_ID, { userErasureHashKey: hashKey });265      async function erasureJob(userId: string): Promise<string> {266        return db.insert("subscriptionUserErasureJobs", {267          projectId: PROJECT_ID,268          userId,269          userIdHash: await hmacSha256Hex(hashKey, userId),270          status: "queued",271          subscriptionsErased: 0,272          commerceEventsErased: 0,273        });274      }275      await recordVerifiedSubscriptionHandler(ctx, {276        projectId: PROJECT_ID as never,277        platform: "Android",278        purchaseToken: TOKEN,279        productId: "premium_monthly",280        purchaseState: "ENTITLED",281      });282      await bindSubscriptionToUserHandler(ctx, {283        projectId: PROJECT_ID as never,284        purchaseToken: TOKEN,285        userId: "erased-owner",286      });287      await drainSubscriptionUserErasurePage(288        ctx,289        (await erasureJob("erased-owner")) as never,290      );291      const startedId = await seedWebhookEvent(db, {292        type: "SubscriptionStarted",293        notificationId: "successor-granted",294        occurredAt: 1_000,295      });296      await db.patch(startedId, {297        purchaseToken: "replacement",298        expiresAt: Date.now() + 60_000,299      });300      await applySubscriptionEventHandler(ctx, {301        projectId: PROJECT_ID as never,302        eventId: startedId as never,303      });304      await bindSubscriptionToUserHandler(ctx, {305        projectId: PROJECT_ID as never,306        purchaseToken: "replacement",307        userId: "successor-owner",308      });309      const grant = db310        .rows("commerceEvents")311        .find((event) => event.eventType === "entitlement.granted");312      expect(grant?.userId).toBe("successor-owner");313 314      const successorErasureJob = successorErased315        ? await erasureJob("successor-owner")316        : undefined;317      const destinationId = await db.insert("outboundDestinations", {318        projectId: PROJECT_ID,319        enabled: true,320        eventTypes: ["entitlement.revoked"],321      });322      const linkedId = await seedWebhookEvent(db, {323        type: "SubscriptionProductChanged",324        notificationId: "late-erased-link",325        occurredAt: 2_000,326      });327      await db.patch(linkedId, {328        purchaseToken: "replacement",329        linkedPurchaseToken: TOKEN,330      });331      const args = {332        projectId: PROJECT_ID as never,333        eventId: linkedId as never,334      };335      await applySubscriptionEventHandler(ctx, args);336      await applySubscriptionEventHandler(ctx, args);337 338      expect(db.rows("subscriptions")).toHaveLength(1);339      expect(db.rows("subscriptions")[0]).toMatchObject({340        accountErased: true,341      });342      expect(db.rows("subscriptions")[0].userId).toBeUndefined();343      const revocations = db344        .rows("commerceEvents")345        .filter((event) => event.eventType === "entitlement.revoked");346      if (successorErased) {347        expect(revocations).toEqual([]);348        expect(349          db350            .rows("commerceEvents")351            .some(352              (event) =>353                event.sourceEventId === linkedId && event.userId !== undefined,354            ),355        ).toBe(false);356        await drainSubscriptionUserErasurePage(357          ctx,358          successorErasureJob as never,359        );360        expect(361          db.rows("commerceEvents").some((event) => event.userId !== undefined),362        ).toBe(false);363        expect(db.rows("outboundDeliveries")).toEqual([]);364      } else {365        expect(revocations).toHaveLength(1);366        expect(buildEventPayload(revocations[0] as never)).toMatchObject({367          eventType: "entitlement.revoked",368          userId: "successor-owner",369          productId: "premium_monthly",370          sourceStoreEventId: "late-erased-link",371          subscription: { active: false },372        });373        expect(374          buildEventPayload(revocations[0] as never).price,375        ).toBeUndefined();376        expect(db.rows("outboundDeliveries")).toEqual([377          expect.objectContaining({378            eventId: revocations[0]._id,379            destinationId,380            status: "pending",381          }),382        ]);383      }384      expect(385        JSON.stringify(386          [...db.tables.values()].map((rows) => [...rows.values()]),387        ),388      ).not.toContain("erased-owner");389    },390  );391 392  it.each([393    { erasedToken: TOKEN, successorExists: false, boundToken: undefined },394    { erasedToken: TOKEN, successorExists: true, boundToken: undefined },395    { erasedToken: TOKEN, successorExists: true, boundToken: "replacement" },396    { erasedToken: "replacement", successorExists: true, boundToken: TOKEN },397  ])("preserves erasure and removes linked ownership: %j", async (testCase) => {398    const db = new MemDb();399    const ctx = makeCtx(db);400    for (const purchaseToken of testCase.successorExists401      ? [TOKEN, "replacement"]402      : [TOKEN]) {403      const id = await recordVerifiedSubscriptionHandler(ctx, {404        projectId: PROJECT_ID as never,405        platform: "Android",406        purchaseToken,407        productId: "premium_monthly",408        purchaseState: "ENTITLED",409        subscriptionState: "SUBSCRIPTION_STATE_ACTIVE",410      });411      if (purchaseToken === testCase.erasedToken)412        await db.patch(id!, { accountErased: true });413      if (purchaseToken === testCase.boundToken)414        await bindSubscriptionToUserHandler(ctx, {415          projectId: PROJECT_ID as never,416          purchaseToken,417          userId: "linked-owner",418        });419    }420    const eventId = await seedWebhookEvent(db, {421      type: "SubscriptionStarted",422      notificationId: "erased-replacement",423      occurredAt: Date.now(),424    });425    await db.patch(eventId, {426      purchaseToken: "replacement",427      linkedPurchaseToken: TOKEN,428    });429    await applySubscriptionEventHandler(ctx, {430      projectId: PROJECT_ID as never,431      eventId: eventId as never,432    });433 434    expect(db.rows("subscriptions")).toHaveLength(1);435    expect(db.rows("subscriptions")[0]).toMatchObject({436      purchaseToken: "replacement",437      accountErased: true,438    });439    expect(db.rows("subscriptions")[0].userId).toBeUndefined();440    for (const purchaseToken of [TOKEN, "replacement"]) {441      const args = {442        projectId: PROJECT_ID as never,443        purchaseToken,444        userId: "new-owner",445      };446      expect(await bindSubscriptionToUserHandler(ctx, args)).toBeNull();447      expect(await rebindSubscriptionToUserHandler(ctx, args)).toBeNull();448    }449    expect(450      db.rows("commerceEvents").some((event) => event.userId !== undefined),451    ).toBe(false);452  });453});454 455describe("bindSubscriptionToUser amount handling", () => {456  it("does not repeat an amount the webhook already reported", async () => {457    const db = new MemDb();458    db.seedProduct({459      projectId: PROJECT_ID,460      platform: "Android",461      productId: "premium_monthly",462      billingPeriod: "P1M",463    });464    const eventId = await seedWebhookEvent(db, {465      type: "SubscriptionStarted",466      notificationId: "message-webhook-first",467      occurredAt: 1_000,468    });469    await applySubscriptionEventHandler(makeCtx(db), {470      projectId: PROJECT_ID as never,471      eventId: eventId as never,472    });473    const afterWebhook = db474      .rows("commerceEvents")475      .filter((row) => row.amountMicros !== undefined).length;476 477    await bindSubscriptionToUserHandler(makeCtx(db), {478      projectId: PROJECT_ID as never,479      purchaseToken: TOKEN,480      userId: "user_1",481    });482 483    const priced = db484      .rows("commerceEvents")485      .filter((row) => row.amountMicros !== undefined);486    // The bind grant correlates an existing purchase to a user; it is not a487    // second billing, so the count must not move.488    expect(priced.length).toBe(afterWebhook);489    expect(db.rows("commerceEvents").at(-1)?.eventType).toBe(490      "entitlement.granted",491    );492    expect(db.rows("commerceEvents").at(-1)?.amountMicros).toBeUndefined();493  });494});495 496describe("applySubscriptionEventHandler", () => {497  beforeEach(() => {498    vi.setSystemTime(new Date("2026-01-01T00:00:00.000Z"));499  });500 501  afterEach(() => {502    vi.useRealTimers();503  });504 505  // Commerce Protocol's `whenNoPriorStoreEvent` turns on store history, not on506  // whether a record exists — a purchase learned from a client receipt but507  // never from the store still begins the story. That distinction lives here,508  // in the override, and nowhere in the state machine, so it is tested here.509  it("starts rather than recovers when a record exists with no store history", async () => {510    const db = new MemDb();511    db.seedProduct({512      projectId: PROJECT_ID,513      platform: "Android",514      productId: "premium_monthly",515      billingPeriod: "P1M",516    });517    // A client receipt created this row; no store notification ever touched it,518    // so it carries no lastEventId.519    await db.insert("subscriptions", {520      projectId: PROJECT_ID,521      platform: "Android",522      purchaseToken: TOKEN,523      productId: "premium_monthly",524      state: "Unknown",525      willRenew: true,526      updatedAt: 0,527    });528    const eventId = await seedWebhookEvent(db, {529      type: "SubscriptionStarted",530      notificationId: "message-first-store-event",531      occurredAt: 1_000,532    });533 534    await applySubscriptionEventHandler(makeCtx(db), {535      projectId: PROJECT_ID as never,536      eventId: eventId as never,537    });538    // Assert on what was emitted, not what the handler returned: the override539    // applies to the commerce event, while the return value carries the state540    // machine's own transition.541    expect(db.rows("commerceEvents").map((row) => row.eventType)).toContain(542      "subscription.started",543    );544  });545 546  it.each([["SubscriptionPriceChange"], ["SubscriptionDeferred"]])(547    "emits no commerce event when %s is the first store event for a receipt-bootstrapped row",548    async (storeEventType) => {549      // store-event-mapping.json pins whenNoPriorStoreEvent -> event: null for550      // price changes and deferrals: with no earlier store event there is no551      // baseline the event could describe.552      const db = new MemDb();553      db.seedProduct({554        projectId: PROJECT_ID,555        platform: "Android",556        productId: "premium_monthly",557        billingPeriod: "P1M",558      });559      await db.insert("subscriptions", {560        projectId: PROJECT_ID,561        platform: "Android",562        purchaseToken: TOKEN,563        productId: "premium_monthly",564        state: "Active",565        expiresAt: 9_999_999_999_999,566        willRenew: true,567        updatedAt: 0,568      });569      const eventId = await seedWebhookEvent(db, {570        type: storeEventType as never,571        notificationId: `message-${storeEventType}`,572        occurredAt: 1_000,573      });574 575      await applySubscriptionEventHandler(makeCtx(db), {576        projectId: PROJECT_ID as never,577        eventId: eventId as never,578      });579      expect(db.rows("commerceEvents")).toEqual([]);580    },581  );582 583  // Rows written before `lastEventOccurredAt` existed carry only `lastEventId`,584  // so the timestamp guard cannot judge them. Both of its fallbacks protect a585  // money path: a redelivery re-applies the transition and books it twice.586  it.each([587    ["the same event redelivered", "message-legacy", 500, "Expired"],588    ["an older event arriving late", "message-older", 200, "Expired"],589  ])(590    "drops %s against a legacy row",591    async (_name, notificationId, occurredAt, expected) => {592      const db = new MemDb();593      db.seedProduct({594        projectId: PROJECT_ID,595        platform: "Android",596        productId: "premium_monthly",597        billingPeriod: "P1M",598      });599      const priorId = await seedWebhookEvent(db, {600        type: "SubscriptionExpired",601        notificationId: "message-legacy",602        occurredAt: 500,603      });604      await db.insert("subscriptions", {605        projectId: PROJECT_ID,606        platform: "Android",607        purchaseToken: TOKEN,608        productId: "premium_monthly",609        state: "Expired",610        willRenew: false,611        lastEventId: priorId,612        updatedAt: 0,613      });614      const replayId =615        notificationId === "message-legacy"616          ? priorId617          : await seedWebhookEvent(db, {618              type: "SubscriptionStarted",619              notificationId,620              occurredAt,621            });622 623      await expect(624        applySubscriptionEventHandler(makeCtx(db), {625          projectId: PROJECT_ID as never,626          eventId: replayId as never,627        }),628      ).resolves.toMatchObject({ transition: null });629      expect(db.rows("subscriptions")).toMatchObject([{ state: expected }]);630      expect(db.rows("commerceEvents")).toEqual([]);631    },632  );633 634  it("recovers when the record already has store history", async () => {635    const db = new MemDb();636    db.seedProduct({637      projectId: PROJECT_ID,638      platform: "Android",639      productId: "premium_monthly",640      billingPeriod: "P1M",641    });642    const priorId = await seedWebhookEvent(db, {643      type: "SubscriptionExpired",644      notificationId: "message-prior",645      occurredAt: 500,646    });647    await db.insert("subscriptions", {648      projectId: PROJECT_ID,649      platform: "Android",650      purchaseToken: TOKEN,651      productId: "premium_monthly",652      state: "Expired",653      willRenew: false,654      lastEventId: priorId,655      updatedAt: 0,656    });657    const eventId = await seedWebhookEvent(db, {658      type: "SubscriptionStarted",659      notificationId: "message-after-history",660      occurredAt: 1_000,661    });662 663    await applySubscriptionEventHandler(makeCtx(db), {664      projectId: PROJECT_ID as never,665      eventId: eventId as never,666    });667    expect(db.rows("commerceEvents").map((row) => row.eventType)).toContain(668      "subscription.recovered",669    );670  });671 672  it("applies a recorded-but-unapplied event exactly once on redelivery", async () => {673    const db = new MemDb();674    db.seedProduct({675      projectId: PROJECT_ID,676      platform: "Android",677      productId: "premium_monthly",678      billingPeriod: "P1M",679    });680    const eventId = await seedWebhookEvent(db, {681      type: "SubscriptionStarted",682      notificationId: "message-a",683      occurredAt: 1_000,684    });685    const args = {686      projectId: PROJECT_ID as never,687      eventId: eventId as never,688    };689 690    await expect(691      applySubscriptionEventHandler(makeCtx(db), args),692    ).resolves.toMatchObject({ transition: "Started", active: true });693    const appliedAt = db.rows("webhookEvents")[0]?.appliedAt;694 695    await expect(696      applySubscriptionEventHandler(makeCtx(db), args),697    ).resolves.toMatchObject({ transition: null, active: true });698    expect(db.rows("webhookEvents")[0]?.appliedAt).toBe(appliedAt);699    expect(db.rows("subscriptions")).toMatchObject([700      { state: "Active", lastEventId: eventId },701    ]);702    expect(db.rows("subscriptionStats")).toMatchObject([703      { activeSubs: 1, mrrMicros: 9_990_000 },704    ]);705  });706 707  it("applies distinct same-timestamp events without replaying the old one", async () => {708    const db = new MemDb();709    db.seedProduct({710      projectId: PROJECT_ID,711      platform: "Android",712      productId: "premium_monthly",713      billingPeriod: "P1M",714    });715    const startedId = await seedWebhookEvent(db, {716      type: "SubscriptionStarted",717      notificationId: "message-a",718      occurredAt: 1_000,719    });720    const expiredId = await seedWebhookEvent(db, {721      type: "SubscriptionExpired",722      notificationId: "message-b",723      occurredAt: 1_000,724    });725 726    await applySubscriptionEventHandler(makeCtx(db), {727      projectId: PROJECT_ID as never,728      eventId: startedId as never,729    });730    await applySubscriptionEventHandler(makeCtx(db), {731      projectId: PROJECT_ID as never,732      eventId: expiredId as never,733    });734    await expect(735      applySubscriptionEventHandler(makeCtx(db), {736        projectId: PROJECT_ID as never,737        eventId: startedId as never,738      }),739    ).resolves.toMatchObject({ transition: null, active: false });740 741    expect(db.rows("subscriptions")).toMatchObject([742      { state: "Expired", lastEventId: expiredId },743    ]);744    expect(db.rows("subscriptionStats")).toMatchObject([745      { activeSubs: 0, mrrMicros: 0 },746    ]);747  });748 749  it("uses ingestion order to backfill a same-timestamp legacy event", async () => {750    const db = new MemDb();751    db.seedProduct({752      projectId: PROJECT_ID,753      platform: "Android",754      productId: "premium_monthly",755      billingPeriod: "P1M",756    });757    const startedId = await seedWebhookEvent(db, {758      type: "SubscriptionStarted",759      notificationId: "legacy-a",760      occurredAt: 1_000,761    });762    const expiredId = await seedWebhookEvent(db, {763      type: "SubscriptionExpired",764      notificationId: "legacy-b",765      occurredAt: 1_000,766    });767    await applySubscriptionEventHandler(makeCtx(db), {768      projectId: PROJECT_ID as never,769      eventId: startedId as never,770    });771    await applySubscriptionEventHandler(makeCtx(db), {772      projectId: PROJECT_ID as never,773      eventId: expiredId as never,774    });775    await db.patch(startedId, { appliedAt: undefined });776 777    await expect(778      applySubscriptionEventHandler(makeCtx(db), {779        projectId: PROJECT_ID as never,780        eventId: startedId as never,781      }),782    ).resolves.toMatchObject({ transition: null, active: false });783 784    expect(785      db.rows("webhookEvents").find((row) => row._id === startedId),786    ).toHaveProperty("appliedAt", Date.now());787    expect(db.rows("subscriptions")).toMatchObject([788      { state: "Expired", lastEventId: expiredId },789    ]);790    expect(db.rows("subscriptionStats")).toMatchObject([791      { activeSubs: 0, mrrMicros: 0 },792    ]);793  });794 795  it("keeps durable ordering after the previous webhook row is pruned", async () => {796    const db = new MemDb();797    const startedId = await seedWebhookEvent(db, {798      type: "SubscriptionStarted",799      notificationId: "newer",800      occurredAt: 2_000,801    });802    await applySubscriptionEventHandler(makeCtx(db), {803      projectId: PROJECT_ID as never,804      eventId: startedId as never,805    });806    await db.delete(startedId);807    const staleId = await seedWebhookEvent(db, {808      type: "SubscriptionExpired",809      notificationId: "older",810      occurredAt: 1_000,811    });812 813    await expect(814      applySubscriptionEventHandler(makeCtx(db), {815        projectId: PROJECT_ID as never,816        eventId: staleId as never,817      }),818    ).resolves.toMatchObject({ transition: null, active: true });819    expect(db.rows("subscriptions")).toMatchObject([820      {821        state: "Active",822        lastEventOccurredAt: 2_000,823        lastEventSourceNotificationId: "newer",824      },825    ]);826  });827 828  it("does not grant entitlement for an already-expired start event", async () => {829    const db = new MemDb();830    const eventId = await seedWebhookEvent(db, {831      type: "SubscriptionStarted",832      notificationId: "expired-start",833      occurredAt: 1_000,834    });835    await db.patch(eventId, { expiresAt: Date.now() - 1 });836 837    await expect(838      applySubscriptionEventHandler(makeCtx(db), {839        projectId: PROJECT_ID as never,840        eventId: eventId as never,841      }),842    ).resolves.toMatchObject({ transition: "Started", active: false });843    expect(db.rows("commerceEvents").map((row) => row.eventType)).toEqual([844      "subscription.started",845    ]);846  });847 848  it("records one-time events without creating subscription commerce", async () => {849    const db = new MemDb();850    const eventId = await seedWebhookEvent(db, {851      type: "SubscriptionStarted",852      notificationId: "one-time",853      occurredAt: 1_000,854    });855    await db.patch(eventId, { productKind: "one_time" });856 857    await expect(858      applySubscriptionEventHandler(makeCtx(db), {859        projectId: PROJECT_ID as never,860        eventId: eventId as never,861      }),862    ).resolves.toEqual({ transition: null, active: false });863    expect(db.rows("subscriptions")).toHaveLength(0);864    expect(db.rows("commerceEvents")).toHaveLength(0);865  });866 867  it("keeps an Apple renewal preference separate from the active product", async () => {868    const db = new MemDb();869    db.seedProduct({870      projectId: PROJECT_ID,871      platform: "IOS",872      productId: "premium_monthly",873      billingPeriod: "P1M",874    });875    const startedId = await seedWebhookEvent(db, {876      type: "SubscriptionStarted",877      notificationId: "apple-started",878      occurredAt: 1_000,879      platform: "IOS",880    });881    await applySubscriptionEventHandler(makeCtx(db), {882      projectId: PROJECT_ID as never,883      eventId: startedId as never,884    });885    const changedId = await seedWebhookEvent(db, {886      type: "SubscriptionProductChanged",887      notificationId: "apple-next-product",888      occurredAt: 2_000,889      platform: "IOS",890      productId: "premium_yearly",891    });892    await db.patch(changedId, { priceAmountMicros: 99_990_000 });893 894    await expect(895      applySubscriptionEventHandler(makeCtx(db), {896        projectId: PROJECT_ID as never,897        eventId: changedId as never,898      }),899    ).resolves.toMatchObject({ transition: "ProductChanged", active: true });900    expect(db.rows("subscriptions")).toMatchObject([901      {902        productId: "premium_monthly",903        platform: "IOS",904        priceAmountMicros: 9_990_000,905      },906    ]);907    expect(db.rows("commerceEvents").at(-1)).toMatchObject({908      eventType: "subscription.product_changed",909      productId: "premium_yearly",910      amountMicros: 99_990_000,911      subscription: { productId: "premium_monthly" },912    });913    await db.delete(changedId);914 915    await bindSubscriptionToUserHandler(makeCtx(db), {916      projectId: PROJECT_ID as never,917      purchaseToken: TOKEN,918      userId: "user-1",919    });920    expect(db.rows("commerceEvents").at(-1)).toMatchObject({921      eventType: "entitlement.granted",922      productId: "premium_monthly",923      userId: "user-1",924    });925    expect(db.rows("commerceEvents").at(-1)?.amountMicros).toBeUndefined();926 927    const renewedId = await seedWebhookEvent(db, {928      type: "SubscriptionRenewed",929      notificationId: "apple-renewed-on-new-product",930      occurredAt: 3_000,931      platform: "IOS",932      productId: "premium_yearly",933    });934    await applySubscriptionEventHandler(makeCtx(db), {935      projectId: PROJECT_ID as never,936      eventId: renewedId as never,937    });938    expect(db.rows("commerceEvents").at(-1)).toMatchObject({939      eventType: "subscription.renewed",940      productId: "premium_yearly",941      previousProductId: "premium_monthly",942      userId: "user-1",943    });944  });945 946  it("applies an Apple upgrade product immediately", async () => {947    const db = new MemDb();948    const startedId = await seedWebhookEvent(db, {949      type: "SubscriptionStarted",950      notificationId: "apple-started",951      occurredAt: 1_000,952      platform: "IOS",953    });954    await applySubscriptionEventHandler(makeCtx(db), {955      projectId: PROJECT_ID as never,956      eventId: startedId as never,957    });958    const changedId = await seedWebhookEvent(db, {959      type: "SubscriptionProductChanged",960      notificationId: "apple-upgrade",961      occurredAt: 2_000,962      platform: "IOS",963      productId: "premium_yearly",964    });965    await db.patch(changedId, { effectiveImmediately: true });966 967    await applySubscriptionEventHandler(makeCtx(db), {968      projectId: PROJECT_ID as never,969      eventId: changedId as never,970    });971 972    expect(db.rows("subscriptions")[0]).toMatchObject({973      productId: "premium_yearly",974      lastEventId: changedId,975    });976  });977 978  it("includes the previous product for an applied Google item change", async () => {979    const db = new MemDb();980    const startedId = await seedWebhookEvent(db, {981      type: "SubscriptionStarted",982      notificationId: "google-started",983      occurredAt: 1_000,984    });985    await applySubscriptionEventHandler(makeCtx(db), {986      projectId: PROJECT_ID as never,987      eventId: startedId as never,988    });989    const changedId = await seedWebhookEvent(db, {990      type: "SubscriptionProductChanged",991      notificationId: "google-item-change",992      occurredAt: 2_000,993      productId: "premium_yearly",994    });995    await applySubscriptionEventHandler(makeCtx(db), {996      projectId: PROJECT_ID as never,997      eventId: changedId as never,998    });999 1000    expect(db.rows("commerceEvents").at(-1)).toMatchObject({1001      eventType: "subscription.product_changed",1002      previousProductId: "premium_monthly",1003      productId: "premium_yearly",1004      subscription: { productId: "premium_yearly" },1005    });1006  });1007 1008  it("does not guess a product for a multi-item Google change", async () => {1009    const db = new MemDb();1010    const startedId = await seedWebhookEvent(db, {1011      type: "SubscriptionStarted",1012      notificationId: "google-bundle-started",1013      occurredAt: 1_000,1014    });1015    await applySubscriptionEventHandler(makeCtx(db), {1016      projectId: PROJECT_ID as never,1017      eventId: startedId as never,1018    });1019    const changedId = await db.insert("webhookEvents", {1020      projectId: PROJECT_ID,1021      type: "SubscriptionProductChanged",1022      source: "GooglePlayRealTimeDeveloperNotifications",1023      platform: "Android",1024      environment: "Production",1025      purchaseToken: TOKEN,1026      productKind: "subscription",1027      sourceNotificationId: "google-bundle-change",1028      occurredAt: 2_000,1029      receivedAt: 2_000,1030    });1031 1032    await expect(1033      applySubscriptionEventHandler(makeCtx(db), {1034        projectId: PROJECT_ID as never,1035        eventId: changedId as never,1036      }),1037    ).resolves.toMatchObject({ transition: null, active: true });1038    expect(db.rows("subscriptions")[0]).toMatchObject({1039      productId: "premium_monthly",1040      lastEventId: changedId,1041      lastEventOccurredAt: 2_000,1042    });1043    expect(db.rows("commerceEvents")).toHaveLength(1);1044 1045    const delayedId = await seedWebhookEvent(db, {1046      type: "SubscriptionExpired",1047      notificationId: "google-delayed-expiry",1048      occurredAt: 1_500,1049    });1050    await expect(1051      applySubscriptionEventHandler(makeCtx(db), {1052        projectId: PROJECT_ID as never,1053        eventId: delayedId as never,1054      }),1055    ).resolves.toMatchObject({ transition: null, active: true });1056    expect(db.rows("subscriptions")[0]).toMatchObject({1057      state: "Active",1058      lastEventId: changedId,1059    });1060  });1061 1062  it("moves a Google replacement flow onto the linked token row", async () => {1063    const db = new MemDb();1064    const startedId = await seedWebhookEvent(db, {1065      type: "SubscriptionStarted",1066      notificationId: "google-old-token",1067      occurredAt: 1_000,1068    });1069    await applySubscriptionEventHandler(makeCtx(db), {1070      projectId: PROJECT_ID as never,1071      eventId: startedId as never,1072    });1073    const changedId = await db.insert("webhookEvents", {1074      projectId: PROJECT_ID,1075      type: "SubscriptionProductChanged",1076      source: "GooglePlayRealTimeDeveloperNotifications",1077      platform: "Android",1078      environment: "Production",1079      purchaseToken: "purchase_token_2",1080      linkedPurchaseToken: TOKEN,1081      productKind: "subscription",1082      productId: "premium_yearly",1083      subscriptionState: "Active",1084      sourceNotificationId: "google-new-token",1085      occurredAt: 2_000,1086      receivedAt: 2_000,1087    });1088    await applySubscriptionEventHandler(makeCtx(db), {1089      projectId: PROJECT_ID as never,1090      eventId: changedId as never,1091    });1092 1093    expect(db.rows("subscriptions")).toHaveLength(1);1094    expect(db.rows("subscriptions")[0]).toMatchObject({1095      purchaseToken: "purchase_token_2",1096      productId: "premium_yearly",1097    });1098    expect(db.rows("commerceEvents").at(-1)).toMatchObject({1099      eventType: "subscription.product_changed",1100      previousProductId: "premium_monthly",1101      productId: "premium_yearly",1102    });1103  });1104 1105  it("classifies a linked Google purchase with a new product as a change", async () => {1106    const db = new MemDb();1107    const startedId = await seedWebhookEvent(db, {1108      type: "SubscriptionStarted",1109      notificationId: "google-linked-start-old",1110      occurredAt: 1_000,1111    });1112    await applySubscriptionEventHandler(makeCtx(db), {1113      projectId: PROJECT_ID as never,1114      eventId: startedId as never,1115    });1116    const replacementId = await db.insert("webhookEvents", {1117      projectId: PROJECT_ID,1118      type: "SubscriptionStarted",1119      source: "GooglePlayRealTimeDeveloperNotifications",1120      platform: "Android",1121      environment: "Production",1122      purchaseToken: "purchase_token_2",1123      linkedPurchaseToken: TOKEN,1124      productKind: "subscription",1125      productId: "premium_yearly",1126      subscriptionState: "Active",1127      sourceNotificationId: "google-linked-start-new",1128      occurredAt: 2_000,1129      receivedAt: 2_000,1130    });1131 1132    await expect(1133      applySubscriptionEventHandler(makeCtx(db), {1134        projectId: PROJECT_ID as never,1135        eventId: replacementId as never,1136      }),1137    ).resolves.toMatchObject({ transition: "ProductChanged", active: true });1138 1139    expect(1140      db1141        .rows("commerceEvents")1142        .filter((event) => event.sourceEventId === replacementId),1143    ).toEqual([1144      expect.objectContaining({1145        eventType: "subscription.product_changed",1146        previousProductId: "premium_monthly",1147        productId: "premium_yearly",1148      }),1149    ]);1150  });1151 1152  it("defers a same-product token handoff until the replacement renews", async () => {1153    const db = new MemDb();1154    const startedId = await seedWebhookEvent(db, {1155      type: "SubscriptionStarted",1156      notificationId: "google-deferred-start-old",1157      occurredAt: 1_000,1158    });1159    await applySubscriptionEventHandler(makeCtx(db), {1160      projectId: PROJECT_ID as never,1161      eventId: startedId as never,1162    });1163    const handoffId = await db.insert("webhookEvents", {1164      projectId: PROJECT_ID,1165      type: "SubscriptionStarted",1166      source: "GooglePlayRealTimeDeveloperNotifications",1167      platform: "Android",1168      environment: "Production",1169      purchaseToken: "purchase_token_2",1170      linkedPurchaseToken: TOKEN,1171      productKind: "subscription",1172      productId: "premium_monthly",1173      subscriptionState: "Active",1174      sourceNotificationId: "google-deferred-token-handoff",1175      occurredAt: 2_000,1176      receivedAt: 2_000,1177    });1178    await expect(1179      applySubscriptionEventHandler(makeCtx(db), {1180        projectId: PROJECT_ID as never,1181        eventId: handoffId as never,1182      }),1183    ).resolves.toMatchObject({ transition: null, active: true });1184    expect(1185      db1186        .rows("commerceEvents")1187        .filter((event) => event.sourceEventId === handoffId),1188    ).toEqual([]);1189 1190    const predecessorExpiryId = await db.insert("webhookEvents", {1191      projectId: PROJECT_ID,1192      type: "SubscriptionExpired",1193      source: "GooglePlayRealTimeDeveloperNotifications",1194      platform: "Android",1195      environment: "Production",1196      purchaseToken: TOKEN,1197      productKind: "subscription",1198      productId: "premium_monthly",1199      subscriptionState: "Expired",1200      expiresAt: 2_500,1201      sourceNotificationId: "google-deferred-predecessor-expired",1202      occurredAt: 2_500,1203      receivedAt: 2_500,1204    });1205    await expect(1206      applySubscriptionEventHandler(makeCtx(db), {1207        projectId: PROJECT_ID as never,1208        eventId: predecessorExpiryId as never,1209      }),1210    ).resolves.toMatchObject({ transition: null, active: true });1211    expect(db.rows("subscriptions")).toHaveLength(1);1212    expect(db.rows("subscriptions")[0]).toMatchObject({1213      purchaseToken: "purchase_token_2",1214      state: "Active",1215    });1216    expect(1217      db1218        .rows("commerceEvents")1219        .filter((event) => event.sourceEventId === predecessorExpiryId),1220    ).toEqual([]);1221    expect(db.rows("subscriptionTokenAliases")).toMatchObject([1222      {1223        purchaseToken: TOKEN,1224        successorPurchaseToken: "purchase_token_2",1225      },1226    ]);1227 1228    const successor = db.rows("subscriptions")[0];1229    const statsBeforeStaleVerification = structuredClone(1230      db.rows("subscriptionStats"),1231    );1232    await expect(1233      recordVerifiedSubscriptionHandler(makeCtx(db), {1234        projectId: PROJECT_ID as never,1235        platform: "Android",1236        purchaseToken: TOKEN,1237        productId: "stale_monthly",1238        purchaseState: "ENTITLED",1239        subscriptionState: "SUBSCRIPTION_STATE_ACTIVE",1240        expiresAt: 2_600,1241        willRenew: false,1242      }),1243    ).resolves.toBe(successor._id);1244    expect(db.rows("subscriptions")).toMatchObject([1245      {1246        _id: successor._id,1247        purchaseToken: "purchase_token_2",1248        productId: "premium_monthly",1249        state: "Active",1250      },1251    ]);1252    expect(db.rows("subscriptionStats")).toEqual(statsBeforeStaleVerification);1253 1254    await expect(1255      bindSubscriptionToUserHandler(makeCtx(db), {1256        projectId: PROJECT_ID as never,1257        purchaseToken: TOKEN,1258        userId: "user-after-handoff",1259      }),1260    ).resolves.toBe(successor._id);1261    expect(db.rows("subscriptions")).toMatchObject([1262      {1263        _id: successor._id,1264        purchaseToken: "purchase_token_2",1265        userId: "user-after-handoff",1266      },1267    ]);1268    expect(db.rows("subscriptions")).toHaveLength(1);1269 1270    const renewalId = await db.insert("webhookEvents", {1271      projectId: PROJECT_ID,1272      type: "SubscriptionRenewed",1273      source: "GooglePlayRealTimeDeveloperNotifications",1274      platform: "Android",1275      environment: "Production",1276      purchaseToken: "purchase_token_2",1277      linkedPurchaseToken: TOKEN,1278      productKind: "subscription",1279      productId: "premium_yearly",1280      subscriptionState: "Active",1281      sourceNotificationId: "google-deferred-first-renewal",1282      occurredAt: 3_000,1283      receivedAt: 3_000,1284    });1285    await applySubscriptionEventHandler(makeCtx(db), {1286      projectId: PROJECT_ID as never,1287      eventId: renewalId as never,1288    });1289 1290    expect(db.rows("subscriptions")[0]).toMatchObject({1291      purchaseToken: "purchase_token_2",1292      productId: "premium_yearly",1293    });1294    expect(1295      db1296        .rows("commerceEvents")1297        .filter((event) => event.sourceEventId === renewalId),1298    ).toEqual([1299      expect.objectContaining({1300        eventType: "subscription.renewed",1301        previousProductId: "premium_monthly",1302        productId: "premium_yearly",1303      }),1304    ]);1305  });1306 1307  it("resolves predecessor aliases beyond 32 replacement hops", async () => {1308    const db = new MemDb();1309    const hopCount = 40;1310    for (let index = 0; index < hopCount; index += 1) {1311      await db.insert("subscriptionTokenAliases", {1312        projectId: PROJECT_ID,1313        purchaseToken: `token_${index}`,1314        successorPurchaseToken: `token_${index + 1}`,1315        predecessorProductId:1316          index === 0 ? "premium_monthly" : "premium_yearly",1317        createdAt: index,1318        updatedAt: index,1319      });1320    }1321    const subscriptionId = await db.insert("subscriptions", {1322      projectId: PROJECT_ID,1323      purchaseToken: `token_${hopCount}`,1324      productKind: "subscription",1325      productId: "premium_yearly",1326      platform: "Android",1327      state: "Active",1328      expiresAt: 1_900_000_000_000,1329      willRenew: true,1330      startedAt: 1,1331      updatedAt: 1,1332    });1333    await db.insert("subscriptions", {1334      projectId: PROJECT_ID,1335      purchaseToken: "token_20",1336      productKind: "subscription",1337      productId: "stale_intermediate",1338      platform: "Android",1339      state: "Expired",1340      expiresAt: 2_000,1341      willRenew: false,1342      startedAt: 1,1343      updatedAt: 1,1344    });1345    const expiredId = await db.insert("webhookEvents", {1346      projectId: PROJECT_ID,1347      type: "SubscriptionExpired",1348      source: "GooglePlayRealTimeDeveloperNotifications",1349      platform: "Android",1350      environment: "Production",1351      purchaseToken: "token_0",1352      productKind: "subscription",1353      productId: "premium_monthly",1354      sourceNotificationId: "old-chain-expired",1355      occurredAt: 2_000,1356      receivedAt: 2_000,1357    });1358 1359    await expect(1360      getSourceProductIdByTokenHandler(makeCtx(db), {1361        projectId: PROJECT_ID as never,1362        purchaseToken: "token_0",1363      }),1364    ).resolves.toBe("premium_monthly");1365    await expect(1366      getCurrentProductIdByTokenHandler(makeCtx(db), {1367        projectId: PROJECT_ID as never,1368        purchaseToken: "token_0",1369      }),1370    ).resolves.toBe("premium_yearly");1371 1372    await expect(1373      applySubscriptionEventHandler(makeCtx(db), {1374        projectId: PROJECT_ID as never,1375        eventId: expiredId as never,1376      }),1377    ).resolves.toEqual({1378      transition: null,1379      active: true,1380      subscriptionId,1381    });1382    expect(db.rows("subscriptions")).toHaveLength(2);1383    expect(1384      db.rows("subscriptions").find((row) => row._id === subscriptionId),1385    ).toMatchObject({1386      purchaseToken: `token_${hopCount}`,1387      productId: "premium_yearly",1388      state: "Active",1389    });1390    expect(db.rows("commerceEvents")).toEqual([]);1391  });1392 1393  it("emits predecessor refunds and revocations without deactivating the successor", async () => {1394    const db = new MemDb();1395    const subscriptionId = await db.insert("subscriptions", {1396      projectId: PROJECT_ID,1397      purchaseToken: "current_token",1398      productKind: "subscription",1399      productId: "premium_yearly",1400      platform: "Android",1401      state: "Active",1402      expiresAt: 1_900_000_000_000,1403      willRenew: true,1404      startedAt: 1,1405      updatedAt: 1,1406    });1407    await db.insert("subscriptionTokenAliases", {1408      projectId: PROJECT_ID,1409      purchaseToken: "old_token",1410      successorPurchaseToken: "current_token",1411      predecessorProductId: "premium_monthly",1412      createdAt: 1,1413      updatedAt: 1,1414    });1415 1416    const cases = [1417      ["PurchaseRefunded", "Refunded", "subscription.refunded"],1418      ["SubscriptionRevoked", "Revoked", "subscription.revoked"],1419    ] as const;1420    for (const [type, transition, eventType] of cases) {1421      const eventId = await db.insert("webhookEvents", {1422        projectId: PROJECT_ID,1423        type,1424        source: "GooglePlayRealTimeDeveloperNotifications",1425        platform: "Android",1426        environment: "Production",1427        purchaseToken: "old_token",1428        productKind: "subscription",1429        productId: "premium_monthly",1430        sourceNotificationId: `old-token-${type}`,1431        occurredAt: 2_000,1432        receivedAt: 2_000,1433      });1434      await expect(1435        applySubscriptionEventHandler(makeCtx(db), {1436          projectId: PROJECT_ID as never,1437          eventId: eventId as never,1438        }),1439      ).resolves.toEqual({ transition, active: true, subscriptionId });1440      expect(1441        db1442          .rows("commerceEvents")1443          .filter((event) => event.sourceEventId === eventId)1444          .map((event) => [1445            event.eventType,1446            event.productId,1447            (event.subscription as { state?: string } | undefined)?.state,1448            event.entitlementActive,1449          ]),1450      ).toEqual([[eventType, "premium_monthly", transition, false]]);1451    }1452    expect(db.rows("subscriptions")).toMatchObject([1453      {1454        purchaseToken: "current_token",1455        productId: "premium_yearly",1456        state: "Active",1457      },1458    ]);1459  });1460 1461  it("classifies a same-product linked prepaid extension as a renewal", async () => {1462    const db = new MemDb();1463    const startedId = await seedWebhookEvent(db, {1464      type: "SubscriptionStarted",1465      notificationId: "google-prepaid-start",1466      occurredAt: 1_000,1467    });1468    await applySubscriptionEventHandler(makeCtx(db), {1469      projectId: PROJECT_ID as never,1470      eventId: startedId as never,1471    });1472    const topUpId = await db.insert("webhookEvents", {1473      projectId: PROJECT_ID,1474      type: "SubscriptionStarted",1475      source: "GooglePlayRealTimeDeveloperNotifications",1476      platform: "Android",1477      environment: "Production",1478      purchaseToken: "purchase_token_2",1479      linkedPurchaseToken: TOKEN,1480      productKind: "subscription",1481      productId: "premium_monthly",1482      subscriptionState: "Active",1483      expiresAt: 1_900_000_000_000,1484      willRenew: false,1485      sourceNotificationId: "google-prepaid-top-up",1486      occurredAt: 2_000,1487      receivedAt: 2_000,1488    });1489 1490    await expect(1491      applySubscriptionEventHandler(makeCtx(db), {1492        projectId: PROJECT_ID as never,1493        eventId: topUpId as never,1494      }),1495    ).resolves.toMatchObject({ transition: "Renewed", active: true });1496    expect(1497      db1498        .rows("commerceEvents")1499        .filter((event) => event.sourceEventId === topUpId),1500    ).toEqual([1501      expect.objectContaining({1502        eventType: "subscription.renewed",1503        productId: "premium_monthly",1504        subscription: expect.objectContaining({1505          expiresAt: 1_900_000_000_000,1506          willRenew: false,1507        }),1508      }),1509    ]);1510    expect(1511      db.rows("commerceEvents").find((event) => event.sourceEventId === topUpId)1512        ?.subscription,1513    ).not.toHaveProperty("renewsAt");1514    expect(db.rows("subscriptions")[0]).toMatchObject({1515      willRenew: false,1516      expiresAt: 1_900_000_000_000,1517    });1518    expect(db.rows("subscriptions")[0]?.renewsAt).toBeUndefined();1519  });1520 1521  it("classifies an active same-product linked resubscribe as uncanceled", async () => {1522    const db = new MemDb();1523    const startedId = await seedWebhookEvent(db, {1524      type: "SubscriptionStarted",1525      notificationId: "google-resubscribe-start",1526      occurredAt: 1_000,1527    });1528    await applySubscriptionEventHandler(makeCtx(db), {1529      projectId: PROJECT_ID as never,1530      eventId: startedId as never,1531    });1532    const canceledId = await db.insert("webhookEvents", {1533      projectId: PROJECT_ID,1534      type: "SubscriptionCanceled",1535      source: "GooglePlayRealTimeDeveloperNotifications",1536      platform: "Android",1537      environment: "Production",1538      purchaseToken: TOKEN,1539      productKind: "subscription",1540      productId: "premium_monthly",1541      subscriptionState: "Active",1542      expiresAt: 1_800_000_000_000,1543      willRenew: false,1544      sourceNotificationId: "google-resubscribe-canceled",1545      occurredAt: 2_000,1546      receivedAt: 2_000,1547    });1548    await applySubscriptionEventHandler(makeCtx(db), {1549      projectId: PROJECT_ID as never,1550      eventId: canceledId as never,1551    });1552    const resubscribedId = await db.insert("webhookEvents", {1553      projectId: PROJECT_ID,1554      type: "SubscriptionStarted",1555      source: "GooglePlayRealTimeDeveloperNotifications",1556      platform: "Android",1557      environment: "Production",1558      purchaseToken: "purchase_token_2",1559      linkedPurchaseToken: TOKEN,1560      productKind: "subscription",1561      productId: "premium_monthly",1562      subscriptionState: "Active",1563      expiresAt: 1_800_000_000_000,1564      willRenew: true,1565      sourceNotificationId: "google-resubscribe-linked",1566      occurredAt: 3_000,1567      receivedAt: 3_000,1568    });1569 1570    await expect(1571      applySubscriptionEventHandler(makeCtx(db), {1572        projectId: PROJECT_ID as never,1573        eventId: resubscribedId as never,1574      }),1575    ).resolves.toMatchObject({ transition: "Uncanceled", active: true });1576    expect(1577      db1578        .rows("commerceEvents")1579        .filter((event) => event.sourceEventId === resubscribedId)1580        .map((event) => event.eventType),1581    ).toEqual(["subscription.uncanceled"]);1582  });1583 1584  it("recovers a linked inactive predecessor regardless of verification order", async () => {1585    const db = new MemDb();1586    const startedId = await seedWebhookEvent(db, {1587      type: "SubscriptionStarted",1588      notificationId: "google-order-start",1589      occurredAt: 1_000,1590    });1591    await applySubscriptionEventHandler(makeCtx(db), {1592      projectId: PROJECT_ID as never,1593      eventId: startedId as never,1594    });1595    const expiredId = await seedWebhookEvent(db, {1596      type: "SubscriptionExpired",1597      notificationId: "google-order-expired",1598      occurredAt: 2_000,1599    });1600    await applySubscriptionEventHandler(makeCtx(db), {1601      projectId: PROJECT_ID as never,1602      eventId: expiredId as never,1603    });1604    await recordVerifiedSubscriptionHandler(makeCtx(db), {1605      projectId: PROJECT_ID as never,1606      platform: "Android",1607      purchaseToken: "purchase_token_2",1608      productId: "premium_monthly",1609      purchaseState: "ENTITLED",1610      subscriptionState: "SUBSCRIPTION_STATE_ACTIVE",1611      expiresAt: 1_900_000_000_000,1612    });1613    const recoveredId = await db.insert("webhookEvents", {1614      projectId: PROJECT_ID,1615      type: "SubscriptionStarted",1616      source: "GooglePlayRealTimeDeveloperNotifications",1617      platform: "Android",1618      environment: "Production",1619      purchaseToken: "purchase_token_2",1620      linkedPurchaseToken: TOKEN,1621      productKind: "subscription",1622      productId: "premium_monthly",1623      subscriptionState: "Active",1624      expiresAt: 1_900_000_000_000,1625      willRenew: true,1626      sourceNotificationId: "google-order-linked",1627      occurredAt: 3_000,1628      receivedAt: 3_000,1629    });1630 1631    await expect(1632      applySubscriptionEventHandler(makeCtx(db), {1633        projectId: PROJECT_ID as never,1634        eventId: recoveredId as never,1635      }),1636    ).resolves.toMatchObject({ transition: "Recovered", active: true });1637    expect(1638      db1639        .rows("commerceEvents")1640        .filter((event) => event.sourceEventId === recoveredId)1641        .map((event) => event.eventType),1642    ).toEqual(["subscription.recovered"]);1643  });1644 1645  it("recovers an inactive predecessor through a linked Google purchase", async () => {1646    const db = new MemDb();1647    const startedId = await seedWebhookEvent(db, {1648      type: "SubscriptionStarted",1649      notificationId: "google-linked-inactive-start",1650      occurredAt: 1_000,1651    });1652    await applySubscriptionEventHandler(makeCtx(db), {1653      projectId: PROJECT_ID as never,1654      eventId: startedId as never,1655    });1656    const expiredId = await seedWebhookEvent(db, {1657      type: "SubscriptionExpired",1658      notificationId: "google-linked-inactive-expired",1659      occurredAt: 2_000,1660    });1661    await applySubscriptionEventHandler(makeCtx(db), {1662      projectId: PROJECT_ID as never,1663      eventId: expiredId as never,1664    });1665    const recoveredId = await db.insert("webhookEvents", {1666      projectId: PROJECT_ID,1667      type: "SubscriptionStarted",1668      source: "GooglePlayRealTimeDeveloperNotifications",1669      platform: "Android",1670      environment: "Production",1671      purchaseToken: "purchase_token_2",1672      linkedPurchaseToken: TOKEN,1673      productKind: "subscription",1674      productId: "premium_monthly",1675      subscriptionState: "Active",1676      sourceNotificationId: "google-linked-inactive-repurchase",1677      occurredAt: 3_000,1678      receivedAt: 3_000,1679    });1680 1681    await expect(1682      applySubscriptionEventHandler(makeCtx(db), {1683        projectId: PROJECT_ID as never,1684        eventId: recoveredId as never,1685      }),1686    ).resolves.toMatchObject({ transition: "Recovered", active: true });1687    expect(1688      db1689        .rows("commerceEvents")1690        .filter((event) => event.sourceEventId === recoveredId)1691        .map((event) => event.eventType),1692    ).toEqual(["subscription.recovered"]);1693  });1694 1695  it("applies a delayed replacement after the predecessor expires", async () => {1696    const db = new MemDb();1697    const startedId = await seedWebhookEvent(db, {1698      type: "SubscriptionStarted",1699      notificationId: "google-predecessor-started",1700      occurredAt: 1_000,1701    });1702    await applySubscriptionEventHandler(makeCtx(db), {1703      projectId: PROJECT_ID as never,1704      eventId: startedId as never,1705    });1706    const expiredId = await seedWebhookEvent(db, {1707      type: "SubscriptionExpired",1708      notificationId: "google-predecessor-expired",1709      occurredAt: 3_000,1710    });1711    await applySubscriptionEventHandler(makeCtx(db), {1712      projectId: PROJECT_ID as never,1713      eventId: expiredId as never,1714    });1715    const changedId = await db.insert("webhookEvents", {1716      projectId: PROJECT_ID,1717      type: "SubscriptionProductChanged",1718      source: "GooglePlayRealTimeDeveloperNotifications",1719      platform: "Android",1720      environment: "Production",1721      purchaseToken: "purchase_token_2",1722      linkedPurchaseToken: TOKEN,1723      productKind: "subscription",1724      productId: "premium_yearly",1725      subscriptionState: "Active",1726      sourceNotificationId: "google-delayed-replacement",1727      occurredAt: 2_000,1728      receivedAt: 4_000,1729    });1730 1731    await applySubscriptionEventHandler(makeCtx(db), {1732      projectId: PROJECT_ID as never,1733      eventId: changedId as never,1734    });1735 1736    expect(db.rows("subscriptions")).toHaveLength(1);1737    expect(db.rows("subscriptions")[0]).toMatchObject({1738      purchaseToken: "purchase_token_2",1739      productId: "premium_yearly",1740      state: "Active",1741      lastEventId: changedId,1742    });1743    expect(1744      db.rows("webhookEvents").find((row) => row._id === changedId),1745    ).toHaveProperty("appliedAt");1746    expect(db.rows("commerceEvents")).toContainEqual(1747      expect.objectContaining({1748        eventType: "subscription.product_changed",1749        previousProductId: "premium_monthly",1750        productId: "premium_yearly",1751      }),1752    );1753  });1754 1755  it("keeps verification-first replacement state over a later predecessor expiry", async () => {1756    const db = new MemDb();1757    db.seedProduct({1758      projectId: PROJECT_ID,1759      platform: "Android",1760      productId: "premium_monthly",1761      billingPeriod: "P1M",1762    });1763    db.seedProduct({1764      projectId: PROJECT_ID,1765      platform: "Android",1766      productId: "premium_yearly",1767      billingPeriod: "P1Y",1768    });1769    const startedId = await seedWebhookEvent(db, {1770      type: "SubscriptionStarted",1771      notificationId: "google-old-token",1772      occurredAt: 1_000,1773    });1774    await applySubscriptionEventHandler(makeCtx(db), {1775      projectId: PROJECT_ID as never,1776      eventId: startedId as never,1777    });1778    await bindSubscriptionToUserHandler(makeCtx(db), {1779      projectId: PROJECT_ID as never,1780      purchaseToken: TOKEN,1781      userId: "user_1",1782    });1783    await recordVerifiedSubscriptionHandler(makeCtx(db), {1784      projectId: PROJECT_ID as never,1785      platform: "Android",1786      purchaseToken: "purchase_token_2",1787      productId: "premium_yearly",1788      purchaseState: "ENTITLED",1789      subscriptionState: "SUBSCRIPTION_STATE_ACTIVE",1790    });1791    expect(db.rows("subscriptions")).toHaveLength(2);1792    expect(1793      db1794        .rows("subscriptionStats")1795        .reduce((total, row) => total + Number(row.activeSubs), 0),1796    ).toBe(2);1797 1798    const expiredId = await db.insert("webhookEvents", {1799      projectId: PROJECT_ID,1800      type: "SubscriptionExpired",1801      source: "GooglePlayRealTimeDeveloperNotifications",1802      platform: "Android",1803      environment: "Production",1804      purchaseToken: TOKEN,1805      productKind: "subscription",1806      productId: "premium_monthly",1807      subscriptionState: "Expired",1808      sourceNotificationId: "google-old-token-expired",1809      occurredAt: 3_000,1810      receivedAt: 3_000,1811    });1812    await applySubscriptionEventHandler(makeCtx(db), {1813      projectId: PROJECT_ID as never,1814      eventId: expiredId as never,1815    });1816 1817    const changedId = await db.insert("webhookEvents", {1818      projectId: PROJECT_ID,1819      type: "SubscriptionProductChanged",1820      source: "GooglePlayRealTimeDeveloperNotifications",1821      platform: "Android",1822      environment: "Production",1823      purchaseToken: "purchase_token_2",1824      linkedPurchaseToken: TOKEN,1825      productKind: "subscription",1826      productId: "premium_yearly",1827      subscriptionState: "Active",1828      sourceNotificationId: "google-new-token",1829      occurredAt: 2_000,1830      receivedAt: 2_000,1831    });1832    await applySubscriptionEventHandler(makeCtx(db), {1833      projectId: PROJECT_ID as never,1834      eventId: changedId as never,1835    });1836 1837    expect(db.rows("subscriptions")).toHaveLength(1);1838    expect(db.rows("subscriptions")[0]).toMatchObject({1839      purchaseToken: "purchase_token_2",1840      productId: "premium_yearly",1841      userId: "user_1",1842      state: "Active",1843      lastEventId: changedId,1844    });1845    expect(1846      db1847        .rows("subscriptionStats")1848        .reduce((total, row) => total + Number(row.activeSubs), 0),1849    ).toBe(1);1850  });1851 1852  it("preserves active predecessor semantics after replacement verification", async () => {1853    const db = new MemDb();1854    const startedId = await seedWebhookEvent(db, {1855      type: "SubscriptionStarted",1856      notificationId: "google-active-predecessor",1857      occurredAt: 1_000,1858    });1859    await applySubscriptionEventHandler(makeCtx(db), {1860      projectId: PROJECT_ID as never,1861      eventId: startedId as never,1862    });1863    await recordVerifiedSubscriptionHandler(makeCtx(db), {1864      projectId: PROJECT_ID as never,1865      platform: "Android",1866      purchaseToken: "purchase_token_2",1867      productId: "premium_yearly",1868      purchaseState: "ENTITLED",1869      subscriptionState: "SUBSCRIPTION_STATE_ACTIVE",1870    });1871    const changedId = await db.insert("webhookEvents", {1872      projectId: PROJECT_ID,1873      type: "SubscriptionProductChanged",1874      source: "GooglePlayRealTimeDeveloperNotifications",1875      platform: "Android",1876      environment: "Production",1877      purchaseToken: "purchase_token_2",1878      linkedPurchaseToken: TOKEN,1879      productKind: "subscription",1880      productId: "premium_yearly",1881      subscriptionState: "Active",1882      sourceNotificationId: "google-verified-replacement",1883      occurredAt: 2_000,1884      receivedAt: 2_000,1885    });1886 1887    await applySubscriptionEventHandler(makeCtx(db), {1888      projectId: PROJECT_ID as never,1889      eventId: changedId as never,1890    });1891 1892    expect(db.rows("subscriptions")).toHaveLength(1);1893    expect(db.rows("subscriptions")[0]).toMatchObject({1894      purchaseToken: "purchase_token_2",1895      productId: "premium_yearly",1896      state: "Active",1897      lastEventId: changedId,1898    });1899    expect(1900      db1901        .rows("commerceEvents")1902        .filter((event) => event.sourceEventId === changedId),1903    ).toEqual([1904      expect.objectContaining({1905        eventType: "subscription.product_changed",1906        previousProductId: "premium_monthly",1907        productId: "premium_yearly",1908      }),1909    ]);1910  });1911 1912  it("emits a verified replacement when multi-item enrichment omits the product", async () => {1913    const db = new MemDb();1914    const startedId = await seedWebhookEvent(db, {1915      type: "SubscriptionStarted",1916      notificationId: "google-active-predecessor-ambiguous",1917      occurredAt: 1_000,1918    });1919    await applySubscriptionEventHandler(makeCtx(db), {1920      projectId: PROJECT_ID as never,1921      eventId: startedId as never,1922    });1923    await recordVerifiedSubscriptionHandler(makeCtx(db), {1924      projectId: PROJECT_ID as never,1925      platform: "Android",1926      purchaseToken: "purchase_token_2",1927      productId: "premium_yearly",1928      purchaseState: "ENTITLED",1929      subscriptionState: "SUBSCRIPTION_STATE_ACTIVE",1930    });1931    const changedId = await db.insert("webhookEvents", {1932      projectId: PROJECT_ID,1933      type: "SubscriptionProductChanged",1934      source: "GooglePlayRealTimeDeveloperNotifications",1935      platform: "Android",1936      environment: "Production",1937      purchaseToken: "purchase_token_2",1938      linkedPurchaseToken: TOKEN,1939      productKind: "subscription",1940      subscriptionState: "Active",1941      sourceNotificationId: "google-verified-ambiguous-replacement",1942      occurredAt: 2_000,1943      receivedAt: 2_000,1944    });1945 1946    await applySubscriptionEventHandler(makeCtx(db), {1947      projectId: PROJECT_ID as never,1948      eventId: changedId as never,1949    });1950 1951    expect(db.rows("subscriptions")).toHaveLength(1);1952    expect(db.rows("subscriptions")[0]).toMatchObject({1953      purchaseToken: "purchase_token_2",1954      productId: "premium_yearly",1955      state: "Active",1956      lastEventId: changedId,1957    });1958    expect(1959      db1960        .rows("commerceEvents")1961        .filter((event) => event.sourceEventId === changedId),1962    ).toEqual([1963      expect.objectContaining({1964        eventType: "subscription.product_changed",1965        previousProductId: "premium_monthly",1966        productId: "premium_yearly",1967      }),1968    ]);1969  });1970 1971  it("rejects linked Google tokens bound to different users", async () => {1972    const db = new MemDb();1973    const startedId = await seedWebhookEvent(db, {1974      type: "SubscriptionStarted",1975      notificationId: "google-old-token",1976      occurredAt: 1_000,1977    });1978    await applySubscriptionEventHandler(makeCtx(db), {1979      projectId: PROJECT_ID as never,1980      eventId: startedId as never,1981    });1982    await bindSubscriptionToUserHandler(makeCtx(db), {1983      projectId: PROJECT_ID as never,1984      purchaseToken: TOKEN,1985      userId: "user_1",1986    });1987    await recordVerifiedSubscriptionHandler(makeCtx(db), {1988      projectId: PROJECT_ID as never,1989      platform: "Android",1990      purchaseToken: "purchase_token_2",1991      productId: "premium_yearly",1992      purchaseState: "ENTITLED",1993      subscriptionState: "SUBSCRIPTION_STATE_ACTIVE",1994    });1995    await bindSubscriptionToUserHandler(makeCtx(db), {1996      projectId: PROJECT_ID as never,1997      purchaseToken: "purchase_token_2",1998      userId: "user_2",1999    });2000    const changedId = await db.insert("webhookEvents", {2001      projectId: PROJECT_ID,2002      type: "SubscriptionProductChanged",2003      source: "GooglePlayRealTimeDeveloperNotifications",2004      platform: "Android",2005      environment: "Production",2006      purchaseToken: "purchase_token_2",2007      linkedPurchaseToken: TOKEN,2008      productKind: "subscription",2009      productId: "premium_yearly",2010      sourceNotificationId: "google-conflicting-token",2011      occurredAt: 2_000,2012      receivedAt: 2_000,2013    });2014 2015    await expect(2016      applySubscriptionEventHandler(makeCtx(db), {2017        projectId: PROJECT_ID as never,2018        eventId: changedId as never,2019      }),2020    ).rejects.toThrow("different users");2021    expect(db.rows("subscriptions")).toHaveLength(2);2022  });2023 2024  it("keeps a newer store-governed replacement row over an older linked event", async () => {2025    const db = new MemDb();2026    const oldStartedId = await seedWebhookEvent(db, {2027      type: "SubscriptionStarted",2028      notificationId: "google-old-token",2029      occurredAt: 1_000,2030    });2031    await applySubscriptionEventHandler(makeCtx(db), {2032      projectId: PROJECT_ID as never,2033      eventId: oldStartedId as never,2034    });2035    const newStartedId = await db.insert("webhookEvents", {2036      projectId: PROJECT_ID,2037      type: "SubscriptionStarted",2038      source: "GooglePlayRealTimeDeveloperNotifications",2039      platform: "Android",2040      environment: "Production",2041      purchaseToken: "purchase_token_2",2042      productKind: "subscription",2043      productId: "premium_monthly",2044      subscriptionState: "Active",2045      sourceNotificationId: "google-new-token-started",2046      occurredAt: 3_000,2047      receivedAt: 3_000,2048    });2049    await applySubscriptionEventHandler(makeCtx(db), {2050      projectId: PROJECT_ID as never,2051      eventId: newStartedId as never,2052    });2053    const olderLinkedId = await db.insert("webhookEvents", {2054      projectId: PROJECT_ID,2055      type: "SubscriptionProductChanged",2056      source: "GooglePlayRealTimeDeveloperNotifications",2057      platform: "Android",2058      environment: "Production",2059      purchaseToken: "purchase_token_2",2060      linkedPurchaseToken: TOKEN,2061      productKind: "subscription",2062      productId: "premium_yearly",2063      subscriptionState: "Active",2064      sourceNotificationId: "google-older-linked-event",2065      occurredAt: 2_000,2066      receivedAt: 4_000,2067    });2068 2069    await applySubscriptionEventHandler(makeCtx(db), {2070      projectId: PROJECT_ID as never,2071      eventId: olderLinkedId as never,2072    });2073 2074    expect(db.rows("subscriptions")).toHaveLength(1);2075    expect(db.rows("subscriptions")[0]).toMatchObject({2076      purchaseToken: "purchase_token_2",2077      productId: "premium_monthly",2078      lastEventId: newStartedId,2079    });2080    expect(2081      db.rows("webhookEvents").find((row) => row._id === olderLinkedId),2082    ).toHaveProperty("appliedAt");2083    expect(db.rows("subscriptionTokenAliases")).toMatchObject([2084      {2085        purchaseToken: TOKEN,2086        successorPurchaseToken: "purchase_token_2",2087      },2088    ]);2089 2090    const latePredecessorExpiryId = await db.insert("webhookEvents", {2091      projectId: PROJECT_ID,2092      type: "SubscriptionExpired",2093      source: "GooglePlayRealTimeDeveloperNotifications",2094      platform: "Android",2095      environment: "Production",2096      purchaseToken: TOKEN,2097      productKind: "subscription",2098      productId: "premium_monthly",2099      subscriptionState: "Expired",2100      sourceNotificationId: "google-late-predecessor-expired",2101      occurredAt: 4_000,2102      receivedAt: 4_000,2103    });2104    await expect(2105      applySubscriptionEventHandler(makeCtx(db), {2106        projectId: PROJECT_ID as never,2107        eventId: latePredecessorExpiryId as never,2108      }),2109    ).resolves.toMatchObject({ transition: null, active: true });2110    expect(db.rows("subscriptions")).toHaveLength(1);2111    expect(2112      db2113        .rows("commerceEvents")2114        .filter((event) => event.sourceEventId === latePredecessorExpiryId),2115    ).toEqual([]);2116  });2117 2118  it("keeps current-token state when the predecessor expires later", async () => {2119    const db = new MemDb();2120    const oldStartedId = await seedWebhookEvent(db, {2121      type: "SubscriptionStarted",2122      notificationId: "google-predecessor-started",2123      occurredAt: 1_000,2124    });2125    await applySubscriptionEventHandler(makeCtx(db), {2126      projectId: PROJECT_ID as never,2127      eventId: oldStartedId as never,2128    });2129    const replacementStartedId = await db.insert("webhookEvents", {2130      projectId: PROJECT_ID,2131      type: "SubscriptionStarted",2132      source: "GooglePlayRealTimeDeveloperNotifications",2133      platform: "Android",2134      environment: "Production",2135      purchaseToken: "purchase_token_2",2136      productKind: "subscription",2137      productId: "premium_monthly",2138      subscriptionState: "Active",2139      sourceNotificationId: "google-replacement-started",2140      occurredAt: 2_000,2141      receivedAt: 2_000,2142    });2143    await applySubscriptionEventHandler(makeCtx(db), {2144      projectId: PROJECT_ID as never,2145      eventId: replacementStartedId as never,2146    });2147    const predecessorExpiredId = await db.insert("webhookEvents", {2148      projectId: PROJECT_ID,2149      type: "SubscriptionExpired",2150      source: "GooglePlayRealTimeDeveloperNotifications",2151      platform: "Android",2152      environment: "Production",2153      purchaseToken: TOKEN,2154      productKind: "subscription",2155      productId: "premium_monthly",2156      subscriptionState: "Expired",2157      sourceNotificationId: "google-predecessor-expired",2158      occurredAt: 3_000,2159      receivedAt: 3_000,2160    });2161    await applySubscriptionEventHandler(makeCtx(db), {2162      projectId: PROJECT_ID as never,2163      eventId: predecessorExpiredId as never,2164    });2165    const linkedId = await db.insert("webhookEvents", {2166      projectId: PROJECT_ID,2167      type: "SubscriptionProductChanged",2168      source: "GooglePlayRealTimeDeveloperNotifications",2169      platform: "Android",2170      environment: "Production",2171      purchaseToken: "purchase_token_2",2172      linkedPurchaseToken: TOKEN,2173      productKind: "subscription",2174      productId: "premium_yearly",2175      subscriptionState: "Active",2176      sourceNotificationId: "google-linked-replacement",2177      occurredAt: 4_000,2178      receivedAt: 4_000,2179    });2180 2181    await applySubscriptionEventHandler(makeCtx(db), {2182      projectId: PROJECT_ID as never,2183      eventId: linkedId as never,2184    });2185 2186    expect(db.rows("subscriptions")).toHaveLength(1);2187    expect(db.rows("subscriptions")[0]).toMatchObject({2188      purchaseToken: "purchase_token_2",2189      productId: "premium_yearly",2190      state: "Active",2191      lastEventId: linkedId,2192    });2193  });2194 2195  it("moves a multi-item Google replacement token without guessing a product", async () => {2196    const db = new MemDb();2197    const startedId = await seedWebhookEvent(db, {2198      type: "SubscriptionStarted",2199      notificationId: "google-old-token",2200      occurredAt: 1_000,2201    });2202    await applySubscriptionEventHandler(makeCtx(db), {2203      projectId: PROJECT_ID as never,2204      eventId: startedId as never,2205    });2206    const changedId = await db.insert("webhookEvents", {2207      projectId: PROJECT_ID,2208      type: "SubscriptionProductChanged",2209      source: "GooglePlayRealTimeDeveloperNotifications",2210      platform: "Android",2211      environment: "Production",2212      purchaseToken: "purchase_token_2",2213      linkedPurchaseToken: TOKEN,2214      productKind: "subscription",2215      sourceNotificationId: "google-bundle-change",2216      occurredAt: 2_000,2217      receivedAt: 2_000,2218    });2219 2220    await applySubscriptionEventHandler(makeCtx(db), {2221      projectId: PROJECT_ID as never,2222      eventId: changedId as never,2223    });2224 2225    expect(db.rows("subscriptions")).toHaveLength(1);2226    expect(db.rows("subscriptions")[0]).toMatchObject({2227      purchaseToken: "purchase_token_2",2228      productId: "premium_monthly",2229      lastEventId: changedId,2230    });2231    expect(db.rows("commerceEvents")).toHaveLength(1);2232  });2233});2234 2235describe("buildVerifiedSubscriptionSnapshot", () => {2236  it("bootstraps an active subscription from an entitled Google verification", () => {2237    const snapshot = buildVerifiedSubscriptionSnapshot({2238      platform: "Android",2239      productId: "premium_monthly",2240      purchaseState: HarmonizedPurchaseState.ENTITLED,2241      subscriptionState: "SUBSCRIPTION_STATE_ACTIVE",2242      expiresAt: 2_000_000_000_000,2243    });2244 2245    expect(snapshot).toEqual({2246      productId: "premium_monthly",2247      state: "Active",2248      expiresAt: 2_000_000_000_000,2249      renewsAt: undefined,2250      willRenew: true,2251      cancellationReason: undefined,2252      clearCancellationReason: true,2253      currency: undefined,2254      priceAmountMicros: undefined,2255    });2256  });2257 2258  it("treats pending-acknowledgment subscriptions as entitled while still bindable", () => {2259    const snapshot = buildVerifiedSubscriptionSnapshot({2260      platform: "Android",2261      productId: "premium_monthly",2262      purchaseState: HarmonizedPurchaseState.PENDING_ACKNOWLEDGMENT,2263      subscriptionState: "SUBSCRIPTION_STATE_ACTIVE",2264    });2265 2266    expect(snapshot).toMatchObject({2267      productId: "premium_monthly",2268      state: "Active",2269      willRenew: true,2270      clearCancellationReason: true,2271    });2272  });2273 2274  it("stamps Refunded only when Apple says the revocation was a refund", () => {2275    // revocationReason 1 is Apple's app-issue refund; 0 also covers Family2276    // Sharing loss, where asserting money moved back would be false.2277    const refunded = buildVerifiedSubscriptionSnapshot({2278      platform: "IOS",2279      productId: "premium_monthly",2280      purchaseState: HarmonizedPurchaseState.CANCELED,2281      revocationReasonIOS: 1,2282    });2283    expect(refunded).toMatchObject({2284      state: "Revoked",2285      willRenew: false,2286      cancellationReason: "Refunded",2287    });2288 2289    const familySharingLoss = buildVerifiedSubscriptionSnapshot({2290      platform: "IOS",2291      productId: "premium_monthly",2292      purchaseState: HarmonizedPurchaseState.CANCELED,2293      revocationReasonIOS: 0,2294    });2295    expect(familySharingLoss).toMatchObject({2296      state: "Revoked",2297      willRenew: false,2298    });2299    expect(familySharingLoss?.cancellationReason).toBeUndefined();2300 2301    const unknown = buildVerifiedSubscriptionSnapshot({2302      platform: "IOS",2303      productId: "premium_monthly",2304      purchaseState: HarmonizedPurchaseState.CANCELED,2305    });2306    expect(unknown?.cancellationReason).toBeUndefined();2307  });2308 2309  it("preserves access for canceled Google subscriptions until expiry", () => {2310    const snapshot = buildVerifiedSubscriptionSnapshot({2311      platform: "Android",2312      productId: "premium_monthly",2313      purchaseState: HarmonizedPurchaseState.CANCELED,2314      subscriptionState: "SUBSCRIPTION_STATE_CANCELED",2315      expiresAt: 2_000_000_000_000,2316    });2317 2318    expect(snapshot).toMatchObject({2319      productId: "premium_monthly",2320      state: "Active",2321      willRenew: false,2322      expiresAt: 2_000_000_000_000,2323    });2324    expect(snapshot?.cancellationReason).toBeUndefined();2325  });2326 2327  it("maps on-hold Google subscriptions to billing retry", () => {2328    const snapshot = buildVerifiedSubscriptionSnapshot({2329      platform: "Android",2330      productId: "premium_monthly",2331      purchaseState: HarmonizedPurchaseState.PENDING,2332      subscriptionState: "SUBSCRIPTION_STATE_ON_HOLD",2333    });2334 2335    expect(snapshot).toMatchObject({2336      productId: "premium_monthly",2337      state: "InBillingRetry",2338      cancellationReason: "BillingError",2339    });2340  });2341 2342  it("does not infer renewal status when Google omits subscriptionState", () => {2343    const snapshot = buildVerifiedSubscriptionSnapshot({2344      platform: "Android",2345      productId: "premium_monthly",2346      purchaseState: HarmonizedPurchaseState.PENDING_ACKNOWLEDGMENT,2347    });2348 2349    expect(snapshot).toMatchObject({2350      productId: "premium_monthly",2351      state: "Active",2352    });2353    expect(snapshot?.willRenew).toBeUndefined();2354    expect(snapshot?.cancellationReason).toBeUndefined();2355    expect(snapshot?.clearCancellationReason).toBeUndefined();2356  });2357 2358  it("does not create a subscription row for expected-product mismatches", () => {2359    const snapshot = buildVerifiedSubscriptionSnapshot({2360      platform: "Android",2361      productId: "premium_monthly",2362      purchaseState: HarmonizedPurchaseState.INAUTHENTIC,2363      subscriptionState: "SUBSCRIPTION_STATE_ACTIVE",2364    });2365 2366    expect(snapshot).toBeNull();2367  });2368 2369  it("does not create a subscription row when Google omits the product id", () => {2370    const snapshot = buildVerifiedSubscriptionSnapshot({2371      platform: "Android",2372      productId: "unknown",2373      purchaseState: HarmonizedPurchaseState.ENTITLED,2374      subscriptionState: "SUBSCRIPTION_STATE_ACTIVE",2375    });2376 2377    expect(snapshot).toBeNull();2378  });2379 2380  it("bootstraps an Apple subscription without guessing auto-renew status", () => {2381    const snapshot = buildVerifiedSubscriptionSnapshot({2382      platform: "IOS",2383      productId: "com.example.premium",2384      purchaseState: HarmonizedPurchaseState.ENTITLED,2385      expiresAt: 2_000_000_000_000,2386      currency: "USD",2387      priceAmountMicros: 9_990_000,2388    });2389 2390    expect(snapshot).toEqual({2391      productId: "com.example.premium",2392      state: "Active",2393      expiresAt: 2_000_000_000_000,2394      renewsAt: undefined,2395      cancellationReason: undefined,2396      clearCancellationReason: true,2397      currency: "USD",2398      priceAmountMicros: 9_990_000,2399    });2400  });2401});2402 2403describe("mergeVerifiedSubscriptionSnapshot", () => {2404  it("preserves existing timing and price fields when verify omits them", () => {2405    const snapshot = mergeVerifiedSubscriptionSnapshot(2406      {2407        expiresAt: 2_000_000_000_000,2408        renewsAt: 2_000_000_000_000,2409        willRenew: true,2410        cancellationReason: undefined,2411        currency: "USD",2412        priceAmountMicros: 9_990_000,2413      },2414      {2415        productId: "premium_monthly",2416        state: "Active",2417        willRenew: true,2418      },2419    );2420 2421    expect(snapshot).toEqual({2422      productId: "premium_monthly",2423      state: "Active",2424      expiresAt: 2_000_000_000_000,2425      renewsAt: 2_000_000_000_000,2426      willRenew: true,2427      cancellationReason: undefined,2428      currency: "USD",2429      priceAmountMicros: 9_990_000,2430    });2431  });2432 2433  it("clears stale cancellation reason when verified snapshots request it", () => {2434    const existing = {2435      expiresAt: undefined,2436      renewsAt: undefined,2437      willRenew: false,2438      cancellationReason: "UserCanceled" as const,2439      currency: undefined,2440      priceAmountMicros: undefined,2441    };2442    const appleSnapshot = buildVerifiedSubscriptionSnapshot({2443      platform: "IOS",2444      productId: "premium_monthly",2445      purchaseState: HarmonizedPurchaseState.ENTITLED,2446    });2447    const graceSnapshot = buildVerifiedSubscriptionSnapshot({2448      platform: "Android",2449      productId: "premium_monthly",2450      purchaseState: HarmonizedPurchaseState.ENTITLED,2451      subscriptionState: "SUBSCRIPTION_STATE_IN_GRACE_PERIOD",2452    });2453 2454    expect(appleSnapshot?.clearCancellationReason).toBe(true);2455    expect(graceSnapshot?.clearCancellationReason).toBe(true);2456 2457    const appleMerged = mergeVerifiedSubscriptionSnapshot(2458      existing,2459      appleSnapshot!,2460    );2461    const graceMerged = mergeVerifiedSubscriptionSnapshot(2462      existing,2463      graceSnapshot!,2464    );2465 2466    expect(appleMerged.cancellationReason).toBeUndefined();2467    expect(graceMerged.cancellationReason).toBeUndefined();2468    expect(graceMerged.willRenew).toBe(true);2469  });2470 2471  it("preserves cancellation reason when verify cannot prove auto-renew is enabled", () => {2472    const snapshot = mergeVerifiedSubscriptionSnapshot(2473      {2474        expiresAt: undefined,2475        renewsAt: undefined,2476        willRenew: false,2477        cancellationReason: "UserCanceled",2478        currency: undefined,2479        priceAmountMicros: undefined,2480      },2481      {2482        productId: "premium_monthly",2483        state: "Active",2484      },2485    );2486 2487    expect(snapshot.cancellationReason).toBe("UserCanceled");2488    expect(snapshot.willRenew).toBe(false);2489  });2490});2491 2492describe("recordVerifiedSubscriptionHandler", () => {2493  beforeEach(() => {2494    vi.setSystemTime(new Date("2026-01-01T00:00:00.000Z"));2495  });2496 2497  afterEach(() => {2498    vi.useRealTimers();2499  });2500 2501  it("rejects a receipt-verification write once project deletion starts", async () => {2502    const db = new MemDb();2503    await db.patch(PROJECT_ID, { pendingDeletion: true });2504 2505    await expect(2506      recordVerifiedSubscriptionHandler(makeCtx(db), {2507        projectId: PROJECT_ID as never,2508        platform: "Android",2509        purchaseToken: TOKEN,2510        productId: "premium_monthly",2511        purchaseState: HarmonizedPurchaseState.ENTITLED,2512      }),2513    ).rejects.toThrow("Project not found");2514    expect(db.rows("subscriptions")).toEqual([]);2515    expect(db.rows("subscriptionStats")).toEqual([]);2516  });2517 2518  it("creates a bindable subscription row from Google receipt verification", async () => {2519    const db = new MemDb();2520    db.seedProduct({2521      projectId: PROJECT_ID,2522      platform: "Android",2523      productId: "premium_monthly",2524      billingPeriod: "P1M",2525    });2526 2527    const subscriptionId = await recordVerifiedSubscriptionHandler(2528      makeCtx(db),2529      {2530        projectId: PROJECT_ID as never,2531        platform: "Android",2532        purchaseToken: TOKEN,2533        productId: "premium_monthly",2534        purchaseState: HarmonizedPurchaseState.ENTITLED,2535        subscriptionState: "SUBSCRIPTION_STATE_ACTIVE",2536        expiresAt: 1_769_904_000_000,2537        renewsAt: 1_769_904_000_000,2538        currency: "USD",2539        priceAmountMicros: 9_990_000,2540      },2541    );2542 2543    expect(subscriptionId).toBe("subscriptions_2");2544    expect(db.rows("subscriptions")).toMatchObject([2545      {2546        _id: "subscriptions_2",2547        projectId: PROJECT_ID,2548        purchaseToken: TOKEN,2549        productId: "premium_monthly",2550        platform: "Android",2551        state: "Active",2552        willRenew: true,2553        currency: "USD",2554        priceAmountMicros: 9_990_000,2555      },2556    ]);2557    expect(db.rows("subscriptionStats")).toMatchObject([2558      {2559        projectId: PROJECT_ID,2560        currency: "USD",2561        activeSubs: 1,2562        inGracePeriod: 0,2563        inBillingRetry: 0,2564        mrrMicros: 9_990_000,2565      },2566    ]);2567  });2568 2569  it("keeps a verified Google prepaid subscription non-renewing", async () => {2570    const db = new MemDb();2571 2572    await recordVerifiedSubscriptionHandler(makeCtx(db), {2573      projectId: PROJECT_ID as never,2574      platform: "Android",2575      purchaseToken: "prepaid-token",2576      productId: "prepaid_monthly",2577      purchaseState: HarmonizedPurchaseState.ENTITLED,2578      subscriptionState: "SUBSCRIPTION_STATE_ACTIVE",2579      expiresAt: 1_769_904_000_000,2580      willRenew: false,2581    });2582 2583    expect(db.rows("subscriptions")).toMatchObject([2584      {2585        purchaseToken: "prepaid-token",2586        state: "Active",2587        expiresAt: 1_769_904_000_000,2588        willRenew: false,2589        renewsAt: undefined,2590      },2591    ]);2592  });2593 2594  it("clears a prior renewal date when verification becomes non-renewing", async () => {2595    const db = new MemDb();2596    const input = {2597      projectId: PROJECT_ID as never,2598      platform: "Android" as const,2599      purchaseToken: "prepaid-transition-token",2600      productId: "premium_monthly",2601      purchaseState: HarmonizedPurchaseState.ENTITLED,2602      subscriptionState: "SUBSCRIPTION_STATE_ACTIVE",2603      expiresAt: 1_769_904_000_000,2604    };2605 2606    await recordVerifiedSubscriptionHandler(makeCtx(db), {2607      ...input,2608      renewsAt: 1_769_904_000_000,2609      willRenew: true,2610    });2611    await recordVerifiedSubscriptionHandler(makeCtx(db), {2612      ...input,2613      willRenew: false,2614    });2615 2616    expect(db.rows("subscriptions")).toMatchObject([2617      {2618        purchaseToken: "prepaid-transition-token",2619        state: "Active",2620        willRenew: false,2621        renewsAt: undefined,2622      },2623    ]);2624    expect(db.rows("subscriptions")).toHaveLength(1);2625  });2626 2627  it("creates an active bindable row for pending-acknowledgment Google subscriptions", async () => {2628    const db = new MemDb();2629    db.seedProduct({2630      projectId: PROJECT_ID,2631      platform: "Android",2632      productId: "premium_monthly",2633      billingPeriod: "P1M",2634    });2635 2636    await recordVerifiedSubscriptionHandler(makeCtx(db), {2637      projectId: PROJECT_ID as never,2638      platform: "Android",2639      purchaseToken: TOKEN,2640      productId: "premium_monthly",2641      purchaseState: HarmonizedPurchaseState.PENDING_ACKNOWLEDGMENT,2642      subscriptionState: "SUBSCRIPTION_STATE_ACTIVE",2643      expiresAt: 1_769_904_000_000,2644      currency: "USD",2645      priceAmountMicros: 9_990_000,2646    });2647 2648    expect(db.rows("subscriptions")).toMatchObject([2649      {2650        purchaseToken: TOKEN,2651        productId: "premium_monthly",2652        platform: "Android",2653        state: "Active",2654        willRenew: true,2655      },2656    ]);2657    expect(db.rows("subscriptionStats")).toMatchObject([2658      {2659        activeSubs: 1,2660        mrrMicros: 9_990_000,2661      },2662    ]);2663  });2664 2665  it("keeps repeated verification idempotent for subscription stats", async () => {2666    const db = new MemDb();2667    db.seedProduct({2668      projectId: PROJECT_ID,2669      platform: "Android",2670      productId: "premium_monthly",2671      billingPeriod: "P1M",2672    });2673    const args = {2674      projectId: PROJECT_ID as never,2675      platform: "Android" as const,2676      purchaseToken: TOKEN,2677      productId: "premium_monthly",2678      purchaseState: HarmonizedPurchaseState.ENTITLED,2679      subscriptionState: "SUBSCRIPTION_STATE_ACTIVE",2680      expiresAt: 1_769_904_000_000,2681      currency: "USD",2682      priceAmountMicros: 9_990_000,2683    };2684 2685    await recordVerifiedSubscriptionHandler(makeCtx(db), args);2686    await recordVerifiedSubscriptionHandler(makeCtx(db), args);2687 2688    expect(db.rows("subscriptions")).toHaveLength(1);2689    expect(db.rows("subscriptionStats")).toMatchObject([2690      {2691        activeSubs: 1,2692        mrrMicros: 9_990_000,2693      },2694    ]);2695  });2696 2697  it("does not let an older verification overwrite webhook-governed state", async () => {2698    const db = new MemDb();2699    const startedId = await seedWebhookEvent(db, {2700      type: "SubscriptionStarted",2701      notificationId: "apple-monthly",2702      occurredAt: 1_000,2703      platform: "IOS",2704      productId: "premium_monthly",2705    });2706    await applySubscriptionEventHandler(makeCtx(db), {2707      projectId: PROJECT_ID as never,2708      eventId: startedId as never,2709    });2710    const renewedId = await seedWebhookEvent(db, {2711      type: "SubscriptionRenewed",2712      notificationId: "apple-yearly",2713      occurredAt: 2_000,2714      platform: "IOS",2715      productId: "premium_yearly",2716    });2717    await db.patch(renewedId, { expiresAt: 1_900_000_000_000 });2718    await applySubscriptionEventHandler(makeCtx(db), {2719      projectId: PROJECT_ID as never,2720      eventId: renewedId as never,2721    });2722 2723    await recordVerifiedSubscriptionHandler(makeCtx(db), {2724      projectId: PROJECT_ID as never,2725      platform: "IOS",2726      purchaseToken: TOKEN,2727      productId: "premium_monthly",2728      purchaseState: HarmonizedPurchaseState.ENTITLED,2729      expiresAt: 1_700_000_000_000,2730    });2731    expect(db.rows("subscriptions")[0]).toMatchObject({2732      productId: "premium_yearly",2733      expiresAt: 1_900_000_000_000,2734      lastEventSourceNotificationId: "apple-yearly",2735    });2736  });2737 2738  it("creates a bindable Apple subscription row from receipt verification", async () => {2739    const db = new MemDb();2740    db.seedProduct({2741      projectId: PROJECT_ID,2742      platform: "IOS",2743      productId: "com.example.premium",2744      billingPeriod: "P1M",2745    });2746 2747    const subscriptionId = await recordVerifiedSubscriptionHandler(2748      makeCtx(db),2749      {2750        projectId: PROJECT_ID as never,2751        platform: "IOS",2752        purchaseToken: "original_transaction_1",2753        productId: "com.example.premium",2754        purchaseState: HarmonizedPurchaseState.ENTITLED,2755        expiresAt: 1_769_904_000_000,2756        currency: "USD",2757        priceAmountMicros: 9_990_000,2758      },2759    );2760 2761    expect(subscriptionId).toBe("subscriptions_2");2762    expect(db.rows("subscriptions")).toMatchObject([2763      {2764        _id: "subscriptions_2",2765        projectId: PROJECT_ID,2766        purchaseToken: "original_transaction_1",2767        productId: "com.example.premium",2768        platform: "IOS",2769        state: "Active",2770        willRenew: undefined,2771      },2772    ]);2773    expect(db.rows("subscriptionStats")).toMatchObject([2774      {2775        projectId: PROJECT_ID,2776        currency: "USD",2777        activeSubs: 1,2778        mrrMicros: 9_990_000,2779      },2780    ]);2781  });2782 2783  it("supports the verify -> bind flow for SDK clients", async () => {2784    const db = new MemDb();2785    db.seedProduct({2786      projectId: PROJECT_ID,2787      platform: "Android",2788      productId: "premium_monthly",2789      billingPeriod: "P1M",2790    });2791 2792    const subscriptionId = await recordVerifiedSubscriptionHandler(2793      makeCtx(db),2794      {2795        projectId: PROJECT_ID as never,2796        platform: "Android",2797        purchaseToken: TOKEN,2798        productId: "premium_monthly",2799        purchaseState: HarmonizedPurchaseState.ENTITLED,2800        subscriptionState: "SUBSCRIPTION_STATE_ACTIVE",2801        expiresAt: 1_769_904_000_000,2802        renewsAt: 1_769_904_000_000,2803        currency: "USD",2804        priceAmountMicros: 9_990_000,2805      },2806    );2807 2808    const boundId = await bindSubscriptionToUserHandler(makeCtx(db), {2809      projectId: PROJECT_ID as never,2810      purchaseToken: TOKEN,2811      userId: "user-1",2812    });2813 2814    expect(boundId).toBe(subscriptionId);2815    expect(db.rows("subscriptions")).toMatchObject([2816      {2817        _id: subscriptionId,2818        projectId: PROJECT_ID,2819        purchaseToken: TOKEN,2820        productId: "premium_monthly",2821        platform: "Android",2822        state: "Active",2823        userId: "user-1",2824        willRenew: true,2825        currency: "USD",2826        priceAmountMicros: 9_990_000,2827      },2828    ]);2829 2830    const eventId = await seedWebhookEvent(db, {2831      type: "SubscriptionStarted",2832      notificationId: "message-after-bind",2833      occurredAt: 2_000,2834    });2835    await applySubscriptionEventHandler(makeCtx(db), {2836      projectId: PROJECT_ID as never,2837      eventId: eventId as never,2838    });2839    expect(db.rows("commerceEvents")).toMatchObject([2840      { eventType: "subscription.started", userId: "user-1" },2841      { eventType: "entitlement.granted", userId: "user-1" },2842    ]);2843  });2844 2845  it("rejects unbounded user ids at the Convex storage boundary", async () => {2846    const db = new MemDb();2847 2848    for (const userId of ["   ", "u".repeat(257)]) {2849      await expect(2850        bindSubscriptionToUserHandler(makeCtx(db), {2851          projectId: PROJECT_ID as never,2852          purchaseToken: TOKEN,2853          userId,2854        }),2855      ).rejects.toThrow("userId must be nonblank and at most 256 characters");2856    }2857    expect(db.rows("subscriptions")).toHaveLength(0);2858    expect(db.rows("commerceEvents")).toHaveLength(0);2859  });2860 2861  it("emits a correlated grant when the webhook arrives before binding", async () => {2862    const db = new MemDb();2863    db.seedProduct({2864      projectId: PROJECT_ID,2865      platform: "Android",2866      productId: "premium_monthly",2867      billingPeriod: "P1M",2868    });2869    const eventId = await seedWebhookEvent(db, {2870      type: "SubscriptionStarted",2871      notificationId: "message-before-bind",2872      occurredAt: 2_000,2873    });2874    await applySubscriptionEventHandler(makeCtx(db), {2875      projectId: PROJECT_ID as never,2876      eventId: eventId as never,2877    });2878 2879    await bindSubscriptionToUserHandler(makeCtx(db), {2880      projectId: PROJECT_ID as never,2881      purchaseToken: TOKEN,2882      userId: "user-1",2883    });2884 2885    expect(db.rows("commerceEvents").at(-1)).toMatchObject({2886      eventType: "entitlement.granted",2887      userId: "user-1",2888    });2889  });2890 2891  it("does not replay an unbound grant that expired before binding", async () => {2892    const db = new MemDb();2893    db.seedProduct({2894      projectId: PROJECT_ID,2895      platform: "Android",2896      productId: "premium_monthly",2897      billingPeriod: "P1M",2898    });2899    const started = await seedWebhookEvent(db, {2900      type: "SubscriptionStarted",2901      notificationId: "unbound-started",2902      occurredAt: 1_000,2903    });2904    await applySubscriptionEventHandler(makeCtx(db), {2905      projectId: PROJECT_ID as never,2906      eventId: started as never,2907    });2908    const expired = await seedWebhookEvent(db, {2909      type: "SubscriptionExpired",2910      notificationId: "unbound-expired",2911      occurredAt: 2_000,2912    });2913    await applySubscriptionEventHandler(makeCtx(db), {2914      projectId: PROJECT_ID as never,2915      eventId: expired as never,2916    });2917 2918    const beforeBind = db.rows("commerceEvents").map((row) => row.eventType);2919    expect(beforeBind).toEqual([2920      "subscription.started",2921      "subscription.expired",2922    ]);2923 2924    await bindSubscriptionToUserHandler(makeCtx(db), {2925      projectId: PROJECT_ID as never,2926      purchaseToken: TOKEN,2927      userId: "user-after-expiry",2928    });2929 2930    expect(db.rows("commerceEvents").map((row) => row.eventType)).toEqual(2931      beforeBind,2932    );2933    expect(db.rows("subscriptions")[0]).toMatchObject({2934      state: "Expired",2935      userId: "user-after-expiry",2936    });2937  });2938 2939  it("uses the compact source snapshot after the webhook row is pruned", async () => {2940    const db = new MemDb();2941    const eventId = await seedWebhookEvent(db, {2942      type: "SubscriptionStarted",2943      notificationId: "old-webhook",2944      occurredAt: 2_000,2945    });2946    await applySubscriptionEventHandler(makeCtx(db), {2947      projectId: PROJECT_ID as never,2948      eventId: eventId as never,2949    });2950    await db.delete(eventId);2951 2952    await bindSubscriptionToUserHandler(makeCtx(db), {2953      projectId: PROJECT_ID as never,2954      purchaseToken: TOKEN,2955      userId: "user-after-retention",2956    });2957    expect(db.rows("commerceEvents").at(-1)).toMatchObject({2958      eventType: "entitlement.granted",2959      productId: "premium_monthly",2960      userId: "user-after-retention",2961      sourceStoreNotificationId: "old-webhook",2962    });2963  });2964});2965 2966describe("user binding authorization", () => {2967  const seedBound = async (db: MemDb, userId?: string) => {2968    db.seedProduct({2969      projectId: PROJECT_ID,2970      platform: "Android",2971      productId: "premium_monthly",2972      billingPeriod: "P1M",2973    });2974    await db.insert("subscriptions", {2975      projectId: PROJECT_ID,2976      platform: "Android",2977      purchaseToken: TOKEN,2978      productId: "premium_monthly",2979      state: "Active",2980      willRenew: true,2981      updatedAt: 0,2982      ...(userId ? { userId } : {}),2983    });2984  };2985 2986  // Token possession is not proof of ownership, and a distinct rejection would2987  // tell any holder of the app-embedded publishable key that a token exists2988  // and belongs to someone.2989  it("reports an already-bound subscription the same as an unknown token", async () => {2990    const owned = new MemDb();2991    await seedBound(owned, "victim");2992    const unknown = new MemDb();2993    await seedBound(unknown, "victim");2994    await unknown.delete(unknown.rows("subscriptions")[0]._id);2995 2996    const attacker = {2997      projectId: PROJECT_ID as never,2998      purchaseToken: TOKEN,2999      userId: "attacker",3000    };3001    await expect(3002      bindSubscriptionToUserHandler(makeCtx(owned) as never, attacker),3003    ).resolves.toBeNull();3004    await expect(3005      bindSubscriptionToUserHandler(makeCtx(unknown) as never, attacker),3006    ).resolves.toBeNull();3007    expect(owned.rows("subscriptions")[0].userId).toBe("victim");3008  });3009 3010  it.each([undefined, "real-owner"])(3011    "refuses operator rebind of a tombstoned record (owner: %s)",3012    async (userId) => {3013      const db = new MemDb();3014      await seedBound(db, userId);3015      await db.patch(db.rows("subscriptions")[0]._id, {3016        accountErased: true,3017      });3018      const before = structuredClone(db.rows("subscriptions"));3019      expect(3020        await rebindSubscriptionToUserHandler(makeCtx(db), {3021          projectId: PROJECT_ID as never,3022          purchaseToken: TOKEN,3023          userId: "real-owner",3024        }),3025      ).toBeNull();3026      expect(db.rows("subscriptions")).toEqual(before);3027      expect(db.rows("commerceEvents")).toEqual([]);3028    },3029  );3030 3031  it.each(["queued", "running", "completed"])(3032    "refuses rebind into or out of an account with a %s erasure job",3033    async (status) => {3034      for (const erasedUser of ["source-user", "target-user"]) {3035        const db = new MemDb();3036        await seedBound(db, "source-user");3037        const hashKey = "erasure-test-key";3038        await db.patch(PROJECT_ID, { userErasureHashKey: hashKey });3039        await db.insert("subscriptionUserErasureJobs", {3040          projectId: PROJECT_ID,3041          userIdHash: await hmacSha256Hex(hashKey, erasedUser),3042          status,3043        });3044        const before = structuredClone(db.rows("subscriptions"));3045        expect(3046          await rebindSubscriptionToUserHandler(makeCtx(db), {3047            projectId: PROJECT_ID as never,3048            purchaseToken: TOKEN,3049            userId: "target-user",3050          }),3051        ).toBeNull();3052        expect(db.rows("subscriptions")).toEqual(before);3053        expect(db.rows("commerceEvents")).toEqual([]);3054      }3055    },3056  );3057 3058  // A consumer gating access on commerce events must be told the purchase3059  // moved, or the wrong user keeps access and the real one never gets it.3060  it("revokes the old user and grants the new one on a rebind", async () => {3061    const db = new MemDb();3062    db.seedProduct({3063      projectId: PROJECT_ID,3064      platform: "Android",3065      productId: "premium_monthly",3066      billingPeriod: "P1M",3067    });3068    const priorId = await seedWebhookEvent(db, {3069      type: "SubscriptionStarted",3070      notificationId: "rebind-source",3071      occurredAt: 1_000,3072    });3073    await db.insert("subscriptions", {3074      projectId: PROJECT_ID,3075      platform: "Android",3076      purchaseToken: TOKEN,3077      productId: "premium_monthly",3078      state: "Active",3079      willRenew: true,3080      userId: "wrong-user",3081      lastEventId: priorId,3082      lastEventOccurredAt: 1_000,3083      lastEventSourceNotificationId: "rebind-source",3084      lastEventSource: {3085        type: "SubscriptionStarted",3086        environment: "Production",3087        productId: "premium_monthly",3088      },3089      expiresAt: Date.now() + 86_400_000,3090      updatedAt: 0,3091    });3092 3093    await rebindSubscriptionToUserHandler(makeCtx(db), {3094      projectId: PROJECT_ID as never,3095      purchaseToken: TOKEN,3096      userId: "real-owner",3097    });3098 3099    const emitted = db3100      .rows("commerceEvents")3101      .map((r) => [r.eventType, r.userId]);3102    expect(emitted).toEqual([3103      ["entitlement.revoked", "wrong-user"],3104      ["entitlement.granted", "real-owner"],3105    ]);3106  });3107 3108  // A rebind that cannot attribute events leaves the developer backend3109  // believing the old user still owns the purchase. Say so rather than3110  // reporting plain success.3111  it("reports a rebind it could not notify about", async () => {3112    const db = new MemDb();3113    db.seedProduct({3114      projectId: PROJECT_ID,3115      platform: "Android",3116      productId: "premium_monthly",3117      billingPeriod: "P1M",3118    });3119    await db.insert("subscriptions", {3120      projectId: PROJECT_ID,3121      platform: "Android",3122      purchaseToken: TOKEN,3123      productId: "premium_monthly",3124      state: "Active",3125      willRenew: true,3126      userId: "wrong-user",3127      expiresAt: Date.now() + 86_400_000,3128      updatedAt: 0,3129    });3130 3131    const outcome = await rebindSubscriptionToUserHandler(makeCtx(db), {3132      projectId: PROJECT_ID as never,3133      purchaseToken: TOKEN,3134      userId: "real-owner",3135    });3136    expect(outcome?.notified).toBe(false);3137    expect(db.rows("subscriptions")[0].userId).toBe("real-owner");3138    expect(db.rows("commerceEvents")).toEqual([]);3139  });3140 3141  it("lets an operator move a wrong binding", async () => {3142    const db = new MemDb();3143    await seedBound(db, "wrong-user");3144    await expect(3145      rebindSubscriptionToUserHandler(makeCtx(db) as never, {3146        projectId: PROJECT_ID as never,3147        purchaseToken: TOKEN,3148        userId: "real-owner",3149      }),3150    ).resolves.not.toBeNull();3151    expect(db.rows("subscriptions")[0].userId).toBe("real-owner");3152  });3153});3154 
    \ No newline at end of file diff --git a/packages/docs/public/commerce-source/kit/convex/subscriptions/internal.ts.html b/packages/docs/public/commerce-source/kit/convex/subscriptions/internal.ts.html new file mode 100644 index 000000000..d8036fc07 --- /dev/null +++ b/packages/docs/public/commerce-source/kit/convex/subscriptions/internal.ts.html @@ -0,0 +1 @@ +IAPKit · convex/subscriptions/internal.ts
    ← Provider replacement walkthrough

    IAPKit · convex/subscriptions/internal.ts

    Source snapshot · 2026-09-08

    SHA-256 8c246cc7bb3869cd603991ddd722bd7c375790481402dbefdfe5eb8e1341fe8f
    1import {2  internalMutation,3  internalQuery,4  type MutationCtx,5  type QueryCtx,6} from "../_generated/server";7import { ConvexError, v } from "convex/values";8import type { Doc, Id } from "../_generated/dataModel";9import { internal } from "../_generated/api";10 11import { HarmonizedPurchaseState } from "../purchases/purchaseState";12import {13  applySubscriptionTransition,14  entitlementActive,15  type CurrentSubscription,16  type SubscriptionEventInput,17} from "./stateMachine";18import { applyStatsTransition, statsContributionFor } from "./stats";19import { assertProjectWritable } from "../projects/writable";20import { isValidSubscriptionUserId } from "./limits";21import { isUserErasureRequested } from "./erasure";22 23export const USER_ERASURE_BATCH_SIZE = 100;24export const USER_ERASURE_JOB_RETENTION_MS = 7 * 24 * 60 * 60 * 1_000;25const USER_ERASURE_STALE_MS = 10 * 60 * 1_000;26const USER_ERASURE_PRUNER_BATCH_SIZE = 100;27 28const subscriptionPlatformValidator = v.union(29  v.literal("IOS"),30  v.literal("Android"),31);32 33type RawEventInput = Pick<34  Doc<"webhookEvents">,35  | "type"36  | "productId"37  | "subscriptionState"38  | "expiresAt"39  | "renewsAt"40  | "willRenew"41  | "cancellationReason"42  | "currency"43  | "priceAmountMicros"44  | "platform"45  | "effectiveImmediately"46> & { purchaseToken: string };47type SubscriptionState = Doc<"subscriptions">["state"];48type SubscriptionCancellationReason = NonNullable<49  Doc<"subscriptions">["cancellationReason"]50>;51type SubscriptionPlatform = Doc<"subscriptions">["platform"];52 53export type VerifiedSubscriptionInput = {54  platform: SubscriptionPlatform;55  productId: string;56  purchaseState: HarmonizedPurchaseState;57  subscriptionState?: string;58  expiresAt?: number;59  renewsAt?: number;60  willRenew?: boolean;61  currency?: string;62  priceAmountMicros?: number;63  revocationReasonIOS?: number;64};65 66export type VerifiedSubscriptionSnapshot = {67  productId: string;68  state: SubscriptionState;69  expiresAt?: number;70  renewsAt?: number;71  willRenew?: boolean;72  cancellationReason?: SubscriptionCancellationReason;73  clearCancellationReason?: boolean;74  currency?: string;75  priceAmountMicros?: number;76};77 78type ExistingSubscriptionSnapshotFields = Pick<79  Doc<"subscriptions">,80  | "expiresAt"81  | "renewsAt"82  | "willRenew"83  | "cancellationReason"84  | "currency"85  | "priceAmountMicros"86>;87 88type RecordVerifiedSubscriptionArgs = {89  projectId: Id<"projects">;90  platform: SubscriptionPlatform;91  purchaseToken: string;92  productId: string;93  purchaseState: string;94  subscriptionState?: string;95  expiresAt?: number;96  renewsAt?: number;97  willRenew?: boolean;98  currency?: string;99  priceAmountMicros?: number;100  revocationReasonIOS?: number;101};102 103type BindSubscriptionToUserArgs = {104  projectId: Id<"projects">;105  purchaseToken: string;106  userId: string;107};108 109interface PersistSubscriptionSnapshotArgs {110  projectId: Id<"projects">;111  platform: SubscriptionPlatform;112  purchaseToken: string;113  existing: Doc<"subscriptions"> | null;114  next: NonNullable<CurrentSubscription>;115  now: number;116  lastEvent?: Pick<117    Doc<"webhookEvents">,118    | "_id"119    | "_creationTime"120    | "type"121    | "occurredAt"122    | "sourceNotificationId"123    | "environment"124    | "productId"125    | "applicationId"126    | "transactionId"127    | "originalTransactionId"128    | "currency"129    | "priceAmountMicros"130  >;131}132 133interface ApplySubscriptionEventArgs {134  projectId: Id<"projects">;135  eventId: Id<"webhookEvents">;136}137 138interface ApplySubscriptionEventResult {139  transition: string | null;140  active: boolean;141  subscriptionId?: Id<"subscriptions">;142}143 144// Apply a webhook event to the canonical `subscriptions` table. The event's145// durable appliedAt marker is committed in the same Convex transaction as146// the subscription and stats writes, so both retry gaps are safe: a crash147// before this mutation can be repaired, while any event this mutation already148// processed can never be replayed after a newer lastEventId replaces it.149import { emitCommerceEvent } from "../commerce/internal";150 151export const applySubscriptionEvent = internalMutation({152  args: {153    projectId: v.id("projects"),154    eventId: v.id("webhookEvents"),155  },156  returns: v.object({157    transition: v.union(v.string(), v.null()),158    active: v.boolean(),159    subscriptionId: v.optional(v.id("subscriptions")),160  }),161  handler: async (ctx, args) => applySubscriptionEventHandler(ctx, args),162});163 164export async function applySubscriptionEventHandler(165  ctx: MutationCtx,166  args: ApplySubscriptionEventArgs,167): Promise<ApplySubscriptionEventResult> {168  const project = await assertProjectWritable(ctx, args.projectId);169  const storedEvent = await ctx.db.get(args.eventId);170  if (!storedEvent || storedEvent.projectId !== args.projectId) {171    throw new Error("Webhook event not found for project");172  }173 174  const now = Date.now();175  if (storedEvent.productKind === "one_time") {176    if (storedEvent.appliedAt === undefined) {177      await ctx.db.patch(storedEvent._id, { appliedAt: now });178    }179    return { transition: null, active: false };180  }181  if (!storedEvent.purchaseToken) {182    if (storedEvent.appliedAt === undefined) {183      await ctx.db.patch(storedEvent._id, { appliedAt: now });184    }185    return { transition: null, active: false };186  }187 188  const supersedingResolution = await findSupersedingSubscription(189    ctx,190    args.projectId,191    storedEvent.purchaseToken,192  );193  const existingByCurrentToken = supersedingResolution.aliased194    ? null195    : await findSubscriptionByToken(196        ctx,197        args.projectId,198        storedEvent.purchaseToken,199      );200  if (supersedingResolution.aliased) {201    const supersedingSubscription = supersedingResolution.subscription;202    const aliasedTransition =203      storedEvent.type === "PurchaseRefunded"204        ? ("Refunded" as const)205        : storedEvent.type === "SubscriptionRevoked"206          ? ("Revoked" as const)207          : null;208    const active = supersedingSubscription209      ? isActive(supersedingSubscription, now)210      : false;211    const firstApplication = storedEvent.appliedAt === undefined;212    if (firstApplication) {213      if (supersedingSubscription && aliasedTransition) {214        const predecessorProductId =215          storedEvent.productId ?? supersedingResolution.productId;216        await emitCommerceEvent(ctx, {217          projectId: args.projectId,218          transition: aliasedTransition,219          active: false,220          previouslyActive: false,221          sourceEvent: {222            ...storedEvent,223            productId: predecessorProductId,224          },225          ...(predecessorProductId226            ? {227                subscription: {228                  state: aliasedTransition,229                  productId: predecessorProductId,230                  ...(supersedingSubscription.userId231                    ? { userId: supersedingSubscription.userId }232                    : {}),233                },234              }235            : {}),236        });237      }238      await ctx.db.patch(storedEvent._id, { appliedAt: now });239    }240    return {241      transition: firstApplication ? aliasedTransition : null,242      active,243      ...(supersedingSubscription244        ? { subscriptionId: supersedingSubscription._id }245        : {}),246    };247  }248  const linkedResolution = storedEvent.linkedPurchaseToken249    ? await findSupersedingSubscription(250        ctx,251        args.projectId,252        storedEvent.linkedPurchaseToken,253      )254    : ({ aliased: false } as const);255  const linkedExact =256    storedEvent.linkedPurchaseToken && !linkedResolution.aliased257      ? await findSubscriptionByToken(258          ctx,259          args.projectId,260          storedEvent.linkedPurchaseToken,261        )262      : null;263  if (linkedResolution.aliased && !linkedResolution.subscription) {264    if (storedEvent.appliedAt === undefined) {265      await ctx.db.patch(storedEvent._id, { appliedAt: now });266    }267    return { transition: null, active: false };268  }269  const linkedExisting =270    linkedExact ??271    (linkedResolution.aliased ? linkedResolution.subscription : null);272  let existing = preferredReplacementSnapshot(273    existingByCurrentToken,274    linkedExisting,275  );276  const priorStoreSnapshot = existingByCurrentToken?.lastEventId277    ? existingByCurrentToken278    : linkedExisting?.lastEventId279      ? linkedExisting280      : null;281  if (storedEvent.appliedAt !== undefined) {282    return {283      transition: null,284      active: existing ? isActive(existing, now) : false,285      ...(existing ? { subscriptionId: existing._id } : {}),286    };287  }288 289  // A linked-token event can arrive after both tokens already have rows. Keep290  // current-token state, merge predecessor identity/history, and remove the291  // duplicate contribution before applying same-token ordering.292  if (293    existingByCurrentToken &&294    linkedExisting &&295    existingByCurrentToken._id !== linkedExisting._id296  ) {297    const accountErased =298      existingByCurrentToken.accountErased === true ||299      linkedExisting.accountErased === true;300    if (301      !accountErased &&302      existingByCurrentToken.userId &&303      linkedExisting.userId &&304      existingByCurrentToken.userId !== linkedExisting.userId305    ) {306      throw new ConvexError({307        code: "SUBSCRIPTION_USER_CONFLICT",308        message: "Linked Google purchase tokens belong to different users.",309      });310    }311    const survivor = preferredReplacementSnapshot(312      existingByCurrentToken,313      linkedExisting,314    )!;315    const removed =316      survivor._id === existingByCurrentToken._id317        ? linkedExisting318        : existingByCurrentToken;319    const invalidatedBinding = accountErased320      ? [survivor, removed].find(321          (sub) =>322            !sub.accountErased &&323            sub.userId &&324            sub.lastEventId &&325            isActive(sub, sub.updatedAt),326        )327      : undefined;328    if (329      invalidatedBinding?.userId &&330      !(await isUserErasureRequested(ctx, project, invalidatedBinding.userId))331    ) {332      // Reconcile the prior grant without repeating a charge or an erased identity.333      await emitCommerceEvent(ctx, {334        projectId: args.projectId,335        transition: null,336        active: false,337        previouslyActive: true,338        sourceEvent: {339          ...storedEvent,340          currency: undefined,341          priceAmountMicros: undefined,342          amountProvenance: undefined,343        },344        subscriptionId: invalidatedBinding._id,345        subscription: {346          state: invalidatedBinding.state,347          productId: invalidatedBinding.productId,348          expiresAt: invalidatedBinding.expiresAt,349          renewsAt: invalidatedBinding.renewsAt,350          willRenew: invalidatedBinding.willRenew,351          cancellationReason: invalidatedBinding.cancellationReason,352          userId: invalidatedBinding.userId,353        },354      });355    }356    const removedPeriod = await fetchBillingPeriod(357      ctx,358      args.projectId,359      removed.platform,360      removed.productId,361    );362    await applyStatsTransition(363      ctx,364      args.projectId,365      statsContributionFor(removed, removedPeriod, now),366      null,367    );368    await ctx.db.delete(removed._id);369    existing = {370      ...survivor,371      purchaseToken: storedEvent.purchaseToken,372      accountErased: accountErased || undefined,373      userId: accountErased ? undefined : (survivor.userId ?? removed.userId),374      startedAt: Math.min(survivor.startedAt, removed.startedAt),375    };376    await ctx.db.patch(survivor._id, {377      purchaseToken: existing.purchaseToken,378      accountErased: existing.accountErased,379      userId: existing.userId,380      startedAt: existing.startedAt,381      updatedAt: now,382    });383    await recordSubscriptionTokenAlias(ctx, {384      projectId: args.projectId,385      purchaseToken: removed.purchaseToken,386      successorPurchaseToken: existing.purchaseToken,387      predecessorProductId: removed.productId,388      now,389    });390  }391 392  // Compare with the last persisted gate; today's clock may already have expired it.393  const previouslyActive = priorStoreSnapshot394    ? isActive(priorStoreSnapshot, priorStoreSnapshot.updatedAt)395    : false;396  const noOpResult = (): ApplySubscriptionEventResult => ({397    transition: null,398    active: existing ? isActive(existing, now) : false,399    ...(existing ? { subscriptionId: existing._id } : {}),400  });401 402  // Store timestamps only order events for the same purchase token. A linked403  // predecessor can expire after its replacement became active.404  const orderingExisting = existingByCurrentToken;405 406  // Rollout compatibility for events written before appliedAt existed. The407  // current last event proves itself applied; an event older than the current408  // last event must be marked handled without being allowed to roll state409  // backwards. Store timestamps are only millisecond-precision, so ingestion410  // order breaks ties between distinct same-timestamp events. A recorded-but-411  // unapplied newest event still falls through and repairs the original412  // action/mutation gap.413  if (414    orderingExisting?.lastEventSourceNotificationId ===415    storedEvent.sourceNotificationId416  ) {417    await ctx.db.patch(storedEvent._id, { appliedAt: now });418    return noOpResult();419  }420  if (orderingExisting?.lastEventOccurredAt !== undefined) {421    const stale =422      orderingExisting.lastEventOccurredAt > storedEvent.occurredAt ||423      (orderingExisting.lastEventOccurredAt === storedEvent.occurredAt &&424        (orderingExisting.lastEventCreationTime ?? 0) >425          storedEvent._creationTime);426    if (stale) {427      await ctx.db.patch(storedEvent._id, { appliedAt: now });428      return noOpResult();429    }430  } else if (orderingExisting?.lastEventId) {431    if (orderingExisting.lastEventId === args.eventId) {432      await ctx.db.patch(storedEvent._id, { appliedAt: now });433      return noOpResult();434    }435    const lastEvent = await ctx.db.get(orderingExisting.lastEventId);436    if (437      lastEvent?.projectId === args.projectId &&438      lastEvent.purchaseToken === storedEvent.purchaseToken &&439      lastEvent.platform === storedEvent.platform &&440      (lastEvent.occurredAt > storedEvent.occurredAt ||441        (lastEvent.occurredAt === storedEvent.occurredAt &&442          lastEvent._creationTime > storedEvent._creationTime))443    ) {444      await ctx.db.patch(storedEvent._id, { appliedAt: now });445      return noOpResult();446    }447  }448 449  // Google subscription bundles can report ITEMS_CHANGED without identifying450  // which line item changed. Keep the raw event for operations, but never451  // overwrite the singular canonical product with an arbitrary bundle item.452  // Linked replacements still move the canonical row after the ordering guard.453  if (454    storedEvent.type === "SubscriptionProductChanged" &&455    !storedEvent.productId456  ) {457    if (existing) {458      const verifiedReplacementProductChanged =459        existingByCurrentToken?.lastEventId === undefined &&460        priorStoreSnapshot !== null &&461        priorStoreSnapshot.productId !== existing.productId;462      const subscriptionId = await persistSubscriptionSnapshot(ctx, {463        projectId: args.projectId,464        platform: existing.platform,465        purchaseToken: storedEvent.purchaseToken,466        existing,467        next: {468          state: existing.state,469          productId: existing.productId,470          expiresAt: existing.expiresAt,471          renewsAt: existing.renewsAt,472          willRenew: existing.willRenew,473          cancellationReason: existing.cancellationReason,474          currency: existing.currency,475          priceAmountMicros: existing.priceAmountMicros,476        },477        now,478        lastEvent: storedEvent,479      });480      await recordSubscriptionTokenAlias(ctx, {481        projectId: args.projectId,482        purchaseToken: existing.purchaseToken,483        successorPurchaseToken: storedEvent.purchaseToken,484        predecessorProductId: existing.productId,485        now,486      });487      await recordSubscriptionTokenAlias(ctx, {488        projectId: args.projectId,489        purchaseToken: storedEvent.linkedPurchaseToken,490        successorPurchaseToken: storedEvent.purchaseToken,491        predecessorProductId:492          priorStoreSnapshot?.productId ?? existing.productId,493        now,494      });495      await ctx.db.patch(storedEvent._id, { appliedAt: now });496      const active = isActive(existing, now);497      if (verifiedReplacementProductChanged) {498        await emitCommerceEvent(ctx, {499          projectId: args.projectId,500          transition: "ProductChanged",501          active,502          previouslyActive: active,503          sourceEvent: storedEvent,504          subscriptionId,505          previousProductId: priorStoreSnapshot.productId,506          subscription: {507            state: existing.state,508            productId: existing.productId,509            ...(existing.expiresAt !== undefined510              ? { expiresAt: existing.expiresAt }511              : {}),512            ...(existing.renewsAt !== undefined513              ? { renewsAt: existing.renewsAt }514              : {}),515            ...(existing.willRenew !== undefined516              ? { willRenew: existing.willRenew }517              : {}),518            ...(existing.cancellationReason519              ? { cancellationReason: existing.cancellationReason }520              : {}),521            ...(existing.userId ? { userId: existing.userId } : {}),522          },523        });524      }525      return {526        transition: verifiedReplacementProductChanged ? "ProductChanged" : null,527        active,528        subscriptionId,529      };530    }531    await ctx.db.patch(storedEvent._id, { appliedAt: now });532    return noOpResult();533  }534 535  const current: CurrentSubscription = existing536    ? {537        state: existing.state,538        productId: existing.productId,539        expiresAt: existing.expiresAt,540        renewsAt: existing.renewsAt,541        willRenew: existing.willRenew,542        cancellationReason: existing.cancellationReason,543        currency: existing.currency,544        priceAmountMicros: existing.priceAmountMicros,545      }546    : null;547  const event: RawEventInput = {548    type: storedEvent.type,549    productId: storedEvent.productId,550    subscriptionState: storedEvent.subscriptionState,551    expiresAt: storedEvent.expiresAt,552    renewsAt: storedEvent.renewsAt,553    willRenew: storedEvent.willRenew,554    cancellationReason: storedEvent.cancellationReason,555    currency: storedEvent.currency,556    priceAmountMicros: storedEvent.priceAmountMicros,557    platform: storedEvent.platform,558    effectiveImmediately: storedEvent.effectiveImmediately,559    purchaseToken: storedEvent.purchaseToken,560  };561  const transition = applySubscriptionTransition(562    current,563    coerceEventInput(event),564  );565  const linkedStartedOnActivePredecessor =566    storedEvent.type === "SubscriptionStarted" &&567    storedEvent.linkedPurchaseToken !== undefined &&568    priorStoreSnapshot !== null &&569    previouslyActive;570  const effectiveTransition = linkedStartedOnActivePredecessor571    ? transition.next?.productId !== priorStoreSnapshot.productId572      ? "ProductChanged"573      : priorStoreSnapshot.willRenew === false &&574          transition.next?.willRenew === true575        ? "Uncanceled"576        : transition.next?.expiresAt !== undefined &&577            priorStoreSnapshot.expiresAt !== undefined &&578            transition.next.expiresAt > priorStoreSnapshot.expiresAt579          ? "Renewed"580          : null581    : transition.transition;582  const firstStoreEventAfterVerification =583    storedEvent.type === "SubscriptionStarted" &&584    existing !== null &&585    existing.lastEventId === undefined &&586    priorStoreSnapshot === null;587  // Computed before persistSubscriptionSnapshot stamps lastEvent* onto the588  // row: a record bootstrapped by receipt verification has no store history,589  // so a price change or deferral arriving as its first store event has no590  // baseline to describe. The mapping vectors pin these to no event.591  const priceOrDeferralWithoutBaseline =592    existing !== null &&593    existing.lastEventId === undefined &&594    priorStoreSnapshot === null &&595    (effectiveTransition === "PriceChanged" ||596      effectiveTransition === "Deferred");597  const previousProductId =598    priorStoreSnapshot?.productId ?? existing?.productId;599 600  if (!transition.next) {601    await ctx.db.patch(storedEvent._id, { appliedAt: now });602    return {603      transition: transition.transition ?? null,604      active: false,605      ...(existing ? { subscriptionId: existing._id } : {}),606    };607  }608 609  const subscriptionId = await persistSubscriptionSnapshot(ctx, {610    projectId: args.projectId,611    platform: event.platform,612    purchaseToken: event.purchaseToken,613    existing,614    next: transition.next,615    now,616    lastEvent: storedEvent,617  });618  await recordSubscriptionTokenAlias(ctx, {619    projectId: args.projectId,620    purchaseToken: existing?.purchaseToken,621    successorPurchaseToken: storedEvent.purchaseToken,622    predecessorProductId: existing?.productId,623    now,624  });625  await recordSubscriptionTokenAlias(ctx, {626    projectId: args.projectId,627    purchaseToken: storedEvent.linkedPurchaseToken,628    successorPurchaseToken: storedEvent.purchaseToken,629    predecessorProductId: priorStoreSnapshot?.productId ?? existing?.productId,630    now,631  });632  await ctx.db.patch(storedEvent._id, { appliedAt: now });633  const active = entitlementActive(transition.next, now);634  // A record bootstrapped by receipt verification has no store history, so a635  // price change or deferral arriving as its first store event has no636  // baseline to describe. The mapping vectors pin these to no event.637  const commerceTransition = linkedStartedOnActivePredecessor638    ? effectiveTransition639    : firstStoreEventAfterVerification640      ? "Started"641      : priceOrDeferralWithoutBaseline642        ? null643        : effectiveTransition;644  await emitCommerceEvent(ctx, {645    projectId: args.projectId,646    transition: commerceTransition ?? null,647    active,648    previouslyActive,649    sourceEvent: storedEvent,650    subscriptionId,651    ...(previousProductId && previousProductId !== transition.next.productId652      ? { previousProductId }653      : {}),654    subscription: {655      state: transition.next.state,656      productId: transition.next.productId,657      ...(transition.next.expiresAt !== undefined658        ? { expiresAt: transition.next.expiresAt }659        : {}),660      ...(transition.next.renewsAt !== undefined661        ? { renewsAt: transition.next.renewsAt }662        : {}),663      ...(transition.next.willRenew !== undefined664        ? { willRenew: transition.next.willRenew }665        : {}),666      ...(transition.next.cancellationReason667        ? { cancellationReason: transition.next.cancellationReason }668        : {}),669      ...(existing?.userId ? { userId: existing.userId } : {}),670    },671  });672 673  return {674    transition: effectiveTransition ?? null,675    active,676    subscriptionId,677  };678}679 680export function buildVerifiedSubscriptionSnapshot(681  input: VerifiedSubscriptionInput,682): VerifiedSubscriptionSnapshot | null {683  if (input.productId.length === 0 || input.productId === "unknown") {684    return null;685  }686  if (input.purchaseState === HarmonizedPurchaseState.INAUTHENTIC) return null;687 688  const base: Pick<689    VerifiedSubscriptionSnapshot,690    | "productId"691    | "expiresAt"692    | "renewsAt"693    | "willRenew"694    | "currency"695    | "priceAmountMicros"696  > = {697    productId: input.productId,698    expiresAt: input.expiresAt,699    renewsAt: input.renewsAt,700    willRenew: input.willRenew,701    currency: input.currency,702    priceAmountMicros: input.priceAmountMicros,703  };704 705  if (input.platform === "IOS") {706    switch (input.purchaseState) {707      case HarmonizedPurchaseState.ENTITLED:708        return {709          ...base,710          state: "Active",711          cancellationReason: undefined,712          clearCancellationReason: true,713        };714      case HarmonizedPurchaseState.EXPIRED:715        return {716          ...base,717          state: "Expired",718          willRenew: false,719        };720      case HarmonizedPurchaseState.CANCELED:721        return {722          ...base,723          state: "Revoked",724          willRenew: false,725          // Apple's revocationReason field covers a transaction "refunded726          // ... or revoked from family sharing": value 1 is unambiguously a727          // refund, while 0 also covers Family Sharing loss. Mirroring the728          // webhook REVOKE policy, only the unambiguous value asserts money729          // moved back; webhook REFUND notifications carry the rest.730          ...(input.revocationReasonIOS === 1731            ? { cancellationReason: "Refunded" as const }732            : {}),733        };734      case HarmonizedPurchaseState.PENDING_ACKNOWLEDGMENT:735      case HarmonizedPurchaseState.PENDING:736      case HarmonizedPurchaseState.UNKNOWN:737        return {738          ...base,739          state: "Unknown",740        };741      case HarmonizedPurchaseState.READY_TO_CONSUME:742      case HarmonizedPurchaseState.CONSUMED:743        return null;744    }745  }746 747  switch (input.purchaseState) {748    case HarmonizedPurchaseState.UNKNOWN:749      return {750        ...base,751        state: "Unknown",752      };753    case HarmonizedPurchaseState.EXPIRED:754      return {755        ...base,756        state: "Expired",757        willRenew: false,758      };759    case HarmonizedPurchaseState.READY_TO_CONSUME:760    case HarmonizedPurchaseState.CONSUMED:761      return null;762    case HarmonizedPurchaseState.ENTITLED:763    case HarmonizedPurchaseState.CANCELED:764      break;765  }766 767  switch (input.subscriptionState?.toUpperCase()) {768    case "SUBSCRIPTION_STATE_ACTIVE":769      return {770        ...base,771        state: "Active",772        willRenew: input.willRenew ?? true,773        cancellationReason: undefined,774        clearCancellationReason: true,775      };776    case "SUBSCRIPTION_STATE_CANCELED":777      return {778        ...base,779        state: "Active",780        willRenew: false,781      };782    case "SUBSCRIPTION_STATE_IN_GRACE_PERIOD":783      return {784        ...base,785        state: "InGracePeriod",786        willRenew: input.willRenew ?? true,787        cancellationReason: undefined,788        clearCancellationReason: true,789      };790    case "SUBSCRIPTION_STATE_ON_HOLD":791      return {792        ...base,793        state: "InBillingRetry",794        cancellationReason: "BillingError",795      };796    case "SUBSCRIPTION_STATE_PAUSED":797      return {798        ...base,799        state: "Paused",800        willRenew: false,801      };802    case "SUBSCRIPTION_STATE_EXPIRED":803      return {804        ...base,805        state: "Expired",806        willRenew: false,807      };808    case "SUBSCRIPTION_STATE_PENDING":809      return {810        ...base,811        state: "Unknown",812      };813  }814 815  return {816    ...base,817    state:818      input.purchaseState === HarmonizedPurchaseState.ENTITLED ||819      input.purchaseState === HarmonizedPurchaseState.PENDING_ACKNOWLEDGMENT820        ? "Active"821        : "Unknown",822  };823}824 825export function mergeVerifiedSubscriptionSnapshot(826  existing: ExistingSubscriptionSnapshotFields | null,827  snapshot: VerifiedSubscriptionSnapshot,828): VerifiedSubscriptionSnapshot {829  if (!existing) return snapshot;830 831  return {832    ...snapshot,833    expiresAt: snapshot.expiresAt ?? existing.expiresAt,834    renewsAt:835      snapshot.willRenew === false836        ? undefined837        : (snapshot.renewsAt ?? existing.renewsAt),838    willRenew: snapshot.willRenew ?? existing.willRenew,839    cancellationReason:840      snapshot.cancellationReason !== undefined ||841      snapshot.clearCancellationReason842        ? snapshot.cancellationReason843        : existing.cancellationReason,844    currency: snapshot.currency ?? existing.currency,845    priceAmountMicros: snapshot.priceAmountMicros ?? existing.priceAmountMicros,846  };847}848 849// Receipt verification is the synchronous bootstrap path for850// subscriptions. Webhooks keep lifecycle state fresh later, but a851// successful verify must be enough for SDK clients to bind the just-852// purchased token to their app user.853export const recordVerifiedSubscription = internalMutation({854  args: {855    projectId: v.id("projects"),856    platform: subscriptionPlatformValidator,857    purchaseToken: v.string(),858    productId: v.string(),859    purchaseState: v.string(),860    subscriptionState: v.optional(v.string()),861    expiresAt: v.optional(v.number()),862    renewsAt: v.optional(v.number()),863    willRenew: v.optional(v.boolean()),864    currency: v.optional(v.string()),865    priceAmountMicros: v.optional(v.number()),866    revocationReasonIOS: v.optional(v.number()),867  },868  returns: v.union(v.id("subscriptions"), v.null()),869  handler: async (ctx, args) => recordVerifiedSubscriptionHandler(ctx, args),870});871 872export async function recordVerifiedSubscriptionHandler(873  ctx: MutationCtx,874  args: RecordVerifiedSubscriptionArgs,875): Promise<Id<"subscriptions"> | null> {876  await assertProjectWritable(ctx, args.projectId);877  const snapshot = buildVerifiedSubscriptionSnapshot({878    platform: args.platform,879    productId: args.productId,880    purchaseState: normalizeHarmonizedPurchaseState(args.purchaseState),881    subscriptionState: args.subscriptionState,882    expiresAt: args.expiresAt,883    renewsAt: args.renewsAt,884    willRenew: args.willRenew,885    currency: args.currency,886    priceAmountMicros: args.priceAmountMicros,887    revocationReasonIOS: args.revocationReasonIOS,888  });889  if (!snapshot) return null;890 891  const supersedingResolution = await findSupersedingSubscription(892    ctx,893    args.projectId,894    args.purchaseToken,895  );896  if (supersedingResolution.aliased) {897    return supersedingResolution.subscription?._id ?? null;898  }899  const existing = await findSubscriptionByToken(900    ctx,901    args.projectId,902    args.purchaseToken,903  );904  // Verification bootstraps a token before server notifications arrive. Once905  // a store event governs the row, a client can replay an older but still-valid906  // transaction; without comparable ordering metadata that snapshot must not907  // roll canonical product, state, or expiry backward.908  if (existing?.lastEventId) return existing._id;909  const now = Date.now();910 911  const next = mergeVerifiedSubscriptionSnapshot(existing, snapshot);912  return persistSubscriptionSnapshot(ctx, {913    projectId: args.projectId,914    platform: args.platform,915    purchaseToken: args.purchaseToken,916    existing,917    next,918    now,919  });920}921 922async function persistSubscriptionSnapshot(923  ctx: MutationCtx,924  args: PersistSubscriptionSnapshotArgs,925): Promise<Id<"subscriptions">> {926  // Stats deltas must compare the old row against the old catalog entry927  // and the new row against the new one; otherwise product/platform changes928  // subtract the wrong MRR bucket.929  const afterBillingPeriod = await fetchBillingPeriod(930    ctx,931    args.projectId,932    args.platform,933    args.next.productId,934  );935  const beforeBillingPeriod =936    args.existing &&937    (args.existing.productId !== args.next.productId ||938      args.existing.platform !== args.platform)939      ? await fetchBillingPeriod(940          ctx,941          args.projectId,942          args.existing.platform,943          args.existing.productId,944        )945      : afterBillingPeriod;946  const beforeContribution = args.existing947    ? statsContributionFor(args.existing, beforeBillingPeriod, args.now)948    : null;949 950  const row = {951    purchaseToken: args.purchaseToken,952    productKind: "subscription" as const,953    ...(args.existing?.userId ? { userId: args.existing.userId } : {}),954    productId: args.next.productId,955    platform: args.platform,956    state: args.next.state,957    expiresAt: args.next.expiresAt,958    renewsAt: args.next.renewsAt,959    willRenew: args.next.willRenew,960    cancellationReason: args.next.cancellationReason,961    currency: args.next.currency,962    priceAmountMicros: args.next.priceAmountMicros,963    updatedAt: args.now,964    ...(args.lastEvent965      ? {966          lastEventId: args.lastEvent._id,967          lastEventOccurredAt: args.lastEvent.occurredAt,968          lastEventCreationTime: args.lastEvent._creationTime,969          lastEventSourceNotificationId: args.lastEvent.sourceNotificationId,970          lastEventSource: {971            type: args.lastEvent.type,972            environment: args.lastEvent.environment,973            productId: args.lastEvent.productId,974            applicationId: args.lastEvent.applicationId,975            transactionId: args.lastEvent.transactionId,976            originalTransactionId: args.lastEvent.originalTransactionId,977            currency: args.lastEvent.currency,978            priceAmountMicros: args.lastEvent.priceAmountMicros,979          },980        }981      : {}),982  };983 984  const subscriptionId = args.existing985    ? args.existing._id986    : await ctx.db.insert("subscriptions", {987        projectId: args.projectId,988        startedAt: args.now,989        ...row,990      });991 992  if (args.existing) {993    await ctx.db.patch(args.existing._id, row);994  }995 996  const updatedRow = (await ctx.db.get(subscriptionId))!;997  const afterContribution = statsContributionFor(998    updatedRow,999    afterBillingPeriod,1000    args.now,1001  );1002  await applyStatsTransition(1003    ctx,1004    args.projectId,1005    beforeContribution,1006    afterContribution,1007  );1008 1009  return subscriptionId;1010}1011 1012function findSubscriptionByToken(1013  ctx: Pick<QueryCtx, "db">,1014  projectId: Id<"projects">,1015  purchaseToken: string,1016): Promise<Doc<"subscriptions"> | null> {1017  return ctx.db1018    .query("subscriptions")1019    .withIndex("by_project_and_token", (q) =>1020      q.eq("projectId", projectId).eq("purchaseToken", purchaseToken),1021    )1022    .unique();1023}1024 1025const MAX_SUBSCRIPTION_TOKEN_ALIAS_HOPS = 64;1026 1027type SupersedingSubscriptionResolution =1028  | { aliased: false }1029  | {1030      aliased: true;1031      subscription: Doc<"subscriptions"> | null;1032      productId?: string;1033    };1034 1035async function findSupersedingSubscription(1036  ctx: Pick<QueryCtx, "db">,1037  projectId: Id<"projects">,1038  purchaseToken: string,1039): Promise<SupersedingSubscriptionResolution> {1040  let token = purchaseToken;1041  let productId: string | undefined;1042  const seen = new Set<string>([token]);1043  for (let hop = 0; hop <= MAX_SUBSCRIPTION_TOKEN_ALIAS_HOPS; hop += 1) {1044    const alias = await ctx.db1045      .query("subscriptionTokenAliases")1046      .withIndex("by_project_and_token", (q) =>1047        q.eq("projectId", projectId).eq("purchaseToken", token),1048      )1049      .unique();1050    if (!alias) {1051      return hop === 01052        ? { aliased: false }1053        : {1054            aliased: true,1055            subscription: await findSubscriptionByToken(ctx, projectId, token),1056            productId,1057          };1058    }1059    if (hop === 0) productId = alias.predecessorProductId;1060    if (hop === MAX_SUBSCRIPTION_TOKEN_ALIAS_HOPS) {1061      return { aliased: true, subscription: null, productId };1062    }1063    if (seen.has(alias.successorPurchaseToken)) {1064      return { aliased: true, subscription: null, productId };1065    }1066    token = alias.successorPurchaseToken;1067    seen.add(token);1068  }1069  return { aliased: true, subscription: null, productId };1070}1071 1072async function recordSubscriptionTokenAlias(1073  ctx: MutationCtx,1074  args: {1075    projectId: Id<"projects">;1076    purchaseToken?: string;1077    successorPurchaseToken: string;1078    predecessorProductId?: string;1079    now: number;1080  },1081): Promise<void> {1082  if (1083    !args.purchaseToken ||1084    args.purchaseToken === args.successorPurchaseToken1085  ) {1086    return;1087  }1088  const existing = await ctx.db1089    .query("subscriptionTokenAliases")1090    .withIndex("by_project_and_token", (q) =>1091      q1092        .eq("projectId", args.projectId)1093        .eq("purchaseToken", args.purchaseToken as string),1094    )1095    .unique();1096  if (existing) {1097    if (existing.successorPurchaseToken !== args.successorPurchaseToken) {1098      await ctx.db.patch(existing._id, {1099        successorPurchaseToken: args.successorPurchaseToken,1100        predecessorProductId:1101          existing.predecessorProductId ?? args.predecessorProductId,1102        updatedAt: args.now,1103      });1104    }1105    return;1106  }1107  await ctx.db.insert("subscriptionTokenAliases", {1108    projectId: args.projectId,1109    purchaseToken: args.purchaseToken,1110    successorPurchaseToken: args.successorPurchaseToken,1111    predecessorProductId: args.predecessorProductId,1112    createdAt: args.now,1113    updatedAt: args.now,1114  });1115}1116 1117function preferredReplacementSnapshot(1118  current: Doc<"subscriptions"> | null,1119  linked: Doc<"subscriptions"> | null,1120): Doc<"subscriptions"> | null {1121  if (!current) return linked;1122  // Store timestamps from predecessor and replacement tokens are not a total1123  // order: the predecessor can expire after the replacement becomes active.1124  // Current-token state therefore wins even when it came from verification;1125  // user identity and start history are merged separately during reconciliation.1126  return current;1127}1128 1129export const getSourceProductIdByToken = internalQuery({1130  args: {1131    projectId: v.id("projects"),1132    purchaseToken: v.string(),1133  },1134  returns: v.union(v.string(), v.null()),1135  handler: async (ctx, args) => getSourceProductIdByTokenHandler(ctx, args),1136});1137 1138export async function getSourceProductIdByTokenHandler(1139  ctx: Pick<QueryCtx, "db">,1140  args: { projectId: Id<"projects">; purchaseToken: string },1141): Promise<string | null> {1142  const resolution = await findSupersedingSubscription(1143    ctx,1144    args.projectId,1145    args.purchaseToken,1146  );1147  if (resolution.aliased) return resolution.productId ?? null;1148  const subscription = await findSubscriptionByToken(1149    ctx,1150    args.projectId,1151    args.purchaseToken,1152  );1153  return subscription?.productId ?? null;1154}1155 1156export const getCurrentProductIdByToken = internalQuery({1157  args: {1158    projectId: v.id("projects"),1159    purchaseToken: v.string(),1160  },1161  returns: v.union(v.string(), v.null()),1162  handler: async (ctx, args) => getCurrentProductIdByTokenHandler(ctx, args),1163});1164 1165export async function getCurrentProductIdByTokenHandler(1166  ctx: Pick<QueryCtx, "db">,1167  args: { projectId: Id<"projects">; purchaseToken: string },1168): Promise<string | null> {1169  const resolution = await findSupersedingSubscription(1170    ctx,1171    args.projectId,1172    args.purchaseToken,1173  );1174  if (resolution.aliased) return resolution.subscription?.productId ?? null;1175  const subscription = await findSubscriptionByToken(1176    ctx,1177    args.projectId,1178    args.purchaseToken,1179  );1180  return subscription?.productId ?? null;1181}1182 1183// Look up a product's billing period from the kit-side catalog. We1184// Look up the row for the EXACT (platform, productId) — `products` is1185// keyed by (projectId, platform, productId) precisely because the1186// same SKU can exist on both stores with different billing periods.1187// Earlier behaviour preferred iOS over Android by walking both1188// platforms, which made an Android subscription inherit the iOS1189// period when those rows diverged and skewed `mrrMicros` on both the1190// incremental delta and the next recompute (PR #1241191// (https://github.com/hyodotdev/openiap/pull/124) review). Returns1192// undefined when the product isn't tracked or has no billingPeriod —1193// monthlyMicrosForSub treats that as a P1M fallback.1194async function fetchBillingPeriod(1195  ctx: MutationCtx,1196  projectId: Id<"projects">,1197  platform: SubscriptionPlatform,1198  productId: string,1199): Promise<string | undefined> {1200  const product = await ctx.db1201    .query("products")1202    .withIndex("by_project_and_platform_and_product", (q) =>1203      q1204        .eq("projectId", projectId)1205        .eq("platform", platform)1206        .eq("productId", productId),1207    )1208    .unique();1209  return product?.billingPeriod ?? undefined;1210}1211 1212function coerceEventInput(raw: RawEventInput): SubscriptionEventInput {1213  const appleRenewalPreference =1214    raw.platform === "IOS" &&1215    raw.type === "SubscriptionProductChanged" &&1216    raw.effectiveImmediately !== true;1217  return {1218    type: raw.type,1219    // Apple's renewal preference is the product for the next billing period;1220    // the current transaction remains active until then. Keep the target on1221    // the source event, but do not replace the canonical subscription early.1222    productId: appleRenewalPreference ? undefined : raw.productId,1223    subscriptionState: raw.subscriptionState,1224    expiresAt: raw.expiresAt,1225    renewsAt: raw.renewsAt,1226    willRenew: raw.willRenew,1227    cancellationReason: raw.cancellationReason,1228    currency: appleRenewalPreference ? undefined : raw.currency,1229    priceAmountMicros: appleRenewalPreference1230      ? undefined1231      : raw.priceAmountMicros,1232  };1233}1234 1235function isActive(1236  sub: Doc<"subscriptions">,1237  now: number = Date.now(),1238): boolean {1239  return entitlementActive(sub, now);1240}1241 1242function normalizeHarmonizedPurchaseState(1243  state: string,1244): HarmonizedPurchaseState {1245  const normalized = state.trim().toUpperCase().replace(/-/g, "_");1246  if (normalized in HarmonizedPurchaseState) {1247    return HarmonizedPurchaseState[1248      normalized as keyof typeof HarmonizedPurchaseState1249    ];1250  }1251  return HarmonizedPurchaseState.UNKNOWN;1252}1253 1254// Bind a subscription to a userId. Called by the SDK after a successful1255// receipt validation when the host app knows which user owns the receipt.1256export const bindSubscriptionToUser = internalMutation({1257  args: {1258    projectId: v.id("projects"),1259    purchaseToken: v.string(),1260    userId: v.string(),1261  },1262  returns: v.union(v.id("subscriptions"), v.null()),1263  handler: async (ctx, args) => bindSubscriptionToUserHandler(ctx, args),1264});1265 1266/**1267 * The retained source a re-emitted entitlement event is attributed to. The1268 * stored row is preferred; a pruned one is reconstructed from the snapshot the1269 * subscription keeps. Price is stripped: a webhook already reported it, and1270 * repeating it would put the same money on another event.1271 */1272async function retainedSourceEventFor(1273  ctx: MutationCtx,1274  projectId: Id<"projects">,1275  sub: Doc<"subscriptions">,1276) {1277  if (!sub.lastEventId) return null;1278  const retained = await ctx.db.get(sub.lastEventId);1279  const source =1280    retained?.projectId === projectId1281      ? retained1282      : sub.lastEventSource &&1283          sub.lastEventOccurredAt !== undefined &&1284          sub.lastEventSourceNotificationId1285        ? {1286            _id: sub.lastEventId,1287            type: sub.lastEventSource.type,1288            platform: sub.platform,1289            environment: sub.lastEventSource.environment,1290            productId: sub.lastEventSource.productId,1291            applicationId: sub.lastEventSource.applicationId,1292            transactionId: sub.lastEventSource.transactionId,1293            originalTransactionId: sub.lastEventSource.originalTransactionId,1294            sourceNotificationId: sub.lastEventSourceNotificationId,1295            occurredAt: sub.lastEventOccurredAt,1296          }1297        : null;1298  if (!source) return null;1299  return {1300    ...source,1301    currency: undefined,1302    priceAmountMicros: undefined,1303    amountProvenance: undefined,1304  };1305}1306 1307/**1308 * Moves an existing binding. `bindSubscriptionToUserHandler` refuses this on1309 * purpose — a caller holding a purchase token has not proved it owns the1310 * purchase — so correcting a wrong binding needs an operator-authorized path.1311 * Callers must gate this on a secret key.1312 */1313export async function rebindSubscriptionToUserHandler(1314  ctx: MutationCtx,1315  args: BindSubscriptionToUserArgs,1316): Promise<{ subscriptionId: Id<"subscriptions">; notified: boolean } | null> {1317  if (!isValidSubscriptionUserId(args.userId)) {1318    throw new ConvexError("userId must be nonblank and at most 256 characters");1319  }1320  const project = await assertProjectWritable(ctx, args.projectId);1321  if (await isUserErasureRequested(ctx, project, args.userId)) return null;1322  // Resolve exactly as `bind` does. An operator correcting a wrong binding1323  // usually has the token the customer reported, which on Play may be the one1324  // a replacement superseded.1325  const supersedingResolution = await findSupersedingSubscription(1326    ctx,1327    args.projectId,1328    args.purchaseToken,1329  );1330  const sub = supersedingResolution.aliased1331    ? supersedingResolution.subscription1332    : await findSubscriptionByToken(ctx, args.projectId, args.purchaseToken);1333  if (!sub || sub.accountErased) return null;1334  if (1335    sub.userId &&1336    sub.userId !== args.userId &&1337    (await isUserErasureRequested(ctx, project, sub.userId))1338  )1339    return null;1340  if (sub.userId === args.userId) {1341    return { subscriptionId: sub._id, notified: true };1342  }1343  const previousUserId = sub.userId;1344  const now = Date.now();1345 1346  // A consumer that gates access on commerce events has no other way to learn1347  // the purchase moved: without these it keeps the wrong user entitled and1348  // never entitles the real one. Decide before writing, so the caller is never1349  // told a rebind succeeded when the notification half of it could not.1350  const entitled = isActive({ ...sub, userId: args.userId }, now);1351  const sourceEvent = entitled1352    ? await retainedSourceEventFor(ctx, args.projectId, sub)1353    : null;1354  await ctx.db.patch(sub._id, { userId: args.userId, updatedAt: now });1355  if (!entitled) return { subscriptionId: sub._id, notified: true };1356  if (!sourceEvent) {1357    // Every retained trace of the originating notification is gone, so no1358    // event can be attributed. The binding moved; the operator must reconcile1359    // the developer backend by hand.1360    console.warn(1361      "[subscriptions/rebind] moved a binding without emitting entitlement events",1362      { projectId: args.projectId, subscriptionId: sub._id },1363    );1364    return { subscriptionId: sub._id, notified: false };1365  }1366  const snapshot = {1367    state: sub.state,1368    productId: sub.productId,1369    ...(sub.expiresAt !== undefined ? { expiresAt: sub.expiresAt } : {}),1370    ...(sub.renewsAt !== undefined ? { renewsAt: sub.renewsAt } : {}),1371    ...(sub.willRenew !== undefined ? { willRenew: sub.willRenew } : {}),1372    ...(sub.cancellationReason1373      ? { cancellationReason: sub.cancellationReason }1374      : {}),1375  };1376  for (const [userId, active, previouslyActive] of [1377    ...(previousUserId1378      ? ([[previousUserId, false, true]] as const)1379      : ([] as const)),1380    [args.userId, true, false] as const,1381  ]) {1382    await emitCommerceEvent(ctx, {1383      projectId: args.projectId,1384      transition: null,1385      active,1386      previouslyActive,1387      sourceEvent,1388      subscriptionId: sub._id,1389      subscription: { ...snapshot, userId },1390    });1391  }1392  return { subscriptionId: sub._id, notified: true };1393}1394 1395export async function bindSubscriptionToUserHandler(1396  ctx: MutationCtx,1397  args: BindSubscriptionToUserArgs,1398): Promise<Id<"subscriptions"> | null> {1399  if (!isValidSubscriptionUserId(args.userId)) {1400    throw new ConvexError("userId must be nonblank and at most 256 characters");1401  }1402  const project = await assertProjectWritable(ctx, args.projectId);1403  if (await isUserErasureRequested(ctx, project, args.userId)) return null;1404  const supersedingResolution = await findSupersedingSubscription(1405    ctx,1406    args.projectId,1407    args.purchaseToken,1408  );1409  const sub = supersedingResolution.aliased1410    ? supersedingResolution.subscription1411    : await findSubscriptionByToken(ctx, args.projectId, args.purchaseToken);1412  if (!sub || sub.accountErased) return null;1413  if (sub.userId === args.userId) return sub._id;1414  if (sub.userId) {1415    // Reported the same as an unknown token. A distinct error would tell any1416    // holder of the app-embedded publishable key whether a token exists and1417    // whether someone owns it. The operator still sees the collision.1418    console.warn(1419      "[subscriptions/bind] rejected a bind for an already-bound subscription",1420      { projectId: args.projectId, subscriptionId: sub._id },1421    );1422    return null;1423  }1424  const now = Date.now();1425  await ctx.db.patch(sub._id, {1426    userId: args.userId,1427    updatedAt: now,1428  });1429 1430  // If the store webhook won the race against verify/bind, its initial event1431  // had no account identity. Emit one correlated entitlement grant after the1432  // binding so a developer backend never has to recover a purchase token from1433  // the public payload. The normal verify -> bind -> webhook path has no1434  // lastEventId yet and emits its grant when that first webhook arrives.1435  if (sub.lastEventId && isActive(sub, now)) {1436    const retainedSource = await ctx.db.get(sub.lastEventId);1437    const sourceEvent =1438      retainedSource?.projectId === args.projectId1439        ? retainedSource1440        : sub.lastEventSource &&1441            sub.lastEventOccurredAt !== undefined &&1442            sub.lastEventSourceNotificationId1443          ? {1444              _id: sub.lastEventId,1445              type: sub.lastEventSource.type,1446              platform: sub.platform,1447              environment: sub.lastEventSource.environment,1448              productId: sub.lastEventSource.productId,1449              applicationId: sub.lastEventSource.applicationId,1450              transactionId: sub.lastEventSource.transactionId,1451              originalTransactionId: sub.lastEventSource.originalTransactionId,1452              currency: sub.lastEventSource.currency,1453              priceAmountMicros: sub.lastEventSource.priceAmountMicros,1454              sourceNotificationId: sub.lastEventSourceNotificationId,1455              occurredAt: sub.lastEventOccurredAt,1456            }1457          : null;1458    if (sourceEvent) {1459      // This only fires after a webhook already emitted the notification's1460      // amount, so repeating it would put the same money on a second event.1461      const entitlementSource = {1462        ...sourceEvent,1463        currency: undefined,1464        priceAmountMicros: undefined,1465        amountProvenance: undefined,1466      };1467      await emitCommerceEvent(ctx, {1468        projectId: args.projectId,1469        transition: null,1470        active: true,1471        previouslyActive: false,1472        sourceEvent: entitlementSource,1473        subscriptionId: sub._id,1474        subscription: {1475          state: sub.state,1476          productId: sub.productId,1477          ...(sub.expiresAt !== undefined ? { expiresAt: sub.expiresAt } : {}),1478          ...(sub.renewsAt !== undefined ? { renewsAt: sub.renewsAt } : {}),1479          ...(sub.willRenew !== undefined ? { willRenew: sub.willRenew } : {}),1480          ...(sub.cancellationReason1481            ? { cancellationReason: sub.cancellationReason }1482            : {}),1483          userId: args.userId,1484        },1485      });1486    }1487  }1488  return sub._id;1489}1490 1491export async function drainSubscriptionUserErasurePage(1492  ctx: MutationCtx,1493  jobId: Id<"subscriptionUserErasureJobs">,1494): Promise<{1495  done: boolean;1496  subscriptionsErased: number;1497  commerceEventsErased: number;1498}> {1499  const job = await ctx.db.get(jobId);1500  if (!job || job.status === "completed" || !job.userId) {1501    return {1502      done: true,1503      subscriptionsErased: job?.subscriptionsErased ?? 0,1504      commerceEventsErased: job?.commerceEventsErased ?? 0,1505    };1506  }1507 1508  const now = Date.now();1509  await ctx.db.patch(jobId, { status: "running", updatedAt: now });1510  const [subscriptions, commerceEvents, purchases] = await Promise.all([1511    ctx.db1512      .query("subscriptions")1513      .withIndex("by_project_and_user", (q) =>1514        q.eq("projectId", job.projectId).eq("userId", job.userId),1515      )1516      .take(USER_ERASURE_BATCH_SIZE),1517    ctx.db1518      .query("commerceEvents")1519      .withIndex("by_project_and_user", (q) =>1520        q.eq("projectId", job.projectId).eq("userId", job.userId),1521      )1522      .take(USER_ERASURE_BATCH_SIZE),1523    ctx.db1524      .query("purchases")1525      .withIndex("by_project_and_app_user", (q) =>1526        q.eq("projectId", job.projectId).eq("appUserId", job.userId),1527      )1528      .take(USER_ERASURE_BATCH_SIZE),1529  ]);1530 1531  for (const subscription of subscriptions) {1532    await ctx.db.patch(subscription._id, {1533      userId: undefined,1534      accountErased: true,1535    });1536  }1537  for (const purchase of purchases) {1538    await ctx.db.patch(purchase._id, {1539      appUserId: undefined,1540      accountErased: true,1541    });1542  }1543  let commerceEventsErasedThisPage = 0;1544  let waitingForClaimedDelivery = false;1545  for (const event of commerceEvents) {1546    const deliveries = await ctx.db1547      .query("outboundDeliveries")1548      .withIndex("by_event", (q) => q.eq("eventId", event._id))1549      .collect();1550    if (deliveries.some((delivery) => delivery.status === "delivering")) {1551      waitingForClaimedDelivery = true;1552      continue;1553    }1554    if (event.eventType.startsWith("entitlement.")) {1555      for (const delivery of deliveries) await ctx.db.delete(delivery._id);1556      await ctx.db.delete(event._id);1557    } else {1558      await ctx.db.patch(event._id, { userId: undefined });1559    }1560    commerceEventsErasedThisPage += 1;1561  }1562 1563  const subscriptionsErased = job.subscriptionsErased + subscriptions.length;1564  const commerceEventsErased =1565    job.commerceEventsErased + commerceEventsErasedThisPage;1566  const done =1567    !waitingForClaimedDelivery &&1568    subscriptions.length < USER_ERASURE_BATCH_SIZE &&1569    purchases.length < USER_ERASURE_BATCH_SIZE &&1570    commerceEvents.length < USER_ERASURE_BATCH_SIZE;1571 1572  if (done) {1573    await ctx.db.patch(jobId, {1574      userId: undefined,1575      status: "completed",1576      subscriptionsErased,1577      commerceEventsErased,1578      updatedAt: now,1579      completedAt: now,1580    });1581  } else {1582    await ctx.db.patch(jobId, {1583      subscriptionsErased,1584      commerceEventsErased,1585      updatedAt: now,1586    });1587    await ctx.scheduler.runAfter(1588      waitingForClaimedDelivery ? 1_000 : 0,1589      internal.subscriptions.internal.drainSubscriptionUserErasureJob,1590      { jobId },1591    );1592  }1593 1594  return { done, subscriptionsErased, commerceEventsErased };1595}1596 1597export const drainSubscriptionUserErasureJob = internalMutation({1598  args: { jobId: v.id("subscriptionUserErasureJobs") },1599  handler: async (ctx, args) =>1600    drainSubscriptionUserErasurePage(ctx, args.jobId),1601});1602 1603export const resumeSubscriptionUserErasureJobs = internalMutation({1604  args: {},1605  returns: v.object({ scheduled: v.number() }),1606  handler: async (ctx) => {1607    const staleBefore = Date.now() - USER_ERASURE_STALE_MS;1608    const [queued, stale] = await Promise.all([1609      ctx.db1610        .query("subscriptionUserErasureJobs")1611        .withIndex("by_status_and_updated", (q) => q.eq("status", "queued"))1612        .take(10),1613      ctx.db1614        .query("subscriptionUserErasureJobs")1615        .withIndex("by_status_and_updated", (q) =>1616          q.eq("status", "running").lt("updatedAt", staleBefore),1617        )1618        .take(10),1619    ]);1620    const jobs = [...queued, ...stale].slice(0, 10);1621    for (const job of jobs) {1622      await ctx.scheduler.runAfter(1623        0,1624        internal.subscriptions.internal.drainSubscriptionUserErasureJob,1625        { jobId: job._id },1626      );1627    }1628    return { scheduled: jobs.length };1629  },1630});1631 1632export async function pruneCompletedSubscriptionUserErasureJobsHandler(1633  ctx: MutationCtx,1634): Promise<{ pruned: number }> {1635  const completedBefore = Date.now() - USER_ERASURE_JOB_RETENTION_MS;1636  const completed = await ctx.db1637    .query("subscriptionUserErasureJobs")1638    .withIndex("by_status_and_updated", (q) =>1639      q.eq("status", "completed").lt("updatedAt", completedBefore),1640    )1641    .take(USER_ERASURE_PRUNER_BATCH_SIZE);1642 1643  for (const job of completed) {1644    await ctx.db.delete(job._id);1645  }1646  if (completed.length === USER_ERASURE_PRUNER_BATCH_SIZE) {1647    await ctx.scheduler.runAfter(1648      0,1649      internal.subscriptions.internal.pruneCompletedSubscriptionUserErasureJobs,1650      {},1651    );1652  }1653  return { pruned: completed.length };1654}1655 1656export const pruneCompletedSubscriptionUserErasureJobs = internalMutation({1657  args: {},1658  returns: v.object({ pruned: v.number() }),1659  handler: async (ctx) => pruneCompletedSubscriptionUserErasureJobsHandler(ctx),1660});1661 
    \ No newline at end of file diff --git a/packages/docs/public/commerce-source/kit/convex/subscriptions/mutation.test.ts.html b/packages/docs/public/commerce-source/kit/convex/subscriptions/mutation.test.ts.html new file mode 100644 index 000000000..a897003a7 --- /dev/null +++ b/packages/docs/public/commerce-source/kit/convex/subscriptions/mutation.test.ts.html @@ -0,0 +1 @@ +IAPKit · convex/subscriptions/mutation.test.ts
    ← Provider replacement walkthrough

    IAPKit · convex/subscriptions/mutation.test.ts

    Source snapshot · 2026-09-08

    SHA-256 dd89c082b0257562961ced0966edad30911a7ec806648fcfc2828b42c3084ab2
    1import { describe, expect, it, vi } from "vitest";2 3import { testableFunction } from "../test.setup";4import { hmacSha256Hex, sha256Hex } from "../utils/sha256";5import {6  bindUserAsServer as registeredBindUserAsServer,7  rebindUser as registeredRebindUser,8  requestUserErasure as registeredRequestUserErasure,9} from "./mutation";10 11const rebindUser = testableFunction(registeredRebindUser);12const requestUserErasure = testableFunction(registeredRequestUserErasure);13const bindUserAsServer = testableFunction(registeredBindUserAsServer);14 15// rebindUser moves who owns a purchase, so it is secret-key only. The check16// lives in the mutation, not in the HTTP layer, because Convex functions are17// publicly callable with a key alone.18describe("rebindUser authorization", () => {19  const project = {20    _id: "projects_1",21    _creationTime: 0,22    organizationId: "organizations_1",23    userErasureHashKey: "test-erasure-hash-key",24  };25  const organization = { _id: "organizations_1", _creationTime: 0 };26 27  const dbWith = (28    keyType?: "publishable" | "secret",29    erasureJob?: Record<string, unknown>,30  ) => ({31    rows: {32      apiKeys: keyType33        ? [34            {35              _id: "apiKeys_1",36              key: "k",37              keyType,38              isActive: true,39              projectId: project._id,40              organizationId: organization._id,41            },42          ]43        : [],44      projects: [project],45      organizations: [organization],46      subscriptions: [],47      subscriptionUserErasureJobs: erasureJob ? [erasureJob] : [],48    } as Record<string, Record<string, unknown>[]>,49    async get(id: string) {50      return (51        Object.values(this.rows)52          .flat()53          .find((r) => r._id === id) ?? null54      );55    },56    query(table: string) {57      const rows = this.rows[table] ?? [];58      const api = {59        withIndex: (_n: string, fn: (q: unknown) => unknown) => {60          const captured: Record<string, unknown> = {};61          const q: Record<string, (f: string, v: unknown) => unknown> = {};62          q.eq = (f, v) => {63            captured[f] = v;64            return q;65          };66          fn(q);67          return {68            first: async () =>69              rows.find((r) =>70                Object.entries(captured).every(([k, v]) => r[k] === v),71              ) ?? null,72            unique: async () =>73              rows.find((r) =>74                Object.entries(captured).every(([k, v]) => r[k] === v),75              ) ?? null,76            collect: async () => [],77          };78        },79      };80      return api;81    },82    async patch(id: string, value: Record<string, unknown>) {83      const row = Object.values(this.rows)84        .flat()85        .find((candidate) => candidate._id === id);86      if (row) Object.assign(row, value);87    },88    async insert(table: string, value: Record<string, unknown>) {89      const id = `${table}_${(this.rows[table]?.length ?? 0) + 1}`;90      const row = { _id: id, ...value };91      (this.rows[table] ??= []).push(row);92      return id;93    },94  });95 96  it("rejects a publishable key", async () => {97    await expect(98      rebindUser._handler(dbWithCtx("publishable"), {99        apiKey: "k",100        purchaseToken: "t",101        userId: "u",102      }),103    ).rejects.toSatisfy(104      (e: unknown) =>105        (e as { data?: { code?: string } }).data?.code === "INSUFFICIENT_SCOPE",106    );107  });108 109  it("accepts a secret key", async () => {110    await expect(111      rebindUser._handler(dbWithCtx("secret"), {112        apiKey: "k",113        purchaseToken: "t",114        userId: "u",115      }),116    ).resolves.toEqual({ ok: true, rebound: false, notified: true });117  });118 119  it("rejects a publishable key for user erasure inside Convex", async () => {120    await expect(121      requestUserErasure._handler(dbWithCtx("publishable"), {122        apiKey: "k",123        userId: "user-1",124      }),125    ).rejects.toSatisfy(126      (e: unknown) =>127        (e as { data?: { code?: string } }).data?.code === "INSUFFICIENT_SCOPE",128    );129  });130 131  it("rejects an unknown secret-shaped key for user erasure", async () => {132    await expect(133      requestUserErasure._handler(134        { db: dbWith() },135        {136          apiKey: "openiap-kit_sk_unknown",137          userId: "user-1",138        },139      ),140    ).rejects.toSatisfy(141      (error: unknown) =>142        (error as { data?: { code?: string } }).data?.code ===143        "INVALID_API_KEY",144    );145  });146 147  it("returns the completed erasure job instead of reopening it", async () => {148    const userId = "user-1";149    const completed = {150      _id: "subscriptionUserErasureJobs_1",151      projectId: project._id,152      userIdHash: await hmacSha256Hex(project.userErasureHashKey, userId),153      status: "completed",154    };155    const scheduler = { runAfter: vi.fn() };156 157    await expect(158      requestUserErasure._handler(159        { db: dbWith("secret", completed), scheduler },160        { apiKey: "k", userId },161      ),162    ).resolves.toEqual({163      ok: true,164      jobId: completed._id,165      status: "completed",166    });167    expect(scheduler.runAfter).not.toHaveBeenCalled();168  });169 170  it("rekeys a legacy completed job on an idempotent request", async () => {171    const userId = "legacy-user";172    const completed = {173      _id: "subscriptionUserErasureJobs_legacy",174      projectId: project._id,175      userIdHash: await sha256Hex(userId),176      status: "completed",177    };178    const db = dbWith("secret", completed);179    const scheduler = { runAfter: vi.fn() };180 181    await expect(182      requestUserErasure._handler(183        { db, scheduler },184        {185          apiKey: "k",186          userId,187        },188      ),189    ).resolves.toMatchObject({ jobId: completed._id, status: "completed" });190    expect(completed.userIdHash).toBe(191      await hmacSha256Hex(project.userErasureHashKey, userId),192    );193    expect(scheduler.runAfter).not.toHaveBeenCalled();194  });195 196  it("stores a keyed erasure lookup instead of a plain userId digest", async () => {197    const userId = "guessable-user@example.com";198    const db = dbWith("secret");199    const scheduler = { runAfter: vi.fn() };200 201    await requestUserErasure._handler(202      { db, scheduler },203      {204        apiKey: "k",205        userId,206      },207    );208 209    const [job] = db.rows.subscriptionUserErasureJobs;210    expect(job.userIdHash).toBe(211      await hmacSha256Hex(project.userErasureHashKey, userId),212    );213    expect(job.userIdHash).not.toBe(await sha256Hex(userId));214  });215 216  it("creates a project erasure key on first use", async () => {217    const userId = "first-erasure-user";218    const db = dbWith("secret");219    db.rows.projects = [{ ...project, userErasureHashKey: undefined }];220    const scheduler = { runAfter: vi.fn() };221 222    await requestUserErasure._handler(223      { db, scheduler },224      {225        apiKey: "k",226        userId,227      },228    );229 230    const [projectRow] = db.rows.projects;231    const key = projectRow.userErasureHashKey;232    expect(key).toEqual(expect.any(String));233    expect(String(key)).toHaveLength(64);234    expect(db.rows.subscriptionUserErasureJobs[0].userIdHash).toBe(235      await hmacSha256Hex(String(key), userId),236    );237  });238 239  // bindPurchase (server role) must distinguish an unknown key from an240  // under-scoped one: unknown/inactive is INVALID_API_KEY (UNAUTHORIZED at the241  // edge), only a real publishable key is INSUFFICIENT_SCOPE (FORBIDDEN).242  it("rejects an unknown key with INVALID_API_KEY, not INSUFFICIENT_SCOPE", async () => {243    await expect(244      bindUserAsServer._handler(245        { db: dbWith() },246        {247          apiKey: "openiap-kit_sk_unknown",248          purchaseToken: "t",249          userId: "u",250        },251      ),252    ).rejects.toSatisfy(253      (error: unknown) =>254        (error as { data?: { code?: string } }).data?.code ===255        "INVALID_API_KEY",256    );257  });258 259  it("rejects a valid publishable key with INSUFFICIENT_SCOPE", async () => {260    await expect(261      bindUserAsServer._handler(dbWithCtx("publishable"), {262        apiKey: "k",263        purchaseToken: "t",264        userId: "u",265      }),266    ).rejects.toSatisfy(267      (error: unknown) =>268        (error as { data?: { code?: string } }).data?.code ===269        "INSUFFICIENT_SCOPE",270    );271  });272 273  it("accepts a secret key", async () => {274    await expect(275      bindUserAsServer._handler(dbWithCtx("secret"), {276        apiKey: "k",277        purchaseToken: "t",278        userId: "u",279      }),280    ).resolves.toEqual({ ok: true, bound: false });281  });282 283  function dbWithCtx(keyType: "publishable" | "secret") {284    return { db: dbWith(keyType) } as never;285  }286});287 
    \ No newline at end of file diff --git a/packages/docs/public/commerce-source/kit/convex/subscriptions/mutation.ts.html b/packages/docs/public/commerce-source/kit/convex/subscriptions/mutation.ts.html new file mode 100644 index 000000000..b126dd0a5 --- /dev/null +++ b/packages/docs/public/commerce-source/kit/convex/subscriptions/mutation.ts.html @@ -0,0 +1 @@ +IAPKit · convex/subscriptions/mutation.ts
    ← Provider replacement walkthrough

    IAPKit · convex/subscriptions/mutation.ts

    Source snapshot · 2026-09-08

    SHA-256 b780bab187d90d93eb4f7c5f9e8c5edde2ede313023a189b116a691b7506bade
    1import { mutation } from "../_generated/server";2import { ConvexError, v } from "convex/values";3import { internal } from "../_generated/api";4 5import { resolveProjectByApiKeyFromDb } from "../projects/helpers";6import {7  bindSubscriptionToUserHandler,8  rebindSubscriptionToUserHandler,9} from "./internal";10import { isValidSubscriptionUserId } from "./limits";11import { hmacSha256Hex, sha256Hex } from "../utils/sha256";12 13function generateUserErasureHashKey(): string {14  const bytes = new Uint8Array(32);15  crypto.getRandomValues(bytes);16  return Array.from(bytes, (byte) => byte.toString(16).padStart(2, "0")).join(17    "",18  );19}20 21// Public mutation called by SDKs after a successful receipt verification:22// they know who the host-app user is, so they tell kit which userId owns23// the verified purchaseToken. Idempotent — re-binding the same userId is24// a no-op.25export const bindUser = mutation({26  args: {27    apiKey: v.string(),28    purchaseToken: v.string(),29    userId: v.string(),30  },31  returns: v.object({ ok: v.boolean(), bound: v.boolean() }),32  handler: async (ctx, args) => {33    const resolved = await resolveProjectByApiKeyFromDb(ctx, args.apiKey);34    const project = resolved?.project ?? null;35    if (!project) return { ok: false, bound: false };36 37    const subscriptionId = await bindSubscriptionToUserHandler(ctx, {38      projectId: project._id,39      purchaseToken: args.purchaseToken,40      userId: args.userId,41    });42 43    return { ok: true, bound: subscriptionId !== null };44  },45});46 47// Commerce Protocol bindPurchase: same idempotent, never-move binding as48// bindUser, but server-role only. The protocol says a shipped app must not49// reach an account mutation, and the edge prefix check alone cannot classify50// a legacy no-prefix key, so the admin access is asserted here in Convex where51// the stored key type is authoritative.52export const bindUserAsServer = mutation({53  args: {54    apiKey: v.string(),55    purchaseToken: v.string(),56    userId: v.string(),57  },58  returns: v.object({ ok: v.boolean(), bound: v.boolean() }),59  handler: async (ctx, args) => {60    // resolveProjectByApiKeyFromDb throws INSUFFICIENT_SCOPE for a valid but61    // under-scoped (publishable/legacy) key, and returns null for an unknown62    // or inactive one. The two must map to different protocol codes: an63    // unknown key is UNAUTHORIZED (INVALID_API_KEY), only a real-but-wrong-role64    // key is FORBIDDEN.65    const resolved = await resolveProjectByApiKeyFromDb(66      ctx,67      args.apiKey,68      "admin",69    );70    if (!resolved) {71      throw new ConvexError({72        code: "INVALID_API_KEY",73        message: "API key is invalid or inactive",74      });75    }76 77    const subscriptionId = await bindSubscriptionToUserHandler(ctx, {78      projectId: resolved.project._id,79      purchaseToken: args.purchaseToken,80      userId: args.userId,81    });82 83    return { ok: true, bound: subscriptionId !== null };84  },85});86 87// Recovery for a subscription bound to the wrong user. `bindUser` deliberately88// refuses to move an existing binding — token possession is not proof of89// ownership — so without this an operator has no way to correct one.90// Secret key only: this reassigns who owns a purchase.91export const rebindUser = mutation({92  args: {93    apiKey: v.string(),94    purchaseToken: v.string(),95    userId: v.string(),96  },97  returns: v.object({98    ok: v.boolean(),99    rebound: v.boolean(),100    // False when the binding moved but no entitlement events could be101    // attributed, so the caller knows the developer backend still believes the102    // previous user owns the purchase.103    notified: v.boolean(),104  }),105  handler: async (ctx, args) => {106    const resolved = await resolveProjectByApiKeyFromDb(107      ctx,108      args.apiKey,109      "admin",110    );111    const project = resolved?.project ?? null;112    if (!project) return { ok: false, rebound: false, notified: false };113 114    const result = await rebindSubscriptionToUserHandler(ctx, {115      projectId: project._id,116      purchaseToken: args.purchaseToken,117      userId: args.userId,118    });119 120    return {121      ok: true,122      rebound: result !== null,123      notified: result?.notified ?? true,124    };125  },126});127 128export const requestUserErasure = mutation({129  args: { apiKey: v.string(), userId: v.string() },130  returns: v.object({131    ok: v.boolean(),132    jobId: v.id("subscriptionUserErasureJobs"),133    status: v.union(134      v.literal("queued"),135      v.literal("running"),136      v.literal("completed"),137    ),138  }),139  handler: async (ctx, args) => {140    const resolved = await resolveProjectByApiKeyFromDb(141      ctx,142      args.apiKey,143      "admin",144    );145    if (!resolved) {146      throw new ConvexError({147        code: "INVALID_API_KEY",148        message: "API key is invalid or inactive",149      });150    }151    if (!isValidSubscriptionUserId(args.userId)) {152      throw new ConvexError({153        code: "INVALID_INPUT",154        message: "userId is invalid",155      });156    }157 158    const hashKey =159      resolved.project.userErasureHashKey ?? generateUserErasureHashKey();160    if (resolved.project.userErasureHashKey === undefined) {161      await ctx.db.patch(resolved.project._id, { userErasureHashKey: hashKey });162    }163    const userIdHash = await hmacSha256Hex(hashKey, args.userId);164    let existing = await ctx.db165      .query("subscriptionUserErasureJobs")166      .withIndex("by_project_and_user_hash", (q) =>167        q.eq("projectId", resolved.project._id).eq("userIdHash", userIdHash),168      )169      .unique();170    if (!existing) {171      const legacyHash = await sha256Hex(args.userId);172      existing = await ctx.db173        .query("subscriptionUserErasureJobs")174        .withIndex("by_project_and_user_hash", (q) =>175          q.eq("projectId", resolved.project._id).eq("userIdHash", legacyHash),176        )177        .unique();178      if (existing) {179        await ctx.db.patch(existing._id, { userIdHash });180      }181    }182    if (existing) {183      return { ok: true, jobId: existing._id, status: existing.status };184    }185 186    const now = Date.now();187    const jobId = await ctx.db.insert("subscriptionUserErasureJobs", {188      projectId: resolved.project._id,189      userId: args.userId,190      userIdHash,191      status: "queued",192      subscriptionsErased: 0,193      commerceEventsErased: 0,194      createdAt: now,195      updatedAt: now,196    });197    await ctx.scheduler.runAfter(198      0,199      internal.subscriptions.internal.drainSubscriptionUserErasureJob,200      { jobId },201    );202    return { ok: true, jobId, status: "queued" as const };203  },204});205 
    \ No newline at end of file diff --git a/packages/docs/public/commerce-source/kit/convex/subscriptions/query.test.ts.html b/packages/docs/public/commerce-source/kit/convex/subscriptions/query.test.ts.html new file mode 100644 index 000000000..f5154e95d --- /dev/null +++ b/packages/docs/public/commerce-source/kit/convex/subscriptions/query.test.ts.html @@ -0,0 +1 @@ +IAPKit · convex/subscriptions/query.test.ts
    ← Provider replacement walkthrough

    IAPKit · convex/subscriptions/query.test.ts

    Source snapshot · 2026-09-08

    SHA-256 f3621aa334a48fcdb4a0b71f0b5d2c1dd6a4ee44c6a3813b81012e5d12269b68
    1import { describe, expect, it } from "vitest";2import { ConvexError } from "convex/values";3import type { Doc, Id } from "../_generated/dataModel";4import { testableFunction } from "../test.setup";5 6import {7  assertUserSubscriptionRowLimit,8  entitlementsV2 as registeredEntitlementsV2,9  MAX_USER_SUBSCRIPTION_ROWS,10  selectReportingMrr,11  shapeSubscriptionEvaluationSnapshot,12  shapeSubscriptionRow,13  shapeSubscriptionV2Row,14  subscriptionStatusV2 as registeredSubscriptionStatusV2,15} from "./query";16 17const subscriptionStatusV2 = testableFunction(registeredSubscriptionStatusV2);18const entitlementsV2 = testableFunction(registeredEntitlementsV2);19 20function subscriptionDoc(21  overrides: Partial<Doc<"subscriptions">>,22): Doc<"subscriptions"> {23  return {24    _id: "subscriptions_1" as Id<"subscriptions">,25    _creationTime: 0,26    projectId: "projects_1" as Id<"projects">,27    purchaseToken: "purchase_token_1",28    productId: "premium_monthly",29    platform: "IOS",30    state: "Active",31    startedAt: 1,32    updatedAt: 2,33    ...overrides,34  };35}36 37describe("selectReportingMrr", () => {38  it("uses only the reporting currency for the headline MRR", () => {39    const result = selectReportingMrr(40      [41        { currency: "EUR", mrrMicros: 8_500_000 },42        { currency: "USD", mrrMicros: 9_990_000 },43        { currency: "HUF", mrrMicros: 12_000_000 },44      ],45      "USD",46    );47 48    expect(result).toEqual({49      currency: "USD",50      mrrMicros: 9_990_000,51      excludedMrrByCurrency: [52        { currency: "EUR", mrrMicros: 8_500_000 },53        { currency: "HUF", mrrMicros: 12_000_000 },54      ],55    });56  });57 58  it("returns zero when the reporting currency has no matching MRR", () => {59    const result = selectReportingMrr(60      [61        { currency: "EUR", mrrMicros: 8_500_000 },62        { currency: "HUF", mrrMicros: 12_000_000 },63      ],64      "USD",65    );66 67    expect(result).toEqual({68      currency: "USD",69      mrrMicros: 0,70      excludedMrrByCurrency: [71        { currency: "EUR", mrrMicros: 8_500_000 },72        { currency: "HUF", mrrMicros: 12_000_000 },73      ],74    });75  });76 77  it("falls back to USD for invalid reporting currency input", () => {78    const result = selectReportingMrr(79      [80        { currency: "USD", mrrMicros: 9_990_000 },81        { currency: "EUR", mrrMicros: 8_500_000 },82      ],83      "US",84    );85 86    expect(result).toEqual({87      currency: "USD",88      mrrMicros: 9_990_000,89      excludedMrrByCurrency: [{ currency: "EUR", mrrMicros: 8_500_000 }],90    });91  });92});93 94describe("shapeSubscriptionRow", () => {95  it("exposes originalTransactionId for iOS subscription rows", () => {96    const row = shapeSubscriptionRow(97      subscriptionDoc({98        platform: "IOS",99        purchaseToken: "2000001177054625",100      }),101    );102 103    expect(row.purchaseToken).toBe("2000001177054625");104    expect(row.originalTransactionId).toBe("2000001177054625");105  });106 107  // Security debt, pinned so a removal is a deliberate decision: MAUI declares108  // purchaseToken `required` and drops the row when it is missing, so removing109  // it silently strips entitlement from every installed MAUI app.110  it("still carries the Play purchaseToken an installed MAUI app requires", () => {111    const row = shapeSubscriptionRow(112      subscriptionDoc({113        platform: "Android",114        purchaseToken: "play-token-1",115      }),116    );117 118    expect(row.purchaseToken).toBe("play-token-1");119    expect(row.originalTransactionId).toBeUndefined();120  });121});122 123describe("shapeSubscriptionV2Row", () => {124  it("omits both Android and Apple store credentials", () => {125    const row = shapeSubscriptionV2Row(126      subscriptionDoc({127        platform: "IOS",128        purchaseToken: "2000001177054625",129        userId: "user-1",130      }),131    );132 133    expect(row).toMatchObject({134      id: "subscriptions_1",135      productId: "premium_monthly",136      userId: "user-1",137    });138    expect(row).not.toHaveProperty("purchaseToken");139    expect(row).not.toHaveProperty("originalTransactionId");140  });141});142 143describe("v2 account-read authorization", () => {144  const db = {145    rows: {146      apiKeys: [147        {148          _id: "apiKeys_1",149          key: "openiap-kit_pk_mobile",150          keyType: "publishable",151          isActive: true,152          projectId: "projects_1",153          organizationId: "organizations_1",154        },155        {156          _id: "apiKeys_2",157          key: "openiap-kit_sk_backend",158          keyType: "secret",159          isActive: true,160          projectId: "projects_1",161          organizationId: "organizations_1",162        },163      ],164      projects: [165        {166          _id: "projects_1",167          organizationId: "organizations_1",168        },169      ],170      organizations: [{ _id: "organizations_1" }],171      subscriptions: [172        subscriptionDoc({173          userId: "user-1",174          expiresAt: 10,175        }),176      ],177    } as Record<string, Record<string, unknown>[]>,178    async get(id: string) {179      return (180        Object.values(this.rows)181          .flat()182          .find((row) => row._id === id) ?? null183      );184    },185    query(table: string) {186      const rows = this.rows[table] ?? [];187      return {188        withIndex: (_name: string, capture: (q: unknown) => unknown) => {189          const expected: Record<string, unknown> = {};190          const q: Record<string, (field: string, value: unknown) => unknown> =191            {};192          q.eq = (field, value) => {193            expected[field] = value;194            return q;195          };196          capture(q);197          const matches = () =>198            rows.filter((row) =>199              Object.entries(expected).every(200                ([field, value]) => row[field] === value,201              ),202            );203          return {204            first: async () => matches()[0] ?? null,205            order: () => ({206              take: async (limit: number) => matches().slice(0, limit),207            }),208          };209        },210      };211    },212  };213 214  it("rejects publishable keys inside Convex", async () => {215    const ctx = { db } as never;216    for (const query of [subscriptionStatusV2, entitlementsV2]) {217      await expect(218        query._handler(ctx, {219          apiKey: "openiap-kit_pk_mobile",220          userId: "user-1",221          now: 1,222        }),223      ).rejects.toSatisfy(224        (error: unknown) =>225          (error as { data?: { code?: string } }).data?.code ===226          "INSUFFICIENT_SCOPE",227      );228    }229  });230 231  it("rejects an unknown secret-shaped key instead of returning empty data", async () => {232    const ctx = { db } as never;233    for (const query of [subscriptionStatusV2, entitlementsV2]) {234      await expect(235        query._handler(ctx, {236          apiKey: "openiap-kit_sk_unknown",237          userId: "user-1",238          now: 1,239        }),240      ).rejects.toSatisfy(241        (error: unknown) =>242          (error as { data?: { code?: string } }).data?.code ===243          "INVALID_API_KEY",244      );245    }246  });247 248  it("uses the caller-supplied time so cache keys advance past expiry", async () => {249    const ctx = { db } as never;250    const beforeExpiry = await subscriptionStatusV2._handler(ctx, {251      apiKey: "openiap-kit_sk_backend",252      userId: "user-1",253      now: 9,254    });255    const atExpiry = await subscriptionStatusV2._handler(ctx, {256      apiKey: "openiap-kit_sk_backend",257      userId: "user-1",258      now: 10,259    });260    const entitlements = await entitlementsV2._handler(ctx, {261      apiKey: "openiap-kit_sk_backend",262      userId: "user-1",263      now: 10,264    });265 266    expect(beforeExpiry.active).toBe(true);267    expect(atExpiry.active).toBe(false);268    expect(entitlements.productIds).toEqual([]);269  });270});271 272describe("assertUserSubscriptionRowLimit", () => {273  it("accepts the documented 200-row boundary", () => {274    const rows = Array.from(275      { length: MAX_USER_SUBSCRIPTION_ROWS },276      (_, index) =>277        subscriptionDoc({278          _id: `subscriptions_${index}` as Id<"subscriptions">,279        }),280    );281 282    expect(() => assertUserSubscriptionRowLimit(rows)).not.toThrow();283  });284 285  it("fails closed on the single overflow-probe row", () => {286    const rows = Array.from(287      { length: MAX_USER_SUBSCRIPTION_ROWS + 1 },288      (_, index) =>289        subscriptionDoc({290          _id: `subscriptions_${index}` as Id<"subscriptions">,291        }),292    );293 294    try {295      assertUserSubscriptionRowLimit(rows);296      throw new Error("Expected the subscription row limit to fail");297    } catch (error) {298      expect(error).toBeInstanceOf(ConvexError);299      expect(300        (error as ConvexError<{ code: string; message: string }>).data,301      ).toEqual({302        code: "ENTITLEMENT_SNAPSHOT_TOO_LARGE",303        message:304          "This user has more than 200 subscription rows. Contact IAPKit support before retrying.",305      });306    }307  });308});309 310describe("shapeSubscriptionEvaluationSnapshot", () => {311  it("exposes only entitlement candidates and the latest status fallback", () => {312    const rows = [313      subscriptionDoc({314        _id: "subscriptions_latest" as Id<"subscriptions">,315        state: "Expired",316        updatedAt: 4,317        purchaseToken: "latest-token",318      }),319      subscriptionDoc({320        _id: "subscriptions_active" as Id<"subscriptions">,321        state: "Active",322        updatedAt: 3,323        purchaseToken: "active-token",324      }),325      subscriptionDoc({326        _id: "subscriptions_refunded" as Id<"subscriptions">,327        state: "Refunded",328        updatedAt: 2,329        purchaseToken: "historical-token",330      }),331    ];332 333    const snapshot = shapeSubscriptionEvaluationSnapshot(rows);334 335    expect(snapshot.candidates).toHaveLength(1);336    expect(snapshot.candidates[0]?.id).toBe("subscriptions_active");337    expect(snapshot.candidates[0]?.createdAt).toBe(0);338    expect(snapshot.fallback?.createdAt).toBe(0);339    expect(snapshot.candidates[0]?.purchaseToken).toBe("active-token");340    expect(snapshot.fallback?.purchaseToken).toBe("latest-token");341    expect(JSON.stringify(snapshot)).not.toContain("historical-token");342  });343});344 
    \ No newline at end of file diff --git a/packages/docs/public/commerce-source/kit/convex/subscriptions/query.ts.html b/packages/docs/public/commerce-source/kit/convex/subscriptions/query.ts.html new file mode 100644 index 000000000..7bf5d290f --- /dev/null +++ b/packages/docs/public/commerce-source/kit/convex/subscriptions/query.ts.html @@ -0,0 +1 @@ +IAPKit · convex/subscriptions/query.ts
    ← Provider replacement walkthrough

    IAPKit · convex/subscriptions/query.ts

    Source snapshot · 2026-09-08

    SHA-256 f6de34dfbc28c8fcf2111b3063a21b95d1e58940bbb79665711f803de9b1afe0
    1import { query, type QueryCtx } from "../_generated/server";2import { ConvexError, v, type Infer } from "convex/values";3import type { Doc, Id } from "../_generated/dataModel";4 5import {6  resolveProjectByApiKeyFromDb,7  resolveProjectByIdForCurrentUserFromDb,8} from "../projects/helpers";9import { monthlyMicrosForSub } from "./monthlyMicros";10import { selectMostRecentlyUpdatedSubscription } from "./selectLatest";11import {12  DEFAULT_REPORTING_CURRENCY,13  normalizeReportingCurrencyOrDefault,14} from "../utils/currency";15import { subscriptionStateValidator } from "../utils/validation";16 17const subscriptionFields = {18  id: v.id("subscriptions"),19  productId: v.string(),20  platform: v.union(v.literal("IOS"), v.literal("Android")),21  state: subscriptionStateValidator,22  expiresAt: v.optional(v.number()),23  renewsAt: v.optional(v.number()),24  willRenew: v.optional(v.boolean()),25  cancellationReason: v.optional(v.string()),26  currency: v.optional(v.string()),27  priceAmountMicros: v.optional(v.number()),28  startedAt: v.number(),29  updatedAt: v.number(),30  // SECURITY DEBT: on Android this is the credential a server accepts as proof31  // of purchase, and these rows reach routes that answer to a publishable key32  // shipped inside the app. It cannot be removed additively: MAUI declares it33  // `required`, and its tolerant deserializer turns a missing field into a null34  // subscription and silently drops entitlement rows — every installed MAUI app35  // would lose entitlement. Removal needs an explicit version transition.36  purchaseToken: v.string(),37  originalTransactionId: v.optional(v.string()),38  userId: v.optional(v.string()),39};40const subscriptionShape = v.object(subscriptionFields);41const subscriptionV2Shape = v.object({42  id: v.id("subscriptions"),43  productId: v.string(),44  platform: v.union(v.literal("IOS"), v.literal("Android")),45  state: subscriptionStateValidator,46  expiresAt: v.optional(v.number()),47  renewsAt: v.optional(v.number()),48  willRenew: v.optional(v.boolean()),49  cancellationReason: v.optional(v.string()),50  currency: v.optional(v.string()),51  priceAmountMicros: v.optional(v.number()),52  startedAt: v.number(),53  updatedAt: v.number(),54  userId: v.optional(v.string()),55});56const subscriptionEvaluationRowShape = v.object({57  ...subscriptionFields,58  createdAt: v.number(),59});60type SubscriptionRow = Infer<typeof subscriptionShape>;61type SubscriptionV2Row = Infer<typeof subscriptionV2Shape>;62type SubscriptionEvaluationRow = Infer<typeof subscriptionEvaluationRowShape>;63export const MAX_USER_SUBSCRIPTION_ROWS = 200;64 65/**66 * SPEC.md 2.3 entitlement gate as a pure predicate: only Active and67 * InGracePeriod grant access, an omitted expiry means none is known, and the68 * boundary is exclusive — expiresAt == now is NOT entitled. Exported so the69 * conformance adapter certifies the same predicate every read uses.70 */71export function isEntitledAt(72  state: string,73  expiresAt: number | null | undefined,74  now: number,75): boolean {76  if (state !== "Active" && state !== "InGracePeriod") return false;77  if (expiresAt != null && expiresAt <= now) return false;78  return true;79}80 81function isActive(sub: Doc<"subscriptions">, now: number): boolean {82  return isEntitledAt(sub.state, sub.expiresAt, now);83}84 85function isEntitledState(sub: Doc<"subscriptions">): boolean {86  return sub.state === "Active" || sub.state === "InGracePeriod";87}88 89export function assertUserSubscriptionRowLimit(90  rows: Array<Doc<"subscriptions">>,91): void {92  if (rows.length <= MAX_USER_SUBSCRIPTION_ROWS) return;93  throw new ConvexError({94    code: "ENTITLEMENT_SNAPSHOT_TOO_LARGE",95    message:96      "This user has more than 200 subscription rows. Contact IAPKit support before retrying.",97  });98}99 100async function userSubscriptionRows(101  ctx: QueryCtx,102  projectId: Id<"projects">,103  userId: string,104): Promise<Array<Doc<"subscriptions">>> {105  const rows = await ctx.db106    .query("subscriptions")107    .withIndex("by_project_and_user_and_updated", (q) =>108      q.eq("projectId", projectId).eq("userId", userId),109    )110    .order("desc")111    .take(MAX_USER_SUBSCRIPTION_ROWS + 1);112  assertUserSubscriptionRowLimit(rows);113  return rows;114}115 116export function shapeSubscriptionEvaluationSnapshot(117  rows: Array<Doc<"subscriptions">>,118): {119  candidates: SubscriptionEvaluationRow[];120  fallback: SubscriptionEvaluationRow | null;121} {122  const fallback = selectMostRecentlyUpdatedSubscription(rows);123  return {124    candidates: rows125      .filter(isEntitledState)126      .map(shapeSubscriptionEvaluationRow),127    fallback: fallback ? shapeSubscriptionEvaluationRow(fallback) : null,128  };129}130 131function shapeSubscriptionEvaluationRow(132  sub: Doc<"subscriptions">,133): SubscriptionEvaluationRow {134  return {135    ...shapeSubscriptionRow(sub),136    createdAt: sub._creationTime,137  };138}139 140export function shapeSubscriptionRow(141  sub: Doc<"subscriptions">,142): SubscriptionRow {143  const row: SubscriptionRow = {144    id: sub._id,145    productId: sub.productId,146    platform: sub.platform,147    state: sub.state,148    expiresAt: sub.expiresAt,149    renewsAt: sub.renewsAt,150    willRenew: sub.willRenew,151    cancellationReason: sub.cancellationReason,152    currency: sub.currency,153    priceAmountMicros: sub.priceAmountMicros,154    startedAt: sub.startedAt,155    updatedAt: sub.updatedAt,156    purchaseToken: sub.purchaseToken,157    userId: sub.userId,158  };159 160  if (sub.platform === "IOS") {161    return {162      ...row,163      originalTransactionId: sub.purchaseToken,164    };165  }166 167  return row;168}169 170export function shapeSubscriptionV2Row(171  sub: Doc<"subscriptions">,172): SubscriptionV2Row {173  return {174    id: sub._id,175    productId: sub.productId,176    platform: sub.platform,177    state: sub.state,178    expiresAt: sub.expiresAt,179    renewsAt: sub.renewsAt,180    willRenew: sub.willRenew,181    cancellationReason: sub.cancellationReason,182    currency: sub.currency,183    priceAmountMicros: sub.priceAmountMicros,184    startedAt: sub.startedAt,185    updatedAt: sub.updatedAt,186    userId: sub.userId,187  };188}189 190async function projectByApiKey(191  ctx: QueryCtx,192  apiKey: string | undefined,193  requiredAccess: "client" | "admin" = "client",194): Promise<Doc<"projects"> | null> {195  if (!apiKey) return null;196  const resolved = await resolveProjectByApiKeyFromDb(197    ctx,198    apiKey,199    requiredAccess,200  );201  return resolved?.project ?? null;202}203 204async function requireAdminProjectByApiKey(205  ctx: QueryCtx,206  apiKey: string,207): Promise<Doc<"projects">> {208  const project = await projectByApiKey(ctx, apiKey, "admin");209  if (!project) {210    throw new ConvexError({211      code: "INVALID_API_KEY",212      message: "API key is invalid or inactive",213    });214  }215  return project;216}217 218async function projectByIdForCurrentUser(219  ctx: QueryCtx,220  projectId: Id<"projects"> | undefined,221): Promise<Doc<"projects"> | null> {222  if (!projectId) return null;223  const resolved = await resolveProjectByIdForCurrentUserFromDb(ctx, projectId);224  return resolved?.project ?? null;225}226 227async function projectForReadArgs(228  ctx: QueryCtx,229  args: {230    apiKey?: string;231    projectId?: Id<"projects">;232  },233  apiKeyAccess: "client" | "admin" = "client",234): Promise<Doc<"projects"> | null> {235  if (args.projectId) {236    return projectByIdForCurrentUser(ctx, args.projectId);237  }238 239  if (args.apiKey !== undefined) {240    return projectByApiKey(ctx, args.apiKey, apiKeyAccess);241  }242 243  throw new Error("apiKey or projectId is required.");244}245 246export interface MrrCurrencyEntry {247  currency: string;248  mrrMicros: number;249}250 251/**252 * Selects the headline MRR entry for a project's reporting currency.253 *254 * `reportingCurrency` is normalized via `normalizeReportingCurrencyOrDefault`,255 * so unknown or invalid input falls back to `DEFAULT_REPORTING_CURRENCY`.256 * If no entry matches the normalized currency, returned `mrrMicros` is `0`.257 * Returned `excludedMrrByCurrency` contains every non-reporting-currency entry.258 *259 * @param entries Per-currency MRR rows already summed for the project.260 * @param reportingCurrency Project-configured reporting currency, raw or normalized.261 * @returns The normalized `currency`, selected `mrrMicros`, and excluded rows.262 */263export function selectReportingMrr(264  entries: MrrCurrencyEntry[],265  reportingCurrency: string | null | undefined,266): {267  currency: string;268  mrrMicros: number;269  excludedMrrByCurrency: MrrCurrencyEntry[];270} {271  const normalizedReportingCurrency =272    normalizeReportingCurrencyOrDefault(reportingCurrency);273  const reportingEntry = entries.find(274    (entry) => entry.currency === normalizedReportingCurrency,275  );276 277  return {278    currency: normalizedReportingCurrency,279    mrrMicros: reportingEntry?.mrrMicros ?? 0,280    excludedMrrByCurrency: entries.filter(281      (entry) => entry.currency !== normalizedReportingCurrency,282    ),283  };284}285 286// Time-independent evaluation snapshot for the Fly HTTP boundary. It excludes287// refunded, revoked, and other historical rows except for the single latest288// fallback needed by status. State-entitled candidates may include a row whose289// expiresAt has just passed; Fly removes it with its own current clock before290// producing the public HTTP response. Convex may safely cache the snapshot and291// invalidates it when a dependent row changes.292export const subscriptionEvaluationSnapshot = query({293  args: {294    apiKey: v.string(),295    userId: v.string(),296  },297  returns: v.object({298    projectId: v.union(v.id("projects"), v.null()),299    candidates: v.array(subscriptionEvaluationRowShape),300    fallback: v.union(subscriptionEvaluationRowShape, v.null()),301  }),302  handler: async (ctx, args) => {303    const project = await projectByApiKey(ctx, args.apiKey);304    if (!project) return { projectId: null, candidates: [], fallback: null };305 306    const rows = await userSubscriptionRows(ctx, project._id, args.userId);307    return {308      projectId: project._id,309      ...shapeSubscriptionEvaluationSnapshot(rows),310    };311  },312});313 314// `/v2` account reads are server-to-server. Convex repeats the admin check and315// shapes the response without store credentials before it crosses the HTTP316// boundary.317export const subscriptionStatusV2 = query({318  args: { apiKey: v.string(), userId: v.string(), now: v.number() },319  returns: v.object({320    active: v.boolean(),321    subscription: v.union(subscriptionV2Shape, v.null()),322  }),323  handler: async (ctx, args) => {324    const project = await requireAdminProjectByApiKey(ctx, args.apiKey);325 326    const subs = await userSubscriptionRows(ctx, project._id, args.userId);327    const activeSubs = subs.filter((candidate) =>328      isActive(candidate, args.now),329    );330    const selected = selectMostRecentlyUpdatedSubscription(331      activeSubs.length > 0 ? activeSubs : subs,332    );333 334    return {335      active: activeSubs.length > 0,336      subscription: selected ? shapeSubscriptionV2Row(selected) : null,337    };338  },339});340 341export const entitlementsV2 = query({342  args: { apiKey: v.string(), userId: v.string(), now: v.number() },343  returns: v.object({344    userId: v.string(),345    productIds: v.array(v.string()),346    subscriptions: v.array(subscriptionV2Shape),347  }),348  handler: async (ctx, args) => {349    const project = await requireAdminProjectByApiKey(ctx, args.apiKey);350 351    const all = await userSubscriptionRows(ctx, project._id, args.userId);352    const active = all.filter((sub) => isActive(sub, args.now));353    return {354      userId: args.userId,355      productIds: Array.from(new Set(active.map((sub) => sub.productId))),356      subscriptions: active.map(shapeSubscriptionV2Row),357    };358  },359});360 361// Authoritative server-credential gate with no side effect and no data. The362// commerce bindPurchase handler calls this before it parses store evidence, so363// an unknown or under-scoped key is rejected (UNAUTHORIZED / FORBIDDEN) before364// it can learn which stores bind or which evidence a store requires.365export const assertServerAccess = query({366  args: { apiKey: v.string() },367  returns: v.object({ ok: v.boolean() }),368  handler: async (ctx, args) => {369    await requireAdminProjectByApiKey(ctx, args.apiKey);370    return { ok: true };371  },372});373 374export const userErasureStatusV2 = query({375  args: {376    apiKey: v.string(),377    // The id arrives from a URL path; a malformed one must read as "no such378    // job" (404), not fail argument validation into a 500.379    jobId: v.string(),380  },381  returns: v.union(382    v.null(),383    v.object({384      jobId: v.id("subscriptionUserErasureJobs"),385      status: v.union(386        v.literal("queued"),387        v.literal("running"),388        v.literal("completed"),389      ),390      subscriptionsErased: v.number(),391      commerceEventsErased: v.number(),392      createdAt: v.number(),393      updatedAt: v.number(),394      completedAt: v.optional(v.number()),395    }),396  ),397  handler: async (ctx, args) => {398    const project = await requireAdminProjectByApiKey(ctx, args.apiKey);399    const jobId = ctx.db.normalizeId("subscriptionUserErasureJobs", args.jobId);400    if (!jobId) return null;401    const job = await ctx.db.get(jobId);402    if (!job || job.projectId !== project._id) return null;403    return {404      jobId: job._id,405      status: job.status,406      subscriptionsErased: job.subscriptionsErased,407      commerceEventsErased: job.commerceEventsErased,408      createdAt: job.createdAt,409      updatedAt: job.updatedAt,410      completedAt: job.completedAt,411    };412  },413});414 415// Match onesub's `/onesub/status?userId=` — returns the most-recently-416// updated active subscription when the user is entitled, otherwise the417// most-recently-updated subscription overall, plus one `active` boolean418// for simple gating.419export const subscriptionStatus = query({420  args: { apiKey: v.string(), userId: v.string() },421  returns: v.object({422    active: v.boolean(),423    subscription: v.union(subscriptionShape, v.null()),424  }),425  handler: async (ctx, args) => {426    const project = await projectByApiKey(ctx, args.apiKey);427    if (!project) return { active: false, subscription: null };428 429    const subs = await userSubscriptionRows(ctx, project._id, args.userId);430 431    const now = Date.now();432    const activeSubs = subs.filter((candidate) => isActive(candidate, now));433    const sub = selectMostRecentlyUpdatedSubscription(434      activeSubs.length > 0 ? activeSubs : subs,435    );436    if (!sub) return { active: false, subscription: null };437 438    return {439      active: activeSubs.length > 0,440      subscription: shapeSubscriptionRow(sub),441    };442  },443});444 445// Match onesub's entitlement evaluation — every productId the user446// currently has rights to. Aggregates across all subscription rows so447// a user with multiple offers (resub, family share, cross-grade) sees448// the union.449export const entitlements = query({450  args: { apiKey: v.string(), userId: v.string() },451  returns: v.object({452    userId: v.string(),453    productIds: v.array(v.string()),454    subscriptions: v.array(subscriptionShape),455  }),456  handler: async (ctx, args) => {457    const project = await projectByApiKey(ctx, args.apiKey);458    if (!project) {459      return { userId: args.userId, productIds: [], subscriptions: [] };460    }461 462    const all = await userSubscriptionRows(ctx, project._id, args.userId);463 464    const now = Date.now();465    const active = all.filter((sub) => isActive(sub, now));466    return {467      userId: args.userId,468      productIds: Array.from(new Set(active.map((sub) => sub.productId))),469      subscriptions: active.map(shapeSubscriptionRow),470    };471  },472});473 474// Filtered list for the dashboard's subscriptions page. Mirrors475// onesub's `SubscriptionStore.listFiltered` API.476export const listSubscriptions = query({477  args: {478    apiKey: v.optional(v.string()),479    projectId: v.optional(v.id("projects")),480    state: v.optional(subscriptionStateValidator),481    productId: v.optional(v.string()),482    userId: v.optional(v.string()),483    limit: v.optional(v.number()),484  },485  returns: v.object({486    items: v.array(subscriptionShape),487    total: v.number(),488  }),489  handler: async (ctx, args) => {490    const project = await projectForReadArgs(ctx, args, "admin");491    if (!project) return { items: [], total: 0 };492 493    const limit = Math.min(Math.max(args.limit ?? 50, 1), 200);494 495    // userId path: subscriptions per user is a small population496    // (single digits in practice — a user with 50 subscriptions on a497    // single project is pathological), so we collect the entire498    // by_project_and_user slice and apply state/productId filters in499    // memory rather than throwing. Earlier behaviour rejected the500    // combo with an error, which made the dashboard "filter user X by501    // state Active" path unusable (PR #124502    // (https://github.com/hyodotdev/openiap/pull/124) review).503    if (args.userId) {504      const userRows = await ctx.db505        .query("subscriptions")506        .withIndex("by_project_and_user", (q) =>507          q.eq("projectId", project._id).eq("userId", args.userId),508        )509        .order("desc")510        .collect();511      const filtered = userRows.filter((sub) => {512        if (args.state && sub.state !== args.state) return false;513        if (args.productId && sub.productId !== args.productId) return false;514        return true;515      });516      return {517        items: filtered.slice(0, limit).map(shapeSubscriptionRow),518        total: filtered.length,519      };520    }521 522    // Pick the most-selective index for the supplied filters. Schema523    // covers single-filter combinations directly; the composite524    // (projectId, state, productId) index handles the dashboard's525    // common "filter by state and SKU" combination so we don't need526    // an over-fetch + in-memory post-filter that could miss rows527    // past the take() boundary.528    let rows: Array<Doc<"subscriptions">>;529    if (args.state && args.productId) {530      rows = await ctx.db531        .query("subscriptions")532        .withIndex("by_project_and_state_and_product", (q) =>533          q534            .eq("projectId", project._id)535            .eq("state", args.state!)536            .eq("productId", args.productId!),537        )538        .order("desc")539        .take(limit);540    } else if (args.state) {541      rows = await ctx.db542        .query("subscriptions")543        .withIndex("by_project_and_state", (q) =>544          q.eq("projectId", project._id).eq("state", args.state!),545        )546        .order("desc")547        .take(limit);548    } else if (args.productId) {549      rows = await ctx.db550        .query("subscriptions")551        .withIndex("by_project_and_product", (q) =>552          q.eq("projectId", project._id).eq("productId", args.productId!),553        )554        .order("desc")555        .take(limit);556    } else {557      rows = await ctx.db558        .query("subscriptions")559        .withIndex("by_project_and_updated", (q) =>560          q.eq("projectId", project._id),561        )562        .order("desc")563        .take(limit);564    }565 566    // All filter combinations hit an index that covers the supplied567    // columns now (the (state + productId) composite was added in568    // schema.ts), so no in-memory post-filter is needed here.569 570    // `total` reflects the filtered window we actually materialized,571    // not the full server-side count. Computing a true total would572    // require a separate aggregate scan that defeats the take() bound573    // we just put in. The dashboard treats `total` as "rows shown574    // matching the current filter" and surfaces "+ more" affordances575    // via the next page request.576    return {577      items: rows.slice(0, limit).map(shapeSubscriptionRow),578      total: rows.length,579    };580  },581});582 583// Metrics aggregation. Reads incrementally-maintained per-currency584// counters out of `subscriptionStats` for the live state buckets +585// MRR (O(currencies-per-project) — typically 1-3 rows), and bounded586// indexed scans over `by_project_and_state` for the 30-day rolling587// counters. The prior implementation took up to 10,000 subscriptions588// off the by_project_and_updated index and aggregated in memory,589// which silently undercounted projects above that cap.590//591// Migration safety: when the stats table is empty for a project592// (pre-rollout state) we fall through to a one-shot recompute via593// the same statsContributionFor logic so the dashboard stays594// correct on first read after deploy. The595// `recomputeSubscriptionStats` internal mutation populates rows for596// future reads.597export const metricsSummary = query({598  args: {599    apiKey: v.optional(v.string()),600    projectId: v.optional(v.id("projects")),601  },602  returns: v.object({603    activeSubs: v.number(),604    inGracePeriod: v.number(),605    inBillingRetry: v.number(),606    refunded30d: v.number(),607    canceled30d: v.number(),608    // Headline MRR in the project's reporting currency, normalized609    // to monthly. Historical field name kept for dashboard / MCP610    // consumers, but the value is no longer a cross-currency or611    // "most popular currency" total.612    mrrMicros: v.number(),613    currency: v.optional(v.string()),614    reportingCurrency: v.string(),615    // Full per-currency breakdown so consumers that care about616    // multi-currency aren't left guessing. Each entry's `mrrMicros`617    // is summed only over subscriptions in that currency, normalized618    // to monthly via the product's billingPeriod.619    mrrByCurrency: v.array(620      v.object({ currency: v.string(), mrrMicros: v.number() }),621    ),622    excludedMrrByCurrency: v.array(623      v.object({ currency: v.string(), mrrMicros: v.number() }),624    ),625  }),626  handler: async (ctx, args) => {627    const project = await projectForReadArgs(ctx, args, "admin");628    if (!project) {629      return {630        activeSubs: 0,631        inGracePeriod: 0,632        inBillingRetry: 0,633        refunded30d: 0,634        canceled30d: 0,635        mrrMicros: 0,636        currency: DEFAULT_REPORTING_CURRENCY,637        reportingCurrency: DEFAULT_REPORTING_CURRENCY,638        mrrByCurrency: [],639        excludedMrrByCurrency: [],640      };641    }642    const now = Date.now();643    const cutoff = now - 30 * 24 * 60 * 60 * 1000;644 645    // Live state counters + MRR — read out of the incrementally646    // maintained `subscriptionStats` table.647    const statsRows = await ctx.db648      .query("subscriptionStats")649      .withIndex("by_project", (q) => q.eq("projectId", project._id))650      .collect();651 652    let activeSubs = 0;653    let inGracePeriod = 0;654    let inBillingRetry = 0;655    const mrrAccumulators = new Map<string, number>();656 657    if (statsRows.length > 0) {658      for (const row of statsRows) {659        activeSubs += row.activeSubs;660        inGracePeriod += row.inGracePeriod;661        inBillingRetry += row.inBillingRetry;662        if (row.currency && row.mrrMicros > 0) {663          mrrAccumulators.set(664            row.currency,665            (mrrAccumulators.get(row.currency) ?? 0) + row.mrrMicros,666          );667        }668      }669    } else {670      // No stats rows yet — pre-rollout state for this project.671      // Compute on the fly so the dashboard isn't blank on first672      // read after deploy. Bounded by the same per-project scan the673      // backfill mutation does; for projects past the prior 10k cap674      // this is a one-time cost until `recomputeSubscriptionStats`675      // populates the table.676      //677      // Bounded by FALLBACK_SCAN_CAP so a project that's hugely past678      // the prior 10k scan limit can't crash the dashboard render.679      // The cap matches the previous implementation's bound; the680      // first read after deploy schedules an async backfill via the681      // drift-correction cron, after which subsequent reads come682      // out of subscriptionStats and have no scan at all.683      const FALLBACK_SCAN_CAP = 10_000;684      const periodByProductId = await loadPeriodByProductId(ctx, project._id);685      const allSubs = await ctx.db686        .query("subscriptions")687        .withIndex("by_project_and_updated", (q) =>688          q.eq("projectId", project._id),689        )690        .order("desc")691        .take(FALLBACK_SCAN_CAP);692      for (const sub of allSubs) {693        if (sub.state === "Active" && isActive(sub, now)) {694          activeSubs += 1;695          if (typeof sub.priceAmountMicros === "number" && sub.currency) {696            const monthly = monthlyMicrosForSub(697              sub,698              periodByProductId.get(sub.productId),699            );700            mrrAccumulators.set(701              sub.currency,702              (mrrAccumulators.get(sub.currency) ?? 0) + monthly,703            );704          }705        } else if (sub.state === "InGracePeriod") {706          inGracePeriod += 1;707        } else if (sub.state === "InBillingRetry") {708          inBillingRetry += 1;709        }710      }711    }712 713    // 30-day rolling counters — bounded by churn rather than by714    // historical state archive. The previous implementation walked715    // every `Refunded` row + every (Active|InGracePeriod|InBillingRetry716    // |Expired) row for the project and filtered in memory, which717    // grew unbounded as the historical archive accumulated. We now718    // do a single time-windowed scan via `by_project_and_updated`719    // with `gte(cutoff)`, then derive both refunded + canceled720    // counters in one pass. The candidate set is bounded by the721    // last 30 days of state changes (typically thousands per722    // project, never the full lifetime).723    // Cap the windowed scan so a project with > 10k state changes724    // in 30 days can't exceed Convex's 40k document-read limit. The725    // rolling counters degrade gracefully — if a project genuinely726    // hits this bound the dashboard shows an approximate count that727    // still tracks the cohort closely (this is the same trade-off728    // the previous SUBS_SCAN_CAP made for active counts, before the729    // incremental subscriptionStats path replaced it). Real-world730    // monthly churn is well under 10k for any realistic deployment.731    const ROLLING_SCAN_CAP = 10_000;732    const recentlyChanged = await ctx.db733      .query("subscriptions")734      .withIndex("by_project_and_updated", (q) =>735        q.eq("projectId", project._id).gte("updatedAt", cutoff),736      )737      .take(ROLLING_SCAN_CAP);738    let refunded30d = 0;739    let canceled30d = 0;740    const CANCELED_STATES = new Set([741      "Active",742      "InGracePeriod",743      "InBillingRetry",744      "Expired",745    ]);746    for (const sub of recentlyChanged) {747      if (sub.state === "Refunded") {748        refunded30d += 1;749      }750      if (751        sub.willRenew === false &&752        sub.cancellationReason === "UserCanceled" &&753        CANCELED_STATES.has(sub.state)754      ) {755        canceled30d += 1;756      }757    }758 759    // Sort per-currency MRR for deterministic UI rendering. The760    // headline `mrrMicros` below intentionally uses only the761    // project's reporting currency; other currencies remain visible762    // in `excludedMrrByCurrency` instead of being silently summed763    // by IAPKit.764    const sorted = Array.from(mrrAccumulators.entries()).sort(765      ([a, av], [b, bv]) => (bv !== av ? bv - av : a.localeCompare(b)),766    );767    const mrrByCurrency = sorted.map(([currency, mrrMicros]) => ({768      currency,769      mrrMicros,770    }));771    const reportingMrr = selectReportingMrr(772      mrrByCurrency,773      project.reportingCurrency,774    );775 776    return {777      activeSubs,778      inGracePeriod,779      inBillingRetry,780      refunded30d,781      canceled30d,782      mrrMicros: reportingMrr.mrrMicros,783      currency: reportingMrr.currency,784      reportingCurrency: reportingMrr.currency,785      mrrByCurrency,786      excludedMrrByCurrency: reportingMrr.excludedMrrByCurrency,787    };788  },789});790 791// Daily revenue + lifecycle metrics for the Analytics dashboard. Reads792// pre-computed rollups from `revenueMetricsDaily` (populated by the793// `recomputeAllRevenueMetrics` cron) so the dashboard never scans the794// raw webhookEvents log on render.795//796// `fromDay` and `toDay` are inclusive ISO date strings (YYYY-MM-DD,797// UTC) — same format `revenueMetricsDaily.day` is stored under, so798// the index range is a direct string comparison.799//800// Return shape: one entry per rollup row, i.e. one per801// (day, currency, productId, platform). Aggregation across rows802// happens client-side (`analytics.tsx`) so the dashboard can switch803// between filter combinations without re-querying. Summing across804// currencies is a UI-side concern — `revenueMicros` from a USD row805// and a EUR row cannot be added without an FX rate.806const platformValidator = v.union(v.literal("IOS"), v.literal("Android"));807 808export const getRevenueMetrics = query({809  args: {810    apiKey: v.optional(v.string()),811    projectId: v.optional(v.id("projects")),812    fromDay: v.string(),813    toDay: v.string(),814    // Server-side `productId` / `currency` / `platform` filters were815    // removed because the dashboard does all of that filtering816    // client-side (the unfiltered fetch is what backs the filter-817    // dropdown population — narrowing the scan would defeat that),818    // and a server-side narrowing path was incompatible with that819    // contract: when a productId was pinned the dropdowns silently820    // collapsed to that SKU's currencies / platforms only. If a821    // future caller needs server-side narrowing for a non-dashboard822    // surface, add a separate query — don't reintroduce these as823    // optional args on this one.824  },825  returns: v.object({826    days: v.array(827      v.object({828        day: v.string(),829        currency: v.string(),830        productId: v.string(),831        platform: platformValidator,832        activeSubs: v.number(),833        newSubs: v.number(),834        renewals: v.number(),835        cancellations: v.number(),836        refunds: v.number(),837        revenueMicros: v.number(),838      }),839    ),840    // Available filter values surfaced to the dashboard so the UI841    // can render dropdowns / chiclets for everything the project842    // actually has data for, without a second round-trip.843    currencies: v.array(v.string()),844    productIds: v.array(v.string()),845    platforms: v.array(platformValidator),846    // True when the underlying scan hit `REVENUE_SCAN_CAP` and the847    // returned rows are a partial view of the requested window. The848    // dashboard surfaces this as a banner so a truncated chart is849    // visible to the operator instead of silently rendering a850    // partial tail.851    truncated: v.boolean(),852  }),853  handler: async (ctx, args) => {854    const project = await projectForReadArgs(ctx, args, "admin");855    if (!project) {856      return {857        days: [],858        currencies: [],859        productIds: [],860        platforms: [],861        truncated: false,862      };863    }864 865    // Reject ranges past the dashboard's longest preset (90 days)866    // before issuing the index scan. A misbehaving client can867    // otherwise request `fromDay = "1970-01-01"` and force the868    // server to materialize every rollup row in the project. The869    // 90-day cap matches `RANGES` in `analytics.tsx`; widening870    // there should bump this in lockstep.871    const MAX_RANGE_DAYS = 92;872    if (args.fromDay > args.toDay) {873      throw new Error(874        `getRevenueMetrics: fromDay (${args.fromDay}) is after toDay (${args.toDay}).`,875      );876    }877    const fromMs = Date.parse(`${args.fromDay}T00:00:00.000Z`);878    const toMs = Date.parse(`${args.toDay}T00:00:00.000Z`);879    if (Number.isNaN(fromMs) || Number.isNaN(toMs)) {880      throw new Error(881        `getRevenueMetrics: invalid ISO date(s) fromDay=${args.fromDay} toDay=${args.toDay}.`,882      );883    }884    const spanDays = Math.round((toMs - fromMs) / 86_400_000) + 1;885    if (spanDays > MAX_RANGE_DAYS) {886      throw new Error(887        `getRevenueMetrics: span of ${spanDays} days exceeds MAX_RANGE_DAYS=${MAX_RANGE_DAYS}.`,888      );889    }890 891    // Range scan over `revenueMetricsDaily` via892    // `by_project_and_day_and_currency` (`[projectId, day, currency]`).893    // The dashboard does all filtering (currency / product /894    // platform) client-side, so we deliberately return the full895    // window — narrowing here would prune the data the dashboard896    // needs to populate its filter dropdowns.897    //898    // Capped at REVENUE_SCAN_CAP to stay under Convex's 32k899    // document-scan limit per query. A 92-day range across a900    // maximalist project (30 SKUs × 3 currencies × 2 platforms =901    // 180 rows/day → ~16.5k rows for 92 days) fits inside this902    // cap; truncation surfaces as the `truncated` flag below and903    // an amber banner on the dashboard so a partial chart is904    // never silently rendered.905    const REVENUE_SCAN_CAP = 20_000;906    const allRows = await ctx.db907      .query("revenueMetricsDaily")908      .withIndex("by_project_and_day_and_currency", (q) =>909        q910          .eq("projectId", project._id)911          .gte("day", args.fromDay)912          .lte("day", args.toDay),913      )914      .take(REVENUE_SCAN_CAP);915    const truncated = allRows.length === REVENUE_SCAN_CAP;916    if (truncated) {917      console.warn(918        `[getRevenueMetrics] revenueMetricsDaily scan hit REVENUE_SCAN_CAP=${REVENUE_SCAN_CAP} for project=${project._id} range=${args.fromDay}..${args.toDay}; chart will undercount the tail.`,919      );920    }921 922    // Populate filter-dropdown choices from the unfiltered range923    // scan so the UI can render every available currency /924    // productId / platform regardless of which filter the user925    // currently has active.926    const currencies = new Set<string>();927    const productIds = new Set<string>();928    const platforms = new Set<"IOS" | "Android">();929    for (const row of allRows) {930      if (row.currency) currencies.add(row.currency);931      productIds.add(row.productId);932      platforms.add(row.platform);933    }934 935    return {936      days: allRows.map((row) => ({937        day: row.day,938        currency: row.currency,939        productId: row.productId,940        platform: row.platform,941        activeSubs: row.activeSubs,942        newSubs: row.newSubs,943        renewals: row.renewals,944        cancellations: row.cancellations,945        refunds: row.refunds,946        revenueMicros: row.revenueMicros,947      })),948      currencies: Array.from(currencies).sort(),949      productIds: Array.from(productIds).sort(),950      platforms: Array.from(platforms).sort(),951      truncated,952    };953  },954});955 956async function loadPeriodByProductId(957  ctx: QueryCtx,958  projectId: Id<"projects">,959): Promise<Map<string, string | undefined>> {960  const periodByProductId = new Map<string, string | undefined>();961  for (const platform of ["IOS", "Android"] as const) {962    const productRows = await ctx.db963      .query("products")964      .withIndex("by_project_and_platform", (q) =>965        q.eq("projectId", projectId).eq("platform", platform),966      )967      .collect();968    for (const product of productRows) {969      if (970        !periodByProductId.has(product.productId) ||971        (periodByProductId.get(product.productId) === undefined &&972          product.billingPeriod !== undefined)973      ) {974        periodByProductId.set(product.productId, product.billingPeriod);975      }976    }977  }978  return periodByProductId;979}980 
    \ No newline at end of file diff --git a/packages/docs/public/commerce-source/kit/scripts/docs/commerce-interop-fixture.ts.html b/packages/docs/public/commerce-source/kit/scripts/docs/commerce-interop-fixture.ts.html new file mode 100644 index 000000000..1a18a9aa6 --- /dev/null +++ b/packages/docs/public/commerce-source/kit/scripts/docs/commerce-interop-fixture.ts.html @@ -0,0 +1 @@ +IAPKit · scripts/docs/commerce-interop-fixture.ts
    ← Provider replacement walkthrough

    IAPKit · scripts/docs/commerce-interop-fixture.ts

    Source snapshot · 2026-09-08

    SHA-256 cb06b02f482a052134c9a9b17c92e9abae6fc35fed1fddb4b6ad0563d6c437be
    1import {2  internalMutation,3  internalQuery,4  internalAction,5} from "./_generated/server";6import { internal } from "./_generated/api";7import { v } from "convex/values";8import { apiKeyStorageFields } from "./apiKeys/helpers";9 10export const seed = internalMutation({11  args: {12    secret: v.string(),13    key: v.string(),14    publishable: v.string(),15    storageId: v.id("_storage"),16  },17  handler: async (ctx, args) => {18    const now = Date.now();19    const userId = await ctx.db.insert("users", {});20    const organizationId = await ctx.db.insert("organizations", {21      name: "Local interop",22      slug: crypto.randomUUID(),23      createdAt: now,24      updatedAt: now,25    });26    const projectId = await ctx.db.insert("projects", {27      organizationId,28      name: "Local interop",29      slug: crypto.randomUUID(),30      apiKey: "disabled",31      legacyApiKeyFallbackDisabledAt: now,32      androidPackageName: "dev.openiap.interop",33      iosBundleId: "dev.openiap.interop",34      iosAppAppleId: 123456789,35      iosAppStoreIssuerId: "local-issuer",36      iosAppStoreKeyId: "local-key",37      horizonEnabled: true,38      horizonAppId: "1234567890",39      horizonAppSecret: "local-fixture-secret",40      amazonSandboxEnabled: true,41      amazonSharedSecret: "local-fixture-secret",42      createdAt: now,43      updatedAt: now,44    });45    for (const [key, keyType] of [46      [args.key, "secret"],47      [args.publishable, "publishable"],48    ] as const)49      await ctx.db.insert("apiKeys", {50        organizationId,51        projectId,52        ...(await apiKeyStorageFields(key, keyType)),53        name: "Local fixture",54        keyType,55        isActive: true,56        createdBy: userId,57        createdAt: now,58        updatedAt: now,59      });60    const fileId = await ctx.db.insert("files", {61      organizationId,62      projectId,63      uploadedBy: userId,64      storageId: args.storageId,65      fileName: "local-fixture.json",66      fileType: "application/json",67      fileSize: 0,68      purpose: "android_service_account",69      isInternal: true,70      createdAt: now,71      updatedAt: now,72    });73    await ctx.db.patch(projectId, { googlePlayServiceAccountFileId: fileId });74    await ctx.db.insert("outboundDestinations", {75      projectId,76      url: "https://receiver.example.com/commerce",77      secret: args.secret,78      enabled: true,79      createdAt: now,80      updatedAt: now,81    });82    return { projectId };83  },84});85export const setup = internalAction({86  args: { secret: v.string(), key: v.string(), publishable: v.string() },87  handler: async (ctx, args) => {88    const storageId = await ctx.storage.store(89      new Blob(90        [91          JSON.stringify({92            type: "service_account",93            project_id: "local-fixture",94            private_key:95              "-----BEGIN PRIVATE KEY-----\nfixture only\n-----END PRIVATE KEY-----",96            client_email: "fixture@local-test.iam.gserviceaccount.com",97          }),98        ],99        { type: "application/json" },100      ),101    );102    return ctx.runMutation(internal.interopFixture.seed, {103      ...args,104      storageId,105    });106  },107});108export const inspect = internalQuery({109  args: { projectId: v.id("projects") },110  handler: async (ctx, { projectId }) => ({111    purchases: await ctx.db112      .query("purchases")113      .withIndex("by_project", (q) => q.eq("projectId", projectId))114      .collect(),115    subscriptions: await ctx.db116      .query("subscriptions")117      .withIndex("by_project", (q) => q.eq("projectId", projectId))118      .collect(),119    events: await ctx.db120      .query("commerceEvents")121      .withIndex("by_project", (q) => q.eq("projectId", projectId))122      .collect(),123    jobs: await ctx.db124      .query("subscriptionUserErasureJobs")125      .withIndex("by_project", (q) => q.eq("projectId", projectId))126      .collect(),127    deliveries: await ctx.db128      .query("outboundDeliveries")129      .withIndex("by_project", (q) => q.eq("projectId", projectId))130      .collect(),131  }),132});133 
    \ No newline at end of file diff --git a/packages/docs/public/commerce-source/kit/scripts/docs/commerce-source-snapshot.mjs.html b/packages/docs/public/commerce-source/kit/scripts/docs/commerce-source-snapshot.mjs.html new file mode 100644 index 000000000..ec63e6a8f --- /dev/null +++ b/packages/docs/public/commerce-source/kit/scripts/docs/commerce-source-snapshot.mjs.html @@ -0,0 +1 @@ +IAPKit · scripts/docs/commerce-source-snapshot.mjs
    ← Provider replacement walkthrough

    IAPKit · scripts/docs/commerce-source-snapshot.mjs

    Source snapshot · 2026-09-08

    SHA-256 36facd09bb63335cd68efa9c78da5ec10e11aa3bc61cd8bdbcd4d64c31e4293a
    1import assert from "node:assert/strict";2import { createHash } from "node:crypto";3import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs";4import { dirname, join } from "node:path";5 6const hash = (bytes) => createHash("sha256").update(bytes).digest("hex");7 8export function assertSourceHashes(root, hashes, { allowMissing = [] } = {}) {9  assert(10    hashes && Object.keys(hashes).length > 0,11    `Missing source fingerprints: ${root}`,12  );13  assert(14    allowMissing.every(15      (name) => /(^|\/)_?generated\//.test(name) && Object.hasOwn(hashes, name),16    ),17    "Only recorded generated inputs may be absent",18  );19  const missing = [];20  for (const [name, expected] of Object.entries(hashes)) {21    const path = join(root, name);22    if (allowMissing.includes(name) && !existsSync(path)) {23      missing.push(name);24      continue;25    }26    assert.equal(27      hash(readFileSync(path)),28      expected,29      `Source input changed during execution or since recording: ${name}`,30    );31  }32  return missing;33}34 35export function pinSources(root, files) {36  const names = () => [...new Set(files())].sort();37  const contents = new Map(38    names().map((name) => [name, readFileSync(join(root, name))]),39  );40  const hashes = Object.freeze(41    Object.fromEntries(42      [...contents].map(([name, bytes]) => [name, hash(bytes)]),43    ),44  );45  return {46    hashes,47    write(name, target) {48      assert(contents.has(name), `Source was not pinned: ${name}`);49      mkdirSync(dirname(target), { recursive: true });50      writeFileSync(target, contents.get(name));51    },52    assertUnchanged() {53      assert.deepEqual(54        names(),55        Object.keys(hashes),56        `Source input inventory changed during execution: ${root}`,57      );58      assertSourceHashes(root, hashes);59    },60  };61}62 
    \ No newline at end of file diff --git a/packages/docs/public/commerce-source/kit/scripts/docs/commerce-store-coverage.mjs.html b/packages/docs/public/commerce-source/kit/scripts/docs/commerce-store-coverage.mjs.html new file mode 100644 index 000000000..9cf536208 --- /dev/null +++ b/packages/docs/public/commerce-source/kit/scripts/docs/commerce-store-coverage.mjs.html @@ -0,0 +1 @@ +IAPKit · scripts/docs/commerce-store-coverage.mjs
    ← Provider replacement walkthrough

    IAPKit · scripts/docs/commerce-store-coverage.mjs

    Source snapshot · 2026-09-08

    SHA-256 a60eb6a2dc880672726b7a7894e59cabf59370f12e4edddb53cb17ba2ca880a9
    1import assert from "node:assert/strict";2import { join } from "node:path";3 4// Invoked only inside run-commerce-interop's isolated deployment.5export async function runStoreCoverage({6  example,7  output,8  key,9  kitUrl,10  receiver,11  appleJws,12  storeState,13  inspect,14  check,15  trace,16}) {17  const { createProvider, CREDENTIALS } = await import(18    join(example, "provider.mjs")19  );20  const { createCommerceClient } = await import(21    join(example, "composition/commerce-client.mjs")22  );23  const { startAppBackend } = await import(24    join(example, "composition/app-backend.mjs")25  );26  const kit = createCommerceClient({27    baseUrl: kitUrl,28    credential: `Bearer ${key}`,29  });30  let sqlite;31  const providerServer = Bun.serve({32    hostname: "127.0.0.1",33    port: 0,34    fetch: (request) => sqlite.fetch(request),35  });36  const exampleUrl = `http://127.0.0.1:${providerServer.port}`;37  const fixtureClient = createCommerceClient({38    baseUrl: exampleUrl,39    credential: CREDENTIALS.server,40  });41  const app = startAppBackend({42    path: join(output, "all-stores-app.sqlite"),43    receiver,44    providers: {45      example: { baseUrl: exampleUrl, credential: CREDENTIALS.server },46      iapkit: { baseUrl: kitUrl, credential: `Bearer ${key}` },47    },48    resolveSession: (request) =>49      request.headers.get("authorization")?.replace("Bearer ", ""),50    resolveStoreUser: (request, store) =>51      request.headers.get("authorization") === `Bearer store_${store}`52        ? `store-user-${store}`53        : null,54  });55  const endpoints = [app.url, receiver.url];56  const results = {};57  async function request(58    store,59    path,60    method = "GET",61    input,62    session = `store_${store}`,63  ) {64    const response = await fetch(app.url + path, {65      method,66      headers: {67        authorization: `Bearer ${session}`,68        "content-type": "application/json",69      },70      ...(input ? { body: JSON.stringify(input) } : {}),71    });72    const result = await response.json().catch(() => null);73    trace.push({ store, path, method, status: response.status, result });74    return { status: response.status, result };75  }76  try {77    for (const store of ["apple", "amazon", "horizon"]) {78      const input =79        store === "apple"80          ? { store, apple: { jws: appleJws } }81          : store === "amazon"82            ? {83                store,84                amazon: {85                  userId: "store-user-amazon",86                  receiptId: "local-amazon-receipt",87                  sandbox: true,88                },89              }90            : {91                store,92                horizon: {93                  userId: "store-user-horizon",94                  sku: "premium.monthly",95                },96              };97      const userId = `store_${store}`;98      const evidence =99        store === "apple"100          ? appleJws101          : store === "amazon"102            ? JSON.stringify([103                input.amazon.userId,104                input.amazon.receiptId,105                true,106              ])107            : JSON.stringify([input.horizon.userId, input.horizon.sku]);108      const fixture = {109        store,110        evidence,111        userId,112        productId: "premium.monthly",113        startsAt: Date.now(),114        expiresAt: Date.now() + 3600000,115        pointInTime: store !== "apple",116        currentVerdict: () => storeState[store],117      };118      sqlite = createProvider(119        join(output, `store-${store}.sqlite`),120        Date.now,121        fixture,122      );123      results[store] = {};124      for (const [name, client] of [125        ["example", fixtureClient],126        ["iapkit", kit],127      ]) {128        app.select(name);129        check(130          `${store}/${name}: keeps the same app and receiver`,131          [app.url, receiver.url],132          endpoints,133        );134        const before = await client.call("entitlements", { userId });135        check(`${store}/${name}: starts without access`, before.productIds, []);136        check(137          `${store}/${name}: unverified evidence cannot bind`,138          (await client.call("bindPurchase", { ...input, userId })).bound,139          false,140        );141        const verified = await client.call("verifyPurchase", input);142        check(143          `${store}/${name}: verifies the store-specific input`,144          verified.isValid,145          true,146        );147        check(148          `${store}/${name}: verification alone grants no account access`,149          (await client.call("entitlements", { userId })).productIds,150          [],151        );152        const bought = await request(store, "/purchase", "POST", input);153        check(`${store}/${name}: app purchase succeeds`, bought.status, 200);154        check(155          `${store}/${name}: app receives access`,156          bought.result?.productIds,157          ["premium.monthly"],158        );159        check(160          `${store}/${name}: binding is repeatable`,161          (await client.call("bindPurchase", { ...input, userId })).bound,162          true,163        );164        check(165          `${store}/${name}: another account cannot claim the purchase`,166          (await client.call("bindPurchase", { ...input, userId: "store_bob" }))167            .bound,168          false,169        );170        const access = await client.call("entitlements", { userId });171        check(172          `${store}/${name}: access includes only verified products`,173          access.productIds,174          ["premium.monthly"],175        );176        check(177          `${store}/${name}: tokenless access does not leak store evidence`,178          JSON.stringify(access).includes("store-user-") ||179            JSON.stringify(access).includes("local-amazon-receipt"),180          false,181        );182        if (store !== "apple") {183          check(184            `${store}/${name}: does not invent subscription lifecycle records`,185            access.subscriptions,186            [],187          );188          const forged = {189            store,190            [store]: { ...input[store], userId: "someone-else" },191          };192          check(193            `${store}/${name}: rejects another store account in the app session`,194            (await request(store, "/purchase", "POST", forged)).status,195            403,196          );197          storeState[store] = "outage";198          check(199            `${store}/${name}: an upstream outage fails the access read`,200            (await request(store, "/access")).status,201            503,202          );203          storeState[store] = false;204          check(205            `${store}/${name}: a negative store recheck removes access`,206            (await client.call("entitlements", { userId })).productIds,207            [],208          );209          storeState[store] = true;210          check(211            `${store}/${name}: rechecked ownership restores access`,212            (await client.call("entitlements", { userId })).productIds,213            ["premium.monthly"],214          );215        }216        results[store][name] = {217          verified: verified.isValid,218          productIds: access.productIds,219          subscriptions: access.subscriptions.length,220          storeRecheck: store !== "apple",221        };222      }223      app.select("example");224      check(225        `${store}: switching back needs no consumer edit`,226        (await request(store, "/access")).result.productIds,227        ["premium.monthly"],228      );229      const deleted = await request(store, "/account", "DELETE");230      check(231        `${store}: the app accepts account erasure`,232        deleted.result?.accepted,233        true,234      );235      let pending = 1;236      for (let attempt = 0; attempt < 100 && pending; attempt++) {237        pending = await app.drainErasure();238        if (pending) await Bun.sleep(100);239      }240      check(`${store}: both providers complete erasure`, pending, 0);241      for (const [name, client] of [242        ["example", fixtureClient],243        ["iapkit", kit],244      ]) {245        check(246          `${store}/${name}: erased account has no access`,247          (await client.call("entitlements", { userId })).productIds,248          [],249        );250        check(251          `${store}/${name}: erased evidence cannot bind again`,252          (await client.call("bindPurchase", { ...input, userId })).bound,253          false,254        );255      }256      check(257        `${store}: an erased session cannot submit another purchase`,258        (await request(store, "/purchase", "POST", input)).status,259        401,260      );261      const state = await inspect();262      check(263        `${store}: IAPKit removes account identity from persisted purchases`,264        state.purchases.some((row) => row.appUserId === userId),265        false,266      );267      sqlite.close();268      sqlite = null;269    }270    assert.equal(Object.keys(results).length, 3);271    return results;272  } finally {273    await app.close();274    await providerServer.stop(true);275    sqlite?.close();276  }277}278 
    \ No newline at end of file diff --git a/packages/docs/public/commerce-source/kit/scripts/docs/run-commerce-interop.mjs.html b/packages/docs/public/commerce-source/kit/scripts/docs/run-commerce-interop.mjs.html new file mode 100644 index 000000000..0d11233b8 --- /dev/null +++ b/packages/docs/public/commerce-source/kit/scripts/docs/run-commerce-interop.mjs.html @@ -0,0 +1 @@ +IAPKit · scripts/docs/run-commerce-interop.mjs
    ← Provider replacement walkthrough

    IAPKit · scripts/docs/run-commerce-interop.mjs

    Source snapshot · 2026-09-08

    SHA-256 943cbbce2d4fca94659e6646494ef1091bc4a1140a4ba7be6d233605755dd8d9
    1import assert from "node:assert/strict";2import { mock } from "bun:test";3import {4  existsSync,5  mkdirSync,6  mkdtempSync,7  readFileSync,8  rmSync,9  writeFileSync,10  symlinkSync,11} from "node:fs";12import { tmpdir } from "node:os";13import { join, resolve } from "node:path";14import { createHash, randomBytes } from "node:crypto";15import { ConvexHttpClient } from "convex/browser";16import { anyApi, getFunctionName } from "convex/server";17import { Hono } from "hono";18import { pinSources } from "./commerce-source-snapshot.mjs";19 20const kit = resolve(import.meta.dir, "../..");21const repo = resolve(kit, "../..");22const example = resolve(23  process.argv[2] ?? join(repo, "../openiap-commerce-protocol-example"),24);25const revision = (cwd) => {26  const result = Bun.spawnSync(["git", "rev-parse", "HEAD"], { cwd });27  assert.equal(result.exitCode, 0, "Cannot identify source revision");28  return result.stdout.toString().trim();29};30const revisions = { openiap: revision(repo), example: revision(example) };31const unchangedFiles = [32  "composition/app-backend.mjs",33  "composition/commerce-client.mjs",34  "consumer.mjs",35  "webhooks.mjs",36  "erasure.mjs",37  "contract.mjs",38];39const inputs = {40  openiap: pinSources(kit, () => [41    ...new Bun.Glob("{server,convex}/**/*.{ts,js,json}").scanSync({ cwd: kit }),42    "src/convex.ts",43    "convex.json",44    "tsconfig.json",45    "package.json",46  ]),47  example: pinSources(example, () => [48    ...unchangedFiles,49    ...new Bun.Glob("*.mjs").scanSync({ cwd: example }),50    ...new Bun.Glob("composition/**/*.mjs").scanSync({ cwd: example }),51    "README.md",52    "package.json",53    "package-lock.json",54  ]),55  harness: pinSources(import.meta.dir, () => [56    "run-commerce-interop.mjs",57    "commerce-interop-fixture.ts",58    "commerce-store-coverage.mjs",59    "commerce-source-snapshot.mjs",60  ]),61  workspace: pinSources(repo, () => [62    "bun.lock",63    "package.json",64    "packages/mcp-server/package.json",65    "packages/mcp-server/src/kit-client.ts",66    "specs/commerce-protocol/package.json",67    ...new Bun.Glob(68      "specs/commerce-protocol/{src,generated,examples}/**/*.{mjs,js,json}",69    ).scanSync({ cwd: repo }),70  ]),71};72const before = Object.fromEntries(73  unchangedFiles.map((name) => [name, inputs.example.hashes[name]]),74);75function optionalGeneratedFiles(root, hashes) {76  const result = Bun.spawnSync(["git", "check-ignore", "--stdin"], {77    cwd: root,78    stdin: Buffer.from(Object.keys(hashes).join("\n") + "\n"),79  });80  assert([0, 1].includes(result.exitCode), "Cannot identify generated inputs");81  return result.stdout82    .toString()83    .trim()84    .split("\n")85    .filter((name) => /(^|\/)_?generated\//.test(name));86}87const optionalInputs = {88  openiap: optionalGeneratedFiles(kit, inputs.openiap.hashes),89  workspace: optionalGeneratedFiles(repo, inputs.workspace.hashes),90};91const output = resolve(92  process.argv[3] ?? mkdtempSync(join(tmpdir(), "commerce-interop-")),93);94const deployment = join(output, "local-convex");95mkdirSync(deployment, { recursive: true });96assert(97  !existsSync(join(deployment, ".env.local")),98  "Use a new output directory; a run must start empty.",99);100// Unrelated image processing and maintenance entry points stay out of the isolated deployment.101for (const name of Object.keys(inputs.openiap.hashes))102  if (103    (name.startsWith("convex/") ||104      ["convex.json", "tsconfig.json"].includes(name)) &&105    !["convex/crons.ts", "convex/files/action.ts"].includes(name)106  )107    inputs.openiap.write(name, join(deployment, name));108inputs.harness.write(109  "commerce-interop-fixture.ts",110  join(deployment, "convex/interopFixture.ts"),111);112symlinkSync(join(kit, "node_modules"), join(deployment, "node_modules"), "dir");113writeFileSync(114  join(deployment, "package.json"),115  JSON.stringify({116    name: "commerce-interop-local",117    type: "module",118    dependencies: { convex: "1.44.0" },119  }),120);121const env = { ...process.env };122for (const key of Object.keys(env))123  if (124    key.startsWith("CONVEX_") ||125    key.startsWith("VITE_KIT_CONVEX_") ||126    key === "VITE_CONVEX_URL"127  )128    delete env[key];129env.CONVEX_AGENT_MODE = "anonymous";130const logPath = join(output, "convex.log");131let convexProcess;132async function boot() {133  writeFileSync(logPath, "");134  convexProcess = Bun.spawn(135    [136      process.execPath,137      join(kit, "node_modules/convex/bin/main.js"),138      "dev",139      "--typecheck",140      "disable",141      "--codegen",142      "disable",143      "--tail-logs",144      "disable",145      "--local-backend-version",146      "precompiled-2026-08-25-7cce8fb",147    ],148    {149      cwd: deployment,150      env,151      stdout: Bun.file(logPath),152      stderr: Bun.file(logPath),153    },154  );155  for (let i = 0; i < 600; i++) {156    if (readFileSync(logPath, "utf8").includes("Convex functions ready!"))157      return;158    if (convexProcess.exitCode !== null)159      throw new Error(`Local Convex exited; inspect ${logPath}`);160    await Bun.sleep(250);161  }162  throw new Error(`Local Convex did not become ready; inspect ${logPath}`);163}164async function stop() {165  if (convexProcess) {166    convexProcess.kill("SIGINT");167    await convexProcess.exited;168  }169}170const checks = [],171  trace = [],172  results = {173    example: { label: "openiap-commerce-protocol-example" },174    iapkit: { label: "IAPKit" },175  };176function check(label, actual, expected) {177  assert.deepEqual(actual, expected, label);178  checks.push(label);179  console.log(`PASS ${label}`);180}181const hash = (path) =>182  createHash("sha256").update(readFileSync(path)).digest("hex");183let appServer, receiver, sqlite, sqliteServer, kitServer;184try {185  await boot();186  const config = JSON.parse(187    readFileSync(join(deployment, ".convex/local/default/config.json"), "utf8"),188  );189  const convexUrl = `http://127.0.0.1:${config.ports.cloud}`;190  assert.equal(new URL(convexUrl).hostname, "127.0.0.1");191  process.env.VITE_KIT_CONVEX_URL = convexUrl;192  const admin = new ConvexHttpClient(convexUrl);193  admin.setAdminAuth(config.adminKey);194  const ctx = {195    runQuery: admin.query.bind(admin),196    runMutation: admin.mutation.bind(admin),197    runAction: admin.action.bind(admin),198  };199  const secret = randomBytes(32).toString("hex");200  const exampleSecret = randomBytes(32).toString("hex");201  const key = "openiap-kit_sk_" + randomBytes(24).toString("hex"),202    publishable = "openiap-kit_pk_" + randomBytes(24).toString("hex");203  const seeded = await admin.action(anyApi.interopFixture.setup, {204    secret,205    key,206    publishable,207  });208  const startedAt = Date.now(),209    expiresAt = startedAt + 45000,210    token = "local-interop-google-token",211    userId = "interop_alice",212    productId = "premium.monthly";213  let googleState = "SUBSCRIPTION_STATE_ACTIVE";214  mock.module("googleapis", () => ({215    google: {216      auth: { GoogleAuth: class {} },217      androidpublisher: () => ({218        purchases: {219          productsv2: {220            getproductpurchasev2: async () => {221              throw { code: 404 };222            },223          },224          subscriptionsv2: {225            get: async ({ token: received }) => {226              if (received !== token) throw { code: 404 };227              return {228                data: {229                  subscriptionState: googleState,230                  startTime: new Date(startedAt - 60000).toISOString(),231                  acknowledgementState: "ACKNOWLEDGEMENT_STATE_ACKNOWLEDGED",232                  latestOrderId: "GPA.local-fixture",233                  testPurchase: {},234                  lineItems: [235                    {236                      productId,237                      expiryTime: new Date(expiresAt).toISOString(),238                      autoRenewingPlan: {239                        autoRenewEnabled:240                          googleState === "SUBSCRIPTION_STATE_ACTIVE",241                        recurringPrice: { currencyCode: "USD", units: "5" },242                      },243                    },244                  ],245                },246              };247            },248          },249        },250      }),251    },252  }));253  mock.module("google-auth-library", () => ({254    OAuth2Client: class {255      async verifyIdToken() {256        return {257          getPayload: () => ({258            email: "fixture@local-test.iam.gserviceaccount.com",259            email_verified: true,260          }),261        };262      }263    },264  }));265  process.env.GOOGLE_PUBSUB_AUDIENCE = "https://kit.example.com";266  const storeState = { apple: true, amazon: true, horizon: true };267  const applePayload = {268    transactionId: "90000000000001",269    originalTransactionId: "90000000000001",270    bundleId: "dev.openiap.interop",271    productId,272    type: "Auto-Renewable Subscription",273    environment: "Sandbox",274    purchaseDate: Date.now(),275    expiresDate: Date.now() + 3600000,276  };277  const appleJws = [278    Buffer.from('{"alg":"ES256"}').toString("base64url"),279    Buffer.from(JSON.stringify(applePayload)).toString("base64url"),280    "Zml4dHVyZQ",281  ].join(".");282  const appleLibrary = await import("@apple/app-store-server-library");283  mock.module("@apple/app-store-server-library", () => ({284    ...appleLibrary,285    AppStoreServerAPIClient: class {286      async getTransactionInfo(id) {287        assert.equal(id, applePayload.transactionId);288        return { signedTransactionInfo: appleJws };289      }290    },291    SignedDataVerifier: class {292      async verifyAndDecodeTransaction(jws) {293        assert.equal(jws, appleJws);294        return applePayload;295      }296    },297  }));298  const nativeFetch = globalThis.fetch;299  globalThis.fetch = async (url, init) => {300    const target = new URL(301      typeof url === "string" || url instanceof URL ? url : url.url,302    );303    if (target.hostname === "graph.oculus.com") {304      assert.equal(target.pathname, "/1234567890/verify_entitlement");305      const form = new URLSearchParams(init.body);306      assert.equal(form.get("user_id"), "store-user-horizon");307      assert.equal(form.get("sku"), productId);308      if (storeState.horizon === "outage")309        return Response.json({}, { status: 400 });310      return Response.json({311        success: storeState.horizon,312        grant_time: Math.floor(Date.now() / 1000),313      });314    }315    if (target.hostname === "appstore-sdk.amazon.com") {316      assert(target.pathname.includes("/sandbox/"));317      assert(318        target.pathname.endsWith(319          "/user/store-user-amazon/receiptId/local-amazon-receipt",320        ),321      );322      if (storeState.amazon === "outage")323        return Response.json({}, { status: 496 });324      return Response.json({325        receiptId: "local-amazon-receipt",326        productId,327        productType: "SUBSCRIPTION",328        purchaseDate: Date.now() - 60000,329        cancelDate: storeState.amazon ? null : Date.now(),330        testTransaction: true,331      });332    }333    return nativeFetch(url, init);334  };335  const nativeRunAction = ctx.runAction;336  ctx.runAction = (ref, args) =>337    getFunctionName(ref) === "files/internal:getAppleP8Key"338      ? Promise.resolve({ keyContent: "local-fixture-key" })339      : nativeRunAction(ref, args);340  const { verifyAppStoreReceiptInternalV1 } =341    await import("../../convex/purchases/ios.ts");342  const { verifyAmazonReceiptInternalV1 } =343    await import("../../convex/purchases/amazon.ts");344  const { verifyMetaHorizonReceiptInternalV1 } =345    await import("../../convex/purchases/horizon.ts");346  const { readBoundPurchaseEntitlements } =347    await import("../../convex/purchases/action.ts");348  const { verifyGooglePlayReceiptInternalV1 } =349    await import("../../convex/purchases/android.ts");350  const { ingestGoogleRtdn } = await import("../../convex/webhooks/google.ts");351  const { deliverPendingEventsHandler } =352    await import("../../convex/commerce/delivery.ts");353  const { client } = await import("../../server/convex.ts");354  const realAction = client.action.bind(client);355  const fixtureActions = {356    "purchases/android:verifyGooglePlayReceiptInternalV1":357      verifyGooglePlayReceiptInternalV1,358    "purchases/ios:verifyAppStoreReceiptInternalV1":359      verifyAppStoreReceiptInternalV1,360    "purchases/amazon:verifyAmazonReceiptInternalV1":361      verifyAmazonReceiptInternalV1,362    "purchases/horizon:verifyMetaHorizonReceiptInternalV1":363      verifyMetaHorizonReceiptInternalV1,364    "purchases/action:readBoundPurchaseEntitlements":365      readBoundPurchaseEntitlements,366  };367  client.action = (ref, args) =>368    fixtureActions[getFunctionName(ref)]369      ? fixtureActions[getFunctionName(ref)]._handler(ctx, args)370      : realAction(ref, args);371  const { commerceRoutes } =372    await import("../../server/api/commerce/routes.ts");373  kitServer = Bun.serve({374    hostname: "127.0.0.1",375    port: 0,376    fetch: new Hono().route("/commerce/v1", commerceRoutes).fetch,377  });378  const { createProvider, CREDENTIALS } = await import(379    join(example, "provider.mjs")380  );381  const { startConsumer } = await import(join(example, "consumer.mjs"));382  const { startAppBackend } = await import(383    join(example, "composition/app-backend.mjs")384  );385  const { createCommerceClient } = await import(386    join(example, "composition/commerce-client.mjs")387  );388  const { deliver } = await import(join(example, "webhooks.mjs"));389  const fixture = {390    store: "google",391    evidence: token,392    userId,393    productId,394    startsAt: startedAt - 60000,395    expiresAt,396  };397  const sqlitePath = join(output, "provider.sqlite");398  sqlite = createProvider(sqlitePath, Date.now, fixture);399  sqliteServer = Bun.serve({400    hostname: "127.0.0.1",401    port: 0,402    fetch: (request) => sqlite.fetch(request),403  });404  receiver = startConsumer({405    secret: [406      { name: "example", projectId: "commerce_example", secret: exampleSecret },407      { name: "iapkit", projectId: seeded.projectId, secret },408    ],409    path: join(output, "receiver.sqlite"),410  });411  const providers = {412    example: {413      baseUrl: `http://127.0.0.1:${sqliteServer.port}`,414      credential: CREDENTIALS.server,415    },416    iapkit: {417      baseUrl: `http://127.0.0.1:${kitServer.port}`,418      credential: `Bearer ${key}`,419    },420  };421  const sessions = new Map([422    ["Bearer local-alice", userId],423    ["Bearer local-bob", "interop_bob"],424  ]);425  appServer = startAppBackend({426    path: join(output, "app.sqlite"),427    providers,428    receiver,429    resolveSession: (request) =>430      sessions.get(request.headers.get("authorization")),431  });432  const appUrl = appServer.url,433    receiverUrl = receiver.url;434  const evidence = { store: "google", google: { purchaseToken: token } };435  const clients = Object.fromEntries(436    Object.entries(providers).map(([name, cfg]) => [437      name,438      createCommerceClient(cfg),439    ]),440  );441  let current = "example";442  async function appCall(443    path,444    method = "GET",445    body,446    session = "Bearer local-alice",447  ) {448    const response = await fetch(appServer.url + path, {449      method,450      headers: { authorization: session, "content-type": "application/json" },451      ...(body ? { body: JSON.stringify(body) } : {}),452    });453    const result = await response.json().catch(() => null);454    trace.push({455      provider: current,456      path,457      method,458      status: response.status,459      result,460    });461    return { status: response.status, result };462  }463  function select(name) {464    current = name;465    appServer.select(name);466    check(467      `${name}: app and receiver endpoints remain unchanged`,468      [appServer.url, receiver.url],469      [appUrl, receiverUrl],470    );471  }472  const rawEvents = [];473  async function receive(init) {474    rawEvents.push(init);475    return fetch(receiver.url, { ...init, method: "POST" });476  }477  async function drain(name, fail = false) {478    return name === "example"479      ? deliver(sqlite, exampleSecret, Date.now, (init) =>480          fail481            ? Promise.resolve(new Response(null, { status: 503 }))482            : receive(init),483        )484      : deliverPendingEventsHandler(ctx, async (req) =>485          fail486            ? 503487            : (await receive({ headers: req.headers, body: req.body })).status,488        );489  }490  async function observe(kind, id = kind) {491    googleState =492      kind === "expire"493        ? "SUBSCRIPTION_STATE_EXPIRED"494        : kind === "cancel"495          ? "SUBSCRIPTION_STATE_CANCELED"496          : "SUBSCRIPTION_STATE_ACTIVE";497    return ingestGoogleRtdn._handler(ctx, {498      apiKey: publishable,499      oidcToken: "local-fixture-oidc",500      rawMessage: "local-fixture",501      payload: {502        messageId: id,503        packageName: "dev.openiap.interop",504        eventTimeMillis: Date.now(),505        subscriptionNotification: {506          notificationType: kind === "expire" ? 13 : kind === "cancel" ? 3 : 4,507          purchaseToken: token,508          subscriptionId: productId,509        },510      },511    });512  }513  for (const name of Object.keys(providers)) {514    select(name);515    results[name].before = (await appCall("/access")).result;516    check(517      `${name}: empty provider gives no access`,518      results[name].before.productIds,519      [],520    );521    check(522      `${name}: actual verification accepts fixture`,523      (await clients[name].call("verifyPurchase", evidence)).isValid,524      true,525    );526    check(527      `${name}: verification alone does not grant access`,528      (await appCall("/access")).result.productIds,529      [],530    );531    results[name].bound = (532      await appCall("/purchase", "POST", {533        ...evidence,534        userId: "attacker_supplied",535      })536    ).result;537    check(538      `${name}: unchanged app fulfills the purchase`,539      results[name].bound.productIds,540      [productId],541    );542    check(543      `${name}: repeated fulfillment is idempotent`,544      (await appCall("/purchase", "POST", evidence)).result.productIds,545      [productId],546    );547    check(548      `${name}: body cannot select account identity`,549      (550        await clients[name].call("entitlements", {551          userId: "attacker_supplied",552        })553      ).productIds,554      [],555    );556    check(557      `${name}: another user cannot claim the purchase`,558      (559        await clients[name].call("bindPurchase", {560          ...evidence,561          userId: "interop_bob",562        })563      ).bound,564      false,565    );566    const credential =567      name === "example" ? CREDENTIALS.verification : `Bearer ${publishable}`;568    const r = await fetch(569      providers[name].baseUrl + "/commerce/v1/users/erase",570      {571        method: "POST",572        headers: {573          authorization: credential,574          "content-type": "application/json",575        },576        body: JSON.stringify({ userId }),577      },578    );579    check(580      `${name}: publishable verification credentials cannot erase`,581      r.status,582      403,583    );584    if (name === "iapkit") await observe("start");585    await drain(name);586    check(587      `${name}: same receiver persists an authenticated grant`,588      receiver589        .inspect()590        .some(591          (event) =>592            event.projectId ===593              (name === "example" ? "commerce_example" : seeded.projectId) &&594            event.eventType === "entitlement.granted" &&595            event.userId === userId,596        ),597      true,598    );599    if (name === "example")600      sqlite.observe({ id: "cancel", kind: "cancel", occurredAt: Date.now() });601    else await observe("cancel");602    const state = await clients[name].call("subscriptionStatus", { userId });603    results[name].canceled = state;604    check(605      `${name}: cancellation stops renewal but keeps paid access`,606      [state.active, state.subscription.willRenew],607      [true, false],608    );609    await drain(name, true);610  }611  select("example");612  check(613    "Switching back restores the same persisted access",614    (await appCall("/access")).result.productIds,615    [productId],616  );617  const pendingBefore = await admin.query(618    anyApi.interopFixture.inspect,619    seeded,620  );621  check(622    "IAPKit 503 leaves a durable pending delivery",623    pendingBefore.deliveries.some(624      (row) => row.status === "pending" && row.attempts === 1,625    ),626    true,627  );628  console.log(629    "Restarting the actual local Convex process and SQLite provider with retries pending.",630  );631  await stop();632  await boot();633  sqlite.close();634  sqlite = createProvider(sqlitePath, Date.now, fixture);635  check(636    "IAPKit pending deliveries survive process restart",637    (await admin.query(anyApi.interopFixture.inspect, seeded)).deliveries,638    pendingBefore.deliveries,639  );640  await Bun.sleep(Math.max(0, startedAt + 34000 - Date.now()));641  for (const name of Object.keys(providers)) await drain(name);642  for (const projectId of ["commerce_example", seeded.projectId])643    check(644      `${projectId === "commerce_example" ? "example" : "iapkit"}: cancellation retry reaches unchanged receiver`,645      receiver646        .inspect()647        .some(648          (event) =>649            event.projectId === projectId &&650            event.eventType === "subscription.canceled",651        ),652      true,653    );654  const count = receiver.count();655  receiver.reopen();656  for (const init of rawEvents.slice()) await receive(init);657  check(658    "Lost acknowledgements and receiver restart create no duplicate effects",659    receiver.count(),660    count,661  );662  console.log("Waiting for the actual paid expiry deadline.");663  await Bun.sleep(Math.max(0, expiresAt + 10 - Date.now()));664  for (const name of Object.keys(providers)) {665    select(name);666    results[name].expired = (await appCall("/access")).result;667    check(668      `${name}: access expires before a store notification`,669      results[name].expired.productIds,670      [],671    );672  }673  sqlite.observe({ id: "expire", kind: "expire", occurredAt: Date.now() });674  await observe("expire");675  check(676    "Repeated IAPKit store notification is deduplicated",677    (await observe("expire")).deduped,678    true,679  );680  for (const name of Object.keys(providers)) await drain(name);681  for (const projectId of ["commerce_example", seeded.projectId])682    check(683      `${projectId === "commerce_example" ? "example" : "iapkit"}: receiver observes revocation`,684      receiver685        .inspect()686        .some(687          (event) =>688            event.projectId === projectId &&689            event.eventType === "entitlement.revoked",690        ),691      true,692    );693  check(694    "App account deletion is accepted",695    (await appCall("/account", "DELETE")).result.accepted,696    true,697  );698  for (let i = 0; i < 80 && (await appServer.drainErasure()); i++)699    await Bun.sleep(100);700  check(701    "App completes erasure across both configured providers",702    await appServer.drainErasure(),703    0,704  );705  check(706    "Deleted session cannot submit a late purchase",707    (await appCall("/purchase", "POST", evidence)).status,708    401,709  );710  for (const name of Object.keys(providers)) {711    results[name].erased = await clients[name].call("entitlements", { userId });712    check(713      `${name}: erased user has no access`,714      results[name].erased.productIds,715      [],716    );717    const first = await clients[name].call("eraseUser", { userId }),718      again = await clients[name].call("eraseUser", { userId });719    results[name].erasure = again;720    check(721      `${name}: repeated erasure returns the same completed job`,722      [first.status, again.jobId],723      ["completed", first.jobId],724    );725  }726  const erasedState = await admin.query(anyApi.interopFixture.inspect, seeded);727  check(728    "IAPKit persisted subscription, event and job identities are removed",729    JSON.stringify(erasedState).includes(userId),730    false,731  );732  check(733    "Example purchase identity is removed",734    sqlite.inspect().purchases[0].userId,735    null,736  );737  check(738    "Previously delivered app event identities are removed",739    receiver.inspect().some((event) => event.userId === userId),740    false,741  );742  receiver.reopen();743  for (const init of rawEvents.slice()) await receive(init);744  check(745    "Late signed redeliveries after erasure and restart cannot restore identities",746    receiver.inspect().some((event) => event.userId === userId),747    false,748  );749  check(750    "Consumer source files are byte-for-byte unchanged during replacement",751    Object.fromEntries(752      unchangedFiles.map((name) => [name, hash(join(example, name))]),753    ),754    before,755  );756  const { runStoreCoverage } = await import("./commerce-store-coverage.mjs");757  const storeCoverage = await runStoreCoverage({758    example,759    output,760    key,761    kitUrl: `http://127.0.0.1:${kitServer.port}`,762    receiver,763    appleJws,764    storeState,765    inspect: () =>766      admin.query(anyApi.interopFixture.inspect, {767        projectId: seeded.projectId,768      }),769    check,770    trace,771  });772  for (const snapshot of Object.values(inputs)) snapshot.assertUnchanged();773  check(774    "Source revisions remain unchanged throughout execution",775    { openiap: revision(repo), example: revision(example) },776    revisions,777  );778  const report = {779    results,780    storeCoverage,781    harnessHashes: inputs.harness.hashes,782    sources: {783      openiap: {784        baseRevision: revisions.openiap,785        hashes: inputs.openiap.hashes,786        optionalGeneratedFiles: optionalInputs.openiap,787      },788      example: {789        baseRevision: revisions.example,790        hashes: inputs.example.hashes,791      },792      workspace: {793        baseRevision: revisions.openiap,794        hashes: inputs.workspace.hashes,795        optionalGeneratedFiles: optionalInputs.workspace,796      },797    },798    runtime: {799      bun: Bun.version,800      convex: JSON.parse(801        readFileSync(join(kit, "node_modules/convex/package.json"), "utf8"),802      ).version,803    },804    command:805      "bun --conditions=openiap-source packages/kit/scripts/docs/run-commerce-interop.mjs ../openiap-commerce-protocol-example <new-output-directory>",806    configurationChanges: [807      "Commerce base URL and server credential",808      "Separate webhook signing keys, each bound to its provider and project",809      "Example fixture store adapter configured to recognize the same synthetic Google token",810    ],811    recordedAt: new Date().toISOString(),812    checks,813    checkCount: checks.length,814    trace,815    consumerHashes: before,816    changedConsumerFiles: [],817    providerOrder: ["example", "iapkit", "example"],818    backendVersion: config.backendVersion,819    scope: {820      actual: [821        "IAPKit Hono routes and handlers",822        "Apple, Google, Amazon and Horizon verification action bodies; Google RTDN action",823        "Amazon and Horizon stored purchase binding, fresh ownership reads and erasure",824        "Convex persistence, authorization, subscription transitions, erasure scheduler and delivery leases",825        "IAPKit outbound signing and result recording",826        "Original example SQLite provider",827        "One app backend and one receiver, real loopback HTTP",828        "Actual Convex process restart with pending deliveries",829      ],830      fixtures: [831        "Google Play HTTP and OIDC, Amazon RVS and Meta Graph responses",832        "Apple signed-transaction verifier, Server API and test signing-key loader at their external boundaries",833        "Paid subscription and app sessions",834        "HTTPS destination transport redirected to the loopback receiver through the existing worker injection",835      ],836      excluded: [837        "Real store purchase, device SDK integration and store cryptographic verification",838        "Public HTTPS DNS/TLS delivery",839        "Automatic migration of existing purchases between providers",840        "Unrelated image processing and scheduled maintenance crons",841      ],842    },843  };844  writeFileSync(845    join(output, "report.json"),846    JSON.stringify(report, null, 2) + "\n",847  );848  console.log(849    `Completed ${checks.length} checks. Report: ${join(output, "report.json")}`,850  );851} catch (error) {852  writeFileSync(853    join(output, "failure.json"),854    JSON.stringify(855      {856        recordedAt: new Date().toISOString(),857        completedChecks: checks,858        assertion: error.message,859      },860      null,861      2,862    ) + "\n",863  );864  throw error;865} finally {866  await appServer?.close();867  await receiver?.close();868  await sqliteServer?.stop(true);869  sqlite?.close();870  await kitServer?.stop(true);871  await stop();872}873 
    \ No newline at end of file diff --git a/packages/docs/public/commerce-source/kit/server/api/commerce/conformance.test.ts.html b/packages/docs/public/commerce-source/kit/server/api/commerce/conformance.test.ts.html new file mode 100644 index 000000000..1d4e7bdce --- /dev/null +++ b/packages/docs/public/commerce-source/kit/server/api/commerce/conformance.test.ts.html @@ -0,0 +1 @@ +IAPKit · server/api/commerce/conformance.test.ts
    ← Provider replacement walkthrough

    IAPKit · server/api/commerce/conformance.test.ts

    Source snapshot · 2026-09-08

    SHA-256 899281919296be4f38de4e6b48b059b6e0a6cca90558bc3758dc9bcd559e1435
    1// IAPKit's dual-binding conformance proof: the spec package's portable runner2// drives the real commerce routes — REST and GraphQL, through the real3// adapters, shared handlers, auth, and validation — against an in-memory4// Convex substitute seeded from the runner's own fixtures. Store credentials5// are not involved; SPEC.md 11.3 scopes what this certifies.6 7import { beforeEach, describe, expect, it, vi } from "vitest";8import { Hono } from "hono";9import Ajv from "ajv/dist/2020";10import {11  createGraphqlAdapter,12  createRestAdapter,13  operationVectors,14  runConformance,15} from "openiap-commerce-protocol/conformance";16 17import {18  CONTENT_TYPE,19  DELIVERY_ID_HEADER,20  EVENT_ID_HEADER,21  SIGNATURE_HEADER,22  SIGNATURE_TOLERANCE_SECONDS,23  TIMESTAMP_HEADER,24  isRetryableStatus,25  signPayload,26  signPayloadWithRotation,27} from "../../../convex/commerce/signing";28import {29  commerceEventTypesToEmit,30  type CommerceEventType,31} from "../../../convex/commerce/contract";32import { isEntitledAt } from "../../../convex/subscriptions/query";33 34// IAPKit's descriptor declares the events profile, so dual-binding conformance35// drives the EventsAdapter surface (SPEC.md §11.2/§11.3 scope its coverage;36// §9.2/§9.3/§9.4.4/§9.4.5 are certified by IAPKit's own convex tests, not37// here). What delegates to SHIPPED code: sign/rotation (signPayload,38// signPayloadWithRotation), response classification (isRetryableStatus), the39// emission rules (commerceEventTypesToEmit), the entitlement gate40// (isEntitledAt), and the envelope constants (CONTENT_TYPE, the four header41// names, the tolerance). The production envelope SENDER lives in42// convex/commerce/delivery.ts and is covered by its own tests; this adapter43// re-composes the same envelope from those shipped constants because the44// worker's composition is not factored as a callable unit. Only `verify` has45// no production counterpart at all — IAPKit emits webhooks, consumers verify46// them — so it is written here from the same constants.47const iapkitEventsAdapter = {48  sign: ({49    secret,50    timestamp,51    body,52  }: {53    secret: string;54    timestamp: number;55    body: string;56  }) => signPayload(secret, timestamp, body),57  verify: async ({58    body,59    timestamp,60    signature,61    secrets,62    now,63  }: {64    body: string;65    timestamp: number;66    signature: string;67    secrets: string[];68    now: number;69  }) => {70    if (Math.abs(now - timestamp) > SIGNATURE_TOLERANCE_SECONDS) return false;71    const held = await Promise.all(72      secrets.map((secret) => signPayload(secret, timestamp, body)),73    );74    return signature75      .split(",")76      .map((part) => part.trim())77      .some((presented) => held.includes(presented));78  },79  delivery: async ({80    event,81    body,82    timestamp,83    secrets,84    deliveryId,85  }: {86    event: { eventId: string };87    body: string;88    timestamp: number;89    secrets: string[];90    deliveryId: string;91  }) => ({92    // POST is how delivery.ts sends (postJsonToAddress) — there is no method93    // constant to import; the content type IS the shipped constant.94    method: "POST",95    contentType: CONTENT_TYPE,96    headers: {97      [SIGNATURE_HEADER]: await signPayloadWithRotation(98        { current: secrets[0], previous: secrets[1] },99        timestamp,100        body,101      ),102      [TIMESTAMP_HEADER]: String(timestamp),103      [EVENT_ID_HEADER]: event.eventId,104      [DELIVERY_ID_HEADER]: deliveryId,105    },106  }),107  classifyResponse: (status: number | "connection-error" | "timeout") => {108    // The real worker's fetch catch path retries on timeout/connection error.109    if (status === "connection-error" || status === "timeout") return "retry";110    if (status >= 200 && status < 300) return "delivered";111    if (isRetryableStatus(status)) return "retry";112    return "permanent-failure";113  },114  entitled: ({115    state,116    expiresAt,117    processedAt,118  }: {119    state: string;120    expiresAt?: number;121    processedAt: number;122  }) => isEntitledAt(state, expiresAt, processedAt),123  emission: ({124    lifecycleEvent,125    entitledBefore,126    entitledAfter,127  }: {128    lifecycleEvent: string | null;129    entitledBefore: boolean;130    entitledAfter: boolean;131  }) =>132    commerceEventTypesToEmit({133      lifecycleType: (lifecycleEvent ?? null) as CommerceEventType | null,134      active: entitledAfter,135      previouslyActive: entitledBefore,136      hasBoundUser: true,137    }),138  coalesceAtBinding: ({ entitledAtBinding }: { entitledAtBinding: boolean }) =>139    commerceEventTypesToEmit({140      lifecycleType: null,141      active: entitledAtBinding,142      previouslyActive: false,143      hasBoundUser: true,144    }),145};146 147const FIXTURES = operationVectors.fixtures as {148  userId: string;149  erasureUserId: string;150  appleJws: string;151  googlePurchaseToken: string;152};153 154const mocks = vi.hoisted(() => ({155  action: vi.fn(),156  mutation: vi.fn(),157  query: vi.fn(),158  handleConvexError: vi.fn(),159}));160 161vi.mock("@/convex", () => ({162  api: {163    purchases: {164      action: {165        readBoundPurchaseEntitlements: "readBoundPurchaseEntitlements",166      },167      mutation: {168        bindVerifiedPurchaseAsServer: "bindVerifiedPurchaseAsServer",169      },170      ios: { verifyAppStoreReceiptInternalV1: "verifyApple" },171      android: { verifyGooglePlayReceiptInternalV1: "verifyGoogle" },172      horizon: { verifyMetaHorizonReceiptInternalV1: "verifyHorizon" },173      amazon: { verifyAmazonReceiptInternalV1: "verifyAmazon" },174    },175    subscriptions: {176      query: {177        subscriptionStatusV2: "subscriptionStatusV2",178        entitlementsV2: "entitlementsV2",179        assertServerAccess: "assertServerAccess",180      },181      mutation: {182        bindUserAsServer: "bindUserAsServer",183        requestUserErasure: "requestUserErasure",184      },185    },186  },187}));188 189vi.mock("../../convex", () => ({190  client: {191    action: mocks.action,192    mutation: mocks.mutation,193    query: mocks.query,194  },195  handleConvexError: mocks.handleConvexError,196}));197 198const { commerceRoutes } = await import("./routes");199 200const CREDENTIALS = {201  verification: "openiap-kit_pk_conformance",202  server: "openiap-kit_sk_conformance",203};204const BASE_URL = "https://kit.conformance.example";205 206function buildApp(): Hono {207  const app = new Hono();208  app.route("/commerce/v1", commerceRoutes);209  return app;210}211 212// A ConvexError the real key check would throw, so an unknown key becomes213// UNAUTHORIZED and a publishable key on a server op becomes FORBIDDEN — the214// authoritative classification the edge prefix check cannot make.215class FakeConvexError extends Error {216  constructor(readonly data: { code: string; message: string }) {217    super(data.message);218  }219}220 221function assertKnownKey(apiKey: unknown): void {222  if (apiKey !== CREDENTIALS.verification && apiKey !== CREDENTIALS.server) {223    throw new FakeConvexError({224      code: "INVALID_API_KEY",225      message: "API key is invalid or inactive",226    });227  }228}229 230function assertServerKey(apiKey: unknown): void {231  assertKnownKey(apiKey);232  if (apiKey !== CREDENTIALS.server) {233    throw new FakeConvexError({234      code: "INSUFFICIENT_SCOPE",235      message: "This operation requires a secret admin key",236    });237  }238}239 240function seedConvexFixtures() {241  const now = Date.now();242  // Shaped like the real subscriptionV2Shape, id included, so the test proves243  // the handler strips the provider-internal id from tokenless responses.244  const row = {245    id: "subscriptions:mock-row-1",246    productId: "premium.monthly",247    platform: "Android" as const,248    state: "Active",249    expiresAt: now + 30 * 86_400_000,250    willRenew: true,251    startedAt: now - 86_400_000,252    updatedAt: now - 1_000,253  };254 255  mocks.handleConvexError.mockImplementation((error: unknown) =>256    error instanceof FakeConvexError ? error.data : null,257  );258 259  mocks.action.mockImplementation(async (name: unknown, args: unknown) => {260    assertKnownKey((args as { apiKey: string }).apiKey);261    if (name === "readBoundPurchaseEntitlements") {262      assertServerKey((args as { apiKey: string }).apiKey);263      return { productIds: [] };264    }265    return {266      isValid: true,267      state: "ENTITLED",268      productId: "premium.monthly",269      environment: name === "verifyGoogle" ? "Production" : "Sandbox",270    };271  });272 273  mocks.query.mockImplementation(async (name: unknown, args: unknown) => {274    const { apiKey, userId } = args as { apiKey: string; userId: string };275    assertServerKey(apiKey);276    if (name === "assertServerAccess") {277      return { ok: true };278    }279    const owned = userId === FIXTURES.userId;280    if (name === "subscriptionStatusV2") {281      return { active: owned, subscription: owned ? row : null };282    }283    if (name === "entitlementsV2") {284      return {285        userId,286        productIds: owned ? [row.productId] : [],287        subscriptions: owned ? [row] : [],288      };289    }290    throw new Error(`unexpected query ${String(name)}`);291  });292 293  const erasureJobs = new Map<string, { jobId: string; status: string }>();294  mocks.mutation.mockImplementation(async (name: unknown, args: unknown) => {295    const { apiKey } = args as { apiKey: string };296    assertServerKey(apiKey);297    if (name === "bindVerifiedPurchaseAsServer") return { bound: false };298    if (name === "bindUserAsServer") {299      const { purchaseToken, userId } = args as {300        purchaseToken: string;301        userId: string;302      };303      return {304        ok: true,305        bound:306          purchaseToken === FIXTURES.googlePurchaseToken &&307          userId === FIXTURES.userId,308      };309    }310    if (name === "requestUserErasure") {311      const { userId } = args as { userId: string };312      const job = erasureJobs.get(userId) ?? {313        jobId: `job-${erasureJobs.size + 1}`,314        status: "queued",315      };316      erasureJobs.set(userId, job);317      return { ok: true, ...job };318    }319    throw new Error(`unexpected mutation ${String(name)}`);320  });321}322 323describe("IAPKit dual-binding conformance", () => {324  beforeEach(() => {325    mocks.action.mockReset();326    mocks.mutation.mockReset();327    mocks.query.mockReset();328    mocks.handleConvexError.mockReset();329    mocks.handleConvexError.mockReturnValue(null);330    seedConvexFixtures();331  });332 333  it("passes every operation vector on both bindings with cross-binding parity", async () => {334    const app = buildApp();335    const fetchApp = async (url: string, options?: RequestInit) =>336      app.request(url, options);337 338    const report = await runConformance({339      adapters: [340        createRestAdapter({341          baseUrl: BASE_URL,342          fetch: fetchApp,343          credentials: CREDENTIALS,344        }),345        createGraphqlAdapter({346          url: `${BASE_URL}/commerce/v1/graphql`,347          fetch: fetchApp,348          credentials: CREDENTIALS,349        }),350      ],351      Ajv,352      eventsAdapter: iapkitEventsAdapter,353      credentials: CREDENTIALS,354    });355 356    expect(report.results.filter((result) => !result.ok)).toEqual([]);357    // The declared events profile was actually verified, not silently skipped.358    expect(359      report.results.some((r) => r.id === "events.profile-verification"),360    ).toBe(true);361    expect(report.parityFailures).toEqual([]);362    expect(report.ok).toBe(true);363    const bindings = new Set(report.results.map((result) => result.binding));364    expect([...bindings].sort()).toEqual(["graphql", "rest"]);365  });366 367  it("keeps the served capability descriptor equal to the published one, minus the comment", async () => {368    const app = buildApp();369    const response = await app.request("/commerce/v1/capabilities");370    expect(response.status).toBe(200);371    const served = await response.json();372    const { $comment, ...published } = (373      await import("openiap-commerce-protocol/examples/provider-capabilities.json")374    ).default as Record<string, unknown>;375    expect($comment).toBeTruthy();376    expect(served).toEqual(published);377  });378});379 
    \ No newline at end of file diff --git a/packages/docs/public/commerce-source/kit/server/api/commerce/graphql.ts.html b/packages/docs/public/commerce-source/kit/server/api/commerce/graphql.ts.html new file mode 100644 index 000000000..c4eae05dc --- /dev/null +++ b/packages/docs/public/commerce-source/kit/server/api/commerce/graphql.ts.html @@ -0,0 +1 @@ +IAPKit · server/api/commerce/graphql.ts
    ← Provider replacement walkthrough

    IAPKit · server/api/commerce/graphql.ts

    Source snapshot · 2026-09-08

    SHA-256 8c45733a958c875d5a123e4fd0b1fa56981f9adb0fc6c80104fb4ce6727448e2
    1// The portable GraphQL binding: one POST endpoint executing the generated2// schema projection. Resolvers only adapt transport — auth context, variable3// unpacking, and error mapping — and delegate to the shared handlers.4 5import {6  buildSchema,7  execute,8  GraphQLError,9  Kind,10  OperationTypeNode,11  parse,12  validate,13  type DocumentNode,14  type OperationDefinitionNode,15  type SelectionSetNode,16} from "graphql";17import HTTP_BINDING from "openiap-commerce-protocol/generated/bindings/http-binding.json";18import operationsSdl from "openiap-commerce-protocol/generated/bindings/operations-sdl.json";19 20import { ProtocolOperationError } from "./errors";21import * as handlers from "./handlers";22import type { ProtocolContext } from "./handlers";23import { validateOperationInput } from "./validation";24 25// The projection is generated from the SDL; serving anything else would fail26// the introspection-agreement rule in SPEC.md 7.27export const commerceGraphqlSchema = buildSchema(operationsSdl.sdl);28 29// Bounds chosen far above the canonical documents and the standard30// introspection query, far below anything abusive.31const MAX_QUERY_DEPTH = 20;32const MAX_FIELD_NODES = 1_000;33 34type CommerceRole = "none" | "verification" | "server";35 36export interface GraphqlRequestContext {37  role: CommerceRole | null;38  apiKey?: string;39  requestIp?: string;40}41 42const operationAuth = new Map(43  HTTP_BINDING.operations.map((operation) => [operation.name, operation.auth]),44);45 46function assertRole(operationName: string, context: GraphqlRequestContext) {47  const required = operationAuth.get(operationName);48  if (required === "none" || required === undefined) return;49  if (context.role === null) {50    throw new GraphQLError("A credential is required", {51      extensions: { code: "UNAUTHORIZED" },52    });53  }54  if (required === "server" && context.role !== "server") {55    throw new GraphQLError("This operation requires the server role", {56      extensions: { code: "FORBIDDEN" },57    });58  }59}60 61function protocolContext(context: GraphqlRequestContext): ProtocolContext {62  if (!context.apiKey) {63    throw new GraphQLError("A credential is required", {64      extensions: { code: "UNAUTHORIZED" },65    });66  }67  return { apiKey: context.apiKey, requestIp: context.requestIp };68}69 70async function resolve<T>(71  operationName: string,72  context: GraphqlRequestContext,73  input: unknown,74  run: (input: never) => Promise<T> | T,75): Promise<T> {76  assertRole(operationName, context);77  // Server-role authoritative auth already ran in executeCommerceGraphql,78  // BEFORE execute() — graphql-js coerces variables before any resolver, so79  // an auth check here would come after input validation (SPEC.md 5 forbids80  // that ordering for server operations).81  // The same generated JSON Schema the REST binding enforces. GraphQL's own82  // coercion does not check the custom scalars' patterns and bounds, so83  // without this the bindings would disagree on CONTENT bounds (SPEC.md 8).84  // Structural asymmetry is different and documented: REST ignores an unknown85  // input member (SPEC.md 6) while GraphQL rejects one at coercion (SPEC.md 7).86  if (input !== undefined) {87    const invalid = validateOperationInput(operationName, input);88    if (invalid) {89      throw new GraphQLError(invalid, {90        extensions: { code: "INVALID_REQUEST" },91      });92    }93  }94  try {95    return await run(input as never);96  } catch (error) {97    if (error instanceof GraphQLError) throw error;98    if (error instanceof ProtocolOperationError) {99      throw new GraphQLError(error.message, {100        extensions: {101          code: error.code,102          ...(error.retryAfterSec === undefined103            ? {}104            : { retryAfterSec: error.retryAfterSec }),105        },106      });107    }108    throw new GraphQLError("The operation failed", {109      extensions: { code: "INTERNAL_ERROR" },110    });111  }112}113 114// buildSchema attaches no resolvers, so the root value carries one function115// per operation; nested members resolve off plain handler results.116const rootValue = {117  providerCapabilities: (118    _args: unknown,119    context: GraphqlRequestContext,120  ): Promise<unknown> =>121    resolve("providerCapabilities", context, undefined, () =>122      handlers.providerCapabilities(),123    ),124  subscriptionStatus: (125    args: { input: { userId: string } },126    context: GraphqlRequestContext,127  ): Promise<unknown> =>128    resolve("subscriptionStatus", context, args.input, (input) =>129      handlers.subscriptionStatus(protocolContext(context), input),130    ),131  entitlements: (132    args: { input: { userId: string } },133    context: GraphqlRequestContext,134  ): Promise<unknown> =>135    resolve("entitlements", context, args.input, (input) =>136      handlers.entitlements(protocolContext(context), input),137    ),138  verifyPurchase: (139    args: { input: Parameters<typeof handlers.verifyPurchase>[1] },140    context: GraphqlRequestContext,141  ): Promise<unknown> =>142    resolve("verifyPurchase", context, args.input, (input) =>143      handlers.verifyPurchase(protocolContext(context), input),144    ),145  bindPurchase: (146    args: { input: Parameters<typeof handlers.bindPurchase>[1] },147    context: GraphqlRequestContext,148  ): Promise<unknown> =>149    resolve("bindPurchase", context, args.input, (input) =>150      handlers.bindPurchase(protocolContext(context), input),151    ),152  eraseUser: (153    args: { input: { userId: string } },154    context: GraphqlRequestContext,155  ): Promise<unknown> =>156    resolve("eraseUser", context, args.input, (input) =>157      handlers.eraseUser(protocolContext(context), input),158    ),159};160 161function boundsError(document: DocumentNode): string | null {162  const operations = document.definitions.filter(163    (definition): definition is OperationDefinitionNode =>164      definition.kind === Kind.OPERATION_DEFINITION,165  );166  if (operations.length !== 1) {167    return "Send exactly one operation per request";168  }169  const operation = operations[0];170  if (operation.operation === OperationTypeNode.SUBSCRIPTION) {171    return "The GraphQL binding serves no subscriptions";172  }173 174  const fragments = new Map<string, SelectionSetNode>();175  for (const definition of document.definitions) {176    if (definition.kind === Kind.FRAGMENT_DEFINITION) {177      fragments.set(definition.name.value, definition.selectionSet);178    }179  }180 181  // Count actual selections after expanding inline and named fragments, so an182  // aliased amplification hidden inside `... on Query { a b c }` or a fragment183  // spread is counted at the level it really executes. Crucially the walk184  // ABORTS the instant any bound is exceeded, and a total node-visit budget185  // hard-caps the work: a fragment DAG (f0 spreads f1 twice, f1 spreads f2186  // twice, …) expands exponentially, so fully expanding it before checking is187  // itself the DoS. Early exit plus the visit budget keep the cost linear in188  // the budget regardless of how the DAG is shaped.189  const MAX_VISITS = 10_000;190  let fields = 0;191  let rootFields = 0;192  let visits = 0;193  const seenFragments = new Set<string>();194  const walk = (195    selectionSet: SelectionSetNode | undefined,196    depth: number,197  ): string | null => {198    if (depth > MAX_QUERY_DEPTH) return "Query is too deep";199    if (!selectionSet?.selections) return null;200    for (const selection of selectionSet.selections) {201      if (++visits > MAX_VISITS) return "Query is too complex";202      if (selection.kind === Kind.FIELD) {203        fields += 1;204        if (fields > MAX_FIELD_NODES) return "Query selects too many fields";205        if (depth === 1) {206          rootFields += 1;207          if (rootFields > 1) {208            return "Send exactly one operation field per request";209          }210        }211        const nested = walk(selection.selectionSet, depth + 1);212        if (nested) return nested;213      } else if (selection.kind === Kind.INLINE_FRAGMENT) {214        // An inline fragment does not add a level: its members select on the215        // same object at the current depth.216        const nested = walk(selection.selectionSet, depth);217        if (nested) return nested;218      } else {219        const name = selection.name.value;220        if (seenFragments.has(name)) continue; // cycle guard221        seenFragments.add(name);222        const nested = walk(fragments.get(name), depth);223        seenFragments.delete(name);224        if (nested) return nested;225      }226    }227    return null;228  };229  const exceeded = walk(operation.selectionSet, 1);230  if (exceeded) return exceeded;231 232  // A field-free operation (only fragment spreads that resolve to nothing) is233  // not one operation field.234  if (rootFields !== 1) return "Send exactly one operation field per request";235  return null;236}237 238function errorPayload(code: string, message: string) {239  return { errors: [{ message, extensions: { code } }] };240}241 242// graphql-js parse/validation/coercion messages embed the submitted document243// and variable VALUES verbatim — a coercion error on VerifyPurchaseInput244// echoes the whole JWS back to an unauthenticated caller, which SPEC.md 8245// forbids (no store evidence or signed payloads in messages). Request-level246// failures therefore answer with fixed text; the caller reproduces the detail247// locally against the published projection.248const PARSE_MESSAGE = "The GraphQL document does not parse";249const VALIDATION_MESSAGE = "The GraphQL document is not valid for the schema";250const COERCION_MESSAGE =251  "The request variables are not valid for the operation";252 253/**254 * The single root operation field, resolved through fragment spreads. Only255 * called after boundsError enforced exactly one operation with exactly one256 * root field, so the first field found is the operation being invoked.257 */258function rootFieldName(document: DocumentNode): string | null {259  const operations = document.definitions.filter(260    (definition): definition is OperationDefinitionNode =>261      definition.kind === Kind.OPERATION_DEFINITION,262  );263  const operation = operations[0];264  if (!operation) return null;265  const fragments = new Map<string, SelectionSetNode>();266  for (const definition of document.definitions) {267    if (definition.kind === Kind.FRAGMENT_DEFINITION) {268      fragments.set(definition.name.value, definition.selectionSet);269    }270  }271  const seen = new Set<string>();272  const find = (selectionSet?: SelectionSetNode): string | null => {273    for (const selection of selectionSet?.selections ?? []) {274      if (selection.kind === Kind.FIELD) return selection.name.value;275      if (selection.kind === Kind.INLINE_FRAGMENT) {276        const found = find(selection.selectionSet);277        if (found) return found;278      } else if (selection.kind === Kind.FRAGMENT_SPREAD) {279        const name = selection.name.value;280        if (seen.has(name)) continue;281        seen.add(name);282        const found = find(fragments.get(name));283        if (found) return found;284      }285    }286    return null;287  };288  return find(operation.selectionSet);289}290 291/**292 * Executes one GraphQL request against the projection. Returns the JSON body293 * and status; operation failures are 200 responses whose errors carry the294 * protocol code, per SPEC.md 7.295 */296export async function executeCommerceGraphql(297  payload: unknown,298  context: GraphqlRequestContext,299): Promise<{ status: 200; body: unknown }> {300  // SPEC.md 7: the GraphQL binding answers with HTTP 200 and the code in301  // errors[].extensions.code for every failure, including request-level ones.302  if (payload === null || typeof payload !== "object") {303    return {304      status: 200,305      body: errorPayload("INVALID_REQUEST", "Request body is not JSON"),306    };307  }308  const { query, variables, operationName } = payload as {309    query?: unknown;310    variables?: unknown;311    operationName?: unknown;312  };313  if (typeof query !== "string" || query.length === 0) {314    return {315      status: 200,316      body: errorPayload("INVALID_REQUEST", "query is required"),317    };318  }319 320  let document: DocumentNode;321  try {322    document = parse(query);323  } catch {324    // A syntax message can echo document text, and evidence pasted as a325    // literal is document text — fixed message only.326    return {327      status: 200,328      body: errorPayload("INVALID_REQUEST", PARSE_MESSAGE),329    };330  }331 332  const bounds = boundsError(document);333  if (bounds) {334    return { status: 200, body: errorPayload("INVALID_REQUEST", bounds) };335  }336 337  const validationErrors = validate(commerceGraphqlSchema, document);338  if (validationErrors.length) {339    // Literal-coercion validation errors echo the submitted value.340    return {341      status: 200,342      body: errorPayload("INVALID_REQUEST", VALIDATION_MESSAGE),343    };344  }345 346  // SPEC.md 5: server-role authorization precedes input validation, and347  // graphql-js coerces variables BEFORE any resolver runs — so the resolver is348  // too late. Authorize here, after transport-shape checks (parse, bounds,349  // validate) and before execute(), where coercion happens.350  const operationField = rootFieldName(document);351  if (operationField && operationAuth.get(operationField) === "server") {352    if (context.role === null) {353      return {354        status: 200,355        body: errorPayload("UNAUTHORIZED", "A credential is required"),356      };357    }358    if (context.role !== "server") {359      return {360        status: 200,361        body: errorPayload(362          "FORBIDDEN",363          "This operation requires the server role",364        ),365      };366    }367    try {368      await handlers.assertServerCredential({369        apiKey: context.apiKey ?? "",370        requestIp: context.requestIp,371      });372    } catch (error) {373      if (error instanceof ProtocolOperationError) {374        return { status: 200, body: errorPayload(error.code, error.message) };375      }376      return {377        status: 200,378        body: errorPayload("INTERNAL_ERROR", "The operation failed"),379      };380    }381  }382 383  const result = await execute({384    schema: commerceGraphqlSchema,385    document,386    rootValue,387    contextValue: context,388    variableValues:389      variables && typeof variables === "object"390        ? (variables as Record<string, unknown>)391        : undefined,392    operationName: typeof operationName === "string" ? operationName : null,393  });394 395  return {396    status: 200,397    body: {398      ...(result.data === undefined ? {} : { data: result.data }),399      ...(result.errors?.length400        ? {401            errors: result.errors.map((error) => {402              const coded = typeof error.extensions?.code === "string";403              return {404                // A codeless error here is graphql-js variable coercion,405                // whose message echoes the submitted value — replace it.406                // Resolver-raised errors carry a code and a safe message.407                message: coded ? error.message : COERCION_MESSAGE,408                extensions: {409                  code: coded410                    ? (error.extensions.code as string)411                    : "INVALID_REQUEST",412                  ...(typeof error.extensions?.retryAfterSec === "number"413                    ? { retryAfterSec: error.extensions.retryAfterSec }414                    : {}),415                },416              };417            }),418          }419        : {}),420    },421  };422}423 
    \ No newline at end of file diff --git a/packages/docs/public/commerce-source/kit/server/api/commerce/handlers.ts.html b/packages/docs/public/commerce-source/kit/server/api/commerce/handlers.ts.html new file mode 100644 index 000000000..e41ebce45 --- /dev/null +++ b/packages/docs/public/commerce-source/kit/server/api/commerce/handlers.ts.html @@ -0,0 +1 @@ +IAPKit · server/api/commerce/handlers.ts
    ← Provider replacement walkthrough

    IAPKit · server/api/commerce/handlers.ts

    Source snapshot · 2026-09-08

    SHA-256 0a17df7e9b4629052e9ce7d95aa80c11e8ff36b34738e5046b169253ba4f44d2
    1// Transport-independent handlers for the OpenIAP Commerce Protocol operation2// surface. The REST routes and the GraphQL resolvers both call these and only3// these; business logic stays below, in the same Convex functions the4// published /v1 and /v2 surfaces already use.5 6import capabilitiesExample from "openiap-commerce-protocol/examples/provider-capabilities.json";7 8import { api } from "@/convex";9import { client, handleConvexError } from "../../convex";10import { isValidSubscriptionUserId } from "../../../convex/subscriptions/limits";11import { normalizeBindUserPurchaseToken } from "../v1/subscriptions";12import { ProtocolOperationError, protocolCodeForConvexError } from "./errors";13import { admitVerification } from "./verificationAdmission";14import {15  buildAmazonRemoteId,16  buildHorizonRemoteId,17} from "../../../convex/purchases/identity";18 19export interface ProtocolContext {20  apiKey: string;21  requestIp?: string;22}23 24type SubscriptionRowV2 = {25  productId: string;26  platform: "IOS" | "Android";27  state: string;28  expiresAt?: number;29  renewsAt?: number;30  willRenew?: boolean;31  cancellationReason?: string;32  startedAt: number;33  updatedAt: number;34};35 36export interface SubscriptionStatusSnapshot {37  productId: string;38  state: string;39  active: boolean;40  store?: string;41  expiresAt?: number;42  renewsAt?: number;43  willRenew?: boolean;44  cancellationReason?: string;45  startedAt?: number;46  updatedAt?: number;47}48 49interface StoreEvidenceInput {50  store: string;51  apple?: { jws: string };52  google?: { purchaseToken: string };53  horizon?: { userId: string; sku: string };54  amazon?: { userId: string; receiptId: string; sandbox?: boolean };55}56 57// Fixed, safe messages per protocol code. A provider/Convex error message can58// carry diagnostic detail (identifiers, internal state), so it never crosses59// the trust boundary — the raw message is logged server-side instead.60const SAFE_MESSAGE: Record<string, string> = {61  UNAUTHORIZED: "A valid credential is required",62  FORBIDDEN: "This operation requires the server role",63  INVALID_REQUEST: "The request is invalid",64  RATE_LIMITED: "Too many requests. Retry after the indicated delay.",65  VERIFICATION_FAILED: "The provider could not obtain a verdict from the store",66  INTERNAL_ERROR: "The operation failed",67};68 69function safeMessage(code: string): string {70  return SAFE_MESSAGE[code] ?? "The operation failed";71}72 73function rethrowAsProtocolError(error: unknown, fallbackCode: string): never {74  const convexError = handleConvexError(error);75  const code =76    (convexError && protocolCodeForConvexError(convexError.code)) ??77    fallbackCode;78  // Log only the protocol code, the Convex error CODE (an enum, never the free79  // text), and the JS error class. The raw provider message can carry a80  // receipt, token, JWS, userId, upstream URL, or source path, so it never81  // reaches the log — nor the response.82  console.error(83    "[commerce] operation failed protocolCode=%s convexCode=%s errorClass=%s",84    code,85    convexError?.code ?? "none",86    error instanceof Error ? error.name : typeof error,87  );88  throw new ProtocolOperationError(89    code,90    safeMessage(code),91    code === "RATE_LIMITED" ? convexError?.retryAfterSec : undefined,92  );93}94 95function requireUserId(userId: unknown): string {96  if (typeof userId !== "string" || !isValidSubscriptionUserId(userId)) {97    throw new ProtocolOperationError("INVALID_REQUEST", "userId is invalid");98  }99  return userId;100}101 102function requireEvidence<T>(103  input: StoreEvidenceInput,104  member: T | undefined,105): T {106  if (member === undefined || member === null) {107    throw new ProtocolOperationError(108      "INVALID_REQUEST",109      `${input.store} evidence is required`,110    );111  }112  return member;113}114 115// The subscription rows come from the apple and google webhook lanes only, so116// the platform axis maps onto the store axis without loss today. A future117// store lane must extend this mapping before it can serve the snapshot.118function storeOf(platform: SubscriptionRowV2["platform"]): string {119  return platform === "IOS" ? "apple" : "google";120}121 122// The entitlement decision is not recomputed here: Convex already applied the123// SPEC.md 2.3 predicate (subscriptions/query.ts isActive), returning the124// active flag for status and only entitled rows for entitlements. Re-deriving125// it at the transport layer is exactly the drift the caller passes `active`126// in to avoid.127function toSnapshot(128  row: SubscriptionRowV2,129  active: boolean,130): SubscriptionStatusSnapshot {131  return {132    productId: row.productId,133    state: row.state,134    active,135    store: storeOf(row.platform),136    ...(row.expiresAt === undefined ? {} : { expiresAt: row.expiresAt }),137    ...(row.renewsAt === undefined ? {} : { renewsAt: row.renewsAt }),138    ...(row.willRenew === undefined ? {} : { willRenew: row.willRenew }),139    ...(row.cancellationReason === undefined140      ? {}141      : { cancellationReason: row.cancellationReason }),142    startedAt: row.startedAt,143    updatedAt: row.updatedAt,144  };145}146 147export function providerCapabilities(): Record<string, unknown> {148  // The published example is this implementation's own descriptor — SPEC.md149  // 10 says so — and kit's conformance suite pins it to the internal150  // capability map, so serving it cannot drift from either side.151  const { $comment: _comment, ...descriptor } = capabilitiesExample as Record<152    string,153    unknown154  >;155  return descriptor;156}157 158interface StoreVerdict {159  isValid: boolean;160  state: string;161  productId?: string;162  environment?: string;163  stableRejection?: boolean;164}165 166// The store verification itself, without admission control. Kept separate so167// the admission layer can wrap it identically for both bindings.168async function verifyPurchaseVerdict(169  context: ProtocolContext,170  input: StoreEvidenceInput,171): Promise<StoreVerdict> {172  const common = { apiKey: context.apiKey, requestIp: context.requestIp };173  try {174    switch (input.store) {175      case "apple": {176        const apple = requireEvidence(input, input.apple);177        return await client.action(178          api.purchases.ios.verifyAppStoreReceiptInternalV1,179          { ...common, jws: apple.jws },180        );181      }182      case "google": {183        const google = requireEvidence(input, input.google);184        return await client.action(185          api.purchases.android.verifyGooglePlayReceiptInternalV1,186          { ...common, purchaseToken: google.purchaseToken },187        );188      }189      case "horizon": {190        const horizon = requireEvidence(input, input.horizon);191        return await client.action(192          api.purchases.horizon.verifyMetaHorizonReceiptInternalV1,193          { ...common, userId: horizon.userId, sku: horizon.sku },194        );195      }196      case "amazon": {197        const amazon = requireEvidence(input, input.amazon);198        return await client.action(199          api.purchases.amazon.verifyAmazonReceiptInternalV1,200          {201            ...common,202            userId: amazon.userId,203            receiptId: amazon.receiptId,204            sandbox: amazon.sandbox,205          },206        );207      }208      default:209        throw new ProtocolOperationError(210          "UNSUPPORTED_STORE",211          "This provider does not integrate the named store",212        );213    }214  } catch (error) {215    if (error instanceof ProtocolOperationError) throw error;216    rethrowAsProtocolError(error, "VERIFICATION_FAILED");217  }218}219 220export async function verifyPurchase(221  context: ProtocolContext,222  input: StoreEvidenceInput,223): Promise<{224  store: string;225  isValid: boolean;226  state: string;227  productId?: string;228  environment?: string;229}> {230  // Admission is shared by both bindings: the replay guard, the process-wide231  // in-flight cap, and the stable-failure cooldown apply before and after the232  // store call, exactly as the /v1 verify pipeline does.233  const admission = admitVerification({234    apiKey: context.apiKey,235    requestIp: context.requestIp,236    input,237  });238  if (!admission.admitted) {239    throw new ProtocolOperationError(240      admission.code,241      "Too many verifications. Retry after the indicated delay.",242      admission.retryAfterSec,243    );244  }245  const verdict = await admission.run(() =>246    verifyPurchaseVerdict(context, input),247  );248 249  return {250    store: input.store,251    isValid: verdict.isValid,252    state: verdict.state,253    ...(verdict.productId === undefined254      ? {}255      : { productId: verdict.productId }),256    // The protocol's environment space uses lowercase tokens; the store257    // verdict reports the capitalized /v1 spelling of the same values.258    ...(verdict.environment === undefined259      ? {}260      : { environment: verdict.environment.toLowerCase() }),261  };262}263 264export async function subscriptionStatus(265  context: ProtocolContext,266  input: { userId: string },267): Promise<{ active: boolean; subscription?: SubscriptionStatusSnapshot }> {268  const userId = requireUserId(input.userId);269  try {270    const result = await client.query(271      api.subscriptions.query.subscriptionStatusV2,272      { apiKey: context.apiKey, userId, now: Date.now() },273    );274    return {275      active: result.active,276      // Convex returns the entitling row when active, otherwise a context row;277      // the snapshot's own gate is exactly the top-level decision.278      ...(result.subscription === null279        ? {}280        : { subscription: toSnapshot(result.subscription, result.active) }),281    };282  } catch (error) {283    rethrowAsProtocolError(error, "INTERNAL_ERROR");284  }285}286 287export async function entitlements(288  context: ProtocolContext,289  input: { userId: string },290): Promise<{291  userId: string;292  productIds: string[];293  subscriptions: SubscriptionStatusSnapshot[];294}> {295  const userId = requireUserId(input.userId);296  try {297    const purchases = await client.action(298      api.purchases.action.readBoundPurchaseEntitlements,299      { apiKey: context.apiKey, userId },300    );301    const result = await client.query(api.subscriptions.query.entitlementsV2, {302      apiKey: context.apiKey,303      userId,304      now: Date.now(),305    });306    return {307      userId: result.userId,308      productIds: [...new Set([...result.productIds, ...purchases.productIds])],309      // entitlementsV2 returns only entitled rows, so every snapshot is active.310      subscriptions: result.subscriptions.map((row: SubscriptionRowV2) =>311        toSnapshot(row, true),312      ),313    };314  } catch (error) {315    rethrowAsProtocolError(error, "INTERNAL_ERROR");316  }317}318 319/**320 * SPEC.md 5: server-role authorization precedes input validation. The edge321 * prefix check cannot classify an unknown or legacy key, so both transport322 * adapters call this before evaluating the operation input — an invalid323 * credential gets UNAUTHORIZED / FORBIDDEN and learns nothing about the324 * privileged surface (evidence shapes, member bounds, supported stores).325 */326export async function assertServerCredential(327  context: ProtocolContext,328): Promise<void> {329  try {330    await client.query(api.subscriptions.query.assertServerAccess, {331      apiKey: context.apiKey,332    });333  } catch (error) {334    rethrowAsProtocolError(error, "INTERNAL_ERROR");335  }336}337 338export async function bindPurchase(339  context: ProtocolContext,340  input: StoreEvidenceInput & { userId: string },341): Promise<{ bound: boolean }> {342  const userId = requireUserId(input.userId);343  if (input.store === "amazon" || input.store === "horizon") {344    const remoteId =345      input.store === "amazon"346        ? buildAmazonRemoteId({347            ...requireEvidence(input, input.amazon),348            sandbox: input.amazon?.sandbox === true,349          })350        : buildHorizonRemoteId(351            requireEvidence(input, input.horizon).userId,352            requireEvidence(input, input.horizon).sku,353          );354    try {355      return await client.mutation(356        api.purchases.mutation.bindVerifiedPurchaseAsServer,357        {358          apiKey: context.apiKey,359          userId,360          store: input.store,361          remoteId,362        },363      );364    } catch (error) {365      rethrowAsProtocolError(error, "INTERNAL_ERROR");366    }367  }368  let rawToken: string;369  switch (input.store) {370    case "apple":371      rawToken = requireEvidence(input, input.apple).jws;372      break;373    case "google":374      rawToken = requireEvidence(input, input.google).purchaseToken;375      break;376    default:377      throw new ProtocolOperationError(378        "UNSUPPORTED_STORE",379        "This provider does not integrate the named store",380      );381  }382 383  const normalized = normalizeBindUserPurchaseToken(rawToken);384  if (!normalized.ok) {385    throw new ProtocolOperationError("INVALID_REQUEST", normalized.message);386  }387 388  try {389    // bindUserAsServer asserts admin access in Convex, where the stored key390    // type is authoritative; the edge prefix check cannot classify a legacy391    // no-prefix key. A publishable or legacy key is rejected with392    // INSUFFICIENT_SCOPE, mapped to FORBIDDEN.393    const result = await client.mutation(394      api.subscriptions.mutation.bindUserAsServer,395      {396        apiKey: context.apiKey,397        purchaseToken: normalized.purchaseToken,398        userId,399      },400    );401    return { bound: result.bound };402  } catch (error) {403    if (error instanceof ProtocolOperationError) throw error;404    rethrowAsProtocolError(error, "INTERNAL_ERROR");405  }406}407 408export async function eraseUser(409  context: ProtocolContext,410  input: { userId: string },411): Promise<{ accepted: boolean; jobId?: string; status?: string }> {412  const userId = requireUserId(input.userId);413  try {414    const result = await client.mutation(415      api.subscriptions.mutation.requestUserErasure,416      { apiKey: context.apiKey, userId },417    );418    return { accepted: result.ok, jobId: result.jobId, status: result.status };419  } catch (error) {420    rethrowAsProtocolError(error, "INTERNAL_ERROR");421  }422}423 
    \ No newline at end of file diff --git a/packages/docs/public/commerce-source/kit/server/api/commerce/routes.test.ts.html b/packages/docs/public/commerce-source/kit/server/api/commerce/routes.test.ts.html new file mode 100644 index 000000000..bb43c6151 --- /dev/null +++ b/packages/docs/public/commerce-source/kit/server/api/commerce/routes.test.ts.html @@ -0,0 +1 @@ +IAPKit · server/api/commerce/routes.test.ts
    ← Provider replacement walkthrough

    IAPKit · server/api/commerce/routes.test.ts

    Source snapshot · 2026-09-08

    SHA-256 79a0af6b4c2c9015d8a2b0948e96d8fd614136ee61e42ae89b504ee2f75b4a0c
    1// Edge behavior the conformance vectors do not pin: Convex error mapping,2// oversized bodies, GraphQL bounds, introspection agreement, and the3// evidence-normalization paths of bindPurchase.4 5import { beforeEach, describe, expect, it, vi } from "vitest";6import { Hono } from "hono";7import { buildSchema, getIntrospectionQuery, printSchema } from "graphql";8import operationsSdl from "openiap-commerce-protocol/generated/bindings/operations-sdl.json";9 10const mocks = vi.hoisted(() => ({11  action: vi.fn(),12  mutation: vi.fn(),13  query: vi.fn(),14  handleConvexError: vi.fn(),15}));16 17vi.mock("@/convex", () => ({18  api: {19    purchases: {20      action: {21        readBoundPurchaseEntitlements: "readBoundPurchaseEntitlements",22      },23      mutation: {24        bindVerifiedPurchaseAsServer: "bindVerifiedPurchaseAsServer",25      },26      ios: { verifyAppStoreReceiptInternalV1: "verifyApple" },27      android: { verifyGooglePlayReceiptInternalV1: "verifyGoogle" },28      horizon: { verifyMetaHorizonReceiptInternalV1: "verifyHorizon" },29      amazon: { verifyAmazonReceiptInternalV1: "verifyAmazon" },30    },31    subscriptions: {32      query: {33        subscriptionStatusV2: "subscriptionStatusV2",34        entitlementsV2: "entitlementsV2",35        assertServerAccess: "assertServerAccess",36      },37      mutation: {38        bindUserAsServer: "bindUserAsServer",39        requestUserErasure: "requestUserErasure",40      },41    },42  },43}));44 45vi.mock("../../convex", () => ({46  client: {47    action: mocks.action,48    mutation: mocks.mutation,49    query: mocks.query,50  },51  handleConvexError: mocks.handleConvexError,52}));53 54const { commerceRoutes } = await import("./routes");55const { commerceGraphqlSchema } = await import("./graphql");56 57const SERVER_KEY = "openiap-kit_sk_unit";58const CLIENT_KEY = "openiap-kit_pk_unit";59const GOOGLE_TOKEN = "unit-google-purchase-token-0000000001";60 61function buildApp(): Hono {62  const app = new Hono();63  app.route("/commerce/v1", commerceRoutes);64  return app;65}66 67function post(68  app: Hono,69  path: string,70  body: unknown,71  key: string | null = SERVER_KEY,72) {73  return app.request(path, {74    method: "POST",75    headers: {76      "Content-Type": "application/json",77      ...(key ? { Authorization: `Bearer ${key}` } : {}),78    },79    body: JSON.stringify(body),80  });81}82 83describe("commerce REST adapter", () => {84  beforeEach(() => {85    mocks.action.mockReset();86    mocks.mutation.mockReset();87    mocks.query.mockReset();88    mocks.handleConvexError.mockReset();89    mocks.handleConvexError.mockReturnValue(null);90  });91 92  it("maps a Convex INVALID_API_KEY onto UNAUTHORIZED with status 401", async () => {93    mocks.query.mockRejectedValue(new Error("boom"));94    mocks.handleConvexError.mockReturnValue({95      code: "INVALID_API_KEY",96      message: "API key is invalid or inactive",97    });98    const response = await buildApp().request(99      "/commerce/v1/subscriptions/status?userId=user-1",100      { headers: { Authorization: `Bearer ${SERVER_KEY}` } },101    );102    expect(response.status).toBe(401);103    expect((await response.json()).error.code).toBe("UNAUTHORIZED");104  });105 106  it("maps a Convex INSUFFICIENT_SCOPE onto FORBIDDEN with status 403", async () => {107    mocks.query.mockRejectedValue(new Error("boom"));108    mocks.handleConvexError.mockReturnValue({109      code: "INSUFFICIENT_SCOPE",110      message: "This operation requires a secret admin key",111    });112    const response = await buildApp().request(113      "/commerce/v1/entitlements?userId=user-1",114      { headers: { Authorization: `Bearer openiap-kit_legacy` } },115    );116    expect(response.status).toBe(403);117    expect((await response.json()).error.code).toBe("FORBIDDEN");118  });119 120  it("evaluates subscription expiry after store ownership refreshes", async () => {121    const clock = vi.spyOn(Date, "now").mockReturnValue(1_000);122    try {123      const subscription = {124        productId: "apple-premium",125        platform: "IOS",126        state: "Active",127        expiresAt: 2_000,128        startedAt: 0,129        updatedAt: 0,130      };131      mocks.action.mockImplementation(async () => {132        clock.mockReturnValue(3_000);133        return { productIds: ["amazon-premium"] };134      });135      mocks.query.mockImplementation(async (name, args) => {136        if (name !== "entitlementsV2") return { ok: true };137        const active = subscription.expiresAt > args.now;138        return {139          userId: args.userId,140          productIds: active ? [subscription.productId] : [],141          subscriptions: active ? [subscription] : [],142        };143      });144      const response = await buildApp().request(145        "/commerce/v1/entitlements?userId=user-1",146        { headers: { Authorization: `Bearer ${SERVER_KEY}` } },147      );148      expect(response.status).toBe(200);149      expect(await response.json()).toEqual({150        userId: "user-1",151        productIds: ["amazon-premium"],152        subscriptions: [],153      });154    } finally {155      clock.mockRestore();156    }157  });158 159  it("observes subscription erasure completed during a store refresh", async () => {160    let erased = false;161    mocks.action.mockImplementation(async () => {162      erased = true;163      return { productIds: [] };164    });165    mocks.query.mockImplementation(async (name, args) => {166      if (name !== "entitlementsV2") return { ok: true };167      return {168        userId: args.userId,169        productIds: erased ? [] : ["apple-premium"],170        subscriptions: [],171      };172    });173    const response = await buildApp().request(174      "/commerce/v1/entitlements?userId=user-1",175      { headers: { Authorization: `Bearer ${SERVER_KEY}` } },176    );177    expect(response.status).toBe(200);178    expect(await response.json()).toEqual({179      userId: "user-1",180      productIds: [],181      subscriptions: [],182    });183  });184 185  it("reports VERIFICATION_FAILED as 502 when the store verdict is unreachable", async () => {186    mocks.action.mockRejectedValue(new Error("upstream down"));187    const response = await post(188      buildApp(),189      "/commerce/v1/purchases/verify",190      { store: "google", google: { purchaseToken: GOOGLE_TOKEN } },191      CLIENT_KEY,192    );193    expect(response.status).toBe(502);194    const body = await response.json();195    expect(body.error.code).toBe("VERIFICATION_FAILED");196    expect(body.error.message).not.toContain("upstream");197  });198 199  it("preserves the Convex admission retry hint", async () => {200    mocks.action.mockRejectedValue(new Error("limited"));201    mocks.handleConvexError.mockReturnValue({202      code: "RATE_LIMITED",203      message: "Too many verification requests",204      retryAfterSec: 2,205    });206 207    const response = await post(208      buildApp(),209      "/commerce/v1/purchases/verify",210      { store: "google", google: { purchaseToken: GOOGLE_TOKEN } },211      CLIENT_KEY,212    );213 214    expect(response.status).toBe(429);215    expect(response.headers.get("Retry-After")).toBe("2");216    expect((await response.json()).error.code).toBe("RATE_LIMITED");217  });218 219  it.each([220    "PLAY_STORE_VERIFICATION_ERROR",221    "META_HORIZON_VERIFICATION_ERROR",222    "AMAZON_RECEIPT_VERIFICATION_ERROR",223    "APP_STORE_TRANSACTION_VERIFICATION_FAILED",224  ])(225    "maps the structured store error %s to VERIFICATION_FAILED 502",226    async (code) => {227      mocks.action.mockRejectedValue(new Error("convex error"));228      mocks.handleConvexError.mockReturnValue({229        code,230        message: `store said no for token ghi789 at /verify/${code}`,231      });232      const response = await post(233        buildApp(),234        "/commerce/v1/purchases/verify",235        { store: "google", google: { purchaseToken: GOOGLE_TOKEN } },236        CLIENT_KEY,237      );238      expect(response.status).toBe(502);239      expect((await response.json()).error.code).toBe("VERIFICATION_FAILED");240    },241  );242 243  it("logs no raw provider detail — only codes and error class", async () => {244    const logged: string[] = [];245    const spy = vi246      .spyOn(console, "error")247      .mockImplementation((...args: unknown[]) => {248        logged.push(args.map(String).join(" "));249      });250    try {251      mocks.query.mockRejectedValue(252        new Error(253          "ConvexError at /srv/convex/subscriptions/query.ts:512 token=ghi789",254        ),255      );256      mocks.handleConvexError.mockReturnValue({257        code: "INTERNAL_ERROR",258        message:259          "row subscriptions:abc for userId=alice token=ghi789 upstream=https://buy.itunes.apple.com failed",260      });261      const response = await buildApp().request(262        "/commerce/v1/subscriptions/status?userId=user-1",263        { headers: { Authorization: `Bearer ${SERVER_KEY}` } },264      );265      expect(response.status).toBe(500);266      const combined = logged.join("\n");267      for (const secret of [268        "ghi789",269        "subscriptions:abc",270        "userId=alice",271        "buy.itunes.apple.com",272        "query.ts:512",273      ]) {274        expect(combined).not.toContain(secret);275      }276    } finally {277      spy.mockRestore();278    }279  });280 281  it("rejects an oversized body before any Convex call", async () => {282    const response = await post(buildApp(), "/commerce/v1/purchases/verify", {283      store: "google",284      google: { purchaseToken: "x".repeat(40_000) },285    });286    expect(response.status).toBe(400);287    expect(mocks.action).not.toHaveBeenCalled();288  });289 290  it("binds an Apple purchase by the transaction id inside the JWS", async () => {291    mocks.mutation.mockResolvedValue({ ok: true, bound: true });292    const payload = Buffer.from(293      JSON.stringify({ originalTransactionId: "2000000123456789" }),294    ).toString("base64url");295    const jws = `eyJhbGciOiJFUzI1NiJ9.${payload}.c2lnbmF0dXJl`;296    const response = await post(buildApp(), "/commerce/v1/purchases/bind", {297      userId: "user-1",298      store: "apple",299      apple: { jws },300    });301    expect(response.status).toBe(200);302    expect(await response.json()).toEqual({ bound: true });303    expect(mocks.mutation).toHaveBeenCalledWith("bindUserAsServer", {304      apiKey: SERVER_KEY,305      purchaseToken: "2000000123456789",306      userId: "user-1",307    });308  });309 310  it("rejects an Apple JWS that carries no transaction identity", async () => {311    const payload = Buffer.from(JSON.stringify({ nothing: true })).toString(312      "base64url",313    );314    const response = await post(buildApp(), "/commerce/v1/purchases/bind", {315      userId: "user-1",316      store: "apple",317      apple: { jws: `eyJhbGciOiJFUzI1NiJ9.${payload}.c2ln` },318    });319    expect(response.status).toBe(400);320    expect(mocks.mutation).not.toHaveBeenCalled();321  });322 323  it("binds Horizon using the verified store user and SKU identity", async () => {324    mocks.mutation.mockResolvedValue({ bound: true });325    const response = await post(buildApp(), "/commerce/v1/purchases/bind", {326      userId: "user-1",327      store: "horizon",328      horizon: { userId: "1234567890", sku: "premium" },329    });330    expect(response.status).toBe(200);331    expect(await response.json()).toEqual({ bound: true });332    expect(mocks.mutation).toHaveBeenCalledWith(333      "bindVerifiedPurchaseAsServer",334      {335        apiKey: SERVER_KEY,336        userId: "user-1",337        store: "horizon",338        remoteId: "1234567890:premium",339      },340    );341  });342 343  it("authenticates before revealing a non-binding store verdict", async () => {344    // The unknown key clears the edge (it is not a publishable prefix) but fails345    // the authoritative check. It must get UNAUTHORIZED, not `bound: false`.346    mocks.query.mockRejectedValue(new Error("boom"));347    mocks.handleConvexError.mockReturnValue({348      code: "INVALID_API_KEY",349      message: "API key is invalid or inactive",350    });351    const response = await post(352      buildApp(),353      "/commerce/v1/purchases/bind",354      {355        userId: "user-1",356        store: "horizon",357        horizon: { userId: "1", sku: "x" },358      },359      "openiap-kit_sk_unknown",360    );361    expect(response.status).toBe(401);362    expect((await response.json()).error.code).toBe("UNAUTHORIZED");363    // Auth ran first, and no binding happened for an unauthenticated caller.364    expect(mocks.query).toHaveBeenCalledWith("assertServerAccess", {365      apiKey: "openiap-kit_sk_unknown",366    });367    expect(mocks.mutation).not.toHaveBeenCalled();368  });369 370  it("authenticates before evidence parsing: an unknown key with malformed evidence gets 401, not INVALID_REQUEST", async () => {371    mocks.query.mockRejectedValue(new Error("boom"));372    mocks.handleConvexError.mockReturnValue({373      code: "INVALID_API_KEY",374      message: "API key is invalid or inactive",375    });376    const response = await post(377      buildApp(),378      "/commerce/v1/purchases/bind",379      { userId: "user-1", store: "apple", apple: { jws: "not-a-valid-jws" } },380      "openiap-kit_sk_unknown",381    );382    expect(response.status).toBe(401);383    expect((await response.json()).error.code).toBe("UNAUTHORIZED");384    expect(mocks.mutation).not.toHaveBeenCalled();385  });386 387  it("maps an under-scoped key on bind to FORBIDDEN before store validation", async () => {388    mocks.query.mockRejectedValue(new Error("boom"));389    mocks.handleConvexError.mockReturnValue({390      code: "INSUFFICIENT_SCOPE",391      message: "This operation requires a secret admin key",392    });393    const response = await post(394      buildApp(),395      "/commerce/v1/purchases/bind",396      {397        userId: "user-1",398        store: "horizon",399        horizon: { userId: "1", sku: "x" },400      },401      "openiap-kit_legacy",402    );403    expect(response.status).toBe(403);404    expect((await response.json()).error.code).toBe("FORBIDDEN");405    expect(mocks.mutation).not.toHaveBeenCalled();406  });407 408  it("authenticates a server read before input schema validation (REST)", async () => {409    // SPEC.md 5: the transport must not answer INVALID_REQUEST about a410    // privileged read's input to a caller whose credential is unknown.411    mocks.query.mockRejectedValue(new Error("boom"));412    mocks.handleConvexError.mockReturnValue({413      code: "INVALID_API_KEY",414      message: "API key is invalid or inactive",415    });416    const overlong = "x".repeat(600);417    const response = await buildApp().request(418      `/commerce/v1/subscriptions/status?userId=${overlong}`,419      { headers: { Authorization: "Bearer openiap-kit_sk_unknown" } },420    );421    expect(response.status).toBe(401);422    expect((await response.json()).error.code).toBe("UNAUTHORIZED");423    // Exactly the authoritative gate ran — the read itself was never consulted.424    expect(mocks.query).toHaveBeenCalledTimes(1);425    expect(mocks.query).toHaveBeenCalledWith("assertServerAccess", {426      apiKey: "openiap-kit_sk_unknown",427    });428  });429 430  it("authenticates a server read before body parsing: unparseable bind body gets 401", async () => {431    mocks.query.mockRejectedValue(new Error("boom"));432    mocks.handleConvexError.mockReturnValue({433      code: "INVALID_API_KEY",434      message: "API key is invalid or inactive",435    });436    const response = await buildApp().request("/commerce/v1/purchases/bind", {437      method: "POST",438      headers: {439        "Content-Type": "application/json",440        Authorization: "Bearer openiap-kit_sk_unknown",441      },442      body: "this is not json",443    });444    expect(response.status).toBe(401);445    expect((await response.json()).error.code).toBe("UNAUTHORIZED");446    expect(mocks.mutation).not.toHaveBeenCalled();447  });448 449  it("never echoes submitted store evidence in GraphQL request errors", async () => {450    // graphql-js coercion messages embed the submitted variable value — an451    // unknown member on VerifyPurchaseInput would echo the whole JWS back to452    // an unauthenticated caller. SPEC.md 8: no evidence in messages, ever.453    const jws = "eyJhbGciOiJFUzI1NiJ9.SECRET_EVIDENCE_PAYLOAD.c2ln";454    const response = await post(455      buildApp(),456      "/commerce/v1/graphql",457      {458        query:459          "mutation VerifyPurchase($input: VerifyPurchaseInput!) { verifyPurchase(input: $input) { isValid } }",460        operationName: "VerifyPurchase",461        variables: { input: { store: "apple", apple: { jws }, junk: 1 } },462      },463      null,464    );465    expect(response.status).toBe(200);466    const text = await response.text();467    expect(text).not.toContain("SECRET_EVIDENCE_PAYLOAD");468    expect(text).not.toContain(jws);469    const body = JSON.parse(text);470    expect(body.errors[0].extensions.code).toBe("INVALID_REQUEST");471  });472 473  it("never echoes evidence pasted as a document literal (validation path)", async () => {474    const response = await post(475      buildApp(),476      "/commerce/v1/graphql",477      {478        query:479          'mutation { verifyPurchase(input: {store: "amazon", amazon: {receiptId: "r", userId: "u", sandbox: "LITERAL_EVIDENCE.SIG"}}) { isValid } }',480      },481      null,482    );483    const text = await response.text();484    expect(text).not.toContain("LITERAL_EVIDENCE");485    expect(JSON.parse(text).errors[0].extensions.code).toBe("INVALID_REQUEST");486  });487 488  it("authorizes before variable coercion: structurally invalid server input gets 401, not a field-by-field verdict", async () => {489    // graphql-js coercion runs before any resolver, so the pre-execute auth in490    // executeCommerceGraphql is what keeps SPEC.md 5 ordering on GraphQL. An491    // uncredentialed caller probing which members EntitlementsInput requires492    // must learn nothing.493    const response = await post(494      buildApp(),495      "/commerce/v1/graphql",496      {497        query:498          "query Entitlements($input: EntitlementsInput!) { entitlements(input: $input) { userId } }",499        operationName: "Entitlements",500        variables: { input: {} },501      },502      null,503    );504    expect(response.status).toBe(200);505    const body = await response.json();506    expect(body.errors[0].extensions.code).toBe("UNAUTHORIZED");507    expect(body.errors[0].message).not.toContain("userId");508  });509 510  it("authorizes before variable coercion with an unknown server key too", async () => {511    mocks.query.mockRejectedValue(new Error("boom"));512    mocks.handleConvexError.mockReturnValue({513      code: "INVALID_API_KEY",514      message: "API key is invalid or inactive",515    });516    const response = await post(517      buildApp(),518      "/commerce/v1/graphql",519      {520        query:521          "query Entitlements($input: EntitlementsInput!) { entitlements(input: $input) { userId } }",522        operationName: "Entitlements",523        variables: { input: {} },524      },525      "openiap-kit_sk_unknown",526    );527    const body = await response.json();528    expect(body.errors[0].extensions.code).toBe("UNAUTHORIZED");529    expect(mocks.query).toHaveBeenCalledWith("assertServerAccess", {530      apiKey: "openiap-kit_sk_unknown",531    });532  });533 534  it("authenticates a server read before input schema validation (GraphQL)", async () => {535    mocks.query.mockRejectedValue(new Error("boom"));536    mocks.handleConvexError.mockReturnValue({537      code: "INVALID_API_KEY",538      message: "API key is invalid or inactive",539    });540    const response = await post(541      buildApp(),542      "/commerce/v1/graphql",543      {544        query:545          "query SubscriptionStatus($input: SubscriptionStatusInput!) { subscriptionStatus(input: $input) { active } }",546        operationName: "SubscriptionStatus",547        variables: { input: { userId: "x".repeat(600) } },548      },549      "openiap-kit_sk_unknown",550    );551    expect(response.status).toBe(200);552    const body = await response.json();553    expect(body.errors[0].extensions.code).toBe("UNAUTHORIZED");554    expect(mocks.query).toHaveBeenCalledTimes(1);555    expect(mocks.query).toHaveBeenCalledWith("assertServerAccess", {556      apiKey: "openiap-kit_sk_unknown",557    });558  });559 560  it("answers unknown commerce paths with a protocol 404", async () => {561    const response = await buildApp().request("/commerce/v1/does-not-exist");562    expect(response.status).toBe(404);563    expect((await response.json()).error.code).toBe("NOT_FOUND");564  });565});566 567describe("commerce GraphQL adapter", () => {568  beforeEach(() => {569    mocks.action.mockReset();570    mocks.mutation.mockReset();571    mocks.query.mockReset();572    mocks.handleConvexError.mockReset();573    mocks.handleConvexError.mockReturnValue(null);574  });575 576  it("serves the generated projection", () => {577    // operations-sdl.json.sdl is pinned byte-identical to operations.graphql578    // (the normative projection per SPEC.md 7) in the spec package's579    // operations.test.mjs, so building the served schema from it is equivalent580    // to building it from the .graphql file.581    expect(printSchema(commerceGraphqlSchema)).toBe(582      printSchema(buildSchema(operationsSdl.sdl)),583    );584    expect(commerceGraphqlSchema.getSubscriptionType()).toBeUndefined();585  });586 587  it("answers the standard introspection query through the real endpoint", async () => {588    // Exercise the HTTP path (bounds + validate + execute), not graphqlSync —589    // the bounds check must let a single-root-field introspection through.590    const response = await post(buildApp(), "/commerce/v1/graphql", {591      query: getIntrospectionQuery(),592      operationName: "IntrospectionQuery",593    });594    expect(response.status).toBe(200);595    const body = await response.json();596    expect(body.errors).toBeUndefined();597    expect(body.data.__schema).toBeTruthy();598  });599 600  it("blocks alias amplification hidden in an inline fragment", async () => {601    const response = await post(buildApp(), "/commerce/v1/graphql", {602      query:603        "query Amplify { ... on Query { a: providerCapabilities { specVersion } b: providerCapabilities { specVersion } c: providerCapabilities { specVersion } } }",604      operationName: "Amplify",605    });606    expect(response.status).toBe(200);607    const body = await response.json();608    expect(body.data).toBeUndefined();609    expect(body.errors[0].extensions.code).toBe("INVALID_REQUEST");610    expect(body.errors[0].message).toContain("one operation field");611  });612 613  it("blocks alias amplification hidden in a named fragment spread", async () => {614    const response = await post(buildApp(), "/commerce/v1/graphql", {615      query:616        "query Amplify { ...F } fragment F on Query { a: providerCapabilities { specVersion } b: providerCapabilities { specVersion } }",617      operationName: "Amplify",618    });619    const body = await response.json();620    expect(body.data).toBeUndefined();621    expect(body.errors[0].extensions.code).toBe("INVALID_REQUEST");622  });623 624  it("rejects a request with more than one operation", async () => {625    const response = await post(buildApp(), "/commerce/v1/graphql", {626      query:627        "query A { providerCapabilities { specVersion } } query B { providerCapabilities { specVersion } }",628      operationName: "A",629    });630    expect(response.status).toBe(200);631    const body = await response.json();632    expect(body.errors[0].extensions.code).toBe("INVALID_REQUEST");633  });634 635  it("rejects a subscription operation at the door", async () => {636    const response = await post(buildApp(), "/commerce/v1/graphql", {637      query: "subscription { anything }",638    });639    const body = await response.json();640    expect(body.errors[0].extensions.code).toBe("INVALID_REQUEST");641    expect(body.errors[0].message).toContain("no subscriptions");642  });643 644  it("returns a fixed safe message, never the raw provider detail (GraphQL)", async () => {645    mocks.query.mockRejectedValue(646      new Error("ConvexHttpClient exploded at /very/private/path.ts"),647    );648    // A Convex error whose message carries diagnostic detail.649    mocks.handleConvexError.mockReturnValue({650      code: "INVALID_INPUT",651      message:652        "row subscriptions:abc123 for project proj_secret failed at :512",653    });654    const response = await post(buildApp(), "/commerce/v1/graphql", {655      query:656        "query SubscriptionStatus($input: SubscriptionStatusInput!) { subscriptionStatus(input: $input) { active } }",657      operationName: "SubscriptionStatus",658      variables: { input: { userId: "user-1" } },659    });660    const body = await response.json();661    expect(body.errors[0].extensions.code).toBe("INVALID_REQUEST");662    expect(body.errors[0].message).toBe("The request is invalid");663    const serialized = JSON.stringify(body);664    expect(serialized).not.toContain("subscriptions:abc123");665    expect(serialized).not.toContain("proj_secret");666    expect(serialized).not.toContain("private/path");667  });668 669  it("refuses a verification credential on a server operation", async () => {670    const response = await post(671      buildApp(),672      "/commerce/v1/graphql",673      {674        query:675          "mutation EraseUser($input: EraseUserInput!) { eraseUser(input: $input) { accepted } }",676        operationName: "EraseUser",677        variables: { input: { userId: "user-1" } },678      },679      CLIENT_KEY,680    );681    const body = await response.json();682    expect(body.errors[0].extensions.code).toBe("FORBIDDEN");683    expect(mocks.mutation).not.toHaveBeenCalled();684  });685 686  // The two bindings must return the same protocol code for the same input687  // (SPEC.md 8). GraphQL scalar coercion does not check the generated schema's688  // patterns and bounds, so the binding runs the same Ajv validation REST does.689  it("rejects a value-space violation with INVALID_REQUEST, matching REST", async () => {690    const badStore = {691      query:692        "mutation VerifyPurchase($input: VerifyPurchaseInput!) { verifyPurchase(input: $input) { isValid } }",693      operationName: "VerifyPurchase",694      variables: { input: { store: "APPLE", apple: { jws: "x".repeat(200) } } },695    };696    const gql = await post(697      buildApp(),698      "/commerce/v1/graphql",699      badStore,700      CLIENT_KEY,701    );702    const gqlBody = await gql.json();703    expect(gqlBody.errors[0].extensions.code).toBe("INVALID_REQUEST");704 705    const rest = await post(706      buildApp(),707      "/commerce/v1/purchases/verify",708      { store: "APPLE", apple: { jws: "x".repeat(200) } },709      CLIENT_KEY,710    );711    expect(rest.status).toBe(400);712    expect((await rest.json()).error.code).toBe("INVALID_REQUEST");713    expect(mocks.action).not.toHaveBeenCalled();714  });715 716  it("rejects an empty JWS with INVALID_REQUEST rather than forwarding it", async () => {717    const response = await post(718      buildApp(),719      "/commerce/v1/graphql",720      {721        query:722          "mutation VerifyPurchase($input: VerifyPurchaseInput!) { verifyPurchase(input: $input) { isValid } }",723        operationName: "VerifyPurchase",724        variables: { input: { store: "apple", apple: { jws: "" } } },725      },726      CLIENT_KEY,727    );728    expect((await response.json()).errors[0].extensions.code).toBe(729      "INVALID_REQUEST",730    );731    expect(mocks.action).not.toHaveBeenCalled();732  });733 734  it("caps a single request to one root field, blocking alias amplification", async () => {735    const aliases = Array.from(736      { length: 5 },737      (_unused, index) =>738        `a${index}: entitlements(input: {userId: "user-1"}) { userId }`,739    ).join(" ");740    const response = await post(buildApp(), "/commerce/v1/graphql", {741      query: `query Amplify { ${aliases} }`,742      operationName: "Amplify",743    });744    const body = await response.json();745    expect(body.errors[0].extensions.code).toBe("INVALID_REQUEST");746    expect(mocks.query).not.toHaveBeenCalled();747  });748 749  it("answers every GraphQL failure with HTTP 200 (single status policy)", async () => {750    // SPEC.md 7: the GraphQL binding's operation and request-level failures are751    // HTTP 200 with the code in extensions — an oversized body included, so the752    // endpoint never splits its own status contract (429 vs 200).753    const oversized = await post(buildApp(), "/commerce/v1/graphql", {754      query: `query { providerCapabilities { specVersion } } # ${"x".repeat(40_000)}`,755    });756    expect(oversized.status).toBe(200);757    const body = await oversized.json();758    expect(body.errors[0].extensions.code).toBe("INVALID_REQUEST");759  });760 761  it("rejects an exponential fragment DAG in bounded time (no CPU blowup)", async () => {762    // f0 spreads f1 twice, f1 spreads f2 twice … — naive full expansion is763    // 2^N. A ~1.3 KB request must be rejected in milliseconds, not seconds.764    const depth = 24;765    let query = "query Dos { providerCapabilities { specVersion ...f0 } }\n";766    for (let i = 0; i < depth; i += 1) {767      const next = i + 1 < depth ? `...f${i + 1} ...f${i + 1}` : "specVersion";768      query += `fragment f${i} on ProviderCapabilities { ${next} }\n`;769    }770    const start = performance.now();771    const response = await post(buildApp(), "/commerce/v1/graphql", {772      query,773      operationName: "Dos",774    });775    const elapsedMs = performance.now() - start;776    const body = await response.json();777    expect(body.data).toBeUndefined();778    expect(body.errors[0].extensions.code).toBe("INVALID_REQUEST");779    expect(elapsedMs).toBeLessThan(250);780    expect(mocks.query).not.toHaveBeenCalled();781  });782});783 784// The verify admission (replay burst + in-flight cap + stable-failure cooldown)785// must apply on BOTH bindings, since verifyPurchase reaches the same786// store-hitting Convex actions as /v1. These use the process-global replay787// store, so each test uses a distinct payload to stay isolated.788describe("commerce verify admission on both bindings", () => {789  let tokenSeq = 0;790  const uniqueToken = () =>791    `admission-google-token-${(tokenSeq += 1)}-${"z".repeat(30)}`;792 793  beforeEach(() => {794    mocks.action.mockReset();795    mocks.mutation.mockReset();796    mocks.query.mockReset();797    mocks.handleConvexError.mockReset();798    mocks.handleConvexError.mockReturnValue(null);799    mocks.action.mockResolvedValue({800      isValid: true,801      state: "ENTITLED",802      productId: "premium.monthly",803      environment: "Production",804    });805  });806 807  const restVerify = (app: Hono, token: string) =>808    post(809      app,810      "/commerce/v1/purchases/verify",811      { store: "google", google: { purchaseToken: token } },812      CLIENT_KEY,813    );814  const gqlVerify = (app: Hono, token: string) =>815    post(816      app,817      "/commerce/v1/graphql",818      {819        query:820          "mutation VerifyPurchase($input: VerifyPurchaseInput!) { verifyPurchase(input: $input) { isValid } }",821        operationName: "VerifyPurchase",822        variables: {823          input: { store: "google", google: { purchaseToken: token } },824        },825      },826      CLIENT_KEY,827    );828 829  it("applies the per-payload replay burst cap to the GraphQL binding", async () => {830    const app = buildApp();831    const token = uniqueToken();832    // Replay guard capacity is 30 per (key, payload). Attempt 31 must be denied.833    let lastBody: { errors?: Array<{ extensions: { code: string } }> } = {};834    for (let attempt = 0; attempt < 31; attempt += 1) {835      lastBody = await (await gqlVerify(app, token)).json();836    }837    expect(lastBody.errors?.[0].extensions.code).toBe("RATE_LIMITED");838  });839 840  it("shares one replay bucket across REST and GraphQL for the same receipt", async () => {841    const app = buildApp();842    const token = uniqueToken();843    // Spend 30 tokens over REST, then the first GraphQL attempt is denied —844    // proving both bindings key the same bucket.845    for (let attempt = 0; attempt < 30; attempt += 1) {846      const res = await restVerify(app, token);847      expect(res.status).toBe(200);848    }849    const gql = await (await gqlVerify(app, token)).json();850    expect(gql.errors?.[0].extensions.code).toBe("RATE_LIMITED");851  });852 853  it("arms the stable-failure cooldown on both bindings", async () => {854    const app = buildApp();855    const token = uniqueToken();856    // A store verdict that is a stable rejection (INAUTHENTIC) must arm the857    // negative cooldown so the next same-payload verify is short-circuited —858    // this was never recorded on the commerce surface before.859    mocks.action.mockResolvedValue({860      isValid: false,861      state: "INAUTHENTIC",862      stableRejection: true,863    });864    const first = await restVerify(app, token);865    expect(first.status).toBe(200);866    expect((await first.json()).isValid).toBe(false);867 868    // The next attempt for the same payload — on the OTHER binding — is denied869    // by the cooldown before reaching the store again, carrying the retry hint870    // in the GraphQL error extensions (SPEC.md 7: operation failure is 200).871    mocks.action.mockClear();872    const secondResponse = await gqlVerify(app, token);873    expect(secondResponse.status).toBe(200);874    const second = await secondResponse.json();875    expect(second.errors?.[0].extensions.code).toBe("RATE_LIMITED");876    expect(second.errors?.[0].extensions.retryAfterSec).toBeGreaterThan(0);877    expect(mocks.action).not.toHaveBeenCalled();878  });879 880  it("returns the retry hint as a REST Retry-After header on cooldown", async () => {881    const app = buildApp();882    const token = uniqueToken();883    mocks.action.mockResolvedValue({884      isValid: false,885      state: "INAUTHENTIC",886      stableRejection: true,887    });888    await restVerify(app, token);889    mocks.action.mockClear();890    const second = await restVerify(app, token);891    expect(second.status).toBe(429);892    expect(Number(second.headers.get("Retry-After"))).toBeGreaterThan(0);893    expect((await second.json()).error.code).toBe("RATE_LIMITED");894    expect(mocks.action).not.toHaveBeenCalled();895  });896 897  it("never arms the cooldown for a valid verdict, even in a stable-looking state", async () => {898    const app = buildApp();899    const token = uniqueToken();900    // isValid: true must never arm the cooldown, regardless of the state token.901    mocks.action.mockResolvedValue({902      isValid: true,903      state: "EXPIRED",904      stableRejection: true,905    });906    const first = await restVerify(app, token);907    expect((await first.json()).isValid).toBe(true);908    mocks.action.mockClear();909    mocks.action.mockResolvedValue({ isValid: true, state: "EXPIRED" });910    const second = await restVerify(app, token);911    expect(second.status).toBe(200); // not RATE_LIMITED912    expect(mocks.action).toHaveBeenCalled();913  });914 915  it("does not cool down Horizon, whose ownership can flip immediately", async () => {916    const app = buildApp();917    const userId = `hz-${(tokenSeq += 1)}`;918    const horizonVerify = () =>919      post(920        app,921        "/commerce/v1/purchases/verify",922        { store: "horizon", horizon: { userId, sku: "premium.addon" } },923        CLIENT_KEY,924      );925    // A stable INAUTHENTIC on Horizon must stay retryable.926    mocks.action.mockResolvedValue({927      isValid: false,928      state: "INAUTHENTIC",929      stableRejection: true,930    });931    await horizonVerify();932    mocks.action.mockClear();933    mocks.action.mockResolvedValue({ isValid: true, state: "ENTITLED" });934    const second = await horizonVerify();935    expect(second.status).toBe(200);936    expect((await second.json()).isValid).toBe(true);937    expect(mocks.action).toHaveBeenCalled();938  });939 940  it("keys the Amazon replay bucket on sandbox so a sandbox failure spares production", async () => {941    const app = buildApp();942    const userId = `az-${(tokenSeq += 1)}`;943    const receiptId = `receipt-${(tokenSeq += 1)}-${"9".repeat(10)}`;944    const amazonVerify = (sandbox: boolean) =>945      post(946        app,947        "/commerce/v1/purchases/verify",948        { store: "amazon", amazon: { userId, receiptId, sandbox } },949        CLIENT_KEY,950      );951    // A stable failure in sandbox arms its own bucket…952    mocks.action.mockResolvedValue({953      isValid: false,954      state: "INAUTHENTIC",955      stableRejection: true,956    });957    await amazonVerify(true);958    // …and must NOT block the production request for the same receipt id.959    mocks.action.mockClear();960    mocks.action.mockResolvedValue({ isValid: true, state: "ENTITLED" });961    const prod = await amazonVerify(false);962    expect(prod.status).toBe(200);963    expect((await prod.json()).isValid).toBe(true);964    expect(mocks.action).toHaveBeenCalled();965  });966});967 
    \ No newline at end of file diff --git a/packages/docs/public/commerce-source/kit/server/api/commerce/routes.ts.html b/packages/docs/public/commerce-source/kit/server/api/commerce/routes.ts.html new file mode 100644 index 000000000..17e31a9db --- /dev/null +++ b/packages/docs/public/commerce-source/kit/server/api/commerce/routes.ts.html @@ -0,0 +1 @@ +IAPKit · server/api/commerce/routes.ts
    ← Provider replacement walkthrough

    IAPKit · server/api/commerce/routes.ts

    Source snapshot · 2026-09-08

    SHA-256 e8383e409de76264dfe04d3aaec00c57b7ae2e0204a83744cd653b8c10e3b4b1
    1// The portable REST binding plus the GraphQL endpoint, mounted under2// /commerce/v1. Routes are registered from the generated HTTP manifest, so a3// route cannot exist that the contract does not declare; every adapter only4// parses transport, builds the auth context, validates against the generated5// schemas, calls the shared handler, and maps the outcome back.6 7import { Hono, type Context, type Next } from "hono";8import HTTP_BINDING from "openiap-commerce-protocol/generated/bindings/http-binding.json";9 10import {11  apiKeyValidationError,12  isPublishableApiKey,13  isSecretApiKey,14} from "../v1/middleware";15import {16  getRequestIp,17  multiAxisRateLimitMiddleware,18  sourceRateLimitMiddleware,19} from "../v1/rate-limit";20import {21  JsonBodyTooLargeError,22  readJsonBodyWithLimit,23} from "../v1/request-body";24import { ProtocolOperationError, protocolErrorStatus } from "./errors";25import { executeCommerceGraphql } from "./graphql";26import * as handlers from "./handlers";27import type { ProtocolContext } from "./handlers";28import { validateOperationInput } from "./validation";29 30const MAX_COMMERCE_BODY_BYTES = 32 * 1024;31const MOUNT_PREFIX = "/commerce/v1";32 33type CommerceVariables = {34  apiKey?: string;35  apiKeyHash?: string;36  commerceInput?: unknown;37  verifyCapacityRejected?: boolean;38};39type CommerceContext = Context<{ Variables: CommerceVariables }>;40 41// verifyPurchase's replay/in-flight admission lives in the shared handler42// (verificationAdmission), so both the REST route and the GraphQL resolver run43// through it — see server/api/commerce/handlers.ts.44 45const operationHandlers: Record<46  string,47  (context: ProtocolContext, input: never) => unknown48> = {49  providerCapabilities: () => handlers.providerCapabilities(),50  subscriptionStatus: (context, input) =>51    handlers.subscriptionStatus(context, input),52  entitlements: (context, input) => handlers.entitlements(context, input),53  verifyPurchase: (context, input) => handlers.verifyPurchase(context, input),54  bindPurchase: (context, input) => handlers.bindPurchase(context, input),55  eraseUser: (context, input) => handlers.eraseUser(context, input),56};57 58const GRAPHQL_PATH = `${MOUNT_PREFIX}/graphql`;59 60// The two bindings wrap the same protocol code in different envelopes61// (SPEC.md 8): REST as `{error:{code,message}}`, GraphQL as62// `{errors:[{message,extensions:{code}}]}`. Transport failures — rate limit,63// oversized body, unparseable body — must use the envelope of the binding64// they hit, or a GraphQL client sees a body with neither data nor errors.65function isGraphqlRequest(c: Context): boolean {66  return c.req.path.endsWith(GRAPHQL_PATH) || c.req.path === "/graphql";67}68 69function protocolError(70  c: Context,71  code: string,72  message: string,73  status = protocolErrorStatus(code),74  retryAfterSec?: number,75): Response {76  // A retry hint reaches REST as the standard Retry-After header and GraphQL77  // as retryAfterSec in the error extensions, so neither binding drops it.78  if (retryAfterSec !== undefined) {79    c.header("Retry-After", String(retryAfterSec));80  }81  if (isGraphqlRequest(c)) {82    // SPEC.md 7: every operation failure on the GraphQL binding is HTTP 20083    // with the code in errors[].extensions.code. This is the single status84    // policy for the binding — the outer rate limiter and the handler85    // admission both surface RATE_LIMITED at 200, never 429, so the endpoint86    // does not split its own contract.87    return c.json(88      {89        errors: [90          {91            message,92            extensions: {93              code,94              ...(retryAfterSec === undefined ? {} : { retryAfterSec }),95            },96          },97        ],98      },99      200,100    );101  }102  return c.json({ error: { code, message } }, status as 400);103}104 105function bearerApiKey(c: Context): string | null {106  const header = c.req.header("Authorization");107  if (!header) return null;108  const parts = header.trim().split(/\s+/);109  if (parts.length !== 2 || parts[0].toLowerCase() !== "bearer") return null;110  return apiKeyValidationError(parts[1]) ? null : parts[1];111}112 113const respondRateLimited = (114  c: Context,115  result: { retryAfterSec: number },116): Response =>117  // Passing retryAfterSec sets the Retry-After header on REST and puts118  // retryAfterSec into the GraphQL error extensions — the outer limiter must119  // carry the same machine-readable hint the per-operation admission does.120  protocolError(121    c,122    "RATE_LIMITED",123    `Too many requests. Retry after ${result.retryAfterSec}s.`,124    429,125    result.retryAfterSec,126  );127 128const app = new Hono<{ Variables: CommerceVariables }>();129 130// Unauthenticated requests (capabilities, credential-less GraphQL) still ride131// the bounded source-IP and process buckets.132app.use(133  "*",134  sourceRateLimitMiddleware({ respond: respondRateLimited }) as never,135);136 137const keyedRateLimit = multiAxisRateLimitMiddleware({138  respond: respondRateLimited,139});140const keyedRateLimitIfAuthed = async (c: CommerceContext, next: Next) =>141  c.var.apiKey ? keyedRateLimit(c as never, next) : next();142 143function commerceAuth(auth: string) {144  return async (c: CommerceContext, next: Next) => {145    const apiKey = bearerApiKey(c);146    if (auth !== "none") {147      // Fail close in the protocol envelope. The prefix check only148      // fast-fails an explicitly publishable key on a server operation;149      // the stored key classification stays authoritative in Convex, where150      // unknown and legacy formats fail closed as publishable.151      if (apiKey === null) {152        return protocolError(c, "UNAUTHORIZED", "A credential is required");153      }154      if (auth === "server" && isPublishableApiKey(apiKey)) {155        return protocolError(156          c,157          "FORBIDDEN",158          "This operation requires the server role",159        );160      }161    }162    if (apiKey !== null) {163      c.set("apiKey", apiKey);164      if (isSecretApiKey(apiKey)) {165        c.header("Cache-Control", "private, no-store");166      }167    }168    await next();169  };170}171 172// SPEC.md 5: server-role authorization precedes input validation. Runs after173// the rate limiters (an unauthenticated caller must not buy a Convex round174// trip per request unmetered) and before the body is parsed or validated.175const authoritativeServerAuth = async (c: CommerceContext, next: Next) => {176  try {177    await handlers.assertServerCredential({178      apiKey: c.var.apiKey ?? "",179      requestIp: getRequestIp(c),180    });181  } catch (error) {182    if (error instanceof ProtocolOperationError) {183      return protocolError(184        c,185        error.code,186        error.message,187        protocolErrorStatus(error.code),188        error.retryAfterSec,189      );190    }191    return protocolError(c, "INTERNAL_ERROR", "The operation failed");192  }193  await next();194};195 196for (const operation of HTTP_BINDING.operations) {197  const path = operation.path.slice(MOUNT_PREFIX.length);198  const run = operationHandlers[operation.name];199  if (!run) throw new Error(`No handler for operation ${operation.name}`);200 201  // Parse, size-cap, and schema-validate the input, then stash it so the202  // verify guards (which run after this) and the handler read one parsed body.203  const parseInput = async (c: CommerceContext, next: Next) => {204    let input: unknown = null;205    if (operation.input && operation.method === "GET") {206      input = Object.fromEntries(207        Object.entries(c.req.query()).filter(([, value]) => value !== ""),208      );209    } else if (operation.input) {210      try {211        input = await readJsonBodyWithLimit(212          c.req.raw,213          MAX_COMMERCE_BODY_BYTES,214          "Request body is too large",215        );216      } catch (error) {217        if (error instanceof JsonBodyTooLargeError) {218          return protocolError(219            c,220            "INVALID_REQUEST",221            "Request body is too large",222          );223        }224        return protocolError(c, "INVALID_REQUEST", "Body is not JSON");225      }226    }227    if (operation.input) {228      const invalid = validateOperationInput(operation.name, input);229      if (invalid) return protocolError(c, "INVALID_REQUEST", invalid);230    }231    c.set("commerceInput", input);232    await next();233  };234 235  const handler = async (c: CommerceContext) => {236    try {237      const context: ProtocolContext = {238        apiKey: c.var.apiKey ?? "",239        requestIp: getRequestIp(c),240      };241      const result = await run(context, c.get("commerceInput") as never);242      return c.json(result as object, operation.successStatus as 200);243    } catch (error) {244      if (error instanceof ProtocolOperationError) {245        return protocolError(246          c,247          error.code,248          error.message,249          protocolErrorStatus(error.code),250          error.retryAfterSec,251        );252      }253      console.error(254        "[commerce] %s failed errorClass=%s",255        operation.name,256        error instanceof Error ? error.name : typeof error,257      );258      return protocolError(c, "INTERNAL_ERROR", "The operation failed");259    }260  };261 262  if (operation.auth === "server") {263    app.on(264      operation.method,265      path,266      commerceAuth(operation.auth),267      keyedRateLimitIfAuthed,268      authoritativeServerAuth,269      parseInput,270      handler,271    );272  } else {273    app.on(274      operation.method,275      path,276      commerceAuth(operation.auth),277      keyedRateLimitIfAuthed,278      parseInput,279      handler,280    );281  }282}283 284// The GraphQL binding shares the same handlers and the same role rules;285// SPEC.md 7 keeps operation failures inside the GraphQL errors array, so the286// only role decision made here is which credential kind was presented.287app.post(288  "/graphql",289  commerceAuth("none"),290  keyedRateLimitIfAuthed,291  async (c) => {292    let payload: unknown;293    try {294      payload = await readJsonBodyWithLimit(295        c.req.raw,296        MAX_COMMERCE_BODY_BYTES,297        "Request body is too large",298      );299    } catch (error) {300      if (error instanceof JsonBodyTooLargeError) {301        return protocolError(c, "INVALID_REQUEST", "Request body is too large");302      }303      return protocolError(c, "INVALID_REQUEST", "Body is not JSON");304    }305 306    const apiKey = c.var.apiKey;307    const { status, body } = await executeCommerceGraphql(payload, {308      role:309        apiKey === undefined310          ? null311          : isPublishableApiKey(apiKey)312            ? "verification"313            : "server",314      apiKey,315      requestIp: getRequestIp(c),316    });317    return c.json(body as object, status);318  },319);320 321// Terminal: an unknown /commerce/v1 path is a protocol 404, never an SPA322// fallthrough.323app.all("*", (c) =>324  c.json({ error: { code: "NOT_FOUND", message: "Unknown operation" } }, 404),325);326 327export { app as commerceRoutes };328 
    \ No newline at end of file diff --git a/packages/docs/public/llms-full.txt b/packages/docs/public/llms-full.txt index 4ffd243fd..34622e26c 100644 --- a/packages/docs/public/llms-full.txt +++ b/packages/docs/public/llms-full.txt @@ -3,7 +3,38 @@ > OpenIAP: Vendor-neutral in-app purchase specification — a client API across Apple, Google, Meta Horizon and Amazon, and a server-side commerce protocol for verification, entitlements and store events > Documentation: https://openiap.dev > Quick Reference: https://openiap.dev/llms.txt -> Generated: 2026-09-07T14:34:17.299Z +> Generated: 2026-09-08T21:06:25.027Z + +## Choose an SDK and verify the implementation + +Start with the app's existing framework. Use https://openiap.dev/languages for +the supported SDKs, install commands, platforms, and source repositories, then +follow that framework's guide at https://openiap.dev/docs/setup. Use its actual +types and lifecycle patterns; do not copy another language's API spelling. + +The mobile SDK handles the store purchase. The Commerce Protocol package +provides a server-side contract and conformance artifacts, not a mobile SDK or +a hosted backend. IAPKit is one backend implementation, not a requirement for +using OpenIAP SDKs. + +Follow one purchase at https://openiap.dev/commerce-protocol/getting-started. +Select Apple, Google Play, Amazon or Meta Horizon there; the chosen store stays +with the six-step flow and its build brief. For Quest, start at +https://openiap.dev/commerce-protocol/getting-started?store=horizon. +Each step compares the small, runnable SQLite example with IAPKit's handlers +and checks. Read the code for the responsibility being implemented: +- Teaching backend: https://github.com/hyodotdev/openiap-commerce-protocol-example +- IAPKit service: https://github.com/hyodotdev/openiap/tree/main/packages/kit +- IAPKit integration documentation: https://kit.openiap.dev/docs +- Build a backend: https://github.com/hyodotdev/openiap-commerce-protocol-example/blob/main/BUILD.md +- Connect a product role: https://github.com/hyodotdev/openiap-commerce-protocol-example/blob/main/INTEGRATE.md + +Explain what the person gets and what they must decide before showing code. +Implement in the target project, install and run from clean source, and verify +the promised behavior. Report commands, actual results, and remaining work. +Separate fixture checks, real store sandbox tests, and profile conformance; +do not claim one from another or hide failures by reducing the declared scope. + ## Table of Contents 1. Installation @@ -3536,9 +3567,9 @@ storage or tooling. - Commerce Protocol: https://openiap.dev/commerce-protocol - Commerce Protocol Use a Provider: https://openiap.dev/commerce-protocol/getting-started - Commerce Protocol Business Roles: https://openiap.dev/commerce-protocol/ecosystem -- Commerce Protocol Integration Brief: https://openiap.dev/commerce-example/integration-brief.md +- Commerce Protocol Integration Brief: https://github.com/hyodotdev/openiap-commerce-protocol-example/blob/main/INTEGRATE.md - Commerce Protocol Build with AI: https://openiap.dev/commerce-protocol/implementation -- Commerce Protocol AI Build Brief: https://openiap.dev/commerce-example/build-brief.md +- Commerce Protocol AI Build Brief: https://github.com/hyodotdev/openiap-commerce-protocol-example/blob/main/BUILD.md - Commerce Protocol Whitepaper: https://openiap.dev/commerce-protocol/whitepaper - Commerce Protocol Webhook Contract: https://openiap.dev/commerce-protocol/webhooks - Commerce Protocol Specification: https://github.com/hyodotdev/openiap/blob/main/specs/commerce-protocol/SPEC.md diff --git a/packages/docs/public/llms.txt b/packages/docs/public/llms.txt index 6acf6250a..ef6fd77dd 100644 --- a/packages/docs/public/llms.txt +++ b/packages/docs/public/llms.txt @@ -3,7 +3,38 @@ > OpenIAP: Vendor-neutral in-app purchase specification — a client API across Apple, Google, Meta Horizon and Amazon, and a server-side commerce protocol for verification, entitlements and store events > Documentation: https://openiap.dev > Full Reference: https://openiap.dev/llms-full.txt -> Generated: 2026-09-07T14:34:17.299Z +> Generated: 2026-09-08T21:06:25.027Z + +## Choose an SDK and verify the implementation + +Start with the app's existing framework. Use https://openiap.dev/languages for +the supported SDKs, install commands, platforms, and source repositories, then +follow that framework's guide at https://openiap.dev/docs/setup. Use its actual +types and lifecycle patterns; do not copy another language's API spelling. + +The mobile SDK handles the store purchase. The Commerce Protocol package +provides a server-side contract and conformance artifacts, not a mobile SDK or +a hosted backend. IAPKit is one backend implementation, not a requirement for +using OpenIAP SDKs. + +Follow one purchase at https://openiap.dev/commerce-protocol/getting-started. +Select Apple, Google Play, Amazon or Meta Horizon there; the chosen store stays +with the six-step flow and its build brief. For Quest, start at +https://openiap.dev/commerce-protocol/getting-started?store=horizon. +Each step compares the small, runnable SQLite example with IAPKit's handlers +and checks. Read the code for the responsibility being implemented: +- Teaching backend: https://github.com/hyodotdev/openiap-commerce-protocol-example +- IAPKit service: https://github.com/hyodotdev/openiap/tree/main/packages/kit +- IAPKit integration documentation: https://kit.openiap.dev/docs +- Build a backend: https://github.com/hyodotdev/openiap-commerce-protocol-example/blob/main/BUILD.md +- Connect a product role: https://github.com/hyodotdev/openiap-commerce-protocol-example/blob/main/INTEGRATE.md + +Explain what the person gets and what they must decide before showing code. +Implement in the target project, install and run from clean source, and verify +the promised behavior. Report commands, actual results, and remaining work. +Separate fixture checks, real store sandbox tests, and profile conformance; +do not claim one from another or hide failures by reducing the declared scope. + ## Installation @@ -288,21 +319,35 @@ identifier, or central runtime. - Docs: https://openiap.dev/commerce-protocol - Use a provider: https://openiap.dev/commerce-protocol/getting-started - Build your part: https://openiap.dev/commerce-protocol/ecosystem -- Role-specific AI integration brief: https://openiap.dev/commerce-example/integration-brief.md +- Role-specific AI integration brief: https://github.com/hyodotdev/openiap-commerce-protocol-example/blob/main/INTEGRATE.md - Build with AI: https://openiap.dev/commerce-protocol/implementation - Ready event receiver: https://openiap.dev/commerce-protocol/getting-started#receive-events -- AI build brief: https://openiap.dev/commerce-example/build-brief.md +- AI build brief: https://github.com/hyodotdev/openiap-commerce-protocol-example/blob/main/BUILD.md - Recorded local implementation: https://openiap.dev/commerce-protocol#build-walkthrough - Whitepaper and PDF: https://openiap.dev/commerce-protocol/whitepaper - Webhook contract: https://openiap.dev/commerce-protocol/webhooks - Normative spec: https://github.com/hyodotdev/openiap/blob/main/specs/commerce-protocol/SPEC.md - Canonical GraphQL contract, authored layers (compiled to JSON Schema): https://github.com/hyodotdev/openiap/tree/main/specs/commerce-protocol/schema -The recorded example follows six build milestones with reviewed source revisions, AI tasks, +The recorded example follows seven build milestones with reviewed source revisions, AI tasks, code changes, actual captures, and a correction/recheck log. It uses a fictional store and controlled clock with real local HTTP, SQLite and signed delivery. It is not a production provider or a full profile conformance claim. Its execution report is available at https://openiap.dev/commerce-example/run.json. +The IAPKit replacement check keeps the same app backend and receiver while +switching between the example and IAPKit for Apple, Google, Amazon and Horizon. +Apple/Google subscription checks cover cancellation, expiry and signed events. +Amazon/Horizon checks cover store-user binding, current ownership rechecks, +rejection, outage and recovery; read entitlements.productIds rather than +inventing subscription records or lifecycle events. All four cover account +erasure. Store identity must be authenticated by the app backend. Consumable +quantities need a separate durable fulfillment ledger. +Actual IAPKit handlers and local Convex storage run with fixture store +responses; Apple cryptographic verification and Google OIDC are substituted. +This does not prove device checkout or real store authentication. Read the +scope, command and source hashes at +https://openiap.dev/commerce-protocol/ecosystem#composition-proof and +https://openiap.dev/commerce-composition/iapkit-run.json. IAPKit is one implementation. Its product documentation and AI notes live at https://kit.openiap.dev/docs and https://kit.openiap.dev/llms.txt. diff --git a/packages/docs/public/robots.txt b/packages/docs/public/robots.txt index 20ded555e..502090e1e 100644 --- a/packages/docs/public/robots.txt +++ b/packages/docs/public/robots.txt @@ -3,18 +3,7 @@ Allow: / Sitemap: https://openiap.dev/sitemap.xml -# AI Assistants / LLM Crawlers -# Reference: https://llmstxt.org/ -User-agent: GPTBot -User-agent: ChatGPT-User -User-agent: Claude-Web -User-agent: Anthropic-AI -User-agent: PerplexityBot -User-agent: Google-Extended -Allow: / -Allow: /llms.txt -Allow: /llms-full.txt - -# LLM context files for AI assistants +# The wildcard rule also allows search and assistant crawlers. +# Optional context files for coding assistants: # llms.txt: https://openiap.dev/llms.txt (concise overview) -# llms-full.txt: https://openiap.dev/llms-full.txt (detailed reference) \ No newline at end of file +# llms-full.txt: https://openiap.dev/llms-full.txt (detailed reference) diff --git a/packages/docs/public/sitemap.xml b/packages/docs/public/sitemap.xml deleted file mode 100644 index 026ad9ef6..000000000 --- a/packages/docs/public/sitemap.xml +++ /dev/null @@ -1,256 +0,0 @@ - - - - https://openiap.dev/ - 2026-02-11 - weekly - 1.0 - - - https://openiap.dev/introduction - 2026-02-11 - weekly - 0.9 - - - https://openiap.dev/languages - 2026-02-11 - monthly - 0.8 - - - https://openiap.dev/tutorials - 2026-02-11 - weekly - 0.8 - - - https://openiap.dev/sponsors - 2026-02-11 - monthly - 0.7 - - - - - https://openiap.dev/docs/ecosystem - 2026-02-11 - weekly - 0.9 - - - https://openiap.dev/commerce-protocol - 2026-09-07 - monthly - 0.8 - - - https://openiap.dev/commerce-protocol/ecosystem - 2026-09-07 - monthly - 0.8 - - - https://openiap.dev/commerce-protocol/getting-started - 2026-09-07 - monthly - 0.8 - - - https://openiap.dev/commerce-protocol/implementation - 2026-09-07 - monthly - 0.8 - - - https://openiap.dev/commerce-protocol/whitepaper - 2026-09-07 - monthly - 0.8 - - - https://openiap.dev/commerce-protocol/profiles - 2026-09-01 - monthly - 0.7 - - - https://openiap.dev/commerce-protocol/operations - 2026-09-01 - monthly - 0.7 - - - https://openiap.dev/commerce-protocol/rest - 2026-09-01 - monthly - 0.7 - - - https://openiap.dev/commerce-protocol/graphql - 2026-09-01 - monthly - 0.7 - - - https://openiap.dev/commerce-protocol/authentication - 2026-09-01 - monthly - 0.7 - - - https://openiap.dev/commerce-protocol/capabilities - 2026-09-01 - monthly - 0.7 - - - https://openiap.dev/commerce-protocol/conformance - 2026-09-01 - monthly - 0.7 - - - https://openiap.dev/commerce-protocol/versioning - 2026-09-01 - monthly - 0.7 - - - https://openiap.dev/commerce-protocol/webhooks - 2026-09-01 - monthly - 0.8 - - - https://openiap.dev/docs/lifecycle - 2026-02-11 - weekly - 0.9 - - - https://openiap.dev/docs/lifecycle/subscription - 2026-02-11 - weekly - 0.8 - - - https://openiap.dev/docs/types - 2026-02-11 - weekly - 0.9 - - - https://openiap.dev/docs/apis - 2026-02-11 - weekly - 0.9 - - - https://openiap.dev/docs/events - 2026-02-11 - weekly - 0.8 - - - https://openiap.dev/docs/errors - 2026-02-11 - monthly - 0.7 - - - - - https://openiap.dev/docs/ios-setup - 2026-02-11 - monthly - 0.8 - - - https://openiap.dev/docs/android-setup - 2026-02-11 - monthly - 0.8 - - - - https://openiap.dev/docs/features/purchase - 2026-02-11 - weekly - 0.8 - - - https://openiap.dev/docs/features/subscription - 2026-02-11 - weekly - 0.8 - - - https://openiap.dev/docs/features/offer-code-redemption - 2026-02-11 - monthly - 0.7 - - - https://openiap.dev/docs/features/external-purchase - 2026-02-11 - weekly - 0.8 - - - https://openiap.dev/docs/setup/store - 2026-07-04 - monthly - 0.8 - - - https://openiap.dev/docs/setup/store/horizon - 2026-07-04 - monthly - 0.7 - - - https://openiap.dev/docs/setup/store/amazon - 2026-07-04 - monthly - 0.7 - - - https://openiap.dev/docs/setup/store/onside - 2026-07-04 - monthly - 0.7 - - - https://openiap.dev/docs/features/subscription/upgrade-downgrade - 2026-02-11 - monthly - 0.7 - - - - - https://openiap.dev/docs/updates/announcements - 2026-02-11 - weekly - 0.7 - - - https://openiap.dev/docs/updates/releases - 2026-07-24 - weekly - 0.7 - - - https://openiap.dev/docs/updates/migration - 2026-07-24 - monthly - 0.8 - - - https://openiap.dev/docs/updates/versions - 2026-02-11 - weekly - 0.7 - - diff --git a/packages/docs/scripts/check-commerce-composition.mjs b/packages/docs/scripts/check-commerce-composition.mjs new file mode 100644 index 000000000..5331f6ab4 --- /dev/null +++ b/packages/docs/scripts/check-commerce-composition.mjs @@ -0,0 +1,104 @@ +import assert from 'node:assert/strict'; +import { createHash } from 'node:crypto'; +import { existsSync, readFileSync } from 'node:fs'; +import { fileURLToPath } from 'node:url'; + +const assets = new URL('../public/commerce-composition/', import.meta.url); +const read = (name) => readFileSync(new URL(name, assets)); +const hash = (bytes) => createHash('sha256').update(bytes).digest('hex'); +const report = JSON.parse(read('run.json')); +const sources = JSON.parse(read('source.json')); +assert(report.checks.length > 0 && report.results.length === 2); +assert.equal(report.archiveVerification.sameSourceAndResults, true); +assert.equal(report.negativeControl.detected, true); +assert.equal(hash(read('source.tar.gz')), report.archiveVerification.sha256); +for (const [file, source] of Object.entries(sources)) + assert.equal( + hash(source), + report.sourceHashes[file], + `${file}: visible source and executed source differ` + ); +assert.equal( + hash(read('README.md')), + report.sourceHashes['composition/README.md'] +); +console.log( + 'Commerce composition: report, visible source, and verified archive match.' +); + +const reproductionAssets = new URL( + '../public/commerce-example/', + import.meta.url +); +const reproduction = JSON.parse( + readFileSync(new URL('ai-reproduction.json', reproductionAssets)) +); +assert.equal( + hash( + readFileSync(new URL(reproduction.sourceArchive.file, reproductionAssets)) + ), + reproduction.sourceArchive.sha256, + 'AI reproduction: source archive does not match the recorded result' +); +assert.equal(hash(reproduction.prompt), reproduction.promptSha256); +console.log('AI reproduction: recorded prompt and source archive match.'); + +const interop = JSON.parse(read('iapkit-run.json')); +const interopSources = JSON.parse(read('iapkit-source.json')); +const interopManifest = JSON.parse(read('iapkit-source-manifest.json')); +assert.equal(interop.checkCount, interop.checks.length); +assert.deepEqual(interop.changedConsumerFiles, []); +assert.deepEqual(interop.providerOrder, ['example', 'iapkit', 'example']); +for (const result of Object.values(interop.results)) { + assert.deepEqual(result.before.productIds, []); + assert.deepEqual(result.bound.productIds, ['premium.monthly']); + assert.equal(result.canceled.active, true); + assert.equal(result.canceled.subscription.willRenew, false); + assert.deepEqual(result.expired.productIds, []); + assert.deepEqual(result.erased.productIds, []); + assert.equal(result.erasure.status, 'completed'); +} +for (const [file, source] of Object.entries(interopSources)) { + assert.equal( + hash(source), + interopManifest[file], + `${file}: source snapshot drift` + ); + const [project, ...parts] = file.split('/'); + const name = parts.join('/'); + const executed = + project === 'kit' && name.startsWith('scripts/docs/') + ? interop.harnessHashes[name.slice('scripts/docs/'.length)] + : interop.sources[project === 'kit' ? 'openiap' : 'example'].hashes[name]; + assert(executed, `${file}: readable source was not pinned for this run`); + assert.equal(hash(source), executed, `${file}: executed source drift`); +} +const kitRoot = new URL('../../kit/', import.meta.url); +if (existsSync(new URL('package.json', kitRoot))) { + const { assertSourceHashes } = + await import('../../kit/scripts/docs/commerce-source-snapshot.mjs'); + for (const [project, root] of [ + ['openiap', kitRoot], + ['workspace', new URL('../../../', import.meta.url)], + ]) { + const recorded = interop.sources[project]; + const missing = assertSourceHashes(fileURLToPath(root), recorded?.hashes, { + allowMissing: recorded?.optionalGeneratedFiles ?? [], + }); + if (missing.length) + console.log( + `${project}: ${missing.length} recorded optional generated inputs are absent from this checkout.` + ); + } + assertSourceHashes( + fileURLToPath(new URL('scripts/docs/', kitRoot)), + interop.harnessHashes + ); + console.log( + 'IAPKit replacement: recorded outcomes, source snapshots, and available monorepo inputs match.' + ); +} else { + console.log( + 'IAPKit replacement: recorded outcomes and source snapshots match; current service sources are unavailable in this docs-only checkout.' + ); +} diff --git a/packages/docs/scripts/prerender.mjs b/packages/docs/scripts/prerender.mjs new file mode 100644 index 000000000..9bf89a6f8 --- /dev/null +++ b/packages/docs/scripts/prerender.mjs @@ -0,0 +1,198 @@ +import assert from 'node:assert/strict'; +import { mkdir, readFile, readdir, writeFile } from 'node:fs/promises'; +import { dirname, join, resolve } from 'node:path'; +import { fileURLToPath } from 'node:url'; +import ts from 'typescript'; +import { createServer } from 'vite'; +import { renderToStaticMarkup } from 'react-dom/server'; + +const root = fileURLToPath(new URL('..', import.meta.url)); +export const origin = 'https://openiap.dev'; + +// The page's SEO declaration also owns its sitemap and static HTML address. +export async function canonicalPaths(directory) { + const paths = new Set(); + for (const entry of await readdir(directory, { withFileTypes: true })) { + const filename = join(directory, entry.name); + if (entry.isDirectory()) { + for (const path of await canonicalPaths(filename)) paths.add(path); + } else if (entry.name.endsWith('.tsx')) { + const source = ts.createSourceFile( + filename, + await readFile(filename, 'utf8'), + ts.ScriptTarget.Latest, + true, + ts.ScriptKind.TSX + ); + function visit(node) { + if ( + (ts.isJsxSelfClosingElement(node) || ts.isJsxOpeningElement(node)) && + node.tagName.getText(source) === 'SEO' + ) { + const path = node.attributes.properties.find( + (prop) => + ts.isJsxAttribute(prop) && prop.name.getText(source) === 'path' + ); + if (!path) paths.add('/'); + else if (path.initializer && ts.isStringLiteral(path.initializer)) { + paths.add(path.initializer.text || '/'); + } else + assert.equal( + path.initializer?.getText(source), + '{config.seo.path}', + `${filename}: add canonical path discovery for this SEO expression` + ); + } + // Store example pages pass their SEO fields to a shared template. + if ( + ts.isPropertyAssignment(node) && + node.name.getText(source) === 'seo' && + ts.isObjectLiteralExpression(node.initializer) + ) { + const path = node.initializer.properties.find( + (prop) => + ts.isPropertyAssignment(prop) && + prop.name.getText(source) === 'path' + ); + if (path && ts.isStringLiteral(path.initializer)) + paths.add(path.initializer.text); + } + ts.forEachChild(node, visit); + } + visit(source); + } + } + return [...paths].sort(); +} + +export function pageHtml(template, rendered, path) { + assert( + /^\/(?:[a-z0-9-]+\/?)*$/.test(path), + `Invalid canonical path: ${path}` + ); + const metadata = []; + const body = rendered.replace( + /[\s\S]*?<\/title>|<(?:meta|link)\s[^>]*\/>/g, + (tag) => { + metadata.push(tag.replace(/^<(\w+)/, '<$1 data-prerender="true"')); + return ''; + } + ); + const head = metadata.join('\n'); + const canonicals = [ + ...head.matchAll(/<link\b[^>]*rel="canonical"[^>]*href="([^"]+)"/g), + ]; + assert.equal(canonicals.length, 1, `${path}: expected one canonical`); + assert.equal( + canonicals[0][1], + `${origin}${path}`, + `${path}: wrong canonical` + ); + assert.equal( + (head.match(/<title\b/g) ?? []).length, + 1, + `${path}: expected one title` + ); + assert( + /name="description" content="[^"]+"/.test(head), + `${path}: missing description` + ); + assert( + /property="og:title" content="[^"]+"/.test(head), + `${path}: missing social title` + ); + assert( + /<h1\b[^>]*>[\s\S]*?<\/h1>/.test(body), + `${path}: missing rendered heading` + ); + assert( + body.replace(/<[^>]*>/g, '').trim().length > 100, + `${path}: missing readable content` + ); + assert(template.includes('<div id="root"></div>'), 'Missing HTML root'); + return template + .replace('</head>', `${head}\n</head>`) + .replace('<div id="root"></div>', `<div id="root">${body}</div>`); +} + +export function sitemapXml(pages) { + const indexable = pages.filter( + ({ html }) => + !/<meta\b[^>]*name="robots"[^>]*content="[^"]*\bnoindex\b/i.test(html) + ); + return `<?xml version="1.0" encoding="UTF-8"?>\n<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9">\n${indexable.map(({ path }) => ` <url><loc>${origin}${path}</loc></url>`).join('\n')}\n</urlset>\n`; +} + +async function prerender() { + const paths = await canonicalPaths(join(root, 'src/pages')); + const template = await readFile(join(root, 'dist/index.html'), 'utf8'); + const vite = await createServer({ + root, + server: { middlewareMode: true }, + appType: 'custom', + // React Router's Node export uses the module-sync ESM condition. + ssr: { resolve: { externalConditions: ['node', 'module-sync'] } }, + }); + try { + const { render, LIBRARIES } = await vite.ssrLoadModule( + '/src/entry-server.tsx' + ); + const pages = paths.map((path) => { + try { + return { path, html: pageHtml(template, render(path), path) }; + } catch (error) { + throw new Error(`Cannot prerender ${path}: ${error.message}`, { + cause: error, + }); + } + }); + const sdkPage = + pages.find((page) => page.path === '/languages')?.html ?? ''; + for (const library of LIBRARIES) { + assert( + paths.includes(library.setupPath), + `${library.frameworkName}: missing setup page` + ); + assert( + sdkPage.includes(`href="${library.setupPath}"`), + `${library.frameworkName}: missing setup link` + ); + assert( + sdkPage.includes(`href="${library.url}"`), + `${library.frameworkName}: missing source link` + ); + assert( + sdkPage.includes(library.displayName), + `${library.frameworkName}: missing package name` + ); + if (library.installCommand) { + assert( + sdkPage.includes(renderToStaticMarkup(library.installCommand)), + `${library.frameworkName}: missing install command` + ); + } + } + for (const { path, html } of pages) { + const destination = join( + root, + 'dist', + path === '/' ? 'index.html' : `${path.slice(1)}.html` + ); + await mkdir(dirname(destination), { recursive: true }); + await writeFile(destination, html); + } + await writeFile(join(root, 'dist/sitemap.xml'), sitemapXml(pages)); + console.log( + `Prerendered ${paths.length} canonical pages with readable HTML, metadata, and a sitemap of indexable pages.` + ); + } finally { + await vite.close(); + } +} + +if ( + process.argv[1] && + resolve(process.argv[1]) === fileURLToPath(import.meta.url) +) { + await prerender(); +} diff --git a/packages/docs/scripts/prerender.test.mjs b/packages/docs/scripts/prerender.test.mjs new file mode 100644 index 000000000..f0fa90b02 --- /dev/null +++ b/packages/docs/scripts/prerender.test.mjs @@ -0,0 +1,135 @@ +import assert from 'node:assert/strict'; +import { test } from 'node:test'; +import { mkdtemp, rm, writeFile } from 'node:fs/promises'; +import { tmpdir } from 'node:os'; +import { join } from 'node:path'; +import { createServer } from 'node:http'; +import { gzipSync } from 'node:zlib'; +import { mkdir } from 'node:fs/promises'; +import { archiveDownloads } from '../vite.config.ts'; +import { canonicalPaths, pageHtml, sitemapXml } from './prerender.mjs'; + +const template = '<html><head></head><body><div id="root"></div></body></html>'; +const content = + '<h1>Verify a purchase</h1><p>The provider checks store evidence. Verification does not attach a user or grant account access. Bind ownership before reading what the user can use.</p>'; +const metadata = + '<title>Verification | OpenIAP'; +const path = '/commerce-protocol/operations'; + +test('serves source archives as unchanged downloads, including AI reproduction', async () => { + const directory = await mkdtemp(join(tmpdir(), 'openiap-archives-')); + const bytes = gzipSync('Recorded source bytes'); + const archives = [ + 'commerce-example/source.tar.gz', + 'commerce-example/ai-reproduction-source.tar.gz', + 'commerce-example/07-account-erasure/source.tar.gz', + 'commerce-composition/source.tar.gz', + ]; + const middleware = archiveDownloads(directory); + const server = createServer((request, response) => + middleware(request, response, () => { + response.writeHead(404).end(); + }) + ); + try { + for (const archive of archives) { + await mkdir(join(directory, archive, '..'), { recursive: true }); + await writeFile(join(directory, archive), bytes); + } + await new Promise((resolve) => server.listen(0, '127.0.0.1', resolve)); + const base = `http://127.0.0.1:${server.address().port}`; + for (const archive of archives) { + for (const method of ['GET', 'HEAD']) { + const response = await fetch(`${base}/${archive}`, { method }); + assert.equal(response.status, 200); + assert.equal(response.headers.get('content-encoding'), null); + assert.equal(response.headers.get('content-type'), 'application/gzip'); + assert.equal( + response.headers.get('content-disposition'), + `attachment; filename="${archive.split('/').at(-1)}"` + ); + assert.equal( + Number(response.headers.get('content-length')), + bytes.length + ); + assert.deepEqual( + Buffer.from(await response.arrayBuffer()), + method === 'GET' ? bytes : Buffer.alloc(0) + ); + } + } + } finally { + await new Promise((resolve) => server.close(resolve)); + await rm(directory, { recursive: true, force: true }); + } +}); + +test('publishes the same readable content and route metadata without JavaScript', () => { + const html = pageHtml(template, metadata + content, path); + assert(html.includes(`
    ${content}
    `)); + assert(html.indexOf('')); + assert.equal((html.match(/rel="canonical"/g) ?? []).length, 1); +}); + +test('rejects the empty SPA shell and homepage canonical regression', () => { + assert.throws( + () => pageHtml(template, metadata, path), + /missing rendered heading/ + ); + assert.throws( + () => pageHtml(template, metadata.replace(path, '/') + content, path), + /wrong canonical/ + ); + assert.throws( + () => pageHtml(template, metadata + metadata + content, path), + /one canonical/ + ); + assert.throws( + () => + pageHtml( + template, + metadata.replace(/<meta name="description"[^>]*\/>/, '') + content, + path + ), + /missing description/ + ); +}); + +test('renders noindex pages without advertising them in the sitemap', () => { + const noIndex = '<meta name="robots" content="noindex, follow"/>'; + const html = pageHtml(template, metadata + noIndex + content, path); + assert(html.indexOf('content="noindex, follow"') < html.indexOf('</head>')); + const sitemap = sitemapXml([ + { path: '/404', html }, + { path, html: pageHtml(template, metadata + content, path) }, + ]); + assert(!sitemap.includes('/404')); + assert(sitemap.includes(`https://openiap.dev${path}`)); +}); + +test('discovers direct pages and shared store templates, ignoring unrelated path fields', async () => { + const directory = await mkdtemp(join(tmpdir(), 'openiap-canonical-')); + try { + await writeFile( + join(directory, 'pages.tsx'), + ` + const page = <SEO path="/docs/setup/expo" />; + const home = <SEO />; + const store = { seo: { path: '/docs/example/ios' } }; + const unrelated = { path: '/not-a-page' }; + ` + ); + assert.deepEqual(await canonicalPaths(directory), [ + '/', + '/docs/example/ios', + '/docs/setup/expo', + ]); + await writeFile( + join(directory, 'dynamic.tsx'), + '<SEO path={unknownPath} />' + ); + await assert.rejects(canonicalPaths(directory), /canonical path discovery/); + } finally { + await rm(directory, { recursive: true, force: true }); + } +}); diff --git a/packages/docs/src/App.tsx b/packages/docs/src/App.tsx index b0b6680fd..86983117a 100644 --- a/packages/docs/src/App.tsx +++ b/packages/docs/src/App.tsx @@ -4,6 +4,7 @@ import { ToastContainer } from 'react-toastify'; import Layout from './components/Layout'; import ScrollToTop from './components/ScrollToTop'; import SearchModal from './components/SearchModal'; +import CommerceArchitectureModal from './components/CommerceArchitectureModal'; import Home from './pages/home'; import Introduction from './pages/introduction'; import Docs from './pages/docs'; @@ -47,6 +48,7 @@ function App() { </Route> </Routes> <SearchModal isOpen={isSearchOpen} onClose={closeSearchModal} /> + <CommerceArchitectureModal /> <ToastContainer position="bottom-center" toastStyle={{ diff --git a/packages/docs/src/components/AnchorLink.tsx b/packages/docs/src/components/AnchorLink.tsx index 4de1d878f..1888d2aed 100644 --- a/packages/docs/src/components/AnchorLink.tsx +++ b/packages/docs/src/components/AnchorLink.tsx @@ -32,7 +32,7 @@ function AnchorLink({ id, level, children }: AnchorLinkProps) { window.history.pushState(null, '', `#${id}`); } // Copy to clipboard - const url = `${window.location.pathname}#${id}`; + const url = `${window.location.pathname}${window.location.search}#${id}`; void navigator.clipboard.writeText(window.location.origin + url); }; diff --git a/packages/docs/src/components/CommerceArchitectureModal.tsx b/packages/docs/src/components/CommerceArchitectureModal.tsx new file mode 100644 index 000000000..05ad16d59 --- /dev/null +++ b/packages/docs/src/components/CommerceArchitectureModal.tsx @@ -0,0 +1,142 @@ +import { useEffect, useRef, useState, useSyncExternalStore } from 'react'; +import { Link, useNavigate } from 'react-router-dom'; +import { ArrowRight, X } from 'lucide-react'; +import { + closeCommerceArchitectureModal, + getCommerceArchitectureSnapshot, + subscribeToCommerceArchitecture, +} from '../lib/signals'; +import PackageInstall from './PackageInstall'; +import '../styles/commerce-protocol.css'; + +function CommerceArchitectureModal(): React.JSX.Element { + const modal = useSyncExternalStore( + subscribeToCommerceArchitecture, + getCommerceArchitectureSnapshot, + () => null + ); + const dialogRef = useRef<HTMLDialogElement>(null); + const backdropPointerDown = useRef(false); + const afterClose = useRef<(() => void) | null>(null); + const [closing, setClosing] = useState(false); + const navigate = useNavigate(); + + useEffect(() => { + const dialog = dialogRef.current; + if (!modal || !dialog) return; + + setClosing(false); + const overflow = document.body.style.overflow; + dialog.showModal(); + document.body.style.overflow = 'hidden'; + return () => { + afterClose.current = null; + dialog.close(); + document.body.style.overflow = overflow; + }; + }, [modal]); + + const part = modal?.part; + const step = part?.step; + const close = ( + action: () => void = modal?.onClose ?? closeCommerceArchitectureModal + ): void => { + if (afterClose.current) return; + afterClose.current = action; + setClosing(true); + }; + + return ( + <dialog + ref={dialogRef} + id="commerce-architecture-detail" + className="commerce-architecture-modal" + data-closing={closing} + aria-labelledby="commerce-architecture-title" + aria-describedby="commerce-architecture-description" + onCancel={(event) => { + event.preventDefault(); + close(); + }} + onAnimationEnd={(event) => { + if ( + event.target !== event.currentTarget || + event.animationName !== 'commerce-overlay-exit' + ) + return; + const action = afterClose.current; + afterClose.current = null; + setClosing(false); + closeCommerceArchitectureModal(); + action?.(); + }} + onPointerDown={(event) => { + backdropPointerDown.current = event.target === event.currentTarget; + }} + onClick={(event) => { + if ( + backdropPointerDown.current && + event.target === event.currentTarget + ) { + close(); + } + }} + > + {part && ( + <div className="commerce-architecture-modal-content"> + <div className="commerce-architecture-modal-heading"> + <span>{part.label}</span> + <button + className="btn btn-secondary" + type="button" + onClick={() => close()} + aria-label="Close architecture details" + autoFocus + > + <X size={20} aria-hidden="true" /> + </button> + </div> + <h2 id="commerce-architecture-title">{part.title}</h2> + <p id="commerce-architecture-description">{part.description}</p> + {part.packageName && ( + <PackageInstall packageName={part.packageName} /> + )} + <div className="commerce-actions"> + <Link + className="btn btn-secondary" + to={part.reference} + onClick={(event) => { + if ( + event.button !== 0 || + event.metaKey || + event.ctrlKey || + event.shiftKey || + event.altKey + ) + return; + event.preventDefault(); + close(() => navigate(part.reference)); + }} + > + {part.referenceLabel} + <ArrowRight size={16} aria-hidden="true" /> + </Link> + {step !== undefined && ( + <button + className="btn btn-secondary" + type="button" + onClick={() => { + close(() => modal.onShowExample(step)); + }} + > + See working example + </button> + )} + </div> + </div> + )} + </dialog> + ); +} + +export default CommerceArchitectureModal; diff --git a/packages/docs/src/components/CommerceBuildWalkthrough.tsx b/packages/docs/src/components/CommerceBuildWalkthrough.tsx index dfb90f5e2..35f7eef9d 100644 --- a/packages/docs/src/components/CommerceBuildWalkthrough.tsx +++ b/packages/docs/src/components/CommerceBuildWalkthrough.tsx @@ -1,8 +1,19 @@ -import { useEffect, useState } from 'react'; -import { Link } from 'react-router-dom'; +import { useEffect, useRef, useState } from 'react'; +import { Link, useNavigationType } from 'react-router-dom'; import CodeBlock from './CodeBlock'; +import CommerceImplementationComparison from './CommerceImplementationComparison'; +import { COMMERCE_PROTOCOL_LINKS } from '../lib/config'; const RECORDING = '/commerce-example'; +const IMPLEMENTATION_TOPICS = [ + 'capabilities', + 'verify', + 'bind', + 'status', + 'events', + 'access', + 'erase', +] as const; interface Milestone { step: number; @@ -17,10 +28,7 @@ interface Milestone { request: string; change: string; review: string; - source: string; - changes: string; report: string; - previousSource?: string; passed: number; }; } @@ -41,6 +49,9 @@ function CommerceBuildWalkthrough({ }): React.JSX.Element { const [run, setRun] = useState<RecordedRun | null>(null); const [failed, setFailed] = useState(false); + const headingRef = useRef<HTMLHeadingElement>(null); + const tabsRef = useRef<HTMLDivElement>(null); + const navigationType = useNavigationType(); useEffect(() => { const controller = new AbortController(); fetch(`${RECORDING}/run.json`, { signal: controller.signal }) @@ -55,6 +66,27 @@ function CommerceBuildWalkthrough({ return () => controller.abort(); }, []); + const selectedIndex = + run?.milestones.findIndex((milestone) => milestone.step === selected) ?? -1; + const resolvedIndex = selectedIndex < 0 ? 0 : selectedIndex; + const step = run?.milestones[resolvedIndex]; + + useEffect(() => { + if (!step) return; + const frame = requestAnimationFrame(() => { + headingRef.current?.focus({ preventScroll: true }); + tabsRef.current?.scrollIntoView({ + block: 'start', + behavior: + navigationType === 'POP' || + window.matchMedia('(prefers-reduced-motion: reduce)').matches + ? 'instant' + : 'smooth', + }); + }); + return () => cancelAnimationFrame(frame); + }, [step, navigationType]); + if (!run) { return ( <p role="status"> @@ -67,24 +99,20 @@ function CommerceBuildWalkthrough({ </p> ); } - const selectedIndex = run.milestones.findIndex( - (milestone) => milestone.step === selected - ); - const step = run.milestones[selectedIndex]; + if (!step) return <p role="status">No recorded checkpoints are available.</p>; return ( <div className="commerce-walkthrough"> <p> - Ask AI for one feature → run it → inspect the screen and responses → fix - what failed → repeat the check. These six source checkpoints record that - process in a separate example project. + See what happens to one subscription in{' '} + <a href={COMMERCE_PROTOCOL_LINKS.example}> + openiap-commerce-protocol-example + </a> + . Follow the purchase, access, and delivery results in its recorded + dashboard. </p> - <div className="commerce-run-meta"> - <span>Recorded {run.recordedAt.slice(0, 10)}</span> - <span>{run.checks.length} checks in the completed example</span> - <a href={`${RECORDING}/REVIEW.md`}>Review and correction log</a> - </div> <div + ref={tabsRef} className="language-tabs-header commerce-build-tabs" role="group" aria-label="Recorded build milestones" @@ -93,8 +121,8 @@ function CommerceBuildWalkthrough({ <button key={milestone.step} type="button" - className={`language-tab ${milestone.step === selected ? 'active' : ''}`} - aria-current={milestone.step === selected ? 'step' : undefined} + className={`language-tab ${milestone.step === step.step ? 'active' : ''}`} + aria-current={milestone.step === step.step ? 'step' : undefined} aria-controls="commerce-build-result" onClick={() => onSelect(milestone.step)} > @@ -102,21 +130,24 @@ function CommerceBuildWalkthrough({ </button> ))} </div> - <div id="commerce-build-result" className="commerce-build-result"> + <div + key={step.step} + id="commerce-build-result" + className="commerce-build-result" + > <div className="commerce-build-caption" aria-live="polite"> <div> - <h3>{step.title}</h3> + <h3 ref={headingRef} id={`build-step-${step.step}`} tabIndex={-1}> + {step.title} + </h3> <p>{step.result}</p> - <small> - Added: {step.built} · {step.build.passed} checks passed - </small> </div> <div className="commerce-step-controls"> <button className="btn btn-secondary" type="button" - disabled={selectedIndex === 0} - onClick={() => onSelect(run.milestones[selectedIndex - 1].step)} + disabled={resolvedIndex === 0} + onClick={() => onSelect(run.milestones[resolvedIndex - 1].step)} aria-label="Previous milestone" > ← @@ -124,17 +155,14 @@ function CommerceBuildWalkthrough({ <button className="btn btn-secondary" type="button" - disabled={selectedIndex === run.milestones.length - 1} - onClick={() => onSelect(run.milestones[selectedIndex + 1].step)} + disabled={resolvedIndex === run.milestones.length - 1} + onClick={() => onSelect(run.milestones[resolvedIndex + 1].step)} aria-label="Next milestone" > → </button> </div> </div> - <p> - <strong>AI task summary:</strong> {step.build.request} - </p> <a className="commerce-capture-link no-icon" href={`${RECORDING}/${step.screenshot}`} @@ -148,8 +176,15 @@ function CommerceBuildWalkthrough({ loading="lazy" /> </a> + <CommerceImplementationComparison + topic={IMPLEMENTATION_TOPICS[resolvedIndex] ?? 'checks'} + collapsed + /> <details key={`review-${step.step}`} className="commerce-run-details"> - <summary>What AI changed, reviewed, and corrected</summary> + <summary>Implementation and review details</summary> + <p> + <strong>AI task:</strong> {step.build.request} + </p> <p> <strong>Changed:</strong> {step.build.change} </p> @@ -157,35 +192,9 @@ function CommerceBuildWalkthrough({ <strong>Reviewed and rechecked:</strong> {step.build.review} </p> <p> - Extract this checkpoint into an empty folder, install dependencies - with your favorite package manager, and run its test and start - scripts. This example uses Bun; the protocol does not require it. + {step.built} · {step.build.passed} checks passed.{' '} + <a href={`${RECORDING}/REVIEW.md`}>Review and correction log</a> </p> - {step.build.previousSource && ( - <p> - This reviewed revision’s patch starts from the{' '} - <a href={`${RECORDING}/${step.build.previousSource}`} download> - preceding source revision - </a> - . - </p> - )} - <div className="commerce-actions"> - <a - className="btn btn-secondary" - href={`${RECORDING}/${step.build.source}`} - download - > - Run this source checkpoint ↓ - </a> - <a - className="btn btn-secondary" - href={`${RECORDING}/${step.build.changes}`} - download - > - Code changes ↓ - </a> - </div> </details> <details key={`results-${step.step}`} className="commerce-run-details"> <summary>Inspect this step’s checks and actual responses</summary> @@ -197,19 +206,21 @@ function CommerceBuildWalkthrough({ <CodeBlock language="json"> {JSON.stringify(step.responses, null, 2)} </CodeBlock> - <a href={`${RECORDING}/${step.build.report}`} download> - Recorded AI task and full report ↓ + <a href={`${RECORDING}/${step.build.report}`}> + Full execution report </a> </details> </div> <p className="commerce-capture-note"> - Each screenshot runs that step’s saved source. This incremental example - uses published openiap-commerce-protocol@{run.standalone.version}. HTTP, - SQLite, and signatures run locally; the store and clock are fixtures.{' '} - <Link to="/commerce-protocol/implementation#iapkit"> - Compare its scope with IAPKit + Recorded {run.recordedAt.slice(0, 10)} · {run.checks.length} checks in + the completed example · openiap-commerce-protocol@ + {run.standalone.version}. HTTP, SQLite, and signatures run locally; the + store and clock are fixtures. + </p> + <p> + <Link to="/commerce-protocol/implementation#build-brief"> + Build this into your product with AI → </Link> - . </p> </div> ); diff --git a/packages/docs/src/components/CommerceEcosystem.tsx b/packages/docs/src/components/CommerceEcosystem.tsx index da909c562..f42c9a3d0 100644 --- a/packages/docs/src/components/CommerceEcosystem.tsx +++ b/packages/docs/src/components/CommerceEcosystem.tsx @@ -34,7 +34,7 @@ function CommerceEcosystem(): React.JSX.Element { }; return ( <section - id="architecture" + id="commerce-ecosystem" className="commerce-ecosystem" aria-labelledby="ecosystem-heading" > diff --git a/packages/docs/src/components/CommerceImplementationComparison.tsx b/packages/docs/src/components/CommerceImplementationComparison.tsx new file mode 100644 index 000000000..c203ea25d --- /dev/null +++ b/packages/docs/src/components/CommerceImplementationComparison.tsx @@ -0,0 +1,76 @@ +import { + COMMERCE_IMPLEMENTATIONS, + COMMERCE_IMPLEMENTATION_TOPICS, + type CommerceImplementationTopic, +} from '../lib/commerceImplementations'; + +interface CommerceImplementationComparisonProps { + topic: CommerceImplementationTopic; + collapsed?: boolean; +} + +export default function CommerceImplementationComparison({ + topic, + collapsed = false, +}: CommerceImplementationComparisonProps): React.JSX.Element { + const comparison = COMMERCE_IMPLEMENTATION_TOPICS[topic]; + const content = ( + <div className="commerce-implementation-pair" data-topic={topic}> + <p className="commerce-implementation-pair-title">{comparison.title}</p> + <div className="commerce-implementation-pair-grid"> + {(['example', 'kit'] as const).map((key) => { + const project = COMMERCE_IMPLEMENTATIONS[key]; + const reference = comparison[key]; + const line = 'line' in reference ? `#L${reference.line}` : ''; + return ( + <div className="commerce-implementation-reference" key={key}> + <span className="commerce-implementation-role"> + {project.role} + </span> + <p className="commerce-implementation-name"> + <a href={project.url} target="_blank" rel="noopener noreferrer"> + {project.name} + </a> + </p> + <p>{reference.description}</p> + <a + className="commerce-implementation-source" + href={`${project.source}/${reference.file}.html${line}`} + target="_blank" + rel="noopener noreferrer" + aria-label={`${project.name}: read ${reference.symbol}`} + > + Read code: {reference.symbol} + </a> + </div> + ); + })} + </div> + <details className="commerce-implementation-checks"> + <summary>How to check this behavior</summary> + {(['example', 'kit'] as const).map((key) => ( + <p key={key}> + <strong>{key === 'example' ? 'Example' : 'IAPKit'}.</strong>{' '} + {comparison[key].check}{' '} + <a + href={`${COMMERCE_IMPLEMENTATIONS[key].source}/${comparison[key].checkFile}.html`} + target="_blank" + rel="noopener noreferrer" + > + Inspect reference + </a> + </p> + ))} + </details> + </div> + ); + + return collapsed ? ( + <details className="commerce-run-details"> + <summary>Compare the example and IAPKit</summary> + {content} + </details> + ) : ( + content + ); +} diff --git a/packages/docs/src/components/CommerceProtocolDiagram.tsx b/packages/docs/src/components/CommerceProtocolDiagram.tsx index 43eae1755..7d24bd60c 100644 --- a/packages/docs/src/components/CommerceProtocolDiagram.tsx +++ b/packages/docs/src/components/CommerceProtocolDiagram.tsx @@ -1,5 +1,5 @@ -import { useState } from 'react'; -import { Link } from 'react-router-dom'; +import { useEffect, useSyncExternalStore } from 'react'; +import { useLocation, useNavigate } from 'react-router-dom'; import { ArrowRight, ArrowRightLeft, @@ -7,18 +7,14 @@ import { Store, Server, Package, - X, } from 'lucide-react'; -import PackageInstall from './PackageInstall'; - -interface ArchitecturePart { - label: string; - title: string; - description: string; - reference: string; - referenceLabel: string; - step?: number; -} +import { + closeCommerceArchitectureModal, + getCommerceArchitectureSnapshot, + openCommerceArchitectureModal, + subscribeToCommerceArchitecture, + type CommerceArchitecturePart, +} from '../lib/signals'; const PARTS = { app: { @@ -90,8 +86,9 @@ const PARTS = { reference: '/commerce-protocol/implementation', referenceLabel: 'Build with AI', step: 1, + packageName: 'openiap-commerce-protocol', }, -} satisfies Record<string, ArchitecturePart>; +} satisfies Record<string, CommerceArchitecturePart>; type PartId = keyof typeof PARTS; @@ -102,22 +99,56 @@ interface CommerceProtocolDiagramProps { function CommerceProtocolDiagram({ onShowExample, }: CommerceProtocolDiagramProps): React.JSX.Element { - const [selected, setSelected] = useState<PartId | null>(null); - const part: ArchitecturePart | null = selected ? PARTS[selected] : null; + const { hash } = useLocation(); + const navigate = useNavigate(); + const modal = useSyncExternalStore( + subscribeToCommerceArchitecture, + getCommerceArchitectureSnapshot, + () => null + ); + + useEffect(() => { + const id = hash.slice('#architecture-'.length); + if ( + hash.startsWith('#architecture-') && + Object.prototype.hasOwnProperty.call(PARTS, id) + ) { + const trigger = document.getElementById(`architecture-${id}`); + trigger?.scrollIntoView({ block: 'nearest', behavior: 'instant' }); + trigger?.focus({ preventScroll: true }); + openCommerceArchitectureModal({ + part: PARTS[id as PartId], + onShowExample, + onClose: () => + navigate('#architecture', { + replace: true, + state: { commerceKeepScroll: true }, + }), + }); + } else { + closeCommerceArchitectureModal(); + } + return closeCommerceArchitectureModal; + }, [hash, navigate, onShowExample]); + const node = (id: PartId, icon?: React.ReactNode): React.JSX.Element => ( <button type="button" - className={`btn ${selected === id ? 'btn-primary' : 'btn-secondary'}`} - aria-pressed={selected === id} + id={`architecture-${id}`} + className={`btn ${modal?.part === PARTS[id] ? 'btn-primary' : 'btn-secondary'}`} + aria-haspopup="dialog" aria-controls="commerce-architecture-detail" - onClick={() => setSelected(selected === id ? null : id)} + onClick={(event) => { + event.currentTarget.focus({ preventScroll: true }); + navigate(`#architecture-${id}`); + }} > {icon} {PARTS[id].label} </button> ); return ( - <div className="commerce-architecture"> + <div id="architecture" className="commerce-architecture"> <div className="commerce-architecture-heading"> <h2 id="provider-architecture">Commerce backend architecture</h2> <span>Select a part to explore it.</span> @@ -186,42 +217,6 @@ function CommerceProtocolDiagram({ Defines the interfaces and behavior between these systems. </small> </div> - <div id="commerce-architecture-detail" aria-live="polite"> - {part && ( - <section className="commerce-part-detail"> - <div className="commerce-part-title"> - <h3>{part.title}</h3> - <button - className="btn btn-secondary" - type="button" - onClick={() => setSelected(null)} - aria-label="Close architecture details" - > - <X size={16} aria-hidden="true" /> - </button> - </div> - <p>{part.description}</p> - {selected === 'contract' && ( - <PackageInstall packageName="openiap-commerce-protocol" /> - )} - <div className="commerce-actions"> - <Link className="btn btn-secondary" to={part.reference}> - {part.referenceLabel} - </Link> - {part.step !== undefined && ( - <button - className="btn btn-secondary" - type="button" - onClick={() => onShowExample(part.step!)} - > - See this in the working example{' '} - <ArrowRight size={15} aria-hidden="true" /> - </button> - )} - </div> - </section> - )} - </div> </div> ); } diff --git a/packages/docs/src/components/CommercePurchaseJourney.tsx b/packages/docs/src/components/CommercePurchaseJourney.tsx new file mode 100644 index 000000000..de39c2c11 --- /dev/null +++ b/packages/docs/src/components/CommercePurchaseJourney.tsx @@ -0,0 +1,456 @@ +import { useEffect, useRef } from 'react'; +import { Link, useLocation } from 'react-router-dom'; +import { + ArrowLeft, + ArrowRight, + Check, + LockKeyhole, + Server, + Smartphone, + Store, + UserRound, +} from 'lucide-react'; +import CommerceImplementationComparison from './CommerceImplementationComparison'; + +const STEPS = [ + { + id: 'buy', + label: 'Buy', + title: 'Alice chooses Premium.', + description: + 'Your paywall—the screen offering Premium—shows the offer. Your app uses OpenIAP’s client SDK to open the store’s purchase screen. Apple or Google takes the payment and returns purchase evidence: a signed transaction or purchase token.', + nodes: [ + { kind: 'app', title: 'Your app', detail: 'Alice chooses Premium' }, + { kind: 'store', title: 'Apple / Google', detail: 'Handles the payment' }, + { kind: 'app', title: 'Your app', detail: 'Receives purchase evidence' }, + ], + result: 'Payment returned. Premium is still locked.', + unlocked: false, + reason: + 'The app sends the evidence to your backend using Alice’s signed-in session. A pending, canceled, or failed purchase creates no new access.', + term: 'Purchase evidence', + definition: + 'The store’s record of the purchase. It is something the backend can check; it is not proof of which app account owns it.', + reference: '/commerce-protocol/operations#verifyPurchase', + referenceLabel: 'How verification works', + }, + { + id: 'verify', + label: 'Verify', + title: 'Check the purchase with the store.', + description: + 'Your backend asks the commerce provider to check the evidence. The provider is the service responsible for purchase verification and access records. It can be IAPKit, another compatible service, or a backend you run.', + nodes: [ + { kind: 'server', title: 'Your backend', detail: 'Sends the evidence' }, + { + kind: 'server', + title: 'Commerce provider', + detail: 'Checks with the store', + }, + { + kind: 'check', + title: 'Valid purchase', + detail: 'No user attached yet', + }, + ], + result: 'The purchase is valid. Premium is still locked.', + unlocked: false, + reason: + 'A successful check answers “is this evidence valid?” It does not decide who gets access. If verification is unavailable, retry according to your policy; an outage is not a new purchase or a revocation.', + term: 'Verification', + definition: + 'Checking store evidence. The API call is verifyPurchase; its isValid result is separate from the user’s access.', + reference: '/commerce-protocol/operations#verifyPurchase', + referenceLabel: 'Verification reference', + }, + { + id: 'bind', + label: 'Connect the user', + title: 'This purchase belongs to Alice.', + description: + 'Your backend knows who signed in and checks whether that person may claim the purchase. It asks the provider to associate the verified purchase with Alice’s account. This association is called binding.', + nodes: [ + { + kind: 'user', + title: 'Alice’s session', + detail: 'Identified by your backend', + }, + { + kind: 'server', + title: 'Commerce provider', + detail: 'Connects purchase to Alice', + }, + { kind: 'user', title: 'Alice’s account', detail: 'Ownership recorded' }, + ], + result: 'Alice owns the purchase. Now read her access.', + unlocked: false, + reason: + 'Bob cannot take the same purchase by submitting Alice’s receipt. A failed binding stops this attempt. Repeating Alice’s successful request leaves the same owner in place.', + term: 'Authentication', + definition: + 'Your app login identifies Alice. A separate server credential lets your backend call the provider. The provider credential never replaces your app’s login.', + reference: '/commerce-protocol/authentication', + referenceLabel: 'Who may make each request', + }, + { + id: 'access', + label: 'Open Premium', + title: 'Ask what Alice can use now.', + description: + 'Your backend reads Alice’s current entitlements: the products she is allowed to use. If Premium is in that answer, your backend lets her open the paid content. It records fulfillment before the app finishes the store transaction.', + nodes: [ + { + kind: 'server', + title: 'Commerce provider', + detail: 'Returns current access', + }, + { + kind: 'server', + title: 'Your backend', + detail: 'Allows the Premium feature', + }, + { kind: 'app', title: 'Alice’s app', detail: 'Opens paid content' }, + ], + result: 'Alice can use Premium.', + unlocked: true, + reason: + 'Access is a current answer, not a permanent flag. An empty product list grants nothing. Respect expiry and freshness when caching; a failed read is not a successful access decision.', + term: 'Entitlements', + definition: + 'What this user may access now. Subscription status explains the subscription; entitlements answer which products it currently unlocks.', + reference: '/commerce-protocol/operations#entitlements', + referenceLabel: 'Access reference', + }, + { + id: 'changes', + label: 'Keep it current', + title: 'Cancellation keeps the paid time.', + description: + 'Alice turns off renewal. She keeps Premium until the end of her paid period. When that deadline arrives, access ends—even if a store notification is late. Your backend reads the current answer when it needs to authorize her.', + nodes: [ + { + kind: 'store', + title: 'Apple / Google', + detail: 'Reports subscription changes', + }, + { + kind: 'server', + title: 'Commerce provider', + detail: 'Updates the subscription', + }, + { + kind: 'server', + title: 'Your backend', + detail: 'Receives a signed event', + }, + ], + result: 'Renewal off → Premium stays open → expiry locks it.', + unlocked: false, + reason: + 'Events travel between servers. Your receiver checks the signature and saves each event once before acknowledging it. Retries must not repeat fulfillment.', + term: 'Webhook', + definition: + 'An HTTP message the provider sends to your backend when something changes. A signature lets your backend check who sent it and whether it was altered.', + reference: '/commerce-protocol/webhooks', + referenceLabel: 'Events and delivery reference', + }, + { + id: 'erase', + label: 'Delete the account', + title: 'Alice deletes her account.', + description: + 'Your backend disables Alice’s session and removes her saved event copies. It then asks every commerce provider holding her records to erase her identity. The example completes this in SQLite; IAPKit completes a queued job in Convex.', + nodes: [ + { kind: 'user', title: 'Alice’s account', detail: 'Session disabled' }, + { + kind: 'server', + title: 'Your backend', + detail: 'Erases delivered copies', + }, + { + kind: 'server', + title: 'Commerce provider', + detail: 'Erases account identity', + }, + ], + result: 'Identity removed. Old requests cannot restore the account.', + unlocked: false, + reason: + 'Keep unfinished deletion requests until the provider confirms completion. Your receiver must discard late events for the deleted account, including after restart. This removes account identity; it does not cancel the store subscription.', + term: 'Account erasure', + definition: + 'Removing the link to the app user from provider records and copies held by your services. An accepted job can still be queued; wait for completed before considering provider cleanup finished.', + reference: '/commerce-protocol/operations#eraseUser', + referenceLabel: 'Erasure reference', + }, +] as const; + +const ICONS = { + app: Smartphone, + store: Store, + server: Server, + user: UserRound, + check: Check, +}; + +export default function CommercePurchaseJourney(): React.JSX.Element { + const { hash, search } = useLocation(); + const requestedStore = new URLSearchParams(search).get('store'); + const store = + requestedStore === 'amazon' || + requestedStore === 'horizon' || + requestedStore === 'google' + ? requestedStore + : 'apple'; + const storeLabel = { + apple: 'Apple', + google: 'Google Play', + amazon: 'Amazon', + horizon: 'Meta Horizon', + }[store]; + const recheck = store === 'amazon' || store === 'horizon'; + const steps = STEPS.map((entry) => { + if (entry.id === 'buy') + return { + ...entry, + description: `Alice chooses Premium on your paywall. Your app opens ${storeLabel}’s purchase screen through its OpenIAP client library. A successful purchase gives your backend the evidence it needs to ask the store for verification.`, + nodes: entry.nodes.map((node) => + node.kind === 'store' ? { ...node, title: storeLabel } : node + ), + reason: recheck + ? 'Send the result through Alice’s signed-in session. Your backend must also verify that her store account belongs to that session. An app user ID and a store user ID are different identities.' + : entry.reason, + }; + if (entry.id === 'changes' && recheck) + return { + ...entry, + title: 'Check whether Alice still owns Premium.', + description: `Your backend requests Alice’s entitlements. IAPKit asks ${storeLabel} again using the saved store identity and purchase evidence. A negative answer removes Premium from the result. A store outage fails the request so your app can apply its retry policy.`, + nodes: [ + { + kind: 'server' as const, + title: 'Your backend', + detail: 'Requests current access', + }, + { + kind: 'server' as const, + title: 'IAPKit', + detail: 'Rechecks saved purchases', + }, + { + kind: 'store' as const, + title: storeLabel, + detail: 'Returns current ownership', + }, + ], + result: + 'Confirmed ownership → Premium. Rejected ownership → no access.', + reason: + 'IAPKit does not currently emit Amazon or Horizon subscription lifecycle events. Use entitlements.productIds for access; an empty subscriptions list does not mean that no product is owned. Do not infer renewal, refund, or expiry dates from a verification verdict.', + term: 'Current ownership', + definition: + 'A store answer at the time of the check. Your backend owns caching and retry policy. Consumable credits need a separate durable fulfillment ledger; an owned SKU is not a quantity to credit repeatedly.', + reference: '/commerce-protocol/operations#entitlements', + referenceLabel: 'Access reference', + }; + if (entry.id === 'changes') + return { + ...entry, + nodes: entry.nodes.map((node) => + node.kind === 'store' ? { ...node, title: storeLabel } : node + ), + }; + return entry; + }); + const selected = Math.max( + 0, + steps.findIndex((step) => hash === `#purchase-${step.id}`) + ); + const step = steps[selected]; + const heading = useRef<HTMLHeadingElement>(null); + const previous = useRef(selected); + + useEffect(() => { + if (previous.current !== selected && hash.startsWith('#purchase-')) { + heading.current?.focus({ preventScroll: true }); + heading.current?.closest('.commerce-journey')?.scrollIntoView({ + block: 'start', + behavior: window.matchMedia('(prefers-reduced-motion: reduce)').matches + ? 'instant' + : 'smooth', + }); + } + previous.current = selected; + }, [selected, hash]); + + return ( + <section className="commerce-journey" aria-label="Follow Alice’s purchase"> + <nav + className="language-tabs-header commerce-store-selector" + aria-label="Choose your store" + > + {(['apple', 'google', 'amazon', 'horizon'] as const).map((id) => ( + <Link + key={id} + to={{ search: `?store=${id}`, hash }} + className={`language-tab ${store === id ? 'active' : ''}`} + aria-current={store === id ? 'true' : undefined} + > + { + { + apple: 'Apple', + google: 'Google Play', + amazon: 'Amazon', + horizon: 'Meta Horizon', + }[id] + } + </Link> + ))} + </nav> + {recheck && ( + <p className="commerce-store-context"> + {store === 'horizon' + ? 'For Quest, link the Meta user to your app session before binding the verified SKU. IAPKit keeps the Meta app secret on the server.' + : 'For Amazon, keep the store user and receipt together. App Tester uses sandbox evidence; production receipts use the production RVS environment.'}{' '} + <Link + to={`/docs/setup/store/${store === 'horizon' ? 'horizon' : 'amazon'}`} + > + Store setup → + </Link> + </p> + )} + {typeof window === 'undefined' && ( + <noscript> + <style>{`.commerce-journey-steps, .commerce-journey-content, .commerce-journey-controls { display: none; }`}</style> + <p> + Read the purchase flow in order below. Enable JavaScript to use the + step navigator. + </p> + {steps.map((entry, index) => ( + <section key={entry.id}> + <h2> + {index + 1}. {entry.title} + </h2> + <p>{entry.description}</p> + <p> + <strong>{entry.result}</strong> {entry.reason} + </p> + <p> + <strong>{entry.term}:</strong> {entry.definition} + </p> + <CommerceImplementationComparison + topic={entry.id === 'changes' ? 'events' : entry.id} + /> + <Link to={entry.reference}>{entry.referenceLabel}</Link> + </section> + ))} + </noscript> + )} + <nav className="commerce-journey-steps" aria-label="Purchase steps"> + {steps.map((entry, index) => ( + <Link + key={entry.id} + id={`purchase-${entry.id}`} + to={{ search, hash: `#purchase-${entry.id}` }} + state={{ commerceKeepScroll: true }} + aria-current={index === selected ? 'step' : undefined} + > + <span>{index + 1}</span> + {entry.label} + </Link> + ))} + </nav> + <div className="commerce-journey-content" key={`${store}-${step.id}`}> + <div className="commerce-journey-heading"> + <span> + Step {selected + 1} of {STEPS.length} + </span> + <h2 ref={heading} tabIndex={-1}> + {step.title} + </h2> + <p>{step.description}</p> + </div> + <figure + className="commerce-journey-map" + aria-label={step.nodes + .map((node) => `${node.title}: ${node.detail}`) + .join(' → ')} + > + {step.nodes.map((node, index) => { + const Icon = ICONS[node.kind]; + return ( + <div className="commerce-journey-node" key={node.title + index}> + <Icon size={24} aria-hidden="true" /> + <strong>{node.title}</strong> + <span>{node.detail}</span> + {index < step.nodes.length - 1 && ( + <ArrowRight + className="commerce-journey-arrow" + size={20} + aria-hidden="true" + /> + )} + </div> + ); + })} + </figure> + <div className="commerce-journey-result"> + {step.unlocked ? ( + <Check size={20} aria-hidden="true" /> + ) : ( + <LockKeyhole size={20} aria-hidden="true" /> + )} + <strong>{step.result}</strong> + </div> + <p>{step.reason}</p> + <aside className="commerce-journey-term"> + <strong>{step.term}</strong> + <p>{step.definition}</p> + <Link to={step.reference}>{step.referenceLabel} →</Link> + </aside> + <CommerceImplementationComparison + topic={ + recheck && step.id === 'bind' + ? 'storeBind' + : recheck && (step.id === 'access' || step.id === 'changes') + ? 'storeAccess' + : step.id === 'changes' + ? 'events' + : step.id + } + /> + </div> + <div className="commerce-journey-controls"> + {selected > 0 ? ( + <Link + className="btn btn-secondary" + to={{ search, hash: `#purchase-${steps[selected - 1].id}` }} + state={{ commerceKeepScroll: true }} + > + <ArrowLeft size={16} aria-hidden="true" /> Previous + </Link> + ) : ( + <span /> + )} + {selected < STEPS.length - 1 ? ( + <Link + className="btn btn-primary" + to={{ search, hash: `#purchase-${steps[selected + 1].id}` }} + state={{ commerceKeepScroll: true }} + > + Next: {STEPS[selected + 1].label} + <ArrowRight size={16} aria-hidden="true" /> + </Link> + ) : ( + <Link + className="btn btn-primary" + to={{ pathname: '/commerce-protocol/implementation', search }} + > + Build this for your app + <ArrowRight size={16} aria-hidden="true" /> + </Link> + )} + </div> + </section> + ); +} diff --git a/packages/docs/src/components/DocsShell.tsx b/packages/docs/src/components/DocsShell.tsx index a9a37f828..e48b62624 100644 --- a/packages/docs/src/components/DocsShell.tsx +++ b/packages/docs/src/components/DocsShell.tsx @@ -8,6 +8,7 @@ import type { import { createPortal } from 'react-dom'; import { Bookmark } from 'lucide-react'; import { DOCS_SIDEBAR } from '../lib/config'; +import { useDetailsTransition } from '../hooks/useDetailsTransition'; function clampSidebarWidth(width: number): number { return Math.min( @@ -76,6 +77,8 @@ function DocsShell({ nav, navLabel, wide = false, children }: DocsShellProps) { const [isResizingSidebar, setIsResizingSidebar] = useState(false); const [isSidebarScrolling, setIsSidebarScrolling] = useState(false); const sidebarRef = useRef<HTMLElement | null>(null); + const contentRef = useRef<HTMLElement | null>(null); + useDetailsTransition(contentRef); const sidebarScrollTimeoutRef = useRef<number | null>(null); const dragRef = useRef<{ startX: number; @@ -233,36 +236,37 @@ function DocsShell({ nav, navLabel, wide = false, children }: DocsShellProps) { // y≈88-120px, exactly where the fixed toggle at top: 70px lives). // Removing the element from the DOM entirely guarantees the drawer // items underneath get every tap they should. - const sidebarToggle = isSidebarOpen - ? null - : createPortal( - <button - type="button" - className={`docs-sidebar-toggle ${isScrolled ? 'scrolled' : ''}`} - onClick={(event) => { - event.stopPropagation(); - setIsSidebarOpen(true); - }} - aria-label="Toggle sidebar" - > - <svg - width="20" - height="20" - viewBox="0 0 20 20" - fill="none" - xmlns="http://www.w3.org/2000/svg" + const sidebarToggle = + isSidebarOpen || typeof document === 'undefined' + ? null + : createPortal( + <button + type="button" + className={`docs-sidebar-toggle ${isScrolled ? 'scrolled' : ''}`} + onClick={(event) => { + event.stopPropagation(); + setIsSidebarOpen(true); + }} + aria-label="Toggle sidebar" > - <path - d="M3 5h14M3 10h14M3 15h14" - stroke="currentColor" - strokeWidth="2" - strokeLinecap="round" - /> - </svg> - <span>Menu</span> - </button>, - document.body - ); + <svg + width="20" + height="20" + viewBox="0 0 20 20" + fill="none" + xmlns="http://www.w3.org/2000/svg" + > + <path + d="M3 5h14M3 10h14M3 15h14" + stroke="currentColor" + strokeWidth="2" + strokeLinecap="round" + /> + </svg> + <span>Menu</span> + </button>, + document.body + ); return ( <div @@ -343,7 +347,9 @@ function DocsShell({ nav, navLabel, wide = false, children }: DocsShellProps) { /> </button> </div> - <main className="docs-content">{children}</main> + <main ref={contentRef} className="docs-content"> + {children} + </main> </div> ); } diff --git a/packages/docs/src/components/MenuDropdown.tsx b/packages/docs/src/components/MenuDropdown.tsx index 9337c1396..62c7d5220 100644 --- a/packages/docs/src/components/MenuDropdown.tsx +++ b/packages/docs/src/components/MenuDropdown.tsx @@ -19,8 +19,9 @@ function isGroup(entry: MenuEntry): entry is MenuGroup { interface MenuDropdownProps { title: string; - titleTo: string; + titleTo?: string; items: MenuEntry[]; + defaultExpanded?: boolean; onItemClick?: () => void; } @@ -131,9 +132,10 @@ export function MenuDropdown({ title, titleTo, items, + defaultExpanded = false, onItemClick, }: MenuDropdownProps) { - const [isExpanded, setIsExpanded] = useState(false); + const [isExpanded, setIsExpanded] = useState(defaultExpanded); const location = useLocation(); const navigate = useNavigate(); const contentId = useId(); @@ -150,13 +152,14 @@ export function MenuDropdown({ if (isGroupActive) { setIsExpanded(true); } - }, [isGroupActive]); + }, [isGroupActive, location.pathname]); // Title click: always navigate + close the mobile drawer. Collapsing // is handled exclusively by the dedicated chevron toggle so screen- // reader semantics stay clean (the title is a nav control, not a // disclosure control). const handleTitleClick = () => { + if (!titleTo) return; setIsExpanded(true); navigate(titleTo); onItemClick?.(); @@ -166,27 +169,43 @@ export function MenuDropdown({ return ( <li className="menu-dropdown"> - <div - className={`menu-dropdown-header ${isTitleActive ? 'active' : isChildActive ? 'group-active' : ''}`} - > - <button - type="button" - onClick={handleTitleClick} - className={`menu-dropdown-title ${isTitleActive ? 'active' : ''}`} + {titleTo ? ( + <div + className={`menu-dropdown-header ${isTitleActive ? 'active' : isChildActive ? 'group-active' : ''}`} > - {title} - </button> + <button + type="button" + onClick={handleTitleClick} + className={`menu-dropdown-title ${isTitleActive ? 'active' : ''}`} + > + {title} + </button> + <button + type="button" + onClick={toggleExpanded} + className="menu-dropdown-toggle" + aria-label={`Toggle ${title} submenu`} + aria-expanded={isExpanded} + aria-controls={contentId} + > + <Chevron isExpanded={isExpanded} /> + </button> + </div> + ) : ( <button type="button" onClick={toggleExpanded} - className="menu-dropdown-toggle" + className={`menu-dropdown-header ${isChildActive ? 'group-active' : ''}`} aria-label={`Toggle ${title} submenu`} aria-expanded={isExpanded} aria-controls={contentId} > - <Chevron isExpanded={isExpanded} /> + <span className="menu-dropdown-title">{title}</span> + <span className="menu-dropdown-toggle" aria-hidden="true"> + <Chevron isExpanded={isExpanded} /> + </span> </button> - </div> + )} <div id={contentId} className="menu-dropdown-content" @@ -197,7 +216,7 @@ export function MenuDropdown({ {items.map((entry) => isGroup(entry) ? ( <SubMenu - key={`${titleTo}::group::${entry.label.replace(/\s+/g, '-').toLowerCase()}`} + key={`${titleTo ?? title}::group::${entry.label.replace(/\s+/g, '-').toLowerCase()}`} group={entry} onItemClick={onItemClick} parentExpanded={isExpanded} diff --git a/packages/docs/src/components/SEO.tsx b/packages/docs/src/components/SEO.tsx index e50ad3584..d16632f9f 100644 --- a/packages/docs/src/components/SEO.tsx +++ b/packages/docs/src/components/SEO.tsx @@ -1,5 +1,3 @@ -import { useEffect } from 'react'; - interface SEOProps { title?: string; description?: string; @@ -8,6 +6,7 @@ interface SEOProps { type?: 'website' | 'article'; image?: string; includeAppSchema?: boolean; + noIndex?: boolean; } const BASE_URL = 'https://openiap.dev'; @@ -24,76 +23,13 @@ function SEO({ type = 'website', image, includeAppSchema = false, + noIndex = false, }: SEOProps) { const pageTitle = title ? `${title} | OpenIAP` : DEFAULT_TITLE; const pageDescription = description || DEFAULT_DESCRIPTION; - const canonicalUrl = `${BASE_URL}${path}`; + const canonicalUrl = `${BASE_URL}${path || '/'}`; const imageUrl = `${BASE_URL}${image || DEFAULT_IMAGE}`; - useEffect(() => { - const upsertMeta = ( - attribute: 'name' | 'property', - key: string, - content: string - ): void => { - const alternateAttribute = attribute === 'name' ? 'property' : 'name'; - let element = document.head.querySelector<HTMLMetaElement>( - `meta[${attribute}="${key}"], meta[${alternateAttribute}="${key}"]` - ); - - if (!element) { - element = document.createElement('meta'); - document.head.appendChild(element); - } - - element.removeAttribute(alternateAttribute); - element.setAttribute(attribute, key); - element.content = content; - element.dataset.openiapSeo = 'true'; - }; - - const upsertCanonical = (): void => { - let element = document.head.querySelector<HTMLLinkElement>( - 'link[rel="canonical"]' - ); - - if (!element) { - element = document.createElement('link'); - element.rel = 'canonical'; - document.head.appendChild(element); - } - - element.href = canonicalUrl; - element.dataset.openiapSeo = 'true'; - }; - - upsertMeta('name', 'title', pageTitle); - upsertMeta('name', 'description', pageDescription); - if (keywords) { - upsertMeta('name', 'keywords', keywords); - } else { - const staleKeywords = document.head.querySelector<HTMLMetaElement>( - 'meta[name="keywords"], meta[property="keywords"]' - ); - - if (staleKeywords?.dataset.openiapSeo === 'true') { - staleKeywords.remove(); - } - } - upsertMeta('property', 'og:type', type); - upsertMeta('property', 'og:url', canonicalUrl); - upsertMeta('property', 'og:title', pageTitle); - upsertMeta('property', 'og:description', pageDescription); - upsertMeta('property', 'og:image', imageUrl); - upsertMeta('property', 'og:site_name', 'OpenIAP'); - upsertMeta('name', 'twitter:card', 'summary_large_image'); - upsertMeta('name', 'twitter:url', canonicalUrl); - upsertMeta('name', 'twitter:title', pageTitle); - upsertMeta('name', 'twitter:description', pageDescription); - upsertMeta('name', 'twitter:image', imageUrl); - upsertCanonical(); - }, [canonicalUrl, imageUrl, keywords, pageDescription, pageTitle, type]); - // Schema.org structured data for SoftwareApplication const schemaOrg = { '@context': 'https://schema.org', @@ -118,6 +54,25 @@ function SEO({ return ( <> <title>{pageTitle} + + + + {keywords && } + + + + + + + + + + + + {includeAppSchema && ( )} diff --git a/packages/docs/src/entry-server.tsx b/packages/docs/src/entry-server.tsx new file mode 100644 index 000000000..495bfa866 --- /dev/null +++ b/packages/docs/src/entry-server.tsx @@ -0,0 +1,13 @@ +import { renderToString } from 'react-dom/server'; +import { StaticRouter } from 'react-router-dom'; +import App from './App'; + +export { LIBRARIES } from './lib/images'; + +export function render(path: string): string { + return renderToString( + + + + ); +} diff --git a/packages/docs/src/hooks/useDetailsTransition.ts b/packages/docs/src/hooks/useDetailsTransition.ts new file mode 100644 index 000000000..ff4f898dd --- /dev/null +++ b/packages/docs/src/hooks/useDetailsTransition.ts @@ -0,0 +1,119 @@ +import { useEffect, type RefObject } from 'react'; + +interface DetailsTransition { + expanded: boolean; + stop: () => void; + finish: () => void; +} + +export function useDetailsTransition( + containerRef: RefObject +): void { + useEffect(() => { + const container = containerRef.current; + if (!container) return; + + const reducedMotion = window.matchMedia('(prefers-reduced-motion: reduce)'); + const transitions = new Map(); + + const finishAll = (): void => { + for (const transition of transitions.values()) transition.finish(); + }; + + const handleClick = (event: MouseEvent): void => { + if (event.defaultPrevented || !(event.target instanceof Element)) return; + const summary = event.target.closest('summary'); + const details = summary?.parentElement; + if ( + !summary || + !(details instanceof HTMLDetailsElement) || + !container.contains(details) || + event.target.closest('a, button, input, select, textarea') + ) + return; + + event.preventDefault(); + summary.focus({ preventScroll: true }); + const previous = transitions.get(details); + const expanded = !(previous?.expanded ?? details.open); + + // Nested disclosures must measure against their parent's natural height. + for (const [other, transition] of transitions) { + if (other === details) continue; + if (other.contains(details)) transition.stop(); + else if (details.contains(other)) transition.finish(); + } + + const startHeight = details.getBoundingClientRect().height; + previous?.stop(); + if (reducedMotion.matches) { + details.open = expanded; + return; + } + + const originalHeight = details.style.height; + const originalOverflow = details.style.overflow; + let frame = 0; + let animation: Animation | undefined; + const stop = (): void => { + cancelAnimationFrame(frame); + if (animation) { + animation.onfinish = null; + animation.oncancel = null; + animation.cancel(); + } + details.style.height = originalHeight; + details.style.overflow = originalOverflow; + transitions.delete(details); + }; + const finish = (): void => { + stop(); + details.open = expanded; + }; + + transitions.set(details, { expanded, stop, finish }); + details.style.height = `${startHeight}px`; + details.style.overflow = 'hidden'; + details.open = true; + + // Allow native toggle handlers to render any lazy content before measuring. + frame = requestAnimationFrame(() => { + if (!details.isConnected) { + stop(); + return; + } + details.style.height = originalHeight; + details.open = expanded; + const endHeight = details.getBoundingClientRect().height; + details.open = true; + animation = details.animate( + { height: [`${startHeight}px`, `${endHeight}px`] }, + { + duration: 280, + easing: 'cubic-bezier(0.4, 0, 0.2, 1)', + fill: 'both', + } + ); + animation.onfinish = finish; + animation.oncancel = stop; + }); + }; + + let width = container.getBoundingClientRect().width; + const resizeObserver = new ResizeObserver(() => { + const nextWidth = container.getBoundingClientRect().width; + if (nextWidth !== width) finishAll(); + width = nextWidth; + }); + resizeObserver.observe(container); + container.addEventListener('click', handleClick); + reducedMotion.addEventListener('change', finishAll); + + return () => { + container.removeEventListener('click', handleClick); + reducedMotion.removeEventListener('change', finishAll); + resizeObserver.disconnect(); + for (const transition of transitions.values()) transition.stop(); + }; + }, [containerRef]); +} diff --git a/packages/docs/src/hooks/useScrollToHash.ts b/packages/docs/src/hooks/useScrollToHash.ts index 8f397a077..bde13f6d3 100644 --- a/packages/docs/src/hooks/useScrollToHash.ts +++ b/packages/docs/src/hooks/useScrollToHash.ts @@ -1,10 +1,12 @@ import { useEffect } from 'react'; import { useLocation } from 'react-router-dom'; -export function useScrollToHash() { +export function useScrollToHash(offset = 80) { const location = useLocation(); useEffect(() => { + if (location.state?.commerceKeepScroll) return; + // Always scroll to top first when route changes if (!location.hash) { window.scrollTo({ top: 0, behavior: 'instant' }); @@ -14,17 +16,27 @@ export function useScrollToHash() { const id = location.hash.slice(1); // Remove the # const element = document.getElementById(id); if (element) { - // Account for fixed header - const yOffset = -80; + let ancestor = element.parentElement; + while (ancestor) { + if (ancestor instanceof HTMLDetailsElement) ancestor.open = true; + ancestor = ancestor.parentElement; + } + const menu = document.querySelector('.docs-sidebar-toggle'); + const menuBounds = menu?.getBoundingClientRect(); + const visibleOffset = menuBounds?.height + ? Math.max(offset, menuBounds.bottom + 16) + : offset; const y = - element.getBoundingClientRect().top + window.pageYOffset + yOffset; + element.getBoundingClientRect().top + + window.pageYOffset - + visibleOffset; window.scrollTo({ top: y, behavior: 'instant' }); } }, 100); return () => clearTimeout(timeoutId); } - }, [location]); + }, [location, offset]); } /** diff --git a/packages/docs/src/lib/commerceEcosystem.ts b/packages/docs/src/lib/commerceEcosystem.ts index 26f68efbc..2ace45b6e 100644 --- a/packages/docs/src/lib/commerceEcosystem.ts +++ b/packages/docs/src/lib/commerceEcosystem.ts @@ -2,6 +2,8 @@ export const COMMERCE_ROLES = [ { id: 'experience', title: 'Experience', + benefit: + 'Keep your paywall, targeting, and experiments. Connect product selection to the app’s existing purchase flow.', examples: 'Paywalls · offers · experiments', owns: 'Presentation, targeting, and product selection', input: @@ -14,6 +16,8 @@ export const COMMERCE_ROLES = [ { id: 'commerce', title: 'Commerce services', + benefit: + 'Choose your store adapters, database, and service model. Give app backends a defined contract they can test and reuse.', examples: 'Verification · identity binding · access', owns: 'Store evidence validation, purchase ownership, and current entitlement state', input: 'Store evidence; the app backend’s authenticated user identity', @@ -26,6 +30,8 @@ export const COMMERCE_ROLES = [ { id: 'data', title: 'Data & automation', + benefit: + 'Build a receiver for normalized events, then reuse it across compatible emitters. Own your reports, audiences, and workflows.', examples: 'Analytics · attribution · CRM', owns: 'Event ingestion and its own business models and workflows', input: 'Authenticated normalized events from a configured emitter', diff --git a/packages/docs/src/lib/commerceImplementations.ts b/packages/docs/src/lib/commerceImplementations.ts new file mode 100644 index 000000000..ee21dc885 --- /dev/null +++ b/packages/docs/src/lib/commerceImplementations.ts @@ -0,0 +1,359 @@ +import { COMMERCE_PROTOCOL_LINKS } from './config'; + +export const COMMERCE_IMPLEMENTATIONS = { + example: { + name: 'openiap-commerce-protocol-example', + role: 'Run the flow locally', + url: COMMERCE_PROTOCOL_LINKS.example, + source: '/commerce-source/example', + }, + kit: { + name: 'IAPKit', + role: 'See the service implementation', + url: 'https://github.com/hyodotdev/openiap/tree/main/packages/kit', + source: '/commerce-source/kit', + }, +} as const; + +interface ImplementationReference { + description: string; + file: string; + symbol: string; + line?: number; + checkFile: string; + check: string; +} + +interface ImplementationComparison { + title: string; + example: ImplementationReference; + kit: ImplementationReference; +} + +export const COMMERCE_IMPLEMENTATION_TOPICS = { + buy: { + title: 'Where the store result goes', + example: { + description: + 'The purchase mapper converts Apple, Google, Amazon, and Horizon client results into verification input on your backend. Its demo checks the mapping without making a store purchase.', + file: 'client-bridge.mjs', + symbol: 'toVerifyPurchaseInput', + line: 5, + checkFile: 'client-bridge.mjs', + check: + 'runBridgeDemo checks all four store mappings and requires a separate store identity for Amazon and Horizon. Run npm run demo:bridge.', + }, + kit: { + description: + 'IAPKit receives that store evidence through verifyPurchase. The paywall, store purchase screen, and app login stay with your app; IAPKit does not replace them.', + file: 'server/api/commerce/handlers.ts', + symbol: 'verifyPurchase', + line: 220, + checkFile: 'server/api/commerce/routes.test.ts', + check: + 'Route tests cover evidence parsing and errors with mocked store calls; they do not perform a mobile purchase.', + }, + }, + verify: { + title: 'Same question: is the evidence valid?', + example: { + description: + 'verifyFixture recognizes one fictional purchase. A valid result saves it in SQLite with no user attached. You can watch Alice’s access stay locked after verification.', + file: 'provider.mjs', + symbol: 'verifyPurchase', + line: 202, + checkFile: 'scenario.mjs', + check: + 'The Verify step checks isValid and confirms that Alice still has no access. Run npm test.', + }, + kit: { + description: + 'The handler sends evidence to the Apple, Google, Meta, or Amazon verifier and returns the same isValid answer. Store-specific work stays behind this call.', + file: 'server/api/commerce/handlers.ts', + symbol: 'verifyPurchaseVerdict', + line: 168, + checkFile: 'server/api/commerce/routes.test.ts', + check: + 'The route suite checks unreachable verification and retry behavior using mocked store I/O.', + }, + }, + storeBind: { + title: 'Connect the store account to your app account', + example: { + description: + 'The app backend checks that the Amazon or Horizon store user is linked to this signed-in session. SQLite then records one owner for the verified evidence.', + file: 'composition/app-backend.mjs', + symbol: 'resolveStoreUser', + line: 60, + checkFile: 'client-bridge.mjs', + check: + 'Run npm run demo:bridge to inspect all four evidence shapes. The store identity comes from the host’s authenticated account link.', + }, + kit: { + description: + 'IAPKit binds the verified purchase row. Amazon uses the store user, receipt, and environment; Horizon uses the store user and SKU. Neither can move to another app account through this call.', + file: 'convex/purchases/mutation.ts', + symbol: 'bindVerifiedPurchaseAsServer', + line: 17, + checkFile: 'convex/purchases/ownership.test.ts', + check: + 'Checks role enforcement, conflicting accounts, project isolation, and erasure during binding.', + }, + }, + storeAccess: { + title: 'Ask the store again before granting access', + example: { + description: + 'The comparison fixture changes its verification answer from accepted to rejected or unavailable. The same app keeps calling entitlements; it does not parse a store response.', + file: 'provider.mjs', + symbol: 'entitlements', + line: 112, + checkFile: 'verify-stores.mjs', + check: + 'Run npm test: verifyStores checks all four fixture shapes, including Amazon/Horizon rejection and outage. The replacement runner compares them with IAPKit.', + }, + kit: { + description: + 'IAPKit rechecks every linked Amazon or Horizon purchase, then rereads ownership after those calls. A rejected product is removed from productIds; an outage fails the read. These products have no invented subscription records.', + file: 'convex/purchases/action.ts', + symbol: 'readBoundPurchaseEntitlements', + line: 15, + checkFile: 'convex/purchases/ownership.test.ts', + check: + 'Checks revoked ownership, upstream failures, bounded reads, and ownership changes during verification.', + }, + }, + bind: { + title: 'Same owner after a retry', + example: { + description: + 'One SQLite transaction assigns the unowned purchase to Alice and queues the access event. Repeating Alice’s request succeeds; Bob’s conflicting claim returns bound: false.', + file: 'provider.mjs', + symbol: 'bindPurchase', + line: 228, + checkFile: 'scenario.mjs', + check: + 'The Bind step repeats Alice’s request and rejects Bob’s claim. Run npm test.', + }, + kit: { + description: + 'The protocol handler calls bindUserAsServer. Convex checks the project’s server credential and records ownership without moving a purchase already owned by another user.', + file: 'convex/subscriptions/mutation.ts', + symbol: 'bindUserAsServer', + line: 52, + checkFile: 'convex/subscriptions/internal.test.ts', + check: + 'Binding tests cover repeated and conflicting claims against the subscription mutation handlers.', + }, + }, + access: { + title: 'Same access rule, different storage', + example: { + description: + 'isEntitled reads the subscription state and expiry. SQLite holds the records; entitlements returns only products Alice can use now. Turning renewal off does not end paid access.', + file: 'provider.mjs', + symbol: 'isEntitled', + line: 25, + checkFile: 'verify.mjs', + check: + 'The state checks test before, at, and after expiry with a controlled clock. Run npm test.', + }, + kit: { + description: + 'isEntitledAt applies the same rule to Convex records. entitlementsV2 reads the current time and returns allowed products without exposing store purchase tokens.', + file: 'convex/subscriptions/query.ts', + symbol: 'isEntitledAt', + line: 71, + checkFile: 'convex/subscriptions/query.test.ts', + check: + 'Account-read tests check token omission, server authorization, and time advancing past expiry.', + }, + }, + status: { + title: 'Explain why access continues', + example: { + description: + 'subscriptionStatus returns an active subscription or a record explaining the inactive state. In the Cancel step, willRenew becomes false while active remains true.', + file: 'provider.mjs', + symbol: 'subscriptionStatus', + line: 270, + checkFile: 'scenario.mjs', + check: + 'Cancel and Expire compare the status response with current entitlements. Run npm test.', + }, + kit: { + description: + 'subscriptionStatusV2 selects a subscription and applies the same access deadline. The protocol handler turns that record into the shared response shape.', + file: 'convex/subscriptions/query.ts', + symbol: 'subscriptionStatusV2', + line: 317, + checkFile: 'server/api/commerce/conformance.test.ts', + check: + 'The contract vectors compare status and access over REST and GraphQL with an in-memory database substitute.', + }, + }, + events: { + title: 'Retries keep one inbox entry', + example: { + description: + 'A local worker signs and retries events. The included receiver verifies the signature and saves each event once in a separate SQLite inbox. Use it to understand both ends of delivery.', + file: 'webhooks.mjs', + symbol: 'deliver / createReceiver', + line: 36, + checkFile: 'verify.mjs', + check: + 'Checks cover signatures, retries, tampering, and reopening the inbox. Run npm test or npm run demo:consumer.', + }, + kit: { + description: + 'The delivery worker sends signed events to registered backend HTTPS endpoints and records attempts. Your receiver owns duplicate handling; the example shows how to build that side.', + file: 'convex/commerce/delivery.ts', + symbol: 'deliverPendingEventsHandler', + line: 173, + checkFile: 'convex/commerce/delivery.test.ts', + check: + 'Worker tests check signed requests, transport failures, and destination validation with test I/O.', + }, + }, + erase: { + title: 'Delete the account in both implementations', + example: { + description: + 'Step 7 removes identity from purchases and event records atomically. The app erases delivered copies and remembers the deletion so late signed events cannot restore the user.', + file: 'provider.mjs', + symbol: 'eraseUser', + line: 257, + checkFile: 'verify-erasure.mjs', + check: + 'Run bun verify-erasure.mjs. It checks active-account erasure, in-flight delivery, repeated jobs, late events, and restart.', + }, + kit: { + description: + 'eraseUser starts a project-scoped job. The worker removes identity from purchases, subscriptions, and events in batches, waiting for claimed deliveries before cleaning those events.', + file: 'convex/subscriptions/internal.ts', + symbol: 'drainSubscriptionUserErasurePage', + line: 1491, + checkFile: 'convex/subscriptions/mutation.test.ts', + check: + 'Erasure request tests cover server authorization and repeated requests, including already completed jobs.', + }, + }, + auth: { + title: 'Two credentials, with the same boundary', + example: { + description: + 'Two fixed demo credentials separate verification from account operations. The request handler checks the role before parsing input. The dashboard preselects Alice; it is not an app login implementation.', + file: 'provider.mjs', + symbol: 'fetch: authorization before input', + line: 281, + checkFile: 'verify.mjs', + check: + 'The request checks reject missing credentials and the verification credential on account operations. Run npm test.', + }, + kit: { + description: + 'Publishable and secret keys identify the calling project. Convex checks the stored key’s permissions before server operations. Your own backend still authenticates Alice and chooses her user ID.', + file: 'server/api/commerce/routes.ts', + symbol: 'commerceAuth / authoritativeServerAuth', + line: 143, + checkFile: 'server/api/commerce/routes.test.ts', + check: + 'Tests exercise missing, invalid, and under-scoped keys before input parsing on both bindings.', + }, + }, + capabilities: { + title: 'Different scope, declared explicitly', + example: { + description: + 'The descriptor names a fictional fixture store and makes no complete-profile claim. All six REST operations let you study the flow, including account deletion; they do not establish support for real stores or the full protocol.', + file: 'provider.mjs', + symbol: 'capabilities', + line: 151, + checkFile: 'verify.mjs', + check: + 'Local checks validate the teaching flow and published vectors. They are not a full provider conformance report.', + }, + kit: { + description: + 'IAPKit declares profiles, both API bindings, and support per store. Apple and Google have subscription events; Meta and Amazon do not. Read the descriptor before choosing a store integration.', + file: 'convex/commerce/capabilities.ts', + symbol: 'PROVIDER_CAPABILITIES', + line: 36, + checkFile: 'convex/commerce/spec.conformance.test.ts', + check: + 'Capability tests compare the served descriptor, store mappings, and implementation declarations.', + }, + }, + rest: { + title: 'The contract stays; the backend can differ', + example: { + description: + 'A small Fetch handler looks up each request in the published HTTP manifest, validates it, and calls a JavaScript handler backed by SQLite. It implements all six REST operations.', + file: 'provider.mjs', + symbol: 'fetch', + line: 281, + checkFile: 'scenario.mjs', + check: + 'The dashboard calls real local HTTP endpoints, validates their responses, and checks the purchase flow. Run npm test.', + }, + kit: { + description: + 'Hono registers the same manifest’s routes and sends validated input to shared handlers backed by Convex and store services. It implements all six operations and also exposes GraphQL.', + file: 'server/api/commerce/routes.ts', + symbol: 'HTTP_BINDING route registration', + line: 196, + checkFile: 'server/api/commerce/conformance.test.ts', + check: + 'The portable runner drives real route code with substituted store/database I/O and compares both bindings.', + }, + }, + graphql: { + title: 'One optional format, the same operations', + example: { + description: + 'This example implements REST only. Follow its handlers to understand the behavior, then use IAPKit’s adapter as a reference if your provider also needs GraphQL.', + file: 'provider.mjs', + symbol: 'REST operation handlers', + line: 200, + checkFile: 'README.md', + check: + 'The README scopes the example to six REST operations; its tests do not establish GraphQL support.', + }, + kit: { + description: + 'The GraphQL adapter executes the generated schema and calls the same handlers as REST. A format change does not create a second ownership or access implementation.', + file: 'server/api/commerce/graphql.ts', + symbol: 'executeCommerceGraphql', + line: 296, + checkFile: 'server/api/commerce/conformance.test.ts', + check: + 'The same operation vectors run over both bindings and check matching outcomes with fixture data.', + }, + }, + checks: { + title: 'Read the checks alongside the implementation', + example: { + description: + 'verify.mjs replays the purchase flow, expiry boundaries, signatures, retries, and receiver recovery. These checks explain what this small backend demonstrates; it makes no full-profile claim.', + file: 'verify.mjs', + symbol: 'verifyLab', + line: 14, + checkFile: 'README.md', + check: + 'Install dependencies, then run npm test in the example repository. Bun runs its HTTP server and SQLite.', + }, + kit: { + description: + 'The published conformance runner calls IAPKit’s real REST and GraphQL routes against fixture store/database I/O. Separate worker and mutation tests cover persistence responsibilities.', + file: 'server/api/commerce/conformance.test.ts', + symbol: 'IAPKit dual-binding conformance', + line: 323, + checkFile: 'convex/commerce/spec.conformance.test.ts', + check: + 'Run bun run test -- server/api/commerce/conformance.test.ts convex/commerce/spec.conformance.test.ts from packages/kit. These are local contract checks, not live store tests.', + }, + }, +} satisfies Record; + +export type CommerceImplementationTopic = + keyof typeof COMMERCE_IMPLEMENTATION_TOPICS; diff --git a/packages/docs/src/lib/searchData.ts b/packages/docs/src/lib/searchData.ts index 2657c7f3f..853eedc86 100644 --- a/packages/docs/src/lib/searchData.ts +++ b/packages/docs/src/lib/searchData.ts @@ -971,18 +971,18 @@ export const apiData: ApiItem[] = [ }, { id: 'commerce-protocol-getting-started', - title: 'Commerce Protocol Use a Provider', + title: 'Commerce Protocol Follow a Purchase', category: 'Documentation', description: - 'Connect to a provider for purchase verification, account binding, and entitlement reads', + 'Follow Alice’s subscription step by step: buy, verify, connect the user, read access, and handle changes', path: '/commerce-protocol/getting-started', }, { id: 'commerce-protocol-implementation', - title: 'Commerce Protocol Build with AI', + title: 'Commerce Protocol Build and Review', category: 'Documentation', description: - 'AI build brief, six recorded milestones, runnable SQLite backend, captured API results, and IAPKit comparison', + 'Choose your services, give AI a product brief, and review the running purchase flow', path: '/commerce-protocol/implementation', }, { diff --git a/packages/docs/src/lib/signals.ts b/packages/docs/src/lib/signals.ts index 65d885486..0446f28b8 100644 --- a/packages/docs/src/lib/signals.ts +++ b/packages/docs/src/lib/signals.ts @@ -61,3 +61,40 @@ export const openSearchModal = () => { export const closeSearchModal = () => { searchModalSignal.value = false; }; + +export interface CommerceArchitecturePart { + label: string; + title: string; + description: string; + reference: string; + referenceLabel: string; + step?: number; + packageName?: string; +} + +export interface CommerceArchitectureModalState { + part: CommerceArchitecturePart; + onShowExample: (step: number) => void; + onClose: () => void; +} + +export const commerceArchitectureModalSignal = + signal(null); + +export const subscribeToCommerceArchitecture = ( + onStoreChange: () => void +): (() => void) => commerceArchitectureModalSignal.subscribe(onStoreChange); + +export const getCommerceArchitectureSnapshot = + (): CommerceArchitectureModalState | null => + commerceArchitectureModalSignal.value; + +export const openCommerceArchitectureModal = ( + modal: CommerceArchitectureModalState +): void => { + commerceArchitectureModalSignal.value = modal; +}; + +export const closeCommerceArchitectureModal = (): void => { + commerceArchitectureModalSignal.value = null; +}; diff --git a/packages/docs/src/main.tsx b/packages/docs/src/main.tsx index 3821dd5e9..90dbcc455 100644 --- a/packages/docs/src/main.tsx +++ b/packages/docs/src/main.tsx @@ -5,6 +5,9 @@ import App from './App'; import './styles/index.css'; import 'react-toastify/dist/ReactToastify.css'; +// React takes ownership of route metadata when the interactive app starts. +document.querySelectorAll('[data-prerender]').forEach((node) => node.remove()); + createRoot(document.getElementById('root')!).render( diff --git a/packages/docs/src/pages/404.tsx b/packages/docs/src/pages/404.tsx index 071e3ee65..5d82fc1f6 100644 --- a/packages/docs/src/pages/404.tsx +++ b/packages/docs/src/pages/404.tsx @@ -28,6 +28,7 @@ export default function NotFound() { title="Page Not Found" description="The page you're looking for doesn't exist. Return to OpenIAP documentation for in-app purchase guides and API references." path="/404" + noIndex />
    ('bound'); + return ( +
    +

    + + One app backend. One event receiver. Two commerce providers. + {' '} + We kept the app running and changed its provider setting from the + example to IAPKit, then back again. The consumer code changed in{' '} + 0 files. +

    +

    + Follow Alice’s subscription below. These are recorded results from + IAPKit’s real server and Convex storage alongside the original SQLite + example. Google responses and app sessions are local fixtures; no real + payment was made. +

    +
    + {STAGES.map((item) => ( + + ))} +
    +
    +

    + {STAGES.find((item) => item.id === stage)?.meaning} +

    + {Object.entries(report.results).map(([id, provider]) => { + const result: Result = provider[stage]; + const active = result.productIds + ? result.productIds.length > 0 + : result.active === true; + return ( +
    +

    {provider.label}

    +

    + + {stage === 'erased' + ? 'Account identity removed' + : active + ? 'Premium available' + : 'No Premium access'} + +

    + {result.subscription?.willRenew !== undefined && ( +

    + Automatic renewal:{' '} + {result.subscription.willRenew ? 'on' : 'off'} +

    + )} + {stage === 'erased' && ( +

    Erasure job: {provider.erasure.status}

    + )} +
    + Inspect the recorded response + + {JSON.stringify( + stage === 'erased' + ? { erasure: provider.erasure, access: result } + : result, + null, + 2 + )} + +
    +
    + ); + })} +
    +

    Choose the store your app will use

    +

    + The same verification, ownership, access, and erasure path also runs for + Apple, Amazon, and Meta Horizon. Amazon and Horizon are checked again on + access reads, including rejection and upstream failure; their results + contain no invented subscription lifecycle records. +

    +
    + {(['apple', 'google', 'amazon', 'horizon'] as const).map((store) => ( + + { + { + apple: 'Follow Apple', + google: 'Follow Google Play', + amazon: 'Follow Amazon', + horizon: 'Follow Meta Horizon', + }[store] + }{' '} + → + + ))} +
    +

    + Store responses, Apple signature verification, and account sessions are + fixtures in this run. It does not establish device checkout or Nami SDK + compatibility. Read the{' '} + + store comparison code + + . +

    +

    What your team changes

    +

    + Choose the provider URL and server credential, register the event + receiver, and agree on product IDs and account ownership. Your + purchase-to-access code and receiver keep the same contract. A provider + switch also needs a plan for existing purchase records: this test sets + up the same fixture purchase in each provider; it does not migrate a + customer database. +

    +

    + AI can wire those settings and run this check. Your team reviews whether + the access, cancellation, and deletion results match your product’s + policy. +

    +
    + Read the app, provider, and receiver code +

    + + App backend + {' '} + authenticates the session, calls the selected provider, and keeps + deletion requests until every provider completes them.{' '} + + Commerce client + {' '} + gets its routes and validators from the installed contract. +

    +

    + + Example provider + {' '} + runs the flow in SQLite.{' '} + + IAPKit handlers + {' '} + connect the same operations to store verification and Convex.{' '} + + The shared receiver + {' '} + checks signatures, deduplicates events, and discards erased + identities. +

    +

    + The event timing differs: the example emits a grant when Alice is + bound. IAPKit combines binding with a store notification. Both produce + the same access decision and a correlated grant in this run. +

    +
    +
    + Run the same replacement check +

    + Install dependencies in both checkouts with Bun 1.3.13 and Node.js 24 + available. From the OpenIAP repository: +

    + {`bun install --frozen-lockfile +(cd ../openiap-commerce-protocol-example && npm ci --ignore-scripts) +bun --conditions=openiap-source packages/kit/scripts/docs/run-commerce-interop.mjs \\ + ../openiap-commerce-protocol-example`} +

    + The command creates an isolated local Convex deployment, seeds + fictional data, and exits nonzero on a failed assertion. It needs an + initial download of the pinned Convex backend. No store credentials, + IAPKit account, or cloud deployment variables are needed. +

    +

    + + Read the test runner + {' '} + ·{' '} + + Inspect the executed report + +

    +
    +
    + What the evidence covers +

    + {report.checkCount} checks passed on {report.recordedAt.slice(0, 10)}. + The run restarted the actual local Convex process with an event retry + pending, reopened SQLite, replayed acknowledged events, and checked + provider and recipient erasure. +

    +

    + IAPKit’s route handlers, all four store verification action bodies, + Google notification handling, database functions, deletion scheduler, + and signing worker execute. External store responses and Apple + signature verification are fixtures; the worker’s existing transport + hook sends to localhost. Real store purchases and public HTTPS DNS/TLS + are separate deployment checks. +

    +

    + The first run exposed a missing IAPKit revocation after the clock + passed expiry. The corrected handler and two regression cases now pass + alongside this full replay. +

    +

    + The earlier{' '} + + SQLite and memory comparison + {' '} + remains a separate storage-adapter experiment. +

    +
    +

    + + Use this acceptance flow in your AI brief → + +

    +
    + ); +} diff --git a/packages/docs/src/pages/commerce-protocol/authentication.tsx b/packages/docs/src/pages/commerce-protocol/authentication.tsx index 2e291327d..8ad610770 100644 --- a/packages/docs/src/pages/commerce-protocol/authentication.tsx +++ b/packages/docs/src/pages/commerce-protocol/authentication.tsx @@ -1,3 +1,4 @@ +import CommerceImplementationComparison from '../../components/CommerceImplementationComparison'; import { COMMERCE_PROTOCOL_LINKS } from '../../lib/config'; import AnchorLink from '../../components/AnchorLink'; import DataTable from '../../components/DataTable'; @@ -39,37 +40,73 @@ function CommerceAuthentication() { />

    Authentication

    - The protocol standardizes roles and rules, not credential formats — how - a provider issues or names its credentials is its own business. + Authentication answers{' '} + “who is making this request, and what may they do?”{' '} + There are two separate relationships: Alice signs in to your app; your + backend authenticates itself to the commerce provider.

    +
    +
    +

    Alice → your backend

    +

    + Your existing login identifies Alice. Your backend selects her user + ID and checks whether she may claim this purchase. +

    +
    +
    +

    Your backend → provider

    +

    + A server credential allows account reads and changes. Keep it on + your backend; Alice’s app must never receive it. +

    +
    +
    +

    + A receipt proves neither relationship. Bob holding Alice’s receipt must + not be enough to move the purchase to Bob. +

    +
    - Two roles + Choose the credential for the job - {row.role} }, - { header: 'Holder', cell: (row: RoleRow) => row.holder }, - { header: 'May call', cell: (row: RoleRow) => row.may }, - ]} - rows={ROLE_ROWS} - rowKey={(row) => row.role} - /> +

    + A verification credential can check purchase + evidence. A server credential can also read access, + bind purchases, and request erasure. These must be different + credentials. +

    +
    + Credential roles and allowed operations + {row.role}, + }, + { header: 'Holder', cell: (row: RoleRow) => row.holder }, + { header: 'May call', cell: (row: RoleRow) => row.may }, + ]} + rows={ROLE_ROWS} + rowKey={(row) => row.role} + /> +

    One operation needs no credential at all:{' '} providerCapabilities {' '} - is a public, commerce-free read (auth role none). Every - other operation requires one of the two roles above. + is a public read with no customer purchase data (auth role{' '} + none). Every other operation requires one of the two + roles above.

    - Credentials travel in the Authorization header and never - in a URL. Auth fails closed — a credentialled operation with no - credential is UNAUTHORIZED, the wrong role is{' '} - FORBIDDEN — and the two roles are distinct credentials, - which is what blocks a shipped app from walking arbitrary user - identities. Full rules:{' '} + Providers issue their own credentials; the protocol does not impose a + key format. Credentials travel in the Authorization{' '} + header and never in a URL. A protected request without a credential + returns UNAUTHORIZED; a credential with the wrong role + returns FORBIDDEN. Separate credentials keep a shipped + app from looking up or changing other users’ accounts. Full rules:{' '}

    Capabilities

    - Every provider answers providerCapabilities with a - self-describing document — no credential, no commerce data, no central - registry. A consumer reads it to learn the protocol version, the - profiles and bindings served, and what each store integration can - actually observe. + + Capabilities are a provider’s list of supported features. + {' '} + Read it before connecting so your app does not ask a service to do + something it cannot do.

    +

    For Alice’s subscription, check three things:

    +
      +
    1. + Responsibilities: can it verify the purchase, + associate it with Alice, and return her access? These are its + profiles. +
    2. +
    3. + API format: can your backend call it using REST or + GraphQL? These formats are called bindings. +
    4. +
    5. + Store integration: does this implementation support + the store and signals your product needs? +
    6. +
    +

    + The public providerCapabilities request returns this + information without a credential or customer data. Your AI can check it + before building the connection. +

    +
    - Descriptor excerpt + Read a capability response -
    -          {DESCRIPTOR_EXCERPT}
    -        
    -

    - This is an excerpt from the package's{' '} - - complete example - - , not a response to copy unchanged. Include every required field and - replace its profiles, event types, and store support with what your - own implementation demonstrates. Validate the result against - ProviderCapabilities in the installed schema bundle. -

    -

    - Each store capability carries two deliberate booleans —{' '} - provider (what the store offers) and{' '} - implementation (what this backend consumes) — because - collapsing them hides whose gap a missing signal is. Declaring a - profile or binding is a conformance claim: partial support must not be - declared. See{' '} - - SPEC.md §10 - - . -

    +
    + JSON example and exact fields +
    +            {DESCRIPTOR_EXCERPT}
    +          
    +

    + This is an excerpt from the package's{' '} + + complete example + + , not a response to copy unchanged. Include every required field and + replace its profiles, event types, and store support with what your + own implementation demonstrates. Validate the result against + ProviderCapabilities in the installed schema bundle. +

    +

    + Each store capability carries two deliberate booleans —{' '} + provider (what the store offers) and{' '} + implementation (what this backend consumes) — because + collapsing them hides whose gap a missing signal is. Declaring a + profile or binding is a conformance claim: partial support must not + be declared. See{' '} + + SPEC.md §10 + + . +

    +
    ); diff --git a/packages/docs/src/pages/commerce-protocol/conformance.tsx b/packages/docs/src/pages/commerce-protocol/conformance.tsx index 05ad5196d..f0cae9e74 100644 --- a/packages/docs/src/pages/commerce-protocol/conformance.tsx +++ b/packages/docs/src/pages/commerce-protocol/conformance.tsx @@ -1,3 +1,4 @@ +import CommerceImplementationComparison from '../../components/CommerceImplementationComparison'; import { COMMERCE_PROTOCOL_LINKS } from '../../lib/config'; import AnchorLink from '../../components/AnchorLink'; import Callout from '../../components/Callout'; @@ -48,53 +49,78 @@ function CommerceConformance() { />

    Conformance

    - Conformance is judged per binding — REST-conformant, GraphQL-conformant, - or dual-binding, which adds cross-binding parity on every deterministic - case. The runner tests the profiles a provider declares against - generated schemas and vectors. It does not contact a central - certification service or prove production readiness. + + Conformance checks test whether a provider keeps the contract it + advertises. + {' '} + If it promises to connect purchases to users, for example, a + verification-only credential must not be able to change an owner.

    +

    + Use this when reviewing your implementation or comparing providers. Ask + for a passing report tied to the source and configuration you will run. + An API response with the right field names is only part of that + evidence. +

    +
      +
    1. + Choose the responsibilities and REST or GraphQL format the provider + supports. +
    2. +
    3. + Run the checks against an isolated instance with disposable users. +
    4. +
    5. + Fix failures, rerun, and keep the result with the implementation. +
    6. +
    +
    - Point the runner at your backend + Run and read the checks -

    - First run the{' '} - - runnable local example - {' '} - to explore the purchase flow. It does not claim full profile - conformance. To test your own implementation, use an isolated test - instance with disposable identities: the operation vectors call - binding and erasure as well as reads. Supply credentials from that - instance. -

    -

    - Install openiap-commerce-protocol and ajv - with your package manager. Save this as{' '} - check-conformance.mjs - and run it with Node.js or Bun. The built-in adapters add the Bearer - prefix: supply token values without that prefix. Set - COMMERCE_GRAPHQL_URL only when testing that binding. -

    - {RUNNER_SNIPPET} -

    - The runner talks only through the fetch you give it; the - URL may point to a local test provider. A provider whose capability - descriptor declares the events profile also supplies an{' '} - eventsAdapter — the runner drives §9 signing, - verification, the delivery envelope, response semantics, the - entitlement gate, and the emission rules through it, and a - signing-only adapter fails. -

    -

    - Implement the EventsAdapter interface in the installed - conformance/index.d.ts against your own emitter. An - advertised events profile without this adapter fails the run. Read - report.results and report.parityFailures - for failures; the script exits nonzero when report.ok is - false. -

    +
    + Runner setup and implementation requirements +

    + First run the{' '} + + runnable local example + {' '} + to explore the purchase flow. It does not claim full profile + conformance. To test your own implementation, use an isolated test + instance with disposable identities: the operation vectors call + binding and erasure as well as reads. Supply credentials from that + instance. +

    +

    + Install openiap-commerce-protocol and ajv + with your package manager. Save this as{' '} + check-conformance.mjs + and run it with Node.js or Bun. The built-in adapters add the Bearer + prefix: supply token values without that prefix. Set + COMMERCE_GRAPHQL_URL only when testing that binding. +

    + {RUNNER_SNIPPET} +

    + The runner talks only through the fetch you give it; + the URL may point to a local test provider. A provider whose + capability descriptor declares the events profile also + supplies an eventsAdapter — the runner drives §9 + signing, verification, the delivery envelope, response semantics, + the entitlement gate, and the emission rules through it, and a + signing-only adapter fails. +

    +

    + Implement the EventsAdapter interface in the installed + conformance/index.d.ts against your own emitter. An + advertised events profile without this adapter fails the run. Read + report.results and report.parityFailures + for failures; the script exits nonzero when + report.ok + {' '} + is false. +

    +
    Conformance is a floor, not a production audit. The vectors use fake, well-formed evidence and do not certify real store validation, the diff --git a/packages/docs/src/pages/commerce-protocol/ecosystem.tsx b/packages/docs/src/pages/commerce-protocol/ecosystem.tsx index 5bbcbeba1..b9faca395 100644 --- a/packages/docs/src/pages/commerce-protocol/ecosystem.tsx +++ b/packages/docs/src/pages/commerce-protocol/ecosystem.tsx @@ -5,11 +5,13 @@ import DataTable from '../../components/DataTable'; import SEO from '../../components/SEO'; import { COMMERCE_ROLES } from '../../lib/commerceEcosystem'; import { useScrollToHash } from '../../hooks/useScrollToHash'; +import CommerceCompositionProof from './CommerceCompositionProof'; +import '../../styles/commerce-protocol.css'; function CommerceEcosystemGuide(): React.JSX.Element { - useScrollToHash(); + useScrollToHash(120); return ( -
    +

    Build your part

    - A paywall business can provide the experience. An analytics business can - consume events. An integrated platform can supply both and the commerce - backend. The app uses OpenIAP to purchase from the store in each - arrangement. + Build the part your business does well, and connect it to compatible + services. The shared contract covers purchase verification, ownership, + access, and events. Your product, infrastructure, and customer + relationship remain yours.

    - - Give your AI the integration brief ↓ + + See two backends use the same client - - Download the working example ↓ - + Build your connection with AI +

    +
    + {COMMERCE_ROLES.map((role) => ( +
    +

    {role.title}

    +

    {role.benefit}

    + Explore this role → +
    + ))} +

    The example repository{' '} - includes a quick start, the client request mapper, and a standalone - event receiver. Start there to inspect working code for your role. + gives AI working code and checks for each connection. Choose the role + your business owns, describe the behavior you want, and review the + running result.

    +
    + + Two backends, the same user experience + + +
    Product roles and connection contracts @@ -73,9 +86,17 @@ function CommerceEcosystemGuide(): React.JSX.Element { Your service does not need to become the purchase verifier or account authority.

    +

    + The composition example includes a + host callback adapter you can read and run. It shows pending, + canceled, failed, and fulfilled results, and finishes a purchase only + after the backend confirms fulfillment. Its purchase callback is a + fixture; connect your SDK’s purchase and update listeners in a real + app. +

    - See the purchase, backend, and lifecycle sequence diagrams → + Follow a purchase, one step at a time →

    @@ -102,10 +123,10 @@ function CommerceEcosystemGuide(): React.JSX.Element {

    The example’s client-bridge.mjs runs on the app backend, - maps Apple and Google OpenIAP purchase fields into the installed - protocol’s verification inputs and validates them. It also rejects - missing evidence and unsupported stores. Run{' '} - npm run demo:bridge in the downloaded example; it checks + maps Apple, Google, Amazon, and Horizon purchase fields into the + installed protocol’s verification inputs and validates them. It also + rejects missing evidence and unsupported stores. Run{' '} + npm run demo:bridge in the example repository; it checks the request boundary, not a live store purchase.

    @@ -155,6 +176,43 @@ function CommerceEcosystemGuide(): React.JSX.Element {

    +
    + + Extend the contract together + +

    + Start with the smallest connection your product needs. New store + names, optional event members, and declared capabilities have defined + extension points; existing consumers must handle them according to the + versioning rules. The + composition example adds a partner metadata string and verifies that + the unchanged receiver preserves it. Adding metadata does not give it + a shared business meaning automatically. +

    +

    + Propose shared behavior with a concrete use case, a runnable example, + a rejection case, and its compatibility impact. Describe which + implementers need to change. OpenIAP remains founder-led today; + proposals and decisions are public, and IAPKit follows the same + contract and checks as other implementations. +

    +

    + + Start a public proposal + {' '} + ·{' '} + + Review and decision process + +

    +

    + A useful next contribution is a third provider or consumer with its + own implementation. Keep the reference client and expected outcomes, + record every configuration or adapter change, and publish the report + with source revisions and limits. Participation does not require an + OpenIAP account, central registry, or hosted validation service. +

    +
    What a business delivers to an app team @@ -162,9 +220,10 @@ function CommerceEcosystemGuide(): React.JSX.Element {

    Ship the host adapter or backend endpoint, supported-store configuration, executable checks, and a short connection example. The - app team configures endpoints and credentials, installs the - integration, and verifies the flow. It should not have to reimplement - your service from the spec. + app team chooses the services and expected behavior. Its AI can use + your setup instructions, adapter, and executable checks to wire the + connection and demonstrate the flow. Document what the team must + decide and what a successful result looks like.

    • diff --git a/packages/docs/src/pages/commerce-protocol/getting-started.tsx b/packages/docs/src/pages/commerce-protocol/getting-started.tsx index 4b5f1bf3c..a2a66d064 100644 --- a/packages/docs/src/pages/commerce-protocol/getting-started.tsx +++ b/packages/docs/src/pages/commerce-protocol/getting-started.tsx @@ -1,6 +1,5 @@ -import { useState } from 'react'; import { COMMERCE_PROTOCOL_LINKS } from '../../lib/config'; -import { Link } from 'react-router-dom'; +import { Link, useLocation } from 'react-router-dom'; import httpBinding from 'openiap-commerce-protocol/generated/bindings/http-binding.json'; import evidence from 'openiap-commerce-protocol/examples/verify-purchase-request.json'; import AnchorLink from '../../components/AnchorLink'; @@ -8,296 +7,232 @@ import Callout from '../../components/Callout'; import CodeBlock from '../../components/CodeBlock'; import PackageInstall from '../../components/PackageInstall'; import SEO from '../../components/SEO'; +import CommercePurchaseJourney from '../../components/CommercePurchaseJourney'; +import { COMMERCE_IMPLEMENTATIONS } from '../../lib/commerceImplementations'; import { useScrollToHash } from '../../hooks/useScrollToHash'; -interface PurchaseSequenceStage { - id: string; - title: string; - summary: string; -} - -const PURCHASE_SEQUENCE: readonly PurchaseSequenceStage[] = [ - { - id: 'app-purchase', - title: '1. Purchase in the app', - summary: - 'The app connects the Paywall Service to OpenIAP. Product selection starts the store purchase; the app receives the result and evidence.', - }, - { - id: 'purchase-access', - title: '2. Verify and grant access', - summary: - 'The app backend selects the user, calls the Commerce Provider, and records fulfillment. The app finishes the transaction after durable handling.', - }, - { - id: 'lifecycle-delivery', - title: '3. Receive lifecycle events', - summary: - 'Store notifications update provider state. The provider delivers signed events to an app backend or external event consumer, which persists and deduplicates before acknowledging.', - }, -]; - function CommerceGettingStarted(): React.JSX.Element { useScrollToHash(); - const [selectedSequence, setSelectedSequence] = useState(0); - const sequence = PURCHASE_SEQUENCE[selectedSequence]; - const diagramPath = `/commerce-diagrams/${sequence.id}`; + const { search } = useLocation(); const pathOf = (name: string): string => httpBinding.operations.find((operation) => operation.name === name)!.path; return (
      -

      Use a provider

      +

      Follow one purchase.

      +

      + Alice buys Premium in your app. Follow her purchase from the store’s + payment screen to the moment she can open paid content. +

      - Connect your backend to a commerce provider in three steps: verify store - evidence, bind the purchase to an authenticated user, then read that - user’s access. The requests below use your provider’s endpoint and - credentials. + At each step, compare two implementations:{' '} + + openiap-commerce-protocol-example + {' '} + makes the flow visible with a local dashboard and fictional purchases;{' '} + IAPKit connects the same + contract to store services. Follow the behavior first, then open either + implementation’s code when you need it.

      - Building the provider itself? Follow the{' '} - implementation guide{' '} - for storage, store adapters, lifecycle processing, and delivery workers. + Apple and Google subscription changes arrive through store + notifications. Amazon and Horizon access is rechecked with the store + when your backend requests it. Choose your store below to follow the + matching path.

      - -
      - - What configuring a provider does - -

      - Your app backend uses the provider’s URL and credentials for - verification, ownership, and access reads. Your app team connects the - paywall callbacks and the authenticated app-to-backend API. Installing - the protocol package or setting a provider name does not create those - connections. -

      +
      + +
      +

      + + See the same app switch between the example and IAPKit → + +

      +

      + Ready to build?{' '} + + Choose your services and build it → + +

      +
      + Implementation reference: requests and receiver setup

      - Follow one subscription through the three stages below. A{' '} - Paywall Service and{' '} - Commerce Provider can be one business or separate - services. Callback labels are illustrative; each client library has - its own API names. + Use these details when wiring a backend or checking your AI’s code.

      -
      - {PURCHASE_SEQUENCE.map((entry, index) => ( - - ))} -
      -
      -
      -

      {sequence.summary}

      +
      + + Receive subscription changes + +

      + Connect an existing backend with the ready receiver. It verifies the + signature, validates the event, and saves it once in SQLite. You do + not need to build a commerce provider or a store adapter. +

      +

      + If your service only consumes events, start here. The purchase and + access operations below belong to the app backend and its chosen + provider; your service can keep its existing backend. +

      +

      + The example repository{' '} + includes the receiver and executable checks. AI can reuse it to + demonstrate signed delivery, retries, tamper rejection, and + preserved inbox entries after reopening storage. +

      +
      + Run the receiver example locally

      - - Open full-size diagram - {' '} - ·{' '} - - Download Mermaid source ↓ + Clone the repository, install Bun for its runtime, then install + dependencies and run the demo. This fixture check requires no + credentials or external services. +

      + + {`npm run demo:consumer`} +

      + + Recorded results and payloads

      -
      -
      - {`${sequence.title}. -
      -
      -

      - Rejected evidence or a failed binding stops that attempt. An empty - entitlement result grants no access. An operation outage is not a - revocation: keep your existing access and retry policy. These diagrams - describe the integration contract; the{' '} - - example’s verification scope - {' '} - is documented separately. -

      -
      + +
      + Connect the receiver to your provider +

      + Set COMMERCE_WEBHOOK_SECRET to your provider’s + signing secret, then run npm run consumer. The ready + endpoint is + http://127.0.0.1:5182/webhooks/commerce. Put it + behind your HTTPS reverse proxy, forwarding the exact body bytes + to that local address, and register the HTTPS URL with your + provider. The receiver accepts the public Host header forwarded by + the proxy; its signature check authenticates the sender. +

      +

      + Use one emitter/project and signing key per receiver database. + consumer.sqlite is the durable inbox; set + COMMERCE_INBOX_PATH for your persistent storage + path. To embed the same Fetch-compatible handler in your server, + use + createReceiver from webhooks.mjs. +

      +

      + The inbox preserves the signed event for your existing processing + pipeline. Transaction and price fields are optional; a missing + price is unknown. Each lifecycle event is not necessarily a new + charge. Keep financial calculations in your business logic. +

      +
      +
    -
    - - Receive events — ready to run - -

    - Connect an existing backend with the ready receiver. It verifies the - signature, validates the event, and saves it once in SQLite. You do - not need to build a commerce provider or a store adapter. -

    -

    - If your service only consumes events, start here. The purchase and - access operations below belong to the app backend and its chosen - provider; your service can keep its existing backend. -

    -

    - - Download the receiver example ↓ - -

    -

    - Extract it, then install dependencies with your favorite package - manager. For the full build history and setup guides, clone the{' '} - example repository: -

    - - {`npm run demo:consumer -# Or pnpm run demo:consumer, yarn demo:consumer, bun run demo:consumer`} -

    - With Bun installed, this sends a signed purchase lifecycle over local - HTTP, repeats each delivery, rejects tampering, and checks the saved - inbox after reopening SQLite. No credentials or external services are - needed for this check.{' '} - - See the actual results and payloads - - . -

    -
    - Connect the receiver to your provider +
    + + 1. Install the contract + +

    - Set COMMERCE_WEBHOOK_SECRET to your provider’s signing - secret, then run npm run consumer. The ready endpoint - is - http://127.0.0.1:5182/webhooks/commerce. Put it behind - your HTTPS reverse proxy, forwarding the exact body bytes to that - local address, and register the HTTPS URL with your provider. The - receiver accepts the public Host header forwarded by the proxy; its - signature check authenticates the sender. + The package gives your backend the contract, schemas, and + conformance tools. Obtain a compatible provider endpoint and + credentials separately.

    - Use one emitter/project and signing key per receiver database. - consumer.sqlite is the durable inbox; set - COMMERCE_INBOX_PATH for your persistent storage path. - To embed the same Fetch-compatible handler in your server, use - createReceiver from webhooks.mjs. + To explore first, open the{' '} + + recorded purchase flow + + , or{' '} + + run the reference dashboard + + . To implement your own provider, give your AI the{' '} + + build brief + + .

    +
    + +
    + + 2. Connect to a provider +

    - The inbox preserves the signed event for your existing processing - pipeline. Transaction and price fields are optional; a missing price - is unknown. Each lifecycle event is not necessarily a new charge. - Keep financial calculations in your business logic. + Obtain the base URL, supported store configuration, and + Authorization header values from your provider. A provider issues + its own credentials; OpenIAP has no registration service. Keep the + server credential in your backend. These shell examples assume{' '} + curl and jq.

    -
    -
    - -
    - - 1. Install the contract - - -

    - The package gives your backend the contract, schemas, and conformance - tools. Obtain a compatible provider endpoint and credentials - separately. -

    -

    - To explore first, open the{' '} - - recorded purchase flow - - , or{' '} - - download the standalone example - - . To implement your own provider, give your AI the{' '} - - build brief - - . -

    -
    - -
    - - 2. Connect to a provider - -

    - Obtain the base URL, supported store configuration, and Authorization - header values from your provider. A provider issues its own - credentials; OpenIAP has no registration service. Keep the server - credential in your backend. These shell examples assume{' '} - curl and jq. -

    - {`export COMMERCE_BASE_URL='https://your-provider.example' + {`export COMMERCE_BASE_URL='https://your-provider.example' # Set these through your local secret manager or environment. # COMMERCE_VERIFY_AUTH: complete Authorization header value for verification # COMMERCE_SERVER_AUTH: complete Authorization header value for the server role curl --fail-with-body "$COMMERCE_BASE_URL${pathOf('providerCapabilities')}"`} -

    - Inspect profiles, bindings, and the selected - store’s implementation support. This flow needs{' '} - verification, accountLifecycle,{' '} - entitlements, and rest at compatible major - versions. An events-only descriptor does not establish operation - support. See{' '} - capabilities for the - full descriptor. -

    -
    +

    + Inspect profiles, bindings, and the + selected store’s implementation support. This flow + needs verification, accountLifecycle,{' '} + entitlements, and rest at compatible major + versions. An events-only descriptor does not establish operation + support. See{' '} + capabilities for + the full descriptor. +

    +
    -
    - - 3. Verify, bind, and read access - -

    - Save the following shape as evidence.json. Replace its - illustrative JWS with a real StoreKit transaction JWS from the app. - For Google, use{' '} - - {'{ "store": "google", "google": { "purchaseToken": "…" } }'} - - . Your provider must be configured for that app and store environment. -

    - - {JSON.stringify(evidence, null, 2)} - - {`curl --fail-with-body "$COMMERCE_BASE_URL${pathOf('verifyPurchase')}" \\ +
    + + 3. Verify, bind, and read access + +

    + Save the following shape as evidence.json. Replace its + illustrative JWS with a real StoreKit transaction JWS from the app. + For Google, use{' '} + + {'{ "store": "google", "google": { "purchaseToken": "…" } }'} + + . Your provider must be configured for that app and store + environment. +

    + + {JSON.stringify(evidence, null, 2)} + + {`curl --fail-with-body "$COMMERCE_BASE_URL${pathOf('verifyPurchase')}" \\ -H "Authorization: $COMMERCE_VERIFY_AUTH" \\ -H 'Content-Type: application/json' \\ --data-binary @evidence.json`} -

    - A successful response carries isValid. A store rejection - is still a successful operation with isValid: false. - VERIFICATION_FAILED means no verdict was obtained; retry - according to your failure policy. Neither a verdict nor its advisory - state identifies the app user or answers their current - access. -

    -

    - Your backend authenticates the user and checks that it may associate - this purchase with them. Select COMMERCE_USER_ID from - that session and ownership policy. A user ID submitted by the app and - possession of a receipt are not sufficient authorization. -

    - {`# Run on your backend; COMMERCE_USER_ID is selected by your authenticated handler. +

    + A successful response carries isValid. A store + rejection is still a successful operation with{' '} + isValid: false. VERIFICATION_FAILED means + no verdict was obtained; retry according to your failure policy. + Neither a verdict nor its advisory + state identifies the app user or answers their current + access. +

    +

    + Your backend authenticates the user and checks that it may associate + this purchase with them. Select COMMERCE_USER_ID from + that session and ownership policy. A user ID submitted by the app + and possession of a receipt are not sufficient authorization. +

    + {`# Run on your backend; COMMERCE_USER_ID is selected by your authenticated handler. jq --arg userId "$COMMERCE_USER_ID" '. + {userId: $userId}' \\ evidence.json > binding.json @@ -305,74 +240,76 @@ curl --fail-with-body "$COMMERCE_BASE_URL${pathOf('bindPurchase')}" \\ -H "Authorization: $COMMERCE_SERVER_AUTH" \\ -H 'Content-Type: application/json' \\ --data-binary @binding.json`} -

    - Continue after bound: true. A bound: false - result intentionally does not distinguish unknown evidence from a - purchase belonging to someone else. Do not transfer the binding or - grant access on that result; use your provider’s recovery process. The - association can remain bound even when the subscription is expired. -

    - {`curl --fail-with-body --get "$COMMERCE_BASE_URL${pathOf('entitlements')}" \\ +

    + Continue after bound: true. A bound: false + result intentionally does not distinguish unknown evidence from a + purchase belonging to someone else. Do not transfer the binding or + grant access on that result; use your provider’s recovery process. + The association can remain bound even when the subscription is + expired. +

    + {`curl --fail-with-body --get "$COMMERCE_BASE_URL${pathOf('entitlements')}" \\ -H "Authorization: $COMMERCE_SERVER_AUTH" \\ --data-urlencode "userId=$COMMERCE_USER_ID"`} -

    - Gate product-specific features on membership in{' '} - productIds. An empty list is a complete answer with no - current access. An operation error is not an empty list. The{' '} - subscriptions array contains the tokenless records - supporting that answer. For a simple “any active subscription?” check, - use subscriptionStatus.active. -

    - - This is a decision at provider read time. When caching a supporting - record, respect its expiresAt and your freshness policy; - re-read before relying on a stale result. An absent expiry is not a - promise of permanent access. Never turn a failed refresh into a - successful grant. - -
    +

    + Gate product-specific features on membership in{' '} + productIds. An empty list is a complete answer with no + current access. An operation error is not an empty list. The{' '} + subscriptions array contains the tokenless records + supporting that answer. For a simple “any active subscription?” + check, use subscriptionStatus.active. +

    + + This is a decision at provider read time. When caching a supporting + record, respect its expiresAt and your freshness + policy; re-read before relying on a stale result. An absent expiry + is not a promise of permanent access. Never turn a failed refresh + into a successful grant. + +
    -
    - - 4. Handle changes after purchase - -

    - If the provider declares events, register an HTTPS - backend destination using its management interface and exchange a - webhook secret. Destination registration is provider-specific. Follow - the{' '} - - backend architecture - {' '} - to authenticate and persist each delivery before acknowledging it. -

    -

    - Use events to trigger an authoritative entitlement refresh when you - cannot safely correlate purchases, especially across multiple - subscriptions or product changes. A cancellation disables renewal; it - does not automatically remove the remaining paid access. Without - events, use bounded server reads at the points your application needs - a current answer. -

    -

    - When an authenticated user deletes their account, call{' '} - - eraseUser - {' '} - from your backend. The provider erases its own identity records; - arrange erasure separately for copies already delivered to your - backend and connected services. -

    -

    - Continue with the{' '} - operation reference,{' '} - GraphQL binding, or{' '} - - provider implementation guide - - . -

    -
    +
    + + 4. Handle changes after purchase + +

    + If the provider declares events, register an HTTPS + backend destination using its management interface and exchange a + webhook secret. Destination registration is provider-specific. + Follow the{' '} + + backend architecture + {' '} + to authenticate and persist each delivery before acknowledging it. +

    +

    + Use events to trigger an authoritative entitlement refresh when you + cannot safely correlate purchases, especially across multiple + subscriptions or product changes. A cancellation disables renewal; + it does not automatically remove the remaining paid access. Without + events, use bounded server reads at the points your application + needs a current answer. +

    +

    + When an authenticated user deletes their account, call{' '} + + eraseUser + {' '} + from your backend. The provider erases its own identity records; + arrange erasure separately for copies already delivered to your + backend and connected services. +

    +

    + Continue with the{' '} + operation reference,{' '} + GraphQL binding, or{' '} + + provider implementation guide + + . +

    +
    + ); } diff --git a/packages/docs/src/pages/commerce-protocol/graphql.tsx b/packages/docs/src/pages/commerce-protocol/graphql.tsx index 85f9c317d..0881eb99d 100644 --- a/packages/docs/src/pages/commerce-protocol/graphql.tsx +++ b/packages/docs/src/pages/commerce-protocol/graphql.tsx @@ -1,3 +1,4 @@ +import CommerceImplementationComparison from '../../components/CommerceImplementationComparison'; import { COMMERCE_PROTOCOL_LINKS } from '../../lib/config'; import AnchorLink from '../../components/AnchorLink'; import Callout from '../../components/Callout'; @@ -23,13 +24,24 @@ function CommerceGraphql() { path="/commerce-protocol/graphql" keywords="OpenIAP Commerce Protocol GraphQL, commerce GraphQL API" /> -

    GraphQL binding

    +

    GraphQL

    +

    + GraphQL is another way to make the same provider requests. You send a + query to one endpoint and choose the result fields your backend needs. A{' '} + binding defines how those requests follow the protocol. +

    +

    + Use it if your backend already works with GraphQL. Alice’s ownership and + access rules stay the same as REST; supporting both formats is optional + for a provider. +

    The same six operations at one POST endpoint, whose path each provider documents, executing exactly the generated schema projection (generated/bindings/operations.graphql). The same authentication and account rules apply to both bindings.

    +
    Calling it @@ -70,9 +82,9 @@ curl --fail-with-body "$COMMERCE_GRAPHQL_URL" \\ verify this binding.

    - There is no Subscription root, ever: the operation surface is bounded - request/response, and the compiler rejects a stream a shipped app - could hold open. See{' '} + This API uses individual requests and responses. It has no GraphQL + Subscription stream. Receive ongoing changes through server-to-server + webhooks; your app backend owns any device notification. See{' '} [] = [ - { header: 'Part', cell: (row) => row.part }, - { header: 'This local example', cell: (row) => row.example }, - { - header: 'IAPKit implementation', - cell: (row) => {row.kit}, - }, -]; function CommerceImplementation(): React.JSX.Element { - useScrollToHash(); + useScrollToHash(120); + const { search } = useLocation(); + const store = new URLSearchParams(search).get('store'); + const recheck = store === 'amazon' || store === 'horizon'; + const journey = (hash = '') => ({ + pathname: '/commerce-protocol/getting-started', + search, + hash, + }); return ( -
    +
    -

    Build with AI

    -

    - You describe the product. The protocol gives your AI the API, access - rules, and testable contract. Review a working milestone at a time. +

    Build your purchase flow.

    +

    + Choose who runs the purchase backend, describe what your users should + experience, and review a running app.

    - Start with the{' '} - - six-step recorded example - {' '} - to see what you will be asking it to build. -

    -

    - Already have a backend and only need events?{' '} - - Run the ready event receiver - - . + If the pieces are still unfamiliar,{' '} + follow Alice’s purchase first. You do not + need to learn the API names to decide what your product should do.

    +
    - - 1. Install the contract in your project + + 1. Choose your services -

    - The package contains the specification, schemas, API bindings, and - conformance tools. Your AI uses these to build a backend in your own - project, using your preferred backend stack. + For an existing app, keep your login and paywall. Choose who will + verify purchases and maintain access.

    +
    +
    +

    Use a managed service

    +

    + IAPKit runs purchase verification, + subscription records, and event delivery. Your backend calls it to + authorize your users. +

    +
    +
    +

    Run your own backend

    +

    + Use openiap-commerce-protocol-example to + build in your stack. Your team runs the store connections, + database, and delivery worker. +

    +
    +

    - - Download the AI build brief ↓ - {' '} - and attach it to your AI, or paste this starter prompt: + Building a paywall or data service instead?{' '} + + Choose the part your business owns + + ; you do not need to build the whole purchase backend.

    - {`Locate the installed openiap-commerce-protocol package and read SPEC.md and generated/. -For architecture, use https://openiap.dev/commerce-protocol/whitepaper (DESIGN.md is not included in package 0.1.0). -Follow ${EXAMPLE}/blob/main/BUILD.md to build a purchase-to-access backend in this project. -After each milestone, run it and show the actual API result, database change, and screen capture. -Review the running result. Fix issues and repeat the failed checks before adding the next milestone. -Keep the work uncommitted so I can review it. -My product and stack: [describe your app, backend, and subscription].`} +

    - The brief points to the normative spec and generated schemas, then - sets six build milestones with acceptance checks. It starts with a - fictional store so you can review the flow before connecting - credentials. + Follow the same{' '} + verification,{' '} + ownership, and{' '} + access steps in both + projects. A provider switch also needs compatible capabilities, + credentials, store evidence, and a plan for purchase history; the{' '} + + composition checks + {' '} + show what has been exercised locally.

    - - 2. Run the example we built + + 2. Give AI the brief

    - Clone the example repository to get the backend, - README, receiver guide, and complete build history: -

    - {`git clone ${EXAMPLE}.git -cd openiap-commerce-protocol-example`} - -

    - This example uses Bun to run its HTTP server and SQLite databases. - With Bun installed, test and start it: + Open the brief, copy it into your coding agent, and fill in your + product and service choices. The agent can inspect your existing + stack. For example: “Add Premium subscriptions to my app. Use IAPKit + for verification and access; keep my existing login and paywall.”

    - {`npm test -npm start -# Or run the same scripts with pnpm, Yarn, or Bun. -# Open http://127.0.0.1:5181 and run each step.`} +
    + Open the brief to copy + {`Integrate OpenIAP Commerce Protocol into this project. +Product and desired behavior: [what users should be able to do]. +Store and product type: ${store === 'horizon' ? 'Meta Horizon' : store === 'amazon' ? 'Amazon' : store === 'google' ? 'Google Play' : store === 'apple' ? 'Apple' : '[Apple, Google Play, Amazon, or Meta Horizon]'}; [subscription, durable purchase, or consumable]. +Services to use or own: [name them, or ask me to choose]. + +Implementation references: +- Runnable teaching backend: ${EXAMPLE} +- IAPKit service source: ${COMMERCE_IMPLEMENTATIONS.kit.url} +- Step-by-step comparison: https://openiap.dev/commerce-protocol/getting-started${search} +Read the example's INTEGRATE.md for my role; follow BUILD.md for a commerce backend. Compare each responsibility with IAPKit's corresponding handler and tests. The example uses fictional purchases and all six REST operations, including erasure; IAPKit also shows store integrations and GraphQL. Use the contract as the authority, not either implementation's shortcuts. +Check the chosen store and product type before implementing. IAPKit's Apple/Google subscription path uses subscription state and lifecycle events. Its Amazon/Horizon ownership path rechecks saved evidence on entitlements reads; use productIds, not subscription expiry or invented events. Authenticate the store account link on the app backend. Keep consumable quantities in a separate durable fulfillment ledger. +Inspect this project's instructions and stack. Install openiap-commerce-protocol; use its SPEC.md, generated bindings/schemas, and conformance tools as the contract. + +Implement the connection using existing project patterns. Start with a runnable local result. For a provider, complete every selected profile, including account erasure and event delivery; advertise only completed profiles and bindings. Run the applicable conformance and product checks. Fix every failure and rerun; a test that expects a known failure does not complete the implementation. Repeat installation, tests, and startup from a clean source-only copy. +Show the running URL and user-visible outcomes, with source and verification commands for future changes. Separate fixture evidence from real store/deployment checks; list remaining work and product decisions. +Keep changes uncommitted for review.`} +

    + The reference repository already contains a backend, dashboard, + database, event receiver, and tests. Its{' '} + integration brief{' '} + scopes the role; its{' '} + backend build brief{' '} + defines seven implementation milestones, including account erasure. + The running fixture covers all six REST operations. Complete the + real store, authentication, isolation, and deployment obligations of + your selected profiles before using it as a production provider. +

    +
    +
    +
    + + 3. Try it as your customer +

    - The example contains the backend code built from the contract: five - REST operations, a dashboard, and two SQLite databases. The store and - clock are fixtures. You do not need the OpenIAP or IAPKit monorepo. + Have AI start the app and give you the URL. Then follow this sequence + using two test accounts, Alice and Bob:

    +
      +
    1. + Buy as Alice. Complete a test purchase and open the + paid feature. Try a pending or canceled purchase too; neither should + unlock it. +
    2. +
    3. + Switch to Bob. He must not see Alice’s paid content + or take her purchase by submitting the same receipt. +
    4. +
    5. + Recheck Alice’s access. For Apple/Google + subscriptions, cancel renewal: paid content stays open until expiry. + For Amazon/Horizon, return a negative store ownership answer: + Premium disappears from the allowed products. Simulate a store + outage too: it must report a failed read, then recover when the + store is available. Reload at each point. +
    6. +
    7. + Repeat and restart. Retry a purchase, then restart + the backend. Ownership and access remain correct, with no duplicate + fulfillment. If your provider emits lifecycle events, retry their + delivery too. IAPKit currently emits those events for Apple/Google + subscriptions. +
    8. +
    9. + Delete Alice. Check that her identity is removed + from the provider’s records and your own stored event copies. Bob’s + records remain intact. +
    10. +

    - README and quick start ·{' '} - - Download the recorded source only - {' '} - ·{' '} - - Download the actual execution report - + Ask AI to run the same checks automatically and show any failures. + Keep those checks with the source, so the next change can be reviewed + against the same behavior.

    - The{' '} - - build walkthrough - {' '} - includes each earlier source version, code changes, and review - results. Review exposed an invalid discovery workaround in the early - unfinished snapshots. The revised final backend adds atomic grant - events and improves failure handling. We also fixed the response - viewer and repeated the affected checks. Read the{' '} - correction log for the - evidence. + Start with test purchases. Before releasing, repeat the relevant flow + with your store sandbox, real login, and deployed backend. Passing the{' '} + contract checks and + completing a real store purchase answer different questions; ask for + both results.

    +
    + Run the checks in both reference projects + +
    +
    + Additional exercise: AI built a new fixture app +

    + A separate AI started with an empty project and built Field Notes, a + subscription app using Node.js and SQLite. Another AI reviewed the + running app and repeated installation and checks in a clean copy. + The review found and fixed a test setup dependency and an incorrect + status message after reload. +

    +

    + + Read the reproduction record + {' '} + for the prompt, runnable source, checks, and corrections. This + exercise covers a local fixture app; real stores and production + integration were not tested. +

    +
    - 3. Understand what AI built + Keep the next change small

    - HTTP handlers validate the contract and call the purchase domain. - SQLite owns purchases, bindings, processed observations, and pending - deliveries. A separate receiver database deduplicates signed events - before acknowledging them. + {recheck + ? 'For Amazon and Horizon, keep the store check and the app’s access policy separate. Both projects recheck linked purchases before returning allowed products. A rejected purchase and an unavailable store are different outcomes.' + : 'For Apple/Google subscriptions, keep Premium available until the paid period ends. Both projects keep that decision in one function. Your database and event worker can change without rewriting what “has access” means.'}

    +
    + +

    - The developer backend still owns login and account authorization. It - reads current entitlements to decide access; a webhook can trigger a - refresh. The example selects a fixture user and does not implement - login. -

    -

    - The{' '} - - sequence diagrams - {' '} - show the app, provider, and receiver calls in order. The{' '} - - whitepaper’s implementation blueprint - {' '} - explains the storage and transaction boundaries. The{' '} - authentication and{' '} - webhook references{' '} - define the requirements. -

    -
    -
    - - 4. Compare the result with IAPKit - - row.part} - /> -

    - The example makes the core flow visible. It does not establish real - purchase validity or reproduce the IAPKit product. The{' '} - IAPKit comparison report tests - the reviewed source archive against IAPKit’s signer and records its - route tests. No store sandbox purchase was made. + For a new store, compare the{' '} + verification adapters. + For a new data service, compare the{' '} + sender and receiver. Ask + AI to change the part that owns the behavior and rerun its checks.

    +
    + Account deletion: finish the responsibility + +
    - - 5. Extend only after the local flow passes + + Run the reference when you need it

    - Choose the real store, authenticated identity source, and deployment. - Add store validation, erasure, tenant isolation, public HTTPS delivery - protections, and operational recovery. Complete each selected profile - before advertising it. -

    -

    - Run{' '} - - profile and binding conformance - - , then store sandbox and deployment tests. Keep the result report - beside the implementation so the next reviewer can distinguish - demonstrated behavior from remaining work. + AI can start the example dashboard for you. It runs locally without + store credentials or environment variables, using Bun for HTTP and + SQLite. The protocol itself does not require Bun.

    +
    + Manual setup and runtime details + {`git clone ${EXAMPLE}.git +cd openiap-commerce-protocol-example +npm ci +npm test +npm start`} +

    + Open http://127.0.0.1:5181 and select{' '} + Run step 1 →. HTTP, storage, and signatures are + real local operations; store evidence and the clock are fixtures. + Startup creates temporary databases; the recovery step reopens them + inside the same process. The{' '} + README has the full runtime + and replay instructions. +

    +
    ); diff --git a/packages/docs/src/pages/commerce-protocol/index.tsx b/packages/docs/src/pages/commerce-protocol/index.tsx index cb38cc58a..055ac396d 100644 --- a/packages/docs/src/pages/commerce-protocol/index.tsx +++ b/packages/docs/src/pages/commerce-protocol/index.tsx @@ -1,12 +1,13 @@ -import { Fragment } from 'react'; import { Navigate, Route, Routes, NavLink, + Link, useLocation, } from 'react-router-dom'; import DocsShell from '../../components/DocsShell'; +import { MenuDropdown } from '../../components/MenuDropdown'; import NotFound from '../404'; import Overview from './overview'; import Authentication from './authentication'; @@ -35,19 +36,27 @@ const NAV_GROUPS: NavigationGroup[] = [ title: 'Start here', items: [ { to: '/commerce-protocol', label: 'Overview' }, - { to: '/commerce-protocol/ecosystem', label: 'Build your part' }, - { to: '/commerce-protocol/implementation', label: 'Build with AI' }, - { to: '/commerce-protocol/getting-started', label: 'Use a provider' }, - { to: '/commerce-protocol/whitepaper', label: 'Whitepaper' }, + { + to: '/commerce-protocol/getting-started', + label: '1. Follow a purchase', + }, + { to: '/commerce-protocol/ecosystem', label: '2. Choose your part' }, + { to: '/commerce-protocol/implementation', label: '3. Build and review' }, ], }, { id: 'contract', - title: 'Implementation contract', + title: 'Terms & responsibilities', items: [ - { to: '/commerce-protocol/profiles', label: 'Profiles' }, - { to: '/commerce-protocol/operations', label: 'Operations' }, - { to: '/commerce-protocol/authentication', label: 'Authentication' }, + { + to: '/commerce-protocol/profiles', + label: 'Profiles · service responsibilities', + }, + { to: '/commerce-protocol/operations', label: 'Operations · API calls' }, + { + to: '/commerce-protocol/authentication', + label: 'Authentication · who may call', + }, ], }, { @@ -63,17 +72,36 @@ const NAV_GROUPS: NavigationGroup[] = [ id: 'compatibility', title: 'Compatibility', items: [ - { to: '/commerce-protocol/capabilities', label: 'Capabilities' }, - { to: '/commerce-protocol/conformance', label: 'Conformance' }, + { + to: '/commerce-protocol/capabilities', + label: 'Capabilities · supported features', + }, + { + to: '/commerce-protocol/conformance', + label: 'Conformance · contract checks', + }, { to: '/commerce-protocol/versioning', label: 'Versioning' }, ], }, ]; +const [START_NAVIGATION, ...REFERENCE_NAVIGATION] = NAV_GROUPS; +const [OVERVIEW, ...START_STEPS] = START_NAVIGATION.items; +const WHITEPAPER_NAVIGATION = { + to: '/commerce-protocol/whitepaper', + label: 'Whitepaper', +}; + /** The server-side specification: its own section, not a page of the SDK docs. */ function CommerceProtocol() { const { pathname, search, hash } = useLocation(); + const isReference = + pathname === WHITEPAPER_NAVIGATION.to || + REFERENCE_NAVIGATION.some((group) => + group.items.some((item) => item.to === pathname) + ); + // `/commerce-protocol/` renders the overview but leaves NavLink's exact match // unsatisfied, so the sidebar highlights nothing. Canonicalise instead. const canonical = pathname.replace(/\/+$/, ''); @@ -86,29 +114,56 @@ function CommerceProtocol() { navLabel="Commerce Protocol navigation" wide={pathname === '/commerce-protocol'} nav={(closeSidebar) => ( - <> - {NAV_GROUPS.map((group) => ( - -

    {group.title}

    -
      - {group.items.map((item) => ( -
    • - (isActive ? 'active' : '')} - onClick={closeSidebar} - > - {item.label} - -
    • - ))} -
    -
    - ))} - +
    +
      +
    • + (isActive ? 'active' : '')} + onClick={closeSidebar} + > + {OVERVIEW.label} + +
    • + +
    +

    Reference

    +
      + {REFERENCE_NAVIGATION.map((group) => ( + + ))} +
    • + (isActive ? 'active' : '')} + onClick={closeSidebar} + > + {WHITEPAPER_NAVIGATION.label} + +
    • +
    +
    )} > + {isReference && ( +
    + Reference + + Follow the purchase walkthrough → + +
    + )} } /> } /> diff --git a/packages/docs/src/pages/commerce-protocol/operations.tsx b/packages/docs/src/pages/commerce-protocol/operations.tsx index 0f2026a80..34808156e 100644 --- a/packages/docs/src/pages/commerce-protocol/operations.tsx +++ b/packages/docs/src/pages/commerce-protocol/operations.tsx @@ -1,80 +1,153 @@ +import CommerceImplementationComparison from '../../components/CommerceImplementationComparison'; +import { Link } from 'react-router-dom'; import { COMMERCE_PROTOCOL_LINKS } from '../../lib/config'; import httpBinding from 'openiap-commerce-protocol/generated/bindings/http-binding.json'; import AnchorLink from '../../components/AnchorLink'; -import DataTable from '../../components/DataTable'; import SEO from '../../components/SEO'; import { useScrollToHash } from '../../hooks/useScrollToHash'; -const SPEC_URL = COMMERCE_PROTOCOL_LINKS.spec; +const EXPLANATIONS = [ + { + name: 'providerCapabilities', + implementation: 'capabilities', + title: 'Check what a provider supports', + description: + 'Before connecting, ask which services, stores, and API formats this backend supports. This public answer contains no customer purchase data.', + result: 'Use it to choose a compatible provider before sending purchases.', + }, + { + name: 'verifyPurchase', + implementation: 'verify', + title: 'Check the purchase evidence', + description: + 'Send the store’s evidence and receive isValid. A valid purchase is not yet connected to an app user and does not by itself grant access.', + result: 'Alice’s receipt is valid. Next, authorize and record who owns it.', + }, + { + name: 'bindPurchase', + implementation: 'bind', + title: 'Connect the purchase to its owner', + description: + 'Your authenticated backend selects Alice and asks the provider to associate the verified purchase with her. Repeating this request keeps the same owner.', + result: + 'Continue on bound: true. A false result covers both unknown evidence and an ownership conflict; it never tells Bob whose purchase exists.', + }, + { + name: 'entitlements', + implementation: 'access', + title: 'Read which products the user can access', + description: + 'Ask for Alice’s current productIds. Your backend unlocks a feature only when its product is in that list. The answer includes supporting subscription records, without purchase tokens.', + result: + 'Premium in the list: allow Premium. Empty list: no current access. A request failure is not an empty list or a new grant.', + }, + { + name: 'subscriptionStatus', + implementation: 'status', + title: 'Read the subscription’s current status', + description: + 'Use this for a subscription status screen or an “any active subscription?” check. It returns active and, when available, a supporting subscription record.', + result: + 'Canceling renewal can leave active: true until expiry. For product-specific access, use entitlements.', + }, + { + name: 'eraseUser', + implementation: 'erase', + title: 'Remove the user’s identity', + description: + 'When Alice deletes her account, ask the provider to remove her identity from its subscription records and protocol event store. Repeating the request is safe.', + result: + 'accepted acknowledges the request. A provider may report an erasure job. Your backend and other event recipients must erase their own copies separately.', + }, +] as const; -type OperationRow = (typeof httpBinding.operations)[number]; - -function CommerceOperations() { - useScrollToHash(); +export default function CommerceOperations(): React.JSX.Element { + useScrollToHash(120); return (

    Operations

    - Six operations make the portable surface, served identically over{' '} - REST and{' '} - GraphQL. Every operation is - idempotent, fails closed on partial state, and omits what it cannot - determine instead of sending placeholders. + An operation is one request your software makes to the commerce + provider. For a purchase, the important order is{' '} + verify → connect the owner → read access. +

    +

    + These calls keep separate questions separate: a valid receipt, its + owner, and today’s access can have different answers.{' '} + + Follow Alice through those steps → + +

    + + Find the call you need + + {EXPLANATIONS.map((entry) => { + const operation = httpBinding.operations.find( + (item) => item.name === entry.name + )!; + return ( +
    + + {entry.title} + +

    {entry.description}

    +

    {entry.result}

    + +
    + API details · {entry.name} +
    +
    Operation
    +
    + {operation.name} +
    +
    REST request
    +
    + + {operation.method} {operation.path} + +
    +
    Responsibility
    +
    + {operation.profile === 'core' ? ( + 'Core: every provider supports discovery.' + ) : ( + + {operation.profile} profile + + )} +
    +
    Credential
    +
    + + {operation.auth === 'none' + ? 'None: public discovery' + : `${operation.auth} role`} + +
    +
    +
    +
    + ); + })} +

    + The same operation meanings apply over{' '} + REST and{' '} + GraphQL. Repeated requests + are idempotent: they do not repeat the business effect. Providers must + report an error when they cannot produce a complete answer. +

    +

    + Exact inputs, outputs, and behavior:{' '} + SPEC.md §4.

    -
    - - The surface - - ( - {row.name} - ), - }, - { - header: 'Profile', - cell: (row: OperationRow) => {row.profile}, - }, - { - header: 'Auth role', - cell: (row: OperationRow) => {row.auth}, - }, - { - header: 'REST', - cell: (row: OperationRow) => ( - - {row.method} {row.path} - - ), - }, - ]} - rows={httpBinding.operations} - rowKey={(row) => row.name} - /> -

    - Rendered from the generated binding manifest. Behavioral rules per - operation — evidence unions, tokenless reads, the anti-enumeration - binding result, erasure limits — live in{' '} - - SPEC.md §4 - - . -

    -
    ); } - -export default CommerceOperations; diff --git a/packages/docs/src/pages/commerce-protocol/overview.tsx b/packages/docs/src/pages/commerce-protocol/overview.tsx index b6de499f8..47409bbb9 100644 --- a/packages/docs/src/pages/commerce-protocol/overview.tsx +++ b/packages/docs/src/pages/commerce-protocol/overview.tsx @@ -1,29 +1,58 @@ -import { useEffect, useState } from 'react'; -import { Link, useLocation } from 'react-router-dom'; +import { useCallback, useEffect } from 'react'; +import { + Link, + useLocation, + useNavigate, + useNavigationType, +} from 'react-router-dom'; import { ArrowRight, BookOpen, Play } from 'lucide-react'; import SEO from '../../components/SEO'; import CommerceEcosystem from '../../components/CommerceEcosystem'; import CommerceProtocolDiagram from '../../components/CommerceProtocolDiagram'; import CommerceBuildWalkthrough from '../../components/CommerceBuildWalkthrough'; -import { useScrollToHash } from '../../hooks/useScrollToHash'; import { COMMERCE_PROTOCOL_LINKS } from '../../lib/config'; import '../../styles/commerce-protocol.css'; function CommerceProtocol(): React.JSX.Element { - useScrollToHash(); - const { hash } = useLocation(); - const [exampleStep, setExampleStep] = useState(null); + const { hash, state } = useLocation(); + const navigate = useNavigate(); + const navigationType = useNavigationType(); + const stepMatch = /^#build-step-([1-9]\d*)$/.exec(hash); + const requestedStep = stepMatch ? Number(stepMatch[1]) : null; + const exampleStep = + requestedStep !== null && Number.isSafeInteger(requestedStep) + ? requestedStep + : hash === '#build-walkthrough' + ? 1 + : null; + const showExample = useCallback( + (step: number): void => { + navigate(`#build-step-${step}`); + }, + [navigate] + ); + useEffect(() => { - if (hash === '#build-walkthrough') setExampleStep(1); - }, [hash]); - const showExample = (step: number): void => { - setExampleStep(step); - requestAnimationFrame(() => - document - .getElementById('build-walkthrough') - ?.scrollIntoView({ block: 'start' }) - ); - }; + if ( + !hash || + hash.startsWith('#architecture-') || + state?.commerceKeepScroll || + exampleStep !== null + ) + return; + const frame = requestAnimationFrame(() => { + const target = document.getElementById(hash.slice(1)); + target?.scrollIntoView({ + block: 'start', + behavior: + navigationType === 'POP' || + window.matchMedia('(prefers-reduced-motion: reduce)').matches + ? 'instant' + : 'smooth', + }); + }); + return () => cancelAnimationFrame(frame); + }, [hash, state, exampleStep, navigationType]); return (

    A shared contract for paywalls, commerce services, and data - platforms. Bring your business to apps built with OpenIAP. + platforms. Understand how the parts connect, choose what your + product owns, and give AI the contract to implement it.

    @@ -54,7 +84,7 @@ function CommerceProtocol(): React.JSX.Element { className="btn btn-secondary" onClick={() => showExample(1)} > -
    @@ -66,14 +96,14 @@ function CommerceProtocol(): React.JSX.Element {
    - +
    - Inside the commerce backend - Verification, ownership, access, and delivery + Explore the wider ecosystem + Paywalls, commerce services, and data platforms
    - +
    { const open = event.currentTarget.open; - setExampleStep((current) => (open ? (current ?? 1) : null)); + if (open && exampleStep === null) showExample(1); + if (!open && exampleStep !== null) navigate('#architecture'); }} > - See how AI built it - Six source checkpoints · build, inspect, fix, recheck + See a subscription in action + Purchase, access, cancellation, and recovery {exampleStep !== null && (
    )} diff --git a/packages/docs/src/pages/commerce-protocol/profiles.tsx b/packages/docs/src/pages/commerce-protocol/profiles.tsx index 82d8f118b..deee8c44c 100644 --- a/packages/docs/src/pages/commerce-protocol/profiles.tsx +++ b/packages/docs/src/pages/commerce-protocol/profiles.tsx @@ -1,89 +1,140 @@ +import CommerceImplementationComparison from '../../components/CommerceImplementationComparison'; +import type { CommerceImplementationTopic } from '../../lib/commerceImplementations'; +import { Link } from 'react-router-dom'; import { COMMERCE_PROTOCOL_LINKS } from '../../lib/config'; import httpBinding from 'openiap-commerce-protocol/generated/bindings/http-binding.json'; import AnchorLink from '../../components/AnchorLink'; -import DataTable from '../../components/DataTable'; import SEO from '../../components/SEO'; -const SPEC_URL = COMMERCE_PROTOCOL_LINKS.spec; - -interface ProfileRow { - name: string; - version: string; - operations: string; - covers: string; -} - -const PROFILE_COVERAGE: Record = { - verification: 'Verifying store purchase evidence without touching accounts', - entitlements: 'Tokenless server reads of status and access decisions', - events: 'Normalized lifecycle events over signed webhooks', - accountLifecycle: 'Binding purchases to your users and erasing them', +const PROFILES: Record< + string, + { + question: string; + explanation: string; + example: string; + implementation: CommerceImplementationTopic; + } +> = { + verification: { + implementation: 'verify', + question: 'Is the store evidence valid?', + explanation: + 'Checks a store purchase without assigning it to an app account.', + example: + 'A verification service can specialize in checking purchases while another service owns user access.', + }, + accountLifecycle: { + implementation: 'erase', + question: 'Whose purchase is it?', + explanation: + 'Connects purchases to your users and removes their identity when requested. Both binding and erasure are required.', + example: + 'Alice owns her purchase. Bob cannot take it. Deleting Alice also removes her identity from the provider’s records.', + }, + entitlements: { + implementation: 'access', + question: 'What can this user use now?', + explanation: + 'Returns current subscription status and allowed products without exposing purchase tokens.', + example: + 'Alice keeps Premium after turning renewal off and loses access at the end of her paid time.', + }, + events: { + implementation: 'events', + question: 'How does my backend hear about changes?', + explanation: + 'Sends subscription and access changes as signed webhook messages, with retry rules.', + example: + 'Your backend or data service receives the same event meaning regardless of which compatible provider sent it.', + }, }; -const PROFILE_ROWS: ProfileRow[] = Object.entries(httpBinding.profiles).map( - ([name, version]) => ({ - name, - version, - operations: - httpBinding.operations - .filter((operation) => operation.profile === name) - .map((operation) => operation.name) - .join(', ') || '— (webhook contract)', - covers: PROFILE_COVERAGE[name] ?? '', - }) -); - -function CommerceProfiles() { +export default function CommerceProfiles(): React.JSX.Element { return (

    Profiles

    - The protocol is a small core plus named profiles. A provider implements - a profile completely or not at all, and declares what it serves in its{' '} - capability descriptor — so - a caller branches on declarations, never on guesses. + A profile is a named set of responsibilities a provider + promises to handle. It helps you answer “does this service do the part I + need?” +

    +

    + For example, a purchase-checking service may offer verification. A + backend that also owns user access needs account lifecycle and + entitlements. A service can offer several profiles; you do not need a + separate company for each one. +

    + + Four responsibilities + + {Object.entries(PROFILES).map(([name, content]) => ( +
    +

    {content.question}

    +

    {content.explanation}

    +

    {content.example}

    + +
    + Contract name: {name} +

    + Version{' '} + + { + httpBinding.profiles[ + name as keyof typeof httpBinding.profiles + ] + } + + .{' '} + {name === 'events' ? ( + + Event and webhook obligations + + ) : ( + httpBinding.operations + .filter((op) => op.profile === name) + .map((op, index) => ( + + {index > 0 && ' · '} + + {op.name} + + + )) + )} +

    +
    +
    + ))} +

    Choose by responsibility, then check the promise

    +

    + Every provider supports basic discovery, shared errors, and version + rules. That common foundation is called core; it is not + another optional profile. +

    +

    + The provider lists its complete profiles in{' '} + capabilities. An + unfinished profile must not be advertised.{' '} + Conformance checks test + the promise against the contract. +

    +

    + An analytics service that only receives events follows the receiver + rules. It does not have to implement the provider’s events profile or a + purchase backend. +

    +

    + Full obligations and independent profile versions:{' '} + SPEC.md §3.

    -
    - - The four profiles - - {row.name}, - }, - { header: 'Version', cell: (row: ProfileRow) => row.version }, - { - header: 'Operations', - cell: (row: ProfileRow) => {row.operations}, - }, - { header: 'Covers', cell: (row: ProfileRow) => row.covers }, - ]} - rows={PROFILE_ROWS} - rowKey={(row) => row.name} - /> -

    - The table is rendered from the generated binding manifest, so it - cannot drift from the contract. Full obligations:{' '} - - SPEC.md §3 - - . -

    -
    ); } - -export default CommerceProfiles; diff --git a/packages/docs/src/pages/commerce-protocol/rest.tsx b/packages/docs/src/pages/commerce-protocol/rest.tsx index 657a66848..76ee0c3de 100644 --- a/packages/docs/src/pages/commerce-protocol/rest.tsx +++ b/packages/docs/src/pages/commerce-protocol/rest.tsx @@ -1,3 +1,4 @@ +import CommerceImplementationComparison from '../../components/CommerceImplementationComparison'; import { COMMERCE_PROTOCOL_LINKS } from '../../lib/config'; import httpBinding from 'openiap-commerce-protocol/generated/bindings/http-binding.json'; import AnchorLink from '../../components/AnchorLink'; @@ -20,7 +21,17 @@ function CommerceRest() { path="/commerce-protocol/rest" keywords="OpenIAP Commerce Protocol REST, commerce API, OpenAPI" /> -

    REST binding

    +

    REST

    +

    + REST is one way your backend calls the provider: an HTTP request to a + named URL, with JSON in the response. A binding is the + protocol’s exact mapping of an operation to that request format. +

    +

    + For example, your backend asks for Alice’s entitlements and gets the + products she may use. Choose REST when it fits your existing stack; it + has the same purchase and account rules as GraphQL. +

    Every operation lives under /commerce/v1: queries are{' '} GET with query parameters, mutations are POST{' '} @@ -28,6 +39,7 @@ function CommerceRest() { Authorization header. Use the provider's base URL and check its declared profiles before calling an operation.

    +
    Read current access diff --git a/packages/docs/src/pages/commerce-protocol/versioning.tsx b/packages/docs/src/pages/commerce-protocol/versioning.tsx index 7a81c6319..ea5692575 100644 --- a/packages/docs/src/pages/commerce-protocol/versioning.tsx +++ b/packages/docs/src/pages/commerce-protocol/versioning.tsx @@ -44,6 +44,17 @@ function CommerceVersioning() { keywords="OpenIAP Commerce Protocol versioning" />

    Versioning

    +

    + Versions tell you whether two services still understand the same + contract after an update. A minor update adds + compatible information. A major update can require + changes to your integration. +

    +

    + For example, adding an optional field to an open response can be minor: + older callers ignore it. Renaming a required field is major because + those callers would no longer find the answer they expect. +

    The protocol, each profile, and each binding version independently as MAJOR.MINOR, and callers pin on the major. Open value spaces and open diff --git a/packages/docs/src/pages/commerce-protocol/webhooks.tsx b/packages/docs/src/pages/commerce-protocol/webhooks.tsx index 5664009f5..8bdaa1a0e 100644 --- a/packages/docs/src/pages/commerce-protocol/webhooks.tsx +++ b/packages/docs/src/pages/commerce-protocol/webhooks.tsx @@ -1,3 +1,4 @@ +import CommerceImplementationComparison from '../../components/CommerceImplementationComparison'; import AnchorLink from '../../components/AnchorLink'; import Callout from '../../components/Callout'; import DataTable from '../../components/DataTable'; @@ -6,7 +7,7 @@ import ExternalRedirect from '../../components/ExternalRedirect'; import SEO from '../../components/SEO'; import { useScrollToHash } from '../../hooks/useScrollToHash'; import commerceEventSchema from 'openiap-commerce-protocol/generated/schemas/commerce-event.schema.json'; -import { Link } from 'react-router-dom'; +import { Link, useLocation } from 'react-router-dom'; import { COMMERCE_PROTOCOL_LINKS } from '../../lib/config'; const KNOWN_COMMERCE_EVENT_TYPES = @@ -80,7 +81,8 @@ const RESPONSE_COLUMNS: DataTableColumn[] = [ function Webhooks() { useScrollToHash(); - if (LEGACY_IAPKIT_HASHES.has(window.location.hash)) { + const { hash } = useLocation(); + if (LEGACY_IAPKIT_HASHES.has(hash)) { return ; } @@ -92,13 +94,19 @@ function Webhooks() { path="/commerce-protocol/webhooks" keywords="OpenIAP Commerce Protocol webhook, signed commerce events, HMAC webhook, idempotent webhook consumer" /> -

    Webhook Contract

    +

    Events & webhooks

    - The Commerce Protocol standardizes how a conforming backend delivers one - normalized commerce event to a consumer-controlled HTTPS endpoint. It - defines the portable boundary, not a dashboard, credential store, or - vendor-specific setup flow. + An event describes something that changed, such as + Alice canceling renewal. A webhook is the HTTP message + that carries that event from the provider to your backend.

    +

    + Use events to keep your backend or data service informed while the app + is closed. Cancellation turns renewal off; it does not remove Alice’s + remaining paid time. Read current entitlements when you need an + authoritative access decision. +

    +
             Store → conforming backend → consumer HTTPS endpoint
           
    @@ -114,9 +122,9 @@ function Webhooks() { provider.

    - This contract is server-to-server. It defines no backend-to-app event - stream, SSE endpoint, WebSocket, push relay, or long-poll feed. Device - push belongs to the developer's authenticated backend. + Register your backend’s HTTPS address with the provider. Its signed + messages go to that backend, not directly to the mobile app. Your + backend owns login, access enforcement, and any device notifications.
    diff --git a/packages/docs/src/pages/commerce-protocol/whitepaper.tsx b/packages/docs/src/pages/commerce-protocol/whitepaper.tsx index 681eb8158..935a5865b 100644 --- a/packages/docs/src/pages/commerce-protocol/whitepaper.tsx +++ b/packages/docs/src/pages/commerce-protocol/whitepaper.tsx @@ -100,7 +100,7 @@ function CommerceWhitepaper(): React.JSX.Element { recorded AI-built example {' '} - in six milestones, then use the{' '} + in seven milestones, then use the{' '} AI build brief in your own repository. Sections 5.6–5.7 connect business roles and the blueprint to the captured results and their limits. The{' '} diff --git a/packages/docs/src/pages/docs/examples/android.tsx b/packages/docs/src/pages/docs/examples/android.tsx index f542fadaa..9d272c031 100644 --- a/packages/docs/src/pages/docs/examples/android.tsx +++ b/packages/docs/src/pages/docs/examples/android.tsx @@ -16,7 +16,7 @@ export const ANDROID_CONFIG: StoreExampleConfig = { title: 'Android Example', description: 'OpenIAP Google Play Billing example walkthrough for Android purchases, subscriptions, restore flows, and IAPKit verification.', - path: '/docs/example/android', + path: '/docs/example', keywords: 'OpenIAP Android example, Google Play Billing example, Android IAP video, Play purchase verification', }, diff --git a/packages/docs/src/pages/docs/examples/fireos.tsx b/packages/docs/src/pages/docs/examples/fireos.tsx index e55c2ca85..f56d168f4 100644 --- a/packages/docs/src/pages/docs/examples/fireos.tsx +++ b/packages/docs/src/pages/docs/examples/fireos.tsx @@ -30,7 +30,7 @@ function FireOSExample() {

    Fire OS Example

    diff --git a/packages/docs/src/pages/docs/examples/horizon.tsx b/packages/docs/src/pages/docs/examples/horizon.tsx index c83d6a3fc..5fe9eaca3 100644 --- a/packages/docs/src/pages/docs/examples/horizon.tsx +++ b/packages/docs/src/pages/docs/examples/horizon.tsx @@ -16,7 +16,7 @@ export const HORIZON_CONFIG: StoreExampleConfig = { title: 'Horizon OS Example', description: 'OpenIAP Meta Horizon Billing example walkthrough for Quest purchases, subscriptions, restore flows, and entitlement verification.', - path: '/docs/example/horizon', + path: '/docs/example', keywords: 'OpenIAP Horizon example, Meta Horizon Billing example, Quest IAP video, Horizon entitlement verification', }, diff --git a/packages/docs/src/pages/docs/examples/ios.tsx b/packages/docs/src/pages/docs/examples/ios.tsx index 59e6cc044..6857afd2b 100644 --- a/packages/docs/src/pages/docs/examples/ios.tsx +++ b/packages/docs/src/pages/docs/examples/ios.tsx @@ -16,7 +16,7 @@ export const IOS_CONFIG: StoreExampleConfig = { title: 'iOS Example', description: 'OpenIAP StoreKit 2 example walkthrough for iOS purchases, subscriptions, restore flows, and IAPKit verification.', - path: '/docs/example/ios', + path: '/docs/example', keywords: 'OpenIAP iOS example, StoreKit 2 example, iOS IAP video, App Store purchase verification', }, diff --git a/packages/docs/src/pages/docs/foundation/governance.tsx b/packages/docs/src/pages/docs/foundation/governance.tsx index 25c2dbf2e..1212d1b9e 100644 --- a/packages/docs/src/pages/docs/foundation/governance.tsx +++ b/packages/docs/src/pages/docs/foundation/governance.tsx @@ -241,6 +241,33 @@ function Governance() {
    +
    + + Commerce Protocol participation + +

    + Providers, app developers, and event consumers can propose changes or + contribute interoperability reports. The{' '} + + protocol contribution procedure + {' '} + defines the required use case, executable evidence, compatibility + assessment, and public decision record. IAPKit receives no exemption + from the shared contract or its checks. +

    +

    + Decisions remain with the current project lead under the review + process above. Reports identify their authors and actual reviewers; a + project-authored fixture does not count as independent company + validation. The{' '} + + runnable composition example + {' '} + provides a starting point for another implementer to reproduce and + challenge the expected results. +

    +
    +
    Release Authority diff --git a/packages/docs/src/pages/docs/guides/ai-assistants.tsx b/packages/docs/src/pages/docs/guides/ai-assistants.tsx index f66a187f4..8f70197d9 100644 --- a/packages/docs/src/pages/docs/guides/ai-assistants.tsx +++ b/packages/docs/src/pages/docs/guides/ai-assistants.tsx @@ -1,355 +1,147 @@ +import { Link } from 'react-router-dom'; import AnchorLink from '../../../components/AnchorLink'; -import Callout from '../../../components/Callout'; -import CodeBlock from '../../../components/CodeBlock'; import SEO from '../../../components/SEO'; -import TLDRBox from '../../../components/TLDRBox'; import { useScrollToHash } from '../../../hooks/useScrollToHash'; -function AIAssistants() { +const REFERENCES = [ + { + id: 'quick-reference', + name: 'OpenIAP quick reference', + url: 'https://openiap.dev/llms.txt', + description: + 'SDK installation, purchase APIs, types, and links to the implementation guides.', + }, + { + id: 'full-reference', + name: 'OpenIAP full reference', + url: 'https://openiap.dev/llms-full.txt', + description: + 'Detailed API behavior and the normative Commerce Protocol specification.', + }, + { + id: 'iapkit-reference', + name: 'IAPKit reference', + url: 'https://kit.openiap.dev/llms.txt', + description: + 'Hosted API configuration and product-specific behavior when you choose IAPKit.', + }, +] as const; + +export default function AIAssistants() { useScrollToHash(); return (
    -

    AI Assistants

    +

    Build in-app purchases with AI

    - OpenIAP provides AI-optimized references for the client SDK contract and - the vendor-neutral Commerce Protocol. + You choose what to sell and who should get access. Your coding assistant + installs the SDK, connects the purchase flow, and runs the checks. Start + with your app, then inspect the result together.

    - - - - - - Use the OpenIAP files for SDK APIs, shared types, purchase lifecycle, - and the Commerce Protocol. For IAPKit hosted APIs, dashboard setup, - compatibility, operations, or MCP, load{' '} - - kit.openiap.dev/llms.txt - {' '} - or the{' '} - - IAPKit AI guide - - . IAPKit is an implementation of the protocol, not part of its normative - definition. - -
    - - AI-Optimized Documentation + + 1. Choose the SDK for your app -

    We provide two formats optimized for AI consumption:

    - -
    -
    -

    - - llms.txt - -

    -

    - Concise API overview (~300 lines) -

    -
      -
    • Installation basics
    • -
    • API signatures
    • -
    • Core types
    • -
    • Common patterns
    • -
    • Commerce Protocol overview
    • -
    -
    -
    -

    - - llms-full.txt - -

    -

    - - Complete API and protocol reference (~3,000 lines) - -

    -
      -
    • Full configuration options
    • -
    • Complete API documentation
    • -
    • All type definitions
    • -
    • Platform-specific APIs
    • -
    • Error codes & troubleshooting
    • -
    • Normative Commerce Protocol specification
    • -
    -
    -
    +

    + Open the SDK list and follow your + framework’s setup guide. Give the AI + that guide and access to your project. It should use the existing + framework, package manager, and login system. +

    +

    + Decide which stores you support, which products are subscriptions or + one-time purchases, and what each product unlocks. The AI should + explain any missing decision before building around an assumption. +

    - Integration with AI Assistants + 2. Connect purchase to access - - - Cursor - -

    Add OpenIAP documentation as a custom doc source:

    -
      -
    1. - Open Settings → Features →{' '} - Docs -
    2. -
    3. - Click Add new doc -
    4. -
    5. - Enter URL:{' '} - - https://openiap.dev/llms.txt - -
    6. -
    7. - Name it OpenIAP -
    8. -

    - Then use @OpenIAP in your prompts to reference the - documentation. + Follow{' '} + + one purchase from payment to access + + . Each step compares the runnable example with IAPKit and links to the + corresponding code and checks. Your app owns login and fulfillment; + the commerce backend verifies evidence and keeps purchase and access + records for the capabilities it supports.

    - - - GitHub Copilot - -

    Reference the documentation URL directly in your chat prompts:

    - {`// In Copilot Chat: -// "Using https://openiap.dev/llms.txt as reference, -// help me implement subscription purchase flow"`} - - - Claude / ChatGPT - -

    Two approaches work well:

    -
      -
    1. - URL Reference: Provide the documentation URL and - ask the AI to fetch it -
    2. -
    3. - Direct Paste: Copy the content from{' '} - - llms.txt - {' '} - and paste it directly into your conversation -
    4. -
    - - - Repository-aware CLI assistants -

    - Keep shared instructions in your project's AGENTS.md. - Codex and Grok read that file directly. Claude Code and Gemini use{' '} - CLAUDE.md and GEMINI.md by default, so point - those names at the same file instead of copying its contents: + For an existing product, give the AI the{' '} + + integration brief + + . To implement a backend, use the{' '} + + backend build guide + + . IAPKit is an available backend; OpenIAP SDKs do not require an + IAPKit account.

    - {`# AGENTS.md - -## IAP Reference -For in-app purchase implementation, reference: https://openiap.dev/llms.txt`} - {`# macOS and Linux -ln -s AGENTS.md CLAUDE.md -ln -s AGENTS.md GEMINI.md`}
    - - Documentation Contents - - - - Quick Reference (llms.txt) - -
      -
    • Installation instructions for all platforms
    • -
    • Core API signatures and usage
    • -
    • Essential types (Product, Purchase, Subscription)
    • -
    • Common implementation patterns
    • -
    • Error handling basics
    • -
    • Commerce Protocol boundary and key guarantees
    • -
    - - - Full Reference (llms-full.txt) - -
      -
    • Complete configuration options
    • -
    • All API methods with full documentation
    • -
    • Complete type definitions
    • -
    • Platform-specific APIs (iOS and Android)
    • -
    • All error codes and handling
    • -
    • Implementation patterns and best practices
    • -
    • Troubleshooting guide
    • -
    • Commerce Protocol schemas, webhooks, and conformance rules
    • -
    -
    - -
    - - Example Prompts - -

    Here are some effective prompts to use with AI assistants:

    - -

    Basic Setup

    - {`"Using OpenIAP documentation, show me how to initialize -the IAP connection in a React Native app"`} - -

    Subscriptions

    - {`"How do I implement subscription purchase with OpenIAP? -Include handling for both iOS and Android."`} - -

    Error Handling

    - {`"What errors can occur during purchase and how should -I handle them with OpenIAP?"`} - -

    Platform-Specific

    - {`"Show me how to use showManageSubscriptionsIOS -to open subscription management on iOS"`} - -

    Purchase Restoration

    - {`"How do I restore previous purchases using -getAvailablePurchases in OpenIAP?"`} - -

    Server-side Commerce Protocol

    - {`"Using the OpenIAP Commerce Protocol, design an idempotent webhook -consumer that verifies exact request bytes and handles unordered retries."`} -
    - -
    - - Best Practices + + 3. Check the result before shipping +

    + Ask the AI to install and run from clean source, show the purchase + flow, and provide the commands and actual test results. Then try these + customer actions in your chosen store’s sandbox: +

      +
    • Buy a product and receive the intended access.
    • - Be specific about OpenIAP: Mention "OpenIAP" or - "expo-iap" / "react-native-iap" in your prompts to get - library-specific answers + Cancel or leave a purchase pending; neither should create new + access.
    • - Reference the documentation URL: Include the - llms.txt URL for accurate, up-to-date information + Restore and repeat a purchase callback without granting the same + benefit twice.
    • - Specify your platform: Mention iOS, Android, or - both to get platform-appropriate code + For subscriptions, cancel renewal and retain access until the paid + period expires.
    • - Specify your framework: Mention React Native, Expo, - Flutter, Swift, Kotlin, .NET MAUI/C#, or Godot for - framework-specific examples -
    • -
    • - Request code examples: Ask for working code - snippets with proper error handling + Sign in as another user and confirm the ownership policy is + enforced.
    +

    + Use the testing guide for store + setup. The local Commerce Protocol example uses fictional purchases; + its passing checks do not replace a device and store sandbox run. +

    - - For complex implementations, start with{' '} - - llms.txt - {' '} - for quick answers, then reference{' '} - - llms-full.txt - {' '} - when you need detailed type information or platform-specific APIs. - +
    + + References for your coding assistant + +

    + Ask your assistant to read the relevant links. If it cannot fetch + them, provide the contents directly. A URL in a prompt does not prove + that its contents were loaded. +

    +
      + {REFERENCES.map((reference) => ( +
    • + {reference.name} —{' '} + {reference.description} +
    • + ))} +
    +
    ); } - -export default AIAssistants; diff --git a/packages/docs/src/pages/docs/setup/index.tsx b/packages/docs/src/pages/docs/setup/index.tsx index a83650393..17be23717 100644 --- a/packages/docs/src/pages/docs/setup/index.tsx +++ b/packages/docs/src/pages/docs/setup/index.tsx @@ -31,9 +31,9 @@ function SetupIndex() { />

    Framework Setup

    - Pick the framework you ship in. Every supported framework wraps the same - OpenIAP specification, so the API surface, type names, and event - patterns are consistent across stacks — only the install steps differ. + Pick the framework you ship in. The SDKs share the OpenIAP purchase + contract, with language-specific types, callbacks, and lifecycle + patterns. Follow your framework's guide for working code.

    diff --git a/packages/docs/src/pages/languages.tsx b/packages/docs/src/pages/languages.tsx index f5d51260d..51b014da3 100644 --- a/packages/docs/src/pages/languages.tsx +++ b/packages/docs/src/pages/languages.tsx @@ -24,7 +24,7 @@ function Languages() { return (

    Implementations

    -

    Your stack, one contract

    +

    Choose your in-app purchase SDK

    - Native store modules at the core. Six framework SDKs speaking the - same purchase language. + Use the SDK for your app's framework. Each entry links to its + install guide, supported platforms, and source code.

    diff --git a/packages/docs/src/pages/showcase.tsx b/packages/docs/src/pages/showcase.tsx index 433a35049..40a0a07f6 100644 --- a/packages/docs/src/pages/showcase.tsx +++ b/packages/docs/src/pages/showcase.tsx @@ -19,7 +19,7 @@ function Showcase() { />
    -

    Who uses OpenIAP?

    +

    Who uses OpenIAP?

    {SHOWCASE_APPS.length} apps ship in-app purchases with OpenIAP libraries. Ordered by App Store and Google Play review counts. diff --git a/packages/docs/src/styles/commerce-protocol.css b/packages/docs/src/styles/commerce-protocol.css index b9a7540b1..5716c50b0 100644 --- a/packages/docs/src/styles/commerce-protocol.css +++ b/packages/docs/src/styles/commerce-protocol.css @@ -2,6 +2,306 @@ container: commerce-page / inline-size; } +.commerce-reference-context { + display: flex; + flex-wrap: wrap; + gap: 0.5rem 1.5rem; + margin-bottom: 1.5rem; + color: var(--text-secondary); + font-size: 0.875rem; +} + +.commerce-implementation-pair { + margin-block: var(--spacing-lg); + border-block: 1px solid var(--border-color); + padding-block: var(--spacing-lg); +} + +.doc-page .commerce-implementation-pair-title { + margin: 0 0 var(--spacing-md); + color: var(--text-primary); + font-weight: 600; +} + +.commerce-implementation-pair-grid { + display: grid; + grid-template-columns: repeat(2, minmax(0, 1fr)); + gap: var(--spacing-xl); +} + +.commerce-implementation-reference { + min-width: 0; + overflow-wrap: anywhere; +} + +.commerce-implementation-role { + color: var(--text-secondary); + font-size: var(--font-size-xs); +} + +.doc-page .commerce-implementation-name { + margin: var(--spacing-xs) 0 var(--spacing-sm); + font-weight: 600; + line-height: 1.4; +} + +.doc-page + .commerce-implementation-reference + > p:not(.commerce-implementation-name) { + margin: 0 0 var(--spacing-sm); + font-size: var(--font-size-sm); +} + +.commerce-implementation-source, +.commerce-implementation-checks { + font-size: var(--font-size-sm); + overflow-wrap: anywhere; +} + +.commerce-implementation-source { + display: inline-block; + padding-block: var(--spacing-xs); +} + +.commerce-implementation-checks { + margin-top: var(--spacing-lg); +} + +.commerce-implementation-checks summary { + cursor: pointer; +} + +.commerce-run-details > .commerce-implementation-pair { + margin: 0; + border: 0; + padding-top: 0; +} + +@media (max-width: 640px) { + .commerce-implementation-pair-grid { + grid-template-columns: minmax(0, 1fr); + gap: var(--spacing-lg); + } + .commerce-implementation-reference + .commerce-implementation-reference { + border-top: 1px solid var(--border-color); + padding-top: var(--spacing-md); + } +} + +.commerce-journey { + scroll-margin-top: 90px; + margin-block: 2rem; + border: 1px solid var(--border-color); + border-radius: 14px; + overflow: hidden; +} + +.commerce-journey-steps { + display: flex; + flex-wrap: wrap; + gap: 0.5rem; + padding: 1rem; + border-bottom: 1px solid var(--border-color); + background: var(--bg-secondary); +} + +.commerce-journey-steps a { + display: flex; + align-items: center; + gap: 0.5rem; + padding: 0.45rem 0.7rem; + border: 1px solid transparent; + border-radius: 6px; + font-size: 0.875rem; + color: var(--text-secondary); + text-decoration: none; +} + +.commerce-journey-steps a[aria-current] { + color: var(--text-primary); + border-color: var(--border-color); + background: var(--bg-primary); + font-weight: 600; +} + +.commerce-journey-steps a > span { + color: var(--primary-color); +} + +.commerce-journey-content { + padding: clamp(1rem, 3vw, 2rem); + animation: commerce-overlay-enter 180ms ease-out; +} +.commerce-journey-heading > span { + font-size: 0.8rem; + color: var(--text-secondary); +} +.doc-page .commerce-journey-heading h2 { + margin: 0.5rem 0 1rem; + font-size: clamp(1.4rem, 2.5vw, 1.85rem); + border: 0; + padding-top: 0; +} + +.doc-page .commerce-journey-heading h2:first-of-type { + margin-top: 0.5rem; +} +.doc-page .commerce-role-benefits h2:first-of-type { + margin-top: 0; + padding-top: 0; +} +.doc-page .commerce-journey-steps a:not(.anchor-link, .btn) { + border-bottom: 1px solid transparent; +} +.doc-page .commerce-journey-steps a[aria-current]:not(.anchor-link, .btn) { + border-color: var(--border-color); +} +.commerce-journey-heading h2:focus { + outline: none; +} +.commerce-journey-heading h2:focus-visible { + outline: 2px solid var(--primary-color); + outline-offset: 4px; +} +.commerce-journey-map { + display: grid; + grid-template-columns: repeat(3, minmax(0, 1fr)); + gap: 2rem; + margin: 2rem 0 1.5rem; +} +.commerce-journey-node { + position: relative; + display: flex; + flex-direction: column; + align-items: center; + gap: 0.5rem; + text-align: center; + border: 1px solid var(--primary-color); + border-radius: 8px; + padding: 1.25rem 0.65rem; + min-width: 0; +} +.commerce-journey-node > svg:first-child { + color: var(--primary-color); + margin-bottom: 0.25rem; +} +.commerce-journey-node > span { + color: var(--text-secondary); + font-size: 0.85rem; + line-height: 1.5; +} +.commerce-journey-arrow { + position: absolute; + right: -1.65rem; + top: 50%; + color: var(--text-secondary); +} +.commerce-journey-result { + display: flex; + align-items: center; + gap: 0.75rem; + padding: 1rem; + border-radius: 8px; + background: var(--bg-secondary); +} +.commerce-journey-result svg { + flex-shrink: 0; + color: var(--primary-color); +} +.commerce-journey-term { + border-left: 2px solid var(--primary-color); + padding: 0.25rem 0 0.25rem 1rem; + margin: 1.5rem 0; + font-size: 0.9rem; +} +.doc-page .commerce-journey-term p { + margin: 0.4rem 0; +} +.commerce-journey-controls { + display: flex; + justify-content: space-between; + align-items: center; + gap: 1rem; + padding: 1rem clamp(1rem, 3vw, 2rem); + border-top: 1px solid var(--border-color); +} +.commerce-journey-controls .btn { + display: inline-flex; + align-items: center; + gap: 0.5rem; + font-size: 0.9rem; +} +.commerce-guide-next { + padding-block: 1rem; +} +.commerce-technical-reference { + margin-top: 2rem; +} +.commerce-operation { + padding-block: 1.5rem; + border-bottom: 1px solid var(--border-color); +} +.doc-page .commerce-operation h3 { + margin-top: 0; +} +.commerce-operation details { + margin-top: 0.75rem; +} +.commerce-operation summary { + cursor: pointer; + color: var(--text-secondary); +} +.commerce-operation code { + overflow-wrap: anywhere; +} +.commerce-operation dl { + display: grid; + grid-template-columns: max-content minmax(0, 1fr); + gap: 0.5rem 1rem; + font-size: 0.9rem; +} +.commerce-operation dd { + margin: 0; +} + +@media (max-width: 600px) { + .commerce-journey { + scroll-margin-top: 126px; + } + .commerce-journey-map { + grid-template-columns: 1fr; + gap: 1.5rem; + } + .commerce-journey-node { + padding: 0.75rem; + } + .commerce-journey-arrow { + right: calc(50% - 10px); + top: auto; + bottom: -1.4rem; + transform: rotate(90deg); + } + .commerce-journey-steps { + gap: 0.25rem; + padding: 0.75rem; + } + .commerce-journey-steps a { + padding: 0.3rem 0.4rem; + } + .commerce-journey-controls { + gap: 0.5rem; + } + .commerce-journey-controls .btn { + padding: 0.6rem; + } +} + +@media (prefers-reduced-motion: reduce) { + .commerce-journey-content { + animation: none; + } +} + .commerce-actions { display: flex; flex-wrap: wrap; @@ -9,7 +309,74 @@ gap: var(--spacing-sm); } -.commerce-protocol-page .btn { +.commerce-build-result > .commerce-actions { + margin-bottom: var(--spacing-md); +} + +.commerce-role-benefits, +.commerce-composition-results { + display: grid; + grid-template-columns: repeat(auto-fit, minmax(min(100%, 18rem), 1fr)); + gap: var(--spacing-lg); + margin-block: var(--spacing-lg); +} + +.commerce-ecosystem-guide [id] { + scroll-margin-top: 120px; +} + +.commerce-role-benefits article { + padding: var(--spacing-lg); + border: 1px solid var(--border-color); + border-radius: 8px; +} + +.doc-page .commerce-role-benefits h2, +.doc-page .commerce-composition-results h3 { + margin-top: 0; + font-size: 1.125rem; +} + +.commerce-composition-results > div { + min-width: 0; + padding: var(--spacing-lg); + border: 1px solid var(--border-color); + border-radius: 8px; +} + +.commerce-composition-proof .language-tabs-header { + flex-wrap: wrap; + overflow: visible; +} + +.commerce-composition-proof .language-tab { + flex: 1 1 8rem; +} + +.commerce-composition-proof code, +.commerce-composition-proof summary { + overflow-wrap: anywhere; +} + +.commerce-implementation a { + overflow-wrap: anywhere; +} + +.commerce-implementation .code-block .language-text { + white-space: pre-wrap; + overflow-wrap: anywhere; +} + +.doc-page .commerce-source-steps li { + margin-block: var(--spacing-lg); +} + +.doc-page .commerce-source-steps p { + margin-block: var(--spacing-xs) 0; +} + +.commerce-protocol-page .btn, +.commerce-architecture-modal .btn { display: inline-flex; align-items: center; justify-content: center; @@ -335,10 +702,10 @@ border: 1px solid var(--border-color); border-radius: 8px; margin-bottom: var(--spacing-xl); + scroll-margin-top: 90px; } -.commerce-architecture-heading, -.commerce-part-title { +.commerce-architecture-heading { display: flex; align-items: center; justify-content: space-between; @@ -346,8 +713,7 @@ gap: var(--spacing-sm); } -.doc-page .commerce-architecture-heading h2, -.doc-page .commerce-part-title h3 { +.doc-page .commerce-architecture-heading h2 { margin: 0; padding: 0; border: 0; @@ -455,6 +821,146 @@ border-top: 1px solid var(--border-color); } +.commerce-architecture-modal { + position: fixed; + inset: 0; + width: min(460px, calc(100% - 2rem)); + max-width: none; + max-height: calc(100dvh - 2rem); + margin: auto; + padding: 0; + overflow: auto; + overscroll-behavior: contain; + border: 1px solid var(--border-color); + border-radius: 8px; + background: var(--bg-primary); + color: var(--text-primary); + box-shadow: 0 12px 36px rgb(0 0 0 / 20%); +} + +.commerce-architecture-modal::backdrop { + background: rgb(0 0 0 / 12%); +} + +.commerce-architecture-modal[open] { + animation: commerce-overlay-enter 180ms ease-out both; +} + +.commerce-architecture-modal[open][data-closing='true'] { + animation: commerce-overlay-exit 140ms ease-in both; + pointer-events: none; +} + +.commerce-architecture-modal[open]::backdrop { + animation: commerce-backdrop-enter 180ms ease-out both; +} + +.commerce-architecture-modal[open][data-closing='true']::backdrop { + animation: commerce-backdrop-enter 140ms ease-in reverse both; +} + +.commerce-build-result { + animation: commerce-overlay-enter 220ms ease-out both; +} + +.commerce-build-tabs { + scroll-margin-top: 90px; +} + +@keyframes commerce-overlay-enter { + from { + opacity: 0; + transform: translateY(8px); + } + to { + opacity: 1; + transform: translateY(0); + } +} + +@keyframes commerce-overlay-exit { + from { + opacity: 1; + transform: translateY(0); + } + to { + opacity: 0; + transform: translateY(4px); + } +} + +@keyframes commerce-backdrop-enter { + from { + opacity: 0; + } + to { + opacity: 1; + } +} + +@media (prefers-reduced-motion: reduce) { + .commerce-architecture-modal[open], + .commerce-architecture-modal[open][data-closing='true'], + .commerce-architecture-modal[open]::backdrop, + .commerce-architecture-modal[open][data-closing='true']::backdrop, + .commerce-build-result { + animation-duration: 1ms; + transform: none !important; + } +} + +.commerce-architecture-modal-content { + padding: var(--spacing-lg); + overflow-wrap: anywhere; +} + +.commerce-architecture-modal-heading { + display: flex; + align-items: center; + justify-content: space-between; + gap: var(--spacing-md); + margin-bottom: var(--spacing-sm); +} + +.commerce-architecture-modal-heading > span { + display: inline-flex; + align-items: center; + gap: var(--spacing-sm); + color: var(--text-secondary); + font-size: var(--font-size-sm); +} + +.commerce-architecture-modal-heading .btn { + flex-shrink: 0; + width: 44px; + height: 44px; + padding: 0; + border-color: var(--border-color); +} + +.commerce-architecture-modal h2 { + margin: 0 0 var(--spacing-md); + font-size: 1.25rem; + line-height: 1.3; + letter-spacing: var(--tracking-display-tight); +} + +.commerce-architecture-modal-content > p { + margin: 0 0 var(--spacing-lg); + color: var(--text-secondary); + font-size: var(--font-size-sm); + line-height: 1.6; +} + +.commerce-architecture-modal .commerce-actions { + padding-top: var(--spacing-lg); + border-top: 1px solid var(--border-color); +} + +.commerce-architecture-modal .commerce-actions .btn { + min-height: 44px; +} + .commerce-explore-section { margin: var(--spacing-md) 0; border: 1px solid var(--border-color); @@ -498,6 +1004,7 @@ .doc-page .commerce-build-caption h3 { margin: 0 0 var(--spacing-sm); + scroll-margin-top: 90px; } .commerce-build-caption p { @@ -579,9 +1086,6 @@ .commerce-build-caption { align-items: flex-start; } - .commerce-part-title { - flex-wrap: nowrap; - } } @container commerce-page (max-width: 720px) { @@ -629,35 +1133,3 @@ transition: none; } } -.commerce-sequence-tabs { - overflow-x: auto; -} - -.commerce-sequence-tabs .language-tab { - white-space: nowrap; -} - -.commerce-sequence { - margin: var(--spacing-lg) 0; -} - -.commerce-sequence-scroll { - overflow: auto; - border: 1px solid var(--border-color); - border-radius: 8px; -} - -.commerce-sequence-scroll:focus-visible { - outline: 2px solid var(--primary-color); - outline-offset: 3px; -} - -.commerce-sequence-scroll img { - display: block; - width: 100%; - min-width: 760px; -} - -:root.dark .commerce-sequence-scroll img { - filter: invert(0.92) hue-rotate(180deg); -} diff --git a/packages/docs/src/styles/documentation.css b/packages/docs/src/styles/documentation.css index 68cfddd9f..952e9bb9a 100644 --- a/packages/docs/src/styles/documentation.css +++ b/packages/docs/src/styles/documentation.css @@ -92,25 +92,27 @@ .docs-nav { position: relative; + color: var(--text-secondary); + font-weight: 600; +} + +:root.dark .docs-nav { + color: #a0a0a0; } /* Sidebar section headers */ .docs-nav h3 { - margin: var(--spacing-lg) var(--spacing-lg) var(--spacing-sm) - var(--docs-sidebar-gutter); - color: var(--text-secondary); + margin: 1.75rem var(--spacing-lg) var(--spacing-sm) var(--docs-sidebar-gutter); + color: var(--text-primary); text-transform: uppercase; - font-size: var(--font-size-xs); - letter-spacing: 0.08em; - font-weight: 600; + font-size: 0.6875rem; + letter-spacing: 0.1em; + font-weight: 700; + line-height: 1.5; padding: 0; border-bottom: none; } -:root.dark .docs-nav h3 { - color: #808080; -} - .docs-nav h3:first-child { margin-top: var(--spacing-sm); } @@ -154,6 +156,16 @@ border-left-color: var(--primary-color); } +.docs-nav a.active, +.menu-dropdown-title.active { + font-weight: 700; +} + +.docs-nav .menu-dropdown-item, +.docs-nav .menu-dropdown-item.active { + font-weight: 400; +} + :root.dark .docs-nav a { color: #a0a0a0; } @@ -164,6 +176,7 @@ } :root.dark .docs-nav a.active { + color: var(--primary-color); background: rgba(164, 116, 101, 0.15); } @@ -225,7 +238,9 @@ } .menu-dropdown-title:hover, -.menu-dropdown-title.active { +.menu-dropdown-title.active, +:root.dark .menu-dropdown-title:hover, +:root.dark .menu-dropdown-title.active { color: var(--primary-color); } @@ -574,7 +589,6 @@ .menu-dropdown-title.menu-dropdown-title--nested { font-size: var(--font-size-sm); - font-weight: 500; text-transform: none; letter-spacing: 0; color: var(--text-secondary); diff --git a/packages/docs/src/styles/home.css b/packages/docs/src/styles/home.css index 210e60732..7b3f4a90f 100644 --- a/packages/docs/src/styles/home.css +++ b/packages/docs/src/styles/home.css @@ -739,6 +739,7 @@ margin: 0 auto; } +.home-section h1, .home-section h2 { font-size: 2.5rem; margin-bottom: 1rem; diff --git a/packages/docs/vercel.json b/packages/docs/vercel.json index 6ffff3b18..c1d2ad6c9 100644 --- a/packages/docs/vercel.json +++ b/packages/docs/vercel.json @@ -1,6 +1,14 @@ { "installCommand": "bun install", "buildCommand": "bun run build", + "cleanUrls": true, + "redirects": [ + { + "source": "/docs", + "destination": "/docs/getting-started", + "permanent": true + } + ], "headers": [ { "source": "/(.*).webp", diff --git a/packages/docs/vite.config.ts b/packages/docs/vite.config.ts index ba08722d5..160041a09 100644 --- a/packages/docs/vite.config.ts +++ b/packages/docs/vite.config.ts @@ -1,15 +1,19 @@ import { readFileSync } from 'node:fs'; -import { join } from 'node:path'; +import { basename, join } from 'node:path'; import { defineConfig, type Connect } from 'vite'; import react from '@vitejs/plugin-react'; // Vite treats .gz files as HTTP compression, which changes downloaded archives. -function archiveDownloads(directory: string): Connect.NextHandleFunction { +export function archiveDownloads( + directory: string +): Connect.NextHandleFunction { return (request, response, next) => { const path = request.url?.split('?')[0] ?? ''; if ( !['GET', 'HEAD'].includes(request.method ?? '') || - !/^\/commerce-example\/(?:\d\d-[\w-]+\/)?source\.tar\.gz$/.test(path) + !/^\/(?:commerce-example\/(?:(?:\d\d-[\w-]+\/)?source|ai-reproduction-source)|commerce-composition\/source)\.tar\.gz$/.test( + path + ) ) { next(); return; @@ -24,7 +28,7 @@ function archiveDownloads(directory: string): Connect.NextHandleFunction { response.setHeader('Content-Type', 'application/gzip'); response.setHeader( 'Content-Disposition', - 'attachment; filename="source.tar.gz"' + `attachment; filename="${basename(path)}"` ); response.setHeader('Content-Length', bytes.length); response.end(request.method === 'HEAD' ? undefined : bytes); diff --git a/packages/kit/COMMERCE-EVENTS.md b/packages/kit/COMMERCE-EVENTS.md index 03b763ab8..3068a30c1 100644 --- a/packages/kit/COMMERCE-EVENTS.md +++ b/packages/kit/COMMERCE-EVENTS.md @@ -55,6 +55,25 @@ from. `commerceEvents.entitlementActive` denormalizes that answer onto the event, and the delivered body carries it as `subscription.active`, so a consumer can act without joining back. +## Account access for Amazon and Horizon + +Commerce Protocol `bindPurchase` connects a verified Amazon receipt or Horizon +store-user/SKU pair to one app account in `purchases.appUserId`. The backend +calling it must establish that the store account belongs to its signed-in user. +Bindings cannot move between app accounts through this operation. + +`entitlements` rechecks these linked purchases with RVS or Meta Graph before +returning `productIds`. It rereads ownership after the network calls; erasure +or an upstream failure cannot turn the last saved verdict into fresh access. +More than 20 linked purchase rows fails the read rather than returning a partial +answer. These are ownership checks, so they add no synthetic subscription rows, +renewal/expiry dates, or lifecycle events. `subscriptionStatus` continues to +report Apple/Google subscription records; use `entitlements` to authorize products. + +Account erasure unlinks these purchases and keeps an evidence tombstone so +verification or binding retries cannot resurrect the erased association. +Consumable quantity and durable fulfillment remain the application’s ledger. + ## Event vocabulary The event types are the lifecycle transitions the state machine already diff --git a/packages/kit/convex/purchases/action.ts b/packages/kit/convex/purchases/action.ts index b94860ed4..a98ca1f11 100644 --- a/packages/kit/convex/purchases/action.ts +++ b/packages/kit/convex/purchases/action.ts @@ -1,8 +1,71 @@ "use node"; import { verifyGooglePlayReceiptInternalV1 } from "./android"; -import { verifyAmazonReceiptInternalV1 } from "./amazon"; +import { + verifyAmazonReceiptInternalV1, + verifyAmazonReceipt as verifyAmazon, +} from "./amazon"; import { verifyAppStoreReceiptInternalV1 } from "./ios"; +import { verifyHorizonReceipt } from "./horizon"; +import { action } from "../_generated/server"; +import { internal } from "../_generated/api"; +import { ConvexError, v } from "convex/values"; +import { getProjectByApiKey } from "./shared"; + +export const readBoundPurchaseEntitlements = action({ + args: { apiKey: v.string(), userId: v.string() }, + returns: v.object({ productIds: v.array(v.string()) }), + handler: async (ctx, args): Promise<{ productIds: string[] }> => { + const project = await getProjectByApiKey(ctx, args.apiKey, "admin"); + const queryArgs = { projectId: project._id, userId: args.userId }; + const purchases = await ctx.runQuery( + internal.purchases.internal.boundPurchasesForUser, + queryArgs, + ); + for (const purchase of purchases) { + const evidence = purchase.requestData; + if (evidence.store === "amazon") { + await verifyAmazon(ctx, { + apiKey: args.apiKey, + userId: evidence.userId, + receiptId: evidence.receiptId, + sandbox: evidence.sandbox, + }); + } else if (evidence.store === "horizon") { + await verifyHorizonReceipt(ctx, { + apiKey: args.apiKey, + userId: evidence.userId, + sku: evidence.sku, + }); + } else { + throw new ConvexError({ + code: "INVALID_INPUT", + message: "Unsupported bound purchase", + }); + } + } + // Re-read ownership after network calls so erasure cannot return stale access. + const current = await ctx.runQuery( + internal.purchases.internal.boundPurchasesForUser, + queryArgs, + ); + const refreshed = new Set(purchases.map((purchase) => purchase._id)); + if (current.some((purchase) => !refreshed.has(purchase._id))) + throw new ConvexError({ + code: "INVALID_INPUT", + message: "Ownership changed; retry the read", + }); + return { + productIds: [ + ...new Set( + current.flatMap((purchase) => + purchase.isValid && purchase.productId ? [purchase.productId] : [], + ), + ), + ], + }; + }, +}); export const verifyGooglePlayReceipt = verifyGooglePlayReceiptInternalV1; export const verifyAppStoreReceipt = verifyAppStoreReceiptInternalV1; diff --git a/packages/kit/convex/purchases/amazon-reconciliation.test.ts b/packages/kit/convex/purchases/amazon-reconciliation.test.ts index 8706ee2c6..f2fb3e182 100644 --- a/packages/kit/convex/purchases/amazon-reconciliation.test.ts +++ b/packages/kit/convex/purchases/amazon-reconciliation.test.ts @@ -48,6 +48,22 @@ class MemQuery { ); } + filter( + build: (query: { + field: (name: string) => string; + eq: (field: string, value: unknown) => (row: Row) => boolean; + }) => (row: Row) => boolean, + ): MemQuery { + return new MemQuery( + this.rows.filter( + build({ + field: (name) => name, + eq: (field, value) => (row) => row[field] === value, + }), + ), + ); + } + order(direction: "asc" | "desc"): MemQuery { return new MemQuery( [...this.rows].sort((left, right) => { diff --git a/packages/kit/convex/purchases/amazon.ts b/packages/kit/convex/purchases/amazon.ts index 13ada266a..feb590124 100644 --- a/packages/kit/convex/purchases/amazon.ts +++ b/packages/kit/convex/purchases/amazon.ts @@ -1,6 +1,9 @@ "use node"; -import { v } from "convex/values"; +import { buildAmazonRemoteId } from "./identity"; +export { buildAmazonRemoteId } from "./identity"; + +import { v, type Infer } from "convex/values"; import { internal } from "../_generated/api"; import type { Id } from "../_generated/dataModel"; @@ -26,6 +29,7 @@ import { getVerificationProjectByApiKey, isValidState, receiptResponseValidator, + type ReceiptResponse, } from "./shared"; const AMAZON_RVS_BASE_URL = "https://appstore-sdk.amazon.com"; @@ -118,18 +122,6 @@ export function buildAmazonRvsUrl(args: { ); } -export function buildAmazonRemoteId(args: { - userId: string; - receiptId: string; - sandbox: boolean; -}): string { - return [ - args.sandbox ? "sandbox" : "production", - encodePathSegment(args.userId), - encodePathSegment(args.receiptId), - ].join(":"); -} - export function mapAmazonReceiptState( receipt: AmazonReceiptData, ): HarmonizedPurchaseState { @@ -449,109 +441,116 @@ export async function waitForAmazonRateSlot(args: { return now(); } +const amazonVerificationArgs = v.object({ + apiKey: v.string(), + userId: v.string(), + receiptId: v.string(), + sandbox: v.optional(v.boolean()), + expectedProductId: v.optional(v.string()), + requestIp: v.optional(v.string()), +}); + export const verifyAmazonReceiptInternalV1 = action({ - args: { - apiKey: v.string(), - userId: v.string(), - receiptId: v.string(), - sandbox: v.optional(v.boolean()), - expectedProductId: v.optional(v.string()), - requestIp: v.optional(v.string()), - }, + args: amazonVerificationArgs.fields, returns: receiptResponseValidator, - handler: async (ctx, args) => { - const verificationStart = Date.now(); - const project = await getVerificationProjectByApiKey(ctx, args.apiKey); - const sandbox = args.sandbox === true; - const environment = environmentForSandbox(sandbox); - const sharedSecret = resolveAmazonSharedSecret({ - sandbox, - amazonSandboxEnabled: project.amazonSandboxEnabled === true, - amazonSharedSecret: project.amazonSharedSecret, - }); - const requestData: AmazonRequestData = { - store: "amazon", - userId: args.userId, - receiptId: args.receiptId, - sandbox, - ...(args.expectedProductId !== undefined - ? { expectedProductId: args.expectedProductId } - : {}), - }; - const applicationId = project.androidPackageName ?? `amazon:${project._id}`; - const remoteId = buildAmazonRemoteId({ + handler: verifyAmazonReceipt, +}); + +export async function verifyAmazonReceipt( + ctx: ActionCtx, + args: Infer, +): Promise { + const verificationStart = Date.now(); + const project = await getVerificationProjectByApiKey(ctx, args.apiKey); + const sandbox = args.sandbox === true; + const environment = environmentForSandbox(sandbox); + const sharedSecret = resolveAmazonSharedSecret({ + sandbox, + amazonSandboxEnabled: project.amazonSandboxEnabled === true, + amazonSharedSecret: project.amazonSharedSecret, + }); + const requestData: AmazonRequestData = { + store: "amazon", + userId: args.userId, + receiptId: args.receiptId, + sandbox, + ...(args.expectedProductId !== undefined + ? { expectedProductId: args.expectedProductId } + : {}), + }; + const applicationId = project.androidPackageName ?? `amazon:${project._id}`; + const remoteId = buildAmazonRemoteId({ + userId: args.userId, + receiptId: args.receiptId, + sandbox, + }); + + let receiptData: AmazonReceiptData; + try { + receiptData = await requestAmazonReceipt({ + sharedSecret, userId: args.userId, receiptId: args.receiptId, sandbox, + maxAttempts: 3, }); - - let receiptData: AmazonReceiptData; - try { - receiptData = await requestAmazonReceipt({ - sharedSecret, - userId: args.userId, - receiptId: args.receiptId, - sandbox, - maxAttempts: 3, + } catch (error) { + if (error instanceof AmazonReceiptInvalidError) { + const state = stateForAmazonInvalidError(error); + await persistAmazonVerdict(ctx, { + projectId: project._id, + applicationId, + remoteId, + requestData, + environment, + remoteResponse: JSON.stringify({ + error: error.errorCode, + message: error.errorMessage, + details: error.errorDetails ?? null, + }), + state, + requestIp: args.requestIp, + verificationDurationMs: Date.now() - verificationStart, }); - } catch (error) { - if (error instanceof AmazonReceiptInvalidError) { - const state = stateForAmazonInvalidError(error); - await persistAmazonVerdict(ctx, { - projectId: project._id, - applicationId, - remoteId, - requestData, - environment, - remoteResponse: JSON.stringify({ - error: error.errorCode, - message: error.errorMessage, - details: error.errorDetails ?? null, - }), - state, - requestIp: args.requestIp, - verificationDurationMs: Date.now() - verificationStart, - }); - return { isValid: false, state, environment }; - } - - // Network, timeout, throttling, configuration, and protocol failures are - // not store verdicts. Never replace a previously valid snapshot with an - // UNKNOWN row just because this attempt could not reach/parse RVS. - if (error instanceof ReceiptVerificationError) throw error; - throw new AmazonReceiptVerificationError(describeError(error)); + return { isValid: false, state, environment }; } - const state = mapAmazonReceiptState(receiptData); - const storeReceiptResponse = { - isValid: isValidState(state), - state, - productId: receiptData.productId, - environment, - }; - const receiptResponse = applyExpectedProductId( - storeReceiptResponse, - args.expectedProductId, - ); + // Network, timeout, throttling, configuration, and protocol failures are + // not store verdicts. Never replace a previously valid snapshot with an + // UNKNOWN row just because this attempt could not reach/parse RVS. + if (error instanceof ReceiptVerificationError) throw error; + throw new AmazonReceiptVerificationError(describeError(error)); + } - // Persist Amazon's verdict, not the caller-scoped expectedProductId check. - // This mirrors Apple/Google and keeps a typo from corrupting the row that - // the background reconciler will refresh later. - await persistAmazonVerdict(ctx, { - projectId: project._id, - applicationId, - remoteId, - requestData, - environment, - remoteResponse: JSON.stringify(receiptData), - state, - requestIp: args.requestIp, - verificationDurationMs: Date.now() - verificationStart, - }); + const state = mapAmazonReceiptState(receiptData); + const storeReceiptResponse = { + isValid: isValidState(state), + state, + productId: receiptData.productId, + environment, + }; + const receiptResponse = applyExpectedProductId( + storeReceiptResponse, + args.expectedProductId, + ); - return receiptResponse; - }, -}); + // Persist Amazon's verdict, not the caller-scoped expectedProductId check. + // This mirrors Apple/Google and keeps a typo from corrupting the row that + // the background reconciler will refresh later. + await persistAmazonVerdict(ctx, { + projectId: project._id, + applicationId, + remoteId, + requestData, + environment, + remoteResponse: JSON.stringify(receiptData), + state, + requestIp: args.requestIp, + verificationDurationMs: Date.now() - verificationStart, + }); + + return receiptResponse; +} /** * Reconcile active Amazon purchase snapshots without inventing subscription diff --git a/packages/kit/convex/purchases/horizon.ts b/packages/kit/convex/purchases/horizon.ts index 8c6bbeb44..af5a089db 100644 --- a/packages/kit/convex/purchases/horizon.ts +++ b/packages/kit/convex/purchases/horizon.ts @@ -1,7 +1,10 @@ "use node"; -import { v } from "convex/values"; -import { action } from "../_generated/server"; +import { buildHorizonRemoteId } from "./identity"; +export { buildHorizonRemoteId } from "./identity"; +import { v, type Infer } from "convex/values"; + +import { action, type ActionCtx } from "../_generated/server"; import { internal } from "../_generated/api"; import { HarmonizedPurchaseState } from "./purchaseState"; import { @@ -15,6 +18,7 @@ import { getVerificationProjectByApiKey, isValidState, receiptResponseValidator, + type ReceiptResponse, } from "./shared"; import { extractHttpStatus, @@ -155,111 +159,105 @@ async function requestHorizonVerification( ); } +const horizonVerificationArgs = v.object({ + apiKey: v.string(), + userId: v.string(), + sku: v.string(), + requestIp: v.optional(v.string()), +}); + export const verifyMetaHorizonReceiptInternalV1 = action({ - args: { - apiKey: v.string(), - userId: v.string(), - sku: v.string(), - requestIp: v.optional(v.string()), - }, + args: horizonVerificationArgs.fields, returns: receiptResponseValidator, - handler: async (ctx, args) => { - const verificationStart = Date.now(); - const project = await getVerificationProjectByApiKey(ctx, args.apiKey); + handler: verifyHorizonReceipt, +}); - if (project.horizonEnabled !== true) { - throw new ProjectMetaHorizonNotEnabledError(); - } - if (!project.horizonAppId) { - throw new ProjectMetaHorizonAppIdNotConfiguredError(); - } - if (!project.horizonAppSecret) { - throw new ProjectMetaHorizonAppSecretNotConfiguredError(); - } +export async function verifyHorizonReceipt( + ctx: ActionCtx, + args: Infer, +): Promise { + const verificationStart = Date.now(); + const project = await getVerificationProjectByApiKey(ctx, args.apiKey); - const requestData = { - store: "horizon" as const, - userId: args.userId, - sku: args.sku, - }; + if (project.horizonEnabled !== true) { + throw new ProjectMetaHorizonNotEnabledError(); + } + if (!project.horizonAppId) { + throw new ProjectMetaHorizonAppIdNotConfiguredError(); + } + if (!project.horizonAppSecret) { + throw new ProjectMetaHorizonAppSecretNotConfiguredError(); + } - // `OC|$APP_ID|$APP_SECRET` is Meta's App Access Token format for - // server-to-server calls. Never logged, never returned to the - // caller — only sent in the outgoing request body. - const appAccessToken = `OC|${project.horizonAppId}|${project.horizonAppSecret}`; - const url = `${META_GRAPH_BASE}/${encodeURIComponent(project.horizonAppId)}/verify_entitlement`; + const requestData = { + store: "horizon" as const, + userId: args.userId, + sku: args.sku, + }; - let verified: HorizonVerifyResult; - try { - verified = await requestHorizonVerification( - url, - new URLSearchParams({ - access_token: appAccessToken, - user_id: args.userId, - sku: args.sku, - }).toString(), - ); - } catch (error) { - // An HTTP error, timeout, network failure, or malformed body is not a - // negative entitlement verdict. Preserve the last confirmed result - // instead of replacing it with INAUTHENTIC. - throw new MetaHorizonVerificationError(describeError(error)); - } - - const state = verified.success - ? HarmonizedPurchaseState.ENTITLED - : HarmonizedPurchaseState.INAUTHENTIC; + // `OC|$APP_ID|$APP_SECRET` is Meta's App Access Token format for + // server-to-server calls. Never logged, never returned to the + // caller — only sent in the outgoing request body. + const appAccessToken = `OC|${project.horizonAppId}|${project.horizonAppSecret}`; + const url = `${META_GRAPH_BASE}/${encodeURIComponent(project.horizonAppId)}/verify_entitlement`; - await ctx.runMutation(internal.purchases.internal.saveReceiptInternal, { - projectId: project._id, - store: "horizon", - applicationId: project.horizonAppId, - // `{userId}:{sku}` is deterministic per entitlement so the - // `by_project_and_remote` index de-dupes repeat verifications - // into one row — same pattern Apple uses with - // originalTransactionId and Google uses with purchaseToken. - remoteId: buildHorizonRemoteId(args.userId, args.sku), - requestData, - // Pack the sku alongside Meta's fields so - // extractProductIdFromRemoteResponse can surface the product - // id from persisted rows without also needing requestData. - // `grantTimeMs` is renamed from Meta's wire field `grant_time` - // because we've already normalized the unit — storing it with - // the original name would invite `new Date(grant_time)` misuse - // downstream. - remoteResponse: JSON.stringify({ - success: verified.success, - grantTimeMs: verified.grantTime, + let verified: HorizonVerifyResult; + try { + verified = await requestHorizonVerification( + url, + new URLSearchParams({ + access_token: appAccessToken, + user_id: args.userId, sku: args.sku, - }), - state, - isValid: isValidState(state), - requestIp: args.requestIp, - verificationDurationMs: Date.now() - verificationStart, - }); + }).toString(), + ); + } catch (error) { + // An HTTP error, timeout, network failure, or malformed body is not a + // negative entitlement verdict. Preserve the last confirmed result + // instead of replacing it with INAUTHENTIC. + throw new MetaHorizonVerificationError(describeError(error)); + } - return { isValid: isValidState(state), state, productId: args.sku }; - }, -}); + const state = verified.success + ? HarmonizedPurchaseState.ENTITLED + : HarmonizedPurchaseState.INAUTHENTIC; + + await ctx.runMutation(internal.purchases.internal.saveReceiptInternal, { + projectId: project._id, + store: "horizon", + applicationId: project.horizonAppId, + // `{userId}:{sku}` is deterministic per entitlement so the + // `by_project_and_remote` index de-dupes repeat verifications + // into one row — same pattern Apple uses with + // originalTransactionId and Google uses with purchaseToken. + remoteId: buildHorizonRemoteId(args.userId, args.sku), + requestData, + // Pack the sku alongside Meta's fields so + // extractProductIdFromRemoteResponse can surface the product + // id from persisted rows without also needing requestData. + // `grantTimeMs` is renamed from Meta's wire field `grant_time` + // because we've already normalized the unit — storing it with + // the original name would invite `new Date(grant_time)` misuse + // downstream. + remoteResponse: JSON.stringify({ + success: verified.success, + grantTimeMs: verified.grantTime, + sku: args.sku, + }), + state, + isValid: isValidState(state), + requestIp: args.requestIp, + verificationDurationMs: Date.now() - verificationStart, + }); + + return { isValid: isValidState(state), state, productId: args.sku }; +} interface HorizonVerifyResult { success: boolean; grantTime?: number; } -/** - * Build a deduplication key for the (userId, sku) pair that's safe to - * collide-check against. A naive `"${userId}:${sku}"` would alias - * distinct entitlements when either field contains a colon (e.g. - * `a:b` + `c` vs. `a` + `b:c`). URL-encoding each part restores an - * unambiguous mapping from the pair to the remoteId — the colon is - * never produced by `encodeURIComponent`, so it remains a safe - * separator. - */ -export function buildHorizonRemoteId(userId: string, sku: string): string { - return `${encodeURIComponent(userId)}:${encodeURIComponent(sku)}`; -} - export function parseHorizonResponse(raw: unknown): HorizonVerifyResult { if (!raw || typeof raw !== "object") { throw new InvalidHorizonResponseError( diff --git a/packages/kit/convex/purchases/identity.ts b/packages/kit/convex/purchases/identity.ts new file mode 100644 index 000000000..5fa787ff2 --- /dev/null +++ b/packages/kit/convex/purchases/identity.ts @@ -0,0 +1,15 @@ +export function buildHorizonRemoteId(userId: string, sku: string): string { + return `${encodeURIComponent(userId)}:${encodeURIComponent(sku)}`; +} + +export function buildAmazonRemoteId(args: { + userId: string; + receiptId: string; + sandbox: boolean; +}): string { + return [ + args.sandbox ? "sandbox" : "production", + encodeURIComponent(args.userId), + encodeURIComponent(args.receiptId), + ].join(":"); +} diff --git a/packages/kit/convex/purchases/internal.ts b/packages/kit/convex/purchases/internal.ts index 71ad4ed8c..48acd651c 100644 --- a/packages/kit/convex/purchases/internal.ts +++ b/packages/kit/convex/purchases/internal.ts @@ -1,7 +1,14 @@ -import { internalMutation, MutationCtx } from "../_generated/server"; +import { + internalMutation, + internalQuery, + MutationCtx, +} from "../_generated/server"; import { v, ConvexError, Infer } from "convex/values"; import { Doc, Id } from "../_generated/dataModel"; import { internal } from "../_generated/api"; +import schema from "../schema"; +import { isValidSubscriptionUserId } from "../subscriptions/limits"; +import { isUserErasureRequested } from "../subscriptions/erasure"; import { purchaseRequestDataValidator, purchaseStoreValidator, @@ -104,6 +111,7 @@ export async function savePurchaseInternal({ .withIndex("by_project_and_remote", (q) => q.eq("projectId", projectId).eq("remoteId", remoteId), ) + .filter((q) => q.eq(q.field("store"), store)) .first(); if (existing) { @@ -636,3 +644,34 @@ export const applyAmazonReconciliationVerdict = internalMutation({ return true; }, }); + +export const boundPurchasesForUser = internalQuery({ + args: { projectId: v.id("projects"), userId: v.string() }, + returns: v.array(schema.doc("purchases")), + handler: async (ctx, args) => { + if (!isValidSubscriptionUserId(args.userId)) + throw new ConvexError({ + code: "INVALID_INPUT", + message: "Invalid user identity", + }); + const project = await ctx.db.get(args.projectId); + if (!project || project.pendingDeletion) + throw new ConvexError({ + code: "INVALID_INPUT", + message: "Project unavailable", + }); + if (await isUserErasureRequested(ctx, project, args.userId)) return []; + const rows = await ctx.db + .query("purchases") + .withIndex("by_project_and_app_user", (q) => + q.eq("projectId", args.projectId).eq("appUserId", args.userId), + ) + .take(21); + if (rows.length > 20) + throw new ConvexError({ + code: "INVALID_INPUT", + message: "Bound purchase read limit exceeded", + }); + return rows.filter((row) => !row.accountErased); + }, +}); diff --git a/packages/kit/convex/purchases/mutation.ts b/packages/kit/convex/purchases/mutation.ts index 47ea59353..b6d798c7d 100644 --- a/packages/kit/convex/purchases/mutation.ts +++ b/packages/kit/convex/purchases/mutation.ts @@ -1,5 +1,9 @@ -import { internalMutation } from "../_generated/server"; -import { v } from "convex/values"; +import { internalMutation, mutation } from "../_generated/server"; +import { ConvexError, v } from "convex/values"; +import { resolveProjectByApiKeyFromDb } from "../projects/helpers"; +import { isValidSubscriptionUserId } from "../subscriptions/limits"; +import { isUserErasureRequested } from "../subscriptions/erasure"; + import { createError, ErrorCode } from "../utils/errors"; import { HarmonizedPurchaseState } from "./purchaseState"; import { @@ -10,6 +14,51 @@ import { } from "./stats"; import { getProjectById } from "../projects/helpers"; +export const bindVerifiedPurchaseAsServer = mutation({ + args: { + apiKey: v.string(), + userId: v.string(), + store: v.union(v.literal("amazon"), v.literal("horizon")), + remoteId: v.string(), + }, + returns: v.object({ bound: v.boolean() }), + handler: async (ctx, args) => { + const resolved = await resolveProjectByApiKeyFromDb( + ctx, + args.apiKey, + "admin", + ); + if (!resolved) + throw new ConvexError({ + code: "INVALID_API_KEY", + message: "Invalid credential", + }); + if ( + !isValidSubscriptionUserId(args.userId) || + !args.remoteId || + args.remoteId.length > 65536 + ) + throw new ConvexError({ + code: "INVALID_INPUT", + message: "Invalid purchase identity", + }); + if (await isUserErasureRequested(ctx, resolved.project, args.userId)) + return { bound: false }; + const purchase = await ctx.db + .query("purchases") + .withIndex("by_project_and_remote", (q) => + q.eq("projectId", resolved.project._id).eq("remoteId", args.remoteId), + ) + .filter((q) => q.eq(q.field("store"), args.store)) + .unique(); + if (!purchase || purchase.accountErased) return { bound: false }; + if (purchase.appUserId) + return { bound: purchase.appUserId === args.userId }; + if (!purchase.isValid || !purchase.productId) return { bound: false }; + await ctx.db.patch(purchase._id, { appUserId: args.userId }); + return { bound: true }; + }, +}); // Mark purchase as inauthentic. // // Internal-only on purpose: nothing in the dashboard or server calls this — diff --git a/packages/kit/convex/purchases/ownership.test.ts b/packages/kit/convex/purchases/ownership.test.ts new file mode 100644 index 000000000..68eba6656 --- /dev/null +++ b/packages/kit/convex/purchases/ownership.test.ts @@ -0,0 +1,235 @@ +import { beforeEach, describe, expect, it, vi } from "vitest"; +import { testableFunction } from "../test.setup"; +import { hmacSha256Hex } from "../utils/sha256"; + +const stubs = vi.hoisted(() => ({ + resolve: vi.fn(), + project: vi.fn(), + amazon: vi.fn(), + horizon: vi.fn(), +})); +vi.mock("../projects/helpers", () => ({ + resolveProjectByApiKeyFromDb: stubs.resolve, + getProjectById: vi.fn(), +})); +vi.mock("./shared", async (original) => ({ + ...(await original()), + getProjectByApiKey: stubs.project, +})); +vi.mock("./amazon", () => ({ + verifyAmazonReceipt: stubs.amazon, + verifyAmazonReceiptInternalV1: {}, +})); +vi.mock("./horizon", () => ({ verifyHorizonReceipt: stubs.horizon })); +import { bindVerifiedPurchaseAsServer } from "./mutation"; +import { boundPurchasesForUser } from "./internal"; +import { readBoundPurchaseEntitlements } from "./action"; + +const project = { _id: "p1", userErasureHashKey: "local-hash-key" }; +type Row = Record; +function database(rows: Record) { + return { + query(table: string) { + let current = rows[table] ?? []; + const query = { + withIndex(_name: string, build: (q: unknown) => unknown) { + const index = { + eq(field: string, value: unknown) { + current = current.filter((row) => row[field] === value); + return index; + }, + }; + build(index); + return query; + }, + filter(build: (q: unknown) => unknown) { + const predicate = build({ + field: (field: string) => field, + eq: (field: string, value: unknown) => (row: Row) => + row[field] === value, + }) as (row: Row) => boolean; + current = current.filter(predicate); + return query; + }, + async unique() { + if (current.length > 1) throw Error("Ambiguous rows"); + return current[0] ?? null; + }, + async take(count: number) { + return current.slice(0, count); + }, + }; + return query; + }, + async get(id: string) { + return id === project._id ? project : null; + }, + async patch(id: string, value: Row) { + const row = Object.values(rows) + .flat() + .find((row) => row._id === id); + if (!row) throw Error("Missing row"); + Object.assign(row, value); + }, + }; +} +const bind = testableFunction(bindVerifiedPurchaseAsServer)._handler; +const read = testableFunction(boundPurchasesForUser)._handler; +const refresh = testableFunction(readBoundPurchaseEntitlements)._handler; + +beforeEach(() => { + vi.clearAllMocks(); + stubs.resolve.mockResolvedValue({ project }); + stubs.project.mockResolvedValue(project); + stubs.amazon.mockResolvedValue({ isValid: true }); + stubs.horizon.mockResolvedValue({ isValid: true }); +}); + +describe.each(["amazon", "horizon"] as const)("%s ownership", (store) => { + const args = { + apiKey: "server-key", + userId: "alice", + store, + remoteId: "store-proof", + }; + function setup(overrides: Row = {}) { + const purchase: Row = { + _id: "receipt", + projectId: "p1", + store, + remoteId: "store-proof", + productId: "premium", + isValid: true, + ...overrides, + }; + const rows: Record = { + purchases: [purchase], + subscriptionUserErasureJobs: [], + }; + return { rows, purchase, ctx: { db: database(rows) } }; + } + it("binds once, preserves ownership and refuses another account", async () => { + const { ctx, purchase } = setup(); + expect(await bind(ctx, args)).toEqual({ bound: true }); + expect(await bind(ctx, args)).toEqual({ bound: true }); + expect(await bind(ctx, { ...args, userId: "bob" })).toEqual({ + bound: false, + }); + expect(purchase.appUserId).toBe("alice"); + expect(stubs.resolve).toHaveBeenCalledWith(ctx, "server-key", "admin"); + }); + it.each([ + { isValid: false }, + { accountErased: true }, + { projectId: "other" }, + { store: "google" }, + ])("rejects unavailable or cross-scope evidence %j", async (overrides) => { + const { ctx, purchase } = setup(overrides); + expect(await bind(ctx, args)).toEqual({ bound: false }); + expect(purchase.appUserId).toBeUndefined(); + }); + it("refuses binding and reads as soon as erasure is requested", async () => { + const { rows, ctx } = setup({ appUserId: "alice" }); + rows.subscriptionUserErasureJobs.push({ + projectId: "p1", + userIdHash: await hmacSha256Hex(project.userErasureHashKey, "alice"), + status: "queued", + }); + expect(await bind(ctx, args)).toEqual({ bound: false }); + expect( + await read(ctx, { projectId: "p1" as never, userId: "alice" }), + ).toEqual([]); + }); + it("checks credentials before revealing evidence", async () => { + stubs.resolve.mockResolvedValue(null); + const { ctx } = setup(); + await expect(bind(ctx, args)).rejects.toThrow(); + }); +}); + +it("refuses partial ownership reads above the bounded limit", async () => { + const ctx = { + db: database({ + purchases: Array.from({ length: 21 }, (_, i) => ({ + _id: `r${i}`, + projectId: "p1", + appUserId: "alice", + })), + }), + }; + await expect( + read(ctx, { projectId: "p1" as never, userId: "alice" }), + ).rejects.toThrow("limit"); +}); + +it("refreshes both stores and returns only current, still-bound products", async () => { + const rows = [ + { + _id: "a", + isValid: true, + productId: "amazon-premium", + requestData: { + store: "amazon", + userId: "store-alice", + receiptId: "receipt", + sandbox: true, + }, + }, + { + _id: "h", + isValid: true, + productId: "quest-premium", + requestData: { + store: "horizon", + userId: "meta-alice", + sku: "quest-premium", + }, + }, + ]; + const runQuery = vi + .fn() + .mockResolvedValueOnce(rows) + .mockResolvedValueOnce([{ ...rows[1], isValid: false }]); + expect( + await refresh({ runQuery }, { apiKey: "server", userId: "alice" }), + ).toEqual({ productIds: [] }); + expect(stubs.amazon).toHaveBeenCalledWith(expect.anything(), { + apiKey: "server", + userId: "store-alice", + receiptId: "receipt", + sandbox: true, + }); + expect(stubs.horizon).toHaveBeenCalledWith(expect.anything(), { + apiKey: "server", + userId: "meta-alice", + sku: "quest-premium", + }); +}); + +it("fails the entire read on upstream failure, preserving the saved verdict", async () => { + stubs.horizon.mockRejectedValue(new Error("upstream unavailable")); + const rows = [ + { + _id: "h", + isValid: true, + productId: "premium", + requestData: { store: "horizon", userId: "meta-alice", sku: "premium" }, + }, + ]; + const runQuery = vi.fn().mockResolvedValue(rows); + await expect( + refresh({ runQuery }, { apiKey: "server", userId: "alice" }), + ).rejects.toThrow("upstream"); + expect(rows[0].isValid).toBe(true); + expect(runQuery).toHaveBeenCalledTimes(1); +}); + +it("does not return an unrefreshed purchase bound during the read", async () => { + const runQuery = vi + .fn() + .mockResolvedValueOnce([]) + .mockResolvedValueOnce([{ _id: "new" }]); + await expect( + refresh({ runQuery }, { apiKey: "server", userId: "alice" }), + ).rejects.toThrow("Ownership changed"); +}); diff --git a/packages/kit/convex/purchases/save-purchase-idempotency.test.ts b/packages/kit/convex/purchases/save-purchase-idempotency.test.ts index 587120dff..09e30f844 100644 --- a/packages/kit/convex/purchases/save-purchase-idempotency.test.ts +++ b/packages/kit/convex/purchases/save-purchase-idempotency.test.ts @@ -55,9 +55,20 @@ class MemQuery { return new MemQuery(filtered); } - filter(_cb: unknown): MemQuery { - void _cb; - return this; + filter( + build: (query: { + field: (name: string) => string; + eq: (field: string, value: unknown) => (row: Row) => boolean; + }) => (row: Row) => boolean, + ): MemQuery { + return new MemQuery( + this.rows.filter( + build({ + field: (name) => name, + eq: (field, value) => (row) => row[field] === value, + }), + ), + ); } async first(): Promise { @@ -257,6 +268,22 @@ describe("savePurchaseInternal — idempotency regression guard", () => { ctx = makeCtx(db); }); + it("does not overwrite another store with the same opaque remote identity", async () => { + await savePurchaseInternal({ ctx, ...buildArgs({ remoteId: "same-id" }) }); + await savePurchaseInternal({ + ctx, + ...buildArgs({ + remoteId: "same-id", + store: "horizon", + requestData: { store: "horizon", userId: "viewer", sku: "premium" }, + remoteResponse: JSON.stringify({ success: true, sku: "premium" }), + }), + }); + const rows = await db.query("purchases").collect(); + expect(rows).toHaveLength(2); + expect(rows.map((row) => row.store).sort()).toEqual(["google", "horizon"]); + }); + it("same (projectId, remoteId) twice produces exactly one purchase row", async () => { await savePurchaseInternal({ ctx, ...buildArgs({ remoteId: TOKEN }) }); await savePurchaseInternal({ ctx, ...buildArgs({ remoteId: TOKEN }) }); @@ -287,12 +314,12 @@ describe("savePurchaseInternal — idempotency regression guard", () => { await savePurchaseInternal({ ctx, ...buildArgs({ - store: "horizon", + store: "amazon", remoteId: "legacy-shared-id", requestData: { - store: "horizon", - userId: "horizon-user", - sku: "premium_monthly", + store: "amazon", + userId: "amazon-user", + receiptId: "legacy-shared-id", }, remoteResponse: JSON.stringify({ sku: "premium_monthly" }), state: HarmonizedPurchaseState.INAUTHENTIC, @@ -303,7 +330,7 @@ describe("savePurchaseInternal — idempotency regression guard", () => { const rows = await db.query("purchases").collect(); expect(rows).toHaveLength(1); expect(rows[0]).toMatchObject({ - store: "horizon", + store: "amazon", isValid: false, statsCounted: true, storeStatsCounted: true, @@ -312,8 +339,8 @@ describe("savePurchaseInternal — idempotency regression guard", () => { total: 1, apple: 0, google: 0, - horizon: 1, - amazon: 0, + horizon: 0, + amazon: 1, googleOrders: 0, valid: 0, invalid: 1, diff --git a/packages/kit/convex/schema.ts b/packages/kit/convex/schema.ts index ac1fcaddb..52418eb61 100644 --- a/packages/kit/convex/schema.ts +++ b/packages/kit/convex/schema.ts @@ -455,6 +455,8 @@ const schema = defineSchema({ purchases: defineTable({ projectId: v.id("projects"), store: purchaseStoreValidator, + appUserId: v.optional(v.string()), + accountErased: v.optional(v.boolean()), applicationId: v.string(), // bundleId or packageName remoteId: v.optional(v.string()), requestData: purchaseRequestDataValidator, @@ -507,6 +509,7 @@ const schema = defineSchema({ ]) .index("by_application", ["applicationId"]) .index("by_project_and_remote", ["projectId", "remoteId"]) + .index("by_project_and_app_user", ["projectId", "appUserId"]) .index("by_project_app_orderId", ["projectId", "applicationId", "orderId"]) .index("by_store_isValid_nextAmazonReconcileAt", [ "store", @@ -747,6 +750,7 @@ const schema = defineSchema({ // Apple does not have this problem — `originalTransactionId` is stable // across the entire entitlement lifetime. subscriptions: defineTable({ + accountErased: v.optional(v.boolean()), projectId: v.id("projects"), purchaseToken: v.string(), userId: v.optional(v.string()), diff --git a/packages/kit/convex/subscriptions/erasure.ts b/packages/kit/convex/subscriptions/erasure.ts new file mode 100644 index 000000000..d8b245396 --- /dev/null +++ b/packages/kit/convex/subscriptions/erasure.ts @@ -0,0 +1,23 @@ +import type { Doc } from "../_generated/dataModel"; +import type { QueryCtx } from "../_generated/server"; +import { hmacSha256Hex, sha256Hex } from "../utils/sha256"; + +export async function isUserErasureRequested( + ctx: QueryCtx, + project: Doc<"projects">, + userId: string, +): Promise { + const hashes = [await sha256Hex(userId)]; + if (project.userErasureHashKey) + hashes.push(await hmacSha256Hex(project.userErasureHashKey, userId)); + for (const userIdHash of hashes) { + const job = await ctx.db + .query("subscriptionUserErasureJobs") + .withIndex("by_project_and_user_hash", (q) => + q.eq("projectId", project._id).eq("userIdHash", userIdHash), + ) + .unique(); + if (job) return true; + } + return false; +} diff --git a/packages/kit/convex/subscriptions/internal.test.ts b/packages/kit/convex/subscriptions/internal.test.ts index 08a1e1761..ce65c6550 100644 --- a/packages/kit/convex/subscriptions/internal.test.ts +++ b/packages/kit/convex/subscriptions/internal.test.ts @@ -1,10 +1,13 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import { HarmonizedPurchaseState } from "../purchases/purchaseState"; +import { hmacSha256Hex } from "../utils/sha256"; +import { buildEventPayload } from "../commerce/deliveryState"; import { applySubscriptionEventHandler, bindSubscriptionToUserHandler, rebindSubscriptionToUserHandler, + drainSubscriptionUserErasurePage, buildVerifiedSubscriptionSnapshot, getCurrentProductIdByTokenHandler, getSourceProductIdByTokenHandler, @@ -38,6 +41,10 @@ class MemQuery { async collect(): Promise { return [...this.rows]; } + + async take(count: number): Promise { + return this.rows.slice(0, count); + } } class IndexBuilder { @@ -143,6 +150,72 @@ function makeCtx(db: MemDb) { const PROJECT_ID = "projects_seed_1"; const TOKEN = "purchase_token_1"; +describe("entitlement events across the expiry deadline", () => { + it.each([false, true])( + "revokes once when the clock expires before notifications (cancel first: %s)", + async (cancelFirst) => { + vi.useFakeTimers(); + try { + vi.setSystemTime(1_000); + const db = new MemDb(); + const started = await seedWebhookEvent(db, { + type: "SubscriptionStarted", + notificationId: "clock-start", + occurredAt: 1_000, + }); + await db.patch(started, { expiresAt: 2_000, renewsAt: 2_000 }); + await applySubscriptionEventHandler(makeCtx(db), { + projectId: PROJECT_ID as never, + eventId: started as never, + }); + await bindSubscriptionToUserHandler(makeCtx(db), { + projectId: PROJECT_ID as never, + purchaseToken: TOKEN, + userId: "clock-user", + }); + vi.setSystemTime(3_000); + if (cancelFirst) { + const canceled = await seedWebhookEvent(db, { + type: "SubscriptionStarted", + notificationId: "clock-cancel", + occurredAt: 2_500, + }); + await db.patch(canceled, { + type: "SubscriptionCanceled", + expiresAt: 2_000, + renewsAt: undefined, + willRenew: false, + }); + await applySubscriptionEventHandler(makeCtx(db), { + projectId: PROJECT_ID as never, + eventId: canceled as never, + }); + } + const expired = await seedWebhookEvent(db, { + type: "SubscriptionExpired", + notificationId: "clock-expire", + occurredAt: 3_000, + }); + await db.patch(expired, { expiresAt: 2_000 }); + const args = { + projectId: PROJECT_ID as never, + eventId: expired as never, + }; + await applySubscriptionEventHandler(makeCtx(db), args); + await applySubscriptionEventHandler(makeCtx(db), args); + expect( + db + .rows("commerceEvents") + .filter((row) => String(row.eventType).startsWith("entitlement.")) + .map((row) => row.eventType), + ).toEqual(["entitlement.granted", "entitlement.revoked"]); + } finally { + vi.useRealTimers(); + } + }, + ); +}); + async function seedWebhookEvent( db: MemDb, args: { @@ -181,6 +254,204 @@ async function seedWebhookEvent( }); } +describe("subscription erasure across replacement tokens", () => { + it.each([false, true])( + "reconciles a granted successor without restoring erased identities (successor erasure requested: %s)", + async (successorErased) => { + const db = new MemDb(); + const ctx = makeCtx(db); + const hashKey = "erasure-test-key"; + await db.patch(PROJECT_ID, { userErasureHashKey: hashKey }); + async function erasureJob(userId: string): Promise { + return db.insert("subscriptionUserErasureJobs", { + projectId: PROJECT_ID, + userId, + userIdHash: await hmacSha256Hex(hashKey, userId), + status: "queued", + subscriptionsErased: 0, + commerceEventsErased: 0, + }); + } + await recordVerifiedSubscriptionHandler(ctx, { + projectId: PROJECT_ID as never, + platform: "Android", + purchaseToken: TOKEN, + productId: "premium_monthly", + purchaseState: "ENTITLED", + }); + await bindSubscriptionToUserHandler(ctx, { + projectId: PROJECT_ID as never, + purchaseToken: TOKEN, + userId: "erased-owner", + }); + await drainSubscriptionUserErasurePage( + ctx, + (await erasureJob("erased-owner")) as never, + ); + const startedId = await seedWebhookEvent(db, { + type: "SubscriptionStarted", + notificationId: "successor-granted", + occurredAt: 1_000, + }); + await db.patch(startedId, { + purchaseToken: "replacement", + expiresAt: Date.now() + 60_000, + }); + await applySubscriptionEventHandler(ctx, { + projectId: PROJECT_ID as never, + eventId: startedId as never, + }); + await bindSubscriptionToUserHandler(ctx, { + projectId: PROJECT_ID as never, + purchaseToken: "replacement", + userId: "successor-owner", + }); + const grant = db + .rows("commerceEvents") + .find((event) => event.eventType === "entitlement.granted"); + expect(grant?.userId).toBe("successor-owner"); + + const successorErasureJob = successorErased + ? await erasureJob("successor-owner") + : undefined; + const destinationId = await db.insert("outboundDestinations", { + projectId: PROJECT_ID, + enabled: true, + eventTypes: ["entitlement.revoked"], + }); + const linkedId = await seedWebhookEvent(db, { + type: "SubscriptionProductChanged", + notificationId: "late-erased-link", + occurredAt: 2_000, + }); + await db.patch(linkedId, { + purchaseToken: "replacement", + linkedPurchaseToken: TOKEN, + }); + const args = { + projectId: PROJECT_ID as never, + eventId: linkedId as never, + }; + await applySubscriptionEventHandler(ctx, args); + await applySubscriptionEventHandler(ctx, args); + + expect(db.rows("subscriptions")).toHaveLength(1); + expect(db.rows("subscriptions")[0]).toMatchObject({ + accountErased: true, + }); + expect(db.rows("subscriptions")[0].userId).toBeUndefined(); + const revocations = db + .rows("commerceEvents") + .filter((event) => event.eventType === "entitlement.revoked"); + if (successorErased) { + expect(revocations).toEqual([]); + expect( + db + .rows("commerceEvents") + .some( + (event) => + event.sourceEventId === linkedId && event.userId !== undefined, + ), + ).toBe(false); + await drainSubscriptionUserErasurePage( + ctx, + successorErasureJob as never, + ); + expect( + db.rows("commerceEvents").some((event) => event.userId !== undefined), + ).toBe(false); + expect(db.rows("outboundDeliveries")).toEqual([]); + } else { + expect(revocations).toHaveLength(1); + expect(buildEventPayload(revocations[0] as never)).toMatchObject({ + eventType: "entitlement.revoked", + userId: "successor-owner", + productId: "premium_monthly", + sourceStoreEventId: "late-erased-link", + subscription: { active: false }, + }); + expect( + buildEventPayload(revocations[0] as never).price, + ).toBeUndefined(); + expect(db.rows("outboundDeliveries")).toEqual([ + expect.objectContaining({ + eventId: revocations[0]._id, + destinationId, + status: "pending", + }), + ]); + } + expect( + JSON.stringify( + [...db.tables.values()].map((rows) => [...rows.values()]), + ), + ).not.toContain("erased-owner"); + }, + ); + + it.each([ + { erasedToken: TOKEN, successorExists: false, boundToken: undefined }, + { erasedToken: TOKEN, successorExists: true, boundToken: undefined }, + { erasedToken: TOKEN, successorExists: true, boundToken: "replacement" }, + { erasedToken: "replacement", successorExists: true, boundToken: TOKEN }, + ])("preserves erasure and removes linked ownership: %j", async (testCase) => { + const db = new MemDb(); + const ctx = makeCtx(db); + for (const purchaseToken of testCase.successorExists + ? [TOKEN, "replacement"] + : [TOKEN]) { + const id = await recordVerifiedSubscriptionHandler(ctx, { + projectId: PROJECT_ID as never, + platform: "Android", + purchaseToken, + productId: "premium_monthly", + purchaseState: "ENTITLED", + subscriptionState: "SUBSCRIPTION_STATE_ACTIVE", + }); + if (purchaseToken === testCase.erasedToken) + await db.patch(id!, { accountErased: true }); + if (purchaseToken === testCase.boundToken) + await bindSubscriptionToUserHandler(ctx, { + projectId: PROJECT_ID as never, + purchaseToken, + userId: "linked-owner", + }); + } + const eventId = await seedWebhookEvent(db, { + type: "SubscriptionStarted", + notificationId: "erased-replacement", + occurredAt: Date.now(), + }); + await db.patch(eventId, { + purchaseToken: "replacement", + linkedPurchaseToken: TOKEN, + }); + await applySubscriptionEventHandler(ctx, { + projectId: PROJECT_ID as never, + eventId: eventId as never, + }); + + expect(db.rows("subscriptions")).toHaveLength(1); + expect(db.rows("subscriptions")[0]).toMatchObject({ + purchaseToken: "replacement", + accountErased: true, + }); + expect(db.rows("subscriptions")[0].userId).toBeUndefined(); + for (const purchaseToken of [TOKEN, "replacement"]) { + const args = { + projectId: PROJECT_ID as never, + purchaseToken, + userId: "new-owner", + }; + expect(await bindSubscriptionToUserHandler(ctx, args)).toBeNull(); + expect(await rebindSubscriptionToUserHandler(ctx, args)).toBeNull(); + } + expect( + db.rows("commerceEvents").some((event) => event.userId !== undefined), + ).toBe(false); + }); +}); + describe("bindSubscriptionToUser amount handling", () => { it("does not repeat an amount the webhook already reported", async () => { const db = new MemDb(); @@ -2736,6 +3007,54 @@ describe("user binding authorization", () => { expect(owned.rows("subscriptions")[0].userId).toBe("victim"); }); + it.each([undefined, "real-owner"])( + "refuses operator rebind of a tombstoned record (owner: %s)", + async (userId) => { + const db = new MemDb(); + await seedBound(db, userId); + await db.patch(db.rows("subscriptions")[0]._id, { + accountErased: true, + }); + const before = structuredClone(db.rows("subscriptions")); + expect( + await rebindSubscriptionToUserHandler(makeCtx(db), { + projectId: PROJECT_ID as never, + purchaseToken: TOKEN, + userId: "real-owner", + }), + ).toBeNull(); + expect(db.rows("subscriptions")).toEqual(before); + expect(db.rows("commerceEvents")).toEqual([]); + }, + ); + + it.each(["queued", "running", "completed"])( + "refuses rebind into or out of an account with a %s erasure job", + async (status) => { + for (const erasedUser of ["source-user", "target-user"]) { + const db = new MemDb(); + await seedBound(db, "source-user"); + const hashKey = "erasure-test-key"; + await db.patch(PROJECT_ID, { userErasureHashKey: hashKey }); + await db.insert("subscriptionUserErasureJobs", { + projectId: PROJECT_ID, + userIdHash: await hmacSha256Hex(hashKey, erasedUser), + status, + }); + const before = structuredClone(db.rows("subscriptions")); + expect( + await rebindSubscriptionToUserHandler(makeCtx(db), { + projectId: PROJECT_ID as never, + purchaseToken: TOKEN, + userId: "target-user", + }), + ).toBeNull(); + expect(db.rows("subscriptions")).toEqual(before); + expect(db.rows("commerceEvents")).toEqual([]); + } + }, + ); + // A consumer gating access on commerce events must be told the purchase // moved, or the wrong user keeps access and the real one never gets it. it("revokes the old user and grants the new one on a rebind", async () => { diff --git a/packages/kit/convex/subscriptions/internal.ts b/packages/kit/convex/subscriptions/internal.ts index 5f1e6dc86..c078050e6 100644 --- a/packages/kit/convex/subscriptions/internal.ts +++ b/packages/kit/convex/subscriptions/internal.ts @@ -18,6 +18,7 @@ import { import { applyStatsTransition, statsContributionFor } from "./stats"; import { assertProjectWritable } from "../projects/writable"; import { isValidSubscriptionUserId } from "./limits"; +import { isUserErasureRequested } from "./erasure"; export const USER_ERASURE_BATCH_SIZE = 100; export const USER_ERASURE_JOB_RETENTION_MS = 7 * 24 * 60 * 60 * 1_000; @@ -164,7 +165,7 @@ export async function applySubscriptionEventHandler( ctx: MutationCtx, args: ApplySubscriptionEventArgs, ): Promise { - await assertProjectWritable(ctx, args.projectId); + const project = await assertProjectWritable(ctx, args.projectId); const storedEvent = await ctx.db.get(args.eventId); if (!storedEvent || storedEvent.projectId !== args.projectId) { throw new Error("Webhook event not found for project"); @@ -293,7 +294,11 @@ export async function applySubscriptionEventHandler( linkedExisting && existingByCurrentToken._id !== linkedExisting._id ) { + const accountErased = + existingByCurrentToken.accountErased === true || + linkedExisting.accountErased === true; if ( + !accountErased && existingByCurrentToken.userId && linkedExisting.userId && existingByCurrentToken.userId !== linkedExisting.userId @@ -311,6 +316,43 @@ export async function applySubscriptionEventHandler( survivor._id === existingByCurrentToken._id ? linkedExisting : existingByCurrentToken; + const invalidatedBinding = accountErased + ? [survivor, removed].find( + (sub) => + !sub.accountErased && + sub.userId && + sub.lastEventId && + isActive(sub, sub.updatedAt), + ) + : undefined; + if ( + invalidatedBinding?.userId && + !(await isUserErasureRequested(ctx, project, invalidatedBinding.userId)) + ) { + // Reconcile the prior grant without repeating a charge or an erased identity. + await emitCommerceEvent(ctx, { + projectId: args.projectId, + transition: null, + active: false, + previouslyActive: true, + sourceEvent: { + ...storedEvent, + currency: undefined, + priceAmountMicros: undefined, + amountProvenance: undefined, + }, + subscriptionId: invalidatedBinding._id, + subscription: { + state: invalidatedBinding.state, + productId: invalidatedBinding.productId, + expiresAt: invalidatedBinding.expiresAt, + renewsAt: invalidatedBinding.renewsAt, + willRenew: invalidatedBinding.willRenew, + cancellationReason: invalidatedBinding.cancellationReason, + userId: invalidatedBinding.userId, + }, + }); + } const removedPeriod = await fetchBillingPeriod( ctx, args.projectId, @@ -327,11 +369,13 @@ export async function applySubscriptionEventHandler( existing = { ...survivor, purchaseToken: storedEvent.purchaseToken, - userId: survivor.userId ?? removed.userId, + accountErased: accountErased || undefined, + userId: accountErased ? undefined : (survivor.userId ?? removed.userId), startedAt: Math.min(survivor.startedAt, removed.startedAt), }; await ctx.db.patch(survivor._id, { purchaseToken: existing.purchaseToken, + accountErased: existing.accountErased, userId: existing.userId, startedAt: existing.startedAt, updatedAt: now, @@ -345,11 +389,9 @@ export async function applySubscriptionEventHandler( }); } - // Captured before any transition so entitlement deltas are emitted from the - // pre-event gate, not the post-event one. A verification-only snapshot has - // not produced an outbound entitlement event yet. + // Compare with the last persisted gate; today's clock may already have expired it. const previouslyActive = priorStoreSnapshot - ? isActive(priorStoreSnapshot, now) + ? isActive(priorStoreSnapshot, priorStoreSnapshot.updatedAt) : false; const noOpResult = (): ApplySubscriptionEventResult => ({ transition: null, @@ -1275,7 +1317,8 @@ export async function rebindSubscriptionToUserHandler( if (!isValidSubscriptionUserId(args.userId)) { throw new ConvexError("userId must be nonblank and at most 256 characters"); } - await assertProjectWritable(ctx, args.projectId); + const project = await assertProjectWritable(ctx, args.projectId); + if (await isUserErasureRequested(ctx, project, args.userId)) return null; // Resolve exactly as `bind` does. An operator correcting a wrong binding // usually has the token the customer reported, which on Play may be the one // a replacement superseded. @@ -1287,7 +1330,13 @@ export async function rebindSubscriptionToUserHandler( const sub = supersedingResolution.aliased ? supersedingResolution.subscription : await findSubscriptionByToken(ctx, args.projectId, args.purchaseToken); - if (!sub) return null; + if (!sub || sub.accountErased) return null; + if ( + sub.userId && + sub.userId !== args.userId && + (await isUserErasureRequested(ctx, project, sub.userId)) + ) + return null; if (sub.userId === args.userId) { return { subscriptionId: sub._id, notified: true }; } @@ -1350,7 +1399,8 @@ export async function bindSubscriptionToUserHandler( if (!isValidSubscriptionUserId(args.userId)) { throw new ConvexError("userId must be nonblank and at most 256 characters"); } - await assertProjectWritable(ctx, args.projectId); + const project = await assertProjectWritable(ctx, args.projectId); + if (await isUserErasureRequested(ctx, project, args.userId)) return null; const supersedingResolution = await findSupersedingSubscription( ctx, args.projectId, @@ -1359,7 +1409,7 @@ export async function bindSubscriptionToUserHandler( const sub = supersedingResolution.aliased ? supersedingResolution.subscription : await findSubscriptionByToken(ctx, args.projectId, args.purchaseToken); - if (!sub) return null; + if (!sub || sub.accountErased) return null; if (sub.userId === args.userId) return sub._id; if (sub.userId) { // Reported the same as an unknown token. A distinct error would tell any @@ -1457,7 +1507,7 @@ export async function drainSubscriptionUserErasurePage( const now = Date.now(); await ctx.db.patch(jobId, { status: "running", updatedAt: now }); - const [subscriptions, commerceEvents] = await Promise.all([ + const [subscriptions, commerceEvents, purchases] = await Promise.all([ ctx.db .query("subscriptions") .withIndex("by_project_and_user", (q) => @@ -1470,10 +1520,25 @@ export async function drainSubscriptionUserErasurePage( q.eq("projectId", job.projectId).eq("userId", job.userId), ) .take(USER_ERASURE_BATCH_SIZE), + ctx.db + .query("purchases") + .withIndex("by_project_and_app_user", (q) => + q.eq("projectId", job.projectId).eq("appUserId", job.userId), + ) + .take(USER_ERASURE_BATCH_SIZE), ]); for (const subscription of subscriptions) { - await ctx.db.patch(subscription._id, { userId: undefined }); + await ctx.db.patch(subscription._id, { + userId: undefined, + accountErased: true, + }); + } + for (const purchase of purchases) { + await ctx.db.patch(purchase._id, { + appUserId: undefined, + accountErased: true, + }); } let commerceEventsErasedThisPage = 0; let waitingForClaimedDelivery = false; @@ -1501,6 +1566,7 @@ export async function drainSubscriptionUserErasurePage( const done = !waitingForClaimedDelivery && subscriptions.length < USER_ERASURE_BATCH_SIZE && + purchases.length < USER_ERASURE_BATCH_SIZE && commerceEvents.length < USER_ERASURE_BATCH_SIZE; if (done) { diff --git a/packages/kit/convex/subscriptions/user-erasure.test.ts b/packages/kit/convex/subscriptions/user-erasure.test.ts index 17ae32441..4eba43568 100644 --- a/packages/kit/convex/subscriptions/user-erasure.test.ts +++ b/packages/kit/convex/subscriptions/user-erasure.test.ts @@ -105,6 +105,15 @@ describe("subscription user erasure", () => { })), { _id: "subscriptions_other", projectId, userId: "other-user" }, ], + purchases: [ + ...Array.from({ length: 101 }, (_, index) => ({ + _id: `purchases_${index}`, + projectId, + appUserId: userId, + store: index % 2 ? "amazon" : "horizon", + })), + { _id: "purchases_other", projectId, appUserId: "other-user" }, + ], commerceEvents: [ ...Array.from({ length: 101 }, (_, index) => ({ _id: `commerceEvents_${index}`, @@ -158,6 +167,15 @@ describe("subscription user erasure", () => { expect( db.tables.commerceEvents.filter((row) => row.userId === userId), ).toEqual([]); + expect( + db.tables.purchases.filter((row) => row.appUserId === userId), + ).toEqual([]); + expect( + db.tables.purchases + .slice(0, 101) + .every((row) => row.accountErased === true), + ).toBe(true); + expect(db.tables.purchases.at(-1)?.appUserId).toBe("other-user"); expect(db.tables.subscriptions.at(-1)?.userId).toBe("other-user"); expect(db.tables.commerceEvents.at(-1)?.userId).toBe("other-user"); expect(db.tables.commerceEvents.map((row) => row._id)).not.toContain( diff --git a/packages/kit/scripts/docs/commerce-interop-fixture.ts b/packages/kit/scripts/docs/commerce-interop-fixture.ts new file mode 100644 index 000000000..cff3765a2 --- /dev/null +++ b/packages/kit/scripts/docs/commerce-interop-fixture.ts @@ -0,0 +1,132 @@ +import { + internalMutation, + internalQuery, + internalAction, +} from "./_generated/server"; +import { internal } from "./_generated/api"; +import { v } from "convex/values"; +import { apiKeyStorageFields } from "./apiKeys/helpers"; + +export const seed = internalMutation({ + args: { + secret: v.string(), + key: v.string(), + publishable: v.string(), + storageId: v.id("_storage"), + }, + handler: async (ctx, args) => { + const now = Date.now(); + const userId = await ctx.db.insert("users", {}); + const organizationId = await ctx.db.insert("organizations", { + name: "Local interop", + slug: crypto.randomUUID(), + createdAt: now, + updatedAt: now, + }); + const projectId = await ctx.db.insert("projects", { + organizationId, + name: "Local interop", + slug: crypto.randomUUID(), + apiKey: "disabled", + legacyApiKeyFallbackDisabledAt: now, + androidPackageName: "dev.openiap.interop", + iosBundleId: "dev.openiap.interop", + iosAppAppleId: 123456789, + iosAppStoreIssuerId: "local-issuer", + iosAppStoreKeyId: "local-key", + horizonEnabled: true, + horizonAppId: "1234567890", + horizonAppSecret: "local-fixture-secret", + amazonSandboxEnabled: true, + amazonSharedSecret: "local-fixture-secret", + createdAt: now, + updatedAt: now, + }); + for (const [key, keyType] of [ + [args.key, "secret"], + [args.publishable, "publishable"], + ] as const) + await ctx.db.insert("apiKeys", { + organizationId, + projectId, + ...(await apiKeyStorageFields(key, keyType)), + name: "Local fixture", + keyType, + isActive: true, + createdBy: userId, + createdAt: now, + updatedAt: now, + }); + const fileId = await ctx.db.insert("files", { + organizationId, + projectId, + uploadedBy: userId, + storageId: args.storageId, + fileName: "local-fixture.json", + fileType: "application/json", + fileSize: 0, + purpose: "android_service_account", + isInternal: true, + createdAt: now, + updatedAt: now, + }); + await ctx.db.patch(projectId, { googlePlayServiceAccountFileId: fileId }); + await ctx.db.insert("outboundDestinations", { + projectId, + url: "https://receiver.example.com/commerce", + secret: args.secret, + enabled: true, + createdAt: now, + updatedAt: now, + }); + return { projectId }; + }, +}); +export const setup = internalAction({ + args: { secret: v.string(), key: v.string(), publishable: v.string() }, + handler: async (ctx, args) => { + const storageId = await ctx.storage.store( + new Blob( + [ + JSON.stringify({ + type: "service_account", + project_id: "local-fixture", + private_key: + "-----BEGIN PRIVATE KEY-----\nfixture only\n-----END PRIVATE KEY-----", + client_email: "fixture@local-test.iam.gserviceaccount.com", + }), + ], + { type: "application/json" }, + ), + ); + return ctx.runMutation(internal.interopFixture.seed, { + ...args, + storageId, + }); + }, +}); +export const inspect = internalQuery({ + args: { projectId: v.id("projects") }, + handler: async (ctx, { projectId }) => ({ + purchases: await ctx.db + .query("purchases") + .withIndex("by_project", (q) => q.eq("projectId", projectId)) + .collect(), + subscriptions: await ctx.db + .query("subscriptions") + .withIndex("by_project", (q) => q.eq("projectId", projectId)) + .collect(), + events: await ctx.db + .query("commerceEvents") + .withIndex("by_project", (q) => q.eq("projectId", projectId)) + .collect(), + jobs: await ctx.db + .query("subscriptionUserErasureJobs") + .withIndex("by_project", (q) => q.eq("projectId", projectId)) + .collect(), + deliveries: await ctx.db + .query("outboundDeliveries") + .withIndex("by_project", (q) => q.eq("projectId", projectId)) + .collect(), + }), +}); diff --git a/packages/kit/scripts/docs/commerce-interop.md b/packages/kit/scripts/docs/commerce-interop.md new file mode 100644 index 000000000..699bd12c6 --- /dev/null +++ b/packages/kit/scripts/docs/commerce-interop.md @@ -0,0 +1,75 @@ +# Replace the example with IAPKit + +This check keeps one application backend and one event receiver alive while it +switches from `openiap-commerce-protocol-example` to IAPKit and back. It covers +verification, binding, paid cancellation, expiry, signed delivery, retries, +process restart, and account erasure. The same command also compares Apple, +Amazon and Horizon verification, binding, access and erasure, with negative +rechecks and upstream failures for Amazon/Horizon. It fails on a changed access result or +consumer source file. + +From the OpenIAP checkout, with the example checkout beside it: + +```sh +bun install --frozen-lockfile +(cd ../openiap-commerce-protocol-example && npm ci --ignore-scripts) +bun --conditions=openiap-source packages/kit/scripts/docs/run-commerce-interop.mjs \ + ../openiap-commerce-protocol-example +``` + +Tested with Bun 1.3.13 and Node.js 24. The first run downloads the pinned Convex +backend `precompiled-2026-08-25-7cce8fb`. Allow about a minute after setup: the +retry delay and paid expiry use the real clock. Pass a second argument to +choose a **new** output directory. The command prints its report path. + +No credentials or environment variables are required. The runner discards +inherited Convex deployment settings and provisions a separate anonymous local +deployment. It copies IAPKit's functions into that directory; it never pushes +the fixture module into the working checkout or a cloud deployment. API and +signing keys are generated for the run. Keep the local deployment directory +private; publish only the report and source snapshots. + +Both providers use the same receiver URL and inbox. Each signing key is bound +to its provider and project; deduplication includes that identity so equal +event IDs from different providers do not suppress each other. + +## What runs + +- The original example provider, client, app backend and signed-event receiver. +- IAPKit's Hono routes, shared handlers, Apple/Google/Amazon/Horizon verification and Google RTDN action + bodies, and real Convex authorization, storage and subscription mutations. +- The real IAPKit delivery claim, signature, result and retry code. The Convex + process is stopped and restarted while a failed delivery remains pending. +- Account erasure in both providers, the IAPKit background deletion job, and + erasure of the app's delivered copies. Deleted sessions cannot submit new + purchases; signed late deliveries cannot reintroduce erased identities. + +The Google API/OIDC, Amazon RVS, Meta Graph, and Apple Server API/signature +verification boundaries return fixture responses. Apple signing-key loading +uses a test-only fixture. Node action +bodies execute under Bun with calls to the isolated Convex database. The +outbound worker's existing transport injection sends to the same loopback +receiver. The fixture-only `interopFixture` module creates project configuration +and inspects stored rows; commerce behavior stays in IAPKit's existing functions. +Unrelated image processing and maintenance cron entry points are omitted from +the disposable deployment. + +This is provider replacement at the application contract, with the same +fictional purchase set up in both providers. It does not migrate a customer +database, make a store purchase, validate store signatures or OIDC against their services, or test +public HTTPS DNS/TLS. Those are separate deployment checks. + +## Keep documentation evidence current + +```sh +bun --conditions=openiap-source packages/kit/scripts/docs/export-commerce-interop.mjs \ + ../openiap-commerce-protocol-example +``` + +The exporter rejects changed executed source. It produces the report and +readable source snapshots used by the purchase guide. The docs build checks +that recorded results, source hashes and available IAPKit source still match. + +The first real run exposed a missing `entitlement.revoked` when the clock passed +expiry before RTDN arrived. `convex/subscriptions/internal.test.ts` now checks +that delayed expiry, including cancellation arriving first, revokes once. diff --git a/packages/kit/scripts/docs/commerce-source-snapshot.mjs b/packages/kit/scripts/docs/commerce-source-snapshot.mjs new file mode 100644 index 000000000..a7964349a --- /dev/null +++ b/packages/kit/scripts/docs/commerce-source-snapshot.mjs @@ -0,0 +1,61 @@ +import assert from "node:assert/strict"; +import { createHash } from "node:crypto"; +import { existsSync, mkdirSync, readFileSync, writeFileSync } from "node:fs"; +import { dirname, join } from "node:path"; + +const hash = (bytes) => createHash("sha256").update(bytes).digest("hex"); + +export function assertSourceHashes(root, hashes, { allowMissing = [] } = {}) { + assert( + hashes && Object.keys(hashes).length > 0, + `Missing source fingerprints: ${root}`, + ); + assert( + allowMissing.every( + (name) => /(^|\/)_?generated\//.test(name) && Object.hasOwn(hashes, name), + ), + "Only recorded generated inputs may be absent", + ); + const missing = []; + for (const [name, expected] of Object.entries(hashes)) { + const path = join(root, name); + if (allowMissing.includes(name) && !existsSync(path)) { + missing.push(name); + continue; + } + assert.equal( + hash(readFileSync(path)), + expected, + `Source input changed during execution or since recording: ${name}`, + ); + } + return missing; +} + +export function pinSources(root, files) { + const names = () => [...new Set(files())].sort(); + const contents = new Map( + names().map((name) => [name, readFileSync(join(root, name))]), + ); + const hashes = Object.freeze( + Object.fromEntries( + [...contents].map(([name, bytes]) => [name, hash(bytes)]), + ), + ); + return { + hashes, + write(name, target) { + assert(contents.has(name), `Source was not pinned: ${name}`); + mkdirSync(dirname(target), { recursive: true }); + writeFileSync(target, contents.get(name)); + }, + assertUnchanged() { + assert.deepEqual( + names(), + Object.keys(hashes), + `Source input inventory changed during execution: ${root}`, + ); + assertSourceHashes(root, hashes); + }, + }; +} diff --git a/packages/kit/scripts/docs/commerce-source-snapshot.test.mjs b/packages/kit/scripts/docs/commerce-source-snapshot.test.mjs new file mode 100644 index 000000000..d1d6bafb0 --- /dev/null +++ b/packages/kit/scripts/docs/commerce-source-snapshot.test.mjs @@ -0,0 +1,140 @@ +import { expect, test } from "vitest"; +import { createHash } from "node:crypto"; +import { + mkdtempSync, + mkdirSync, + readFileSync, + readdirSync, + rmSync, + writeFileSync, +} from "node:fs"; +import { tmpdir } from "node:os"; +import { dirname, join } from "node:path"; +import { pathToFileURL } from "node:url"; +import { assertSourceHashes, pinSources } from "./commerce-source-snapshot.mjs"; + +test("unchanged execution and copied source retain the initial fingerprints", async () => { + const directory = mkdtempSync(join(tmpdir(), "commerce-source-test-")); + try { + writeFileSync( + join(directory, "provider.mjs"), + "export default () => 42;\n", + ); + const pinned = pinSources(directory, () => ["provider.mjs"]); + const copied = join(directory, "deployment/provider.mjs"); + pinned.write("provider.mjs", copied); + const { default: execute } = await import(pathToFileURL(copied).href); + expect(execute()).toBe(42); + expect(() => pinned.assertUnchanged()).not.toThrow(); + expect(pinned.hashes["provider.mjs"]).toBe( + createHash("sha256").update(readFileSync(copied)).digest("hex"), + ); + } finally { + rmSync(directory, { recursive: true, force: true }); + } +}); + +test.each(["provider.mjs", "harness.mjs"])( + "%s changing after execution cannot certify a report for its new bytes", + async (name) => { + const directory = mkdtempSync(join(tmpdir(), "commerce-source-test-")); + try { + const source = join(directory, name); + writeFileSync(source, "export default () => 42;\n"); + const pinned = pinSources(directory, () => [name]); + const { default: execute } = await import(pathToFileURL(source).href); + expect(execute()).toBe(42); + writeFileSync(source, "export default () => 0;\n"); + const copied = join(directory, "deployment", name); + pinned.write(name, copied); + expect(readFileSync(copied, "utf8")).toBe("export default () => 42;\n"); + expect(() => pinned.assertUnchanged()).toThrow( + `Source input changed during execution or since recording: ${name}`, + ); + } finally { + rmSync(directory, { recursive: true, force: true }); + } + }, +); + +test.each([ + "convex/purchases/unexported-handler.ts", + "specs/commerce-protocol/generated/schema.json", +])("export and build guards reject changed recorded input %s", (name) => { + const directory = mkdtempSync(join(tmpdir(), "commerce-source-test-")); + try { + const source = join(directory, name); + mkdirSync(dirname(source), { recursive: true }); + writeFileSync(source, "original source\n"); + const report = pinSources(directory, () => [name]).hashes; + expect(() => assertSourceHashes(directory, report)).not.toThrow(); + writeFileSync(source, "changed source\n"); + expect(() => assertSourceHashes(directory, report)).toThrow(name); + } finally { + rmSync(directory, { recursive: true, force: true }); + } +}); + +test("CI may omit recorded optional generated inputs but cannot change or omit required source", () => { + const directory = mkdtempSync(join(tmpdir(), "commerce-source-test-")); + try { + const generated = "_generated/optional.js"; + mkdirSync(join(directory, "_generated")); + writeFileSync(join(directory, generated), "generated source\n"); + writeFileSync(join(directory, "provider.mjs"), "provider source\n"); + const report = pinSources(directory, () => [ + generated, + "provider.mjs", + ]).hashes; + rmSync(join(directory, generated)); + expect(() => assertSourceHashes(directory, report)).toThrow(); + expect( + assertSourceHashes(directory, report, { allowMissing: [generated] }), + ).toEqual([generated]); + writeFileSync(join(directory, generated), "changed generated source\n"); + expect(() => + assertSourceHashes(directory, report, { allowMissing: [generated] }), + ).toThrow(generated); + rmSync(join(directory, generated)); + rmSync(join(directory, "provider.mjs")); + expect(() => + assertSourceHashes(directory, report, { allowMissing: [generated] }), + ).toThrow(); + expect(() => + assertSourceHashes(directory, report, { allowMissing: ["provider.mjs"] }), + ).toThrow("Only recorded generated inputs may be absent"); + } finally { + rmSync(directory, { recursive: true, force: true }); + } +}); + +test("missing recorded fingerprints cannot silently skip a source group", () => { + expect(() => assertSourceHashes("unused", undefined)).toThrow( + "Missing source fingerprints", + ); + expect(() => assertSourceHashes("unused", {})).toThrow( + "Missing source fingerprints", + ); +}); + +test.each(["addition", "removal"])( + "a source file %s invalidates the pinned input inventory", + (change) => { + const directory = mkdtempSync(join(tmpdir(), "commerce-source-test-")); + try { + writeFileSync(join(directory, "provider.mjs"), "export default 42;\n"); + const pinned = pinSources(directory, () => readdirSync(directory)); + if (change === "addition") + writeFileSync( + join(directory, "new-handler.mjs"), + "export default 0;\n", + ); + else rmSync(join(directory, "provider.mjs")); + expect(() => pinned.assertUnchanged()).toThrow( + "Source input inventory changed during execution", + ); + } finally { + rmSync(directory, { recursive: true, force: true }); + } + }, +); diff --git a/packages/kit/scripts/docs/commerce-store-coverage.mjs b/packages/kit/scripts/docs/commerce-store-coverage.mjs new file mode 100644 index 000000000..b4afc1382 --- /dev/null +++ b/packages/kit/scripts/docs/commerce-store-coverage.mjs @@ -0,0 +1,277 @@ +import assert from "node:assert/strict"; +import { join } from "node:path"; + +// Invoked only inside run-commerce-interop's isolated deployment. +export async function runStoreCoverage({ + example, + output, + key, + kitUrl, + receiver, + appleJws, + storeState, + inspect, + check, + trace, +}) { + const { createProvider, CREDENTIALS } = await import( + join(example, "provider.mjs") + ); + const { createCommerceClient } = await import( + join(example, "composition/commerce-client.mjs") + ); + const { startAppBackend } = await import( + join(example, "composition/app-backend.mjs") + ); + const kit = createCommerceClient({ + baseUrl: kitUrl, + credential: `Bearer ${key}`, + }); + let sqlite; + const providerServer = Bun.serve({ + hostname: "127.0.0.1", + port: 0, + fetch: (request) => sqlite.fetch(request), + }); + const exampleUrl = `http://127.0.0.1:${providerServer.port}`; + const fixtureClient = createCommerceClient({ + baseUrl: exampleUrl, + credential: CREDENTIALS.server, + }); + const app = startAppBackend({ + path: join(output, "all-stores-app.sqlite"), + receiver, + providers: { + example: { baseUrl: exampleUrl, credential: CREDENTIALS.server }, + iapkit: { baseUrl: kitUrl, credential: `Bearer ${key}` }, + }, + resolveSession: (request) => + request.headers.get("authorization")?.replace("Bearer ", ""), + resolveStoreUser: (request, store) => + request.headers.get("authorization") === `Bearer store_${store}` + ? `store-user-${store}` + : null, + }); + const endpoints = [app.url, receiver.url]; + const results = {}; + async function request( + store, + path, + method = "GET", + input, + session = `store_${store}`, + ) { + const response = await fetch(app.url + path, { + method, + headers: { + authorization: `Bearer ${session}`, + "content-type": "application/json", + }, + ...(input ? { body: JSON.stringify(input) } : {}), + }); + const result = await response.json().catch(() => null); + trace.push({ store, path, method, status: response.status, result }); + return { status: response.status, result }; + } + try { + for (const store of ["apple", "amazon", "horizon"]) { + const input = + store === "apple" + ? { store, apple: { jws: appleJws } } + : store === "amazon" + ? { + store, + amazon: { + userId: "store-user-amazon", + receiptId: "local-amazon-receipt", + sandbox: true, + }, + } + : { + store, + horizon: { + userId: "store-user-horizon", + sku: "premium.monthly", + }, + }; + const userId = `store_${store}`; + const evidence = + store === "apple" + ? appleJws + : store === "amazon" + ? JSON.stringify([ + input.amazon.userId, + input.amazon.receiptId, + true, + ]) + : JSON.stringify([input.horizon.userId, input.horizon.sku]); + const fixture = { + store, + evidence, + userId, + productId: "premium.monthly", + startsAt: Date.now(), + expiresAt: Date.now() + 3600000, + pointInTime: store !== "apple", + currentVerdict: () => storeState[store], + }; + sqlite = createProvider( + join(output, `store-${store}.sqlite`), + Date.now, + fixture, + ); + results[store] = {}; + for (const [name, client] of [ + ["example", fixtureClient], + ["iapkit", kit], + ]) { + app.select(name); + check( + `${store}/${name}: keeps the same app and receiver`, + [app.url, receiver.url], + endpoints, + ); + const before = await client.call("entitlements", { userId }); + check(`${store}/${name}: starts without access`, before.productIds, []); + check( + `${store}/${name}: unverified evidence cannot bind`, + (await client.call("bindPurchase", { ...input, userId })).bound, + false, + ); + const verified = await client.call("verifyPurchase", input); + check( + `${store}/${name}: verifies the store-specific input`, + verified.isValid, + true, + ); + check( + `${store}/${name}: verification alone grants no account access`, + (await client.call("entitlements", { userId })).productIds, + [], + ); + const bought = await request(store, "/purchase", "POST", input); + check(`${store}/${name}: app purchase succeeds`, bought.status, 200); + check( + `${store}/${name}: app receives access`, + bought.result?.productIds, + ["premium.monthly"], + ); + check( + `${store}/${name}: binding is repeatable`, + (await client.call("bindPurchase", { ...input, userId })).bound, + true, + ); + check( + `${store}/${name}: another account cannot claim the purchase`, + (await client.call("bindPurchase", { ...input, userId: "store_bob" })) + .bound, + false, + ); + const access = await client.call("entitlements", { userId }); + check( + `${store}/${name}: access includes only verified products`, + access.productIds, + ["premium.monthly"], + ); + check( + `${store}/${name}: tokenless access does not leak store evidence`, + JSON.stringify(access).includes("store-user-") || + JSON.stringify(access).includes("local-amazon-receipt"), + false, + ); + if (store !== "apple") { + check( + `${store}/${name}: does not invent subscription lifecycle records`, + access.subscriptions, + [], + ); + const forged = { + store, + [store]: { ...input[store], userId: "someone-else" }, + }; + check( + `${store}/${name}: rejects another store account in the app session`, + (await request(store, "/purchase", "POST", forged)).status, + 403, + ); + storeState[store] = "outage"; + check( + `${store}/${name}: an upstream outage fails the access read`, + (await request(store, "/access")).status, + 503, + ); + storeState[store] = false; + check( + `${store}/${name}: a negative store recheck removes access`, + (await client.call("entitlements", { userId })).productIds, + [], + ); + storeState[store] = true; + check( + `${store}/${name}: rechecked ownership restores access`, + (await client.call("entitlements", { userId })).productIds, + ["premium.monthly"], + ); + } + results[store][name] = { + verified: verified.isValid, + productIds: access.productIds, + subscriptions: access.subscriptions.length, + storeRecheck: store !== "apple", + }; + } + app.select("example"); + check( + `${store}: switching back needs no consumer edit`, + (await request(store, "/access")).result.productIds, + ["premium.monthly"], + ); + const deleted = await request(store, "/account", "DELETE"); + check( + `${store}: the app accepts account erasure`, + deleted.result?.accepted, + true, + ); + let pending = 1; + for (let attempt = 0; attempt < 100 && pending; attempt++) { + pending = await app.drainErasure(); + if (pending) await Bun.sleep(100); + } + check(`${store}: both providers complete erasure`, pending, 0); + for (const [name, client] of [ + ["example", fixtureClient], + ["iapkit", kit], + ]) { + check( + `${store}/${name}: erased account has no access`, + (await client.call("entitlements", { userId })).productIds, + [], + ); + check( + `${store}/${name}: erased evidence cannot bind again`, + (await client.call("bindPurchase", { ...input, userId })).bound, + false, + ); + } + check( + `${store}: an erased session cannot submit another purchase`, + (await request(store, "/purchase", "POST", input)).status, + 401, + ); + const state = await inspect(); + check( + `${store}: IAPKit removes account identity from persisted purchases`, + state.purchases.some((row) => row.appUserId === userId), + false, + ); + sqlite.close(); + sqlite = null; + } + assert.equal(Object.keys(results).length, 3); + return results; + } finally { + await app.close(); + await providerServer.stop(true); + sqlite?.close(); + } +} diff --git a/packages/kit/scripts/docs/export-commerce-interop.mjs b/packages/kit/scripts/docs/export-commerce-interop.mjs new file mode 100644 index 000000000..4f047d2f4 --- /dev/null +++ b/packages/kit/scripts/docs/export-commerce-interop.mjs @@ -0,0 +1,98 @@ +import assert from "node:assert/strict"; +import { readFileSync, writeFileSync, mkdirSync, cpSync } from "node:fs"; +import { join, resolve, dirname } from "node:path"; +import { createHash } from "node:crypto"; +import { COMMERCE_IMPLEMENTATION_TOPICS } from "../../../docs/src/lib/commerceImplementations.ts"; +import { assertSourceHashes } from "./commerce-source-snapshot.mjs"; + +const kit = resolve(import.meta.dir, "../.."); +const [run, exampleArg] = process.argv.slice(2); +assert( + run && exampleArg, + "Usage: bun export-commerce-interop.mjs ", +); +const example = resolve(exampleArg), + docs = resolve(kit, "../docs/public"); +const report = JSON.parse(readFileSync(join(run, "report.json"), "utf8")); +const hash = (text) => createHash("sha256").update(text).digest("hex"); +const escape = (text) => + text + .replaceAll("&", "&") + .replaceAll("<", "<") + .replaceAll(">", ">") + .replaceAll('"', """); +assert.equal(report.checkCount, report.checks.length); +assert.deepEqual(report.changedConsumerFiles, []); +for (const [project, root] of [ + ["openiap", kit], + ["example", example], + ["workspace", resolve(kit, "../..")], +]) + assertSourceHashes(root, report.sources[project]?.hashes); +assertSourceHashes(import.meta.dir, report.harnessHashes); +const sources = {}; +for (const [project, root] of [ + ["example", example], + ["kit", kit], +]) { + const files = new Set( + Object.values(COMMERCE_IMPLEMENTATION_TOPICS).flatMap((topic) => [ + topic[project].file, + topic[project].checkFile, + ]), + ); + if (project === "example") + for (const file of Object.keys(report.consumerHashes)) files.add(file); + else + for (const file of Object.keys(report.harnessHashes)) + files.add(`scripts/docs/${file}`); + for (const file of files) { + const source = readFileSync(join(root, file), "utf8"); + const expected = + project === "kit" && file.startsWith("scripts/docs/") + ? report.harnessHashes[file.slice("scripts/docs/".length)] + : report.sources[project === "kit" ? "openiap" : "example"].hashes[ + file + ]; + assert(expected, `${project}/${file}: source was not pinned for this run`); + assert.equal( + hash(source), + expected, + `${project}/${file}: changed after the recorded run`, + ); + sources[`${project}/${file}`] = source; + const target = join(docs, "commerce-source", project, file + ".html"); + mkdirSync(dirname(target), { recursive: true }); + const title = `${project === "kit" ? "IAPKit" : "Commerce Protocol Example"} · ${file}`; + writeFileSync( + target, + `${escape(title)}

    ← Provider replacement walkthrough

    ${escape(title)}

    Source snapshot · ${escape(report.recordedAt.slice(0, 10))}

    SHA-256 ${hash(source)}
    ${source
    +        .split("\n")
    +        .map(
    +          (line, index) =>
    +            `${index + 1}${escape(line) || " "}`,
    +        )
    +        .join("")}
    `, + ); + } +} +const assets = join(docs, "commerce-composition"); +mkdirSync(assets, { recursive: true }); +cpSync(join(run, "report.json"), join(assets, "iapkit-run.json")); +writeFileSync( + join(assets, "iapkit-source.json"), + JSON.stringify(sources, null, 2) + "\n", +); +writeFileSync( + join(assets, "iapkit-source-manifest.json"), + JSON.stringify( + Object.fromEntries( + Object.entries(sources).map(([file, source]) => [file, hash(source)]), + ), + null, + 2, + ) + "\n", +); +console.log( + `Exported ${report.checkCount} checks and ${Object.keys(sources).length} readable source snapshots.`, +); diff --git a/packages/kit/scripts/docs/run-commerce-interop.mjs b/packages/kit/scripts/docs/run-commerce-interop.mjs new file mode 100644 index 000000000..7a66832e9 --- /dev/null +++ b/packages/kit/scripts/docs/run-commerce-interop.mjs @@ -0,0 +1,872 @@ +import assert from "node:assert/strict"; +import { mock } from "bun:test"; +import { + existsSync, + mkdirSync, + mkdtempSync, + readFileSync, + rmSync, + writeFileSync, + symlinkSync, +} from "node:fs"; +import { tmpdir } from "node:os"; +import { join, resolve } from "node:path"; +import { createHash, randomBytes } from "node:crypto"; +import { ConvexHttpClient } from "convex/browser"; +import { anyApi, getFunctionName } from "convex/server"; +import { Hono } from "hono"; +import { pinSources } from "./commerce-source-snapshot.mjs"; + +const kit = resolve(import.meta.dir, "../.."); +const repo = resolve(kit, "../.."); +const example = resolve( + process.argv[2] ?? join(repo, "../openiap-commerce-protocol-example"), +); +const revision = (cwd) => { + const result = Bun.spawnSync(["git", "rev-parse", "HEAD"], { cwd }); + assert.equal(result.exitCode, 0, "Cannot identify source revision"); + return result.stdout.toString().trim(); +}; +const revisions = { openiap: revision(repo), example: revision(example) }; +const unchangedFiles = [ + "composition/app-backend.mjs", + "composition/commerce-client.mjs", + "consumer.mjs", + "webhooks.mjs", + "erasure.mjs", + "contract.mjs", +]; +const inputs = { + openiap: pinSources(kit, () => [ + ...new Bun.Glob("{server,convex}/**/*.{ts,js,json}").scanSync({ cwd: kit }), + "src/convex.ts", + "convex.json", + "tsconfig.json", + "package.json", + ]), + example: pinSources(example, () => [ + ...unchangedFiles, + ...new Bun.Glob("*.mjs").scanSync({ cwd: example }), + ...new Bun.Glob("composition/**/*.mjs").scanSync({ cwd: example }), + "README.md", + "package.json", + "package-lock.json", + ]), + harness: pinSources(import.meta.dir, () => [ + "run-commerce-interop.mjs", + "commerce-interop-fixture.ts", + "commerce-store-coverage.mjs", + "commerce-source-snapshot.mjs", + ]), + workspace: pinSources(repo, () => [ + "bun.lock", + "package.json", + "packages/mcp-server/package.json", + "packages/mcp-server/src/kit-client.ts", + "specs/commerce-protocol/package.json", + ...new Bun.Glob( + "specs/commerce-protocol/{src,generated,examples}/**/*.{mjs,js,json}", + ).scanSync({ cwd: repo }), + ]), +}; +const before = Object.fromEntries( + unchangedFiles.map((name) => [name, inputs.example.hashes[name]]), +); +function optionalGeneratedFiles(root, hashes) { + const result = Bun.spawnSync(["git", "check-ignore", "--stdin"], { + cwd: root, + stdin: Buffer.from(Object.keys(hashes).join("\n") + "\n"), + }); + assert([0, 1].includes(result.exitCode), "Cannot identify generated inputs"); + return result.stdout + .toString() + .trim() + .split("\n") + .filter((name) => /(^|\/)_?generated\//.test(name)); +} +const optionalInputs = { + openiap: optionalGeneratedFiles(kit, inputs.openiap.hashes), + workspace: optionalGeneratedFiles(repo, inputs.workspace.hashes), +}; +const output = resolve( + process.argv[3] ?? mkdtempSync(join(tmpdir(), "commerce-interop-")), +); +const deployment = join(output, "local-convex"); +mkdirSync(deployment, { recursive: true }); +assert( + !existsSync(join(deployment, ".env.local")), + "Use a new output directory; a run must start empty.", +); +// Unrelated image processing and maintenance entry points stay out of the isolated deployment. +for (const name of Object.keys(inputs.openiap.hashes)) + if ( + (name.startsWith("convex/") || + ["convex.json", "tsconfig.json"].includes(name)) && + !["convex/crons.ts", "convex/files/action.ts"].includes(name) + ) + inputs.openiap.write(name, join(deployment, name)); +inputs.harness.write( + "commerce-interop-fixture.ts", + join(deployment, "convex/interopFixture.ts"), +); +symlinkSync(join(kit, "node_modules"), join(deployment, "node_modules"), "dir"); +writeFileSync( + join(deployment, "package.json"), + JSON.stringify({ + name: "commerce-interop-local", + type: "module", + dependencies: { convex: "1.44.0" }, + }), +); +const env = { ...process.env }; +for (const key of Object.keys(env)) + if ( + key.startsWith("CONVEX_") || + key.startsWith("VITE_KIT_CONVEX_") || + key === "VITE_CONVEX_URL" + ) + delete env[key]; +env.CONVEX_AGENT_MODE = "anonymous"; +const logPath = join(output, "convex.log"); +let convexProcess; +async function boot() { + writeFileSync(logPath, ""); + convexProcess = Bun.spawn( + [ + process.execPath, + join(kit, "node_modules/convex/bin/main.js"), + "dev", + "--typecheck", + "disable", + "--codegen", + "disable", + "--tail-logs", + "disable", + "--local-backend-version", + "precompiled-2026-08-25-7cce8fb", + ], + { + cwd: deployment, + env, + stdout: Bun.file(logPath), + stderr: Bun.file(logPath), + }, + ); + for (let i = 0; i < 600; i++) { + if (readFileSync(logPath, "utf8").includes("Convex functions ready!")) + return; + if (convexProcess.exitCode !== null) + throw new Error(`Local Convex exited; inspect ${logPath}`); + await Bun.sleep(250); + } + throw new Error(`Local Convex did not become ready; inspect ${logPath}`); +} +async function stop() { + if (convexProcess) { + convexProcess.kill("SIGINT"); + await convexProcess.exited; + } +} +const checks = [], + trace = [], + results = { + example: { label: "openiap-commerce-protocol-example" }, + iapkit: { label: "IAPKit" }, + }; +function check(label, actual, expected) { + assert.deepEqual(actual, expected, label); + checks.push(label); + console.log(`PASS ${label}`); +} +const hash = (path) => + createHash("sha256").update(readFileSync(path)).digest("hex"); +let appServer, receiver, sqlite, sqliteServer, kitServer; +try { + await boot(); + const config = JSON.parse( + readFileSync(join(deployment, ".convex/local/default/config.json"), "utf8"), + ); + const convexUrl = `http://127.0.0.1:${config.ports.cloud}`; + assert.equal(new URL(convexUrl).hostname, "127.0.0.1"); + process.env.VITE_KIT_CONVEX_URL = convexUrl; + const admin = new ConvexHttpClient(convexUrl); + admin.setAdminAuth(config.adminKey); + const ctx = { + runQuery: admin.query.bind(admin), + runMutation: admin.mutation.bind(admin), + runAction: admin.action.bind(admin), + }; + const secret = randomBytes(32).toString("hex"); + const exampleSecret = randomBytes(32).toString("hex"); + const key = "openiap-kit_sk_" + randomBytes(24).toString("hex"), + publishable = "openiap-kit_pk_" + randomBytes(24).toString("hex"); + const seeded = await admin.action(anyApi.interopFixture.setup, { + secret, + key, + publishable, + }); + const startedAt = Date.now(), + expiresAt = startedAt + 45000, + token = "local-interop-google-token", + userId = "interop_alice", + productId = "premium.monthly"; + let googleState = "SUBSCRIPTION_STATE_ACTIVE"; + mock.module("googleapis", () => ({ + google: { + auth: { GoogleAuth: class {} }, + androidpublisher: () => ({ + purchases: { + productsv2: { + getproductpurchasev2: async () => { + throw { code: 404 }; + }, + }, + subscriptionsv2: { + get: async ({ token: received }) => { + if (received !== token) throw { code: 404 }; + return { + data: { + subscriptionState: googleState, + startTime: new Date(startedAt - 60000).toISOString(), + acknowledgementState: "ACKNOWLEDGEMENT_STATE_ACKNOWLEDGED", + latestOrderId: "GPA.local-fixture", + testPurchase: {}, + lineItems: [ + { + productId, + expiryTime: new Date(expiresAt).toISOString(), + autoRenewingPlan: { + autoRenewEnabled: + googleState === "SUBSCRIPTION_STATE_ACTIVE", + recurringPrice: { currencyCode: "USD", units: "5" }, + }, + }, + ], + }, + }; + }, + }, + }, + }), + }, + })); + mock.module("google-auth-library", () => ({ + OAuth2Client: class { + async verifyIdToken() { + return { + getPayload: () => ({ + email: "fixture@local-test.iam.gserviceaccount.com", + email_verified: true, + }), + }; + } + }, + })); + process.env.GOOGLE_PUBSUB_AUDIENCE = "https://kit.example.com"; + const storeState = { apple: true, amazon: true, horizon: true }; + const applePayload = { + transactionId: "90000000000001", + originalTransactionId: "90000000000001", + bundleId: "dev.openiap.interop", + productId, + type: "Auto-Renewable Subscription", + environment: "Sandbox", + purchaseDate: Date.now(), + expiresDate: Date.now() + 3600000, + }; + const appleJws = [ + Buffer.from('{"alg":"ES256"}').toString("base64url"), + Buffer.from(JSON.stringify(applePayload)).toString("base64url"), + "Zml4dHVyZQ", + ].join("."); + const appleLibrary = await import("@apple/app-store-server-library"); + mock.module("@apple/app-store-server-library", () => ({ + ...appleLibrary, + AppStoreServerAPIClient: class { + async getTransactionInfo(id) { + assert.equal(id, applePayload.transactionId); + return { signedTransactionInfo: appleJws }; + } + }, + SignedDataVerifier: class { + async verifyAndDecodeTransaction(jws) { + assert.equal(jws, appleJws); + return applePayload; + } + }, + })); + const nativeFetch = globalThis.fetch; + globalThis.fetch = async (url, init) => { + const target = new URL( + typeof url === "string" || url instanceof URL ? url : url.url, + ); + if (target.hostname === "graph.oculus.com") { + assert.equal(target.pathname, "/1234567890/verify_entitlement"); + const form = new URLSearchParams(init.body); + assert.equal(form.get("user_id"), "store-user-horizon"); + assert.equal(form.get("sku"), productId); + if (storeState.horizon === "outage") + return Response.json({}, { status: 400 }); + return Response.json({ + success: storeState.horizon, + grant_time: Math.floor(Date.now() / 1000), + }); + } + if (target.hostname === "appstore-sdk.amazon.com") { + assert(target.pathname.includes("/sandbox/")); + assert( + target.pathname.endsWith( + "/user/store-user-amazon/receiptId/local-amazon-receipt", + ), + ); + if (storeState.amazon === "outage") + return Response.json({}, { status: 496 }); + return Response.json({ + receiptId: "local-amazon-receipt", + productId, + productType: "SUBSCRIPTION", + purchaseDate: Date.now() - 60000, + cancelDate: storeState.amazon ? null : Date.now(), + testTransaction: true, + }); + } + return nativeFetch(url, init); + }; + const nativeRunAction = ctx.runAction; + ctx.runAction = (ref, args) => + getFunctionName(ref) === "files/internal:getAppleP8Key" + ? Promise.resolve({ keyContent: "local-fixture-key" }) + : nativeRunAction(ref, args); + const { verifyAppStoreReceiptInternalV1 } = + await import("../../convex/purchases/ios.ts"); + const { verifyAmazonReceiptInternalV1 } = + await import("../../convex/purchases/amazon.ts"); + const { verifyMetaHorizonReceiptInternalV1 } = + await import("../../convex/purchases/horizon.ts"); + const { readBoundPurchaseEntitlements } = + await import("../../convex/purchases/action.ts"); + const { verifyGooglePlayReceiptInternalV1 } = + await import("../../convex/purchases/android.ts"); + const { ingestGoogleRtdn } = await import("../../convex/webhooks/google.ts"); + const { deliverPendingEventsHandler } = + await import("../../convex/commerce/delivery.ts"); + const { client } = await import("../../server/convex.ts"); + const realAction = client.action.bind(client); + const fixtureActions = { + "purchases/android:verifyGooglePlayReceiptInternalV1": + verifyGooglePlayReceiptInternalV1, + "purchases/ios:verifyAppStoreReceiptInternalV1": + verifyAppStoreReceiptInternalV1, + "purchases/amazon:verifyAmazonReceiptInternalV1": + verifyAmazonReceiptInternalV1, + "purchases/horizon:verifyMetaHorizonReceiptInternalV1": + verifyMetaHorizonReceiptInternalV1, + "purchases/action:readBoundPurchaseEntitlements": + readBoundPurchaseEntitlements, + }; + client.action = (ref, args) => + fixtureActions[getFunctionName(ref)] + ? fixtureActions[getFunctionName(ref)]._handler(ctx, args) + : realAction(ref, args); + const { commerceRoutes } = + await import("../../server/api/commerce/routes.ts"); + kitServer = Bun.serve({ + hostname: "127.0.0.1", + port: 0, + fetch: new Hono().route("/commerce/v1", commerceRoutes).fetch, + }); + const { createProvider, CREDENTIALS } = await import( + join(example, "provider.mjs") + ); + const { startConsumer } = await import(join(example, "consumer.mjs")); + const { startAppBackend } = await import( + join(example, "composition/app-backend.mjs") + ); + const { createCommerceClient } = await import( + join(example, "composition/commerce-client.mjs") + ); + const { deliver } = await import(join(example, "webhooks.mjs")); + const fixture = { + store: "google", + evidence: token, + userId, + productId, + startsAt: startedAt - 60000, + expiresAt, + }; + const sqlitePath = join(output, "provider.sqlite"); + sqlite = createProvider(sqlitePath, Date.now, fixture); + sqliteServer = Bun.serve({ + hostname: "127.0.0.1", + port: 0, + fetch: (request) => sqlite.fetch(request), + }); + receiver = startConsumer({ + secret: [ + { name: "example", projectId: "commerce_example", secret: exampleSecret }, + { name: "iapkit", projectId: seeded.projectId, secret }, + ], + path: join(output, "receiver.sqlite"), + }); + const providers = { + example: { + baseUrl: `http://127.0.0.1:${sqliteServer.port}`, + credential: CREDENTIALS.server, + }, + iapkit: { + baseUrl: `http://127.0.0.1:${kitServer.port}`, + credential: `Bearer ${key}`, + }, + }; + const sessions = new Map([ + ["Bearer local-alice", userId], + ["Bearer local-bob", "interop_bob"], + ]); + appServer = startAppBackend({ + path: join(output, "app.sqlite"), + providers, + receiver, + resolveSession: (request) => + sessions.get(request.headers.get("authorization")), + }); + const appUrl = appServer.url, + receiverUrl = receiver.url; + const evidence = { store: "google", google: { purchaseToken: token } }; + const clients = Object.fromEntries( + Object.entries(providers).map(([name, cfg]) => [ + name, + createCommerceClient(cfg), + ]), + ); + let current = "example"; + async function appCall( + path, + method = "GET", + body, + session = "Bearer local-alice", + ) { + const response = await fetch(appServer.url + path, { + method, + headers: { authorization: session, "content-type": "application/json" }, + ...(body ? { body: JSON.stringify(body) } : {}), + }); + const result = await response.json().catch(() => null); + trace.push({ + provider: current, + path, + method, + status: response.status, + result, + }); + return { status: response.status, result }; + } + function select(name) { + current = name; + appServer.select(name); + check( + `${name}: app and receiver endpoints remain unchanged`, + [appServer.url, receiver.url], + [appUrl, receiverUrl], + ); + } + const rawEvents = []; + async function receive(init) { + rawEvents.push(init); + return fetch(receiver.url, { ...init, method: "POST" }); + } + async function drain(name, fail = false) { + return name === "example" + ? deliver(sqlite, exampleSecret, Date.now, (init) => + fail + ? Promise.resolve(new Response(null, { status: 503 })) + : receive(init), + ) + : deliverPendingEventsHandler(ctx, async (req) => + fail + ? 503 + : (await receive({ headers: req.headers, body: req.body })).status, + ); + } + async function observe(kind, id = kind) { + googleState = + kind === "expire" + ? "SUBSCRIPTION_STATE_EXPIRED" + : kind === "cancel" + ? "SUBSCRIPTION_STATE_CANCELED" + : "SUBSCRIPTION_STATE_ACTIVE"; + return ingestGoogleRtdn._handler(ctx, { + apiKey: publishable, + oidcToken: "local-fixture-oidc", + rawMessage: "local-fixture", + payload: { + messageId: id, + packageName: "dev.openiap.interop", + eventTimeMillis: Date.now(), + subscriptionNotification: { + notificationType: kind === "expire" ? 13 : kind === "cancel" ? 3 : 4, + purchaseToken: token, + subscriptionId: productId, + }, + }, + }); + } + for (const name of Object.keys(providers)) { + select(name); + results[name].before = (await appCall("/access")).result; + check( + `${name}: empty provider gives no access`, + results[name].before.productIds, + [], + ); + check( + `${name}: actual verification accepts fixture`, + (await clients[name].call("verifyPurchase", evidence)).isValid, + true, + ); + check( + `${name}: verification alone does not grant access`, + (await appCall("/access")).result.productIds, + [], + ); + results[name].bound = ( + await appCall("/purchase", "POST", { + ...evidence, + userId: "attacker_supplied", + }) + ).result; + check( + `${name}: unchanged app fulfills the purchase`, + results[name].bound.productIds, + [productId], + ); + check( + `${name}: repeated fulfillment is idempotent`, + (await appCall("/purchase", "POST", evidence)).result.productIds, + [productId], + ); + check( + `${name}: body cannot select account identity`, + ( + await clients[name].call("entitlements", { + userId: "attacker_supplied", + }) + ).productIds, + [], + ); + check( + `${name}: another user cannot claim the purchase`, + ( + await clients[name].call("bindPurchase", { + ...evidence, + userId: "interop_bob", + }) + ).bound, + false, + ); + const credential = + name === "example" ? CREDENTIALS.verification : `Bearer ${publishable}`; + const r = await fetch( + providers[name].baseUrl + "/commerce/v1/users/erase", + { + method: "POST", + headers: { + authorization: credential, + "content-type": "application/json", + }, + body: JSON.stringify({ userId }), + }, + ); + check( + `${name}: publishable verification credentials cannot erase`, + r.status, + 403, + ); + if (name === "iapkit") await observe("start"); + await drain(name); + check( + `${name}: same receiver persists an authenticated grant`, + receiver + .inspect() + .some( + (event) => + event.projectId === + (name === "example" ? "commerce_example" : seeded.projectId) && + event.eventType === "entitlement.granted" && + event.userId === userId, + ), + true, + ); + if (name === "example") + sqlite.observe({ id: "cancel", kind: "cancel", occurredAt: Date.now() }); + else await observe("cancel"); + const state = await clients[name].call("subscriptionStatus", { userId }); + results[name].canceled = state; + check( + `${name}: cancellation stops renewal but keeps paid access`, + [state.active, state.subscription.willRenew], + [true, false], + ); + await drain(name, true); + } + select("example"); + check( + "Switching back restores the same persisted access", + (await appCall("/access")).result.productIds, + [productId], + ); + const pendingBefore = await admin.query( + anyApi.interopFixture.inspect, + seeded, + ); + check( + "IAPKit 503 leaves a durable pending delivery", + pendingBefore.deliveries.some( + (row) => row.status === "pending" && row.attempts === 1, + ), + true, + ); + console.log( + "Restarting the actual local Convex process and SQLite provider with retries pending.", + ); + await stop(); + await boot(); + sqlite.close(); + sqlite = createProvider(sqlitePath, Date.now, fixture); + check( + "IAPKit pending deliveries survive process restart", + (await admin.query(anyApi.interopFixture.inspect, seeded)).deliveries, + pendingBefore.deliveries, + ); + await Bun.sleep(Math.max(0, startedAt + 34000 - Date.now())); + for (const name of Object.keys(providers)) await drain(name); + for (const projectId of ["commerce_example", seeded.projectId]) + check( + `${projectId === "commerce_example" ? "example" : "iapkit"}: cancellation retry reaches unchanged receiver`, + receiver + .inspect() + .some( + (event) => + event.projectId === projectId && + event.eventType === "subscription.canceled", + ), + true, + ); + const count = receiver.count(); + receiver.reopen(); + for (const init of rawEvents.slice()) await receive(init); + check( + "Lost acknowledgements and receiver restart create no duplicate effects", + receiver.count(), + count, + ); + console.log("Waiting for the actual paid expiry deadline."); + await Bun.sleep(Math.max(0, expiresAt + 10 - Date.now())); + for (const name of Object.keys(providers)) { + select(name); + results[name].expired = (await appCall("/access")).result; + check( + `${name}: access expires before a store notification`, + results[name].expired.productIds, + [], + ); + } + sqlite.observe({ id: "expire", kind: "expire", occurredAt: Date.now() }); + await observe("expire"); + check( + "Repeated IAPKit store notification is deduplicated", + (await observe("expire")).deduped, + true, + ); + for (const name of Object.keys(providers)) await drain(name); + for (const projectId of ["commerce_example", seeded.projectId]) + check( + `${projectId === "commerce_example" ? "example" : "iapkit"}: receiver observes revocation`, + receiver + .inspect() + .some( + (event) => + event.projectId === projectId && + event.eventType === "entitlement.revoked", + ), + true, + ); + check( + "App account deletion is accepted", + (await appCall("/account", "DELETE")).result.accepted, + true, + ); + for (let i = 0; i < 80 && (await appServer.drainErasure()); i++) + await Bun.sleep(100); + check( + "App completes erasure across both configured providers", + await appServer.drainErasure(), + 0, + ); + check( + "Deleted session cannot submit a late purchase", + (await appCall("/purchase", "POST", evidence)).status, + 401, + ); + for (const name of Object.keys(providers)) { + results[name].erased = await clients[name].call("entitlements", { userId }); + check( + `${name}: erased user has no access`, + results[name].erased.productIds, + [], + ); + const first = await clients[name].call("eraseUser", { userId }), + again = await clients[name].call("eraseUser", { userId }); + results[name].erasure = again; + check( + `${name}: repeated erasure returns the same completed job`, + [first.status, again.jobId], + ["completed", first.jobId], + ); + } + const erasedState = await admin.query(anyApi.interopFixture.inspect, seeded); + check( + "IAPKit persisted subscription, event and job identities are removed", + JSON.stringify(erasedState).includes(userId), + false, + ); + check( + "Example purchase identity is removed", + sqlite.inspect().purchases[0].userId, + null, + ); + check( + "Previously delivered app event identities are removed", + receiver.inspect().some((event) => event.userId === userId), + false, + ); + receiver.reopen(); + for (const init of rawEvents.slice()) await receive(init); + check( + "Late signed redeliveries after erasure and restart cannot restore identities", + receiver.inspect().some((event) => event.userId === userId), + false, + ); + check( + "Consumer source files are byte-for-byte unchanged during replacement", + Object.fromEntries( + unchangedFiles.map((name) => [name, hash(join(example, name))]), + ), + before, + ); + const { runStoreCoverage } = await import("./commerce-store-coverage.mjs"); + const storeCoverage = await runStoreCoverage({ + example, + output, + key, + kitUrl: `http://127.0.0.1:${kitServer.port}`, + receiver, + appleJws, + storeState, + inspect: () => + admin.query(anyApi.interopFixture.inspect, { + projectId: seeded.projectId, + }), + check, + trace, + }); + for (const snapshot of Object.values(inputs)) snapshot.assertUnchanged(); + check( + "Source revisions remain unchanged throughout execution", + { openiap: revision(repo), example: revision(example) }, + revisions, + ); + const report = { + results, + storeCoverage, + harnessHashes: inputs.harness.hashes, + sources: { + openiap: { + baseRevision: revisions.openiap, + hashes: inputs.openiap.hashes, + optionalGeneratedFiles: optionalInputs.openiap, + }, + example: { + baseRevision: revisions.example, + hashes: inputs.example.hashes, + }, + workspace: { + baseRevision: revisions.openiap, + hashes: inputs.workspace.hashes, + optionalGeneratedFiles: optionalInputs.workspace, + }, + }, + runtime: { + bun: Bun.version, + convex: JSON.parse( + readFileSync(join(kit, "node_modules/convex/package.json"), "utf8"), + ).version, + }, + command: + "bun --conditions=openiap-source packages/kit/scripts/docs/run-commerce-interop.mjs ../openiap-commerce-protocol-example ", + configurationChanges: [ + "Commerce base URL and server credential", + "Separate webhook signing keys, each bound to its provider and project", + "Example fixture store adapter configured to recognize the same synthetic Google token", + ], + recordedAt: new Date().toISOString(), + checks, + checkCount: checks.length, + trace, + consumerHashes: before, + changedConsumerFiles: [], + providerOrder: ["example", "iapkit", "example"], + backendVersion: config.backendVersion, + scope: { + actual: [ + "IAPKit Hono routes and handlers", + "Apple, Google, Amazon and Horizon verification action bodies; Google RTDN action", + "Amazon and Horizon stored purchase binding, fresh ownership reads and erasure", + "Convex persistence, authorization, subscription transitions, erasure scheduler and delivery leases", + "IAPKit outbound signing and result recording", + "Original example SQLite provider", + "One app backend and one receiver, real loopback HTTP", + "Actual Convex process restart with pending deliveries", + ], + fixtures: [ + "Google Play HTTP and OIDC, Amazon RVS and Meta Graph responses", + "Apple signed-transaction verifier, Server API and test signing-key loader at their external boundaries", + "Paid subscription and app sessions", + "HTTPS destination transport redirected to the loopback receiver through the existing worker injection", + ], + excluded: [ + "Real store purchase, device SDK integration and store cryptographic verification", + "Public HTTPS DNS/TLS delivery", + "Automatic migration of existing purchases between providers", + "Unrelated image processing and scheduled maintenance crons", + ], + }, + }; + writeFileSync( + join(output, "report.json"), + JSON.stringify(report, null, 2) + "\n", + ); + console.log( + `Completed ${checks.length} checks. Report: ${join(output, "report.json")}`, + ); +} catch (error) { + writeFileSync( + join(output, "failure.json"), + JSON.stringify( + { + recordedAt: new Date().toISOString(), + completedChecks: checks, + assertion: error.message, + }, + null, + 2, + ) + "\n", + ); + throw error; +} finally { + await appServer?.close(); + await receiver?.close(); + await sqliteServer?.stop(true); + sqlite?.close(); + await kitServer?.stop(true); + await stop(); +} diff --git a/packages/kit/server/api/commerce/conformance.test.ts b/packages/kit/server/api/commerce/conformance.test.ts index e9a311411..954c01d46 100644 --- a/packages/kit/server/api/commerce/conformance.test.ts +++ b/packages/kit/server/api/commerce/conformance.test.ts @@ -161,6 +161,12 @@ const mocks = vi.hoisted(() => ({ vi.mock("@/convex", () => ({ api: { purchases: { + action: { + readBoundPurchaseEntitlements: "readBoundPurchaseEntitlements", + }, + mutation: { + bindVerifiedPurchaseAsServer: "bindVerifiedPurchaseAsServer", + }, ios: { verifyAppStoreReceiptInternalV1: "verifyApple" }, android: { verifyGooglePlayReceiptInternalV1: "verifyGoogle" }, horizon: { verifyMetaHorizonReceiptInternalV1: "verifyHorizon" }, @@ -252,6 +258,10 @@ function seedConvexFixtures() { mocks.action.mockImplementation(async (name: unknown, args: unknown) => { assertKnownKey((args as { apiKey: string }).apiKey); + if (name === "readBoundPurchaseEntitlements") { + assertServerKey((args as { apiKey: string }).apiKey); + return { productIds: [] }; + } return { isValid: true, state: "ENTITLED", @@ -284,6 +294,7 @@ function seedConvexFixtures() { mocks.mutation.mockImplementation(async (name: unknown, args: unknown) => { const { apiKey } = args as { apiKey: string }; assertServerKey(apiKey); + if (name === "bindVerifiedPurchaseAsServer") return { bound: false }; if (name === "bindUserAsServer") { const { purchaseToken, userId } = args as { purchaseToken: string; diff --git a/packages/kit/server/api/commerce/handlers.ts b/packages/kit/server/api/commerce/handlers.ts index dd31618e6..80db53434 100644 --- a/packages/kit/server/api/commerce/handlers.ts +++ b/packages/kit/server/api/commerce/handlers.ts @@ -11,6 +11,10 @@ import { isValidSubscriptionUserId } from "../../../convex/subscriptions/limits" import { normalizeBindUserPurchaseToken } from "../v1/subscriptions"; import { ProtocolOperationError, protocolCodeForConvexError } from "./errors"; import { admitVerification } from "./verificationAdmission"; +import { + buildAmazonRemoteId, + buildHorizonRemoteId, +} from "../../../convex/purchases/identity"; export interface ProtocolContext { apiKey: string; @@ -290,6 +294,10 @@ export async function entitlements( }> { const userId = requireUserId(input.userId); try { + const purchases = await client.action( + api.purchases.action.readBoundPurchaseEntitlements, + { apiKey: context.apiKey, userId }, + ); const result = await client.query(api.subscriptions.query.entitlementsV2, { apiKey: context.apiKey, userId, @@ -297,7 +305,7 @@ export async function entitlements( }); return { userId: result.userId, - productIds: result.productIds, + productIds: [...new Set([...result.productIds, ...purchases.productIds])], // entitlementsV2 returns only entitled rows, so every snapshot is active. subscriptions: result.subscriptions.map((row: SubscriptionRowV2) => toSnapshot(row, true), @@ -332,6 +340,31 @@ export async function bindPurchase( input: StoreEvidenceInput & { userId: string }, ): Promise<{ bound: boolean }> { const userId = requireUserId(input.userId); + if (input.store === "amazon" || input.store === "horizon") { + const remoteId = + input.store === "amazon" + ? buildAmazonRemoteId({ + ...requireEvidence(input, input.amazon), + sandbox: input.amazon?.sandbox === true, + }) + : buildHorizonRemoteId( + requireEvidence(input, input.horizon).userId, + requireEvidence(input, input.horizon).sku, + ); + try { + return await client.mutation( + api.purchases.mutation.bindVerifiedPurchaseAsServer, + { + apiKey: context.apiKey, + userId, + store: input.store, + remoteId, + }, + ); + } catch (error) { + rethrowAsProtocolError(error, "INTERNAL_ERROR"); + } + } let rawToken: string; switch (input.store) { case "apple": @@ -340,12 +373,6 @@ export async function bindPurchase( case "google": rawToken = requireEvidence(input, input.google).purchaseToken; break; - case "amazon": - rawToken = requireEvidence(input, input.amazon).receiptId; - break; - case "horizon": - // Horizon exposes no transaction identity a binding could key on. - return { bound: false }; default: throw new ProtocolOperationError( "UNSUPPORTED_STORE", diff --git a/packages/kit/server/api/commerce/routes.test.ts b/packages/kit/server/api/commerce/routes.test.ts index 62680fbe4..acc1f5616 100644 --- a/packages/kit/server/api/commerce/routes.test.ts +++ b/packages/kit/server/api/commerce/routes.test.ts @@ -17,6 +17,12 @@ const mocks = vi.hoisted(() => ({ vi.mock("@/convex", () => ({ api: { purchases: { + action: { + readBoundPurchaseEntitlements: "readBoundPurchaseEntitlements", + }, + mutation: { + bindVerifiedPurchaseAsServer: "bindVerifiedPurchaseAsServer", + }, ios: { verifyAppStoreReceiptInternalV1: "verifyApple" }, android: { verifyGooglePlayReceiptInternalV1: "verifyGoogle" }, horizon: { verifyMetaHorizonReceiptInternalV1: "verifyHorizon" }, @@ -111,6 +117,71 @@ describe("commerce REST adapter", () => { expect((await response.json()).error.code).toBe("FORBIDDEN"); }); + it("evaluates subscription expiry after store ownership refreshes", async () => { + const clock = vi.spyOn(Date, "now").mockReturnValue(1_000); + try { + const subscription = { + productId: "apple-premium", + platform: "IOS", + state: "Active", + expiresAt: 2_000, + startedAt: 0, + updatedAt: 0, + }; + mocks.action.mockImplementation(async () => { + clock.mockReturnValue(3_000); + return { productIds: ["amazon-premium"] }; + }); + mocks.query.mockImplementation(async (name, args) => { + if (name !== "entitlementsV2") return { ok: true }; + const active = subscription.expiresAt > args.now; + return { + userId: args.userId, + productIds: active ? [subscription.productId] : [], + subscriptions: active ? [subscription] : [], + }; + }); + const response = await buildApp().request( + "/commerce/v1/entitlements?userId=user-1", + { headers: { Authorization: `Bearer ${SERVER_KEY}` } }, + ); + expect(response.status).toBe(200); + expect(await response.json()).toEqual({ + userId: "user-1", + productIds: ["amazon-premium"], + subscriptions: [], + }); + } finally { + clock.mockRestore(); + } + }); + + it("observes subscription erasure completed during a store refresh", async () => { + let erased = false; + mocks.action.mockImplementation(async () => { + erased = true; + return { productIds: [] }; + }); + mocks.query.mockImplementation(async (name, args) => { + if (name !== "entitlementsV2") return { ok: true }; + return { + userId: args.userId, + productIds: erased ? [] : ["apple-premium"], + subscriptions: [], + }; + }); + const response = await buildApp().request( + "/commerce/v1/entitlements?userId=user-1", + { headers: { Authorization: `Bearer ${SERVER_KEY}` } }, + ); + expect(response.status).toBe(200); + expect(await response.json()).toEqual({ + userId: "user-1", + productIds: [], + subscriptions: [], + }); + }); + it("reports VERIFICATION_FAILED as 502 when the store verdict is unreachable", async () => { mocks.action.mockRejectedValue(new Error("upstream down")); const response = await post( @@ -249,15 +320,24 @@ describe("commerce REST adapter", () => { expect(mocks.mutation).not.toHaveBeenCalled(); }); - it("reports a Horizon purchase as not bound without exposing why", async () => { + it("binds Horizon using the verified store user and SKU identity", async () => { + mocks.mutation.mockResolvedValue({ bound: true }); const response = await post(buildApp(), "/commerce/v1/purchases/bind", { userId: "user-1", store: "horizon", horizon: { userId: "1234567890", sku: "premium" }, }); expect(response.status).toBe(200); - expect(await response.json()).toEqual({ bound: false }); - expect(mocks.mutation).not.toHaveBeenCalled(); + expect(await response.json()).toEqual({ bound: true }); + expect(mocks.mutation).toHaveBeenCalledWith( + "bindVerifiedPurchaseAsServer", + { + apiKey: SERVER_KEY, + userId: "user-1", + store: "horizon", + remoteId: "1234567890:premium", + }, + ); }); it("authenticates before revealing a non-binding store verdict", async () => { diff --git a/scripts/agent/compile-context.ts b/scripts/agent/compile-context.ts index 7fc26af17..a5e1e640b 100644 --- a/scripts/agent/compile-context.ts +++ b/scripts/agent/compile-context.ts @@ -234,6 +234,36 @@ async function generateLlmsTxt(): Promise<{ quick: number; full: number }> { console.log(chalk.blue("\n🤖 Generating llms.txt files...\n")); const versions = readInstallationVersions(); const generatedAt = new Date().toISOString(); + const implementationEntryPoints = `## Choose an SDK and verify the implementation + +Start with the app's existing framework. Use https://openiap.dev/languages for +the supported SDKs, install commands, platforms, and source repositories, then +follow that framework's guide at https://openiap.dev/docs/setup. Use its actual +types and lifecycle patterns; do not copy another language's API spelling. + +The mobile SDK handles the store purchase. The Commerce Protocol package +provides a server-side contract and conformance artifacts, not a mobile SDK or +a hosted backend. IAPKit is one backend implementation, not a requirement for +using OpenIAP SDKs. + +Follow one purchase at https://openiap.dev/commerce-protocol/getting-started. +Select Apple, Google Play, Amazon or Meta Horizon there; the chosen store stays +with the six-step flow and its build brief. For Quest, start at +https://openiap.dev/commerce-protocol/getting-started?store=horizon. +Each step compares the small, runnable SQLite example with IAPKit's handlers +and checks. Read the code for the responsibility being implemented: +- Teaching backend: https://github.com/hyodotdev/openiap-commerce-protocol-example +- IAPKit service: https://github.com/hyodotdev/openiap/tree/main/packages/kit +- IAPKit integration documentation: https://kit.openiap.dev/docs +- Build a backend: https://github.com/hyodotdev/openiap-commerce-protocol-example/blob/main/BUILD.md +- Connect a product role: https://github.com/hyodotdev/openiap-commerce-protocol-example/blob/main/INTEGRATE.md + +Explain what the person gets and what they must decide before showing code. +Implement in the target project, install and run from clean source, and verify +the promised behavior. Report commands, actual results, and remaining work. +Separate fixture checks, real store sandbox tests, and profile conformance; +do not claim one from another or hide failures by reducing the declared scope. +`; const deprecationMigrationReference = `## Deprecations and major-version migration - OpenIAP 3.0, \`react-native-iap\` 16.0.0, \`expo-iap\` 5.0.0, @@ -270,6 +300,8 @@ async function generateLlmsTxt(): Promise<{ quick: number; full: number }> { > Quick Reference: https://openiap.dev/llms.txt > Generated: ${generatedAt} +${implementationEntryPoints} + ## Table of Contents 1. Installation 2. Core APIs (Connection, Products, Purchase, Subscription) @@ -663,9 +695,9 @@ async Task FinishPurchaseSafelyAsync(Purchase purchase) - Commerce Protocol: https://openiap.dev/commerce-protocol - Commerce Protocol Use a Provider: https://openiap.dev/commerce-protocol/getting-started - Commerce Protocol Business Roles: https://openiap.dev/commerce-protocol/ecosystem -- Commerce Protocol Integration Brief: https://openiap.dev/commerce-example/integration-brief.md +- Commerce Protocol Integration Brief: https://github.com/hyodotdev/openiap-commerce-protocol-example/blob/main/INTEGRATE.md - Commerce Protocol Build with AI: https://openiap.dev/commerce-protocol/implementation -- Commerce Protocol AI Build Brief: https://openiap.dev/commerce-example/build-brief.md +- Commerce Protocol AI Build Brief: https://github.com/hyodotdev/openiap-commerce-protocol-example/blob/main/BUILD.md - Commerce Protocol Whitepaper: https://openiap.dev/commerce-protocol/whitepaper - Commerce Protocol Webhook Contract: https://openiap.dev/commerce-protocol/webhooks - Commerce Protocol Specification: https://github.com/hyodotdev/openiap/blob/main/specs/commerce-protocol/SPEC.md @@ -690,6 +722,8 @@ async Task FinishPurchaseSafelyAsync(Purchase purchase) > Full Reference: https://openiap.dev/llms-full.txt > Generated: ${generatedAt} +${implementationEntryPoints} + ## Installation ### React Native / Expo @@ -953,21 +987,35 @@ identifier, or central runtime. - Docs: https://openiap.dev/commerce-protocol - Use a provider: https://openiap.dev/commerce-protocol/getting-started - Build your part: https://openiap.dev/commerce-protocol/ecosystem -- Role-specific AI integration brief: https://openiap.dev/commerce-example/integration-brief.md +- Role-specific AI integration brief: https://github.com/hyodotdev/openiap-commerce-protocol-example/blob/main/INTEGRATE.md - Build with AI: https://openiap.dev/commerce-protocol/implementation - Ready event receiver: https://openiap.dev/commerce-protocol/getting-started#receive-events -- AI build brief: https://openiap.dev/commerce-example/build-brief.md +- AI build brief: https://github.com/hyodotdev/openiap-commerce-protocol-example/blob/main/BUILD.md - Recorded local implementation: https://openiap.dev/commerce-protocol#build-walkthrough - Whitepaper and PDF: https://openiap.dev/commerce-protocol/whitepaper - Webhook contract: https://openiap.dev/commerce-protocol/webhooks - Normative spec: https://github.com/hyodotdev/openiap/blob/main/specs/commerce-protocol/SPEC.md - Canonical GraphQL contract, authored layers (compiled to JSON Schema): https://github.com/hyodotdev/openiap/tree/main/specs/commerce-protocol/schema -The recorded example follows six build milestones with reviewed source revisions, AI tasks, +The recorded example follows seven build milestones with reviewed source revisions, AI tasks, code changes, actual captures, and a correction/recheck log. It uses a fictional store and controlled clock with real local HTTP, SQLite and signed delivery. It is not a production provider or a full profile conformance claim. Its execution report is available at https://openiap.dev/commerce-example/run.json. +The IAPKit replacement check keeps the same app backend and receiver while +switching between the example and IAPKit for Apple, Google, Amazon and Horizon. +Apple/Google subscription checks cover cancellation, expiry and signed events. +Amazon/Horizon checks cover store-user binding, current ownership rechecks, +rejection, outage and recovery; read entitlements.productIds rather than +inventing subscription records or lifecycle events. All four cover account +erasure. Store identity must be authenticated by the app backend. Consumable +quantities need a separate durable fulfillment ledger. +Actual IAPKit handlers and local Convex storage run with fixture store +responses; Apple cryptographic verification and Google OIDC are substituted. +This does not prove device checkout or real store authentication. Read the +scope, command and source hashes at +https://openiap.dev/commerce-protocol/ecosystem#composition-proof and +https://openiap.dev/commerce-composition/iapkit-run.json. IAPKit is one implementation. Its product documentation and AI notes live at https://kit.openiap.dev/docs and https://kit.openiap.dev/llms.txt. diff --git a/scripts/agent/tests/llms-content.test.ts b/scripts/agent/tests/llms-content.test.ts index ec2839fa6..9c2025f6c 100644 --- a/scripts/agent/tests/llms-content.test.ts +++ b/scripts/agent/tests/llms-content.test.ts @@ -22,6 +22,31 @@ const compiledContext = fs.readFileSync( ); describe("generated LLM references", () => { + test("connects SDK selection to current implementation inputs and evidence", () => { + for (const reference of [quickReference, fullReference]) { + expect(reference).toContain("https://openiap.dev/languages"); + expect(reference).toContain("https://openiap.dev/docs/setup"); + expect(reference).toContain( + "openiap-commerce-protocol-example/blob/main/BUILD.md", + ); + expect(reference).toContain( + "openiap-commerce-protocol-example/blob/main/INTEGRATE.md", + ); + expect(reference).toContain( + "https://github.com/hyodotdev/openiap/tree/main/packages/kit", + ); + expect(reference).toContain( + "Separate fixture checks, real store sandbox tests, and profile conformance", + ); + expect(reference).not.toContain( + "https://openiap.dev/commerce-example/build-brief.md", + ); + expect(reference).not.toContain( + "https://openiap.dev/commerce-example/integration-brief.md", + ); + } + }); + test("keeps IAPKit product notes out of the OpenIAP AI reference", () => { expect(kitQuickReference).toContain("includeClientPayload=true"); expect(kitQuickReference).toContain("includeClientPayload: true"); diff --git a/scripts/e2e-web-sites.mjs b/scripts/e2e-web-sites.mjs index 529b1b634..158d97cf2 100644 --- a/scripts/e2e-web-sites.mjs +++ b/scripts/e2e-web-sites.mjs @@ -1,5 +1,6 @@ #!/usr/bin/env node import { chromium, request as playwrightRequest } from "@playwright/test"; +import assert from "node:assert/strict"; import path from "node:path"; import { fileURLToPath } from "node:url"; @@ -35,6 +36,11 @@ const SITES = [ "/docs/setup/store/horizon", "/docs/setup/store/onside", "/docs/updates/releases", + "/commerce-protocol", + "/commerce-protocol/getting-started", + "/commerce-protocol/implementation", + "/commerce-protocol/operations", + "/commerce-protocol/authentication", ], apiRoutes: ["/llms.txt", "/llms-full.txt"], }, @@ -627,6 +633,21 @@ async function checkSite(browser, request, site) { const failures = []; const summaries = []; + if (site.name === "docs") { + try { + const count = await checkDocsInitialHtml(request, site.baseUrl); + summaries.push( + `docs ${count} sitemap pages contain readable HTML and exact canonical URLs`, + ); + await checkCommerceJourney(browser, site.baseUrl); + summaries.push( + "docs purchase steps, paired code references, and AI brief passed on desktop and mobile", + ); + } catch (error) { + failures.push(error.message); + } + } + for (const route of site.apiRoutes ?? []) { try { await checkHttpRoute(request, site, route, [200, 301, 302]); @@ -714,7 +735,11 @@ async function main() { const allSummaries = []; try { - for (const site of SITES) { + const sites = process.env.WEB_E2E_SITE + ? SITES.filter((site) => site.name === process.env.WEB_E2E_SITE) + : SITES; + assert(sites.length > 0, "WEB_E2E_SITE must be docs or iapkit"); + for (const site of sites) { const result = await checkSite(browser, request, site); allFailures.push(...result.failures); allSummaries.push(...result.summaries); @@ -735,7 +760,157 @@ async function main() { return; } - console.log("web-e2e: docs and IAPKit passed"); + console.log("web-e2e: selected sites passed"); +} + +export async function checkDocsInitialHtml(request, baseUrl) { + const sitemap = await request.get(`${baseUrl}/sitemap.xml`); + assert.equal(sitemap.status(), 200, "Sitemap must be served"); + const urls = [...(await sitemap.text()).matchAll(/([^<]+)<\/loc>/g)].map( + (match) => match[1], + ); + assert(urls.length > 0, "Sitemap has no canonical pages"); + for (const name of [ + "expo", + "react-native", + "flutter", + "godot", + "kmp", + "maui", + ]) { + assert( + urls.includes(`https://openiap.dev/docs/setup/${name}`), + `${name} setup missing from sitemap`, + ); + } + for (const url of urls) { + const route = new URL(url).pathname; + const response = await request.get(new URL(route, baseUrl).href); + assert.equal(response.status(), 200, `${route}: HTTP status`); + const html = await response.text(); + const head = html.match(/[\s\S]*?<\/head>/)?.[0] ?? ""; + assert.equal( + (head.match(/rel="canonical"/g) ?? []).length, + 1, + `${route}: one canonical`, + ); + assert(head.includes(`href="${url}"`), `${route}: incorrect canonical`); + assert( + /]*>[^<]+<\/title>/.test(head), + `${route}: missing title`, + ); + assert( + /name="description" content="[^"]+"/.test(head), + `${route}: missing description`, + ); + assert( + /]*>[\s\S]*?<\/h1>/.test(html), + `${route}: empty client-only page`, + ); + if (route === "/commerce-protocol/getting-started") { + assert( + html.includes("
    ← Provider replacement walkthrough

    Commerce Protocol Example · README.md

    Source snapshot · 2026-09-08

    SHA-256 31b768b8b9d031a7f95f912919ac3ea61e2e394a41d9762af00f0e6276e6ff03

  • {*a{Y`LpGvcpao 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 T@T4d33xtfs7xCYshJpVd_FHp5 literal 0 HcmV?d00001 diff --git a/packages/docs/public/commerce-example/07-account-erasure/run.json b/packages/docs/public/commerce-example/07-account-erasure/run.json new file mode 100644 index 000000000..e9545e02a --- /dev/null +++ b/packages/docs/public/commerce-example/07-account-erasure/run.json @@ -0,0 +1,910 @@ +{ + "step": 7, + "id": "07-account-erasure", + "title": "Delete the account", + "built": "Atomic provider erasure, recipient cleanup and late-delivery guards", + "result": "The account identity is removed; retries and restart cannot restore it.", + "previous": "06-recover-reviewed-8", + "startedAt": "2026-09-08T19:22:04.465Z", + "recordedAt": "2026-09-08T19:22:12.430Z", + "packageVersion": "0.1.0", + "task": "# Review the completed backend\n\nApply the Fable 5.1 max CLI review to the final checkpoint. Add the missing\nfirst-binding grant event in the same transaction as ownership, reject a\npremature expiry without consuming its observation, and verify both rollback\nand expiry boundaries. Correct test labels to describe what they exercise.\n\nRepair patch generation without rewriting historical source or screenshots.\nBuild patches from the preceding archived source and verify their hashes.\nInstall and test each archive outside the monorepo with npm. Capture the revised\nfinal screen on desktop and mobile, then export only matching source evidence.\n\nKeep the original six checkpoints as history. Explain their incomplete discovery\nand missing grant behavior; do not describe them as conformant providers. Keep\nall changes uncommitted for maintainer review.\n\nApply the second review: retain gate delivery state for delayed expiry,\nretain store occurrence on delayed binding, preserve consecutive failure logs,\nand state actual package contents and runtime requirements. Add a ready-to-run\ngeneric event receiver for an existing backend, reusing the same receiver\nhandler. Demonstrate signed lifecycle ingestion, duplicate delivery, tampering,\nand persisted inbox recovery over real local HTTP. Keep all samples fictional.\n\nAdd composable integration roles: experience, commerce, and data. Ship a short\nAI integration brief and a backend helper that maps Apple/Google OpenIAP\npurchase fields into the installed verification schema. Test invalid inputs\nand exclude client-supplied identity. Keep paywall UI APIs product-specific,\ncurrent IAPKit-only client helpers explicit, and store/device proof separate\nfrom local fixtures. Reuse the existing consumer and contract validators.\n\nThe first bridge test failed because store evidence was nested under an extra\n`evidence` key. Keep the failure output, use the installed input schema's\ntop-level `apple`/`google` members, and rerun that boundary check.\n\nApply the third CLI review. Make the integration brief reachable from the docs\nsite with absolute setup, source, and build-brief links. Accept signed webhook\ndelivery behind a reverse proxy that preserves the public Host header. Keep\nunfinished captures from blocking completed history, retain equal-time fixture\ntransitions, record the observed duplicate response, and configure Yarn's\nnode-modules linker. Preserve the proxy failure and rerun the checks.\n\nPrepare the standalone example for its first public commit. Rewrite the README\naround clone, run, inspect, choose a role, and verify. Put receiver and capture\nsetup in repository documentation so the example works before the docs site is\ndeployed. Preserve every earlier archive. Record this documentation revision,\nverify all source archives again, and export a stable current-source download.\nAdd CI that tests runtime, tooling, archives and the documentation export. This\nrevision is a local publication review, not another completed external review.\n\nFix the first Linux CI failure without rewriting historical recordings. macOS\nAppleDouble metadata must not count as source. Exclude it on extraction, omit it\nfrom new archives, and add a portable extraction regression test. Capture the\ncorrected tooling, verify every source revision, and rerun GitHub CI.\n\nCorrect the final CLI review finding: exercise cancellation at the expiry\nobservation timestamp so the check reaches the expired-state guard. Preserve\nthe earlier capture, record this revision, and verify its archive and patch.\n\nApply the Codex review: authenticate webhook body bytes before UTF-8 decoding.\nReject altered UTF-8 and inserted BOM bytes with an unchanged signature. Reject\nauthentically signed malformed UTF-8 before storage, and accept correctly signed\nUnicode and BOM bodies. Keep the reproduced failure, preserve old checkpoints,\nthen capture and verify the corrected revision.\n", + "sourceHashes": { + ".gitignore": "50b276cb902abd8b3018e368cd251db0a5c36b289b00a7fffd18e0e399c7f637", + ".yarnrc.yml": "473e6def86fc03638120e0c01d0c8bbab095677256460fa4ea763e5d4697f270", + "AGENTS.md": "38764ea47552533ab5db55f7ade8c0025e2d7af9163715ce89f2d719f5475712", + "BUILD.md": "abad05223f40512522487d83337755d5c3222fda4614e5c2ea92f45d13be977d", + "INTEGRATE.md": "532f25bc83d96350381c8c801caf5837777624095a3f519053133dffdbee1cd8", + "LICENSE": "243adbe048bbec60be2faf9ae1e62c5221327d20ffbc13b1c80e82fa98127af1", + "README.md": "f46856f23a859637f4488074744dbc4f16a7a42999e27491aa832bac2089cbec", + "ai-task.md": "d000a11054750accc6bab8ddbf6d2fc6b674b12c3821ccbfd45729469923b8fe", + "capture.mjs": "4940347c92713f47965400fa9dca0908372ec2b3627612fccf40eb6b636a85a2", + "checkpoint-tools.mjs": "be05f0e7f52b74b180cebb5b39a1a7fbeb7260e90fe4568b1e72eb15bbb2e4c6", + "checkpoint-tools.test.mjs": "9c71b5f95f33fe3352f20836a57d063ed5c680fa0837ae4de399bc820b5d3896", + "checkpoint.json": "1bdbc58dd1baa4032b5004760863c46580de384042d4190de5937aee070f9d7f", + "client-bridge.mjs": "a0058579b02c2f3a770c7ff7b59dfe41ce50761361d9a0c7a2df96ab1b6b4acf", + "composition/README.md": "1a35875f1ecd66d48145b0b1acaaefdccec85b8b934a1e593e7d4a0c76525fd8", + "composition/app-backend.mjs": "13d92de6276d27f953c5fc44a8e0857f45ec399dedce4a21ef31a02f6f6c1dee", + "composition/app-backend.test.mjs": "d88286bf5f003ef71c27188fa953df84a528b72cee9959922e43d849be08efcc", + "composition/commerce-client.mjs": "f1f1a056bc76801df25111cb12fdcde501d507a5461ef8b15bfe2f57979cd03c", + "composition/export.mjs": "ccc84dee42d59b1d2b09f16aec2b77a774765dd6fab0f341b01f1043a2e88225", + "composition/memory-provider.mjs": "edf6a7567ead756dc4a5c15d5b5b14f4d4314db31e3aa3c01c8ec543754fcc31", + "composition/purchase-flow.mjs": "ce6f98426c36eab346e900ac06ed31f2d387e542c518a48c92a67f7bae147ec8", + "composition/run.mjs": "f9a3eb73861369f87cc3fe53fb256b5bc21f7fb4724610061eacf68d0b08f191", + "consumer.mjs": "8c1dc8d44eeee630aa2a27b19b7594cc41108b38f6745a503a57c92f2a4f24f7", + "contract.mjs": "c97b51ed48875303c382059af5dc321005d677ab2ea834a6e00c060308bc2ab2", + "dashboard.html": "7a3e5f09ff7758af42c63bf1ea1d972bcb00193d3c276618d224df7abc7c5674", + "erasure.mjs": "019cb67fba68fe0dee0937db6bcbdec5036090a49672d7769de7ba91d52f7d24", + "export-docs.mjs": "47cf25c7ba1942fb833ac6b496c1e06b4ae06a61f6328330c6a6a4337c164f84", + "package-lock.json": "6f5333cc45203d6a27fec82c9370a8c25fef7faab591467dd2ff3c79acd6ae1c", + "package.json": "cc6a39b0fae3c66c1ef5c7b472d2b67babbc935514cfed4c6304a4c35d078bf4", + "provider.mjs": "e5c498cf01beedab756058f62cbeb5a533477ebb9da1b6064d48f4003e524094", + "scenario.mjs": "b8ff9024afd67701b5f70916a61fa7d538eaec281aa4b5cc660e1c205932a32d", + "server.mjs": "b0f185a3954fbe1d7a4dd15f0dc8638afcf04e386ec730ae17a15860784d9e36", + "verify-checkpoints.mjs": "ece22b0480bafa41ad8c65e37a5705eaf67c3f8b47c62339f9b1b33a90edd6d2", + "verify-erasure.mjs": "65feaff2e8eb0a3247ecdbc0f511c8eef5e07a4c2c63155b07409ba7cb19be88", + "verify.mjs": "942f1cd3f663dd84350a20fba459f707436a82c691469caf2c2f36155fbd5b72", + "webhooks.mjs": "02db2077e38ca4929537d58be41c13b35d5c8f16cacf829e8ad4b0bded9e322f" + }, + "checks": [ + "Fixture request matches the installed schema", + "Capabilities use the published response schema", + "Purchase storage starts empty", + "No profile conformance is claimed", + "Fixture evidence is accepted", + "Verification does not grant access", + "Invalid evidence produces a negative verdict", + "An upstream outage is not a negative verdict", + "Verification credentials cannot bind a user", + "The server binds Alice", + "Repeating the same binding succeeds", + "Bob cannot take Alice's purchase", + "Alice can access Premium", + "First binding queues one grant; repeat and conflict queue none", + "Cancellation keeps paid access", + "Cancellation stops renewal", + "Cancellation queues one event", + "A 503 leaves a durable retry", + "Retry survives provider restart", + "Retry keeps the delivery identity", + "Redelivery has one inbox row per event", + "Access closes at expiry before a notification arrives", + "Duplicate store notification emits no extra event", + "Reopening both databases preserves state", + "Receiver deduplication survives restart", + "All four events reach the receiver", + "The final status is inactive", + "Signature vector: single-key", + "Receiver accepts vector: single-key", + "Signature vector: retry-after-backoff", + "Receiver accepts vector: retry-after-backoff", + "Signature vector: raw-utf8-body", + "Receiver accepts vector: raw-utf8-body", + "Signature vector: during-rotation", + "Receiver accepts vector: during-rotation", + "Signature vector: minimal-event-omits-extensions", + "Receiver accepts vector: minimal-event-omits-extensions", + "Receiver rejects: tampered-body", + "Receiver rejects: wrong-secret", + "Receiver rejects: timestamp-outside-tolerance", + "Receiver rejects: timestamp-not-in-signed-material", + "Receiver rejects: retry-reuses-first-signature", + "Receiver rejects: garbage-appended-to-valid-signature", + "Active: before expiry", + "Active: at expiry", + "Active: no deadline", + "InGracePeriod: before expiry", + "InGracePeriod: at expiry", + "InGracePeriod: no deadline", + "InBillingRetry: before expiry", + "InBillingRetry: at expiry", + "InBillingRetry: no deadline", + "Paused: before expiry", + "Paused: at expiry", + "Paused: no deadline", + "Expired: before expiry", + "Expired: at expiry", + "Expired: no deadline", + "Revoked: before expiry", + "Revoked: at expiry", + "Revoked: no deadline", + "Refunded: before expiry", + "Refunded: at expiry", + "Refunded: no deadline", + "Unknown: before expiry", + "Unknown: at expiry", + "Unknown: no deadline", + "FutureState: before expiry", + "FutureState: at expiry", + "FutureState: no deadline", + "Missing credentials are refused", + "Verification role cannot enumerate users", + "Malformed input is refused", + "A real store is not falsely accepted", + "Erasure rejects verification credentials", + "Cancellation after expiry is ignored", + "Expired fixture evidence has an expired verdict", + "Tampered HTTP body has no inbox effect", + "Changed UTF-8 bytes cannot reuse a signature", + "Inserted UTF-8 BOM cannot reuse a signature", + "Authenticated malformed UTF-8 is rejected before storage", + "Authentic Unicode bytes are accepted and stored", + "Authentic BOM bytes are verified before decoding", + "Receiver still has exactly four events", + "Cross-origin demo mutations are refused", + "Overlapping HTTP ownership claims have one winner", + "A cancellation older than the active row is ignored", + "Ignoring an old cancellation preserves renewal", + "Conflicting expiry is not consumed", + "Outbox failure rolls back subscription state", + "Failed transaction leaves the observation retryable", + "Exhausted retries enter dead-letter", + "Grant failure rejects binding", + "Grant failure rolls back ownership", + "An expired purchase can be bound", + "Binding expired evidence emits no grant", + "Delayed binding retains the store occurrence", + "Delayed binding records its actual processing time", + "Late expiry revokes a persisted grant exactly once", + "Repeated expiry emits no second revocation", + "Equal-time expiry retains its lifecycle transition", + "Equal-time observations revoke once and preserve both transitions", + "Health accepts the proxy public Host header", + "subscription.started: authenticated and saved", + "subscription.started: redelivery deduplicated", + "subscription.started: tampering rejected", + "entitlement.granted: authenticated and saved", + "entitlement.granted: redelivery deduplicated", + "entitlement.granted: tampering rejected", + "subscription.renewed: authenticated and saved", + "subscription.renewed: redelivery deduplicated", + "subscription.renewed: tampering rejected", + "subscription.canceled: authenticated and saved", + "subscription.canceled: redelivery deduplicated", + "subscription.canceled: tampering rejected", + "subscription.expired: authenticated and saved", + "subscription.expired: redelivery deduplicated", + "subscription.expired: tampering rejected", + "entitlement.revoked: authenticated and saved", + "entitlement.revoked: redelivery deduplicated", + "entitlement.revoked: tampering rejected", + "subscription.refunded: authenticated and saved", + "subscription.refunded: redelivery deduplicated", + "subscription.refunded: tampering rejected", + "One inbox record per event", + "Inbox survives reopening SQLite", + "apple: maps evidence without forwarding client identity", + "apple: matches the installed verification input schema", + "google: maps evidence without forwarding client identity", + "google: matches the installed verification input schema", + "Rejects missing purchase", + "Rejects unknown store", + "Rejects Amazon needs its own adapter", + "Rejects Horizon needs its own adapter", + "Rejects missing evidence", + "Rejects blank evidence", + "Rejects non-string evidence", + "Rejects oversized evidence", + "An active purchase has a delivered event copy", + "Erasure during delivery completes", + "An in-flight event cannot resurrect receiver data", + "An in-flight acknowledgement cannot resurrect the outbox", + "Repeated erase survives restart", + "An old signed event remains discarded after restart", + "A new event ID cannot bypass erasure", + "Verification cannot bind an erased purchase", + "Stale binding cannot restore an erased account", + "Another account cannot claim erased evidence", + "Erased account is inactive before paid expiry", + "Late lifecycle processing carries no erased identity", + "Persisted protocol records contain no erased user ID", + "Unknown-user erasure is accepted", + "Verification credentials cannot erase users", + "Provider erasure completes", + "Erasure retry after restart returns the same job", + "Purchase has no account identity", + "App event copies are erased", + "Erased account has no access", + "A stale binding retry cannot restore identity" + ], + "history": [ + { + "step": 1, + "title": "Start with the contract", + "built": "HTTP routes + schema validation + SQLite", + "result": "A running server, an empty purchase table, and no access.", + "simulatedTime": "2026-09-07T09:00:00.000Z", + "purchases": [], + "access": { + "userId": "demo_alice", + "productIds": [], + "subscriptions": [] + }, + "deliveries": [], + "inboxCount": 0, + "responses": [ + { + "operation": "providerCapabilities", + "httpStatus": 200, + "body": { + "specVersion": "1.0", + "implementation": { + "name": "Commerce Protocol Example — fictional fixture store" + }, + "eventTypes": [ + "entitlement.granted", + "subscription.canceled", + "subscription.expired", + "entitlement.revoked" + ], + "stores": { + "fixture": { + "initialValidation": { + "provider": true, + "implementation": true, + "notes": "Local fixture demonstration only; no real store integration or profile conformance claim." + }, + "serverNotifications": { + "provider": true, + "implementation": true, + "notes": "Local fixture demonstration only; no real store integration or profile conformance claim." + }, + "subscriptions": { + "provider": true, + "implementation": true, + "notes": "Local fixture demonstration only; no real store integration or profile conformance claim." + }, + "renewalEvents": { + "provider": false, + "implementation": false, + "notes": "Local fixture demonstration only; no real store integration or profile conformance claim." + }, + "refundEvents": { + "provider": false, + "implementation": false, + "notes": "Local fixture demonstration only; no real store integration or profile conformance claim." + }, + "expiration": { + "provider": true, + "implementation": true, + "notes": "Local fixture demonstration only; no real store integration or profile conformance claim." + }, + "reconciliation": { + "provider": false, + "implementation": false, + "notes": "Local fixture demonstration only; no real store integration or profile conformance claim." + }, + "entitlements": { + "provider": true, + "implementation": true, + "notes": "Local fixture demonstration only; no real store integration or profile conformance claim." + }, + "revenueAmount": { + "provider": false, + "implementation": false, + "notes": "Local fixture demonstration only; no real store integration or profile conformance claim." + } + } + } + } + }, + { + "operation": "providerCapabilities", + "httpStatus": 200, + "body": { + "specVersion": "1.0", + "implementation": { + "name": "Commerce Protocol Example — fictional fixture store" + }, + "eventTypes": [ + "entitlement.granted", + "subscription.canceled", + "subscription.expired", + "entitlement.revoked" + ], + "stores": { + "fixture": { + "initialValidation": { + "provider": true, + "implementation": true, + "notes": "Local fixture demonstration only; no real store integration or profile conformance claim." + }, + "serverNotifications": { + "provider": true, + "implementation": true, + "notes": "Local fixture demonstration only; no real store integration or profile conformance claim." + }, + "subscriptions": { + "provider": true, + "implementation": true, + "notes": "Local fixture demonstration only; no real store integration or profile conformance claim." + }, + "renewalEvents": { + "provider": false, + "implementation": false, + "notes": "Local fixture demonstration only; no real store integration or profile conformance claim." + }, + "refundEvents": { + "provider": false, + "implementation": false, + "notes": "Local fixture demonstration only; no real store integration or profile conformance claim." + }, + "expiration": { + "provider": true, + "implementation": true, + "notes": "Local fixture demonstration only; no real store integration or profile conformance claim." + }, + "reconciliation": { + "provider": false, + "implementation": false, + "notes": "Local fixture demonstration only; no real store integration or profile conformance claim." + }, + "entitlements": { + "provider": true, + "implementation": true, + "notes": "Local fixture demonstration only; no real store integration or profile conformance claim." + }, + "revenueAmount": { + "provider": false, + "implementation": false, + "notes": "Local fixture demonstration only; no real store integration or profile conformance claim." + } + } + } + } + } + ], + "checks": [ + "Fixture request matches the installed schema", + "Capabilities use the published response schema", + "Purchase storage starts empty", + "No profile conformance is claimed" + ], + "totalChecks": 4 + }, + { + "step": 2, + "title": "Verify a purchase", + "built": "Fixture store adapter + purchase persistence", + "result": "Valid evidence is saved. Alice still has no access.", + "simulatedTime": "2026-09-07T09:00:00.000Z", + "purchases": [ + { + "userId": null, + "productId": "premium.monthly", + "state": "Active", + "willRenew": 1 + } + ], + "access": { + "userId": "demo_alice", + "productIds": [], + "subscriptions": [] + }, + "deliveries": [], + "inboxCount": 0, + "responses": [ + { + "operation": "verifyPurchase", + "httpStatus": 200, + "body": { + "store": "fixture", + "isValid": true, + "state": "ENTITLED", + "productId": "premium.monthly", + "environment": "local-fixture" + } + }, + { + "operation": "entitlements", + "httpStatus": 200, + "body": { + "userId": "demo_alice", + "productIds": [], + "subscriptions": [] + } + }, + { + "operation": "verifyPurchase", + "httpStatus": 200, + "body": { + "store": "fixture", + "isValid": false, + "state": "INAUTHENTIC", + "environment": "local-fixture" + } + }, + { + "operation": "verifyPurchase", + "httpStatus": 502, + "body": { + "error": { + "code": "VERIFICATION_FAILED", + "message": "verification failed" + } + } + } + ], + "checks": [ + "Fixture evidence is accepted", + "Verification does not grant access", + "Invalid evidence produces a negative verdict", + "An upstream outage is not a negative verdict" + ], + "totalChecks": 8 + }, + { + "step": 3, + "title": "Connect it to a user", + "built": "Server authorization + atomic binding + entitlement reads", + "result": "Alice gets Premium. Another user cannot take the purchase.", + "simulatedTime": "2026-09-07T09:00:00.000Z", + "purchases": [ + { + "userId": "demo_alice", + "productId": "premium.monthly", + "state": "Active", + "willRenew": 1 + } + ], + "access": { + "userId": "demo_alice", + "productIds": [ + "premium.monthly" + ], + "subscriptions": [ + { + "productId": "premium.monthly", + "state": "Active", + "active": true, + "store": "fixture", + "expiresAt": 1791363600000, + "willRenew": true + } + ] + }, + "deliveries": [ + { + "eventId": "f430ce42-5989-4aea-85ff-c8529b6245ad", + "deliveryId": "5f641cce-2aa4-4fcc-8afb-e5e30b60120d", + "attempts": 0, + "status": "pending", + "eventType": "entitlement.granted" + } + ], + "inboxCount": 0, + "responses": [ + { + "operation": "bindPurchase", + "httpStatus": 403, + "body": { + "error": { + "code": "FORBIDDEN", + "message": "forbidden" + } + } + }, + { + "operation": "bindPurchase", + "httpStatus": 200, + "body": { + "bound": true + } + }, + { + "operation": "bindPurchase", + "httpStatus": 200, + "body": { + "bound": true + } + }, + { + "operation": "bindPurchase", + "httpStatus": 200, + "body": { + "bound": false + } + }, + { + "operation": "entitlements", + "httpStatus": 200, + "body": { + "userId": "demo_alice", + "productIds": [ + "premium.monthly" + ], + "subscriptions": [ + { + "productId": "premium.monthly", + "state": "Active", + "active": true, + "store": "fixture", + "expiresAt": 1791363600000, + "willRenew": true + } + ] + } + } + ], + "checks": [ + "Verification credentials cannot bind a user", + "The server binds Alice", + "Repeating the same binding succeeds", + "Bob cannot take Alice's purchase", + "Alice can access Premium", + "First binding queues one grant; repeat and conflict queue none" + ], + "totalChecks": 14 + }, + { + "step": 4, + "title": "Handle cancellation", + "built": "Lifecycle processing + transactional event outbox", + "result": "Renewal stops. Alice keeps the time she already paid for.", + "simulatedTime": "2026-09-08T09:00:00.000Z", + "purchases": [ + { + "userId": "demo_alice", + "productId": "premium.monthly", + "state": "Active", + "willRenew": 0 + } + ], + "access": { + "userId": "demo_alice", + "productIds": [ + "premium.monthly" + ], + "subscriptions": [ + { + "productId": "premium.monthly", + "state": "Active", + "active": true, + "store": "fixture", + "expiresAt": 1791363600000, + "willRenew": false + } + ] + }, + "deliveries": [ + { + "eventId": "f430ce42-5989-4aea-85ff-c8529b6245ad", + "deliveryId": "5f641cce-2aa4-4fcc-8afb-e5e30b60120d", + "attempts": 0, + "status": "pending", + "eventType": "entitlement.granted" + }, + { + "eventId": "5a8247ae-b80d-4e39-b079-e7de56e50105", + "deliveryId": "a749f2ea-c1a3-400e-88d8-bdc925f09b4f", + "attempts": 0, + "status": "pending", + "eventType": "subscription.canceled" + } + ], + "inboxCount": 0, + "responses": [ + { + "operation": "subscriptionStatus", + "httpStatus": 200, + "body": { + "active": true, + "subscription": { + "productId": "premium.monthly", + "state": "Active", + "active": true, + "store": "fixture", + "expiresAt": 1791363600000, + "willRenew": false + } + } + } + ], + "checks": [ + "Cancellation keeps paid access", + "Cancellation stops renewal", + "Cancellation queues one event" + ], + "totalChecks": 17 + }, + { + "step": 5, + "title": "Deliver, retry, deduplicate", + "built": "HMAC signatures + retry worker + durable receiver inbox", + "result": "A 503 retries successfully. Redelivery creates no second inbox row.", + "simulatedTime": "2026-09-08T09:00:31.000Z", + "purchases": [ + { + "userId": "demo_alice", + "productId": "premium.monthly", + "state": "Active", + "willRenew": 0 + } + ], + "access": { + "userId": "demo_alice", + "productIds": [ + "premium.monthly" + ], + "subscriptions": [ + { + "productId": "premium.monthly", + "state": "Active", + "active": true, + "store": "fixture", + "expiresAt": 1791363600000, + "willRenew": false + } + ] + }, + "deliveries": [ + { + "eventId": "f430ce42-5989-4aea-85ff-c8529b6245ad", + "deliveryId": "5f641cce-2aa4-4fcc-8afb-e5e30b60120d", + "attempts": 3, + "status": "delivered", + "eventType": "entitlement.granted" + }, + { + "eventId": "5a8247ae-b80d-4e39-b079-e7de56e50105", + "deliveryId": "a749f2ea-c1a3-400e-88d8-bdc925f09b4f", + "attempts": 3, + "status": "delivered", + "eventType": "subscription.canceled" + } + ], + "inboxCount": 2, + "responses": [ + { + "operation": "webhook: receiver unavailable", + "body": [ + { + "eventId": "f430ce42-5989-4aea-85ff-c8529b6245ad", + "deliveryId": "5f641cce-2aa4-4fcc-8afb-e5e30b60120d", + "httpStatus": 503, + "attempt": 1, + "status": "pending" + }, + { + "eventId": "5a8247ae-b80d-4e39-b079-e7de56e50105", + "deliveryId": "a749f2ea-c1a3-400e-88d8-bdc925f09b4f", + "httpStatus": 503, + "attempt": 1, + "status": "pending" + } + ] + }, + { + "operation": "webhook: retry after restart", + "body": [ + { + "eventId": "f430ce42-5989-4aea-85ff-c8529b6245ad", + "deliveryId": "5f641cce-2aa4-4fcc-8afb-e5e30b60120d", + "httpStatus": 200, + "attempt": 2, + "status": "delivered" + }, + { + "eventId": "5a8247ae-b80d-4e39-b079-e7de56e50105", + "deliveryId": "a749f2ea-c1a3-400e-88d8-bdc925f09b4f", + "httpStatus": 200, + "attempt": 2, + "status": "delivered" + } + ] + }, + { + "operation": "webhook: lost-ack redelivery", + "body": [ + { + "eventId": "f430ce42-5989-4aea-85ff-c8529b6245ad", + "deliveryId": "5f641cce-2aa4-4fcc-8afb-e5e30b60120d", + "httpStatus": 200, + "attempt": 3, + "status": "delivered" + }, + { + "eventId": "5a8247ae-b80d-4e39-b079-e7de56e50105", + "deliveryId": "a749f2ea-c1a3-400e-88d8-bdc925f09b4f", + "httpStatus": 200, + "attempt": 3, + "status": "delivered" + } + ] + } + ], + "checks": [ + "A 503 leaves a durable retry", + "Retry survives provider restart", + "Retry keeps the delivery identity", + "Redelivery has one inbox row per event" + ], + "totalChecks": 21 + }, + { + "step": 6, + "title": "Expire access and restart", + "built": "Expiry-aware reads + recovery from SQLite", + "result": "Access closes at the deadline. Restarting preserves purchases and deliveries.", + "simulatedTime": "2026-10-07T09:00:00.000Z", + "purchases": [ + { + "userId": "demo_alice", + "productId": "premium.monthly", + "state": "Expired", + "willRenew": 0 + } + ], + "access": { + "userId": "demo_alice", + "productIds": [], + "subscriptions": [] + }, + "deliveries": [ + { + "eventId": "f430ce42-5989-4aea-85ff-c8529b6245ad", + "deliveryId": "5f641cce-2aa4-4fcc-8afb-e5e30b60120d", + "attempts": 3, + "status": "delivered", + "eventType": "entitlement.granted" + }, + { + "eventId": "5a8247ae-b80d-4e39-b079-e7de56e50105", + "deliveryId": "a749f2ea-c1a3-400e-88d8-bdc925f09b4f", + "attempts": 3, + "status": "delivered", + "eventType": "subscription.canceled" + }, + { + "eventId": "f7803d1b-c81c-495b-b477-b24e17c6aa21", + "deliveryId": "6e0bb01e-185c-4d63-9016-c02dd7be282d", + "attempts": 1, + "status": "delivered", + "eventType": "subscription.expired" + }, + { + "eventId": "d1fb27e7-5a07-4cd9-9ddf-0740d4c02c5f", + "deliveryId": "96e6c878-88de-4177-82cc-9018e69dc9b5", + "attempts": 1, + "status": "delivered", + "eventType": "entitlement.revoked" + } + ], + "inboxCount": 4, + "responses": [ + { + "operation": "entitlements", + "httpStatus": 200, + "body": { + "userId": "demo_alice", + "productIds": [], + "subscriptions": [] + } + }, + { + "operation": "webhook: expiry + revocation", + "body": [ + { + "eventId": "f7803d1b-c81c-495b-b477-b24e17c6aa21", + "deliveryId": "6e0bb01e-185c-4d63-9016-c02dd7be282d", + "httpStatus": 200, + "attempt": 1, + "status": "delivered" + }, + { + "eventId": "d1fb27e7-5a07-4cd9-9ddf-0740d4c02c5f", + "deliveryId": "96e6c878-88de-4177-82cc-9018e69dc9b5", + "httpStatus": 200, + "attempt": 1, + "status": "delivered" + } + ] + }, + { + "operation": "subscriptionStatus", + "httpStatus": 200, + "body": { + "active": false, + "subscription": { + "productId": "premium.monthly", + "state": "Expired", + "active": false, + "store": "fixture", + "expiresAt": 1791363600000, + "willRenew": false + } + } + } + ], + "checks": [ + "Access closes at expiry before a notification arrives", + "Duplicate store notification emits no extra event", + "Reopening both databases preserves state", + "Receiver deduplication survives restart", + "All four events reach the receiver", + "The final status is inactive" + ], + "totalChecks": 27 + }, + { + "step": 7, + "title": "Delete the account", + "built": "Idempotent erasure + receiver cleanup + durable deletion guard", + "result": "Alice is removed from purchases and event copies. Late deliveries cannot restore her account data.", + "simulatedTime": "2026-10-07T09:00:00.000Z", + "purchases": [ + { + "userId": null, + "productId": "premium.monthly", + "state": "Expired", + "willRenew": 0 + } + ], + "access": { + "userId": "demo_alice", + "productIds": [], + "subscriptions": [] + }, + "deliveries": [], + "inboxCount": 0, + "responses": [ + { + "operation": "eraseUser", + "httpStatus": 403, + "body": { + "error": { + "code": "FORBIDDEN", + "message": "forbidden" + } + } + }, + { + "operation": "eraseUser", + "httpStatus": 202, + "body": { + "accepted": true, + "jobId": "179e6eac-1acd-4a80-bf2d-cba9ad65bebf", + "status": "completed" + } + }, + { + "operation": "eraseUser", + "httpStatus": 202, + "body": { + "accepted": true, + "jobId": "179e6eac-1acd-4a80-bf2d-cba9ad65bebf", + "status": "completed" + } + }, + { + "operation": "entitlements", + "httpStatus": 200, + "body": { + "userId": "demo_alice", + "productIds": [], + "subscriptions": [] + } + }, + { + "operation": "bindPurchase", + "httpStatus": 200, + "body": { + "bound": false + } + } + ], + "checks": [ + "Verification credentials cannot erase users", + "Provider erasure completes", + "Erasure retry after restart returns the same job", + "Purchase has no account identity", + "App event copies are erased", + "Erased account has no access", + "A stale binding retry cannot restore identity" + ], + "totalChecks": 34 + } + ], + "screenshot": "screen.png", + "scope": "Incremental implementation of the installed Commerce Protocol contract. HTTP, SQLite and signatures execute locally; store and clock are fixtures. No full profile claim." +} diff --git a/packages/docs/public/commerce-example/07-account-erasure/screen.png b/packages/docs/public/commerce-example/07-account-erasure/screen.png new file mode 100644 index 0000000000000000000000000000000000000000..9959620c741734a1af1c958dad1693d8f580b8ea GIT binary patch literal 129885 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 TXib5C0h18@AW|-*=l%Zxy@ezL literal 0 HcmV?d00001 diff --git a/packages/docs/public/commerce-example/07-account-erasure/source.tar.gz b/packages/docs/public/commerce-example/07-account-erasure/source.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..4bdd9ca781e0af319f94b3c3b5bde1b637a4a359 GIT binary patch literal 50833 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