@aotter/mantle 0.1.4 → 0.2.0-alpha.1
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 +589 -0
- package/dist/admin/createAdminSurface.js.map +1 -0
- package/dist/admin/developerConsole.d.ts +264 -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 +25 -0
- package/dist/admin/procedureFlow.d.ts.map +1 -0
- package/dist/admin/procedureFlow.js +154 -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 +128 -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 +483 -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 +332 -165
- 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 +352 -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/0021-retire-starter-scaffolding.md +1 -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/0026-progressive-generate.md +36 -0
- package/docs/adr/0027-scheduled-procedure-triggers.md +31 -0
- package/docs/adr/0028-schema-ttl-expiry.md +33 -0
- 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 +26 -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 +96 -299
- 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 -156
- 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 -32
- package/docs/handbook/reference/authorization.md +52 -271
- package/docs/handbook/reference/diagnostics.md +69 -173
- package/docs/handbook/reference/features.md +48 -50
- package/docs/handbook/reference/manifest.md +56 -116
- package/docs/handbook/reference/procedure.md +92 -229
- package/docs/handbook/reference/schema.md +156 -215
- package/docs/handbook/reference/site-config.md +58 -211
- package/docs/handbook/reference/surface.md +69 -181
- package/docs/handbook/reference/trigger.md +73 -162
- package/docs/handbook/reference/view.md +140 -241
- package/docs/handbook/releases/index.md +58 -22
- package/docs/handbook/start/overview.md +59 -48
- package/docs/handbook/start/project-and-cli.md +127 -116
- package/docs/handbook/start/quickstart-worker.md +102 -151
- package/docs/skills/develop/SKILL.md +114 -232
- package/docs/skills/develop/mcp-app.md +79 -0
- package/docs/skills/integrate/SKILL.md +96 -0
- 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 -105
- 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/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 -102
- 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/meta/_journal.json +0 -1
- 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 -9
- package/docs/examples/host-chatgpt-sites/src/chatgpt-auth.ts +0 -63
- 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/host-reference.md +0 -113
- package/docs/handbook/chatgpt-sites/index.md +0 -123
- package/docs/handbook/cloudflare/bindings.md +0 -298
- package/docs/handbook/cloudflare/conventional-worker.md +0 -162
- 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 -50
- 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 -125
- package/skills/develop/SKILL.md +0 -250
- package/skills/install/SKILL.md +0 -149
- 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
|
@@ -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,338 +1,135 @@
|
|
|
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
|
-
|
|
14
|
+
A rerun of `mantle generate` cannot switch identity. Admin needs `mantle` or
|
|
15
|
+
`custom`.
|
|
11
16
|
|
|
12
|
-
|
|
17
|
+
## Identity `mantle`
|
|
13
18
|
|
|
14
|
-
|
|
15
|
-
`ConsoleEmailSender` with the application's production `EmailSender`, and keep
|
|
16
|
-
`bootstrapOwner: { match: "email", value: <owner email> }`. Store the sender
|
|
17
|
-
credentials and `BETTER_AUTH_SECRET` as Worker secrets. If the application has
|
|
18
|
-
no transactional-email provider, use self-managed GitHub OAuth instead; never
|
|
19
|
-
deploy console delivery.
|
|
19
|
+
The generated `src/service.ts` builds the auth from `env`:
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
- `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.
|
|
31
|
-
- Self-managed uses the site's own GitHub OAuth app. Register its callback URL as `<PUBLIC_ORIGIN>/api/auth/callback/github`.
|
|
32
|
-
- 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>`.
|
|
33
|
-
- `ADMIN_GITHUB_LOGIN` must be a valid GitHub login.
|
|
34
|
-
|
|
35
|
-
Any missing, invalid, partial or mixed-mode configuration produces a setup-incomplete Auth instance instead of a working one.
|
|
36
|
-
|
|
37
|
-
## `503 setup_incomplete`
|
|
38
|
-
|
|
39
|
-
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:
|
|
40
|
-
|
|
41
|
-
```json
|
|
42
|
-
{ "error": "setup_incomplete", "message": "Self-managed Auth configuration errors: BETTER_AUTH_SECRET is not set; ..." }
|
|
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: "/oauth/consent", scopes: ["mcp"], mcpResource: `${origin}/mcp` },
|
|
28
|
+
});
|
|
43
29
|
```
|
|
44
30
|
|
|
45
|
-
|
|
31
|
+
then `createCallerResolver(auth, { jwtBearer: { audience: `${origin}/mcp`, scopes: ["mcp"] } })`,
|
|
32
|
+
`createAuthRoutes(auth, { resolver })` and an `AdminIdentity` over the auth's
|
|
33
|
+
own methods. With dialect `postgres` the preset passes `database:
|
|
34
|
+
pgPool(connect), driver: pgDatabaseDriver(connect)` over Hyperdrive; host `bun`
|
|
35
|
+
passes `bunAuthDatabase(sql)` and `bunDatabaseDriver(sql)` (or the bun:sqlite
|
|
36
|
+
`Database` and `bunSqliteDriver(db)`), with `ipAddressHeaders:
|
|
37
|
+
["x-mantle-client-ip"]`, which its entry sets from the socket.
|
|
46
38
|
|
|
47
|
-
|
|
39
|
+
### Local sign-in
|
|
48
40
|
|
|
49
41
|
```sh
|
|
50
|
-
|
|
51
|
-
|
|
42
|
+
cp .dev.vars.example .dev.vars # ADMIN_EMAIL, a random BETTER_AUTH_SECRET, PUBLIC_ORIGIN=http://127.0.0.1:8787
|
|
43
|
+
pnpm exec wrangler dev --local
|
|
44
|
+
curl -X POST http://127.0.0.1:8787/api/auth/email-otp/send-verification-otp \
|
|
45
|
+
-H 'content-type: application/json' -H 'origin: http://127.0.0.1:8787' \
|
|
46
|
+
-d '{"email":"you@example.com","type":"sign-in"}'
|
|
52
47
|
```
|
|
53
48
|
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
## Roles
|
|
61
|
-
|
|
62
|
-
Staff roles are `owner`, `editor` and `contributor`, in descending order. Owners manage them in Admin; the underlying routes are:
|
|
63
|
-
|
|
64
|
-
| Route | Minimum role |
|
|
65
|
-
|---|---|
|
|
66
|
-
| `GET /admin/api/staff`, `PATCH /admin/api/staff/:id/role` (a role or `null` to revoke) | `owner` |
|
|
67
|
-
| `POST /admin/api/staff/invitations`, `DELETE /admin/api/staff/invitations/:id` | `owner` |
|
|
68
|
-
| `GET /admin/api/site-settings`, `PATCH /admin/api/site-settings` | `owner` |
|
|
69
|
-
| `GET /admin/api/members` | `editor` |
|
|
70
|
-
| `POST /admin/api/entries/:id/publish`, `POST /admin/api/entries/:id/unpublish`, `DELETE /admin/api/entries/:id` | `editor` |
|
|
71
|
-
|
|
72
|
-
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).
|
|
73
|
-
|
|
74
|
-
## What needs a session
|
|
49
|
+
`ConsoleEmailSender` prints the code to the wrangler log; post it to
|
|
50
|
+
`/api/auth/sign-in/email-otp` with `{ email, otp }` to get a session cookie.
|
|
51
|
+
The preset prints codes only when `PUBLIC_ORIGIN` is set to a loopback `http:`
|
|
52
|
+
origin and both secrets exist. Otherwise it uses
|
|
53
|
+
`createSetupIncompleteAuth`, which refuses sign-in with a message, so a
|
|
54
|
+
deployed service never prints codes to its log.
|
|
75
55
|
|
|
76
|
-
|
|
77
|
-
|---|---|
|
|
78
|
-
| `/admin`, `/admin/api/*` | Staff session; role gates per route |
|
|
79
|
-
| `/api/auth/*`, `/oauth/*`, `/.well-known/oauth*` | Auth-owned; public endpoints of the OAuth flow |
|
|
80
|
-
| `/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 |
|
|
81
|
-
| `/mcp/staff` | Authenticated caller with a staff role |
|
|
82
|
-
| `/<locale>/<segment>/<slug>?preview=1` | Staff session (`401` without a session, `403` without a staff role) |
|
|
83
|
-
| Public Views, public HTTP Triggers, public pages, `.md`, `llms.txt`, sitemap | None, unless the manifest declares `requires` |
|
|
56
|
+
### Production
|
|
84
57
|
|
|
85
|
-
|
|
58
|
+
Replace the local choices in `src/service.ts`:
|
|
86
59
|
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
`
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
preserves its identity.
|
|
95
|
-
|
|
96
|
-
Custom low-level Auth composition must prepare the Mantle store before cached
|
|
97
|
-
Auth operations; do not construct cache keys or seed the identity yourself.
|
|
98
|
-
OTP verification remains in the primary database and rate limiting remains
|
|
99
|
-
isolate-local. Revocation/user-update cache invalidation still follows KV
|
|
100
|
-
propagation; the namespace change is isolation across stores, not a promise of
|
|
101
|
-
instant global invalidation. See the [Auth decision](../../adr/0014-auth-better-auth-and-multi-tenant-mcp.md).
|
|
102
|
-
|
|
103
|
-
## Better Auth configuration
|
|
104
|
-
|
|
105
|
-
`createAuth()` owns the Worker lifecycle, Admin metadata, sender integration,
|
|
106
|
-
bootstrap rules, roles and MCP invariants. Method-specific configuration stays
|
|
107
|
-
native to Better Auth under `options`, so provider updates and type inference do
|
|
108
|
-
not need a matching Mantle DSL update. There is deliberately no
|
|
109
|
-
`Partial<BetterAuthOptions>` deep merge.
|
|
60
|
+
- **A real sender.** Implement `EmailSender` (`send({ to, subject, text, html?, locale, category? })`)
|
|
61
|
+
over your provider, and pass it to the email method. Drop the loopback check
|
|
62
|
+
once the sender is real.
|
|
63
|
+
- **Secrets.** `wrangler secret put BETTER_AUTH_SECRET` (32+ random bytes) and
|
|
64
|
+
`wrangler secret put ADMIN_EMAIL`; set `PUBLIC_ORIGIN` to the deployed origin
|
|
65
|
+
in `vars`.
|
|
66
|
+
- **Methods.** `methods` takes any mix:
|
|
110
67
|
|
|
111
68
|
```ts
|
|
112
69
|
methods: [
|
|
113
|
-
{
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
},
|
|
118
|
-
{
|
|
119
|
-
kind: "social",
|
|
120
|
-
provider: "apple",
|
|
121
|
-
options: async () => ({ clientId: env.APPLE_CLIENT_ID, clientSecret: await loadAppleSecret(env) }),
|
|
122
|
-
},
|
|
123
|
-
{
|
|
124
|
-
kind: "email-otp",
|
|
125
|
-
sender,
|
|
126
|
-
options: { otpLength: 8 },
|
|
127
|
-
},
|
|
70
|
+
{ kind: "email-otp", sender },
|
|
71
|
+
{ kind: "magic-link", sender },
|
|
72
|
+
{ kind: "social", provider: "google", options: { clientId: env.GOOGLE_CLIENT_ID, clientSecret: env.GOOGLE_CLIENT_SECRET } },
|
|
73
|
+
{ kind: "oauth", displayName: "Company SSO", options: { providerId: "sso", discoveryUrl: …, clientId: …, clientSecret: … } },
|
|
128
74
|
]
|
|
129
75
|
```
|
|
130
76
|
|
|
131
|
-
|
|
132
|
-
`
|
|
133
|
-
|
|
134
|
-
hashing/encryption:
|
|
135
|
-
|
|
136
|
-
```ts
|
|
137
|
-
{ kind: "email-otp", sender, options: {
|
|
138
|
-
storeOTP: { encrypt: encryptOtp, decrypt: decryptOtp },
|
|
139
|
-
} }
|
|
140
|
-
{ kind: "magic-link", sender, options: {
|
|
141
|
-
storeToken: { type: "custom-hasher", hash: hashMagicToken },
|
|
142
|
-
} }
|
|
143
|
-
```
|
|
144
|
-
|
|
145
|
-
For complete callback ownership, register an official plugin instance directly.
|
|
146
|
-
Raw plugins do not add a button to `Auth.methods`; the application owns that UI.
|
|
147
|
-
Duplicate plugin ids fail at construction rather than silently replacing one:
|
|
148
|
-
|
|
149
|
-
```ts
|
|
150
|
-
createAuth({
|
|
151
|
-
database: env.DB,
|
|
152
|
-
baseURL: env.PUBLIC_ORIGIN,
|
|
153
|
-
secret: env.BETTER_AUTH_SECRET,
|
|
154
|
-
methods: [],
|
|
155
|
-
plugins: [emailOTP({ sendVerificationOTP, storeOTP: "encrypted" })],
|
|
156
|
-
});
|
|
157
|
-
```
|
|
158
|
-
|
|
159
|
-
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.
|
|
160
|
-
|
|
161
|
-
```ts
|
|
162
|
-
const auth = createAuth({
|
|
163
|
-
database: env.DB,
|
|
164
|
-
baseURL: "https://platform.example.com",
|
|
165
|
-
secret: env.BETTER_AUTH_SECRET,
|
|
166
|
-
methods,
|
|
167
|
-
trustedOrigins: ["https://example.com", "https://www.example.com"],
|
|
168
|
-
cookiePrefix: "example-platform",
|
|
169
|
-
crossSubDomainCookies: { enabled: true, domain: "example.com" },
|
|
170
|
-
});
|
|
171
|
-
```
|
|
172
|
-
|
|
173
|
-
Shared cookies do not cross registrable domains. A browser never sends an `example.com` cookie to `customer.com`. For a customer-owned domain, use an OAuth/OIDC broker flow: the customer site redirects to the identity provider's authorize endpoint, receives the callback, verifies the response and creates its own local session. The broker returns identity; the customer site remains the authority for its members and grants.
|
|
174
|
-
|
|
175
|
-
### Account linking across providers
|
|
77
|
+
`options` is Better Auth's own configuration for that method, passed through.
|
|
78
|
+
`appleClientSecret` builds Apple's signed client secret. `GET /api/auth/methods`
|
|
79
|
+
lists what the service offers, for your sign-in page.
|
|
176
80
|
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
`account not linked`.
|
|
81
|
+
Other options: `rateLimit`, `trustedOrigins`, `cookiePrefix`,
|
|
82
|
+
`crossSubDomainCookies` (first-party apps under one parent domain),
|
|
83
|
+
`accountLinking` (passed to Better Auth; by default a social sign-in links to
|
|
84
|
+
an existing row only when the provider verified the email and the local row is
|
|
85
|
+
verified), `staffInvitationSender`, `sessionCache`, and raw Better Auth
|
|
86
|
+
`plugins`.
|
|
184
87
|
|
|
185
|
-
|
|
186
|
-
is on, so linking is refused while the *local* row is still unverified — this is
|
|
187
|
-
what stops someone pre-registering an unverified row at your user's address and
|
|
188
|
-
having that user's Google identity attach to it. It is also why a staff invitation
|
|
189
|
-
(`inviteUser` writes `emailVerified: 0`) cannot be claimed by a social sign-in
|
|
190
|
-
until the invitee verifies by email once. Separately, `trustedProviders` is
|
|
191
|
-
empty, so every provider must supply `email_verified` to link at all.
|
|
88
|
+
### The first owner and roles
|
|
192
89
|
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
secret: env.BETTER_AUTH_SECRET,
|
|
200
|
-
methods,
|
|
201
|
-
accountLinking: {
|
|
202
|
-
// Accept these providers' word without an `email_verified` claim.
|
|
203
|
-
trustedProviders: ["google", "github"],
|
|
204
|
-
},
|
|
205
|
-
});
|
|
206
|
-
```
|
|
90
|
+
`bootstrapOwner: { match: "email", value }` (or `{ match: "github-login", value }`)
|
|
91
|
+
makes the first matching sign-in the `owner`. Staff roles are `owner`,
|
|
92
|
+
`editor` and `contributor`; a user without one is a member. Owners manage staff
|
|
93
|
+
through Admin's API (`/admin/api/staff`, `/staff/invitations`), which calls
|
|
94
|
+
Better Auth's admin API with the owner's own request. The resolver reads the
|
|
95
|
+
role on every request, so a revoked role takes effect at once.
|
|
207
96
|
|
|
208
|
-
|
|
209
|
-
it returns; a provider that does not turns the list into an account-takeover
|
|
210
|
-
path. To go the other way and keep every identity separate, set
|
|
211
|
-
`disableImplicitLinking: true` (users may still link deliberately via
|
|
212
|
-
`linkSocial()` while signed in) or `enabled: false` to refuse linking outright.
|
|
97
|
+
### Account deletion
|
|
213
98
|
|
|
214
|
-
|
|
99
|
+
`auth.deleteUser(userId)` deletes a user through Better Auth, sessions
|
|
100
|
+
included, and the email codes still pending for its address. Never delete auth
|
|
101
|
+
rows with SQL. To require a recent sign-in first, compare
|
|
102
|
+
`(await auth.getSession(request)).session.createdAt` with the current time.
|
|
215
103
|
|
|
216
|
-
|
|
104
|
+
## Identity `custom`
|
|
217
105
|
|
|
218
|
-
|
|
106
|
+
`src/identity.ts` exports `resolveCaller: CallerResolver`. It throws until you
|
|
107
|
+
implement it, so a request fails loudly instead of running as anonymous.
|
|
219
108
|
|
|
220
109
|
```ts
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
110
|
+
export const resolveCaller: CallerResolver = async (request) => {
|
|
111
|
+
const token = request.headers.get("authorization")?.replace(/^Bearer /, "");
|
|
112
|
+
if (!token) return { caller: { kind: "anonymous" } }; // nothing presented
|
|
113
|
+
const user = await verifyMyToken(token); // your own auth
|
|
114
|
+
if (!user) return { invalid: true }; // presented and bad: 401, never anonymous
|
|
115
|
+
return { caller: {
|
|
116
|
+
kind: "user", subject: `myapp:${user.id}`, role: user.isAdmin ? "owner" : null,
|
|
117
|
+
scopes: user.scopes, credential: "oauth", credentialId: user.tokenId, clientId: null,
|
|
118
|
+
} };
|
|
119
|
+
};
|
|
225
120
|
```
|
|
226
121
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
```ts
|
|
235
|
-
const clientAuth = createAuth({
|
|
236
|
-
// database, baseURL, secret, other methods...
|
|
237
|
-
methods: [{
|
|
238
|
-
kind: "oauth",
|
|
239
|
-
options: {
|
|
240
|
-
providerId: "mantle-platform",
|
|
241
|
-
clientId: env.PLATFORM_CLIENT_ID,
|
|
242
|
-
discoveryUrl: "https://platform.example.com/api/auth/.well-known/openid-configuration",
|
|
243
|
-
scopes: ["openid", "offline_access", "accounts:read"],
|
|
244
|
-
authorizationUrlParams: { resource: "https://api.example.com" },
|
|
245
|
-
tokenUrlParams: { resource: "https://api.example.com" },
|
|
246
|
-
refreshTokenParams: { resource: "https://api.example.com" },
|
|
247
|
-
},
|
|
248
|
-
}],
|
|
249
|
-
});
|
|
250
|
-
|
|
251
|
-
const { accessToken, accessTokenExpiresAt, scopes } =
|
|
252
|
-
await clientAuth.getProviderAccessToken(request, "mantle-platform");
|
|
253
|
-
```
|
|
122
|
+
- `subject` is stable and unique across every issuer you accept; namespace it
|
|
123
|
+
when there are several. Never use an email.
|
|
124
|
+
- Map your roles onto `owner`, `editor` and `contributor`, or leave `role`
|
|
125
|
+
`null` and authorize with scopes and guards.
|
|
126
|
+
- Admin gets no `identity` with `custom`, so it hides user management.
|
|
127
|
+
Implement `AdminIdentity` (`directory`, `roles`, `deleteUser`, each optional)
|
|
128
|
+
from `@aotter/mantle/admin` to show it.
|
|
254
129
|
|
|
255
|
-
|
|
256
|
-
returns a refresh token or account row. On the provider:
|
|
257
|
-
|
|
258
|
-
```ts
|
|
259
|
-
const providerAuth = createAuth({
|
|
260
|
-
// database, baseURL, secret, methods...
|
|
261
|
-
oauthProvider: {
|
|
262
|
-
loginPage: "/sign-in",
|
|
263
|
-
consentPage: "/consent",
|
|
264
|
-
scopes: ["openid", "offline_access", "accounts:read"],
|
|
265
|
-
resources: ["https://api.example.com"],
|
|
266
|
-
},
|
|
267
|
-
});
|
|
268
|
-
|
|
269
|
-
const verification = await providerAuth.verifyOAuthAccessToken(request, {
|
|
270
|
-
audience: "https://api.example.com",
|
|
271
|
-
scopes: ["accounts:read"],
|
|
272
|
-
});
|
|
273
|
-
```
|
|
274
|
-
|
|
275
|
-
The verifier accepts JWT access tokens only and checks the configured issuer,
|
|
276
|
-
JWKS/signature, audience, time claims, required scopes, and—when passed the
|
|
277
|
-
request—DPoP proof binding with database-backed replay protection. It returns
|
|
278
|
-
only `userId`, `clientId`, `credentialId`, and scopes. Opaque tokens are
|
|
279
|
-
rejected; there is no introspection fallback.
|
|
280
|
-
|
|
281
|
-
## Enterprise-Managed Authorization
|
|
282
|
-
|
|
283
|
-
MCP's [Enterprise-Managed Authorization](https://modelcontextprotocol.io/extensions/auth/enterprise-managed-authorization)
|
|
284
|
-
extension lets an enterprise IdP decide which employees may reach an MCP
|
|
285
|
-
server. The MCP client exchanges the user's IdP login for an ID-JAG (identity
|
|
286
|
-
assertion authorization grant) and presents it to the server's token endpoint
|
|
287
|
-
as `grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer`; no consent page
|
|
288
|
-
is shown. Everything after that is an ordinary access token.
|
|
289
|
-
|
|
290
|
-
Core does not know any issuer or JWKS. The token grant is a
|
|
291
|
-
`@better-auth/oauth-provider` extension supplied by the adopter through
|
|
292
|
-
`oauthProvider.extensions`, appended after Core's own claims extension:
|
|
293
|
-
|
|
294
|
-
```ts
|
|
295
|
-
import { identityAssertionAuthorizationGrant } from "@aotterclam/id-jag";
|
|
296
|
-
|
|
297
|
-
const auth = createAuth({
|
|
298
|
-
// database, baseURL, secret, methods...
|
|
299
|
-
oauthProvider: {
|
|
300
|
-
loginPage: "/admin/sign-in",
|
|
301
|
-
consentPage: "/oauth/consent",
|
|
302
|
-
scopes: ["mcp", "offline_access"],
|
|
303
|
-
mcpResource: env.PUBLIC_ORIGIN + "/mcp",
|
|
304
|
-
extensions: [
|
|
305
|
-
identityAssertionAuthorizationGrant({
|
|
306
|
-
issuer: env.ENTERPRISE_IDP_ISSUER,
|
|
307
|
-
jwksUrl: env.ENTERPRISE_IDP_JWKS_URL,
|
|
308
|
-
authorizationServer: env.PUBLIC_ORIGIN,
|
|
309
|
-
resource: env.PUBLIC_ORIGIN + "/mcp",
|
|
310
|
-
scopes: ["mcp"],
|
|
311
|
-
fetchJwks: (input, init) => fetch(input, { ...init, redirect: "manual" }),
|
|
312
|
-
}),
|
|
313
|
-
],
|
|
314
|
-
},
|
|
315
|
-
});
|
|
316
|
-
```
|
|
130
|
+
[Mantle on ChatGPT Sites](./chatgpt-sites.md) is a worked `custom` identity.
|
|
317
131
|
|
|
318
|
-
|
|
319
|
-
lifetime, maps its subject to a user, and issues tokens through the provider's
|
|
320
|
-
shared token path, so `verifyOAuthAccessToken`, DPoP and the MCP challenge
|
|
321
|
-
behave exactly as for interactive grants. `@aotterclam/id-jag` is a reference
|
|
322
|
-
implementation, not a Core dependency; any `OAuthProviderExtension` works.
|
|
323
|
-
Extensions may also add client-authentication strategies, discovery metadata
|
|
324
|
-
and additional claims. The same passthrough applies without `mcpResource`.
|
|
132
|
+
## Further reading
|
|
325
133
|
|
|
326
|
-
|
|
327
|
-
- [
|
|
328
|
-
- [`packages/adapters/cloudflare/src/auth/conventionalAuth.ts`](../../../packages/adapters/cloudflare/src/auth/conventionalAuth.ts)
|
|
329
|
-
- [`packages/adapters/cloudflare/src/auth/createAuth.ts`](../../../packages/adapters/cloudflare/src/auth/createAuth.ts)
|
|
330
|
-
- [`packages/adapters/cloudflare/src/worker/createMantleWorker.ts`](../../../packages/adapters/cloudflare/src/worker/createMantleWorker.ts)
|
|
331
|
-
- [`packages/adapters/cloudflare/src/mount/mountPublicRoutes.ts`](../../../packages/adapters/cloudflare/src/mount/mountPublicRoutes.ts)
|
|
332
|
-
- [`packages/adapters/cloudflare/src/mount/mountMcp.ts`](../../../packages/adapters/cloudflare/src/mount/mountMcp.ts)
|
|
333
|
-
- [`packages/mantle-admin/src/mountMantleAdmin.ts`](../../../packages/mantle-admin/src/mountMantleAdmin.ts)
|
|
334
|
-
- [`docs/auth-hosting-model.md`](../../../docs/auth-hosting-model.md)
|
|
335
|
-
- [`docs/adapter-guide.md`](../../../docs/adapter-guide.md)
|
|
336
|
-
- [`docs/examples/host-local-admin-otp/src/index.ts`](../../../docs/examples/host-local-admin-otp/src/index.ts)
|
|
337
|
-
- [`docs/examples/host-local-admin-otp/.dev.vars.example`](../../../docs/examples/host-local-admin-otp/.dev.vars.example)
|
|
338
|
-
- [`docs/examples/host-minimal-worker/.gitignore`](../../../docs/examples/host-minimal-worker/.gitignore)
|
|
134
|
+
- [Authorization](../concepts/authorization.md)
|
|
135
|
+
- [MCP and agents](../concepts/mcp-and-agents.md): OAuth for MCP clients
|