@aotter/mantle 0.1.5-alpha.1 → 0.2.0-alpha.2
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 +39 -306
- package/dist/admin/consent.d.ts +17 -0
- package/dist/admin/consent.d.ts.map +1 -0
- package/dist/admin/consent.js +17 -0
- package/dist/admin/consent.js.map +1 -0
- package/dist/admin/createAdminSurface.d.ts +22 -0
- package/dist/admin/createAdminSurface.d.ts.map +1 -0
- package/dist/admin/createAdminSurface.js +592 -0
- package/dist/admin/createAdminSurface.js.map +1 -0
- package/dist/admin/developerConsole.d.ts +266 -0
- package/dist/admin/developerConsole.d.ts.map +1 -0
- package/dist/admin/developerConsole.js +136 -0
- package/dist/admin/developerConsole.js.map +1 -0
- package/dist/admin/identity.d.ts +62 -0
- package/dist/admin/identity.d.ts.map +1 -0
- package/dist/admin/identity.js +7 -0
- package/dist/admin/identity.js.map +1 -0
- package/dist/admin/index.d.ts +4 -0
- package/dist/admin/index.d.ts.map +1 -0
- package/dist/admin/index.js +4 -0
- package/dist/admin/index.js.map +1 -0
- package/dist/admin/procedureFlow.d.ts +38 -0
- package/dist/admin/procedureFlow.d.ts.map +1 -0
- package/dist/admin/procedureFlow.js +188 -0
- package/dist/admin/procedureFlow.js.map +1 -0
- package/dist/auth/ConsoleEmailSender.d.ts +15 -0
- package/dist/auth/ConsoleEmailSender.d.ts.map +1 -0
- package/dist/auth/ConsoleEmailSender.js +19 -0
- package/dist/auth/ConsoleEmailSender.js.map +1 -0
- package/dist/auth/appleClientSecret.d.ts +75 -0
- package/dist/auth/appleClientSecret.d.ts.map +1 -0
- package/dist/auth/appleClientSecret.js +116 -0
- package/dist/auth/appleClientSecret.js.map +1 -0
- package/dist/auth/buildAuth.d.ts +4565 -0
- package/dist/auth/buildAuth.d.ts.map +1 -0
- package/dist/auth/buildAuth.js +307 -0
- package/dist/auth/buildAuth.js.map +1 -0
- package/dist/auth/callerResolver.d.ts +48 -0
- package/dist/auth/callerResolver.d.ts.map +1 -0
- package/dist/auth/callerResolver.js +49 -0
- package/dist/auth/callerResolver.js.map +1 -0
- package/dist/auth/createAuthRoutes.d.ts +22 -0
- package/dist/auth/createAuthRoutes.d.ts.map +1 -0
- package/dist/auth/createAuthRoutes.js +129 -0
- package/dist/auth/createAuthRoutes.js.map +1 -0
- package/dist/auth/createMantleAuth.d.ts +3 -0
- package/dist/auth/createMantleAuth.d.ts.map +1 -0
- package/dist/auth/createMantleAuth.js +508 -0
- package/dist/auth/createMantleAuth.js.map +1 -0
- package/dist/auth/db.d.ts +17 -0
- package/dist/auth/db.d.ts.map +1 -0
- package/dist/auth/db.js +24 -0
- package/dist/auth/db.js.map +1 -0
- package/dist/auth/emailTemplates.d.ts +7 -0
- package/dist/auth/emailTemplates.d.ts.map +1 -0
- package/dist/auth/emailTemplates.js +27 -0
- package/dist/auth/emailTemplates.js.map +1 -0
- package/dist/auth/index.d.ts +9 -0
- package/dist/auth/index.d.ts.map +1 -0
- package/dist/auth/index.js +7 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/methods.d.ts +717 -0
- package/dist/auth/methods.d.ts.map +1 -0
- package/dist/auth/methods.js +321 -0
- package/dist/auth/methods.js.map +1 -0
- package/dist/auth/oauthTokens.d.ts +24 -0
- package/dist/auth/oauthTokens.d.ts.map +1 -0
- package/dist/auth/oauthTokens.js +146 -0
- package/dist/auth/oauthTokens.js.map +1 -0
- package/dist/auth/setupIncomplete.d.ts +16 -0
- package/dist/auth/setupIncomplete.d.ts.map +1 -0
- package/dist/auth/setupIncomplete.js +50 -0
- package/dist/auth/setupIncomplete.js.map +1 -0
- package/dist/auth/types.d.ts +440 -0
- package/dist/auth/types.d.ts.map +1 -0
- package/dist/auth/types.js +10 -0
- package/dist/auth/types.js.map +1 -0
- package/dist/bun/index.d.ts +65 -0
- package/dist/bun/index.d.ts.map +1 -0
- package/dist/bun/index.js +130 -0
- package/dist/bun/index.js.map +1 -0
- package/dist/cli/emitModule.d.ts +7 -0
- package/dist/cli/emitModule.d.ts.map +1 -0
- package/dist/cli/emitModule.js +127 -0
- package/dist/cli/emitModule.js.map +1 -0
- package/dist/cli/generate.d.ts +4 -16
- package/dist/cli/generate.d.ts.map +1 -1
- package/dist/cli/generate.js +318 -262
- package/dist/cli/generate.js.map +1 -1
- package/dist/cli/main.d.ts +1 -1
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +15 -71
- package/dist/cli/main.js.map +1 -1
- package/dist/cli/preset.d.ts +18 -0
- package/dist/cli/preset.d.ts.map +1 -0
- package/dist/cli/preset.js +353 -0
- package/dist/cli/preset.js.map +1 -0
- package/dist/cloudflare/index.d.ts +21 -0
- package/dist/cloudflare/index.d.ts.map +1 -0
- package/dist/cloudflare/index.js +14 -0
- package/dist/cloudflare/index.js.map +1 -0
- package/dist/cloudflare/r2Media.d.ts +43 -0
- package/dist/cloudflare/r2Media.d.ts.map +1 -0
- package/dist/cloudflare/r2Media.js +69 -0
- package/dist/cloudflare/r2Media.js.map +1 -0
- package/dist/core/caller.d.ts +35 -0
- package/dist/core/caller.d.ts.map +1 -0
- package/dist/core/caller.js +3 -0
- package/dist/core/caller.js.map +1 -0
- package/dist/core/createMantle.d.ts +22 -0
- package/dist/core/createMantle.d.ts.map +1 -0
- package/dist/core/createMantle.js +117 -0
- package/dist/core/createMantle.js.map +1 -0
- package/dist/core/dialect.d.ts +41 -0
- package/dist/core/dialect.d.ts.map +1 -0
- package/dist/core/dialect.js +7 -0
- package/dist/core/dialect.js.map +1 -0
- package/dist/core/driver.d.ts +17 -0
- package/dist/core/driver.d.ts.map +1 -0
- package/dist/core/driver.js +2 -0
- package/dist/core/driver.js.map +1 -0
- package/dist/core/email.d.ts +17 -0
- package/dist/core/email.d.ts.map +1 -0
- package/dist/core/email.js +2 -0
- package/dist/core/email.js.map +1 -0
- package/dist/core/index.d.ts +16 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +16 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/invocation.d.ts +66 -0
- package/dist/core/invocation.d.ts.map +1 -0
- package/dist/core/invocation.js +3 -0
- package/dist/core/invocation.js.map +1 -0
- package/dist/core/runtime/auth.d.ts +9 -0
- package/dist/core/runtime/auth.d.ts.map +1 -0
- package/dist/core/runtime/auth.js +39 -0
- package/dist/core/runtime/auth.js.map +1 -0
- package/dist/core/runtime/createRuntime.d.ts +23 -0
- package/dist/core/runtime/createRuntime.d.ts.map +1 -0
- package/dist/core/runtime/createRuntime.js +214 -0
- package/dist/core/runtime/createRuntime.js.map +1 -0
- package/dist/core/runtime/verifyPlan.d.ts +34 -0
- package/dist/core/runtime/verifyPlan.d.ts.map +1 -0
- package/dist/core/runtime/verifyPlan.js +301 -0
- package/dist/core/runtime/verifyPlan.js.map +1 -0
- package/dist/core/service.d.ts +45 -0
- package/dist/core/service.d.ts.map +1 -0
- package/dist/core/service.js +2 -0
- package/dist/core/service.js.map +1 -0
- package/dist/core/site.d.ts +117 -0
- package/dist/core/site.d.ts.map +1 -0
- package/dist/core/site.js +2 -0
- package/dist/core/site.js.map +1 -0
- package/dist/core/siteConfig.d.ts +5 -0
- package/dist/core/siteConfig.d.ts.map +1 -0
- package/dist/core/siteConfig.js +24 -0
- package/dist/core/siteConfig.js.map +1 -0
- package/dist/core/sql/allowlist.d.ts +65 -0
- package/dist/core/sql/allowlist.d.ts.map +1 -0
- package/dist/core/sql/allowlist.js +705 -0
- package/dist/core/sql/allowlist.js.map +1 -0
- package/dist/core/sql/ast.d.ts +24 -0
- package/dist/core/sql/ast.d.ts.map +1 -0
- package/dist/core/sql/ast.js +32 -0
- package/dist/core/sql/ast.js.map +1 -0
- package/dist/core/sql/compile.d.ts +50 -0
- package/dist/core/sql/compile.d.ts.map +1 -0
- package/dist/core/sql/compile.js +48 -0
- package/dist/core/sql/compile.js.map +1 -0
- package/dist/core/sql/policy.d.ts +121 -0
- package/dist/core/sql/policy.d.ts.map +1 -0
- package/dist/core/sql/policy.js +379 -0
- package/dist/core/sql/policy.js.map +1 -0
- package/dist/core/sql/positions.d.ts +30 -0
- package/dist/core/sql/positions.d.ts.map +1 -0
- package/dist/core/sql/positions.js +22 -0
- package/dist/core/sql/positions.js.map +1 -0
- package/dist/core/sql/run.d.ts +76 -0
- package/dist/core/sql/run.d.ts.map +1 -0
- package/dist/core/sql/run.js +267 -0
- package/dist/core/sql/run.js.map +1 -0
- package/dist/core/store/createStore.d.ts +49 -0
- package/dist/core/store/createStore.d.ts.map +1 -0
- package/dist/core/store/createStore.js +227 -0
- package/dist/core/store/createStore.js.map +1 -0
- package/dist/core/store/cursor.d.ts +4 -0
- package/dist/core/store/cursor.d.ts.map +1 -0
- package/dist/core/store/cursor.js +22 -0
- package/dist/core/store/cursor.js.map +1 -0
- package/dist/core/store/json.d.ts +80 -0
- package/dist/core/store/json.d.ts.map +1 -0
- package/dist/core/store/json.js +342 -0
- package/dist/core/store/json.js.map +1 -0
- package/dist/core/store.d.ts +160 -0
- package/dist/core/store.d.ts.map +1 -0
- package/dist/core/store.js +2 -0
- package/dist/core/store.js.map +1 -0
- package/dist/core/wire.d.ts +20 -0
- package/dist/core/wire.d.ts.map +1 -0
- package/dist/core/wire.js +84 -0
- package/dist/core/wire.js.map +1 -0
- package/dist/core/withCaller.d.ts +16 -0
- package/dist/core/withCaller.d.ts.map +1 -0
- package/dist/core/withCaller.js +29 -0
- package/dist/core/withCaller.js.map +1 -0
- package/dist/d1/adapter.d.ts +12 -0
- package/dist/d1/adapter.d.ts.map +1 -0
- package/dist/d1/adapter.js +23 -0
- package/dist/d1/adapter.js.map +1 -0
- package/dist/d1/codec.d.ts +14 -0
- package/dist/d1/codec.d.ts.map +1 -0
- package/dist/d1/codec.js +136 -0
- package/dist/d1/codec.js.map +1 -0
- package/dist/d1/compile/index.d.ts +9 -0
- package/dist/d1/compile/index.d.ts.map +1 -0
- package/dist/d1/compile/index.js +9 -0
- package/dist/d1/compile/index.js.map +1 -0
- package/dist/d1/dialect.d.ts +4 -0
- package/dist/d1/dialect.d.ts.map +1 -0
- package/dist/d1/dialect.js +13 -0
- package/dist/d1/dialect.js.map +1 -0
- package/dist/d1/executor.d.ts +13 -0
- package/dist/d1/executor.d.ts.map +1 -0
- package/dist/d1/executor.js +91 -0
- package/dist/d1/executor.js.map +1 -0
- package/dist/d1/index.d.ts +6 -0
- package/dist/d1/index.d.ts.map +1 -0
- package/dist/d1/index.js +6 -0
- package/dist/d1/index.js.map +1 -0
- package/dist/d1/lower.d.ts +8 -0
- package/dist/d1/lower.d.ts.map +1 -0
- package/dist/d1/lower.js +167 -0
- package/dist/d1/lower.js.map +1 -0
- package/dist/d1/media.d.ts +5 -0
- package/dist/d1/media.d.ts.map +1 -0
- package/dist/d1/media.js +157 -0
- package/dist/d1/media.js.map +1 -0
- package/dist/d1/migrations.d.ts +12 -0
- package/dist/d1/migrations.d.ts.map +1 -0
- package/dist/d1/migrations.js +111 -0
- package/dist/d1/migrations.js.map +1 -0
- package/dist/d1/print.d.ts +28 -0
- package/dist/d1/print.d.ts.map +1 -0
- package/dist/d1/print.js +54 -0
- package/dist/d1/print.js.map +1 -0
- package/dist/d1/site.d.ts +17 -0
- package/dist/d1/site.d.ts.map +1 -0
- package/dist/d1/site.js +63 -0
- package/dist/d1/site.js.map +1 -0
- package/dist/d1/storage.d.ts +34 -0
- package/dist/d1/storage.d.ts.map +1 -0
- package/dist/d1/storage.js +288 -0
- package/dist/d1/storage.js.map +1 -0
- package/dist/d1/tz.d.ts +21 -0
- package/dist/d1/tz.d.ts.map +1 -0
- package/dist/d1/tz.js +54 -0
- package/dist/d1/tz.js.map +1 -0
- package/dist/d1/validator.d.ts +10 -0
- package/dist/d1/validator.d.ts.map +1 -0
- package/dist/d1/validator.js +33 -0
- package/dist/d1/validator.js.map +1 -0
- package/dist/mcp/apps.d.ts +43 -0
- package/dist/mcp/apps.d.ts.map +1 -0
- package/dist/mcp/apps.js +57 -0
- package/dist/mcp/apps.js.map +1 -0
- package/dist/mcp/catalog.d.ts +55 -0
- package/dist/mcp/catalog.d.ts.map +1 -0
- package/dist/mcp/catalog.js +81 -0
- package/dist/mcp/catalog.js.map +1 -0
- package/dist/mcp/createMcpSurface.d.ts +34 -0
- package/dist/mcp/createMcpSurface.d.ts.map +1 -0
- package/dist/mcp/createMcpSurface.js +150 -0
- package/dist/mcp/createMcpSurface.js.map +1 -0
- package/dist/mcp/index.d.ts +4 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +4 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/postgres/adapter.d.ts +20 -0
- package/dist/postgres/adapter.d.ts.map +1 -0
- package/dist/postgres/adapter.js +44 -0
- package/dist/postgres/adapter.js.map +1 -0
- package/dist/postgres/codec.d.ts +13 -0
- package/dist/postgres/codec.d.ts.map +1 -0
- package/dist/postgres/codec.js +110 -0
- package/dist/postgres/codec.js.map +1 -0
- package/dist/postgres/compile/index.d.ts +9 -0
- package/dist/postgres/compile/index.d.ts.map +1 -0
- package/dist/postgres/compile/index.js +9 -0
- package/dist/postgres/compile/index.js.map +1 -0
- package/dist/postgres/driver.d.ts +92 -0
- package/dist/postgres/driver.d.ts.map +1 -0
- package/dist/postgres/driver.js +110 -0
- package/dist/postgres/driver.js.map +1 -0
- package/dist/postgres/executor.d.ts +20 -0
- package/dist/postgres/executor.d.ts.map +1 -0
- package/dist/postgres/executor.js +69 -0
- package/dist/postgres/executor.js.map +1 -0
- package/dist/postgres/index.d.ts +7 -0
- package/dist/postgres/index.d.ts.map +1 -0
- package/dist/postgres/index.js +7 -0
- package/dist/postgres/index.js.map +1 -0
- package/dist/postgres/lower.d.ts +6 -0
- package/dist/postgres/lower.d.ts.map +1 -0
- package/dist/postgres/lower.js +157 -0
- package/dist/postgres/lower.js.map +1 -0
- package/dist/postgres/print.d.ts +11 -0
- package/dist/postgres/print.d.ts.map +1 -0
- package/dist/postgres/print.js +121 -0
- package/dist/postgres/print.js.map +1 -0
- package/dist/postgres/storage.d.ts +19 -0
- package/dist/postgres/storage.d.ts.map +1 -0
- package/dist/postgres/storage.js +201 -0
- package/dist/postgres/storage.js.map +1 -0
- package/dist/postgres/textRows.d.ts +10 -0
- package/dist/postgres/textRows.d.ts.map +1 -0
- package/dist/postgres/textRows.js +44 -0
- package/dist/postgres/textRows.js.map +1 -0
- package/dist/postgres/validator.d.ts +12 -0
- package/dist/postgres/validator.d.ts.map +1 -0
- package/dist/postgres/validator.js +46 -0
- package/dist/postgres/validator.js.map +1 -0
- package/dist/spec/domain/index.d.ts +3 -0
- package/dist/spec/domain/index.d.ts.map +1 -0
- package/dist/spec/domain/index.js +3 -0
- package/dist/spec/domain/index.js.map +1 -0
- package/dist/spec/domain/model/ContentState.d.ts +8 -0
- package/dist/spec/domain/model/ContentState.d.ts.map +1 -0
- package/dist/spec/domain/model/ContentState.js +7 -0
- package/dist/spec/domain/model/ContentState.js.map +1 -0
- package/dist/spec/domain/model/Entry.d.ts +29 -0
- package/dist/spec/domain/model/Entry.d.ts.map +1 -0
- package/dist/spec/domain/model/Entry.js +16 -0
- package/dist/spec/domain/model/Entry.js.map +1 -0
- package/dist/spec/domain/model/Locale.d.ts +30 -0
- package/dist/spec/domain/model/Locale.d.ts.map +1 -0
- package/dist/spec/domain/model/Locale.js +33 -0
- package/dist/spec/domain/model/Locale.js.map +1 -0
- package/dist/spec/domain/model/ManifestGrammar.d.ts +452 -0
- package/dist/spec/domain/model/ManifestGrammar.d.ts.map +1 -0
- package/dist/spec/domain/model/ManifestGrammar.js +149 -0
- package/dist/spec/domain/model/ManifestGrammar.js.map +1 -0
- package/dist/spec/domain/model/MediaMimeAccept.d.ts +55 -0
- package/dist/spec/domain/model/MediaMimeAccept.d.ts.map +1 -0
- package/dist/spec/domain/model/MediaMimeAccept.js +90 -0
- package/dist/spec/domain/model/MediaMimeAccept.js.map +1 -0
- package/dist/spec/domain/model/RuntimePlan.d.ts +94 -0
- package/dist/spec/domain/model/RuntimePlan.d.ts.map +1 -0
- package/dist/spec/domain/model/RuntimePlan.js +4 -0
- package/dist/spec/domain/model/RuntimePlan.js.map +1 -0
- package/dist/spec/domain/model/SiteConfig.d.ts +173 -0
- package/dist/spec/domain/model/SiteConfig.d.ts.map +1 -0
- package/dist/spec/domain/model/SiteConfig.js +13 -0
- package/dist/spec/domain/model/SiteConfig.js.map +1 -0
- package/dist/spec/domain/model/SqlIr.d.ts +96 -0
- package/dist/spec/domain/model/SqlIr.d.ts.map +1 -0
- package/dist/spec/domain/model/SqlIr.js +95 -0
- package/dist/spec/domain/model/SqlIr.js.map +1 -0
- package/dist/spec/domain/model/index.d.ts +14 -0
- package/dist/spec/domain/model/index.d.ts.map +1 -0
- package/dist/spec/domain/model/index.js +14 -0
- package/dist/spec/domain/model/index.js.map +1 -0
- package/dist/spec/domain/service/CloudflareCron.d.ts +2 -0
- package/dist/spec/domain/service/CloudflareCron.d.ts.map +1 -0
- package/dist/spec/domain/service/CloudflareCron.js +63 -0
- package/dist/spec/domain/service/CloudflareCron.js.map +1 -0
- package/dist/spec/domain/service/CrossSchemaChecker.d.ts +34 -0
- package/dist/spec/domain/service/CrossSchemaChecker.d.ts.map +1 -0
- package/dist/spec/domain/service/CrossSchemaChecker.js +114 -0
- package/dist/spec/domain/service/CrossSchemaChecker.js.map +1 -0
- package/dist/spec/domain/service/EntryDataValidator.d.ts +56 -0
- package/dist/spec/domain/service/EntryDataValidator.d.ts.map +1 -0
- package/dist/spec/domain/service/EntryDataValidator.js +88 -0
- package/dist/spec/domain/service/EntryDataValidator.js.map +1 -0
- package/dist/spec/domain/service/JsonSchemaToZod.d.ts +29 -0
- package/dist/spec/domain/service/JsonSchemaToZod.d.ts.map +1 -0
- package/dist/spec/domain/service/JsonSchemaToZod.js +156 -0
- package/dist/spec/domain/service/JsonSchemaToZod.js.map +1 -0
- package/dist/spec/domain/service/LifecycleStateMachine.d.ts +75 -0
- package/dist/spec/domain/service/LifecycleStateMachine.d.ts.map +1 -0
- package/dist/spec/domain/service/LifecycleStateMachine.js +76 -0
- package/dist/spec/domain/service/LifecycleStateMachine.js.map +1 -0
- package/dist/spec/domain/service/LocaleCanonicalizer.d.ts +29 -0
- package/dist/spec/domain/service/LocaleCanonicalizer.d.ts.map +1 -0
- package/dist/spec/domain/service/LocaleCanonicalizer.js +96 -0
- package/dist/spec/domain/service/LocaleCanonicalizer.js.map +1 -0
- package/dist/spec/domain/service/ManifestFieldChecks.d.ts +60 -0
- package/dist/spec/domain/service/ManifestFieldChecks.d.ts.map +1 -0
- package/dist/spec/domain/service/ManifestFieldChecks.js +116 -0
- package/dist/spec/domain/service/ManifestFieldChecks.js.map +1 -0
- package/dist/spec/domain/service/ManifestGraphValidator.d.ts +15 -0
- package/dist/spec/domain/service/ManifestGraphValidator.d.ts.map +1 -0
- package/dist/spec/domain/service/ManifestGraphValidator.js +225 -0
- package/dist/spec/domain/service/ManifestGraphValidator.js.map +1 -0
- package/dist/spec/domain/service/ManifestLinker.d.ts +45 -0
- package/dist/spec/domain/service/ManifestLinker.d.ts.map +1 -0
- package/dist/spec/domain/service/ManifestLinker.js +92 -0
- package/dist/spec/domain/service/ManifestLinker.js.map +1 -0
- package/dist/spec/domain/service/ManifestLocaleTrimmer.d.ts +16 -0
- package/dist/spec/domain/service/ManifestLocaleTrimmer.d.ts.map +1 -0
- package/dist/spec/domain/service/ManifestLocaleTrimmer.js +76 -0
- package/dist/spec/domain/service/ManifestLocaleTrimmer.js.map +1 -0
- package/dist/spec/domain/service/ManifestParser.d.ts +49 -0
- package/dist/spec/domain/service/ManifestParser.d.ts.map +1 -0
- package/dist/spec/domain/service/ManifestParser.js +203 -0
- package/dist/spec/domain/service/ManifestParser.js.map +1 -0
- package/dist/spec/domain/service/ManifestPartition.d.ts +9 -0
- package/dist/spec/domain/service/ManifestPartition.d.ts.map +1 -0
- package/dist/spec/domain/service/ManifestPartition.js +19 -0
- package/dist/spec/domain/service/ManifestPartition.js.map +1 -0
- package/dist/spec/domain/service/ManifestPathDiagnoser.d.ts +33 -0
- package/dist/spec/domain/service/ManifestPathDiagnoser.d.ts.map +1 -0
- package/dist/spec/domain/service/ManifestPathDiagnoser.js +43 -0
- package/dist/spec/domain/service/ManifestPathDiagnoser.js.map +1 -0
- package/dist/spec/domain/service/ManifestSourceSpans.d.ts +10 -0
- package/dist/spec/domain/service/ManifestSourceSpans.d.ts.map +1 -0
- package/dist/spec/domain/service/ManifestSourceSpans.js +76 -0
- package/dist/spec/domain/service/ManifestSourceSpans.js.map +1 -0
- package/dist/spec/domain/service/McpToolNaming.d.ts +25 -0
- package/dist/spec/domain/service/McpToolNaming.d.ts.map +1 -0
- package/dist/spec/domain/service/McpToolNaming.js +50 -0
- package/dist/spec/domain/service/McpToolNaming.js.map +1 -0
- package/dist/spec/domain/service/PlanFingerprint.d.ts +4 -0
- package/dist/spec/domain/service/PlanFingerprint.d.ts.map +1 -0
- package/dist/spec/domain/service/PlanFingerprint.js +14 -0
- package/dist/spec/domain/service/PlanFingerprint.js.map +1 -0
- package/dist/spec/domain/service/ProcedureViewSpecChecks.d.ts +4 -0
- package/dist/spec/domain/service/ProcedureViewSpecChecks.d.ts.map +1 -0
- package/dist/spec/domain/service/ProcedureViewSpecChecks.js +211 -0
- package/dist/spec/domain/service/ProcedureViewSpecChecks.js.map +1 -0
- package/dist/spec/domain/service/SchemaAdminUiChecker.d.ts +42 -0
- package/dist/spec/domain/service/SchemaAdminUiChecker.d.ts.map +1 -0
- package/dist/spec/domain/service/SchemaAdminUiChecker.js +289 -0
- package/dist/spec/domain/service/SchemaAdminUiChecker.js.map +1 -0
- package/dist/spec/domain/service/SchemaIndexChecker.d.ts +33 -0
- package/dist/spec/domain/service/SchemaIndexChecker.d.ts.map +1 -0
- package/dist/spec/domain/service/SchemaIndexChecker.js +256 -0
- package/dist/spec/domain/service/SchemaIndexChecker.js.map +1 -0
- package/dist/spec/domain/service/SchemaSearchChecker.d.ts +11 -0
- package/dist/spec/domain/service/SchemaSearchChecker.d.ts.map +1 -0
- package/dist/spec/domain/service/SchemaSearchChecker.js +78 -0
- package/dist/spec/domain/service/SchemaSearchChecker.js.map +1 -0
- package/dist/spec/domain/service/SchemaSpecChecks.d.ts +31 -0
- package/dist/spec/domain/service/SchemaSpecChecks.d.ts.map +1 -0
- package/dist/spec/domain/service/SchemaSpecChecks.js +445 -0
- package/dist/spec/domain/service/SchemaSpecChecks.js.map +1 -0
- package/dist/spec/domain/service/SiteDefaultsValidator.d.ts +39 -0
- package/dist/spec/domain/service/SiteDefaultsValidator.d.ts.map +1 -0
- package/dist/spec/domain/service/SiteDefaultsValidator.js +194 -0
- package/dist/spec/domain/service/SiteDefaultsValidator.js.map +1 -0
- package/dist/spec/domain/service/SqlClassify.d.ts +19 -0
- package/dist/spec/domain/service/SqlClassify.d.ts.map +1 -0
- package/dist/spec/domain/service/SqlClassify.js +42 -0
- package/dist/spec/domain/service/SqlClassify.js.map +1 -0
- package/dist/spec/domain/service/SqlRefusal.d.ts +16 -0
- package/dist/spec/domain/service/SqlRefusal.d.ts.map +1 -0
- package/dist/spec/domain/service/SqlRefusal.js +20 -0
- package/dist/spec/domain/service/SqlRefusal.js.map +1 -0
- package/dist/spec/domain/service/SqlTypes.d.ts +40 -0
- package/dist/spec/domain/service/SqlTypes.d.ts.map +1 -0
- package/dist/spec/domain/service/SqlTypes.js +110 -0
- package/dist/spec/domain/service/SqlTypes.js.map +1 -0
- package/dist/spec/domain/service/StaffRoleHierarchy.d.ts +3 -0
- package/dist/spec/domain/service/StaffRoleHierarchy.d.ts.map +1 -0
- package/dist/spec/domain/service/StaffRoleHierarchy.js +19 -0
- package/dist/spec/domain/service/StaffRoleHierarchy.js.map +1 -0
- package/dist/spec/domain/service/TriggerGraphChecks.d.ts +16 -0
- package/dist/spec/domain/service/TriggerGraphChecks.d.ts.map +1 -0
- package/dist/spec/domain/service/TriggerGraphChecks.js +337 -0
- package/dist/spec/domain/service/TriggerGraphChecks.js.map +1 -0
- package/dist/spec/domain/service/TriggerSpecChecks.d.ts +4 -0
- package/dist/spec/domain/service/TriggerSpecChecks.d.ts.map +1 -0
- package/dist/spec/domain/service/TriggerSpecChecks.js +89 -0
- package/dist/spec/domain/service/TriggerSpecChecks.js.map +1 -0
- package/dist/spec/domain/service/ValidatedAdminUiProjection.d.ts +11 -0
- package/dist/spec/domain/service/ValidatedAdminUiProjection.d.ts.map +1 -0
- package/dist/spec/domain/service/ValidatedAdminUiProjection.js +26 -0
- package/dist/spec/domain/service/ValidatedAdminUiProjection.js.map +1 -0
- package/dist/spec/domain/service/ViewAdminUiChecker.d.ts +14 -0
- package/dist/spec/domain/service/ViewAdminUiChecker.d.ts.map +1 -0
- package/dist/spec/domain/service/ViewAdminUiChecker.js +53 -0
- package/dist/spec/domain/service/ViewAdminUiChecker.js.map +1 -0
- package/dist/spec/domain/service/index.d.ts +24 -0
- package/dist/spec/domain/service/index.d.ts.map +1 -0
- package/dist/spec/domain/service/index.js +24 -0
- package/dist/spec/domain/service/index.js.map +1 -0
- package/dist/spec/index.d.ts +10 -0
- package/dist/spec/index.d.ts.map +1 -0
- package/dist/spec/index.js +12 -0
- package/dist/spec/index.js.map +1 -0
- package/dist/spec/infrastructure/cli/parseArgsError.d.ts +16 -0
- package/dist/spec/infrastructure/cli/parseArgsError.d.ts.map +1 -0
- package/dist/spec/infrastructure/cli/parseArgsError.js +34 -0
- package/dist/spec/infrastructure/cli/parseArgsError.js.map +1 -0
- package/dist/spec/infrastructure/index.d.ts +2 -0
- package/dist/spec/infrastructure/index.d.ts.map +1 -0
- package/dist/spec/infrastructure/index.js +2 -0
- package/dist/spec/infrastructure/index.js.map +1 -0
- package/dist/spec/infrastructure/sql/PgQueryParser.d.ts +18 -0
- package/dist/spec/infrastructure/sql/PgQueryParser.d.ts.map +1 -0
- package/dist/spec/infrastructure/sql/PgQueryParser.js +17 -0
- package/dist/spec/infrastructure/sql/PgQueryParser.js.map +1 -0
- package/dist/spec/infrastructure/sql/compilePlan.d.ts +37 -0
- package/dist/spec/infrastructure/sql/compilePlan.d.ts.map +1 -0
- package/dist/spec/infrastructure/sql/compilePlan.js +282 -0
- package/dist/spec/infrastructure/sql/compilePlan.js.map +1 -0
- package/dist/spec/infrastructure/sql/compileSql.d.ts +35 -0
- package/dist/spec/infrastructure/sql/compileSql.d.ts.map +1 -0
- package/dist/spec/infrastructure/sql/compileSql.js +92 -0
- package/dist/spec/infrastructure/sql/compileSql.js.map +1 -0
- package/dist/spec/infrastructure/sql/frontEnd.d.ts +8 -0
- package/dist/spec/infrastructure/sql/frontEnd.d.ts.map +1 -0
- package/dist/spec/infrastructure/sql/frontEnd.js +100 -0
- package/dist/spec/infrastructure/sql/frontEnd.js.map +1 -0
- package/dist/spec/infrastructure/sql/index.d.ts +4 -0
- package/dist/spec/infrastructure/sql/index.d.ts.map +1 -0
- package/dist/spec/infrastructure/sql/index.js +4 -0
- package/dist/spec/infrastructure/sql/index.js.map +1 -0
- package/dist/spec/kernel/diagnostic.d.ts +137 -0
- package/dist/spec/kernel/diagnostic.d.ts.map +1 -0
- package/dist/spec/kernel/diagnostic.js +296 -0
- package/dist/spec/kernel/diagnostic.js.map +1 -0
- package/dist/spec/kernel/index.d.ts +8 -0
- package/dist/spec/kernel/index.d.ts.map +1 -0
- package/dist/spec/kernel/index.js +8 -0
- package/dist/spec/kernel/index.js.map +1 -0
- package/dist/spec/usecase/EmitTypes.d.ts +22 -0
- package/dist/spec/usecase/EmitTypes.d.ts.map +1 -0
- package/dist/spec/usecase/EmitTypes.js +182 -0
- package/dist/spec/usecase/EmitTypes.js.map +1 -0
- package/dist/spec/usecase/ValidateManifestsUseCase.d.ts +8 -0
- package/dist/spec/usecase/ValidateManifestsUseCase.d.ts.map +1 -0
- package/dist/spec/usecase/ValidateManifestsUseCase.js +101 -0
- package/dist/spec/usecase/ValidateManifestsUseCase.js.map +1 -0
- package/dist/spec/usecase/dto/ValidateManifestsRequest.d.ts +27 -0
- package/dist/spec/usecase/dto/ValidateManifestsRequest.d.ts.map +1 -0
- package/dist/spec/usecase/dto/ValidateManifestsRequest.js +2 -0
- package/dist/spec/usecase/dto/ValidateManifestsRequest.js.map +1 -0
- package/dist/spec/usecase/dto/ValidateManifestsResponse.d.ts +14 -0
- package/dist/spec/usecase/dto/ValidateManifestsResponse.d.ts.map +1 -0
- package/dist/spec/usecase/dto/ValidateManifestsResponse.js +2 -0
- package/dist/spec/usecase/dto/ValidateManifestsResponse.js.map +1 -0
- package/dist/spec/usecase/dto/index.d.ts +3 -0
- package/dist/spec/usecase/dto/index.d.ts.map +1 -0
- package/dist/spec/usecase/dto/index.js +3 -0
- package/dist/spec/usecase/dto/index.js.map +1 -0
- package/dist/spec/usecase/index.d.ts +10 -0
- package/dist/spec/usecase/index.d.ts.map +1 -0
- package/dist/spec/usecase/index.js +10 -0
- package/dist/spec/usecase/index.js.map +1 -0
- package/dist/testing/cases/before-hook.d.ts +4 -0
- package/dist/testing/cases/before-hook.d.ts.map +1 -0
- package/dist/testing/cases/before-hook.js +71 -0
- package/dist/testing/cases/before-hook.js.map +1 -0
- package/dist/testing/cases/corpus.d.ts +12 -0
- package/dist/testing/cases/corpus.d.ts.map +1 -0
- package/dist/testing/cases/corpus.js +91 -0
- package/dist/testing/cases/corpus.js.map +1 -0
- package/dist/testing/cases/policy.d.ts +74 -0
- package/dist/testing/cases/policy.d.ts.map +1 -0
- package/dist/testing/cases/policy.js +142 -0
- package/dist/testing/cases/policy.js.map +1 -0
- package/dist/testing/cases/printer.d.ts +4 -0
- package/dist/testing/cases/printer.d.ts.map +1 -0
- package/dist/testing/cases/printer.js +32 -0
- package/dist/testing/cases/printer.js.map +1 -0
- package/dist/testing/cases/report-view.d.ts +5 -0
- package/dist/testing/cases/report-view.d.ts.map +1 -0
- package/dist/testing/cases/report-view.js +33 -0
- package/dist/testing/cases/report-view.js.map +1 -0
- package/dist/testing/cases/requisition.d.ts +4 -0
- package/dist/testing/cases/requisition.d.ts.map +1 -0
- package/dist/testing/cases/requisition.js +38 -0
- package/dist/testing/cases/requisition.js.map +1 -0
- package/dist/testing/cases/search-places.d.ts +4 -0
- package/dist/testing/cases/search-places.d.ts.map +1 -0
- package/dist/testing/cases/search-places.js +60 -0
- package/dist/testing/cases/search-places.js.map +1 -0
- package/dist/testing/cases/stock.d.ts +4 -0
- package/dist/testing/cases/stock.d.ts.map +1 -0
- package/dist/testing/cases/stock.js +35 -0
- package/dist/testing/cases/stock.js.map +1 -0
- package/dist/testing/cases/store.d.ts +4 -0
- package/dist/testing/cases/store.d.ts.map +1 -0
- package/dist/testing/cases/store.js +100 -0
- package/dist/testing/cases/store.js.map +1 -0
- package/dist/testing/harness.d.ts +94 -0
- package/dist/testing/harness.d.ts.map +1 -0
- package/dist/testing/harness.js +168 -0
- package/dist/testing/harness.js.map +1 -0
- package/dist/testing/index.d.ts +37 -0
- package/dist/testing/index.d.ts.map +1 -0
- package/dist/testing/index.js +43 -0
- package/dist/testing/index.js.map +1 -0
- package/dist/testing/report.d.ts +15 -0
- package/dist/testing/report.d.ts.map +1 -0
- package/dist/testing/report.js +22 -0
- package/dist/testing/report.js.map +1 -0
- package/dist/web/createRestSurface.d.ts +7 -0
- package/dist/web/createRestSurface.d.ts.map +1 -0
- package/dist/web/createRestSurface.js +39 -0
- package/dist/web/createRestSurface.js.map +1 -0
- package/dist/web/index.d.ts +2 -0
- package/dist/web/index.d.ts.map +1 -0
- package/dist/web/index.js +2 -0
- package/dist/web/index.js.map +1 -0
- package/docs/adr/0008-structured-diagnostic-shape.md +2 -2
- package/docs/adr/0011-adapter-port-spec.md +2 -2
- package/docs/adr/0014-auth-better-auth-and-multi-tenant-mcp.md +21 -2
- package/docs/adr/0019-sealed-manifest-runtime-pipeline.md +5 -1
- package/docs/adr/0022-caller-observed-version-occ.md +1 -1
- package/docs/adr/0024-manifest-native-schema-tables.md +2 -2
- package/docs/adr/0027-scheduled-procedure-triggers.md +1 -1
- package/docs/adr/0028-schema-ttl-expiry.md +3 -3
- package/docs/adr/0029-mcp-apps-interaction-contracts.md +324 -0
- package/docs/adr/0030-store.md +40 -0
- package/docs/adr/0031-host-cloud-core-contract.md +25 -0
- package/docs/adr/0032-store-centric-core-and-service-contract.md +361 -0
- package/docs/adr/0033-storage-converges-to-the-plan.md +92 -0
- package/docs/adr/0034-store-is-authored-as-sql.md +192 -0
- package/docs/adr/0035-sql-dialects.md +154 -0
- package/docs/adr/0036-host-and-dialect.md +65 -0
- package/docs/adr/0037-postgresql-is-the-reference-dialect.md +124 -0
- package/docs/adr/0038-bun-native-host.md +63 -0
- package/docs/adr/README.md +23 -8
- package/docs/adr/adr-lite-861-admin-webmcp.md +6 -0
- package/docs/adr/adr-lite-909-admin-ui-kit.md +1 -1
- package/docs/examples/README.md +16 -18
- package/docs/examples/commerce-inventory.md +481 -0
- package/docs/examples/commerce.md +254 -0
- package/docs/examples/guarded-api.md +238 -0
- package/docs/examples/intake-hooks.md +237 -0
- package/docs/examples/intake.md +127 -0
- package/docs/examples/legal-documents.md +218 -0
- package/docs/examples/procurement.md +215 -0
- package/docs/examples/publication.md +211 -0
- package/docs/examples/reference-service/.dev.vars.example +4 -0
- package/docs/examples/reference-service/.mantle/generated/mantle.ts +174 -0
- package/docs/examples/reference-service/.mantle/generated/plan.json +1936 -0
- package/docs/examples/reference-service/README.md +33 -0
- package/docs/examples/reference-service/manifests/catalog.yaml +103 -0
- package/docs/examples/reference-service/manifests/orders.yaml +120 -0
- package/docs/examples/reference-service/mantle.config.json +1 -0
- package/docs/examples/reference-service/package.json +27 -0
- package/docs/examples/reference-service/smoke.mjs +156 -0
- package/docs/examples/reference-service/src/handlers.ts +36 -0
- package/docs/examples/reference-service/src/index.ts +33 -0
- package/docs/examples/reference-service/src/service.ts +78 -0
- package/docs/examples/{host-minimal-worker → reference-service}/tsconfig.json +7 -2
- package/docs/examples/reference-service/wrangler.jsonc +26 -0
- package/docs/examples/reservation.md +142 -0
- package/docs/handbook/cloudflare/authentication.md +119 -311
- package/docs/handbook/cloudflare/chatgpt-sites.md +104 -15
- package/docs/handbook/cloudflare/deploy-and-operate.md +77 -71
- package/docs/handbook/cloudflare/media-r2.md +64 -187
- package/docs/handbook/cloudflare/service-entry.md +138 -0
- package/docs/handbook/concepts/authorization.md +104 -94
- package/docs/handbook/concepts/four-atoms.md +68 -144
- package/docs/handbook/concepts/lifecycle-and-locales.md +62 -114
- package/docs/handbook/concepts/mcp-and-agents.md +112 -117
- package/docs/handbook/concepts/procedures-and-triggers.md +126 -181
- package/docs/handbook/concepts/runtime-and-adapters.md +177 -163
- package/docs/handbook/concepts/views.md +97 -173
- package/docs/handbook/examples/hub.md +17 -6
- package/docs/handbook/guides/admin-ui.md +101 -96
- package/docs/handbook/guides/agent-setup.md +56 -71
- package/docs/handbook/guides/typed-queries.md +105 -111
- package/docs/handbook/navigation.json +8 -33
- package/docs/handbook/reference/authorization.md +52 -271
- package/docs/handbook/reference/diagnostics.md +69 -178
- package/docs/handbook/reference/features.md +48 -50
- package/docs/handbook/reference/manifest.md +56 -116
- package/docs/handbook/reference/procedure.md +91 -279
- package/docs/handbook/reference/schema.md +154 -239
- package/docs/handbook/reference/site-config.md +58 -211
- package/docs/handbook/reference/surface.md +69 -181
- package/docs/handbook/reference/trigger.md +72 -181
- package/docs/handbook/reference/view.md +140 -241
- package/docs/handbook/releases/index.md +58 -77
- package/docs/handbook/start/overview.md +59 -51
- package/docs/handbook/start/project-and-cli.md +132 -105
- package/docs/handbook/start/quickstart-worker.md +102 -160
- package/docs/skills/develop/SKILL.md +114 -240
- package/docs/skills/develop/mcp-app.md +79 -0
- package/docs/skills/integrate/SKILL.md +83 -47
- package/docs/skills/media-gc/SKILL.md +21 -10
- package/docs/skills/provision/SKILL.md +68 -162
- package/docs/skills/update/SKILL.md +33 -34
- package/docs/upgrade-0.1-to-0.2.md +211 -0
- package/package.json +87 -106
- package/dist/admin-ui.d.ts +0 -2
- package/dist/admin-ui.d.ts.map +0 -1
- package/dist/admin-ui.js +0 -2
- package/dist/admin-ui.js.map +0 -1
- package/dist/admin.d.ts +0 -2
- package/dist/admin.d.ts.map +0 -1
- package/dist/admin.js +0 -2
- package/dist/admin.js.map +0 -1
- package/dist/auth.d.ts +0 -2
- package/dist/auth.d.ts.map +0 -1
- package/dist/auth.js +0 -2
- package/dist/auth.js.map +0 -1
- package/dist/bun.d.ts +0 -2
- package/dist/bun.d.ts.map +0 -1
- package/dist/bun.js +0 -2
- package/dist/bun.js.map +0 -1
- package/dist/cli/generate-cloudflare.d.ts +0 -7
- package/dist/cli/generate-cloudflare.d.ts.map +0 -1
- package/dist/cli/generate-cloudflare.js +0 -123
- package/dist/cli/generate-cloudflare.js.map +0 -1
- package/dist/cli/generate-project.d.ts +0 -25
- package/dist/cli/generate-project.d.ts.map +0 -1
- package/dist/cli/generate-project.js +0 -282
- package/dist/cli/generate-project.js.map +0 -1
- package/dist/cli/generate-sites.d.ts +0 -8
- package/dist/cli/generate-sites.d.ts.map +0 -1
- package/dist/cli/generate-sites.js +0 -273
- package/dist/cli/generate-sites.js.map +0 -1
- package/dist/cli/harness.d.ts +0 -3
- package/dist/cli/harness.d.ts.map +0 -1
- package/dist/cli/harness.js +0 -214
- package/dist/cli/harness.js.map +0 -1
- package/dist/cli/skills.d.ts +0 -3
- package/dist/cli/skills.d.ts.map +0 -1
- package/dist/cli/skills.js +0 -128
- package/dist/cli/skills.js.map +0 -1
- package/dist/cloudflare.d.ts +0 -2
- package/dist/cloudflare.d.ts.map +0 -1
- package/dist/cloudflare.js +0 -2
- package/dist/cloudflare.js.map +0 -1
- package/dist/codegen/emitMantleModule.d.ts +0 -22
- package/dist/codegen/emitMantleModule.d.ts.map +0 -1
- package/dist/codegen/emitMantleModule.js +0 -291
- package/dist/codegen/emitMantleModule.js.map +0 -1
- package/dist/codegen.d.ts +0 -2
- package/dist/codegen.d.ts.map +0 -1
- package/dist/codegen.js +0 -2
- package/dist/codegen.js.map +0 -1
- package/dist/runtime-testing.d.ts +0 -2
- package/dist/runtime-testing.d.ts.map +0 -1
- package/dist/runtime-testing.js +0 -2
- package/dist/runtime-testing.js.map +0 -1
- package/dist/runtime.d.ts +0 -2
- package/dist/runtime.d.ts.map +0 -1
- package/dist/runtime.js +0 -2
- package/dist/runtime.js.map +0 -1
- package/dist/spec.d.ts +0 -2
- package/dist/spec.d.ts.map +0 -1
- package/dist/spec.js +0 -2
- package/dist/spec.js.map +0 -1
- package/dist/vercel-libsql.d.ts +0 -2
- package/dist/vercel-libsql.d.ts.map +0 -1
- package/dist/vercel-libsql.js +0 -2
- package/dist/vercel-libsql.js.map +0 -1
- package/dist/vercel.d.ts +0 -2
- package/dist/vercel.d.ts.map +0 -1
- package/dist/vercel.js +0 -2
- package/dist/vercel.js.map +0 -1
- package/dist/web.d.ts +0 -2
- package/dist/web.d.ts.map +0 -1
- package/dist/web.js +0 -2
- package/dist/web.js.map +0 -1
- package/docs/adapter-guide.md +0 -222
- package/docs/agent-prompts.md +0 -64
- package/docs/api-mcp-authorization.md +0 -5
- package/docs/assets/mantle-admin-developer.png +0 -0
- package/docs/assets/mantle-admin-operations.png +0 -0
- package/docs/assets/mantle-hero.jpg +0 -0
- package/docs/auth-hosting-model.md +0 -166
- package/docs/cloudflare-low-level-composition.md +0 -5
- package/docs/consumer-onboarding-audit.md +0 -65
- package/docs/deferred-lifecycle-queues.md +0 -5
- package/docs/design-atoms.md +0 -16
- package/docs/design-references/editorial-blog-2026-05-05.md +0 -218
- package/docs/direct-authoring.md +0 -5
- package/docs/examples/builtin-commerce.md +0 -269
- package/docs/examples/builtin-intake.md +0 -143
- package/docs/examples/builtin-legal-documents.md +0 -189
- package/docs/examples/builtin-procurement.md +0 -241
- package/docs/examples/builtin-publication.md +0 -241
- package/docs/examples/builtin-reservation.md +0 -149
- package/docs/examples/cf-primitives-commerce-inventory.md +0 -809
- package/docs/examples/cf-primitives-guarded-api.md +0 -429
- package/docs/examples/cf-primitives-intake-hooks.md +0 -319
- package/docs/examples/host-chatgpt-sites/.openai/hosting.json +0 -1
- package/docs/examples/host-chatgpt-sites/README.md +0 -70
- package/docs/examples/host-chatgpt-sites/drizzle/0000_sites_users.sql +0 -8
- package/docs/examples/host-chatgpt-sites/drizzle/0001_mantle.sql +0 -294
- package/docs/examples/host-chatgpt-sites/drizzle/0002_article_cover.sql +0 -5
- package/docs/examples/host-chatgpt-sites/drizzle/0003_store_instance_id.sql +0 -1
- package/docs/examples/host-chatgpt-sites/drizzle/0004_mantle.sql +0 -10
- package/docs/examples/host-chatgpt-sites/drizzle/0005_mantle.sql +0 -24
- package/docs/examples/host-chatgpt-sites/drizzle/meta/_journal.json +0 -1
- package/docs/examples/host-chatgpt-sites/drizzle/meta/mantle-state.json +0 -60
- package/docs/examples/host-chatgpt-sites/manifests/site.yaml +0 -27
- package/docs/examples/host-chatgpt-sites/package.json +0 -1
- package/docs/examples/host-chatgpt-sites/public/site.css +0 -1
- package/docs/examples/host-chatgpt-sites/scripts/build.mjs +0 -13
- package/docs/examples/host-chatgpt-sites/scripts/check.mjs +0 -101
- package/docs/examples/host-chatgpt-sites/scripts/migration.mjs +0 -43
- package/docs/examples/host-chatgpt-sites/src/chatgpt-auth.ts +0 -66
- package/docs/examples/host-chatgpt-sites/src/index.ts +0 -46
- package/docs/examples/host-chatgpt-sites/src/mcp.ts +0 -49
- package/docs/examples/host-chatgpt-sites/src/media.ts +0 -109
- package/docs/examples/host-chatgpt-sites/src/r2-lab.ts +0 -38
- package/docs/examples/host-chatgpt-sites/src/storage-fingerprint.json +0 -1
- package/docs/examples/host-chatgpt-sites/src/web.ts +0 -35
- package/docs/examples/host-chatgpt-sites/tsconfig.json +0 -1
- package/docs/examples/host-chatgpt-sites/wrangler.jsonc +0 -10
- package/docs/examples/host-local-admin-otp/.dev.vars.example +0 -3
- package/docs/examples/host-local-admin-otp/README.md +0 -80
- package/docs/examples/host-local-admin-otp/ensure-dev-vars.mjs +0 -5
- package/docs/examples/host-local-admin-otp/manifests/site.yaml +0 -25
- package/docs/examples/host-local-admin-otp/package.json +0 -29
- package/docs/examples/host-local-admin-otp/public/.gitkeep +0 -1
- package/docs/examples/host-local-admin-otp/smoke.mjs +0 -141
- package/docs/examples/host-local-admin-otp/src/index.ts +0 -54
- package/docs/examples/host-local-admin-otp/tsconfig.json +0 -17
- package/docs/examples/host-local-admin-otp/wrangler.jsonc +0 -23
- package/docs/examples/host-minimal-worker/README.md +0 -41
- package/docs/examples/host-minimal-worker/manifests/site.yaml +0 -25
- package/docs/examples/host-minimal-worker/package.json +0 -26
- package/docs/examples/host-minimal-worker/smoke.mjs +0 -23
- package/docs/examples/host-minimal-worker/src/index.ts +0 -4
- package/docs/examples/host-minimal-worker/wrangler.jsonc +0 -22
- package/docs/handbook/chatgpt-sites/equipment-checkout.md +0 -231
- package/docs/handbook/chatgpt-sites/generated-app.md +0 -84
- package/docs/handbook/chatgpt-sites/host-reference.md +0 -113
- package/docs/handbook/chatgpt-sites/index.md +0 -133
- package/docs/handbook/cloudflare/bindings.md +0 -291
- package/docs/handbook/cloudflare/conventional-worker.md +0 -166
- package/docs/handbook/cloudflare/deferred-hooks-queues.md +0 -170
- package/docs/handbook/cloudflare/low-level-composition.md +0 -169
- package/docs/handbook/cloudflare/public-web.md +0 -144
- package/docs/handbook/cloudflare/site-chrome.md +0 -75
- package/docs/handbook/examples/commerce-transaction.md +0 -11
- package/docs/handbook/examples/commerce.md +0 -11
- package/docs/handbook/examples/guarded-api.md +0 -10
- package/docs/handbook/examples/intake-form.md +0 -12
- package/docs/handbook/examples/intake-hooks.md +0 -11
- package/docs/handbook/examples/legal-documents.md +0 -10
- package/docs/handbook/examples/procurement-approvals.md +0 -10
- package/docs/handbook/examples/publication.md +0 -10
- package/docs/handbook/examples/reservation.md +0 -10
- package/docs/handbook/start/quickstart-admin.md +0 -52
- package/docs/labels.md +0 -71
- package/docs/media-uploads.md +0 -5
- package/docs/migration-0.1.2.md +0 -13
- package/docs/performance-harness.md +0 -228
- package/docs/release-process.md +0 -244
- package/docs/schema-indexes.md +0 -5
- package/docs/sealed-pipeline-ownership.md +0 -101
- package/docs/skills/plugin/SKILL.md +0 -132
- package/docs/skills/theme/SKILL.md +0 -77
- package/docs/spec-only-host-adoption.md +0 -157
- package/docs/transaction-patterns.md +0 -5
- package/skills/README.md +0 -127
- package/skills/develop/SKILL.md +0 -258
- package/skills/install/SKILL.md +0 -112
- package/skills/integrate/SKILL.md +0 -60
- package/skills/media-gc/SKILL.md +0 -85
- package/skills/plugin/SKILL.md +0 -132
- package/skills/provision/SKILL.md +0 -194
- package/skills/theme/SKILL.md +0 -77
- package/skills/update/SKILL.md +0 -51
- package/templates/chatgpt-sites/auth.ts +0 -66
- package/templates/chatgpt-sites/build.mjs +0 -14
- package/templates/chatgpt-sites/env.ts +0 -1
- package/templates/chatgpt-sites/mcp.ts +0 -48
- package/templates/chatgpt-sites/public-mcp.ts +0 -29
- package/templates/chatgpt-sites/smoke-local.mjs +0 -20
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Accept public reservation requests and expose the queue to staff. One SQL INSERT, no handler code.
|
|
3
|
+
---
|
|
4
|
+
# Reservation requests
|
|
5
|
+
|
|
6
|
+
[Examples hub](./README.md)
|
|
7
|
+
|
|
8
|
+
Visitors ask for a reservation and staff confirm by hand. The manifests are
|
|
9
|
+
fully declarative: the one Procedure is a SQL `INSERT`. Use this for
|
|
10
|
+
appointments, bookings or table requests where a person decides.
|
|
11
|
+
|
|
12
|
+
## Problem
|
|
13
|
+
|
|
14
|
+
A visitor gives a name, an email address, the requested slot, an optional party
|
|
15
|
+
size and a note. Staff see the newest requests first through Admin's API or the
|
|
16
|
+
staff MCP surface, and follow up outside the system. Requests are records, so
|
|
17
|
+
the Schema is `operational`. The system does not decide whether a slot is free.
|
|
18
|
+
|
|
19
|
+
## Manifest
|
|
20
|
+
|
|
21
|
+
```yaml
|
|
22
|
+
apiVersion: cms.mantle.aotter.net/v2
|
|
23
|
+
kind: Schema
|
|
24
|
+
metadata: { name: reservations }
|
|
25
|
+
spec:
|
|
26
|
+
title: Reservations
|
|
27
|
+
lifecycle: operational
|
|
28
|
+
checks: ["partySize IS NULL OR partySize BETWEEN 1 AND 20"]
|
|
29
|
+
schema:
|
|
30
|
+
type: object
|
|
31
|
+
additionalProperties: false
|
|
32
|
+
required: [name, email, requestedFor]
|
|
33
|
+
properties:
|
|
34
|
+
name: { type: string, minLength: 1, maxLength: 120 }
|
|
35
|
+
email: { type: string, format: email }
|
|
36
|
+
requestedFor: { type: string, description: Requested date, time or slot. }
|
|
37
|
+
partySize: { type: integer, minimum: 1 }
|
|
38
|
+
note: { type: string, maxLength: 1000 }
|
|
39
|
+
---
|
|
40
|
+
apiVersion: cms.mantle.aotter.net/v2
|
|
41
|
+
kind: View
|
|
42
|
+
metadata: { name: reservation-queue }
|
|
43
|
+
spec:
|
|
44
|
+
title: Reservation queue
|
|
45
|
+
surface: staff
|
|
46
|
+
requires: { auth: { all: [{ ctx.staff: [owner, editor, contributor] }] } }
|
|
47
|
+
sql: |
|
|
48
|
+
SELECT id, name, email, requestedFor, partySize, note, created_at
|
|
49
|
+
FROM reservations
|
|
50
|
+
ORDER BY created_at DESC LIMIT 50
|
|
51
|
+
---
|
|
52
|
+
apiVersion: cms.mantle.aotter.net/v2
|
|
53
|
+
kind: Procedure
|
|
54
|
+
metadata: { name: submit-reservation }
|
|
55
|
+
spec:
|
|
56
|
+
title: Submit reservation
|
|
57
|
+
description: Ask for a reservation; staff confirm it by hand.
|
|
58
|
+
input:
|
|
59
|
+
type: object
|
|
60
|
+
additionalProperties: false
|
|
61
|
+
required: [name, email, requestedFor]
|
|
62
|
+
properties:
|
|
63
|
+
name: { type: string, minLength: 1, maxLength: 120 }
|
|
64
|
+
email: { type: string, format: email }
|
|
65
|
+
requestedFor: { type: string }
|
|
66
|
+
partySize: { type: integer, minimum: 1 }
|
|
67
|
+
note: { type: string, maxLength: 1000 }
|
|
68
|
+
output: { type: object }
|
|
69
|
+
handler:
|
|
70
|
+
sql: |
|
|
71
|
+
INSERT INTO reservations (name, email, requestedFor, partySize, note)
|
|
72
|
+
VALUES (input.name, input.email, input.requestedFor, input.partySize, input.note)
|
|
73
|
+
RETURNING id
|
|
74
|
+
---
|
|
75
|
+
apiVersion: cms.mantle.aotter.net/v2
|
|
76
|
+
kind: Trigger
|
|
77
|
+
metadata: { name: submit-reservation-http }
|
|
78
|
+
spec:
|
|
79
|
+
source: { kind: http, method: POST, path: /api/reservations }
|
|
80
|
+
target: { procedure: submit-reservation }
|
|
81
|
+
---
|
|
82
|
+
apiVersion: cms.mantle.aotter.net/v2
|
|
83
|
+
kind: Trigger
|
|
84
|
+
metadata: { name: submit-reservation-mcp }
|
|
85
|
+
spec:
|
|
86
|
+
source: { kind: mcp, surface: public }
|
|
87
|
+
target: { procedure: submit-reservation }
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
- `requestedFor` is a free string on purpose: the example imposes no calendar
|
|
91
|
+
model. The queue orders by the native `created_at`, so the newest request is
|
|
92
|
+
first whatever slot it asks for.
|
|
93
|
+
- An optional input that the caller leaves out binds as `NULL`.
|
|
94
|
+
- `checks` are boolean SQL over the row's own columns, enforced on every insert
|
|
95
|
+
and update, Admin's included. The input schema already refuses `partySize: 0`;
|
|
96
|
+
the check also caps the party for writes that do not come through this
|
|
97
|
+
Procedure.
|
|
98
|
+
|
|
99
|
+
## Handlers
|
|
100
|
+
|
|
101
|
+
None.
|
|
102
|
+
|
|
103
|
+
## Try it
|
|
104
|
+
|
|
105
|
+
```sh
|
|
106
|
+
curl -sS -X POST http://127.0.0.1:8787/api/reservations \
|
|
107
|
+
-H 'content-type: application/json' \
|
|
108
|
+
-d '{"name":"Ada","email":"ada@example.test","requestedFor":"2026-10-03T19:00:00+08:00","partySize":4}'
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
The answer is `{ "results": [[{ "id": "…" }]] }`. A `partySize` of `0` is
|
|
112
|
+
HTTP 400 `INPUT_VALIDATION_FAILED`; `25` fails the check, also with a 400.
|
|
113
|
+
|
|
114
|
+
Staff list the queue at `GET /admin/api/views/reservation-queue?limit=50` with
|
|
115
|
+
a staff session. `GET /admin/api/views/reservation-queue/export` returns the
|
|
116
|
+
rows as CSV.
|
|
117
|
+
|
|
118
|
+
| MCP surface | Tool | From |
|
|
119
|
+
|---|---|---|
|
|
120
|
+
| `/mcp` | `submit_reservation` | the `submit-reservation-mcp` Trigger |
|
|
121
|
+
| `/mcp/staff` | `reservation_queue` | the staff View |
|
|
122
|
+
|
|
123
|
+
## What this leaves out
|
|
124
|
+
|
|
125
|
+
A successful `POST` records the request, nothing more.
|
|
126
|
+
|
|
127
|
+
- **Slot inventory and double booking.** Two requests for one time both
|
|
128
|
+
succeed. With a `slots` Schema, a capacity column and `checks: ["booked <=
|
|
129
|
+
capacity"]`, a two-statement Procedure (insert the reservation, then
|
|
130
|
+
`UPDATE slots SET booked = booked + 1 WHERE id = input.slotId`) refuses the
|
|
131
|
+
overbooking atomically, as [Commerce inventory](./commerce-inventory.md) does
|
|
132
|
+
for stock.
|
|
133
|
+
- **Past dates.** Reject them in a `requires.guard` handler, as
|
|
134
|
+
[Intake with bot check and notification](./intake-hooks.md) does for its
|
|
135
|
+
token.
|
|
136
|
+
- **Calendar sync, payments and confirmation emails.** An `after_create` hook
|
|
137
|
+
as in the intake example.
|
|
138
|
+
|
|
139
|
+
## Source
|
|
140
|
+
|
|
141
|
+
- [Procedure reference](../handbook/reference/procedure.md)
|
|
142
|
+
- [Schema reference](../handbook/reference/schema.md): `checks`
|
|
@@ -1,355 +1,163 @@
|
|
|
1
1
|
---
|
|
2
|
-
description:
|
|
2
|
+
description: Sign-in for a Mantle 0.2.0 service — the three identity choices, createMantleAuth with email OTP, social and OAuth methods, the first owner, roles, production senders, and a custom CallerResolver.
|
|
3
3
|
---
|
|
4
4
|
# Authentication
|
|
5
5
|
|
|
6
|
-
|
|
6
|
+
Mantle never owns your users. Choose once, in `mantle.config.json`:
|
|
7
7
|
|
|
8
|
-
|
|
8
|
+
| `identity` | Callers come from | Auth tables |
|
|
9
|
+
|---|---|---|
|
|
10
|
+
| `mantle` | `@aotter/mantle/auth`: Better Auth sign-in, staff roles, an OAuth server for MCP | Better Auth's, migrated by Better Auth |
|
|
11
|
+
| `custom` | your `src/identity.ts`, a `CallerResolver` over your own sessions or tokens | none |
|
|
12
|
+
| `none` | nobody: every caller is anonymous | none |
|
|
9
13
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
random `BETTER_AUTH_SECRET`, and the exact loopback `PUBLIC_ORIGIN`. It configures
|
|
13
|
-
its email-OTP auth factory only for a
|
|
14
|
-
loopback origin. If you author the Worker yourself, pass `auth` to
|
|
15
|
-
`createMantleWorker` with `email-otp`, `ConsoleEmailSender`, and
|
|
16
|
-
`bootstrapOwner.match: "email"`; that factory does not read the conventional
|
|
17
|
-
mode matrix. The one-time code is printed in wrangler logs. See
|
|
18
|
-
[Quickstart: local Admin](../start/quickstart-admin.md). `ConsoleEmailSender`
|
|
19
|
-
is for `wrangler dev` only; production needs a real sender. Match
|
|
20
|
-
`PUBLIC_ORIGIN` to wrangler's actual `127.0.0.1:8787` origin or Better Auth
|
|
21
|
-
will reject OTP with `INVALID_ORIGIN`.
|
|
14
|
+
A rerun of `mantle generate` cannot switch identity. Admin needs `mantle` or
|
|
15
|
+
`custom`.
|
|
22
16
|
|
|
23
|
-
|
|
24
|
-
loopback. Configure the conventional `self-managed` or `hosted` Auth mode,
|
|
25
|
-
including its required provider credentials and `ADMIN_GITHUB_LOGIN`, instead
|
|
26
|
-
of editing the CLI-owned Worker. An application that needs production email
|
|
27
|
-
delivery should author its own Worker Auth factory and real `EmailSender`.
|
|
17
|
+
## Identity `mantle`
|
|
28
18
|
|
|
29
|
-
|
|
19
|
+
The generated `src/service.ts` builds the auth from `env`:
|
|
30
20
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
| Mode | Non-secret vars | Worker secrets | Must be absent |
|
|
41
|
-
|---|---|---|---|
|
|
42
|
-
| `self-managed` | `MANTLE_AUTH_MODE=self-managed`, `PUBLIC_ORIGIN`, `GITHUB_CLIENT_ID`, `ADMIN_GITHUB_LOGIN` | `GITHUB_CLIENT_SECRET`, `BETTER_AUTH_SECRET` | `MANTLE_HOSTED_AUTH_ISSUER`, `MANTLE_HOSTED_AUTH_CLIENT_ID` |
|
|
43
|
-
| `hosted` | `MANTLE_AUTH_MODE=hosted`, `PUBLIC_ORIGIN`, `MANTLE_HOSTED_AUTH_ISSUER`, `MANTLE_HOSTED_AUTH_CLIENT_ID`, `ADMIN_GITHUB_LOGIN` | `BETTER_AUTH_SECRET` | `GITHUB_CLIENT_ID`, `GITHUB_CLIENT_SECRET` |
|
|
44
|
-
|
|
45
|
-
Validation rules:
|
|
46
|
-
|
|
47
|
-
- `PUBLIC_ORIGIN` is the site's HTTPS origin without a trailing slash. When unset, the adapter falls back to `http://localhost:8787`. That fallback string is not the preferred local Admin pin. The origin wrangler prints is authoritative; the Admin OTP reference binds `127.0.0.1:8787` and sets `PUBLIC_ORIGIN` to the same origin.
|
|
48
|
-
- Self-managed uses the site's own GitHub OAuth app. Register its callback URL as `<PUBLIC_ORIGIN>/api/auth/callback/github`.
|
|
49
|
-
- Hosted is a public PKCE client with no client secret. `MANTLE_HOSTED_AUTH_ISSUER` must be an HTTPS root origin (no path, query or fragment; `http` only for loopback). `MANTLE_HOSTED_AUTH_CLIENT_ID` must be a URL on that same origin shaped `/clients/<id>`.
|
|
50
|
-
- `ADMIN_GITHUB_LOGIN` must be a valid GitHub login.
|
|
51
|
-
|
|
52
|
-
Any missing, invalid, partial or mixed-mode configuration produces a setup-incomplete Auth instance instead of a working one.
|
|
53
|
-
|
|
54
|
-
## `503 setup_incomplete`
|
|
55
|
-
|
|
56
|
-
With incomplete Auth, public routes keep working: public Views, public HTTP Triggers, public pages, `.md` mirrors, `llms.txt` and the sitemap. Auth-owned private routes return:
|
|
57
|
-
|
|
58
|
-
```json
|
|
59
|
-
{ "error": "setup_incomplete", "message": "Self-managed Auth configuration errors: BETTER_AUTH_SECRET is not set; ..." }
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
with status `503` and `private, no-store`. The affected paths are `/admin` and `/admin/*`, `/api/auth` and `/api/auth/*`, `/oauth` and `/oauth/*`, `/.well-known/oauth*`, `/mcp` and `/mcp/*`. The message lists every failing check.
|
|
63
|
-
|
|
64
|
-
## Secrets and local values
|
|
65
|
-
|
|
66
|
-
```sh
|
|
67
|
-
wrangler secret put BETTER_AUTH_SECRET
|
|
68
|
-
wrangler secret put GITHUB_CLIENT_SECRET # self-managed only
|
|
21
|
+
```ts
|
|
22
|
+
createMantleAuth({
|
|
23
|
+
database: env.DB, driver: d1Driver(env.DB), baseURL: origin, secret: env.BETTER_AUTH_SECRET,
|
|
24
|
+
methods: [{ kind: "email-otp", sender: new ConsoleEmailSender() }],
|
|
25
|
+
bootstrapOwner: { match: "email", value: env.ADMIN_EMAIL },
|
|
26
|
+
ipAddressHeaders: ["cf-connecting-ip"],
|
|
27
|
+
oauthProvider: { loginPage: "/admin/sign-in", consentPage: "/admin/oauth/consent", scopes: ["mcp"], mcpResource: `${origin}/mcp` },
|
|
28
|
+
});
|
|
69
29
|
```
|
|
70
30
|
|
|
71
|
-
|
|
31
|
+
`consentPage` is Admin's consent page when the service mounts Admin (the
|
|
32
|
+
preset does); without Admin it is `/oauth/consent`, the plain page
|
|
33
|
+
`createAuthRoutes` serves. Both post the decision to `/oauth/consent`.
|
|
72
34
|
|
|
73
|
-
|
|
35
|
+
then `createCallerResolver(auth, { jwtBearer: { audience: `${origin}/mcp`, scopes: ["mcp"] } })`,
|
|
36
|
+
`createAuthRoutes(auth, { resolver })` and an `AdminIdentity` over the auth's
|
|
37
|
+
own methods. With dialect `postgres` the preset passes `database:
|
|
38
|
+
pgPool(connect), driver: pgDatabaseDriver(connect)` over Hyperdrive; host `bun`
|
|
39
|
+
passes `bunAuthDatabase(sql)` and `bunDatabaseDriver(sql)` (or the bun:sqlite
|
|
40
|
+
`Database` and `bunSqliteDriver(db)`), with `ipAddressHeaders:
|
|
41
|
+
["x-mantle-client-ip"]`, which its entry sets from the socket.
|
|
74
42
|
|
|
75
|
-
|
|
43
|
+
### Local sign-in
|
|
76
44
|
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
| `GET /admin/api/staff`, `PATCH /admin/api/staff/:id/role` (a role or `null` to revoke) | `owner` |
|
|
84
|
-
| `POST /admin/api/staff/invitations`, `DELETE /admin/api/staff/invitations/:id` | `owner` |
|
|
85
|
-
| `GET /admin/api/site-settings`, `PATCH /admin/api/site-settings` | `owner` |
|
|
86
|
-
| `GET /admin/api/members` | `editor` |
|
|
87
|
-
| `POST /admin/api/entries/:id/publish`, `POST /admin/api/entries/:id/unpublish`, `DELETE /admin/api/entries/:id` | `editor` |
|
|
88
|
-
|
|
89
|
-
The staff role is re-read from D1 on every protected REST and MCP call; a revoked role takes effect on the next request. Manifest-level rules such as `requires.auth` are covered in [Authorization](../concepts/authorization.md) and the [authorization reference](../reference/authorization.md).
|
|
90
|
-
|
|
91
|
-
## What needs a session
|
|
92
|
-
|
|
93
|
-
| Surface | Requirement |
|
|
94
|
-
|---|---|
|
|
95
|
-
| `/admin`, `/admin/api/*` | Staff session; role gates per route |
|
|
96
|
-
| `/api/auth/*`, `/oauth/*`, `/.well-known/oauth*` | Auth-owned; public endpoints of the OAuth flow |
|
|
97
|
-
| `/mcp` | Same caller resolution as HTTP routes (bearer, same-origin cookie session, or anonymous); each tool's `requires` gates the call, and a call that needs identity answers `401` with a `WWW-Authenticate` challenge |
|
|
98
|
-
| `/mcp/staff` | Authenticated caller with a staff role |
|
|
99
|
-
| `/<locale>/<segment>/<slug>?preview=1` | Staff session (`401` without a session, `403` without a staff role) |
|
|
100
|
-
| Public Views, public HTTP Triggers, public pages, `.md`, `llms.txt`, sitemap | None, unless the manifest declares `requires` |
|
|
101
|
-
|
|
102
|
-
MCP tokens are session-bound: signing out of Admin ends MCP access. See [MCP and agents](../concepts/mcp-and-agents.md).
|
|
103
|
-
|
|
104
|
-
## Session cache and database replacement
|
|
105
|
-
|
|
106
|
-
When optional session caching is enabled, the cache is derived from the
|
|
107
|
-
canonical store, not a second identity authority. Auth prefixes keys with
|
|
108
|
-
`better-auth:<store-instance-id>:`. Preparing a new store gives it a distinct
|
|
109
|
-
identity, so reusing the same KV namespace after replacing D1 cannot resurrect
|
|
110
|
-
the previous store's cached sessions. Ordinary preparation of the same store
|
|
111
|
-
preserves its identity.
|
|
112
|
-
|
|
113
|
-
Custom low-level Auth composition must prepare the Mantle store before cached
|
|
114
|
-
Auth operations; do not construct cache keys or seed the identity yourself.
|
|
115
|
-
OTP verification remains in the primary database and rate limiting remains
|
|
116
|
-
isolate-local. Revocation/user-update cache invalidation still follows KV
|
|
117
|
-
propagation; the namespace change is isolation across stores, not a promise of
|
|
118
|
-
instant global invalidation. See the [Auth decision](../../adr/0014-auth-better-auth-and-multi-tenant-mcp.md).
|
|
119
|
-
|
|
120
|
-
## Better Auth configuration
|
|
121
|
-
|
|
122
|
-
`createAuth()` owns the Worker lifecycle, Admin metadata, sender integration,
|
|
123
|
-
bootstrap rules, roles and MCP invariants. Method-specific configuration stays
|
|
124
|
-
native to Better Auth under `options`, so provider updates and type inference do
|
|
125
|
-
not need a matching Mantle DSL update. There is deliberately no
|
|
126
|
-
`Partial<BetterAuthOptions>` deep merge.
|
|
127
|
-
|
|
128
|
-
```ts
|
|
129
|
-
methods: [
|
|
130
|
-
{
|
|
131
|
-
kind: "social",
|
|
132
|
-
provider: "google",
|
|
133
|
-
options: { clientId: env.GOOGLE_CLIENT_ID, clientSecret: env.GOOGLE_CLIENT_SECRET, accessType: "offline" },
|
|
134
|
-
},
|
|
135
|
-
{
|
|
136
|
-
kind: "social",
|
|
137
|
-
provider: "apple",
|
|
138
|
-
options: async () => ({ clientId: env.APPLE_CLIENT_ID, clientSecret: await loadAppleSecret(env) }),
|
|
139
|
-
},
|
|
140
|
-
{
|
|
141
|
-
kind: "email-otp",
|
|
142
|
-
sender,
|
|
143
|
-
options: { otpLength: 8 },
|
|
144
|
-
},
|
|
145
|
-
]
|
|
45
|
+
```sh
|
|
46
|
+
cp .dev.vars.example .dev.vars # ADMIN_EMAIL, a random BETTER_AUTH_SECRET, PUBLIC_ORIGIN=http://127.0.0.1:8787
|
|
47
|
+
pnpm exec wrangler dev --local
|
|
48
|
+
curl -X POST http://127.0.0.1:8787/api/auth/email-otp/send-verification-otp \
|
|
49
|
+
-H 'content-type: application/json' -H 'origin: http://127.0.0.1:8787' \
|
|
50
|
+
-d '{"email":"you@example.com","type":"sign-in"}'
|
|
146
51
|
```
|
|
147
52
|
|
|
148
|
-
|
|
149
|
-
`
|
|
150
|
-
|
|
151
|
-
|
|
53
|
+
`ConsoleEmailSender` prints the code to the wrangler log; post it to
|
|
54
|
+
`/api/auth/sign-in/email-otp` with `{ email, otp }` to get a session cookie.
|
|
55
|
+
The preset prints codes only when `PUBLIC_ORIGIN` is set to a loopback `http:`
|
|
56
|
+
origin and both secrets exist. Otherwise it uses
|
|
57
|
+
`createSetupIncompleteAuth`, which refuses sign-in with a message, so a
|
|
58
|
+
deployed service never prints codes to its log.
|
|
152
59
|
|
|
153
|
-
|
|
154
|
-
{ kind: "email-otp", sender, options: {
|
|
155
|
-
storeOTP: { encrypt: encryptOtp, decrypt: decryptOtp },
|
|
156
|
-
} }
|
|
157
|
-
{ kind: "magic-link", sender, options: {
|
|
158
|
-
storeToken: { type: "custom-hasher", hash: hashMagicToken },
|
|
159
|
-
} }
|
|
160
|
-
```
|
|
60
|
+
### MCP clients for members
|
|
161
61
|
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
62
|
+
`/admin/sign-in` suits staff. When members connect an MCP client to the public
|
|
63
|
+
`/mcp`, set `loginPage` to the service's own sign-in page. That page must
|
|
64
|
+
continue the authorization: Better Auth sends the browser there with the
|
|
65
|
+
request signed, and the sign-in carries it back as `oauth_query`, then follows
|
|
66
|
+
the `url` it answers (consent) instead of the page's own destination:
|
|
165
67
|
|
|
166
68
|
```ts
|
|
167
|
-
|
|
168
|
-
database: env.DB,
|
|
169
|
-
baseURL: env.PUBLIC_ORIGIN,
|
|
170
|
-
secret: env.BETTER_AUTH_SECRET,
|
|
171
|
-
methods: [],
|
|
172
|
-
plugins: [emailOTP({ sendVerificationOTP, storeOTP: "encrypted" })],
|
|
173
|
-
});
|
|
174
|
-
```
|
|
175
|
-
|
|
176
|
-
When several first-party apps share one parent domain that the same party controls, configure shared cookies explicitly. `cookiePrefix` is required whenever more than one Better Auth app writes cookies under that domain; `trustedOrigins` is the auth-flow trust list, not a CORS policy.
|
|
69
|
+
import { signedOAuthQuery } from "@aotter/mantle-ui/kit";
|
|
177
70
|
|
|
178
|
-
|
|
179
|
-
const
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
methods,
|
|
184
|
-
trustedOrigins: ["https://example.com", "https://www.example.com"],
|
|
185
|
-
cookiePrefix: "example-platform",
|
|
186
|
-
crossSubDomainCookies: { enabled: true, domain: "example.com" },
|
|
187
|
-
});
|
|
71
|
+
const oauthQuery = signedOAuthQuery(window.location.search);
|
|
72
|
+
const res = await fetch("/api/auth/sign-in/email-otp", { method: "POST", credentials: "include",
|
|
73
|
+
headers: { "content-type": "application/json" }, body: JSON.stringify({ email, otp, ...(oauthQuery ? { oauth_query: oauthQuery } : {}) }) });
|
|
74
|
+
const { url } = await res.json();
|
|
75
|
+
location.assign(url ?? "/account");
|
|
188
76
|
```
|
|
189
77
|
|
|
190
|
-
|
|
78
|
+
Dynamic client registration takes a client that names no `application_type`
|
|
79
|
+
and registers only `http` loopback redirects (`localhost`, `127.0.0.1`,
|
|
80
|
+
`[::1]`) as `native` (RFC 8252), which is how local MCP clients register; any
|
|
81
|
+
other registration is checked as Better Auth checks it (`web` needs `https` on a
|
|
82
|
+
non-loopback host).
|
|
191
83
|
|
|
192
|
-
###
|
|
84
|
+
### Production
|
|
193
85
|
|
|
194
|
-
|
|
195
|
-
or be refused — Better Auth decides this, and `createAuth()` does not override
|
|
196
|
-
it. Left unconfigured, Better Auth's own defaults apply: implicit linking is
|
|
197
|
-
on, so a social sign-in whose provider reports a verified email attaches to the
|
|
198
|
-
existing row carrying that email. It never creates a second row for the same
|
|
199
|
-
address; when linking is not permitted the sign-in fails with
|
|
200
|
-
`account not linked`.
|
|
86
|
+
Replace the local choices in `src/service.ts`:
|
|
201
87
|
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
Pass `accountLinking` to scope this. It is forwarded verbatim:
|
|
88
|
+
- **A real sender.** Implement `EmailSender` (`send({ to, subject, text, html?, locale, category? })`)
|
|
89
|
+
over your provider, and pass it to the email method. Drop the loopback check
|
|
90
|
+
once the sender is real.
|
|
91
|
+
- **Secrets.** `wrangler secret put BETTER_AUTH_SECRET` (32+ random bytes) and
|
|
92
|
+
`wrangler secret put ADMIN_EMAIL`; set `PUBLIC_ORIGIN` to the deployed origin
|
|
93
|
+
in `vars`.
|
|
94
|
+
- **Methods.** `methods` takes any mix:
|
|
211
95
|
|
|
212
96
|
```ts
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
// Accept these providers' word without an `email_verified` claim.
|
|
220
|
-
trustedProviders: ["google", "github"],
|
|
221
|
-
},
|
|
222
|
-
});
|
|
97
|
+
methods: [
|
|
98
|
+
{ kind: "email-otp", sender },
|
|
99
|
+
{ kind: "magic-link", sender },
|
|
100
|
+
{ kind: "social", provider: "google", options: { clientId: env.GOOGLE_CLIENT_ID, clientSecret: env.GOOGLE_CLIENT_SECRET } },
|
|
101
|
+
{ kind: "oauth", displayName: "Company SSO", options: { providerId: "sso", discoveryUrl: …, clientId: …, clientSecret: … } },
|
|
102
|
+
]
|
|
223
103
|
```
|
|
224
104
|
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
`disableImplicitLinking: true` (users may still link deliberately via
|
|
229
|
-
`linkSocial()` while signed in) or `enabled: false` to refuse linking outright.
|
|
105
|
+
`options` is Better Auth's own configuration for that method, passed through.
|
|
106
|
+
`appleClientSecret` builds Apple's signed client secret. `GET /api/auth/methods`
|
|
107
|
+
lists what the service offers, for your sign-in page.
|
|
230
108
|
|
|
231
|
-
|
|
109
|
+
Other options: `rateLimit`, `trustedOrigins`, `cookiePrefix`,
|
|
110
|
+
`crossSubDomainCookies` (first-party apps under one parent domain),
|
|
111
|
+
`accountLinking` (passed to Better Auth; by default a social sign-in links to
|
|
112
|
+
an existing row only when the provider verified the email and the local row is
|
|
113
|
+
verified), `staffInvitationSender`, `sessionCache`, and raw Better Auth
|
|
114
|
+
`plugins`.
|
|
232
115
|
|
|
233
|
-
|
|
116
|
+
### The first owner and roles
|
|
234
117
|
|
|
235
|
-
|
|
118
|
+
`bootstrapOwner: { match: "email", value }` (or `{ match: "github-login", value }`)
|
|
119
|
+
makes the first matching sign-in the `owner`. Staff roles are `owner`,
|
|
120
|
+
`editor` and `contributor`; a user without one is a member. Owners manage staff
|
|
121
|
+
through Admin's API (`/admin/api/staff`, `/staff/invitations`), which calls
|
|
122
|
+
Better Auth's admin API with the owner's own request. The resolver reads the
|
|
123
|
+
role on every request, so a revoked role takes effect at once.
|
|
236
124
|
|
|
237
|
-
|
|
238
|
-
createMantleWorker({
|
|
239
|
-
plan,
|
|
240
|
-
auth: (env) => createAuth({ /* curated, site-specific methods */ }),
|
|
241
|
-
});
|
|
242
|
-
```
|
|
125
|
+
### Account deletion
|
|
243
126
|
|
|
244
|
-
|
|
127
|
+
`auth.deleteUser(userId)` deletes a user through Better Auth, sessions
|
|
128
|
+
included, and the email codes still pending for its address. Never delete auth
|
|
129
|
+
rows with SQL. To require a recent sign-in first, compare
|
|
130
|
+
`(await auth.getSession(request)).session.createdAt` with the current time.
|
|
245
131
|
|
|
246
|
-
##
|
|
132
|
+
## Identity `custom`
|
|
247
133
|
|
|
248
|
-
|
|
249
|
-
|
|
134
|
+
`src/identity.ts` exports `resolveCaller: CallerResolver`. It throws until you
|
|
135
|
+
implement it, so a request fails loudly instead of running as anonymous.
|
|
250
136
|
|
|
251
137
|
```ts
|
|
252
|
-
const
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
tokenUrlParams: { resource: "https://api.example.com" },
|
|
263
|
-
refreshTokenParams: { resource: "https://api.example.com" },
|
|
264
|
-
},
|
|
265
|
-
}],
|
|
266
|
-
});
|
|
267
|
-
|
|
268
|
-
const { accessToken, accessTokenExpiresAt, scopes } =
|
|
269
|
-
await clientAuth.getProviderAccessToken(request, "mantle-platform");
|
|
270
|
-
```
|
|
271
|
-
|
|
272
|
-
The server-side getter is bound to the current local session request and never
|
|
273
|
-
returns a refresh token or account row. On the provider:
|
|
274
|
-
|
|
275
|
-
```ts
|
|
276
|
-
const providerAuth = createAuth({
|
|
277
|
-
// database, baseURL, secret, methods...
|
|
278
|
-
oauthProvider: {
|
|
279
|
-
loginPage: "/sign-in",
|
|
280
|
-
consentPage: "/consent",
|
|
281
|
-
scopes: ["openid", "offline_access", "accounts:read"],
|
|
282
|
-
resources: ["https://api.example.com"],
|
|
283
|
-
},
|
|
284
|
-
});
|
|
285
|
-
|
|
286
|
-
const verification = await providerAuth.verifyOAuthAccessToken(request, {
|
|
287
|
-
audience: "https://api.example.com",
|
|
288
|
-
scopes: ["accounts:read"],
|
|
289
|
-
});
|
|
138
|
+
export const resolveCaller: CallerResolver = async (request) => {
|
|
139
|
+
const token = request.headers.get("authorization")?.replace(/^Bearer /, "");
|
|
140
|
+
if (!token) return { caller: { kind: "anonymous" } }; // nothing presented
|
|
141
|
+
const user = await verifyMyToken(token); // your own auth
|
|
142
|
+
if (!user) return { invalid: true }; // presented and bad: 401, never anonymous
|
|
143
|
+
return { caller: {
|
|
144
|
+
kind: "user", subject: `myapp:${user.id}`, role: user.isAdmin ? "owner" : null,
|
|
145
|
+
scopes: user.scopes, credential: "oauth", credentialId: user.tokenId, clientId: null,
|
|
146
|
+
} };
|
|
147
|
+
};
|
|
290
148
|
```
|
|
291
149
|
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
MCP's [Enterprise-Managed Authorization](https://modelcontextprotocol.io/extensions/auth/enterprise-managed-authorization)
|
|
301
|
-
extension lets an enterprise IdP decide which employees may reach an MCP
|
|
302
|
-
server. The MCP client exchanges the user's IdP login for an ID-JAG (identity
|
|
303
|
-
assertion authorization grant) and presents it to the server's token endpoint
|
|
304
|
-
as `grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer`; no consent page
|
|
305
|
-
is shown. Everything after that is an ordinary access token.
|
|
150
|
+
- `subject` is stable and unique across every issuer you accept; namespace it
|
|
151
|
+
when there are several. Never use an email.
|
|
152
|
+
- Map your roles onto `owner`, `editor` and `contributor`, or leave `role`
|
|
153
|
+
`null` and authorize with scopes and guards.
|
|
154
|
+
- Admin gets no `identity` with `custom`, so it hides user management.
|
|
155
|
+
Implement `AdminIdentity` (`directory`, `roles`, `deleteUser`, each optional)
|
|
156
|
+
from `@aotter/mantle/admin` to show it.
|
|
306
157
|
|
|
307
|
-
|
|
308
|
-
`@better-auth/oauth-provider` extension supplied by the adopter through
|
|
309
|
-
`oauthProvider.extensions`, appended after Core's own claims extension:
|
|
158
|
+
[Mantle on ChatGPT Sites](./chatgpt-sites.md) is a worked `custom` identity.
|
|
310
159
|
|
|
311
|
-
|
|
312
|
-
import { identityAssertionAuthorizationGrant } from "@aotterclam/id-jag";
|
|
313
|
-
|
|
314
|
-
const auth = createAuth({
|
|
315
|
-
// database, baseURL, secret, methods...
|
|
316
|
-
oauthProvider: {
|
|
317
|
-
loginPage: "/admin/sign-in",
|
|
318
|
-
consentPage: "/oauth/consent",
|
|
319
|
-
scopes: ["mcp", "offline_access"],
|
|
320
|
-
mcpResource: env.PUBLIC_ORIGIN + "/mcp",
|
|
321
|
-
extensions: [
|
|
322
|
-
identityAssertionAuthorizationGrant({
|
|
323
|
-
issuer: env.ENTERPRISE_IDP_ISSUER,
|
|
324
|
-
jwksUrl: env.ENTERPRISE_IDP_JWKS_URL,
|
|
325
|
-
authorizationServer: env.PUBLIC_ORIGIN,
|
|
326
|
-
resource: env.PUBLIC_ORIGIN + "/mcp",
|
|
327
|
-
scopes: ["mcp"],
|
|
328
|
-
fetchJwks: (input, init) => fetch(input, { ...init, redirect: "manual" }),
|
|
329
|
-
}),
|
|
330
|
-
],
|
|
331
|
-
},
|
|
332
|
-
});
|
|
333
|
-
```
|
|
160
|
+
## Further reading
|
|
334
161
|
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
shared token path, so `verifyOAuthAccessToken`, DPoP and the MCP challenge
|
|
338
|
-
behave exactly as for interactive grants. `@aotterclam/id-jag` is a reference
|
|
339
|
-
implementation, not a Core dependency; any `OAuthProviderExtension` works.
|
|
340
|
-
Extensions may also add client-authentication strategies, discovery metadata
|
|
341
|
-
and additional claims. The same passthrough applies without `mcpResource`.
|
|
342
|
-
|
|
343
|
-
## Source
|
|
344
|
-
- [`packages/adapters/cloudflare/README.md`](../../../packages/adapters/cloudflare/README.md)
|
|
345
|
-
- [`packages/adapters/cloudflare/src/auth/conventionalAuth.ts`](../../../packages/adapters/cloudflare/src/auth/conventionalAuth.ts)
|
|
346
|
-
- [`packages/adapters/cloudflare/src/auth/createAuth.ts`](../../../packages/adapters/cloudflare/src/auth/createAuth.ts)
|
|
347
|
-
- [`packages/adapters/cloudflare/src/worker/createMantleWorker.ts`](../../../packages/adapters/cloudflare/src/worker/createMantleWorker.ts)
|
|
348
|
-
- [`packages/adapters/cloudflare/src/mount/mountPublicRoutes.ts`](../../../packages/adapters/cloudflare/src/mount/mountPublicRoutes.ts)
|
|
349
|
-
- [`packages/adapters/cloudflare/src/mount/mountMcp.ts`](../../../packages/adapters/cloudflare/src/mount/mountMcp.ts)
|
|
350
|
-
- [`packages/mantle-admin/src/mountMantleAdmin.ts`](../../../packages/mantle-admin/src/mountMantleAdmin.ts)
|
|
351
|
-
- [`docs/auth-hosting-model.md`](../../../docs/auth-hosting-model.md)
|
|
352
|
-
- [`docs/adapter-guide.md`](../../../docs/adapter-guide.md)
|
|
353
|
-
- [`docs/examples/host-local-admin-otp/src/index.ts`](../../../docs/examples/host-local-admin-otp/src/index.ts)
|
|
354
|
-
- [`docs/examples/host-local-admin-otp/.dev.vars.example`](../../../docs/examples/host-local-admin-otp/.dev.vars.example)
|
|
355
|
-
- [`docs/examples/host-minimal-worker/.gitignore`](../../../docs/examples/host-minimal-worker/.gitignore)
|
|
162
|
+
- [Authorization](../concepts/authorization.md)
|
|
163
|
+
- [MCP and agents](../concepts/mcp-and-agents.md): OAuth for MCP clients
|