@aotter/mantle 0.2.0-alpha.5 → 0.2.0-alpha.7
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 +152 -45
- package/dist/auth/adapter.d.ts +32 -0
- package/dist/auth/adapter.js +285 -0
- package/dist/auth/admin.d.ts +3 -0
- package/dist/auth/admin.js +21 -0
- package/dist/auth/caller.d.ts +86 -0
- package/dist/auth/caller.js +154 -0
- package/dist/auth/hardening.d.ts +24 -0
- package/dist/auth/hardening.js +40 -0
- package/dist/auth/identity.d.ts +121 -0
- package/dist/auth/identity.js +203 -0
- package/dist/auth/oauth.d.ts +31 -0
- package/dist/auth/oauth.js +124 -0
- package/dist/auth/resource-seeds.js +10 -0
- package/dist/auth/routes.d.ts +32 -0
- package/dist/auth/{createAuthRoutes.js → routes.js} +130 -35
- package/dist/build/compiler.d.ts +790 -0
- package/dist/build/compiler.js +6971 -0
- package/dist/{spec → build/spec}/domain/model/ManifestGrammar.d.ts +28 -42
- package/dist/{spec → build/spec}/domain/model/RuntimePlan.d.ts +77 -3
- package/dist/{spec → build/spec}/domain/model/SqlIr.d.ts +35 -6
- package/dist/build/spec/domain/model/UserFields.d.ts +20 -0
- package/dist/{spec → build/spec}/domain/service/PlanFingerprint.d.ts +2 -1
- package/dist/{spec → build/spec}/kernel/diagnostic.d.ts +1 -30
- package/dist/bun/assets.d.ts +2 -0
- package/dist/bun/assets.js +24 -0
- package/dist/domain/adminOrder.js +24 -0
- package/dist/domain/columns.js +55 -0
- package/dist/domain/describe/chunk-ZIQVLA7X.js +363 -0
- package/dist/domain/describe/index.d.ts +58 -0
- package/dist/domain/describe/index.js +115 -0
- package/dist/domain/describe/target-hash.d.ts +8 -0
- package/dist/domain/describe/target-hash.js +12 -0
- package/dist/domain/describe/targets.d.ts +40 -0
- package/dist/domain/entry.js +33 -0
- package/dist/domain/generated-tools.js +17 -0
- package/dist/domain/generation.d.ts +16 -0
- package/dist/domain/generation.js +1 -0
- package/dist/domain/input.js +17 -0
- package/dist/domain/model.js +1 -0
- package/dist/domain/paging.js +204 -0
- package/dist/domain/recipes.js +19 -0
- package/dist/domain/userReferences.js +5 -0
- package/dist/domain/wireScalars.js +47 -0
- package/dist/infrastructure/adminEntries.js +153 -0
- package/dist/infrastructure/adminPaging.js +72 -0
- package/dist/infrastructure/artifacts.js +71 -0
- package/dist/infrastructure/authSchema.js +83 -0
- package/dist/infrastructure/bundle.js +84 -0
- package/dist/infrastructure/cli.js +101 -0
- package/dist/infrastructure/generate.d.ts +14 -0
- package/dist/infrastructure/generate.js +174 -0
- package/dist/infrastructure/generateAuth.d.ts +8 -0
- package/dist/infrastructure/generateAuth.js +17 -0
- package/dist/infrastructure/inputs.js +36 -0
- package/dist/infrastructure/wrangler.js +71 -0
- package/dist/kernel/authorization.d.ts +4 -0
- package/dist/kernel/authorization.js +16 -0
- package/dist/kernel/binds.d.ts +51 -0
- package/dist/kernel/binds.js +45 -0
- package/dist/kernel/caller-identity.d.ts +24 -0
- package/dist/kernel/caller-identity.js +22 -0
- package/dist/kernel/contract-error.d.ts +12 -0
- package/dist/kernel/contract-error.js +14 -0
- package/dist/kernel/contracts.d.ts +139 -0
- package/dist/kernel/contracts.js +92 -0
- package/dist/{spec/domain/service/CloudflareCron.d.ts → kernel/cron.d.ts} +0 -1
- package/dist/{spec/domain/service/CloudflareCron.js → kernel/cron.js} +1 -6
- package/dist/kernel/dialect/common.d.ts +39 -0
- package/dist/kernel/dialect/common.js +6 -0
- package/dist/kernel/dialect/postgres.d.ts +16 -0
- package/dist/kernel/dialect/postgres.js +18 -0
- package/dist/kernel/dialect/sqlite.d.ts +20 -0
- package/dist/kernel/dialect/sqlite.js +34 -0
- package/dist/kernel/driver/bun-sqlite.d.ts +19 -0
- package/dist/kernel/driver/bun-sqlite.js +77 -0
- package/dist/kernel/driver/d1.d.ts +24 -0
- package/dist/kernel/driver/d1.js +22 -0
- package/dist/kernel/driver/postgres.d.ts +25 -0
- package/dist/kernel/driver/postgres.js +95 -0
- package/dist/kernel/driver/transaction-context.d.ts +10 -0
- package/dist/kernel/driver/transaction-context.js +29 -0
- package/dist/kernel/email.d.ts +28 -0
- package/dist/{auth/emailTemplates.js → kernel/email.js} +13 -2
- package/dist/kernel/host-access.d.ts +10 -0
- package/dist/kernel/host-access.js +65 -0
- package/dist/kernel/host-caller.d.ts +38 -0
- package/dist/kernel/host-caller.js +55 -0
- package/dist/kernel/json-body.d.ts +4 -0
- package/dist/kernel/json-body.js +44 -0
- package/dist/kernel/mcp-apps.d.ts +49 -0
- package/dist/kernel/mcp-apps.js +40 -0
- package/dist/kernel/mcp-call.d.ts +5 -0
- package/dist/kernel/mcp-call.js +25 -0
- package/dist/kernel/mcp-handler.js +288 -0
- package/dist/kernel/mcp.d.ts +101 -0
- package/dist/kernel/mcp.js +25 -0
- package/dist/kernel/media.d.ts +27 -0
- package/dist/kernel/media.js +216 -0
- package/dist/kernel/paging.d.ts +55 -0
- package/dist/kernel/paging.js +95 -0
- package/dist/kernel/publishing.d.ts +4 -0
- package/dist/kernel/publishing.js +16 -0
- package/dist/{cloudflare/r2Media.d.ts → kernel/r2-media.d.ts} +4 -5
- package/dist/kernel/r2-media.js +78 -0
- package/dist/kernel/rest-dispatch.js +38 -0
- package/dist/kernel/rest-router.js +63 -0
- package/dist/kernel/rest.d.ts +58 -0
- package/dist/kernel/rest.js +41 -0
- package/dist/kernel/scalars.d.ts +6 -0
- package/dist/kernel/scalars.js +43 -0
- package/dist/kernel/search.js +5 -0
- package/dist/{core/site.d.ts → kernel/site-types.d.ts} +38 -9
- package/dist/kernel/site-types.js +1 -0
- package/dist/kernel/site.d.ts +41 -0
- package/dist/kernel/site.js +32 -0
- package/dist/kernel/store.d.ts +165 -0
- package/dist/kernel/store.js +257 -0
- package/dist/kernel/surface.d.ts +10 -0
- package/dist/kernel/surface.js +19 -0
- package/dist/kernel/sweep.d.ts +17 -0
- package/dist/kernel/sweep.js +27 -0
- package/dist/kernel/translations.d.ts +1 -0
- package/dist/kernel/translations.js +13 -0
- package/dist/kernel/user-caller.d.ts +31 -0
- package/dist/kernel/user-caller.js +67 -0
- package/dist/kernel/user-field-name.js +3 -0
- package/dist/kernel/user-fields.d.ts +34 -0
- package/dist/kernel/user-fields.js +71 -0
- package/dist/kernel/validation.d.ts +15 -0
- package/dist/kernel/validation.js +54 -0
- package/dist/kernel/web-gateway.js +68 -0
- package/dist/kernel/web-head.js +15 -0
- package/dist/kernel/web-response.js +8 -0
- package/dist/kernel/web.d.ts +75 -0
- package/dist/kernel/web.js +155 -0
- package/dist/kernel/where.js +27 -0
- package/dist/testing/index.d.ts +1 -37
- package/dist/testing/index.js +1 -43
- package/dist/usecase/adminBindings.js +142 -0
- package/dist/usecase/adminDescriptors.js +153 -0
- package/dist/usecase/generate.js +164 -0
- package/dist/usecase/handlers.js +21 -0
- package/dist/usecase/mcp-media.js +17 -0
- package/dist/usecase/mcp.js +96 -0
- package/dist/usecase/paging.js +72 -0
- package/dist/usecase/publishing.js +63 -0
- package/dist/usecase/refusals.js +27 -0
- package/dist/usecase/rest.js +54 -0
- package/dist/usecase/search.js +7 -0
- package/dist/usecase/site.js +40 -0
- package/dist/usecase/stores.js +62 -0
- package/dist/usecase/translations.js +78 -0
- package/dist/usecase/ttl.js +20 -0
- package/dist/usecase/validation.js +132 -0
- package/dist/usecase/web.js +22 -0
- package/docs/examples/README.md +31 -16
- package/docs/examples/app-shell/README.md +48 -0
- package/docs/examples/app-shell/package.json +34 -0
- package/docs/examples/app-shell/pnpm-workspace.yaml +8 -0
- package/docs/examples/app-shell/smoke-kit.mjs +100 -0
- package/docs/examples/app-shell/src/admin.ts +10 -0
- package/docs/examples/app-shell/src/auth.ts +55 -0
- package/docs/examples/app-shell/src/handlers.ts +5 -0
- package/docs/examples/app-shell/src/index.ts +4 -0
- package/docs/examples/app-shell/src/routes.ts +13 -0
- package/docs/examples/app-shell/src/schedule.ts +8 -0
- package/docs/examples/app-shell/src/service.ts +70 -0
- package/docs/examples/app-shell/src/sign-in.ts +41 -0
- package/docs/examples/app-shell/src/signup.ts +8 -0
- package/docs/examples/{reference-service → app-shell}/tsconfig.json +2 -1
- package/docs/examples/app-shell/worker-configuration.d.ts +22 -0
- package/docs/examples/app-shell/wrangler.jsonc +61 -0
- package/docs/examples/club-events/README.md +60 -0
- package/docs/examples/club-events/manifests/club-events.yaml +225 -0
- package/docs/examples/club-events/smoke.mjs +121 -0
- package/docs/examples/club-events/src/handlers.ts +25 -0
- package/docs/examples/club-events/src/signup.ts +9 -0
- package/docs/examples/generated-web/README.md +74 -0
- package/docs/examples/generated-web/posts.yaml +38 -0
- package/docs/examples/generated-web/seed.sql +6 -0
- package/docs/examples/generated-web/src/worker.ts +43 -0
- package/docs/examples/generated-web/tsconfig.json +8 -0
- package/docs/examples/generated-web/wrangler.jsonc +7 -0
- package/docs/examples/purchasing/.dev.vars.example +6 -0
- package/docs/examples/purchasing/README.md +90 -0
- package/docs/examples/purchasing/manifests/purchasing.yaml +341 -0
- package/docs/examples/purchasing/seed.sql +4 -0
- package/docs/examples/purchasing/smoke.mjs +171 -0
- package/docs/examples/purchasing/src/admin.ts +12 -0
- package/docs/examples/purchasing/src/handlers.ts +33 -0
- package/docs/examples/purchasing/src/notify.ts +29 -0
- package/docs/examples/purchasing/src/requests-page.ts +57 -0
- package/docs/examples/purchasing/src/routes.ts +53 -0
- package/docs/examples/purchasing/src/schedule.ts +31 -0
- package/docs/examples/purchasing/src/signup.ts +5 -0
- package/docs/examples/purchasing/src/supplier.ts +32 -0
- package/docs/examples/purchasing/wrangler.jsonc +68 -0
- package/docs/examples/recipes/README.md +58 -0
- package/docs/examples/recipes/manifests/recipes.yaml +75 -0
- package/docs/examples/recipes/smoke.mjs +102 -0
- package/docs/examples/recipes/src/media.ts +13 -0
- package/docs/examples/recipes/src/pages.ts +99 -0
- package/docs/examples/recipes/src/routes.ts +71 -0
- package/docs/examples/recipes/src/site-config.ts +12 -0
- package/docs/examples/recipes/wrangler.jsonc +73 -0
- package/docs/handbook/cloudflare/authentication.md +142 -212
- package/docs/handbook/cloudflare/chatgpt-sites.md +4 -113
- package/docs/handbook/cloudflare/deploy-and-operate.md +20 -103
- package/docs/handbook/cloudflare/media-r2.md +62 -133
- package/docs/handbook/cloudflare/service-entry.md +180 -116
- package/docs/handbook/concepts/authorization.md +10 -123
- package/docs/handbook/concepts/four-atoms.md +9 -92
- package/docs/handbook/concepts/lifecycle-and-locales.md +9 -80
- package/docs/handbook/concepts/mcp-and-agents.md +10 -141
- package/docs/handbook/concepts/procedures-and-triggers.md +5 -162
- package/docs/handbook/concepts/runtime-and-adapters.md +15 -183
- package/docs/handbook/concepts/views.md +10 -109
- package/docs/handbook/examples/hub.md +2 -18
- package/docs/handbook/guides/adapter-guide.md +11 -0
- package/docs/handbook/guides/admin-extensions.md +20 -0
- package/docs/handbook/guides/admin-ui.md +5 -163
- package/docs/handbook/guides/agent-setup.md +5 -18
- package/docs/handbook/guides/email.md +86 -0
- package/docs/handbook/guides/mcp-apps.md +44 -0
- package/docs/handbook/guides/native-admin.md +298 -0
- package/docs/handbook/guides/native-execution.md +132 -0
- package/docs/handbook/guides/oauth.md +105 -0
- package/docs/handbook/guides/postgres-adapters.md +56 -0
- package/docs/handbook/guides/public-pages.md +53 -0
- package/docs/handbook/guides/size-and-startup.md +9 -0
- package/docs/handbook/guides/typed-queries.md +39 -102
- package/docs/handbook/navigation.json +164 -30
- package/docs/handbook/reference/admin-descriptors.md +88 -0
- package/docs/handbook/reference/authorization.md +44 -52
- package/docs/handbook/reference/describe.md +56 -0
- package/docs/handbook/reference/diagnostics.md +15 -78
- package/docs/handbook/reference/features.md +45 -53
- package/docs/handbook/reference/manifest.md +6 -69
- package/docs/handbook/reference/procedure.md +9 -117
- package/docs/handbook/reference/schema.md +65 -172
- package/docs/handbook/reference/site-config.md +5 -65
- package/docs/handbook/reference/surface.md +279 -93
- package/docs/handbook/reference/trigger.md +24 -93
- package/docs/handbook/reference/view.md +32 -158
- package/docs/handbook/releases/index.md +124 -15
- package/docs/handbook/start/overview.md +9 -56
- package/docs/handbook/start/project-and-cli.md +40 -141
- package/docs/handbook/start/quickstart-worker.md +38 -116
- package/docs/skills/develop/SKILL.md +34 -117
- package/docs/skills/develop/mcp-app.md +37 -77
- package/docs/skills/integrate/SKILL.md +42 -84
- package/docs/skills/media-gc/SKILL.md +14 -3
- package/docs/skills/provision/SKILL.md +25 -88
- package/docs/skills/update/SKILL.md +19 -40
- package/docs/source/scripts/postgres-adapter.ts +101 -0
- package/docs/upgrade-0.1-to-0.2.md +26 -10
- package/package.json +97 -112
- package/skills/.keep +0 -0
- package/skills/README.md +72 -0
- package/skills/mantle/SKILL.md +135 -0
- package/skills/mantle/references/local-testing.md +11 -0
- package/skills/mantle/references/web.md +41 -0
- package/skills/mantle/references/website.md +47 -0
- package/dist/admin/consent.d.ts +0 -17
- package/dist/admin/consent.d.ts.map +0 -1
- package/dist/admin/consent.js +0 -17
- package/dist/admin/consent.js.map +0 -1
- package/dist/admin/createAdminSurface.d.ts +0 -22
- package/dist/admin/createAdminSurface.d.ts.map +0 -1
- package/dist/admin/createAdminSurface.js +0 -592
- package/dist/admin/createAdminSurface.js.map +0 -1
- package/dist/admin/design.d.ts +0 -7
- package/dist/admin/design.d.ts.map +0 -1
- package/dist/admin/design.js +0 -18
- package/dist/admin/design.js.map +0 -1
- package/dist/admin/developerConsole.d.ts +0 -267
- package/dist/admin/developerConsole.d.ts.map +0 -1
- package/dist/admin/developerConsole.js +0 -136
- package/dist/admin/developerConsole.js.map +0 -1
- package/dist/admin/identity.d.ts +0 -62
- package/dist/admin/identity.d.ts.map +0 -1
- package/dist/admin/identity.js +0 -7
- package/dist/admin/identity.js.map +0 -1
- package/dist/admin/index.d.ts +0 -6
- package/dist/admin/index.d.ts.map +0 -1
- package/dist/admin/index.js +0 -6
- package/dist/admin/index.js.map +0 -1
- package/dist/admin/procedureFlow.d.ts +0 -38
- package/dist/admin/procedureFlow.d.ts.map +0 -1
- package/dist/admin/procedureFlow.js +0 -188
- package/dist/admin/procedureFlow.js.map +0 -1
- package/dist/auth/ConsoleEmailSender.d.ts +0 -15
- package/dist/auth/ConsoleEmailSender.d.ts.map +0 -1
- package/dist/auth/ConsoleEmailSender.js +0 -19
- package/dist/auth/ConsoleEmailSender.js.map +0 -1
- package/dist/auth/appleClientSecret.d.ts +0 -75
- package/dist/auth/appleClientSecret.d.ts.map +0 -1
- package/dist/auth/appleClientSecret.js +0 -116
- package/dist/auth/appleClientSecret.js.map +0 -1
- package/dist/auth/buildAuth.d.ts +0 -4566
- package/dist/auth/buildAuth.d.ts.map +0 -1
- package/dist/auth/buildAuth.js +0 -311
- package/dist/auth/buildAuth.js.map +0 -1
- package/dist/auth/callerResolver.d.ts +0 -48
- package/dist/auth/callerResolver.d.ts.map +0 -1
- package/dist/auth/callerResolver.js +0 -49
- package/dist/auth/callerResolver.js.map +0 -1
- package/dist/auth/createAuthRoutes.d.ts +0 -22
- package/dist/auth/createAuthRoutes.d.ts.map +0 -1
- package/dist/auth/createAuthRoutes.js.map +0 -1
- package/dist/auth/createMantleAuth.d.ts +0 -3
- package/dist/auth/createMantleAuth.d.ts.map +0 -1
- package/dist/auth/createMantleAuth.js +0 -503
- package/dist/auth/createMantleAuth.js.map +0 -1
- package/dist/auth/db.d.ts +0 -17
- package/dist/auth/db.d.ts.map +0 -1
- package/dist/auth/db.js +0 -24
- package/dist/auth/db.js.map +0 -1
- package/dist/auth/emailTemplates.d.ts +0 -7
- package/dist/auth/emailTemplates.d.ts.map +0 -1
- package/dist/auth/emailTemplates.js.map +0 -1
- package/dist/auth/index.d.ts +0 -9
- package/dist/auth/index.d.ts.map +0 -1
- package/dist/auth/index.js +0 -7
- package/dist/auth/index.js.map +0 -1
- package/dist/auth/methods.d.ts +0 -717
- package/dist/auth/methods.d.ts.map +0 -1
- package/dist/auth/methods.js +0 -321
- package/dist/auth/methods.js.map +0 -1
- package/dist/auth/oauthTokens.d.ts +0 -24
- package/dist/auth/oauthTokens.d.ts.map +0 -1
- package/dist/auth/oauthTokens.js +0 -146
- package/dist/auth/oauthTokens.js.map +0 -1
- package/dist/auth/setupIncomplete.d.ts +0 -16
- package/dist/auth/setupIncomplete.d.ts.map +0 -1
- package/dist/auth/setupIncomplete.js +0 -50
- package/dist/auth/setupIncomplete.js.map +0 -1
- package/dist/auth/types.d.ts +0 -440
- package/dist/auth/types.d.ts.map +0 -1
- package/dist/auth/types.js +0 -10
- package/dist/auth/types.js.map +0 -1
- package/dist/bun/index.d.ts +0 -65
- package/dist/bun/index.d.ts.map +0 -1
- package/dist/bun/index.js +0 -130
- package/dist/bun/index.js.map +0 -1
- package/dist/cli/emitModule.d.ts +0 -7
- package/dist/cli/emitModule.d.ts.map +0 -1
- package/dist/cli/emitModule.js +0 -127
- package/dist/cli/emitModule.js.map +0 -1
- package/dist/cli/generate.d.ts +0 -8
- package/dist/cli/generate.d.ts.map +0 -1
- package/dist/cli/generate.js +0 -391
- package/dist/cli/generate.js.map +0 -1
- package/dist/cli/main.d.ts +0 -3
- package/dist/cli/main.d.ts.map +0 -1
- package/dist/cli/main.js +0 -21
- package/dist/cli/main.js.map +0 -1
- package/dist/cli/preset.d.ts +0 -18
- package/dist/cli/preset.d.ts.map +0 -1
- package/dist/cli/preset.js +0 -353
- package/dist/cli/preset.js.map +0 -1
- package/dist/cloudflare/index.d.ts +0 -21
- package/dist/cloudflare/index.d.ts.map +0 -1
- package/dist/cloudflare/index.js +0 -14
- package/dist/cloudflare/index.js.map +0 -1
- package/dist/cloudflare/r2Media.d.ts.map +0 -1
- package/dist/cloudflare/r2Media.js +0 -69
- package/dist/cloudflare/r2Media.js.map +0 -1
- package/dist/core/caller.d.ts +0 -35
- package/dist/core/caller.d.ts.map +0 -1
- package/dist/core/caller.js +0 -3
- package/dist/core/caller.js.map +0 -1
- package/dist/core/createMantle.d.ts +0 -22
- package/dist/core/createMantle.d.ts.map +0 -1
- package/dist/core/createMantle.js +0 -117
- package/dist/core/createMantle.js.map +0 -1
- package/dist/core/dialect.d.ts +0 -41
- package/dist/core/dialect.d.ts.map +0 -1
- package/dist/core/dialect.js +0 -7
- package/dist/core/dialect.js.map +0 -1
- package/dist/core/driver.d.ts +0 -17
- package/dist/core/driver.d.ts.map +0 -1
- package/dist/core/driver.js +0 -2
- package/dist/core/driver.js.map +0 -1
- package/dist/core/email.d.ts +0 -17
- package/dist/core/email.d.ts.map +0 -1
- package/dist/core/email.js +0 -2
- package/dist/core/email.js.map +0 -1
- package/dist/core/index.d.ts +0 -16
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js +0 -16
- package/dist/core/index.js.map +0 -1
- package/dist/core/invocation.d.ts +0 -66
- package/dist/core/invocation.d.ts.map +0 -1
- package/dist/core/invocation.js +0 -3
- package/dist/core/invocation.js.map +0 -1
- package/dist/core/observation.d.ts +0 -3
- package/dist/core/observation.d.ts.map +0 -1
- package/dist/core/observation.js +0 -10
- package/dist/core/observation.js.map +0 -1
- package/dist/core/runtime/auth.d.ts +0 -9
- package/dist/core/runtime/auth.d.ts.map +0 -1
- package/dist/core/runtime/auth.js +0 -39
- package/dist/core/runtime/auth.js.map +0 -1
- package/dist/core/runtime/createRuntime.d.ts +0 -23
- package/dist/core/runtime/createRuntime.d.ts.map +0 -1
- package/dist/core/runtime/createRuntime.js +0 -214
- package/dist/core/runtime/createRuntime.js.map +0 -1
- package/dist/core/runtime/verifyPlan.d.ts +0 -34
- package/dist/core/runtime/verifyPlan.d.ts.map +0 -1
- package/dist/core/runtime/verifyPlan.js +0 -301
- package/dist/core/runtime/verifyPlan.js.map +0 -1
- package/dist/core/service.d.ts +0 -45
- package/dist/core/service.d.ts.map +0 -1
- package/dist/core/service.js +0 -2
- package/dist/core/service.js.map +0 -1
- package/dist/core/site.d.ts.map +0 -1
- package/dist/core/site.js +0 -2
- package/dist/core/site.js.map +0 -1
- package/dist/core/siteConfig.d.ts +0 -5
- package/dist/core/siteConfig.d.ts.map +0 -1
- package/dist/core/siteConfig.js +0 -24
- package/dist/core/siteConfig.js.map +0 -1
- package/dist/core/sql/allowlist.d.ts +0 -65
- package/dist/core/sql/allowlist.d.ts.map +0 -1
- package/dist/core/sql/allowlist.js +0 -705
- package/dist/core/sql/allowlist.js.map +0 -1
- package/dist/core/sql/ast.d.ts +0 -24
- package/dist/core/sql/ast.d.ts.map +0 -1
- package/dist/core/sql/ast.js +0 -32
- package/dist/core/sql/ast.js.map +0 -1
- package/dist/core/sql/compile.d.ts +0 -50
- package/dist/core/sql/compile.d.ts.map +0 -1
- package/dist/core/sql/compile.js +0 -48
- package/dist/core/sql/compile.js.map +0 -1
- package/dist/core/sql/policy.d.ts +0 -121
- package/dist/core/sql/policy.d.ts.map +0 -1
- package/dist/core/sql/policy.js +0 -379
- package/dist/core/sql/policy.js.map +0 -1
- package/dist/core/sql/positions.d.ts +0 -30
- package/dist/core/sql/positions.d.ts.map +0 -1
- package/dist/core/sql/positions.js +0 -22
- package/dist/core/sql/positions.js.map +0 -1
- package/dist/core/sql/run.d.ts +0 -76
- package/dist/core/sql/run.d.ts.map +0 -1
- package/dist/core/sql/run.js +0 -267
- package/dist/core/sql/run.js.map +0 -1
- package/dist/core/store/createStore.d.ts +0 -49
- package/dist/core/store/createStore.d.ts.map +0 -1
- package/dist/core/store/createStore.js +0 -227
- package/dist/core/store/createStore.js.map +0 -1
- package/dist/core/store/cursor.d.ts +0 -4
- package/dist/core/store/cursor.d.ts.map +0 -1
- package/dist/core/store/cursor.js +0 -22
- package/dist/core/store/cursor.js.map +0 -1
- package/dist/core/store/json.d.ts +0 -80
- package/dist/core/store/json.d.ts.map +0 -1
- package/dist/core/store/json.js +0 -342
- package/dist/core/store/json.js.map +0 -1
- package/dist/core/store.d.ts +0 -160
- package/dist/core/store.d.ts.map +0 -1
- package/dist/core/store.js +0 -2
- package/dist/core/store.js.map +0 -1
- package/dist/core/wire.d.ts +0 -20
- package/dist/core/wire.d.ts.map +0 -1
- package/dist/core/wire.js +0 -84
- package/dist/core/wire.js.map +0 -1
- package/dist/core/withCaller.d.ts +0 -24
- package/dist/core/withCaller.d.ts.map +0 -1
- package/dist/core/withCaller.js +0 -35
- package/dist/core/withCaller.js.map +0 -1
- package/dist/d1/adapter.d.ts +0 -12
- package/dist/d1/adapter.d.ts.map +0 -1
- package/dist/d1/adapter.js +0 -23
- package/dist/d1/adapter.js.map +0 -1
- package/dist/d1/codec.d.ts +0 -14
- package/dist/d1/codec.d.ts.map +0 -1
- package/dist/d1/codec.js +0 -136
- package/dist/d1/codec.js.map +0 -1
- package/dist/d1/compile/index.d.ts +0 -9
- package/dist/d1/compile/index.d.ts.map +0 -1
- package/dist/d1/compile/index.js +0 -9
- package/dist/d1/compile/index.js.map +0 -1
- package/dist/d1/dialect.d.ts +0 -4
- package/dist/d1/dialect.d.ts.map +0 -1
- package/dist/d1/dialect.js +0 -13
- package/dist/d1/dialect.js.map +0 -1
- package/dist/d1/executor.d.ts +0 -13
- package/dist/d1/executor.d.ts.map +0 -1
- package/dist/d1/executor.js +0 -91
- package/dist/d1/executor.js.map +0 -1
- package/dist/d1/index.d.ts +0 -6
- package/dist/d1/index.d.ts.map +0 -1
- package/dist/d1/index.js +0 -6
- package/dist/d1/index.js.map +0 -1
- package/dist/d1/lower.d.ts +0 -8
- package/dist/d1/lower.d.ts.map +0 -1
- package/dist/d1/lower.js +0 -167
- package/dist/d1/lower.js.map +0 -1
- package/dist/d1/media.d.ts +0 -5
- package/dist/d1/media.d.ts.map +0 -1
- package/dist/d1/media.js +0 -157
- package/dist/d1/media.js.map +0 -1
- package/dist/d1/migrations.d.ts +0 -12
- package/dist/d1/migrations.d.ts.map +0 -1
- package/dist/d1/migrations.js +0 -111
- package/dist/d1/migrations.js.map +0 -1
- package/dist/d1/print.d.ts +0 -28
- package/dist/d1/print.d.ts.map +0 -1
- package/dist/d1/print.js +0 -54
- package/dist/d1/print.js.map +0 -1
- package/dist/d1/site.d.ts +0 -17
- package/dist/d1/site.d.ts.map +0 -1
- package/dist/d1/site.js +0 -63
- package/dist/d1/site.js.map +0 -1
- package/dist/d1/storage.d.ts +0 -34
- package/dist/d1/storage.d.ts.map +0 -1
- package/dist/d1/storage.js +0 -288
- package/dist/d1/storage.js.map +0 -1
- package/dist/d1/tz.d.ts +0 -21
- package/dist/d1/tz.d.ts.map +0 -1
- package/dist/d1/tz.js +0 -54
- package/dist/d1/tz.js.map +0 -1
- package/dist/d1/validator.d.ts +0 -10
- package/dist/d1/validator.d.ts.map +0 -1
- package/dist/d1/validator.js +0 -33
- package/dist/d1/validator.js.map +0 -1
- package/dist/mcp/apps.d.ts +0 -43
- package/dist/mcp/apps.d.ts.map +0 -1
- package/dist/mcp/apps.js +0 -57
- package/dist/mcp/apps.js.map +0 -1
- package/dist/mcp/catalog.d.ts +0 -55
- package/dist/mcp/catalog.d.ts.map +0 -1
- package/dist/mcp/catalog.js +0 -81
- package/dist/mcp/catalog.js.map +0 -1
- package/dist/mcp/createMcpSurface.d.ts +0 -60
- package/dist/mcp/createMcpSurface.d.ts.map +0 -1
- package/dist/mcp/createMcpSurface.js +0 -182
- package/dist/mcp/createMcpSurface.js.map +0 -1
- package/dist/mcp/index.d.ts +0 -4
- package/dist/mcp/index.d.ts.map +0 -1
- package/dist/mcp/index.js +0 -4
- package/dist/mcp/index.js.map +0 -1
- package/dist/mcp/media.d.ts +0 -9
- package/dist/mcp/media.d.ts.map +0 -1
- package/dist/mcp/media.js +0 -33
- package/dist/mcp/media.js.map +0 -1
- package/dist/postgres/adapter.d.ts +0 -20
- package/dist/postgres/adapter.d.ts.map +0 -1
- package/dist/postgres/adapter.js +0 -44
- package/dist/postgres/adapter.js.map +0 -1
- package/dist/postgres/codec.d.ts +0 -13
- package/dist/postgres/codec.d.ts.map +0 -1
- package/dist/postgres/codec.js +0 -110
- package/dist/postgres/codec.js.map +0 -1
- package/dist/postgres/compile/index.d.ts +0 -9
- package/dist/postgres/compile/index.d.ts.map +0 -1
- package/dist/postgres/compile/index.js +0 -9
- package/dist/postgres/compile/index.js.map +0 -1
- package/dist/postgres/driver.d.ts +0 -92
- package/dist/postgres/driver.d.ts.map +0 -1
- package/dist/postgres/driver.js +0 -110
- package/dist/postgres/driver.js.map +0 -1
- package/dist/postgres/executor.d.ts +0 -20
- package/dist/postgres/executor.d.ts.map +0 -1
- package/dist/postgres/executor.js +0 -69
- package/dist/postgres/executor.js.map +0 -1
- package/dist/postgres/index.d.ts +0 -7
- package/dist/postgres/index.d.ts.map +0 -1
- package/dist/postgres/index.js +0 -7
- package/dist/postgres/index.js.map +0 -1
- package/dist/postgres/lower.d.ts +0 -6
- package/dist/postgres/lower.d.ts.map +0 -1
- package/dist/postgres/lower.js +0 -157
- package/dist/postgres/lower.js.map +0 -1
- package/dist/postgres/print.d.ts +0 -11
- package/dist/postgres/print.d.ts.map +0 -1
- package/dist/postgres/print.js +0 -121
- package/dist/postgres/print.js.map +0 -1
- package/dist/postgres/storage.d.ts +0 -19
- package/dist/postgres/storage.d.ts.map +0 -1
- package/dist/postgres/storage.js +0 -201
- package/dist/postgres/storage.js.map +0 -1
- package/dist/postgres/textRows.d.ts +0 -10
- package/dist/postgres/textRows.d.ts.map +0 -1
- package/dist/postgres/textRows.js +0 -44
- package/dist/postgres/textRows.js.map +0 -1
- package/dist/postgres/validator.d.ts +0 -12
- package/dist/postgres/validator.d.ts.map +0 -1
- package/dist/postgres/validator.js +0 -46
- package/dist/postgres/validator.js.map +0 -1
- package/dist/spec/domain/index.d.ts +0 -3
- package/dist/spec/domain/index.d.ts.map +0 -1
- package/dist/spec/domain/index.js +0 -3
- package/dist/spec/domain/index.js.map +0 -1
- package/dist/spec/domain/model/ContentState.d.ts +0 -8
- package/dist/spec/domain/model/ContentState.d.ts.map +0 -1
- package/dist/spec/domain/model/ContentState.js +0 -7
- package/dist/spec/domain/model/ContentState.js.map +0 -1
- package/dist/spec/domain/model/Entry.d.ts +0 -29
- package/dist/spec/domain/model/Entry.d.ts.map +0 -1
- package/dist/spec/domain/model/Entry.js +0 -16
- package/dist/spec/domain/model/Entry.js.map +0 -1
- package/dist/spec/domain/model/Locale.d.ts +0 -30
- package/dist/spec/domain/model/Locale.d.ts.map +0 -1
- package/dist/spec/domain/model/Locale.js +0 -33
- package/dist/spec/domain/model/Locale.js.map +0 -1
- package/dist/spec/domain/model/ManifestGrammar.d.ts.map +0 -1
- package/dist/spec/domain/model/ManifestGrammar.js +0 -149
- package/dist/spec/domain/model/ManifestGrammar.js.map +0 -1
- package/dist/spec/domain/model/MediaMimeAccept.d.ts +0 -55
- package/dist/spec/domain/model/MediaMimeAccept.d.ts.map +0 -1
- package/dist/spec/domain/model/MediaMimeAccept.js +0 -90
- package/dist/spec/domain/model/MediaMimeAccept.js.map +0 -1
- package/dist/spec/domain/model/RuntimePlan.d.ts.map +0 -1
- package/dist/spec/domain/model/RuntimePlan.js +0 -4
- package/dist/spec/domain/model/RuntimePlan.js.map +0 -1
- package/dist/spec/domain/model/SiteConfig.d.ts +0 -173
- package/dist/spec/domain/model/SiteConfig.d.ts.map +0 -1
- package/dist/spec/domain/model/SiteConfig.js +0 -13
- package/dist/spec/domain/model/SiteConfig.js.map +0 -1
- package/dist/spec/domain/model/SqlIr.d.ts.map +0 -1
- package/dist/spec/domain/model/SqlIr.js +0 -95
- package/dist/spec/domain/model/SqlIr.js.map +0 -1
- package/dist/spec/domain/model/index.d.ts +0 -14
- package/dist/spec/domain/model/index.d.ts.map +0 -1
- package/dist/spec/domain/model/index.js +0 -14
- package/dist/spec/domain/model/index.js.map +0 -1
- package/dist/spec/domain/service/CloudflareCron.d.ts.map +0 -1
- package/dist/spec/domain/service/CloudflareCron.js.map +0 -1
- package/dist/spec/domain/service/CrossSchemaChecker.d.ts +0 -34
- package/dist/spec/domain/service/CrossSchemaChecker.d.ts.map +0 -1
- package/dist/spec/domain/service/CrossSchemaChecker.js +0 -114
- package/dist/spec/domain/service/CrossSchemaChecker.js.map +0 -1
- package/dist/spec/domain/service/EntryDataValidator.d.ts +0 -56
- package/dist/spec/domain/service/EntryDataValidator.d.ts.map +0 -1
- package/dist/spec/domain/service/EntryDataValidator.js +0 -88
- package/dist/spec/domain/service/EntryDataValidator.js.map +0 -1
- package/dist/spec/domain/service/JsonSchemaToZod.d.ts +0 -29
- package/dist/spec/domain/service/JsonSchemaToZod.d.ts.map +0 -1
- package/dist/spec/domain/service/JsonSchemaToZod.js +0 -156
- package/dist/spec/domain/service/JsonSchemaToZod.js.map +0 -1
- package/dist/spec/domain/service/LifecycleStateMachine.d.ts +0 -75
- package/dist/spec/domain/service/LifecycleStateMachine.d.ts.map +0 -1
- package/dist/spec/domain/service/LifecycleStateMachine.js +0 -76
- package/dist/spec/domain/service/LifecycleStateMachine.js.map +0 -1
- package/dist/spec/domain/service/LocaleCanonicalizer.d.ts +0 -29
- package/dist/spec/domain/service/LocaleCanonicalizer.d.ts.map +0 -1
- package/dist/spec/domain/service/LocaleCanonicalizer.js +0 -96
- package/dist/spec/domain/service/LocaleCanonicalizer.js.map +0 -1
- package/dist/spec/domain/service/ManifestFieldChecks.d.ts +0 -60
- package/dist/spec/domain/service/ManifestFieldChecks.d.ts.map +0 -1
- package/dist/spec/domain/service/ManifestFieldChecks.js +0 -116
- package/dist/spec/domain/service/ManifestFieldChecks.js.map +0 -1
- package/dist/spec/domain/service/ManifestGraphValidator.d.ts +0 -15
- package/dist/spec/domain/service/ManifestGraphValidator.d.ts.map +0 -1
- package/dist/spec/domain/service/ManifestGraphValidator.js +0 -225
- package/dist/spec/domain/service/ManifestGraphValidator.js.map +0 -1
- package/dist/spec/domain/service/ManifestLinker.d.ts +0 -45
- package/dist/spec/domain/service/ManifestLinker.d.ts.map +0 -1
- package/dist/spec/domain/service/ManifestLinker.js +0 -92
- package/dist/spec/domain/service/ManifestLinker.js.map +0 -1
- package/dist/spec/domain/service/ManifestLocaleTrimmer.d.ts +0 -16
- package/dist/spec/domain/service/ManifestLocaleTrimmer.d.ts.map +0 -1
- package/dist/spec/domain/service/ManifestLocaleTrimmer.js +0 -76
- package/dist/spec/domain/service/ManifestLocaleTrimmer.js.map +0 -1
- package/dist/spec/domain/service/ManifestParser.d.ts +0 -49
- package/dist/spec/domain/service/ManifestParser.d.ts.map +0 -1
- package/dist/spec/domain/service/ManifestParser.js +0 -203
- package/dist/spec/domain/service/ManifestParser.js.map +0 -1
- package/dist/spec/domain/service/ManifestPartition.d.ts +0 -9
- package/dist/spec/domain/service/ManifestPartition.d.ts.map +0 -1
- package/dist/spec/domain/service/ManifestPartition.js +0 -19
- package/dist/spec/domain/service/ManifestPartition.js.map +0 -1
- package/dist/spec/domain/service/ManifestPathDiagnoser.d.ts +0 -33
- package/dist/spec/domain/service/ManifestPathDiagnoser.d.ts.map +0 -1
- package/dist/spec/domain/service/ManifestPathDiagnoser.js +0 -43
- package/dist/spec/domain/service/ManifestPathDiagnoser.js.map +0 -1
- package/dist/spec/domain/service/ManifestSourceSpans.d.ts +0 -10
- package/dist/spec/domain/service/ManifestSourceSpans.d.ts.map +0 -1
- package/dist/spec/domain/service/ManifestSourceSpans.js +0 -76
- package/dist/spec/domain/service/ManifestSourceSpans.js.map +0 -1
- package/dist/spec/domain/service/McpToolNaming.d.ts +0 -25
- package/dist/spec/domain/service/McpToolNaming.d.ts.map +0 -1
- package/dist/spec/domain/service/McpToolNaming.js +0 -50
- package/dist/spec/domain/service/McpToolNaming.js.map +0 -1
- package/dist/spec/domain/service/PlanFingerprint.d.ts.map +0 -1
- package/dist/spec/domain/service/PlanFingerprint.js +0 -14
- package/dist/spec/domain/service/PlanFingerprint.js.map +0 -1
- package/dist/spec/domain/service/ProcedureViewSpecChecks.d.ts +0 -4
- package/dist/spec/domain/service/ProcedureViewSpecChecks.d.ts.map +0 -1
- package/dist/spec/domain/service/ProcedureViewSpecChecks.js +0 -211
- package/dist/spec/domain/service/ProcedureViewSpecChecks.js.map +0 -1
- package/dist/spec/domain/service/SchemaAdminUiChecker.d.ts +0 -42
- package/dist/spec/domain/service/SchemaAdminUiChecker.d.ts.map +0 -1
- package/dist/spec/domain/service/SchemaAdminUiChecker.js +0 -289
- package/dist/spec/domain/service/SchemaAdminUiChecker.js.map +0 -1
- package/dist/spec/domain/service/SchemaIndexChecker.d.ts +0 -33
- package/dist/spec/domain/service/SchemaIndexChecker.d.ts.map +0 -1
- package/dist/spec/domain/service/SchemaIndexChecker.js +0 -256
- package/dist/spec/domain/service/SchemaIndexChecker.js.map +0 -1
- package/dist/spec/domain/service/SchemaSearchChecker.d.ts +0 -11
- package/dist/spec/domain/service/SchemaSearchChecker.d.ts.map +0 -1
- package/dist/spec/domain/service/SchemaSearchChecker.js +0 -78
- package/dist/spec/domain/service/SchemaSearchChecker.js.map +0 -1
- package/dist/spec/domain/service/SchemaSpecChecks.d.ts +0 -31
- package/dist/spec/domain/service/SchemaSpecChecks.d.ts.map +0 -1
- package/dist/spec/domain/service/SchemaSpecChecks.js +0 -445
- package/dist/spec/domain/service/SchemaSpecChecks.js.map +0 -1
- package/dist/spec/domain/service/SiteDefaultsValidator.d.ts +0 -39
- package/dist/spec/domain/service/SiteDefaultsValidator.d.ts.map +0 -1
- package/dist/spec/domain/service/SiteDefaultsValidator.js +0 -194
- package/dist/spec/domain/service/SiteDefaultsValidator.js.map +0 -1
- package/dist/spec/domain/service/SqlClassify.d.ts +0 -19
- package/dist/spec/domain/service/SqlClassify.d.ts.map +0 -1
- package/dist/spec/domain/service/SqlClassify.js +0 -42
- package/dist/spec/domain/service/SqlClassify.js.map +0 -1
- package/dist/spec/domain/service/SqlRefusal.d.ts +0 -16
- package/dist/spec/domain/service/SqlRefusal.d.ts.map +0 -1
- package/dist/spec/domain/service/SqlRefusal.js +0 -20
- package/dist/spec/domain/service/SqlRefusal.js.map +0 -1
- package/dist/spec/domain/service/SqlTypes.d.ts +0 -40
- package/dist/spec/domain/service/SqlTypes.d.ts.map +0 -1
- package/dist/spec/domain/service/SqlTypes.js +0 -110
- package/dist/spec/domain/service/SqlTypes.js.map +0 -1
- package/dist/spec/domain/service/StaffRoleHierarchy.d.ts +0 -3
- package/dist/spec/domain/service/StaffRoleHierarchy.d.ts.map +0 -1
- package/dist/spec/domain/service/StaffRoleHierarchy.js +0 -19
- package/dist/spec/domain/service/StaffRoleHierarchy.js.map +0 -1
- package/dist/spec/domain/service/TriggerGraphChecks.d.ts +0 -16
- package/dist/spec/domain/service/TriggerGraphChecks.d.ts.map +0 -1
- package/dist/spec/domain/service/TriggerGraphChecks.js +0 -337
- package/dist/spec/domain/service/TriggerGraphChecks.js.map +0 -1
- package/dist/spec/domain/service/TriggerSpecChecks.d.ts +0 -4
- package/dist/spec/domain/service/TriggerSpecChecks.d.ts.map +0 -1
- package/dist/spec/domain/service/TriggerSpecChecks.js +0 -89
- package/dist/spec/domain/service/TriggerSpecChecks.js.map +0 -1
- package/dist/spec/domain/service/ValidatedAdminUiProjection.d.ts +0 -11
- package/dist/spec/domain/service/ValidatedAdminUiProjection.d.ts.map +0 -1
- package/dist/spec/domain/service/ValidatedAdminUiProjection.js +0 -26
- package/dist/spec/domain/service/ValidatedAdminUiProjection.js.map +0 -1
- package/dist/spec/domain/service/ViewAdminUiChecker.d.ts +0 -14
- package/dist/spec/domain/service/ViewAdminUiChecker.d.ts.map +0 -1
- package/dist/spec/domain/service/ViewAdminUiChecker.js +0 -53
- package/dist/spec/domain/service/ViewAdminUiChecker.js.map +0 -1
- package/dist/spec/domain/service/index.d.ts +0 -24
- package/dist/spec/domain/service/index.d.ts.map +0 -1
- package/dist/spec/domain/service/index.js +0 -24
- package/dist/spec/domain/service/index.js.map +0 -1
- package/dist/spec/index.d.ts +0 -10
- package/dist/spec/index.d.ts.map +0 -1
- package/dist/spec/index.js +0 -12
- package/dist/spec/index.js.map +0 -1
- package/dist/spec/infrastructure/cli/parseArgsError.d.ts +0 -16
- package/dist/spec/infrastructure/cli/parseArgsError.d.ts.map +0 -1
- package/dist/spec/infrastructure/cli/parseArgsError.js +0 -34
- package/dist/spec/infrastructure/cli/parseArgsError.js.map +0 -1
- package/dist/spec/infrastructure/index.d.ts +0 -2
- package/dist/spec/infrastructure/index.d.ts.map +0 -1
- package/dist/spec/infrastructure/index.js +0 -2
- package/dist/spec/infrastructure/index.js.map +0 -1
- package/dist/spec/infrastructure/sql/PgQueryParser.d.ts +0 -18
- package/dist/spec/infrastructure/sql/PgQueryParser.d.ts.map +0 -1
- package/dist/spec/infrastructure/sql/PgQueryParser.js +0 -17
- package/dist/spec/infrastructure/sql/PgQueryParser.js.map +0 -1
- package/dist/spec/infrastructure/sql/compilePlan.d.ts +0 -37
- package/dist/spec/infrastructure/sql/compilePlan.d.ts.map +0 -1
- package/dist/spec/infrastructure/sql/compilePlan.js +0 -282
- package/dist/spec/infrastructure/sql/compilePlan.js.map +0 -1
- package/dist/spec/infrastructure/sql/compileSql.d.ts +0 -35
- package/dist/spec/infrastructure/sql/compileSql.d.ts.map +0 -1
- package/dist/spec/infrastructure/sql/compileSql.js +0 -92
- package/dist/spec/infrastructure/sql/compileSql.js.map +0 -1
- package/dist/spec/infrastructure/sql/frontEnd.d.ts +0 -8
- package/dist/spec/infrastructure/sql/frontEnd.d.ts.map +0 -1
- package/dist/spec/infrastructure/sql/frontEnd.js +0 -100
- package/dist/spec/infrastructure/sql/frontEnd.js.map +0 -1
- package/dist/spec/infrastructure/sql/index.d.ts +0 -4
- package/dist/spec/infrastructure/sql/index.d.ts.map +0 -1
- package/dist/spec/infrastructure/sql/index.js +0 -4
- package/dist/spec/infrastructure/sql/index.js.map +0 -1
- package/dist/spec/kernel/diagnostic.d.ts.map +0 -1
- package/dist/spec/kernel/diagnostic.js +0 -296
- package/dist/spec/kernel/diagnostic.js.map +0 -1
- package/dist/spec/kernel/index.d.ts +0 -8
- package/dist/spec/kernel/index.d.ts.map +0 -1
- package/dist/spec/kernel/index.js +0 -8
- package/dist/spec/kernel/index.js.map +0 -1
- package/dist/spec/usecase/EmitTypes.d.ts +0 -22
- package/dist/spec/usecase/EmitTypes.d.ts.map +0 -1
- package/dist/spec/usecase/EmitTypes.js +0 -182
- package/dist/spec/usecase/EmitTypes.js.map +0 -1
- package/dist/spec/usecase/ValidateManifestsUseCase.d.ts +0 -8
- package/dist/spec/usecase/ValidateManifestsUseCase.d.ts.map +0 -1
- package/dist/spec/usecase/ValidateManifestsUseCase.js +0 -101
- package/dist/spec/usecase/ValidateManifestsUseCase.js.map +0 -1
- package/dist/spec/usecase/dto/ValidateManifestsRequest.d.ts +0 -27
- package/dist/spec/usecase/dto/ValidateManifestsRequest.d.ts.map +0 -1
- package/dist/spec/usecase/dto/ValidateManifestsRequest.js +0 -2
- package/dist/spec/usecase/dto/ValidateManifestsRequest.js.map +0 -1
- package/dist/spec/usecase/dto/ValidateManifestsResponse.d.ts +0 -14
- package/dist/spec/usecase/dto/ValidateManifestsResponse.d.ts.map +0 -1
- package/dist/spec/usecase/dto/ValidateManifestsResponse.js +0 -2
- package/dist/spec/usecase/dto/ValidateManifestsResponse.js.map +0 -1
- package/dist/spec/usecase/dto/index.d.ts +0 -3
- package/dist/spec/usecase/dto/index.d.ts.map +0 -1
- package/dist/spec/usecase/dto/index.js +0 -3
- package/dist/spec/usecase/dto/index.js.map +0 -1
- package/dist/spec/usecase/index.d.ts +0 -10
- package/dist/spec/usecase/index.d.ts.map +0 -1
- package/dist/spec/usecase/index.js +0 -10
- package/dist/spec/usecase/index.js.map +0 -1
- package/dist/testing/cases/before-hook.d.ts +0 -4
- package/dist/testing/cases/before-hook.d.ts.map +0 -1
- package/dist/testing/cases/before-hook.js +0 -71
- package/dist/testing/cases/before-hook.js.map +0 -1
- package/dist/testing/cases/corpus.d.ts +0 -12
- package/dist/testing/cases/corpus.d.ts.map +0 -1
- package/dist/testing/cases/corpus.js +0 -91
- package/dist/testing/cases/corpus.js.map +0 -1
- package/dist/testing/cases/policy.d.ts +0 -74
- package/dist/testing/cases/policy.d.ts.map +0 -1
- package/dist/testing/cases/policy.js +0 -142
- package/dist/testing/cases/policy.js.map +0 -1
- package/dist/testing/cases/printer.d.ts +0 -4
- package/dist/testing/cases/printer.d.ts.map +0 -1
- package/dist/testing/cases/printer.js +0 -32
- package/dist/testing/cases/printer.js.map +0 -1
- package/dist/testing/cases/report-view.d.ts +0 -5
- package/dist/testing/cases/report-view.d.ts.map +0 -1
- package/dist/testing/cases/report-view.js +0 -33
- package/dist/testing/cases/report-view.js.map +0 -1
- package/dist/testing/cases/requisition.d.ts +0 -4
- package/dist/testing/cases/requisition.d.ts.map +0 -1
- package/dist/testing/cases/requisition.js +0 -38
- package/dist/testing/cases/requisition.js.map +0 -1
- package/dist/testing/cases/search-places.d.ts +0 -4
- package/dist/testing/cases/search-places.d.ts.map +0 -1
- package/dist/testing/cases/search-places.js +0 -60
- package/dist/testing/cases/search-places.js.map +0 -1
- package/dist/testing/cases/stock.d.ts +0 -4
- package/dist/testing/cases/stock.d.ts.map +0 -1
- package/dist/testing/cases/stock.js +0 -35
- package/dist/testing/cases/stock.js.map +0 -1
- package/dist/testing/cases/store.d.ts +0 -4
- package/dist/testing/cases/store.d.ts.map +0 -1
- package/dist/testing/cases/store.js +0 -100
- package/dist/testing/cases/store.js.map +0 -1
- package/dist/testing/harness.d.ts +0 -94
- package/dist/testing/harness.d.ts.map +0 -1
- package/dist/testing/harness.js +0 -168
- package/dist/testing/harness.js.map +0 -1
- package/dist/testing/index.d.ts.map +0 -1
- package/dist/testing/index.js.map +0 -1
- package/dist/testing/report.d.ts +0 -15
- package/dist/testing/report.d.ts.map +0 -1
- package/dist/testing/report.js +0 -22
- package/dist/testing/report.js.map +0 -1
- package/dist/web/createRestSurface.d.ts +0 -7
- package/dist/web/createRestSurface.d.ts.map +0 -1
- package/dist/web/createRestSurface.js +0 -41
- package/dist/web/createRestSurface.js.map +0 -1
- package/dist/web/index.d.ts +0 -2
- package/dist/web/index.d.ts.map +0 -1
- package/dist/web/index.js +0 -2
- package/dist/web/index.js.map +0 -1
- package/docs/adr/0001-four-atom-manifest-model.md +0 -440
- package/docs/adr/0002-closed-enums-for-bindings.md +0 -253
- package/docs/adr/0007-ai-as-primary-author.md +0 -473
- package/docs/adr/0008-structured-diagnostic-shape.md +0 -338
- package/docs/adr/0009-consumer-supplied-manifests.md +0 -149
- package/docs/adr/0010-locale-and-translates.md +0 -453
- package/docs/adr/0011-adapter-port-spec.md +0 -281
- package/docs/adr/0012-views-as-public-rest.md +0 -161
- package/docs/adr/0013-agent-provisioned-consumer-projects.md +0 -154
- package/docs/adr/0014-auth-better-auth-and-multi-tenant-mcp.md +0 -939
- package/docs/adr/0016-site-semantic-layer.md +0 -70
- package/docs/adr/0017-media-multi-variant-agent-side-optimization.md +0 -181
- package/docs/adr/0018-core-starters-repository-boundary.md +0 -179
- package/docs/adr/0019-sealed-manifest-runtime-pipeline.md +0 -244
- package/docs/adr/0020-builtin-handler-contracts-and-matched-upsert.md +0 -199
- package/docs/adr/0021-retire-starter-scaffolding.md +0 -30
- package/docs/adr/0022-caller-observed-version-occ.md +0 -212
- package/docs/adr/0023-port-failure-contract.md +0 -69
- package/docs/adr/0024-manifest-native-schema-tables.md +0 -264
- package/docs/adr/0025-reserved-native-columns-and-published-only-public-views.md +0 -105
- package/docs/adr/0026-progressive-generate.md +0 -36
- package/docs/adr/0027-scheduled-procedure-triggers.md +0 -31
- package/docs/adr/0028-schema-ttl-expiry.md +0 -33
- package/docs/adr/0029-mcp-apps-interaction-contracts.md +0 -324
- package/docs/adr/0030-store.md +0 -40
- package/docs/adr/0031-host-cloud-core-contract.md +0 -102
- package/docs/adr/0032-store-centric-core-and-service-contract.md +0 -384
- package/docs/adr/0033-storage-converges-to-the-plan.md +0 -92
- package/docs/adr/0034-store-is-authored-as-sql.md +0 -192
- package/docs/adr/0035-sql-dialects.md +0 -154
- package/docs/adr/0036-host-and-dialect.md +0 -65
- package/docs/adr/0037-postgresql-is-the-reference-dialect.md +0 -124
- package/docs/adr/0038-bun-native-host.md +0 -63
- package/docs/adr/README.md +0 -96
- package/docs/adr/adr-lite-803-request-diagnostics.md +0 -38
- package/docs/adr/adr-lite-808-route-readiness.md +0 -47
- package/docs/adr/adr-lite-809-bounded-public-content.md +0 -71
- package/docs/adr/adr-lite-812-native-parity.md +0 -150
- package/docs/adr/adr-lite-823-home-statistics.md +0 -64
- package/docs/adr/adr-lite-842-mcp-authoring.md +0 -30
- package/docs/adr/adr-lite-845-frontend-client.md +0 -38
- package/docs/adr/adr-lite-861-admin-webmcp.md +0 -48
- package/docs/adr/adr-lite-909-admin-ui-kit.md +0 -37
- package/docs/examples/commerce-inventory.md +0 -481
- package/docs/examples/commerce.md +0 -254
- package/docs/examples/guarded-api.md +0 -238
- package/docs/examples/intake-hooks.md +0 -237
- package/docs/examples/intake.md +0 -127
- package/docs/examples/legal-documents.md +0 -218
- package/docs/examples/procurement.md +0 -226
- package/docs/examples/publication.md +0 -211
- package/docs/examples/reference-service/.mantle/generated/mantle.ts +0 -174
- package/docs/examples/reference-service/.mantle/generated/plan.json +0 -1936
- package/docs/examples/reference-service/README.md +0 -33
- package/docs/examples/reference-service/manifests/catalog.yaml +0 -103
- package/docs/examples/reference-service/manifests/orders.yaml +0 -120
- package/docs/examples/reference-service/mantle.config.json +0 -1
- package/docs/examples/reference-service/package.json +0 -27
- package/docs/examples/reference-service/smoke.mjs +0 -160
- package/docs/examples/reference-service/src/handlers.ts +0 -36
- package/docs/examples/reference-service/src/index.ts +0 -33
- package/docs/examples/reference-service/src/service.ts +0 -78
- package/docs/examples/reference-service/wrangler.jsonc +0 -26
- package/docs/examples/reservation.md +0 -142
- /package/docs/examples/{reference-service → app-shell}/.dev.vars.example +0 -0
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
# Reference service
|
|
2
|
-
|
|
3
|
-
A small shop built on `@aotter/mantle` 0.2.0. It is also the Worker that the
|
|
4
|
-
release gate runs (`scripts/check-worker-consumer.mjs`).
|
|
5
|
-
|
|
6
|
-
- `manifests/`: the whole service in the v2 grammar.
|
|
7
|
-
- A scoped Schema (`orders`) and a Schema with a check (`items`, `stock >= 0`).
|
|
8
|
-
- Views written as one `SELECT`: a join, a `GROUP BY`, and `mantle.search`.
|
|
9
|
-
- Procedures written as SQL: a two-statement order, an `ON CONFLICT`
|
|
10
|
-
restock, and an optimistic-lock cancel in handler code.
|
|
11
|
-
- An after hook that loops over `ctx.cause.rows`.
|
|
12
|
-
- A POSIX cron.
|
|
13
|
-
- `src/handlers.ts`: the three `ref` handlers, written against the typed
|
|
14
|
-
`ctx.store`.
|
|
15
|
-
- `src/service.ts`, `src/index.ts`, `wrangler.jsonc`, `tsconfig.json`: the
|
|
16
|
-
preset `mantle generate` wrote once. These files are the application's own.
|
|
17
|
-
- `smoke.mjs`: starts `wrangler dev` on a fresh local D1 and drives the service:
|
|
18
|
-
- console email-OTP sign-in for an owner and a buyer;
|
|
19
|
-
- REST, both MCP surfaces, the cron, and Admin: the console from `@aotter/mantle-ui/admin` at `/admin`, its API, and an editor's save;
|
|
20
|
-
- asserts scope, the stock check, locks and hooks.
|
|
21
|
-
|
|
22
|
-
Outside the SDK workspace, with Node 22+ and pnpm 9+, pin every dependency to
|
|
23
|
-
one exact version, then:
|
|
24
|
-
|
|
25
|
-
```sh
|
|
26
|
-
pnpm install
|
|
27
|
-
pnpm check # generate, generate --check, typecheck, smoke
|
|
28
|
-
cp .dev.vars.example .dev.vars # set ADMIN_EMAIL and a random BETTER_AUTH_SECRET
|
|
29
|
-
pnpm dev # open /admin; sign-in codes are printed to this log
|
|
30
|
-
```
|
|
31
|
-
|
|
32
|
-
The release gate installs the exact tarballs it just packed in place of the
|
|
33
|
-
pinned versions.
|
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
# A small shop: a public catalog, orders that only their owner sees, and staff tools.
|
|
2
|
-
apiVersion: cms.mantle.aotter.net/v2
|
|
3
|
-
kind: Schema
|
|
4
|
-
metadata: { name: items }
|
|
5
|
-
spec:
|
|
6
|
-
title: Items
|
|
7
|
-
lifecycle: operational
|
|
8
|
-
schema:
|
|
9
|
-
type: object
|
|
10
|
-
required: [sku, name, stock]
|
|
11
|
-
properties:
|
|
12
|
-
sku: { type: string }
|
|
13
|
-
name: { type: string }
|
|
14
|
-
priceCents: { type: integer, minimum: 0 }
|
|
15
|
-
stock: { type: integer, default: 0 }
|
|
16
|
-
checks: ["stock >= 0"]
|
|
17
|
-
uiSchema: { list: { primaryField: name, columns: [sku, stock] } }
|
|
18
|
-
uniqueIndexes: [[sku]]
|
|
19
|
-
searchableFields: [name, sku]
|
|
20
|
-
---
|
|
21
|
-
apiVersion: cms.mantle.aotter.net/v2
|
|
22
|
-
kind: Schema
|
|
23
|
-
metadata: { name: orders }
|
|
24
|
-
spec:
|
|
25
|
-
title: Orders
|
|
26
|
-
lifecycle: operational
|
|
27
|
-
scope: { owner: auth.uid() }
|
|
28
|
-
uiSchema: { list: { primaryField: itemId, columns: [qty, orderStatus] } }
|
|
29
|
-
indexes: [[owner]]
|
|
30
|
-
schema:
|
|
31
|
-
type: object
|
|
32
|
-
required: [owner, itemId, qty, orderStatus]
|
|
33
|
-
properties:
|
|
34
|
-
owner: { type: string }
|
|
35
|
-
itemId: { type: string }
|
|
36
|
-
qty: { type: integer, minimum: 1 }
|
|
37
|
-
orderStatus: { type: string, enum: [placed, cancelled] }
|
|
38
|
-
placedAt: { type: string, format: date-time }
|
|
39
|
-
---
|
|
40
|
-
apiVersion: cms.mantle.aotter.net/v2
|
|
41
|
-
kind: Schema
|
|
42
|
-
metadata: { name: activity }
|
|
43
|
-
spec:
|
|
44
|
-
title: Activity
|
|
45
|
-
lifecycle: operational
|
|
46
|
-
schema:
|
|
47
|
-
type: object
|
|
48
|
-
required: [kind, subject]
|
|
49
|
-
properties:
|
|
50
|
-
kind: { type: string }
|
|
51
|
-
subject: { type: string }
|
|
52
|
-
detail: { type: string }
|
|
53
|
-
---
|
|
54
|
-
# Views are one SELECT; `input` is their parameters.
|
|
55
|
-
apiVersion: cms.mantle.aotter.net/v2
|
|
56
|
-
kind: View
|
|
57
|
-
metadata: { name: catalog }
|
|
58
|
-
spec:
|
|
59
|
-
surface: public
|
|
60
|
-
sql: SELECT id, sku, name, priceCents, stock FROM items ORDER BY name
|
|
61
|
-
---
|
|
62
|
-
apiVersion: cms.mantle.aotter.net/v2
|
|
63
|
-
kind: View
|
|
64
|
-
metadata: { name: search-items }
|
|
65
|
-
spec:
|
|
66
|
-
surface: public
|
|
67
|
-
input: { type: object, required: [q], properties: { q: { type: string, minLength: 1 } } }
|
|
68
|
-
sql: |
|
|
69
|
-
SELECT i.id, i.name, i.stock FROM items i
|
|
70
|
-
WHERE mantle.search(i, input.q)
|
|
71
|
-
ORDER BY mantle.search_rank(i), i.name
|
|
72
|
-
---
|
|
73
|
-
# Scope is injected into every Schema reference: this join only ever sees the caller's orders.
|
|
74
|
-
apiVersion: cms.mantle.aotter.net/v2
|
|
75
|
-
kind: View
|
|
76
|
-
metadata: { name: my-orders }
|
|
77
|
-
spec:
|
|
78
|
-
surface: public
|
|
79
|
-
requires: { auth: { all: [ctx.user] } }
|
|
80
|
-
sql: |
|
|
81
|
-
SELECT o.id, o.qty, o.orderStatus, i.name AS item, o.version
|
|
82
|
-
FROM orders o JOIN items i ON i.id = o.itemId
|
|
83
|
-
ORDER BY o.created_at DESC
|
|
84
|
-
---
|
|
85
|
-
apiVersion: cms.mantle.aotter.net/v2
|
|
86
|
-
kind: View
|
|
87
|
-
metadata: { name: sales-by-item }
|
|
88
|
-
spec:
|
|
89
|
-
surface: staff
|
|
90
|
-
requires: { auth: { all: [{ ctx.staff: [owner, editor] }] } }
|
|
91
|
-
sql: |
|
|
92
|
-
SELECT i.name, count(o.id) AS orders, coalesce(sum(o.qty), 0) AS units
|
|
93
|
-
FROM items i LEFT JOIN orders o ON o.itemId = i.id AND o.orderStatus = 'placed'
|
|
94
|
-
GROUP BY i.name
|
|
95
|
-
ORDER BY units DESC, i.name
|
|
96
|
-
---
|
|
97
|
-
apiVersion: cms.mantle.aotter.net/v2
|
|
98
|
-
kind: View
|
|
99
|
-
metadata: { name: recent-activity }
|
|
100
|
-
spec:
|
|
101
|
-
surface: staff
|
|
102
|
-
requires: { auth: { all: [{ ctx.staff: [owner, editor] }] } }
|
|
103
|
-
sql: SELECT kind, subject, detail FROM activity ORDER BY created_at DESC LIMIT 50
|
|
@@ -1,120 +0,0 @@
|
|
|
1
|
-
# A Procedure written as SQL: its statements apply together or not at all. The order is written
|
|
2
|
-
# first, so when the stock check on items fails the second statement, the order is rolled back too.
|
|
3
|
-
apiVersion: cms.mantle.aotter.net/v2
|
|
4
|
-
kind: Procedure
|
|
5
|
-
metadata: { name: place-order }
|
|
6
|
-
spec:
|
|
7
|
-
title: Place an order
|
|
8
|
-
description: Order one item for the signed-in caller; the stock check fails the whole order when stock runs out.
|
|
9
|
-
requires: { auth: { all: [ctx.user] } }
|
|
10
|
-
input:
|
|
11
|
-
type: object
|
|
12
|
-
required: [itemId, qty]
|
|
13
|
-
properties:
|
|
14
|
-
itemId: { type: string }
|
|
15
|
-
qty: { type: integer, minimum: 1 }
|
|
16
|
-
output: { type: object }
|
|
17
|
-
handler:
|
|
18
|
-
sql: |
|
|
19
|
-
INSERT INTO orders (itemId, qty, orderStatus, placedAt)
|
|
20
|
-
SELECT id, input.qty, 'placed', now() FROM items WHERE id = input.itemId
|
|
21
|
-
RETURNING id, qty, orderStatus;
|
|
22
|
-
UPDATE items SET stock = stock - input.qty WHERE id = input.itemId
|
|
23
|
-
---
|
|
24
|
-
# Optimistic concurrency: the caller sends the version it saw.
|
|
25
|
-
apiVersion: cms.mantle.aotter.net/v2
|
|
26
|
-
kind: Procedure
|
|
27
|
-
metadata: { name: cancel-order }
|
|
28
|
-
spec:
|
|
29
|
-
title: Cancel an order
|
|
30
|
-
requires: { auth: { all: [ctx.user] } }
|
|
31
|
-
input:
|
|
32
|
-
type: object
|
|
33
|
-
required: [orderId, expectedVersion]
|
|
34
|
-
properties:
|
|
35
|
-
orderId: { type: string }
|
|
36
|
-
expectedVersion: { type: integer }
|
|
37
|
-
output: { type: object }
|
|
38
|
-
handler: { ref: cancelOrder }
|
|
39
|
-
---
|
|
40
|
-
# An upsert keyed by a unique index.
|
|
41
|
-
apiVersion: cms.mantle.aotter.net/v2
|
|
42
|
-
kind: Procedure
|
|
43
|
-
metadata: { name: restock }
|
|
44
|
-
spec:
|
|
45
|
-
title: Restock an item
|
|
46
|
-
description: Add stock to an item by SKU, creating the item if it is new.
|
|
47
|
-
requires: { auth: { all: [{ ctx.staff: [owner, editor] }] } }
|
|
48
|
-
input:
|
|
49
|
-
type: object
|
|
50
|
-
required: [sku, name, qty]
|
|
51
|
-
properties:
|
|
52
|
-
sku: { type: string }
|
|
53
|
-
name: { type: string }
|
|
54
|
-
qty: { type: integer, minimum: 1 }
|
|
55
|
-
output: { type: object }
|
|
56
|
-
handler:
|
|
57
|
-
sql: |
|
|
58
|
-
INSERT INTO items (sku, name, stock) VALUES (input.sku, input.name, input.qty)
|
|
59
|
-
ON CONFLICT (sku) DO UPDATE SET stock = items.stock + EXCLUDED.stock
|
|
60
|
-
RETURNING id, sku, stock
|
|
61
|
-
---
|
|
62
|
-
apiVersion: cms.mantle.aotter.net/v2
|
|
63
|
-
kind: Procedure
|
|
64
|
-
metadata: { name: record-orders }
|
|
65
|
-
spec:
|
|
66
|
-
input: { type: object }
|
|
67
|
-
output: { type: object }
|
|
68
|
-
handler: { ref: recordOrders }
|
|
69
|
-
---
|
|
70
|
-
apiVersion: cms.mantle.aotter.net/v2
|
|
71
|
-
kind: Procedure
|
|
72
|
-
metadata: { name: weekly-digest }
|
|
73
|
-
spec:
|
|
74
|
-
input: { type: object }
|
|
75
|
-
output: { type: object }
|
|
76
|
-
handler: { ref: weeklyDigest }
|
|
77
|
-
---
|
|
78
|
-
apiVersion: cms.mantle.aotter.net/v2
|
|
79
|
-
kind: Trigger
|
|
80
|
-
metadata: { name: place-order-http }
|
|
81
|
-
spec:
|
|
82
|
-
source: { kind: http, method: POST, path: /api/orders }
|
|
83
|
-
target: { procedure: place-order }
|
|
84
|
-
---
|
|
85
|
-
apiVersion: cms.mantle.aotter.net/v2
|
|
86
|
-
kind: Trigger
|
|
87
|
-
metadata: { name: place-order-mcp }
|
|
88
|
-
spec:
|
|
89
|
-
source: { kind: mcp, surface: public }
|
|
90
|
-
target: { procedure: place-order }
|
|
91
|
-
---
|
|
92
|
-
apiVersion: cms.mantle.aotter.net/v2
|
|
93
|
-
kind: Trigger
|
|
94
|
-
metadata: { name: cancel-order-http }
|
|
95
|
-
spec:
|
|
96
|
-
source: { kind: http, method: POST, path: /api/orders/cancel }
|
|
97
|
-
target: { procedure: cancel-order }
|
|
98
|
-
---
|
|
99
|
-
apiVersion: cms.mantle.aotter.net/v2
|
|
100
|
-
kind: Trigger
|
|
101
|
-
metadata: { name: restock-mcp }
|
|
102
|
-
spec:
|
|
103
|
-
source: { kind: mcp, surface: staff }
|
|
104
|
-
target: { procedure: restock }
|
|
105
|
-
---
|
|
106
|
-
# After hooks get every row one statement touched.
|
|
107
|
-
apiVersion: cms.mantle.aotter.net/v2
|
|
108
|
-
kind: Trigger
|
|
109
|
-
metadata: { name: orders-recorded }
|
|
110
|
-
spec:
|
|
111
|
-
source: { kind: lifecycle, schema: orders, on: [after_create, after_update] }
|
|
112
|
-
target: { procedure: record-orders }
|
|
113
|
-
---
|
|
114
|
-
# POSIX cron, UTC: Sundays at 03:00.
|
|
115
|
-
apiVersion: cms.mantle.aotter.net/v2
|
|
116
|
-
kind: Trigger
|
|
117
|
-
metadata: { name: weekly-digest }
|
|
118
|
-
spec:
|
|
119
|
-
source: { kind: schedule, cron: "0 3 * * 0" }
|
|
120
|
-
target: { procedure: weekly-digest }
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{ "version": 2, "identity": "mantle", "features": ["mcp", "admin", "web"] }
|
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "mantle-reference-service",
|
|
3
|
-
"private": true,
|
|
4
|
-
"type": "module",
|
|
5
|
-
"scripts": {
|
|
6
|
-
"generate": "mantle generate",
|
|
7
|
-
"dev": "wrangler dev --local --ip 127.0.0.1 --port 8787",
|
|
8
|
-
"check": "mantle generate && mantle generate --check && tsc --noEmit && node smoke.mjs"
|
|
9
|
-
},
|
|
10
|
-
"dependencies": {
|
|
11
|
-
"@aotter/mantle": "0.2.0-alpha.5",
|
|
12
|
-
"@aotter/mantle-ui": "0.2.0-alpha.5",
|
|
13
|
-
"@better-auth/cimd": "1.7.7",
|
|
14
|
-
"@better-auth/mcp": "1.7.7",
|
|
15
|
-
"@better-auth/oauth-provider": "1.7.7",
|
|
16
|
-
"@modelcontextprotocol/ext-apps": "2.0.0",
|
|
17
|
-
"@modelcontextprotocol/server": "2.1.0",
|
|
18
|
-
"better-auth": "1.7.7"
|
|
19
|
-
},
|
|
20
|
-
"devDependencies": {
|
|
21
|
-
"@cloudflare/workers-types": "5.20260904.1",
|
|
22
|
-
"@types/node": "^26",
|
|
23
|
-
"typescript": "^6.0.3",
|
|
24
|
-
"wrangler": "4.129.0"
|
|
25
|
-
},
|
|
26
|
-
"packageManager": "pnpm@9.15.0"
|
|
27
|
-
}
|
|
@@ -1,160 +0,0 @@
|
|
|
1
|
-
// Runs the service under `wrangler dev` on a fresh local D1 and drives it the way people and agents would: console email-OTP
|
|
2
|
-
// sign-in, REST, both MCP surfaces, Admin's API and a cron. Each step asserts what the manifests promise.
|
|
3
|
-
import assert from "node:assert/strict";
|
|
4
|
-
import { spawn } from "node:child_process";
|
|
5
|
-
import { mkdtempSync, readFileSync, rmSync } from "node:fs";
|
|
6
|
-
import { tmpdir } from "node:os";
|
|
7
|
-
import { join } from "node:path";
|
|
8
|
-
|
|
9
|
-
const port = 18000 + Math.floor(Math.random() * 1000);
|
|
10
|
-
const origin = `http://127.0.0.1:${port}`;
|
|
11
|
-
const owner = "owner@example.test";
|
|
12
|
-
const state = mkdtempSync(join(tmpdir(), "mantle-reference-"));
|
|
13
|
-
const wrangler = spawn("pnpm", ["exec", "wrangler", "dev", "--local", "--ip", "127.0.0.1", "--port", String(port), "--inspector-port", "0",
|
|
14
|
-
"--persist-to", state, "--test-scheduled",
|
|
15
|
-
"--var", `PUBLIC_ORIGIN:${origin}`, "--var", `ADMIN_EMAIL:${owner}`, "--var", "BETTER_AUTH_SECRET:reference-smoke-secret-0123456789abcdef"],
|
|
16
|
-
// its own process group: pnpm does not pass a signal on to wrangler and workerd, so the group is stopped as one
|
|
17
|
-
{ env: { ...process.env, WRANGLER_SEND_METRICS: "false", CI: "1" }, stdio: ["ignore", "pipe", "pipe"], detached: true });
|
|
18
|
-
let logs = "";
|
|
19
|
-
wrangler.stdout.on("data", (chunk) => { logs += chunk; });
|
|
20
|
-
wrangler.stderr.on("data", (chunk) => { logs += chunk; });
|
|
21
|
-
|
|
22
|
-
const json = { "content-type": "application/json", origin };
|
|
23
|
-
const call = async (method, path, { cookie, body } = {}) => {
|
|
24
|
-
const response = await fetch(`${origin}${path}`, { method, headers: { ...json, ...(cookie ? { cookie } : {}) }, ...(body === undefined ? {} : { body: JSON.stringify(body) }) });
|
|
25
|
-
const text = await response.text();
|
|
26
|
-
return { status: response.status, body: text ? JSON.parse(text) : null, headers: response.headers };
|
|
27
|
-
};
|
|
28
|
-
const mcp = async (path, cookie, name, args) => {
|
|
29
|
-
const response = await fetch(`${origin}${path}`, { method: "POST", headers: { ...json, accept: "application/json, text/event-stream", ...(cookie ? { cookie } : {}) },
|
|
30
|
-
body: JSON.stringify({ jsonrpc: "2.0", id: 1, method: name ? "tools/call" : "tools/list", params: name ? { name, arguments: args } : {} }) });
|
|
31
|
-
const text = await response.text();
|
|
32
|
-
const data = text.split("\n").find((line) => line.startsWith("data:"));
|
|
33
|
-
return { status: response.status, body: data ? JSON.parse(data.slice(5)) : text ? JSON.parse(text) : null };
|
|
34
|
-
};
|
|
35
|
-
|
|
36
|
-
/** Console email OTP: ask for a code, read it from the wrangler log as a developer would, sign in. */
|
|
37
|
-
async function signIn(email) {
|
|
38
|
-
const before = logs.length;
|
|
39
|
-
assert.equal((await call("POST", "/api/auth/email-otp/send-verification-otp", { body: { email, type: "sign-in" } })).status, 200);
|
|
40
|
-
let code;
|
|
41
|
-
for (let i = 0; i < 40 && !code; i++) {
|
|
42
|
-
code = new RegExp(`${email.replace(/[.+]/g, "\\$&")}[\\s\\S]*?one-time code is (\\d{6})`).exec(logs.slice(before))?.[1];
|
|
43
|
-
if (!code) await new Promise((resolve) => setTimeout(resolve, 100));
|
|
44
|
-
}
|
|
45
|
-
assert.ok(code, `no one-time code for ${email} in the log`);
|
|
46
|
-
const signed = await call("POST", "/api/auth/sign-in/email-otp", { body: { email, otp: code } });
|
|
47
|
-
assert.equal(signed.status, 200, JSON.stringify(signed.body));
|
|
48
|
-
return signed.headers.getSetCookie().map((c) => c.split(";")[0]).join("; ");
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
const stockOf = async () => (await call("GET", "/api/views/catalog")).body.rows[0].stock;
|
|
52
|
-
const step = (name) => console.log(`ok - ${name}`);
|
|
53
|
-
|
|
54
|
-
try {
|
|
55
|
-
for (let attempt = 0; ; attempt++) {
|
|
56
|
-
if (wrangler.exitCode !== null) throw new Error(`wrangler exited ${wrangler.exitCode}`);
|
|
57
|
-
try { if ((await fetch(`${origin}/api/views/catalog`)).status === 200) break; } catch { /* starting */ }
|
|
58
|
-
if (attempt > 240) throw new Error("the Worker did not start");
|
|
59
|
-
await new Promise((resolve) => setTimeout(resolve, 250));
|
|
60
|
-
}
|
|
61
|
-
assert.deepEqual((await call("GET", "/api/views/catalog")).body.rows, []);
|
|
62
|
-
step("boot converges a fresh D1 to the plan; the public catalog is empty");
|
|
63
|
-
|
|
64
|
-
const staff = await signIn(owner);
|
|
65
|
-
assert.equal((await call("GET", "/admin/api/me", { cookie: staff })).body.role, "owner");
|
|
66
|
-
step("console email OTP signs in; ADMIN_EMAIL becomes the owner");
|
|
67
|
-
|
|
68
|
-
for (const qty of [5, 3]) {
|
|
69
|
-
const restocked = await mcp("/mcp/staff", staff, "restock", { sku: "TEA-1", name: "Oolong tea", qty });
|
|
70
|
-
assert.equal(restocked.body.result.isError, undefined, JSON.stringify(restocked.body));
|
|
71
|
-
}
|
|
72
|
-
assert.equal(await stockOf(), 8);
|
|
73
|
-
step("staff MCP: restock is an upsert on the unique sku (5 + 3)");
|
|
74
|
-
|
|
75
|
-
const itemId = (await call("GET", "/api/views/catalog")).body.rows[0].id;
|
|
76
|
-
assert.equal((await call("POST", "/api/orders", { body: { itemId, qty: 1 } })).status, 401);
|
|
77
|
-
step("an anonymous order is 401");
|
|
78
|
-
|
|
79
|
-
const buyer = await signIn("buyer@example.test");
|
|
80
|
-
assert.equal((await call("GET", "/admin/api/me", { cookie: buyer })).status, 403);
|
|
81
|
-
const placed = await call("POST", "/api/orders", { cookie: buyer, body: { itemId, qty: 2 } });
|
|
82
|
-
assert.equal(placed.status, 200, JSON.stringify(placed.body));
|
|
83
|
-
assert.equal(await stockOf(), 6);
|
|
84
|
-
step("a signed-in buyer (not staff) orders 2: stock 8 -> 6 in one program");
|
|
85
|
-
|
|
86
|
-
const tooMany = await call("POST", "/api/orders", { cookie: buyer, body: { itemId, qty: 99 } });
|
|
87
|
-
assert.equal(tooMany.status, 400, JSON.stringify(tooMany.body));
|
|
88
|
-
assert.match(tooMany.body.error.message, /CHECK items: stock >= 0/);
|
|
89
|
-
assert.equal(await stockOf(), 6);
|
|
90
|
-
step("ordering 99 fails the stock >= 0 check in the second statement, and the order the first wrote is rolled back");
|
|
91
|
-
|
|
92
|
-
const mine = (await call("GET", "/api/views/my-orders", { cookie: buyer })).body.rows;
|
|
93
|
-
assert.deepEqual(mine.map(({ qty, orderStatus, item }) => ({ qty, orderStatus, item })), [{ qty: 2, orderStatus: "placed", item: "Oolong tea" }]);
|
|
94
|
-
assert.deepEqual((await call("GET", "/api/views/my-orders", { cookie: staff })).body.rows, []);
|
|
95
|
-
step("my-orders joins items and shows only the caller's own orders (scope)");
|
|
96
|
-
|
|
97
|
-
const order = mine[0];
|
|
98
|
-
assert.equal((await call("POST", "/api/orders/cancel", { cookie: staff, body: { orderId: order.id, expectedVersion: order.version } })).status, 409);
|
|
99
|
-
const cancelled = await call("POST", "/api/orders/cancel", { cookie: buyer, body: { orderId: order.id, expectedVersion: order.version } });
|
|
100
|
-
assert.equal(cancelled.status, 200, JSON.stringify(cancelled.body));
|
|
101
|
-
assert.equal(await stockOf(), 8);
|
|
102
|
-
assert.equal((await call("POST", "/api/orders/cancel", { cookie: buyer, body: { orderId: order.id, expectedVersion: order.version } })).status, 409);
|
|
103
|
-
step("cancel: another owner's order is a CONFLICT, the owner's returns the stock, a stale version is a CONFLICT");
|
|
104
|
-
|
|
105
|
-
assert.deepEqual((await call("GET", "/api/views/search-items?q=oolong")).body.rows.map((r) => r.name), ["Oolong tea"]);
|
|
106
|
-
step("search-items: mantle.search over searchableFields");
|
|
107
|
-
|
|
108
|
-
const sales = await call("GET", "/admin/api/views/sales-by-item", { cookie: staff });
|
|
109
|
-
assert.deepEqual(sales.body.rows, [{ name: "Oolong tea", orders: 0, units: 0 }], JSON.stringify(sales.body));
|
|
110
|
-
assert.equal((await call("GET", "/admin/api/views/sales-by-item", { cookie: buyer })).status, 403);
|
|
111
|
-
step("sales-by-item (GROUP BY over a LEFT JOIN) is staff-only through Admin's API");
|
|
112
|
-
|
|
113
|
-
// the console: @aotter/mantle-ui/admin served by Admin at /admin, its assets by name, any other path its client-side route
|
|
114
|
-
const shell = await fetch(`${origin}/admin/c/items`);
|
|
115
|
-
const html = await shell.text();
|
|
116
|
-
const script = /src="((?:\/admin\/|\.\/)assets\/[^"]+\.js)"/.exec(html)?.[1];
|
|
117
|
-
const base = /<base href="([^"]+)"/.exec(html)?.[1] ?? "/admin/";
|
|
118
|
-
assert.equal(shell.headers.get("x-frame-options"), "DENY");
|
|
119
|
-
assert.ok(script, html.slice(0, 300));
|
|
120
|
-
const scriptUrl = new URL(script, new URL(base, origin));
|
|
121
|
-
assert.equal(scriptUrl.origin, origin);
|
|
122
|
-
assert.ok(scriptUrl.pathname.startsWith("/admin/assets/"));
|
|
123
|
-
assert.equal((await fetch(scriptUrl)).status, 200);
|
|
124
|
-
assert.equal((await fetch(`${origin}/admin/assets/missing.js`)).status, 404);
|
|
125
|
-
// the editor's round trip: it reads the whole entry and writes it back, an unset optional field included as null
|
|
126
|
-
const [tea] = (await call("GET", "/admin/api/entries?collection=items", { cookie: staff })).body.items;
|
|
127
|
-
assert.deepEqual(tea.data_preview, { name: "Oolong tea", sku: "TEA-1", stock: 8 });
|
|
128
|
-
const { entry } = (await call("GET", `/admin/api/entries/${tea.id}?collection=items`, { cookie: staff })).body;
|
|
129
|
-
const saved = await call("PATCH", `/admin/api/entries/${tea.id}?collection=items`, { cookie: staff, body: { expectedVersion: entry.version, data: { ...entry.data, name: "Oolong tea (Taiwan)", priceCents: null } } });
|
|
130
|
-
assert.equal(saved.status, 200, JSON.stringify(saved.body));
|
|
131
|
-
assert.equal((await call("GET", "/api/views/catalog")).body.rows[0].name, "Oolong tea (Taiwan)");
|
|
132
|
-
step("Admin's console: the SPA and its assets at /admin, the list's declared columns, and an editor's save of the whole entry");
|
|
133
|
-
|
|
134
|
-
const tools = (await mcp("/mcp", undefined)).body.result.tools.map((t) => t.name);
|
|
135
|
-
assert.ok(tools.includes("place_order") && !tools.includes("restock"), tools.join());
|
|
136
|
-
step("public MCP lists place_order and not the staff restock");
|
|
137
|
-
|
|
138
|
-
assert.equal((await fetch(`${origin}/__scheduled?cron=${encodeURIComponent("0 3 * * 1")}`)).status, 200);
|
|
139
|
-
const activity = (await call("GET", "/admin/api/views/recent-activity", { cookie: staff })).body.rows;
|
|
140
|
-
assert.deepEqual(activity.map((r) => r.kind).sort(), ["after_create", "after_update", "weekly-digest"]);
|
|
141
|
-
// the one order was cancelled, and the digest counts placed orders only
|
|
142
|
-
assert.equal(activity.find((r) => r.kind === "weekly-digest").detail, "0 orders, 0 units");
|
|
143
|
-
step("the after hooks recorded the order rows, and Cloudflare's Monday-numbered cron ran the POSIX Sunday digest");
|
|
144
|
-
|
|
145
|
-
const version = JSON.parse(readFileSync("node_modules/@aotter/mantle/package.json", "utf8")).version;
|
|
146
|
-
console.log(`Mantle ${version}: reference service passed`);
|
|
147
|
-
} catch (error) {
|
|
148
|
-
console.error(logs.slice(-4000));
|
|
149
|
-
throw error;
|
|
150
|
-
} finally {
|
|
151
|
-
const stop = (signal) => { try { process.kill(-wrangler.pid, signal); } catch { /* already gone */ } };
|
|
152
|
-
stop("SIGTERM");
|
|
153
|
-
await new Promise((resolve) => {
|
|
154
|
-
if (wrangler.exitCode !== null) return resolve();
|
|
155
|
-
const timer = setTimeout(() => { stop("SIGKILL"); resolve(); }, 5_000);
|
|
156
|
-
wrangler.once("exit", () => { clearTimeout(timer); resolve(); });
|
|
157
|
-
});
|
|
158
|
-
stop("SIGKILL");
|
|
159
|
-
rmSync(state, { recursive: true, force: true });
|
|
160
|
-
}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
// Written once by `mantle generate`, then filled in. `MantleHandlers` lists exactly the plan's handler refs.
|
|
2
|
-
import type { MantleHandlers } from "../.mantle/generated/mantle.js";
|
|
3
|
-
|
|
4
|
-
export const handlers: MantleHandlers = {
|
|
5
|
-
// ctx.store is scoped to the caller: another owner's order is not visible, so the write below is a CONFLICT, never a leak
|
|
6
|
-
cancelOrder: async ({ orderId, expectedVersion }, ctx) => {
|
|
7
|
-
const [order] = (await ctx.store.select({ from: "orders", where: { id: orderId, orderStatus: "placed" } })).rows;
|
|
8
|
-
const [item] = order ? (await ctx.store.select({ from: "items", where: { id: String(order.itemId) } })).rows : [];
|
|
9
|
-
await ctx.store.write([
|
|
10
|
-
{ update: "orders", set: { orderStatus: "cancelled" }, where: { id: orderId }, lock: expectedVersion },
|
|
11
|
-
// both rows or neither: the stock goes back only with the cancellation, and a concurrent restock is a CONFLICT
|
|
12
|
-
...(order && item ? [{ update: "items" as const, set: { stock: Number(item.stock) + Number(order.qty) }, where: { id: String(item.id) }, lock: Number(item.version) }] : []),
|
|
13
|
-
]);
|
|
14
|
-
return { id: orderId, orderStatus: "cancelled" };
|
|
15
|
-
},
|
|
16
|
-
|
|
17
|
-
// an after hook gets every row the statement touched: loop, never rows[0]
|
|
18
|
-
recordOrders: async (_input, ctx) => {
|
|
19
|
-
const cause = ctx.cause;
|
|
20
|
-
if (cause.kind !== "lifecycle") return {};
|
|
21
|
-
await ctx.store.write(cause.rows.map((row) => ({
|
|
22
|
-
insert: "activity" as const,
|
|
23
|
-
values: { kind: cause.hook, subject: String(row.id), detail: `${String(row.orderStatus)} x${String(row.qty)}` },
|
|
24
|
-
})));
|
|
25
|
-
return {};
|
|
26
|
-
},
|
|
27
|
-
|
|
28
|
-
// a schedule runs as the system caller: no scope, and no requires.auth predicate holds for it. One page of up to 500 orders
|
|
29
|
-
// keeps the example short; a digest over more would page with nextCursor.
|
|
30
|
-
weeklyDigest: async (_input, ctx) => {
|
|
31
|
-
const { rows } = await ctx.store.select({ from: "orders", columns: ["qty"], where: { orderStatus: "placed" }, limit: 500 });
|
|
32
|
-
const units = rows.reduce((sum, row) => sum + Number(row.qty), 0);
|
|
33
|
-
await ctx.store.write([{ insert: "activity", values: { kind: "weekly-digest", subject: String(ctx.cause.kind === "schedule" ? ctx.cause.scheduledTime : ""), detail: `${rows.length} orders, ${units} units` } }]);
|
|
34
|
-
return {};
|
|
35
|
-
},
|
|
36
|
-
};
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
// Written once by `mantle generate`; this file is yours now. The Cloudflare entry (ADR-0032 decision 6).
|
|
2
|
-
import { waitUntil } from "cloudflare:workers";
|
|
3
|
-
import { toCloudflareCron } from "@aotter/mantle/cloudflare";
|
|
4
|
-
import { plan } from "../.mantle/generated/mantle.js";
|
|
5
|
-
import { mantle, type Env } from "./service.js";
|
|
6
|
-
|
|
7
|
-
// Cloudflare names a cron as wrangler.jsonc spells it; the plan's schedule Triggers are POSIX, and several spellings can share one
|
|
8
|
-
const crons = new Map<string, string[]>();
|
|
9
|
-
for (const t of Object.values(plan.triggers)) {
|
|
10
|
-
if (t.source.kind !== "schedule" || t.source.enabled === false) continue;
|
|
11
|
-
const cf = toCloudflareCron(t.source.cron);
|
|
12
|
-
const posix = crons.get(cf) ?? [];
|
|
13
|
-
if (!posix.includes(t.source.cron)) crons.set(cf, [...posix, t.source.cron]);
|
|
14
|
-
}
|
|
15
|
-
// not bound to one request, so a handler's ctx.waitUntil never lands on another request's finished context
|
|
16
|
-
const ctx = { waitUntil };
|
|
17
|
-
|
|
18
|
-
export default {
|
|
19
|
-
fetch: (request, env) => mantle.fetch(request, env, ctx),
|
|
20
|
-
async scheduled(controller, env) {
|
|
21
|
-
const posix = crons.get(controller.cron);
|
|
22
|
-
if (posix === undefined) throw new Error(`No schedule Trigger runs on the Cloudflare cron '${controller.cron}'`);
|
|
23
|
-
const errors: unknown[] = [];
|
|
24
|
-
for (const cron of posix) {
|
|
25
|
-
try {
|
|
26
|
-
await mantle.invokeSchedule(cron, controller.scheduledTime, env, ctx);
|
|
27
|
-
} catch (error) {
|
|
28
|
-
errors.push(error);
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
if (errors.length) throw new AggregateError(errors, `${errors.length} cron spelling(s) failed for '${controller.cron}'`);
|
|
32
|
-
},
|
|
33
|
-
} satisfies ExportedHandler<Env>;
|
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
// Written once by `mantle generate`; this file is yours now. It composes the service (ADR-0032 decision 6).
|
|
2
|
-
import { createMantle, withCaller, type MantleRuntime, type MantleService, type Surface } from "@aotter/mantle";
|
|
3
|
-
import { createAdminSurface } from "@aotter/mantle/admin";
|
|
4
|
-
import { ConsoleEmailSender, createAuthRoutes, createCallerResolver, createMantleAuth, createSetupIncompleteAuth, type MantleAuth } from "@aotter/mantle/auth";
|
|
5
|
-
import { d1Driver, d1Storage } from "@aotter/mantle/cloudflare";
|
|
6
|
-
import { createMcpSurface, planApp } from "@aotter/mantle/mcp";
|
|
7
|
-
import { mantleAppHtml } from "@aotter/mantle-ui/mcp-app";
|
|
8
|
-
import { createRestSurface } from "@aotter/mantle/web";
|
|
9
|
-
import { plan } from "../.mantle/generated/mantle.js";
|
|
10
|
-
import { handlers } from "./handlers.js";
|
|
11
|
-
|
|
12
|
-
export interface Env {
|
|
13
|
-
readonly DB: D1Database;
|
|
14
|
-
/** The Admin SPA's files (`@aotter/mantle-ui/admin`), bound in wrangler.jsonc. */
|
|
15
|
-
readonly ASSETS: Fetcher;
|
|
16
|
-
readonly BETTER_AUTH_SECRET?: string;
|
|
17
|
-
readonly PUBLIC_ORIGIN?: string;
|
|
18
|
-
readonly ADMIN_EMAIL?: string;
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/** One-time codes printed to the log are for local development: a deployed service picks its own sign-in method and sender. */
|
|
22
|
-
function createAuth(env: Env, origin: string): MantleAuth {
|
|
23
|
-
// an unset PUBLIC_ORIGIN is not local: the fallback origin below is only for URLs, never for deciding to print codes
|
|
24
|
-
const local = env.PUBLIC_ORIGIN !== undefined && /^http:\/\/(localhost|127\.0\.0\.1|\[::1\])(:\d+)?$/.test(origin);
|
|
25
|
-
if (!local || !env.BETTER_AUTH_SECRET || !env.ADMIN_EMAIL)
|
|
26
|
-
return createSetupIncompleteAuth({ message: "Sign-in is not configured: copy .dev.vars.example to .dev.vars locally, or choose a sign-in method in src/service.ts." });
|
|
27
|
-
return createMantleAuth({
|
|
28
|
-
database: env.DB, driver: d1Driver(env.DB), baseURL: origin, secret: env.BETTER_AUTH_SECRET,
|
|
29
|
-
methods: [{ kind: "email-otp", sender: new ConsoleEmailSender() }],
|
|
30
|
-
bootstrapOwner: { match: "email", value: env.ADMIN_EMAIL },
|
|
31
|
-
ipAddressHeaders: ["cf-connecting-ip"],
|
|
32
|
-
oauthProvider: { loginPage: "/admin/sign-in", consentPage: "/admin/oauth/consent", scopes: ["mcp"], mcpResource: `${origin}/mcp` },
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
/** A file of the Admin SPA, or null when it has none by that path. */
|
|
37
|
-
async function adminAsset(assets: Fetcher, path: string): Promise<Response | null> {
|
|
38
|
-
const response = await assets.fetch(new URL(path, "http://assets/"));
|
|
39
|
-
return response.ok ? response : null;
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
function mount(runtime: MantleRuntime, env: Env) {
|
|
43
|
-
const origin = env.PUBLIC_ORIGIN?.replace(/\/+$/, "") ?? "http://127.0.0.1:8787";
|
|
44
|
-
const auth = createAuth(env, origin);
|
|
45
|
-
const resolver = createCallerResolver(auth, { jwtBearer: { audience: `${origin}/mcp`, scopes: ["mcp"] } });
|
|
46
|
-
const authRoutes = createAuthRoutes(auth, { resolver });
|
|
47
|
-
const guard = (surface: Surface, options?: { resourceMetadata?: string }) => withCaller(resolver, surface, options);
|
|
48
|
-
const resourceMetadata = `${origin}/.well-known/oauth-protected-resource/mcp`;
|
|
49
|
-
const admin = guard(createAdminSurface(runtime, { basePath: "/admin", assets: (path) => adminAsset(env.ASSETS, path), identity: { directory: auth, roles: auth, deleteUser: auth.deleteUser }, site: { mcpEndpoints: { public: "/mcp", staff: "/mcp/staff" } } }));
|
|
50
|
-
const mcp = guard(createMcpSurface(runtime, { basePath: "/mcp", surface: "public", resourceMetadata }), { resourceMetadata });
|
|
51
|
-
// MCP Apps hosts render each staff View's rows, and the operations on one row, in the chat
|
|
52
|
-
const staffMcp = guard(createMcpSurface(runtime, { basePath: "/mcp/staff", surface: "staff", apps: { resources: [planApp(runtime.plan, { surface: "staff", html: mantleAppHtml })] }, resourceMetadata }), { resourceMetadata });
|
|
53
|
-
// REST answers everything else: public Views under /api/views and the plan's HTTP Triggers
|
|
54
|
-
const rest = guard(createRestSurface(runtime, { basePath: "/api" }));
|
|
55
|
-
return async (request: Request, waitUntil: (promise: Promise<unknown>) => void): Promise<Response> => {
|
|
56
|
-
const { pathname } = new URL(request.url);
|
|
57
|
-
const under = (base: string) => pathname === base || pathname.startsWith(`${base}/`);
|
|
58
|
-
// Better Auth's context is per isolate: the request that starts it waits for it, or the next one hangs on it; a failed start is mounted again
|
|
59
|
-
await auth.ready?.catch((error) => {
|
|
60
|
-
routes = undefined;
|
|
61
|
-
throw error;
|
|
62
|
-
});
|
|
63
|
-
const owned = await authRoutes(request, { waitUntil });
|
|
64
|
-
if (owned) return owned;
|
|
65
|
-
if (under("/admin")) return admin(request);
|
|
66
|
-
if (under("/mcp/staff")) return staffMcp(request);
|
|
67
|
-
if (under("/mcp")) return mcp(request);
|
|
68
|
-
return rest(request);
|
|
69
|
-
};
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
let routes: ReturnType<typeof mount> | undefined;
|
|
73
|
-
const service: MantleService<Env> = {
|
|
74
|
-
handlers,
|
|
75
|
-
fetch: (request, env, { runtime, waitUntil }) => (routes ??= mount(runtime, env))(request, waitUntil),
|
|
76
|
-
};
|
|
77
|
-
|
|
78
|
-
export const mantle = createMantle(service, { plan, storage: (env) => d1Storage(env.DB), schedules: true });
|
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"$schema": "node_modules/wrangler/config-schema.json",
|
|
3
|
-
"name": "mantle-reference",
|
|
4
|
-
"main": "src/index.ts",
|
|
5
|
-
"compatibility_date": "2026-09-01",
|
|
6
|
-
"compatibility_flags": [
|
|
7
|
-
"nodejs_compat"
|
|
8
|
-
],
|
|
9
|
-
"d1_databases": [
|
|
10
|
-
{
|
|
11
|
-
"binding": "DB",
|
|
12
|
-
"database_name": "mantle-reference"
|
|
13
|
-
}
|
|
14
|
-
],
|
|
15
|
-
"assets": {
|
|
16
|
-
"directory": "node_modules/@aotter/mantle-ui/dist/admin",
|
|
17
|
-
"binding": "ASSETS",
|
|
18
|
-
"run_worker_first": true,
|
|
19
|
-
"html_handling": "none"
|
|
20
|
-
},
|
|
21
|
-
"triggers": {
|
|
22
|
-
"crons": [
|
|
23
|
-
"0 3 * * 1"
|
|
24
|
-
]
|
|
25
|
-
}
|
|
26
|
-
}
|