create-ailk 0.24.0 → 0.26.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +53 -22
- package/component-catalog.json +3 -3
- package/component-catalog.md +3 -3
- package/dist/add-module.js +4 -2
- package/dist/add-route.d.ts +12 -1
- package/dist/add-route.js +31 -3
- package/dist/cli.js +12 -7
- package/dist/derive-architecture.d.ts +3 -4
- package/dist/derive-architecture.js +65 -29
- package/dist/lib/design-checks.d.ts +9 -4
- package/dist/lib/design-checks.js +13 -7
- package/dist/lib/extract-module-bundle.js +29 -2
- package/dist/lib/fetch-template-snapshot.d.ts +2 -1
- package/dist/lib/fetch-template-snapshot.js +8 -3
- package/dist/lib/import-graph.d.ts +1 -1
- package/dist/lib/import-graph.js +4 -4
- package/dist/lib/module-license-gate.d.ts +12 -1
- package/dist/lib/module-license-gate.js +36 -15
- package/dist/lib/module-tier.d.ts +2 -8
- package/dist/lib/module-tier.js +13 -12
- package/dist/module-architecture.d.ts +20 -3
- package/dist/module-architecture.js +129 -552
- package/dist/paid-sections.d.ts +25 -1
- package/dist/paid-sections.js +88 -3
- package/dist/starter-grid.d.ts +6 -6
- package/dist/starter-grid.js +12 -5
- package/dist/surfaces.js +39 -2
- package/dist/template-record.d.ts +21 -3
- package/dist/template-record.js +38 -7
- package/dist/topology.d.ts +16 -3
- package/dist/topology.js +54 -23
- package/dist/update.d.ts +10 -1
- package/dist/update.js +715 -21
- package/package.json +3 -3
- package/release-scope.json +2 -2
- package/site-templates/marketing-site/TEMPLATE-MANIFEST.json +8 -2
- package/site-templates/marketing-site/TEMPLATE-MANIFEST.md +2 -2
- package/site-templates/marketing-site/ailk-template.json +7 -1
- package/site-templates/marketing-site/provenance.json +7 -1
- package/site-templates/saas-product/ailk-template.json +2 -1
- package/site-templates/saas-product/provenance.json +1 -0
- package/templates/.claude/cloudparity-repo-hooks.json +5 -0
- package/templates/.claude/hooks/template-guard.sh +137 -0
- package/templates/.claude/rules/extending.md +106 -0
- package/templates/.claude/rules/loop-contract.md +2 -2
- package/templates/.claude/settings.json +11 -0
- package/templates/.env.example +20 -5
- package/templates/.github/workflows/ci.yml +7 -4
- package/templates/CLAUDE.md +11 -1
- package/templates/CONVENTIONS.md +8 -10
- package/templates/README.md +14 -13
- package/templates/apps/api/.env.example +23 -2
- package/templates/apps/api/CLAUDE.md +119 -83
- package/templates/apps/api/jest.config.cjs +15 -5
- package/templates/apps/api/package.json +16 -20
- package/templates/apps/api/src/__tests__/trusted-origins.server.test.ts +2 -2
- package/templates/apps/api/src/__tests__/vercel-handler.test.ts +4 -4
- package/templates/apps/api/src/index.ts +1 -1
- package/templates/apps/api/src/lib/__mocks__/prisma-client.js +16 -0
- package/templates/apps/api/src/lib/__mocks__/prisma.ts +3 -3
- package/templates/apps/api/src/modules/commerce.ts +10 -0
- package/templates/apps/api/src/modules/content-write.ts +10 -0
- package/templates/apps/api/src/modules/multi-tenant.ts +10 -0
- package/templates/apps/api/src/modules/scheduling.ts +10 -0
- package/templates/apps/api/src/modules/signal-collectors.ts +10 -0
- package/templates/apps/api/src/modules/workspace.ts +10 -0
- package/templates/apps/api/src/server.ts +117 -1882
- package/templates/apps/api/vercel.json +2 -2
- package/templates/apps/mcp/CLAUDE.md +90 -26
- package/templates/apps/mcp/__tests__/app-entry.test.ts +4 -254
- package/templates/apps/mcp/__tests__/boot-file.test.ts +92 -0
- package/templates/apps/mcp/jest.config.cjs +6 -1
- package/templates/apps/mcp/package.json +5 -13
- package/templates/apps/mcp/src/app.ts +8 -7
- package/templates/apps/mcp/src/index.ts +6 -34
- package/templates/apps/mcp/src/lib/paid-tools.generated.ts +10 -0
- package/templates/apps/mcp/src/lib/topology.generated.ts +2 -2
- package/templates/apps/mcp/src/site.ts +12 -0
- package/templates/apps/web/.env.example +1 -1
- package/templates/apps/web/CLAUDE.md +31 -3
- package/templates/apps/web/app/.well-known/mcp.json/route.ts +9 -3
- package/templates/apps/web/app/[locale]/(auth)/__tests__/auth-pages.test.tsx +43 -4
- package/templates/apps/web/app/[locale]/(auth)/legal-footnote.tsx +35 -0
- package/templates/apps/web/app/[locale]/(auth)/sign-in/__tests__/page.test.tsx +117 -8
- package/templates/apps/web/app/[locale]/(auth)/sign-in/page.tsx +14 -37
- package/templates/apps/web/app/[locale]/(auth)/sign-in/sign-in-card.tsx +6 -6
- package/templates/apps/web/app/[locale]/(auth)/sign-in/sign-in-text.ts +20 -35
- package/templates/apps/web/app/[locale]/(auth)/sign-up/__tests__/page.test.tsx +108 -0
- package/templates/apps/web/app/[locale]/(auth)/sign-up/__tests__/sign-up-card.test.tsx +111 -5
- package/templates/apps/web/app/[locale]/(auth)/sign-up/page.tsx +78 -16
- package/templates/apps/web/app/[locale]/(auth)/sign-up/sign-up-card.tsx +132 -12
- package/templates/apps/web/app/[locale]/(authed)/__tests__/gate.test.tsx +53 -1
- package/templates/apps/web/app/[locale]/(authed)/account/__tests__/billing.test.tsx +38 -0
- package/templates/apps/web/app/[locale]/(authed)/account/billing/page.tsx +4 -2
- package/templates/apps/web/app/[locale]/(authed)/sign-in-gate.tsx +47 -24
- package/templates/apps/web/app/[locale]/(authed)/signed-out-gate.generated.tsx +23 -4
- package/templates/apps/web/app/[locale]/contact/intake-analytics.ts +1 -1
- package/templates/apps/web/app/[locale]/flows/[slug]/__tests__/magnet-page.test.tsx +22 -1
- package/templates/apps/web/app/[locale]/flows/[slug]/magnet-page.tsx +7 -3
- package/templates/apps/web/app/[locale]/layout.tsx +33 -13
- package/templates/apps/web/app/[locale]/meet/confirmed/BookingHandOff.tsx +128 -0
- package/templates/apps/web/app/[locale]/meet/confirmed/__tests__/BookingHandOff.test.tsx +126 -0
- package/templates/apps/web/app/[locale]/pricing/__tests__/unconnected.test.tsx +43 -0
- package/templates/apps/web/app/[locale]/pricing/page.tsx +7 -3
- package/templates/apps/web/app/api/offerings/checkout/[lookupKey]/__tests__/route.test.ts +222 -0
- package/templates/apps/web/app/api/offerings/checkout/[lookupKey]/route.ts +10 -3
- package/templates/apps/web/app/api/revalidate/route.ts +3 -3
- package/templates/apps/web/auth.ts +10 -6
- package/templates/apps/web/i18n/request.ts +49 -1
- package/templates/apps/web/jest.config.cjs +1 -0
- package/templates/apps/web/lib/__tests__/account-config.test.ts +7 -0
- package/templates/apps/web/lib/__tests__/auth-email.test.ts +276 -0
- package/templates/apps/web/lib/auth-email.ts +103 -21
- package/templates/apps/web/lib/hub-session/__tests__/sign-in-gate.test.tsx +72 -23
- package/templates/apps/web/lib/hub-session/sign-in-gate.tsx +94 -70
- package/templates/apps/web/lib/prisma-for-auth.ts +5 -2
- package/templates/apps/web/lib/relay.ts +2 -2
- package/templates/apps/web/lib/release-scope.ts +47 -0
- package/templates/apps/web/lib/server-api.ts +1 -1
- package/templates/apps/web/lib/sign-up-agreements.ts +291 -28
- package/templates/apps/web/lib/site-contributions.ts +18 -0
- package/templates/apps/web/messages/en.json +186 -20
- package/templates/apps/web/messages/site/en.json +1 -0
- package/templates/apps/web/src/lib/commerce-claim.ts +1 -1
- package/templates/customizations.yaml +37 -0
- package/templates/database/prisma.config.ts +10 -14
- package/templates/database/seed-test.ts +2 -2
- package/templates/database/seed.ts +5 -5
- package/templates/package.json +12 -6
- package/templates/pnpm-workspace.yaml +0 -1
- package/templates/project.yaml +16 -8
- package/templates/tools/jest/reporters.cjs +65 -0
- package/templates/tools/lint-architecture.ts +553 -7
- package/templates/tsconfig.json +1 -2
- package/versions.json +49 -36
- package/templates/apps/api/src/__tests__/commerce-claim-registration.test.ts +0 -409
- package/templates/apps/api/src/__tests__/factories/agent-caller.ts +0 -102
- package/templates/apps/api/src/__tests__/factories/content-fixture.ts +0 -138
- package/templates/apps/api/src/__tests__/factories/in-memory-prisma.ts +0 -441
- package/templates/apps/api/src/__tests__/factories/index.ts +0 -70
- package/templates/apps/api/src/__tests__/factories/lead-fixture.ts +0 -82
- package/templates/apps/api/src/__tests__/leads-forwarded-rate-limit.test.ts +0 -135
- package/templates/apps/api/src/__tests__/services/enrichment-shim.test.ts +0 -126
- package/templates/apps/api/src/__tests__/stripe-boot.test.ts +0 -132
- package/templates/apps/api/src/__tests__/support/hub-sign-in-fake-db.ts +0 -362
- package/templates/apps/api/src/bin/__tests__/rate-limit-probe.test.ts +0 -184
- package/templates/apps/api/src/bin/abandon-sweep.ts +0 -42
- package/templates/apps/api/src/bin/rate-limit-probe.ts +0 -53
- package/templates/apps/api/src/bin/spokes.ts +0 -198
- package/templates/apps/api/src/bin/stripe-connections-rekey.ts +0 -45
- package/templates/apps/api/src/config/__tests__/hub-require-spoke-key.test.ts +0 -196
- package/templates/apps/api/src/config/__tests__/index.test.ts +0 -233
- package/templates/apps/api/src/config/__tests__/modules.test.ts +0 -76
- package/templates/apps/api/src/config/__tests__/stripe-connection-key.test.ts +0 -185
- package/templates/apps/api/src/config/__tests__/trusted-origins.test.ts +0 -238
- package/templates/apps/api/src/config/index.ts +0 -596
- package/templates/apps/api/src/config/modules.ts +0 -83
- package/templates/apps/api/src/lib/__tests__/agent-store.test.ts +0 -581
- package/templates/apps/api/src/lib/__tests__/auth-email-budget.test.ts +0 -143
- package/templates/apps/api/src/lib/__tests__/consent-ledger-double.ts +0 -237
- package/templates/apps/api/src/lib/__tests__/consent-store.test.ts +0 -353
- package/templates/apps/api/src/lib/__tests__/content-adapter.test.ts +0 -201
- package/templates/apps/api/src/lib/__tests__/deliverable-asset-store.test.ts +0 -224
- package/templates/apps/api/src/lib/__tests__/error-serializer.test.ts +0 -120
- package/templates/apps/api/src/lib/__tests__/errors.test.ts +0 -94
- package/templates/apps/api/src/lib/__tests__/file-fallback.test.ts +0 -144
- package/templates/apps/api/src/lib/__tests__/fixtures/HomePage/home.mdx +0 -8
- package/templates/apps/api/src/lib/__tests__/flow-completion-store.test.ts +0 -149
- package/templates/apps/api/src/lib/__tests__/flow-rename-race.db.test.ts +0 -116
- package/templates/apps/api/src/lib/__tests__/hub-sign-in-store.test.ts +0 -209
- package/templates/apps/api/src/lib/__tests__/lead-capture-store.test.ts +0 -257
- package/templates/apps/api/src/lib/__tests__/lead-delivery.test.ts +0 -96
- package/templates/apps/api/src/lib/__tests__/outbound-http.test.ts +0 -125
- package/templates/apps/api/src/lib/__tests__/prisma.test.ts +0 -165
- package/templates/apps/api/src/lib/__tests__/require-commerce-claim.test.ts +0 -317
- package/templates/apps/api/src/lib/__tests__/require-paid-tier.test.ts +0 -129
- package/templates/apps/api/src/lib/__tests__/site.test.ts +0 -308
- package/templates/apps/api/src/lib/__tests__/slice-load.test.ts +0 -89
- package/templates/apps/api/src/lib/__tests__/spoke-store.test.ts +0 -202
- package/templates/apps/api/src/lib/__tests__/stripe-admission.test.ts +0 -217
- package/templates/apps/api/src/lib/__tests__/stripe.test.ts +0 -82
- package/templates/apps/api/src/lib/agent-store.ts +0 -613
- package/templates/apps/api/src/lib/auth-email-budget.ts +0 -161
- package/templates/apps/api/src/lib/consent-store.ts +0 -363
- package/templates/apps/api/src/lib/content-adapter.ts +0 -112
- package/templates/apps/api/src/lib/deliverable-asset-store.ts +0 -96
- package/templates/apps/api/src/lib/error-serializer.ts +0 -164
- package/templates/apps/api/src/lib/errors.ts +0 -95
- package/templates/apps/api/src/lib/file-fallback.ts +0 -87
- package/templates/apps/api/src/lib/flow-completion-store.ts +0 -136
- package/templates/apps/api/src/lib/hub-sign-in-store.ts +0 -455
- package/templates/apps/api/src/lib/lead-capture-store.ts +0 -122
- package/templates/apps/api/src/lib/lead-delivery.ts +0 -52
- package/templates/apps/api/src/lib/license-key-store.ts +0 -45
- package/templates/apps/api/src/lib/locales.ts +0 -201
- package/templates/apps/api/src/lib/outbound-http.ts +0 -127
- package/templates/apps/api/src/lib/prisma.ts +0 -21
- package/templates/apps/api/src/lib/proposal-paid-store.ts +0 -66
- package/templates/apps/api/src/lib/rate-limit-probe.ts +0 -165
- package/templates/apps/api/src/lib/rate-limit-store.ts +0 -142
- package/templates/apps/api/src/lib/require-commerce-claim.ts +0 -250
- package/templates/apps/api/src/lib/require-paid-tier.ts +0 -53
- package/templates/apps/api/src/lib/site.ts +0 -257
- package/templates/apps/api/src/lib/slice-load.ts +0 -90
- package/templates/apps/api/src/lib/spoke-store.ts +0 -180
- package/templates/apps/api/src/lib/stripe.ts +0 -321
- package/templates/apps/api/src/lib/webhook-idempotency.ts +0 -156
- package/templates/apps/api/src/middleware/__tests__/adversarial/bearer-token-format.test.ts +0 -111
- package/templates/apps/api/src/middleware/__tests__/adversarial/cookie-or-bearer-precedence.test.ts +0 -172
- package/templates/apps/api/src/middleware/__tests__/adversarial/csrf-bearer-skip.test.ts +0 -119
- package/templates/apps/api/src/middleware/__tests__/adversarial/csrf-cookie-path.test.ts +0 -138
- package/templates/apps/api/src/middleware/__tests__/adversarial/csrf-trusted-origins.test.ts +0 -142
- package/templates/apps/api/src/middleware/__tests__/adversarial/session-fixation.test.ts +0 -155
- package/templates/apps/api/src/middleware/__tests__/adversarial/session-timeout.test.ts +0 -139
- package/templates/apps/api/src/middleware/__tests__/auth.bearer-path.test.ts +0 -562
- package/templates/apps/api/src/middleware/__tests__/auth.both-present-precedence.test.ts +0 -76
- package/templates/apps/api/src/middleware/__tests__/auth.cookie-path.test.ts +0 -220
- package/templates/apps/api/src/middleware/__tests__/auth.database-not-configured.test.ts +0 -97
- package/templates/apps/api/src/middleware/__tests__/auth.hub-session-path.test.ts +0 -557
- package/templates/apps/api/src/middleware/__tests__/auth.neither-present.test.ts +0 -72
- package/templates/apps/api/src/middleware/__tests__/auth.optional-cookie.test.ts +0 -140
- package/templates/apps/api/src/middleware/__tests__/default-tenant.test.ts +0 -721
- package/templates/apps/api/src/middleware/__tests__/rate-limit-cross-isolate.db.test.ts +0 -220
- package/templates/apps/api/src/middleware/__tests__/rate-limit-store.test.ts +0 -430
- package/templates/apps/api/src/middleware/__tests__/rate-limit.test.ts +0 -1409
- package/templates/apps/api/src/middleware/__tests__/write-budget.test.ts +0 -174
- package/templates/apps/api/src/middleware/auth.ts +0 -864
- package/templates/apps/api/src/middleware/default-tenant.ts +0 -166
- package/templates/apps/api/src/middleware/rate-limit.ts +0 -983
- package/templates/apps/api/src/openapi/__tests__/openapi.test.ts +0 -391
- package/templates/apps/api/src/openapi/__tests__/spec-identity.test.ts +0 -182
- package/templates/apps/api/src/openapi/index.ts +0 -18
- package/templates/apps/api/src/openapi/spec.ts +0 -2148
- package/templates/apps/api/src/openapi/surface-drift.ts +0 -195
- package/templates/apps/api/src/routes/aeo/__tests__/index.test.ts +0 -175
- package/templates/apps/api/src/routes/aeo/index.ts +0 -107
- package/templates/apps/api/src/routes/auth/__tests__/auth-tokens.functional.test.ts +0 -196
- package/templates/apps/api/src/routes/auth/__tests__/auth-user.functional.test.ts +0 -249
- package/templates/apps/api/src/routes/auth/__tests__/hub-sign-in.test.ts +0 -532
- package/templates/apps/api/src/routes/auth/__tests__/tokens.test.ts +0 -313
- package/templates/apps/api/src/routes/auth/__tests__/transactional-email.test.ts +0 -413
- package/templates/apps/api/src/routes/auth/__tests__/user.test.ts +0 -609
- package/templates/apps/api/src/routes/auth/hub-sign-in.ts +0 -242
- package/templates/apps/api/src/routes/auth/tokens.ts +0 -211
- package/templates/apps/api/src/routes/auth/transactional-email.ts +0 -301
- package/templates/apps/api/src/routes/auth/user.ts +0 -305
- package/templates/apps/api/src/routes/billing/plan-checkout.ts +0 -332
- package/templates/apps/api/src/routes/checkout/__tests__/live-key.test.ts +0 -178
- package/templates/apps/api/src/routes/checkout/__tests__/offerings-authorization.test.ts +0 -1426
- package/templates/apps/api/src/routes/checkout/__tests__/session.test.ts +0 -448
- package/templates/apps/api/src/routes/checkout/__tests__/sessions.test.ts +0 -1742
- package/templates/apps/api/src/routes/checkout/index.ts +0 -34
- package/templates/apps/api/src/routes/checkout/session.ts +0 -171
- package/templates/apps/api/src/routes/checkout/sessions.ts +0 -540
- package/templates/apps/api/src/routes/consent/__tests__/account.test.ts +0 -386
- package/templates/apps/api/src/routes/consent/__tests__/sign-up-rate-limit.test.ts +0 -160
- package/templates/apps/api/src/routes/consent/account.ts +0 -268
- package/templates/apps/api/src/routes/consent/cookie.ts +0 -90
- package/templates/apps/api/src/routes/consent/index.ts +0 -26
- package/templates/apps/api/src/routes/consent/unsubscribe.ts +0 -127
- package/templates/apps/api/src/routes/content/__tests__/get-page.test.ts +0 -853
- package/templates/apps/api/src/routes/content/__tests__/list-pages.test.ts +0 -230
- package/templates/apps/api/src/routes/content/__tests__/list-types.test.ts +0 -44
- package/templates/apps/api/src/routes/content/__tests__/locale.test.ts +0 -118
- package/templates/apps/api/src/routes/content/__tests__/offerings.test.ts +0 -731
- package/templates/apps/api/src/routes/content/__tests__/pricing.test.ts +0 -753
- package/templates/apps/api/src/routes/content/__tests__/rate-limit.test.ts +0 -51
- package/templates/apps/api/src/routes/content/__tests__/search.test.ts +0 -450
- package/templates/apps/api/src/routes/content/__tests__/shown-offerings.test.ts +0 -762
- package/templates/apps/api/src/routes/content/get-page.ts +0 -183
- package/templates/apps/api/src/routes/content/index.ts +0 -49
- package/templates/apps/api/src/routes/content/list-pages.ts +0 -74
- package/templates/apps/api/src/routes/content/list-types.ts +0 -19
- package/templates/apps/api/src/routes/content/offerings.ts +0 -184
- package/templates/apps/api/src/routes/content/pricing.ts +0 -176
- package/templates/apps/api/src/routes/content/rate-limit.ts +0 -22
- package/templates/apps/api/src/routes/content/search.ts +0 -100
- package/templates/apps/api/src/routes/content/shown-offerings.ts +0 -229
- package/templates/apps/api/src/routes/leads/__tests__/capture.test.ts +0 -88
- package/templates/apps/api/src/routes/leads/__tests__/list.test.ts +0 -171
- package/templates/apps/api/src/routes/leads/__tests__/magnet-completion.test.ts +0 -515
- package/templates/apps/api/src/routes/leads/__tests__/spoke.test.ts +0 -392
- package/templates/apps/api/src/routes/leads/__tests__/track.test.ts +0 -165
- package/templates/apps/api/src/routes/leads/index.ts +0 -639
- package/templates/apps/api/src/routes/leads/list.ts +0 -104
- package/templates/apps/api/src/routes/project-listings/__tests__/configured-application.test.ts +0 -626
- package/templates/apps/api/src/routes/project-listings/__tests__/drafts.test.ts +0 -1268
- package/templates/apps/api/src/routes/project-listings/__tests__/founder-identity.test.ts +0 -847
- package/templates/apps/api/src/routes/project-listings/__tests__/me.test.ts +0 -491
- package/templates/apps/api/src/routes/project-listings/__tests__/public.test.ts +0 -476
- package/templates/apps/api/src/routes/project-listings/__tests__/resume-email.test.ts +0 -872
- package/templates/apps/api/src/routes/project-listings/__tests__/site-answers.test.ts +0 -1022
- package/templates/apps/api/src/routes/project-listings/__tests__/site-key.test.ts +0 -484
- package/templates/apps/api/src/routes/project-listings/__tests__/structured-address.test.ts +0 -535
- package/templates/apps/api/src/routes/project-listings/index.ts +0 -164
- package/templates/apps/api/src/routes/project-listings/me.ts +0 -87
- package/templates/apps/api/src/routes/project-listings/patch-copy.ts +0 -224
- package/templates/apps/api/src/routes/project-listings/patch-draft.ts +0 -102
- package/templates/apps/api/src/routes/project-listings/public.ts +0 -98
- package/templates/apps/api/src/routes/project-listings/respond.ts +0 -48
- package/templates/apps/api/src/routes/project-listings/resume-token.ts +0 -27
- package/templates/apps/api/src/routes/project-listings/start.ts +0 -140
- package/templates/apps/api/src/routes/project-listings/submit.ts +0 -130
- package/templates/apps/api/src/routes/project-listings/verify-email.ts +0 -150
- package/templates/apps/api/src/routes/requests/__tests__/confirm.test.ts +0 -686
- package/templates/apps/api/src/routes/requests/confirm.ts +0 -601
- package/templates/apps/api/src/routes/requests/index.ts +0 -54
- package/templates/apps/api/src/routes/test/auth/__tests__/session.test.ts +0 -306
- package/templates/apps/api/src/routes/test/auth/session.ts +0 -143
- package/templates/apps/api/src/routes/webhooks/README.md +0 -398
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-checkout-consent.test.ts +0 -649
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-dunning.test.ts +0 -749
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-flow-checkout.test.ts +0 -449
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-idempotency.test.ts +0 -264
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-livemode-live.test.ts +0 -159
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-livemode.test.ts +0 -158
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-offerings.test.ts +0 -814
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-org-billing.test.ts +0 -301
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-proposal-paid.test.ts +0 -369
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-rate-limit.test.ts +0 -215
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-request-paid.test.ts +0 -301
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe-site-filter.test.ts +0 -809
- package/templates/apps/api/src/routes/webhooks/__tests__/stripe.test.ts +0 -1155
- package/templates/apps/api/src/routes/webhooks/index.ts +0 -141
- package/templates/apps/api/src/routes/webhooks/stripe-offerings.ts +0 -384
- package/templates/apps/api/src/routes/webhooks/stripe.ts +0 -2028
- package/templates/apps/api/src/services/__tests__/abandon-email.test.ts +0 -645
- package/templates/apps/api/src/services/__tests__/answer-distributions.test.ts +0 -132
- package/templates/apps/api/src/services/__tests__/audit-log.test.ts +0 -1028
- package/templates/apps/api/src/services/__tests__/checkout-plan.test.ts +0 -313
- package/templates/apps/api/src/services/__tests__/consent-ledger.test.ts +0 -503
- package/templates/apps/api/src/services/__tests__/consent-migration.test.ts +0 -65
- package/templates/apps/api/src/services/__tests__/consent.test.ts +0 -299
- package/templates/apps/api/src/services/__tests__/default-tenant.test.ts +0 -147
- package/templates/apps/api/src/services/__tests__/deliverable-fulfillment.test.ts +0 -877
- package/templates/apps/api/src/services/__tests__/deliverable-resend.test.ts +0 -379
- package/templates/apps/api/src/services/__tests__/dunning-policy.test.ts +0 -368
- package/templates/apps/api/src/services/__tests__/entitlements.test.ts +0 -142
- package/templates/apps/api/src/services/__tests__/hub-sign-in.test.ts +0 -854
- package/templates/apps/api/src/services/__tests__/keyless-workspace-predicate.test.ts +0 -234
- package/templates/apps/api/src/services/__tests__/lead-accept-user.test.ts +0 -251
- package/templates/apps/api/src/services/__tests__/lead-routing.test.ts +0 -2660
- package/templates/apps/api/src/services/__tests__/listing-config.test.ts +0 -166
- package/templates/apps/api/src/services/__tests__/magnet-completion.test.ts +0 -389
- package/templates/apps/api/src/services/__tests__/person.test.ts +0 -1204
- package/templates/apps/api/src/services/__tests__/plan-offerings.test.ts +0 -450
- package/templates/apps/api/src/services/__tests__/project-listings.counts.test.ts +0 -202
- package/templates/apps/api/src/services/__tests__/project-listings.fence.test.ts +0 -151
- package/templates/apps/api/src/services/__tests__/public-site-resolver.test.ts +0 -137
- package/templates/apps/api/src/services/__tests__/request-confirm.test.ts +0 -531
- package/templates/apps/api/src/services/__tests__/revalidation.test.ts +0 -372
- package/templates/apps/api/src/services/__tests__/slack-notify.test.ts +0 -348
- package/templates/apps/api/src/services/__tests__/spoke-resolution.test.ts +0 -660
- package/templates/apps/api/src/services/__tests__/usage-aggregation.test.ts +0 -941
- package/templates/apps/api/src/services/__tests__/usage-credits.test.ts +0 -588
- package/templates/apps/api/src/services/__tests__/verified-email.test.ts +0 -78
- package/templates/apps/api/src/services/abandon-email.ts +0 -336
- package/templates/apps/api/src/services/aeo-score.ts +0 -325
- package/templates/apps/api/src/services/answer-distributions.ts +0 -138
- package/templates/apps/api/src/services/audit-log.ts +0 -961
- package/templates/apps/api/src/services/checkout-buyer.ts +0 -168
- package/templates/apps/api/src/services/consent.ts +0 -834
- package/templates/apps/api/src/services/default-tenant.ts +0 -416
- package/templates/apps/api/src/services/deliverable-fulfillment.ts +0 -750
- package/templates/apps/api/src/services/dunning-policy.ts +0 -294
- package/templates/apps/api/src/services/enrichment-shim.ts +0 -53
- package/templates/apps/api/src/services/entitlements.ts +0 -338
- package/templates/apps/api/src/services/hub-sign-in.ts +0 -472
- package/templates/apps/api/src/services/lead-accept-user.ts +0 -126
- package/templates/apps/api/src/services/lead-promotion.ts +0 -160
- package/templates/apps/api/src/services/lead-routing.ts +0 -1372
- package/templates/apps/api/src/services/leads-inbox.ts +0 -312
- package/templates/apps/api/src/services/listing-config.ts +0 -178
- package/templates/apps/api/src/services/magnet-completion.ts +0 -242
- package/templates/apps/api/src/services/offerings/__tests__/catalog.test.ts +0 -348
- package/templates/apps/api/src/services/offerings/__tests__/checkout-session-record.test.ts +0 -268
- package/templates/apps/api/src/services/offerings/__tests__/connection.test.ts +0 -975
- package/templates/apps/api/src/services/offerings/__tests__/fixtures.ts +0 -416
- package/templates/apps/api/src/services/offerings/__tests__/org-products.test.ts +0 -400
- package/templates/apps/api/src/services/offerings/__tests__/readers.test.ts +0 -685
- package/templates/apps/api/src/services/offerings/__tests__/source.test.ts +0 -231
- package/templates/apps/api/src/services/offerings/catalog.ts +0 -318
- package/templates/apps/api/src/services/offerings/checkout-authorization.ts +0 -403
- package/templates/apps/api/src/services/offerings/checkout-session-record.ts +0 -192
- package/templates/apps/api/src/services/offerings/connection.ts +0 -1083
- package/templates/apps/api/src/services/offerings/index.ts +0 -614
- package/templates/apps/api/src/services/offerings/source.ts +0 -140
- package/templates/apps/api/src/services/offerings/store.ts +0 -150
- package/templates/apps/api/src/services/owner-workspaces.ts +0 -132
- package/templates/apps/api/src/services/person.ts +0 -1211
- package/templates/apps/api/src/services/plan-offerings.ts +0 -125
- package/templates/apps/api/src/services/project-listing-resume-email.ts +0 -326
- package/templates/apps/api/src/services/project-listings.ts +0 -2085
- package/templates/apps/api/src/services/public-site-resolver.ts +0 -396
- package/templates/apps/api/src/services/request-confirm.ts +0 -698
- package/templates/apps/api/src/services/revalidation.ts +0 -235
- package/templates/apps/api/src/services/slack-notify.ts +0 -291
- package/templates/apps/api/src/services/usage-aggregation.ts +0 -516
- package/templates/apps/api/src/services/usage-credits.ts +0 -340
- package/templates/apps/api/src/services/verified-email.ts +0 -71
- package/templates/apps/mcp/__tests__/abuse/daily-cap.test.ts +0 -52
- package/templates/apps/mcp/__tests__/abuse/email-validator.test.ts +0 -46
- package/templates/apps/mcp/__tests__/abuse/guard.test.ts +0 -198
- package/templates/apps/mcp/__tests__/abuse/honeypot.test.ts +0 -36
- package/templates/apps/mcp/__tests__/abuse/user-agent-deny.test.ts +0 -54
- package/templates/apps/mcp/__tests__/aeo-cli-parity.test.ts +0 -116
- package/templates/apps/mcp/__tests__/audit-single-page.test.ts +0 -299
- package/templates/apps/mcp/__tests__/boot.test.ts +0 -280
- package/templates/apps/mcp/__tests__/catalog-drift.test.ts +0 -359
- package/templates/apps/mcp/__tests__/config/modules.test.ts +0 -78
- package/templates/apps/mcp/__tests__/get_business_hours.test.ts +0 -82
- package/templates/apps/mcp/__tests__/get_faq.test.ts +0 -80
- package/templates/apps/mcp/__tests__/get_locations.test.ts +0 -65
- package/templates/apps/mcp/__tests__/get_offerings.test.ts +0 -557
- package/templates/apps/mcp/__tests__/get_pricing.test.ts +0 -524
- package/templates/apps/mcp/__tests__/get_site_info.test.ts +0 -81
- package/templates/apps/mcp/__tests__/http-transport.test.ts +0 -1232
- package/templates/apps/mcp/__tests__/index.test.ts +0 -195
- package/templates/apps/mcp/__tests__/lib/audit-single-page-readiness-scan.test.ts +0 -191
- package/templates/apps/mcp/__tests__/lib/commerce-claim.test.ts +0 -531
- package/templates/apps/mcp/__tests__/lib/content-adapter-parity.test.ts +0 -70
- package/templates/apps/mcp/__tests__/lib/content-adapter.test.ts +0 -162
- package/templates/apps/mcp/__tests__/lib/content-root.test.ts +0 -93
- package/templates/apps/mcp/__tests__/lib/errors.test.ts +0 -75
- package/templates/apps/mcp/__tests__/lib/fail-closed-tools.test.ts +0 -180
- package/templates/apps/mcp/__tests__/lib/public-workspace.test.ts +0 -124
- package/templates/apps/mcp/__tests__/list_pages.test.ts +0 -268
- package/templates/apps/mcp/__tests__/locale.test.ts +0 -120
- package/templates/apps/mcp/__tests__/module-exclusion.test.ts +0 -175
- package/templates/apps/mcp/__tests__/purchase-disabled.test.ts +0 -101
- package/templates/apps/mcp/__tests__/rate-limit-write.test.ts +0 -189
- package/templates/apps/mcp/__tests__/read_content.test.ts +0 -511
- package/templates/apps/mcp/__tests__/request_callback.test.ts +0 -160
- package/templates/apps/mcp/__tests__/search_content.test.ts +0 -271
- package/templates/apps/mcp/__tests__/server.test.ts +0 -388
- package/templates/apps/mcp/__tests__/start_purchase.test.ts +0 -448
- package/templates/apps/mcp/__tests__/submit_lead.test.ts +0 -222
- package/templates/apps/mcp/__tests__/subscribe_newsletter.test.ts +0 -152
- package/templates/apps/mcp/__tests__/tools/create_project.test.ts +0 -243
- package/templates/apps/mcp/__tests__/tools/purchase.test.ts +0 -451
- package/templates/apps/mcp/src/abuse/daily-cap.ts +0 -47
- package/templates/apps/mcp/src/abuse/email-validator.ts +0 -25
- package/templates/apps/mcp/src/abuse/honeypot.ts +0 -21
- package/templates/apps/mcp/src/abuse/index.ts +0 -349
- package/templates/apps/mcp/src/abuse/user-agent-deny.ts +0 -58
- package/templates/apps/mcp/src/boot.ts +0 -167
- package/templates/apps/mcp/src/config/modules.ts +0 -43
- package/templates/apps/mcp/src/http-transport.ts +0 -564
- package/templates/apps/mcp/src/lib/audit-single-page.ts +0 -308
- package/templates/apps/mcp/src/lib/commerce-claim.ts +0 -263
- package/templates/apps/mcp/src/lib/content-adapter.ts +0 -116
- package/templates/apps/mcp/src/lib/empty-content-adapter.ts +0 -140
- package/templates/apps/mcp/src/lib/errors.ts +0 -61
- package/templates/apps/mcp/src/lib/license-key-store.ts +0 -45
- package/templates/apps/mcp/src/lib/locales.ts +0 -171
- package/templates/apps/mcp/src/lib/prisma.ts +0 -39
- package/templates/apps/mcp/src/lib/public-workspace.ts +0 -133
- package/templates/apps/mcp/src/lib/resolve-locale.ts +0 -30
- package/templates/apps/mcp/src/lib/shown-offerings.ts +0 -105
- package/templates/apps/mcp/src/lib/site-config.ts +0 -53
- package/templates/apps/mcp/src/lib/stripe-tax-signal.ts +0 -59
- package/templates/apps/mcp/src/request-context.ts +0 -52
- package/templates/apps/mcp/src/server.ts +0 -343
- package/templates/apps/mcp/src/serverless-app.ts +0 -88
- package/templates/apps/mcp/src/tools/audit.ts +0 -127
- package/templates/apps/mcp/src/tools/capture_lead.ts +0 -66
- package/templates/apps/mcp/src/tools/create_project.ts +0 -134
- package/templates/apps/mcp/src/tools/get_business_hours.ts +0 -68
- package/templates/apps/mcp/src/tools/get_faq.ts +0 -71
- package/templates/apps/mcp/src/tools/get_locations.ts +0 -88
- package/templates/apps/mcp/src/tools/get_offerings.ts +0 -96
- package/templates/apps/mcp/src/tools/get_pricing.ts +0 -94
- package/templates/apps/mcp/src/tools/get_site_info.ts +0 -86
- package/templates/apps/mcp/src/tools/index.ts +0 -138
- package/templates/apps/mcp/src/tools/list_pages.ts +0 -68
- package/templates/apps/mcp/src/tools/person_notes.ts +0 -25
- package/templates/apps/mcp/src/tools/proposals.ts +0 -27
- package/templates/apps/mcp/src/tools/purchase.ts +0 -205
- package/templates/apps/mcp/src/tools/read_content.ts +0 -81
- package/templates/apps/mcp/src/tools/request_callback.ts +0 -52
- package/templates/apps/mcp/src/tools/search_content.ts +0 -63
- package/templates/apps/mcp/src/tools/subscribe_newsletter.ts +0 -54
- package/templates/apps/mcp/src/workspace-server.ts +0 -224
- package/templates/database/CHANGELOG.md +0 -981
- package/templates/database/LICENSE +0 -202
- package/templates/database/NOTICE +0 -2
- package/templates/database/README.md +0 -243
- package/templates/database/__tests__/agents.db.test.ts +0 -320
- package/templates/database/__tests__/appointment.db.test.ts +0 -106
- package/templates/database/__tests__/artifact-content-store.db.test.ts +0 -316
- package/templates/database/__tests__/composite-fence.db.test.ts +0 -206
- package/templates/database/__tests__/consent-ledger.db.test.ts +0 -345
- package/templates/database/__tests__/consent-source-checkout-migration.test.ts +0 -79
- package/templates/database/__tests__/fence-fan-out.db.test.ts +0 -715
- package/templates/database/__tests__/fixtures/appointment-create-probe.ts +0 -79
- package/templates/database/__tests__/fixtures/person-backfill.json +0 -264
- package/templates/database/__tests__/fixtures/person-contact-backfill.json +0 -182
- package/templates/database/__tests__/fixtures/project-listing-consent-probe.ts +0 -100
- package/templates/database/__tests__/flow-completion-migration.test.ts +0 -115
- package/templates/database/__tests__/flow-completion.db.test.ts +0 -136
- package/templates/database/__tests__/flow-workspace-key.db.test.ts +0 -263
- package/templates/database/__tests__/flows-listing-diagnostic.test.ts +0 -392
- package/templates/database/__tests__/flows-presets.test.ts +0 -173
- package/templates/database/__tests__/in-page-magnets-migration.test.ts +0 -161
- package/templates/database/__tests__/lead-idempotency-key.db.test.ts +0 -92
- package/templates/database/__tests__/member-area.db.test.ts +0 -257
- package/templates/database/__tests__/member-contract-migration.test.ts +0 -85
- package/templates/database/__tests__/member-contract.db.test.ts +0 -413
- package/templates/database/__tests__/offerings-checkout-session.db.test.ts +0 -270
- package/templates/database/__tests__/offerings-migration.test.ts +0 -197
- package/templates/database/__tests__/offerings-shown-price-ids-migration.test.ts +0 -86
- package/templates/database/__tests__/offerings.db.test.ts +0 -303
- package/templates/database/__tests__/outbound-message-action.db.test.ts +0 -80
- package/templates/database/__tests__/person-contact.db.test.ts +0 -563
- package/templates/database/__tests__/person-notes.db.test.ts +0 -249
- package/templates/database/__tests__/person.db.test.ts +0 -586
- package/templates/database/__tests__/piece-kind-migration.test.ts +0 -67
- package/templates/database/__tests__/piece-kind.db.test.ts +0 -208
- package/templates/database/__tests__/prefixed-ids.db.test.ts +0 -222
- package/templates/database/__tests__/project-listing-consent-at.db.test.ts +0 -111
- package/templates/database/__tests__/seed.test.ts +0 -272
- package/templates/database/__tests__/spoke-registry.db.test.ts +0 -191
- package/templates/database/__tests__/tenancy.test.ts +0 -141
- package/templates/database/__tests__/trial-magnet-migration.test.ts +0 -186
- package/templates/database/__tests__/user-cascade.test.ts +0 -140
- package/templates/database/_gitignore +0 -8
- package/templates/database/auth/.gitkeep +0 -0
- package/templates/database/auth/schema.prisma +0 -641
- package/templates/database/config/.gitkeep +0 -0
- package/templates/database/config/schema.prisma +0 -441
- package/templates/database/content/.gitkeep +0 -0
- package/templates/database/content/schema.prisma +0 -339
- package/templates/database/eslint.config.mjs +0 -69
- package/templates/database/flows/listing-diagnostic.ts +0 -182
- package/templates/database/flows/presets.ts +0 -315
- package/templates/database/inbox/.gitkeep +0 -0
- package/templates/database/inbox/README.md +0 -3
- package/templates/database/inbox/__tests__/schema.test.ts +0 -44
- package/templates/database/inbox/schema.prisma +0 -1447
- package/templates/database/jest.config.cjs +0 -36
- package/templates/database/migrations/20260508000000_add_inbox_namespace/migration.sql +0 -328
- package/templates/database/migrations/20260513000000_better_auth_migration/migration.sql +0 -100
- package/templates/database/migrations/20260515000000_add_user_billing_fields/migration.sql +0 -28
- package/templates/database/migrations/20260516000000_add_user_tier_care_plan_seat/migration.sql +0 -25
- package/templates/database/migrations/20260518000000_add_telemetry_records/migration.sql +0 -42
- package/templates/database/migrations/20260525000000_theme_wiring/migration.sql +0 -67
- package/templates/database/migrations/20260710000000_retire_commercial_tier/migration.sql +0 -21
- package/templates/database/migrations/20260712215647_add_multi_tenant_tenancy/migration.sql +0 -201
- package/templates/database/migrations/20260713143320_reanchor_site_config_to_workspace/migration.sql +0 -67
- package/templates/database/migrations/20260713174000_add_audit_logs/migration.sql +0 -46
- package/templates/database/migrations/20260713190000_drop_telemetry_records/migration.sql +0 -25
- package/templates/database/migrations/20260713192000_add_uuidv7_function/migration.sql +0 -49
- package/templates/database/migrations/20260713192429_prefixed_uuid_entity_ids/migration.sql +0 -197
- package/templates/database/migrations/20260713200000_add_org_billing/migration.sql +0 -32
- package/templates/database/migrations/20260714000000_add_lead_promotion_fields/migration.sql +0 -22
- package/templates/database/migrations/20260714010000_add_usage_billing_content_models/migration.sql +0 -151
- package/templates/database/migrations/20260714020000_add_usage_billing_auth_config_models/migration.sql +0 -223
- package/templates/database/migrations/20260714030000_credit_balance_non_negative/migration.sql +0 -22
- package/templates/database/migrations/20260714030000_widen_usage_billing_report_aggregates/migration.sql +0 -32
- package/templates/database/migrations/20260810233516_add_flow_engine_models/migration.sql +0 -40
- package/templates/database/migrations/20260811020000_add_flow_session_abandon_email_columns/migration.sql +0 -4
- package/templates/database/migrations/20260811030000_add_flow_session_abandon_email_index/migration.sql +0 -2
- package/templates/database/migrations/20260811040000_add_flow_session_segment/migration.sql +0 -2
- package/templates/database/migrations/20260811050000_add_deliverable_models/migration.sql +0 -29
- package/templates/database/migrations/20260812000000_add_deliverable_grant_send_columns/migration.sql +0 -6
- package/templates/database/migrations/20260902222948_add_waitlist_experiment_models/migration.sql +0 -39
- package/templates/database/migrations/20260902224500_add_waitlist_id_format_checks/migration.sql +0 -24
- package/templates/database/migrations/20260903004112_add_flow_session_flags_aeo_score/migration.sql +0 -3
- package/templates/database/migrations/20260903010000_add_playbook_instance/migration.sql +0 -33
- package/templates/database/migrations/20260904000000_add_waitlist_followup_send/migration.sql +0 -30
- package/templates/database/migrations/20260905230000_add_flow_checkout/migration.sql +0 -47
- package/templates/database/migrations/20260906000000_add_flow_checkout_idempotency/migration.sql +0 -16
- package/templates/database/migrations/20260907120000_add_project_listing/migration.sql +0 -47
- package/templates/database/migrations/20260907130000_add_project_listing_slack_columns/migration.sql +0 -10
- package/templates/database/migrations/20260907180000_add_listing_csv_send/migration.sql +0 -26
- package/templates/database/migrations/20260909120000_project_listings_platform/migration.sql +0 -90
- package/templates/database/migrations/20260909180000_listing_draft_and_fields/migration.sql +0 -174
- package/templates/database/migrations/20260910120000_listing_public_site_key/migration.sql +0 -14
- package/templates/database/migrations/20260911120000_listing_copy_edit_audit/migration.sql +0 -25
- package/templates/database/migrations/20260911140000_listing_structured_address/migration.sql +0 -32
- package/templates/database/migrations/20260911180000_consent_grants/migration.sql +0 -71
- package/templates/database/migrations/20260911200000_listing_site_answers/migration.sql +0 -30
- package/templates/database/migrations/20260912120000_listing_owner_link/migration.sql +0 -49
- package/templates/database/migrations/20260914120000_listing_founder_identity/migration.sql +0 -123
- package/templates/database/migrations/20260915120000_project_listing_solution/migration.sql +0 -15
- package/templates/database/migrations/20260916120000_artifact_content_store/migration.sql +0 -158
- package/templates/database/migrations/20260917120000_callback_request_confirm/migration.sql +0 -40
- package/templates/database/migrations/20260918120000_add_appointment/migration.sql +0 -67
- package/templates/database/migrations/20260918120000_asset_metadata_columns/migration.sql +0 -70
- package/templates/database/migrations/20260919120000_flow_workspace_key/migration.sql +0 -181
- package/templates/database/migrations/20260919130000_flow_definition_admin_columns/migration.sql +0 -172
- package/templates/database/migrations/20260919130000_workspace_meetings/migration.sql +0 -41
- package/templates/database/migrations/20260919140000_inbox_workspace_key/migration.sql +0 -185
- package/templates/database/migrations/20260920120000_lead_handled_at/migration.sql +0 -70
- package/templates/database/migrations/20260920130000_lead_workspace_source_index/migration.sql +0 -57
- package/templates/database/migrations/20260921120000_deliverable_grant_workspace_key/migration.sql +0 -68
- package/templates/database/migrations/20260922120000_tenancy_fence/migration.sql +0 -1067
- package/templates/database/migrations/20260923120000_listing_capturing_magnet/migration.sql +0 -210
- package/templates/database/migrations/20261003120000_spoke_registry/migration.sql +0 -80
- package/templates/database/migrations/20261003130000_scheduling_connection/migration.sql +0 -49
- package/templates/database/migrations/20261005120000_agents/migration.sql +0 -84
- package/templates/database/migrations/20261008120000_user_last_workspace/migration.sql +0 -35
- package/templates/database/migrations/20261008130000_lead_idempotency_key/migration.sql +0 -20
- package/templates/database/migrations/20261009120000_agent_grants/migration.sql +0 -33
- package/templates/database/migrations/20261010120000_person/migration.sql +0 -106
- package/templates/database/migrations/20261010121000_person_backfill/migration.sql +0 -132
- package/templates/database/migrations/20261010130000_agent_grants_people_read/migration.sql +0 -20
- package/templates/database/migrations/20261011120000_member_area/migration.sql +0 -158
- package/templates/database/migrations/20261011130000_agent_grants_member_pieces_manage/migration.sql +0 -21
- package/templates/database/migrations/20261012120000_member_contract/migration.sql +0 -192
- package/templates/database/migrations/20261013120000_lead_spoke_checkout/migration.sql +0 -20
- package/templates/database/migrations/20261014120000_consent_ledger/migration.sql +0 -122
- package/templates/database/migrations/20261014120000_person_contact/migration.sql +0 -231
- package/templates/database/migrations/20261015120000_person_notes/migration.sql +0 -77
- package/templates/database/migrations/20261015120000_rate_limit_counters/migration.sql +0 -43
- package/templates/database/migrations/20261016120000_piece_kind/migration.sql +0 -95
- package/templates/database/migrations/20261017120000_outbound_message_action/migration.sql +0 -30
- package/templates/database/migrations/20261018120000_flow_completion/migration.sql +0 -52
- package/templates/database/migrations/20261019120000_consent_source_checkout/migration.sql +0 -27
- package/templates/database/migrations/20261020120000_offerings_data_model/migration.sql +0 -146
- package/templates/database/migrations/20261021120000_offerings_checkout_session/migration.sql +0 -77
- package/templates/database/migrations/20261022120000_in_page_magnets/migration.sql +0 -45
- package/templates/database/migrations/20261023120000_offerings_shown_price_ids/migration.sql +0 -47
- package/templates/database/migrations/20261024120000_organization_plan_checkout_session/migration.sql +0 -16
- package/templates/database/migrations/20261025120000_trial_magnet/migration.sql +0 -28
- package/templates/database/migrations/20261026120000_trial_magnet_proof_line/migration.sql +0 -23
- package/templates/database/migrations/migration_lock.toml +0 -3
- package/templates/database/ops/.gitkeep +0 -0
- package/templates/database/ops/schema.prisma +0 -43
- package/templates/database/package.json +0 -89
- package/templates/database/schema.prisma +0 -71
- package/templates/database/scripts/db-generate-locked.sh +0 -80
- package/templates/database/scripts/person-backfill.sql +0 -132
- package/templates/database/tenancy.ts +0 -183
- package/templates/database/tsconfig.build.json +0 -16
- package/templates/database/tsconfig.flows.json +0 -15
- package/templates/database/tsconfig.json +0 -16
- package/templates/database/tsconfig.tenancy.json +0 -14
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
module.exports = {
|
|
2
|
-
preset: "ts-jest",
|
|
3
|
-
globalSetup: require.resolve("../tools/jest/pin-timezone.cjs"),
|
|
4
|
-
testEnvironment: "node",
|
|
5
|
-
roots: ["<rootDir>"],
|
|
6
|
-
testMatch: ["**/__tests__/**/*.test.ts"],
|
|
7
|
-
testPathIgnorePatterns: ["/node_modules/", "/generated/"],
|
|
8
|
-
moduleFileExtensions: ["ts", "js", "json"],
|
|
9
|
-
moduleNameMapper: {
|
|
10
|
-
// @working-theory/validation and @working-theory/ids resolve from the
|
|
11
|
-
// installed packages; their ESM dist is converted by the transform below.
|
|
12
|
-
"^(\\.{1,2}/.*)\\.js$": "$1",
|
|
13
|
-
},
|
|
14
|
-
transformIgnorePatterns: [
|
|
15
|
-
"/node_modules/(?!(\\.pnpm/)?@working-theory(?:\\+[^/]*?@?[^/]*?|/[^/]+)(/|$))",
|
|
16
|
-
],
|
|
17
|
-
transform: {
|
|
18
|
-
"^.+\\.[cm]?[tj]sx?$": [
|
|
19
|
-
"ts-jest",
|
|
20
|
-
{
|
|
21
|
-
tsconfig: {
|
|
22
|
-
target: "ES2020",
|
|
23
|
-
module: "commonjs",
|
|
24
|
-
lib: ["ES2020"],
|
|
25
|
-
allowJs: true,
|
|
26
|
-
declaration: false,
|
|
27
|
-
strict: true,
|
|
28
|
-
esModuleInterop: true,
|
|
29
|
-
skipLibCheck: true,
|
|
30
|
-
ignoreDeprecations: '6.0',
|
|
31
|
-
types: ["node", "jest"],
|
|
32
|
-
},
|
|
33
|
-
},
|
|
34
|
-
],
|
|
35
|
-
},
|
|
36
|
-
};
|
|
@@ -1,328 +0,0 @@
|
|
|
1
|
-
-- CreateSchema
|
|
2
|
-
CREATE SCHEMA IF NOT EXISTS "public";
|
|
3
|
-
|
|
4
|
-
-- CreateTable
|
|
5
|
-
CREATE TABLE "users" (
|
|
6
|
-
"id" TEXT NOT NULL,
|
|
7
|
-
"email" TEXT NOT NULL,
|
|
8
|
-
"name" TEXT,
|
|
9
|
-
"image" TEXT,
|
|
10
|
-
"email_verified" TIMESTAMP(3),
|
|
11
|
-
"role" TEXT NOT NULL DEFAULT 'user',
|
|
12
|
-
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
13
|
-
"updated_at" TIMESTAMP(3) NOT NULL,
|
|
14
|
-
|
|
15
|
-
CONSTRAINT "users_pkey" PRIMARY KEY ("id")
|
|
16
|
-
);
|
|
17
|
-
|
|
18
|
-
-- CreateTable
|
|
19
|
-
CREATE TABLE "accounts" (
|
|
20
|
-
"id" TEXT NOT NULL,
|
|
21
|
-
"user_id" TEXT NOT NULL,
|
|
22
|
-
"type" TEXT NOT NULL,
|
|
23
|
-
"provider" TEXT NOT NULL,
|
|
24
|
-
"provider_account_id" TEXT NOT NULL,
|
|
25
|
-
"refresh_token" TEXT,
|
|
26
|
-
"access_token" TEXT,
|
|
27
|
-
"expires_at" INTEGER,
|
|
28
|
-
"token_type" TEXT,
|
|
29
|
-
"scope" TEXT,
|
|
30
|
-
"id_token" TEXT,
|
|
31
|
-
"session_state" TEXT,
|
|
32
|
-
|
|
33
|
-
CONSTRAINT "accounts_pkey" PRIMARY KEY ("id")
|
|
34
|
-
);
|
|
35
|
-
|
|
36
|
-
-- CreateTable
|
|
37
|
-
CREATE TABLE "sessions" (
|
|
38
|
-
"id" TEXT NOT NULL,
|
|
39
|
-
"session_token" TEXT NOT NULL,
|
|
40
|
-
"user_id" TEXT NOT NULL,
|
|
41
|
-
"expires" TIMESTAMP(3) NOT NULL,
|
|
42
|
-
|
|
43
|
-
CONSTRAINT "sessions_pkey" PRIMARY KEY ("id")
|
|
44
|
-
);
|
|
45
|
-
|
|
46
|
-
-- CreateTable
|
|
47
|
-
CREATE TABLE "verification_tokens" (
|
|
48
|
-
"identifier" TEXT NOT NULL,
|
|
49
|
-
"token" TEXT NOT NULL,
|
|
50
|
-
"expires" TIMESTAMP(3) NOT NULL
|
|
51
|
-
);
|
|
52
|
-
|
|
53
|
-
-- CreateTable
|
|
54
|
-
CREATE TABLE "api_tokens" (
|
|
55
|
-
"id" TEXT NOT NULL,
|
|
56
|
-
"user_id" TEXT NOT NULL,
|
|
57
|
-
"name" TEXT NOT NULL,
|
|
58
|
-
"token" TEXT NOT NULL,
|
|
59
|
-
"token_prefix" TEXT NOT NULL,
|
|
60
|
-
"client_type" TEXT NOT NULL DEFAULT 'api',
|
|
61
|
-
"device_info" TEXT,
|
|
62
|
-
"scopes" TEXT[] DEFAULT ARRAY[]::TEXT[],
|
|
63
|
-
"expires_at" TIMESTAMP(3),
|
|
64
|
-
"last_used_at" TIMESTAMP(3),
|
|
65
|
-
"last_used_ip" TEXT,
|
|
66
|
-
"revoked_at" TIMESTAMP(3),
|
|
67
|
-
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
68
|
-
|
|
69
|
-
CONSTRAINT "api_tokens_pkey" PRIMARY KEY ("id")
|
|
70
|
-
);
|
|
71
|
-
|
|
72
|
-
-- CreateTable
|
|
73
|
-
CREATE TABLE "refresh_tokens" (
|
|
74
|
-
"id" TEXT NOT NULL,
|
|
75
|
-
"user_id" TEXT NOT NULL,
|
|
76
|
-
"api_token_id" TEXT NOT NULL,
|
|
77
|
-
"token" TEXT NOT NULL,
|
|
78
|
-
"expires_at" TIMESTAMP(3) NOT NULL,
|
|
79
|
-
"used_at" TIMESTAMP(3),
|
|
80
|
-
"revoked_at" TIMESTAMP(3),
|
|
81
|
-
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
82
|
-
|
|
83
|
-
CONSTRAINT "refresh_tokens_pkey" PRIMARY KEY ("id")
|
|
84
|
-
);
|
|
85
|
-
|
|
86
|
-
-- CreateTable
|
|
87
|
-
CREATE TABLE "oauth_clients" (
|
|
88
|
-
"id" TEXT NOT NULL,
|
|
89
|
-
"name" TEXT NOT NULL,
|
|
90
|
-
"description" TEXT,
|
|
91
|
-
"logo_url" TEXT,
|
|
92
|
-
"client_id" TEXT NOT NULL,
|
|
93
|
-
"client_secret" TEXT NOT NULL,
|
|
94
|
-
"redirect_uris" TEXT[],
|
|
95
|
-
"scopes" TEXT[] DEFAULT ARRAY[]::TEXT[],
|
|
96
|
-
"enabled" BOOLEAN NOT NULL DEFAULT true,
|
|
97
|
-
"trusted" BOOLEAN NOT NULL DEFAULT false,
|
|
98
|
-
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
99
|
-
"updated_at" TIMESTAMP(3) NOT NULL,
|
|
100
|
-
|
|
101
|
-
CONSTRAINT "oauth_clients_pkey" PRIMARY KEY ("id")
|
|
102
|
-
);
|
|
103
|
-
|
|
104
|
-
-- CreateTable
|
|
105
|
-
CREATE TABLE "oauth_authorizations" (
|
|
106
|
-
"id" TEXT NOT NULL,
|
|
107
|
-
"user_id" TEXT NOT NULL,
|
|
108
|
-
"client_id" TEXT NOT NULL,
|
|
109
|
-
"scopes" TEXT[],
|
|
110
|
-
"access_token" TEXT NOT NULL,
|
|
111
|
-
"refresh_token" TEXT,
|
|
112
|
-
"expires_at" TIMESTAMP(3) NOT NULL,
|
|
113
|
-
"revoked_at" TIMESTAMP(3),
|
|
114
|
-
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
115
|
-
"updated_at" TIMESTAMP(3) NOT NULL,
|
|
116
|
-
|
|
117
|
-
CONSTRAINT "oauth_authorizations_pkey" PRIMARY KEY ("id")
|
|
118
|
-
);
|
|
119
|
-
|
|
120
|
-
-- CreateTable
|
|
121
|
-
CREATE TABLE "push_tokens" (
|
|
122
|
-
"id" TEXT NOT NULL,
|
|
123
|
-
"user_id" TEXT NOT NULL,
|
|
124
|
-
"token" TEXT NOT NULL,
|
|
125
|
-
"platform" TEXT NOT NULL,
|
|
126
|
-
"device_id" TEXT,
|
|
127
|
-
"device_name" TEXT,
|
|
128
|
-
"app_version" TEXT,
|
|
129
|
-
"enabled" BOOLEAN NOT NULL DEFAULT true,
|
|
130
|
-
"failed_at" TIMESTAMP(3),
|
|
131
|
-
"fail_count" INTEGER NOT NULL DEFAULT 0,
|
|
132
|
-
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
133
|
-
"updated_at" TIMESTAMP(3) NOT NULL,
|
|
134
|
-
|
|
135
|
-
CONSTRAINT "push_tokens_pkey" PRIMARY KEY ("id")
|
|
136
|
-
);
|
|
137
|
-
|
|
138
|
-
-- CreateTable
|
|
139
|
-
CREATE TABLE "user_data" (
|
|
140
|
-
"id" TEXT NOT NULL,
|
|
141
|
-
"user_id" TEXT NOT NULL,
|
|
142
|
-
"key" TEXT NOT NULL,
|
|
143
|
-
"value" JSONB NOT NULL,
|
|
144
|
-
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
145
|
-
"updated_at" TIMESTAMP(3) NOT NULL,
|
|
146
|
-
|
|
147
|
-
CONSTRAINT "user_data_pkey" PRIMARY KEY ("id")
|
|
148
|
-
);
|
|
149
|
-
|
|
150
|
-
-- CreateTable
|
|
151
|
-
CREATE TABLE "site_settings" (
|
|
152
|
-
"id" TEXT NOT NULL,
|
|
153
|
-
"key" TEXT NOT NULL,
|
|
154
|
-
"value" JSONB NOT NULL,
|
|
155
|
-
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
156
|
-
"updated_at" TIMESTAMP(3) NOT NULL,
|
|
157
|
-
|
|
158
|
-
CONSTRAINT "site_settings_pkey" PRIMARY KEY ("id")
|
|
159
|
-
);
|
|
160
|
-
|
|
161
|
-
-- CreateTable
|
|
162
|
-
CREATE TABLE "leads" (
|
|
163
|
-
"id" TEXT NOT NULL,
|
|
164
|
-
"site_id" TEXT NOT NULL,
|
|
165
|
-
"source" TEXT NOT NULL,
|
|
166
|
-
"email" TEXT NOT NULL,
|
|
167
|
-
"payload" JSONB NOT NULL,
|
|
168
|
-
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
169
|
-
|
|
170
|
-
CONSTRAINT "leads_pkey" PRIMARY KEY ("id")
|
|
171
|
-
);
|
|
172
|
-
|
|
173
|
-
-- CreateTable
|
|
174
|
-
CREATE TABLE "subscribers" (
|
|
175
|
-
"id" TEXT NOT NULL,
|
|
176
|
-
"site_id" TEXT NOT NULL,
|
|
177
|
-
"email" TEXT NOT NULL,
|
|
178
|
-
"source" TEXT NOT NULL,
|
|
179
|
-
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
180
|
-
|
|
181
|
-
CONSTRAINT "subscribers_pkey" PRIMARY KEY ("id")
|
|
182
|
-
);
|
|
183
|
-
|
|
184
|
-
-- CreateTable
|
|
185
|
-
CREATE TABLE "callbacks" (
|
|
186
|
-
"id" TEXT NOT NULL,
|
|
187
|
-
"site_id" TEXT NOT NULL,
|
|
188
|
-
"name" TEXT NOT NULL,
|
|
189
|
-
"phone" TEXT NOT NULL,
|
|
190
|
-
"preferred_time" TEXT,
|
|
191
|
-
"payload" JSONB NOT NULL,
|
|
192
|
-
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
193
|
-
|
|
194
|
-
CONSTRAINT "callbacks_pkey" PRIMARY KEY ("id")
|
|
195
|
-
);
|
|
196
|
-
|
|
197
|
-
-- CreateIndex
|
|
198
|
-
CREATE UNIQUE INDEX "users_email_key" ON "users"("email");
|
|
199
|
-
|
|
200
|
-
-- CreateIndex
|
|
201
|
-
CREATE INDEX "accounts_user_id_idx" ON "accounts"("user_id");
|
|
202
|
-
|
|
203
|
-
-- CreateIndex
|
|
204
|
-
CREATE UNIQUE INDEX "accounts_provider_provider_account_id_key" ON "accounts"("provider", "provider_account_id");
|
|
205
|
-
|
|
206
|
-
-- CreateIndex
|
|
207
|
-
CREATE UNIQUE INDEX "sessions_session_token_key" ON "sessions"("session_token");
|
|
208
|
-
|
|
209
|
-
-- CreateIndex
|
|
210
|
-
CREATE INDEX "sessions_user_id_idx" ON "sessions"("user_id");
|
|
211
|
-
|
|
212
|
-
-- CreateIndex
|
|
213
|
-
CREATE UNIQUE INDEX "verification_tokens_token_key" ON "verification_tokens"("token");
|
|
214
|
-
|
|
215
|
-
-- CreateIndex
|
|
216
|
-
CREATE UNIQUE INDEX "verification_tokens_identifier_token_key" ON "verification_tokens"("identifier", "token");
|
|
217
|
-
|
|
218
|
-
-- CreateIndex
|
|
219
|
-
CREATE UNIQUE INDEX "api_tokens_token_key" ON "api_tokens"("token");
|
|
220
|
-
|
|
221
|
-
-- CreateIndex
|
|
222
|
-
CREATE INDEX "api_tokens_user_id_idx" ON "api_tokens"("user_id");
|
|
223
|
-
|
|
224
|
-
-- CreateIndex
|
|
225
|
-
CREATE INDEX "api_tokens_token_idx" ON "api_tokens"("token");
|
|
226
|
-
|
|
227
|
-
-- CreateIndex
|
|
228
|
-
CREATE INDEX "api_tokens_token_prefix_idx" ON "api_tokens"("token_prefix");
|
|
229
|
-
|
|
230
|
-
-- CreateIndex
|
|
231
|
-
CREATE UNIQUE INDEX "refresh_tokens_token_key" ON "refresh_tokens"("token");
|
|
232
|
-
|
|
233
|
-
-- CreateIndex
|
|
234
|
-
CREATE INDEX "refresh_tokens_user_id_idx" ON "refresh_tokens"("user_id");
|
|
235
|
-
|
|
236
|
-
-- CreateIndex
|
|
237
|
-
CREATE INDEX "refresh_tokens_api_token_id_idx" ON "refresh_tokens"("api_token_id");
|
|
238
|
-
|
|
239
|
-
-- CreateIndex
|
|
240
|
-
CREATE INDEX "refresh_tokens_token_idx" ON "refresh_tokens"("token");
|
|
241
|
-
|
|
242
|
-
-- CreateIndex
|
|
243
|
-
CREATE UNIQUE INDEX "oauth_clients_client_id_key" ON "oauth_clients"("client_id");
|
|
244
|
-
|
|
245
|
-
-- CreateIndex
|
|
246
|
-
CREATE UNIQUE INDEX "oauth_authorizations_access_token_key" ON "oauth_authorizations"("access_token");
|
|
247
|
-
|
|
248
|
-
-- CreateIndex
|
|
249
|
-
CREATE UNIQUE INDEX "oauth_authorizations_refresh_token_key" ON "oauth_authorizations"("refresh_token");
|
|
250
|
-
|
|
251
|
-
-- CreateIndex
|
|
252
|
-
CREATE INDEX "oauth_authorizations_user_id_idx" ON "oauth_authorizations"("user_id");
|
|
253
|
-
|
|
254
|
-
-- CreateIndex
|
|
255
|
-
CREATE INDEX "oauth_authorizations_client_id_idx" ON "oauth_authorizations"("client_id");
|
|
256
|
-
|
|
257
|
-
-- CreateIndex
|
|
258
|
-
CREATE INDEX "oauth_authorizations_access_token_idx" ON "oauth_authorizations"("access_token");
|
|
259
|
-
|
|
260
|
-
-- CreateIndex
|
|
261
|
-
CREATE UNIQUE INDEX "oauth_authorizations_user_id_client_id_key" ON "oauth_authorizations"("user_id", "client_id");
|
|
262
|
-
|
|
263
|
-
-- CreateIndex
|
|
264
|
-
CREATE UNIQUE INDEX "push_tokens_token_key" ON "push_tokens"("token");
|
|
265
|
-
|
|
266
|
-
-- CreateIndex
|
|
267
|
-
CREATE INDEX "push_tokens_user_id_idx" ON "push_tokens"("user_id");
|
|
268
|
-
|
|
269
|
-
-- CreateIndex
|
|
270
|
-
CREATE INDEX "push_tokens_platform_idx" ON "push_tokens"("platform");
|
|
271
|
-
|
|
272
|
-
-- CreateIndex
|
|
273
|
-
CREATE INDEX "user_data_user_id_idx" ON "user_data"("user_id");
|
|
274
|
-
|
|
275
|
-
-- CreateIndex
|
|
276
|
-
CREATE INDEX "user_data_key_idx" ON "user_data"("key");
|
|
277
|
-
|
|
278
|
-
-- CreateIndex
|
|
279
|
-
CREATE UNIQUE INDEX "user_data_user_id_key_key" ON "user_data"("user_id", "key");
|
|
280
|
-
|
|
281
|
-
-- CreateIndex
|
|
282
|
-
CREATE UNIQUE INDEX "site_settings_key_key" ON "site_settings"("key");
|
|
283
|
-
|
|
284
|
-
-- CreateIndex
|
|
285
|
-
CREATE INDEX "leads_site_id_idx" ON "leads"("site_id");
|
|
286
|
-
|
|
287
|
-
-- CreateIndex
|
|
288
|
-
CREATE INDEX "leads_created_at_idx" ON "leads"("created_at");
|
|
289
|
-
|
|
290
|
-
-- CreateIndex
|
|
291
|
-
CREATE INDEX "subscribers_site_id_idx" ON "subscribers"("site_id");
|
|
292
|
-
|
|
293
|
-
-- CreateIndex
|
|
294
|
-
CREATE UNIQUE INDEX "subscribers_site_id_email_key" ON "subscribers"("site_id", "email");
|
|
295
|
-
|
|
296
|
-
-- CreateIndex
|
|
297
|
-
CREATE INDEX "callbacks_site_id_idx" ON "callbacks"("site_id");
|
|
298
|
-
|
|
299
|
-
-- CreateIndex
|
|
300
|
-
CREATE INDEX "callbacks_created_at_idx" ON "callbacks"("created_at");
|
|
301
|
-
|
|
302
|
-
-- AddForeignKey
|
|
303
|
-
ALTER TABLE "accounts" ADD CONSTRAINT "accounts_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
304
|
-
|
|
305
|
-
-- AddForeignKey
|
|
306
|
-
ALTER TABLE "sessions" ADD CONSTRAINT "sessions_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
307
|
-
|
|
308
|
-
-- AddForeignKey
|
|
309
|
-
ALTER TABLE "api_tokens" ADD CONSTRAINT "api_tokens_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
310
|
-
|
|
311
|
-
-- AddForeignKey
|
|
312
|
-
ALTER TABLE "refresh_tokens" ADD CONSTRAINT "refresh_tokens_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
313
|
-
|
|
314
|
-
-- AddForeignKey
|
|
315
|
-
ALTER TABLE "refresh_tokens" ADD CONSTRAINT "refresh_tokens_api_token_id_fkey" FOREIGN KEY ("api_token_id") REFERENCES "api_tokens"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
316
|
-
|
|
317
|
-
-- AddForeignKey
|
|
318
|
-
ALTER TABLE "oauth_authorizations" ADD CONSTRAINT "oauth_authorizations_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
319
|
-
|
|
320
|
-
-- AddForeignKey
|
|
321
|
-
ALTER TABLE "oauth_authorizations" ADD CONSTRAINT "oauth_authorizations_client_id_fkey" FOREIGN KEY ("client_id") REFERENCES "oauth_clients"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
322
|
-
|
|
323
|
-
-- AddForeignKey
|
|
324
|
-
ALTER TABLE "push_tokens" ADD CONSTRAINT "push_tokens_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
325
|
-
|
|
326
|
-
-- AddForeignKey
|
|
327
|
-
ALTER TABLE "user_data" ADD CONSTRAINT "user_data_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
328
|
-
|
|
@@ -1,100 +0,0 @@
|
|
|
1
|
-
-- Better Auth migration (#587)
|
|
2
|
-
--
|
|
3
|
-
-- Drops the three NextAuth tables (accounts, sessions, verification_tokens)
|
|
4
|
-
-- and recreates accounts + sessions with the Better Auth column shape, plus a
|
|
5
|
-
-- new `verifications` table for Better Auth's email/magic-link surface.
|
|
6
|
-
--
|
|
7
|
-
-- The User table changes `email_verified` from a nullable timestamp to a
|
|
8
|
-
-- boolean. Pre-OSS posture: existing dev rows are sacrificed.
|
|
9
|
-
--
|
|
10
|
-
-- The five custom User relations (ApiToken, RefreshToken, OAuthAuthorization,
|
|
11
|
-
-- PushToken, UserData) are unaffected — their FKs to users.id and ON DELETE
|
|
12
|
-
-- CASCADE semantics remain identical.
|
|
13
|
-
|
|
14
|
-
-- DropForeignKey
|
|
15
|
-
ALTER TABLE "accounts" DROP CONSTRAINT "accounts_user_id_fkey";
|
|
16
|
-
|
|
17
|
-
-- DropForeignKey
|
|
18
|
-
ALTER TABLE "sessions" DROP CONSTRAINT "sessions_user_id_fkey";
|
|
19
|
-
|
|
20
|
-
-- DropTable
|
|
21
|
-
DROP TABLE "accounts";
|
|
22
|
-
|
|
23
|
-
-- DropTable
|
|
24
|
-
DROP TABLE "sessions";
|
|
25
|
-
|
|
26
|
-
-- DropTable
|
|
27
|
-
DROP TABLE "verification_tokens";
|
|
28
|
-
|
|
29
|
-
-- AlterTable: switch users.email_verified from timestamp? to boolean
|
|
30
|
-
ALTER TABLE "users" DROP COLUMN "email_verified";
|
|
31
|
-
ALTER TABLE "users" ADD COLUMN "email_verified" BOOLEAN NOT NULL DEFAULT false;
|
|
32
|
-
|
|
33
|
-
-- CreateTable: Better Auth sessions
|
|
34
|
-
CREATE TABLE "sessions" (
|
|
35
|
-
"id" TEXT NOT NULL,
|
|
36
|
-
"expires_at" TIMESTAMP(3) NOT NULL,
|
|
37
|
-
"token" TEXT NOT NULL,
|
|
38
|
-
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
39
|
-
"updated_at" TIMESTAMP(3) NOT NULL,
|
|
40
|
-
"ip_address" TEXT,
|
|
41
|
-
"user_agent" TEXT,
|
|
42
|
-
"user_id" TEXT NOT NULL,
|
|
43
|
-
|
|
44
|
-
CONSTRAINT "sessions_pkey" PRIMARY KEY ("id")
|
|
45
|
-
);
|
|
46
|
-
|
|
47
|
-
-- CreateIndex
|
|
48
|
-
CREATE UNIQUE INDEX "sessions_token_key" ON "sessions"("token");
|
|
49
|
-
|
|
50
|
-
-- CreateIndex
|
|
51
|
-
CREATE INDEX "sessions_user_id_idx" ON "sessions"("user_id");
|
|
52
|
-
|
|
53
|
-
-- CreateIndex
|
|
54
|
-
CREATE INDEX "sessions_token_idx" ON "sessions"("token");
|
|
55
|
-
|
|
56
|
-
-- AddForeignKey
|
|
57
|
-
ALTER TABLE "sessions" ADD CONSTRAINT "sessions_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
58
|
-
|
|
59
|
-
-- CreateTable: Better Auth accounts
|
|
60
|
-
CREATE TABLE "accounts" (
|
|
61
|
-
"id" TEXT NOT NULL,
|
|
62
|
-
"account_id" TEXT NOT NULL,
|
|
63
|
-
"provider_id" TEXT NOT NULL,
|
|
64
|
-
"user_id" TEXT NOT NULL,
|
|
65
|
-
"access_token" TEXT,
|
|
66
|
-
"refresh_token" TEXT,
|
|
67
|
-
"id_token" TEXT,
|
|
68
|
-
"access_token_expires_at" TIMESTAMP(3),
|
|
69
|
-
"refresh_token_expires_at" TIMESTAMP(3),
|
|
70
|
-
"scope" TEXT,
|
|
71
|
-
"password" TEXT,
|
|
72
|
-
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
73
|
-
"updated_at" TIMESTAMP(3) NOT NULL,
|
|
74
|
-
|
|
75
|
-
CONSTRAINT "accounts_pkey" PRIMARY KEY ("id")
|
|
76
|
-
);
|
|
77
|
-
|
|
78
|
-
-- CreateIndex
|
|
79
|
-
CREATE UNIQUE INDEX "accounts_provider_id_account_id_key" ON "accounts"("provider_id", "account_id");
|
|
80
|
-
|
|
81
|
-
-- CreateIndex
|
|
82
|
-
CREATE INDEX "accounts_user_id_idx" ON "accounts"("user_id");
|
|
83
|
-
|
|
84
|
-
-- AddForeignKey
|
|
85
|
-
ALTER TABLE "accounts" ADD CONSTRAINT "accounts_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
86
|
-
|
|
87
|
-
-- CreateTable: Better Auth verifications
|
|
88
|
-
CREATE TABLE "verifications" (
|
|
89
|
-
"id" TEXT NOT NULL,
|
|
90
|
-
"identifier" TEXT NOT NULL,
|
|
91
|
-
"value" TEXT NOT NULL,
|
|
92
|
-
"expires_at" TIMESTAMP(3) NOT NULL,
|
|
93
|
-
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
94
|
-
"updated_at" TIMESTAMP(3) NOT NULL,
|
|
95
|
-
|
|
96
|
-
CONSTRAINT "verifications_pkey" PRIMARY KEY ("id")
|
|
97
|
-
);
|
|
98
|
-
|
|
99
|
-
-- CreateIndex
|
|
100
|
-
CREATE INDEX "verifications_identifier_idx" ON "verifications"("identifier");
|
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
-- Add User billing identity fields (#854)
|
|
2
|
-
--
|
|
3
|
-
-- Adds two provider-agnostic billing columns to the `users` table and a
|
|
4
|
-
-- composite unique index over (billing_provider, billing_customer_id).
|
|
5
|
-
--
|
|
6
|
-
-- Motivation: the Stripe webhook handler (apps/api/src/routes/webhooks/stripe.ts)
|
|
7
|
-
-- upserts these fields on customer.created / checkout.session.completed events.
|
|
8
|
-
-- The #771 self-serve dashboard reads billing_customer_id to build the Stripe
|
|
9
|
-
-- customer-portal URL without a live Stripe API call on every page load.
|
|
10
|
-
--
|
|
11
|
-
-- Design decisions (locked in closed #732 + docs/internal/decisions/ailk-mvp-scope-2026-05-15.md):
|
|
12
|
-
-- - "billing_provider" not "stripe_provider" — provider-agnostic; v1 value is "stripe"
|
|
13
|
-
-- - Nullable: webhook is the only writer; signup does not pre-populate
|
|
14
|
-
-- - Composite unique allows (NULL, NULL) for pre-billing users (SQL NULL ≠ NULL)
|
|
15
|
-
-- - NO Purchase/Subscription tables — aggregate billing state deferred to Phase B (#852)
|
|
16
|
-
--
|
|
17
|
-
-- Rollback: drop the index then the two columns.
|
|
18
|
-
-- ALTER TABLE "users" DROP CONSTRAINT "users_billing_provider_billing_customer_id_key";
|
|
19
|
-
-- ALTER TABLE "users" DROP COLUMN "billing_provider";
|
|
20
|
-
-- ALTER TABLE "users" DROP COLUMN "billing_customer_id";
|
|
21
|
-
|
|
22
|
-
-- AlterTable
|
|
23
|
-
ALTER TABLE "users" ADD COLUMN "billing_provider" TEXT,
|
|
24
|
-
ADD COLUMN "billing_customer_id" TEXT;
|
|
25
|
-
|
|
26
|
-
-- CreateIndex
|
|
27
|
-
ALTER TABLE "users" ADD CONSTRAINT "users_billing_provider_billing_customer_id_key"
|
|
28
|
-
UNIQUE ("billing_provider", "billing_customer_id");
|
package/templates/database/migrations/20260516000000_add_user_tier_care_plan_seat/migration.sql
DELETED
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
-- Add User tier projection columns (#898)
|
|
2
|
-
--
|
|
3
|
-
-- Adds three columns to the `users` table that mirror the projection the
|
|
4
|
-
-- @working-theory/billing webhook handler maintains in-memory today. The Stripe
|
|
5
|
-
-- customer.subscription.created / customer.subscription.updated handlers
|
|
6
|
-
-- write these via product-aware routing: read subscription.items[0].price.product,
|
|
7
|
-
-- reverse-look up the tier from the STRIPE_PRODUCT_IDS map, then set:
|
|
8
|
-
--
|
|
9
|
-
-- - tier from the resolved tier name (pro / pro_plus / etc.)
|
|
10
|
-
-- - has_care_plan true iff tier == "pro_plus" (care plan is bundled, not a SKU)
|
|
11
|
-
-- - seat_count from subscription.items[0].quantity (1–50 per the
|
|
12
|
-
-- adjustable-quantity widget on Stripe Checkout)
|
|
13
|
-
--
|
|
14
|
-
-- Defaults keep pre-billing users at the free tier with one seat, matching
|
|
15
|
-
-- the read-side expectation that every user has a tier (no NULLs).
|
|
16
|
-
--
|
|
17
|
-
-- Rollback:
|
|
18
|
-
-- ALTER TABLE "users" DROP COLUMN "seat_count";
|
|
19
|
-
-- ALTER TABLE "users" DROP COLUMN "has_care_plan";
|
|
20
|
-
-- ALTER TABLE "users" DROP COLUMN "tier";
|
|
21
|
-
|
|
22
|
-
-- AlterTable
|
|
23
|
-
ALTER TABLE "users" ADD COLUMN "tier" TEXT NOT NULL DEFAULT 'free',
|
|
24
|
-
ADD COLUMN "has_care_plan" BOOLEAN NOT NULL DEFAULT false,
|
|
25
|
-
ADD COLUMN "seat_count" INTEGER NOT NULL DEFAULT 1;
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
-- Add telemetry_records table for opt-in seat-usage telemetry (S2 #1031)
|
|
2
|
-
--
|
|
3
|
-
-- Stores time-series records from customer deployments when AILK_TELEMETRY=1.
|
|
4
|
-
-- Written by POST /telemetry on apps-paid/license-issuer. Enables queries
|
|
5
|
-
-- computing the distribution of active_user_count / seat_count across the
|
|
6
|
-
-- customer base over a time window — the S2 trigger condition for revisiting
|
|
7
|
-
-- Option A (per the brief at docs/internal/decisions/2026-05-18-seat-billing-honor-system-launch.md).
|
|
8
|
-
--
|
|
9
|
-
-- Columns:
|
|
10
|
-
-- id — CUID primary key
|
|
11
|
-
-- customer_id — opaque customer identifier (Stripe customer ID)
|
|
12
|
-
-- active_user_count — active users observed in the deployment
|
|
13
|
-
-- seat_count — licensed seat count from the billing record
|
|
14
|
-
-- timestamp — client-side observation time (from the telemetry payload)
|
|
15
|
-
-- recorded_at — server-side receipt time (default now())
|
|
16
|
-
--
|
|
17
|
-
-- Indexes:
|
|
18
|
-
-- (customer_id, recorded_at DESC) — "latest record per customer" queries
|
|
19
|
-
-- (recorded_at DESC) — time-window aggregate queries
|
|
20
|
-
--
|
|
21
|
-
-- Rollback:
|
|
22
|
-
-- DROP INDEX "telemetry_records_recorded_at_idx";
|
|
23
|
-
-- DROP INDEX "telemetry_records_customer_id_recorded_at_idx";
|
|
24
|
-
-- DROP TABLE "telemetry_records";
|
|
25
|
-
|
|
26
|
-
-- CreateTable
|
|
27
|
-
CREATE TABLE "telemetry_records" (
|
|
28
|
-
"id" TEXT NOT NULL,
|
|
29
|
-
"customer_id" TEXT NOT NULL,
|
|
30
|
-
"active_user_count" INTEGER NOT NULL,
|
|
31
|
-
"seat_count" INTEGER NOT NULL,
|
|
32
|
-
"timestamp" TIMESTAMPTZ NOT NULL,
|
|
33
|
-
"recorded_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
34
|
-
|
|
35
|
-
CONSTRAINT "telemetry_records_pkey" PRIMARY KEY ("id")
|
|
36
|
-
);
|
|
37
|
-
|
|
38
|
-
-- CreateIndex
|
|
39
|
-
CREATE INDEX "telemetry_records_customer_id_recorded_at_idx" ON "telemetry_records"("customer_id", "recorded_at" DESC);
|
|
40
|
-
|
|
41
|
-
-- CreateIndex
|
|
42
|
-
CREATE INDEX "telemetry_records_recorded_at_idx" ON "telemetry_records"("recorded_at" DESC);
|
|
@@ -1,67 +0,0 @@
|
|
|
1
|
-
-- Add per-tenant Theme, SiteIdentity, and SEO tables (TWP3-MAT #1359)
|
|
2
|
-
--
|
|
3
|
-
-- Three tables for the paid-side persistence layer backing the marketing-api
|
|
4
|
-
-- theme/site-identity/seo endpoints. Each table stores one Zod-validated JSON
|
|
5
|
-
-- blob per tenant (userId = Better Auth User.id).
|
|
6
|
-
--
|
|
7
|
-
-- Design decisions (spec §3):
|
|
8
|
-
-- - One table per schema (not a polymorphic config table)
|
|
9
|
-
-- - Json column for the blob — schema evolves at the API layer without DB migration
|
|
10
|
-
-- - userId FK with onDelete Cascade — user removal cleans up config rows
|
|
11
|
-
-- - @@unique([userId]) — one active record per tenant per config type
|
|
12
|
-
--
|
|
13
|
-
-- Rollback:
|
|
14
|
-
-- DROP TABLE "tenant_seos";
|
|
15
|
-
-- DROP TABLE "tenant_site_identities";
|
|
16
|
-
-- DROP TABLE "tenant_themes";
|
|
17
|
-
|
|
18
|
-
-- CreateTable
|
|
19
|
-
CREATE TABLE "tenant_themes" (
|
|
20
|
-
"id" TEXT NOT NULL,
|
|
21
|
-
"user_id" TEXT NOT NULL,
|
|
22
|
-
"data" JSONB NOT NULL,
|
|
23
|
-
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
24
|
-
"updated_at" TIMESTAMPTZ NOT NULL,
|
|
25
|
-
|
|
26
|
-
CONSTRAINT "tenant_themes_pkey" PRIMARY KEY ("id")
|
|
27
|
-
);
|
|
28
|
-
|
|
29
|
-
-- CreateTable
|
|
30
|
-
CREATE TABLE "tenant_site_identities" (
|
|
31
|
-
"id" TEXT NOT NULL,
|
|
32
|
-
"user_id" TEXT NOT NULL,
|
|
33
|
-
"data" JSONB NOT NULL,
|
|
34
|
-
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
35
|
-
"updated_at" TIMESTAMPTZ NOT NULL,
|
|
36
|
-
|
|
37
|
-
CONSTRAINT "tenant_site_identities_pkey" PRIMARY KEY ("id")
|
|
38
|
-
);
|
|
39
|
-
|
|
40
|
-
-- CreateTable
|
|
41
|
-
CREATE TABLE "tenant_seos" (
|
|
42
|
-
"id" TEXT NOT NULL,
|
|
43
|
-
"user_id" TEXT NOT NULL,
|
|
44
|
-
"data" JSONB NOT NULL,
|
|
45
|
-
"created_at" TIMESTAMPTZ NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
46
|
-
"updated_at" TIMESTAMPTZ NOT NULL,
|
|
47
|
-
|
|
48
|
-
CONSTRAINT "tenant_seos_pkey" PRIMARY KEY ("id")
|
|
49
|
-
);
|
|
50
|
-
|
|
51
|
-
-- CreateIndex
|
|
52
|
-
CREATE UNIQUE INDEX "tenant_themes_user_id_key" ON "tenant_themes"("user_id");
|
|
53
|
-
|
|
54
|
-
-- CreateIndex
|
|
55
|
-
CREATE UNIQUE INDEX "tenant_site_identities_user_id_key" ON "tenant_site_identities"("user_id");
|
|
56
|
-
|
|
57
|
-
-- CreateIndex
|
|
58
|
-
CREATE UNIQUE INDEX "tenant_seos_user_id_key" ON "tenant_seos"("user_id");
|
|
59
|
-
|
|
60
|
-
-- AddForeignKey
|
|
61
|
-
ALTER TABLE "tenant_themes" ADD CONSTRAINT "tenant_themes_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
62
|
-
|
|
63
|
-
-- AddForeignKey
|
|
64
|
-
ALTER TABLE "tenant_site_identities" ADD CONSTRAINT "tenant_site_identities_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
65
|
-
|
|
66
|
-
-- AddForeignKey
|
|
67
|
-
ALTER TABLE "tenant_seos" ADD CONSTRAINT "tenant_seos_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
-- Retire the agency/commercial tier — migrate rows to enterprise (#3516)
|
|
2
|
-
--
|
|
3
|
-
-- Sam disposed Option B (2026-07-10): the `agency`/`commercial` tier is retired
|
|
4
|
-
-- from the entitlement manifest; multi-tenancy is now an Enterprise-gated
|
|
5
|
-
-- entitlement (the existing multi-tenant-basic / multi-tenant-advanced
|
|
6
|
-
-- features). Any User row whose tier projection still reads a retired value is
|
|
7
|
-
-- forward-migrated to `enterprise` so the narrowed Tier vocabulary
|
|
8
|
-
-- (free | pro | pro_plus | enterprise) holds and the partner gate keeps
|
|
9
|
-
-- admitting these customers.
|
|
10
|
-
--
|
|
11
|
-
-- The physical table is `users` (Prisma model `User`, @@map("users")); the
|
|
12
|
-
-- projected tier column is `tier`.
|
|
13
|
-
--
|
|
14
|
-
-- Forward-only and idempotent: re-running the UPDATE is a no-op once no
|
|
15
|
-
-- `agency`/`commercial` rows remain. No data loss beyond the intended remap.
|
|
16
|
-
--
|
|
17
|
-
-- Rollback: not reversible — the pre-migration `agency`/`commercial` values are
|
|
18
|
-
-- not recoverable from the row (both mapped to `enterprise`). Restore from a
|
|
19
|
-
-- pre-migration backup if the tier distinction is needed.
|
|
20
|
-
|
|
21
|
-
UPDATE "users" SET "tier" = 'enterprise' WHERE "tier" IN ('agency', 'commercial');
|