@aotter/mantle 0.2.0-alpha.5 → 0.2.0-alpha.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (932) hide show
  1. package/README.md +152 -45
  2. package/dist/auth/adapter.d.ts +32 -0
  3. package/dist/auth/adapter.js +285 -0
  4. package/dist/auth/admin.d.ts +3 -0
  5. package/dist/auth/admin.js +21 -0
  6. package/dist/auth/caller.d.ts +86 -0
  7. package/dist/auth/caller.js +154 -0
  8. package/dist/auth/hardening.d.ts +24 -0
  9. package/dist/auth/hardening.js +40 -0
  10. package/dist/auth/identity.d.ts +121 -0
  11. package/dist/auth/identity.js +203 -0
  12. package/dist/auth/oauth.d.ts +31 -0
  13. package/dist/auth/oauth.js +124 -0
  14. package/dist/auth/resource-seeds.js +10 -0
  15. package/dist/auth/routes.d.ts +32 -0
  16. package/dist/auth/{createAuthRoutes.js → routes.js} +130 -35
  17. package/dist/build/compiler.d.ts +790 -0
  18. package/dist/build/compiler.js +6971 -0
  19. package/dist/{spec → build/spec}/domain/model/ManifestGrammar.d.ts +28 -42
  20. package/dist/{spec → build/spec}/domain/model/RuntimePlan.d.ts +77 -3
  21. package/dist/{spec → build/spec}/domain/model/SqlIr.d.ts +35 -6
  22. package/dist/build/spec/domain/model/UserFields.d.ts +20 -0
  23. package/dist/{spec → build/spec}/domain/service/PlanFingerprint.d.ts +2 -1
  24. package/dist/{spec → build/spec}/kernel/diagnostic.d.ts +1 -30
  25. package/dist/bun/assets.d.ts +2 -0
  26. package/dist/bun/assets.js +24 -0
  27. package/dist/domain/adminOrder.js +24 -0
  28. package/dist/domain/columns.js +55 -0
  29. package/dist/domain/describe/chunk-ZIQVLA7X.js +363 -0
  30. package/dist/domain/describe/index.d.ts +58 -0
  31. package/dist/domain/describe/index.js +115 -0
  32. package/dist/domain/describe/target-hash.d.ts +8 -0
  33. package/dist/domain/describe/target-hash.js +12 -0
  34. package/dist/domain/describe/targets.d.ts +40 -0
  35. package/dist/domain/entry.js +33 -0
  36. package/dist/domain/generated-tools.js +17 -0
  37. package/dist/domain/generation.d.ts +16 -0
  38. package/dist/domain/generation.js +1 -0
  39. package/dist/domain/input.js +17 -0
  40. package/dist/domain/model.js +1 -0
  41. package/dist/domain/paging.js +204 -0
  42. package/dist/domain/recipes.js +19 -0
  43. package/dist/domain/userReferences.js +5 -0
  44. package/dist/domain/wireScalars.js +47 -0
  45. package/dist/infrastructure/adminEntries.js +153 -0
  46. package/dist/infrastructure/adminPaging.js +72 -0
  47. package/dist/infrastructure/artifacts.js +71 -0
  48. package/dist/infrastructure/authSchema.js +83 -0
  49. package/dist/infrastructure/bundle.js +84 -0
  50. package/dist/infrastructure/cli.js +101 -0
  51. package/dist/infrastructure/generate.d.ts +14 -0
  52. package/dist/infrastructure/generate.js +174 -0
  53. package/dist/infrastructure/generateAuth.d.ts +8 -0
  54. package/dist/infrastructure/generateAuth.js +17 -0
  55. package/dist/infrastructure/inputs.js +36 -0
  56. package/dist/infrastructure/wrangler.js +71 -0
  57. package/dist/kernel/authorization.d.ts +4 -0
  58. package/dist/kernel/authorization.js +16 -0
  59. package/dist/kernel/binds.d.ts +51 -0
  60. package/dist/kernel/binds.js +45 -0
  61. package/dist/kernel/caller-identity.d.ts +24 -0
  62. package/dist/kernel/caller-identity.js +22 -0
  63. package/dist/kernel/contract-error.d.ts +12 -0
  64. package/dist/kernel/contract-error.js +14 -0
  65. package/dist/kernel/contracts.d.ts +139 -0
  66. package/dist/kernel/contracts.js +92 -0
  67. package/dist/{spec/domain/service/CloudflareCron.d.ts → kernel/cron.d.ts} +0 -1
  68. package/dist/{spec/domain/service/CloudflareCron.js → kernel/cron.js} +1 -6
  69. package/dist/kernel/dialect/common.d.ts +39 -0
  70. package/dist/kernel/dialect/common.js +6 -0
  71. package/dist/kernel/dialect/postgres.d.ts +16 -0
  72. package/dist/kernel/dialect/postgres.js +18 -0
  73. package/dist/kernel/dialect/sqlite.d.ts +20 -0
  74. package/dist/kernel/dialect/sqlite.js +34 -0
  75. package/dist/kernel/driver/bun-sqlite.d.ts +19 -0
  76. package/dist/kernel/driver/bun-sqlite.js +77 -0
  77. package/dist/kernel/driver/d1.d.ts +24 -0
  78. package/dist/kernel/driver/d1.js +22 -0
  79. package/dist/kernel/driver/postgres.d.ts +25 -0
  80. package/dist/kernel/driver/postgres.js +95 -0
  81. package/dist/kernel/driver/transaction-context.d.ts +10 -0
  82. package/dist/kernel/driver/transaction-context.js +29 -0
  83. package/dist/kernel/email.d.ts +28 -0
  84. package/dist/{auth/emailTemplates.js → kernel/email.js} +13 -2
  85. package/dist/kernel/host-access.d.ts +10 -0
  86. package/dist/kernel/host-access.js +65 -0
  87. package/dist/kernel/host-caller.d.ts +38 -0
  88. package/dist/kernel/host-caller.js +55 -0
  89. package/dist/kernel/json-body.d.ts +4 -0
  90. package/dist/kernel/json-body.js +44 -0
  91. package/dist/kernel/mcp-apps.d.ts +49 -0
  92. package/dist/kernel/mcp-apps.js +40 -0
  93. package/dist/kernel/mcp-call.d.ts +5 -0
  94. package/dist/kernel/mcp-call.js +25 -0
  95. package/dist/kernel/mcp-handler.js +288 -0
  96. package/dist/kernel/mcp.d.ts +101 -0
  97. package/dist/kernel/mcp.js +25 -0
  98. package/dist/kernel/media.d.ts +27 -0
  99. package/dist/kernel/media.js +216 -0
  100. package/dist/kernel/paging.d.ts +55 -0
  101. package/dist/kernel/paging.js +95 -0
  102. package/dist/kernel/publishing.d.ts +4 -0
  103. package/dist/kernel/publishing.js +16 -0
  104. package/dist/{cloudflare/r2Media.d.ts → kernel/r2-media.d.ts} +4 -5
  105. package/dist/kernel/r2-media.js +78 -0
  106. package/dist/kernel/rest-dispatch.js +38 -0
  107. package/dist/kernel/rest-router.js +63 -0
  108. package/dist/kernel/rest.d.ts +58 -0
  109. package/dist/kernel/rest.js +41 -0
  110. package/dist/kernel/scalars.d.ts +6 -0
  111. package/dist/kernel/scalars.js +43 -0
  112. package/dist/kernel/search.js +5 -0
  113. package/dist/{core/site.d.ts → kernel/site-types.d.ts} +38 -9
  114. package/dist/kernel/site-types.js +1 -0
  115. package/dist/kernel/site.d.ts +41 -0
  116. package/dist/kernel/site.js +32 -0
  117. package/dist/kernel/store.d.ts +165 -0
  118. package/dist/kernel/store.js +257 -0
  119. package/dist/kernel/surface.d.ts +10 -0
  120. package/dist/kernel/surface.js +19 -0
  121. package/dist/kernel/sweep.d.ts +17 -0
  122. package/dist/kernel/sweep.js +27 -0
  123. package/dist/kernel/translations.d.ts +1 -0
  124. package/dist/kernel/translations.js +13 -0
  125. package/dist/kernel/user-caller.d.ts +31 -0
  126. package/dist/kernel/user-caller.js +67 -0
  127. package/dist/kernel/user-field-name.js +3 -0
  128. package/dist/kernel/user-fields.d.ts +34 -0
  129. package/dist/kernel/user-fields.js +71 -0
  130. package/dist/kernel/validation.d.ts +15 -0
  131. package/dist/kernel/validation.js +54 -0
  132. package/dist/kernel/web-gateway.js +68 -0
  133. package/dist/kernel/web-head.js +15 -0
  134. package/dist/kernel/web-response.js +8 -0
  135. package/dist/kernel/web.d.ts +75 -0
  136. package/dist/kernel/web.js +155 -0
  137. package/dist/kernel/where.js +27 -0
  138. package/dist/testing/index.d.ts +1 -37
  139. package/dist/testing/index.js +1 -43
  140. package/dist/usecase/adminBindings.js +142 -0
  141. package/dist/usecase/adminDescriptors.js +153 -0
  142. package/dist/usecase/generate.js +164 -0
  143. package/dist/usecase/handlers.js +21 -0
  144. package/dist/usecase/mcp-media.js +17 -0
  145. package/dist/usecase/mcp.js +96 -0
  146. package/dist/usecase/paging.js +72 -0
  147. package/dist/usecase/publishing.js +63 -0
  148. package/dist/usecase/refusals.js +27 -0
  149. package/dist/usecase/rest.js +54 -0
  150. package/dist/usecase/search.js +7 -0
  151. package/dist/usecase/site.js +40 -0
  152. package/dist/usecase/stores.js +62 -0
  153. package/dist/usecase/translations.js +78 -0
  154. package/dist/usecase/ttl.js +20 -0
  155. package/dist/usecase/validation.js +132 -0
  156. package/dist/usecase/web.js +22 -0
  157. package/docs/examples/README.md +31 -16
  158. package/docs/examples/app-shell/README.md +48 -0
  159. package/docs/examples/app-shell/package.json +34 -0
  160. package/docs/examples/app-shell/pnpm-workspace.yaml +8 -0
  161. package/docs/examples/app-shell/smoke-kit.mjs +100 -0
  162. package/docs/examples/app-shell/src/admin.ts +10 -0
  163. package/docs/examples/app-shell/src/auth.ts +55 -0
  164. package/docs/examples/app-shell/src/handlers.ts +5 -0
  165. package/docs/examples/app-shell/src/index.ts +4 -0
  166. package/docs/examples/app-shell/src/routes.ts +13 -0
  167. package/docs/examples/app-shell/src/schedule.ts +8 -0
  168. package/docs/examples/app-shell/src/service.ts +70 -0
  169. package/docs/examples/app-shell/src/sign-in.ts +41 -0
  170. package/docs/examples/app-shell/src/signup.ts +8 -0
  171. package/docs/examples/{reference-service → app-shell}/tsconfig.json +2 -1
  172. package/docs/examples/app-shell/worker-configuration.d.ts +22 -0
  173. package/docs/examples/app-shell/wrangler.jsonc +61 -0
  174. package/docs/examples/club-events/README.md +60 -0
  175. package/docs/examples/club-events/manifests/club-events.yaml +225 -0
  176. package/docs/examples/club-events/smoke.mjs +121 -0
  177. package/docs/examples/club-events/src/handlers.ts +25 -0
  178. package/docs/examples/club-events/src/signup.ts +9 -0
  179. package/docs/examples/generated-web/README.md +74 -0
  180. package/docs/examples/generated-web/posts.yaml +38 -0
  181. package/docs/examples/generated-web/seed.sql +6 -0
  182. package/docs/examples/generated-web/src/worker.ts +43 -0
  183. package/docs/examples/generated-web/tsconfig.json +8 -0
  184. package/docs/examples/generated-web/wrangler.jsonc +7 -0
  185. package/docs/examples/purchasing/.dev.vars.example +6 -0
  186. package/docs/examples/purchasing/README.md +90 -0
  187. package/docs/examples/purchasing/manifests/purchasing.yaml +341 -0
  188. package/docs/examples/purchasing/seed.sql +4 -0
  189. package/docs/examples/purchasing/smoke.mjs +171 -0
  190. package/docs/examples/purchasing/src/admin.ts +12 -0
  191. package/docs/examples/purchasing/src/handlers.ts +33 -0
  192. package/docs/examples/purchasing/src/notify.ts +29 -0
  193. package/docs/examples/purchasing/src/requests-page.ts +57 -0
  194. package/docs/examples/purchasing/src/routes.ts +53 -0
  195. package/docs/examples/purchasing/src/schedule.ts +31 -0
  196. package/docs/examples/purchasing/src/signup.ts +5 -0
  197. package/docs/examples/purchasing/src/supplier.ts +32 -0
  198. package/docs/examples/purchasing/wrangler.jsonc +68 -0
  199. package/docs/examples/recipes/README.md +58 -0
  200. package/docs/examples/recipes/manifests/recipes.yaml +75 -0
  201. package/docs/examples/recipes/smoke.mjs +102 -0
  202. package/docs/examples/recipes/src/media.ts +13 -0
  203. package/docs/examples/recipes/src/pages.ts +99 -0
  204. package/docs/examples/recipes/src/routes.ts +71 -0
  205. package/docs/examples/recipes/src/site-config.ts +12 -0
  206. package/docs/examples/recipes/wrangler.jsonc +73 -0
  207. package/docs/handbook/cloudflare/authentication.md +142 -212
  208. package/docs/handbook/cloudflare/chatgpt-sites.md +4 -113
  209. package/docs/handbook/cloudflare/deploy-and-operate.md +20 -103
  210. package/docs/handbook/cloudflare/media-r2.md +62 -133
  211. package/docs/handbook/cloudflare/service-entry.md +180 -116
  212. package/docs/handbook/concepts/authorization.md +10 -123
  213. package/docs/handbook/concepts/four-atoms.md +9 -92
  214. package/docs/handbook/concepts/lifecycle-and-locales.md +9 -80
  215. package/docs/handbook/concepts/mcp-and-agents.md +10 -141
  216. package/docs/handbook/concepts/procedures-and-triggers.md +5 -162
  217. package/docs/handbook/concepts/runtime-and-adapters.md +15 -183
  218. package/docs/handbook/concepts/views.md +10 -109
  219. package/docs/handbook/examples/hub.md +2 -18
  220. package/docs/handbook/guides/adapter-guide.md +11 -0
  221. package/docs/handbook/guides/admin-extensions.md +20 -0
  222. package/docs/handbook/guides/admin-ui.md +5 -163
  223. package/docs/handbook/guides/agent-setup.md +5 -18
  224. package/docs/handbook/guides/email.md +86 -0
  225. package/docs/handbook/guides/mcp-apps.md +44 -0
  226. package/docs/handbook/guides/native-admin.md +298 -0
  227. package/docs/handbook/guides/native-execution.md +132 -0
  228. package/docs/handbook/guides/oauth.md +105 -0
  229. package/docs/handbook/guides/postgres-adapters.md +56 -0
  230. package/docs/handbook/guides/public-pages.md +53 -0
  231. package/docs/handbook/guides/size-and-startup.md +9 -0
  232. package/docs/handbook/guides/typed-queries.md +39 -102
  233. package/docs/handbook/navigation.json +164 -30
  234. package/docs/handbook/reference/admin-descriptors.md +88 -0
  235. package/docs/handbook/reference/authorization.md +44 -52
  236. package/docs/handbook/reference/describe.md +56 -0
  237. package/docs/handbook/reference/diagnostics.md +15 -78
  238. package/docs/handbook/reference/features.md +45 -53
  239. package/docs/handbook/reference/manifest.md +6 -69
  240. package/docs/handbook/reference/procedure.md +9 -117
  241. package/docs/handbook/reference/schema.md +65 -172
  242. package/docs/handbook/reference/site-config.md +5 -65
  243. package/docs/handbook/reference/surface.md +279 -93
  244. package/docs/handbook/reference/trigger.md +24 -93
  245. package/docs/handbook/reference/view.md +32 -158
  246. package/docs/handbook/releases/index.md +124 -15
  247. package/docs/handbook/start/overview.md +9 -56
  248. package/docs/handbook/start/project-and-cli.md +40 -141
  249. package/docs/handbook/start/quickstart-worker.md +38 -116
  250. package/docs/skills/develop/SKILL.md +34 -117
  251. package/docs/skills/develop/mcp-app.md +37 -77
  252. package/docs/skills/integrate/SKILL.md +42 -84
  253. package/docs/skills/media-gc/SKILL.md +14 -3
  254. package/docs/skills/provision/SKILL.md +25 -88
  255. package/docs/skills/update/SKILL.md +19 -40
  256. package/docs/source/scripts/postgres-adapter.ts +101 -0
  257. package/docs/upgrade-0.1-to-0.2.md +26 -10
  258. package/package.json +97 -112
  259. package/skills/.keep +0 -0
  260. package/skills/README.md +72 -0
  261. package/skills/mantle/SKILL.md +135 -0
  262. package/skills/mantle/references/local-testing.md +11 -0
  263. package/skills/mantle/references/web.md +41 -0
  264. package/skills/mantle/references/website.md +47 -0
  265. package/dist/admin/consent.d.ts +0 -17
  266. package/dist/admin/consent.d.ts.map +0 -1
  267. package/dist/admin/consent.js +0 -17
  268. package/dist/admin/consent.js.map +0 -1
  269. package/dist/admin/createAdminSurface.d.ts +0 -22
  270. package/dist/admin/createAdminSurface.d.ts.map +0 -1
  271. package/dist/admin/createAdminSurface.js +0 -592
  272. package/dist/admin/createAdminSurface.js.map +0 -1
  273. package/dist/admin/design.d.ts +0 -7
  274. package/dist/admin/design.d.ts.map +0 -1
  275. package/dist/admin/design.js +0 -18
  276. package/dist/admin/design.js.map +0 -1
  277. package/dist/admin/developerConsole.d.ts +0 -267
  278. package/dist/admin/developerConsole.d.ts.map +0 -1
  279. package/dist/admin/developerConsole.js +0 -136
  280. package/dist/admin/developerConsole.js.map +0 -1
  281. package/dist/admin/identity.d.ts +0 -62
  282. package/dist/admin/identity.d.ts.map +0 -1
  283. package/dist/admin/identity.js +0 -7
  284. package/dist/admin/identity.js.map +0 -1
  285. package/dist/admin/index.d.ts +0 -6
  286. package/dist/admin/index.d.ts.map +0 -1
  287. package/dist/admin/index.js +0 -6
  288. package/dist/admin/index.js.map +0 -1
  289. package/dist/admin/procedureFlow.d.ts +0 -38
  290. package/dist/admin/procedureFlow.d.ts.map +0 -1
  291. package/dist/admin/procedureFlow.js +0 -188
  292. package/dist/admin/procedureFlow.js.map +0 -1
  293. package/dist/auth/ConsoleEmailSender.d.ts +0 -15
  294. package/dist/auth/ConsoleEmailSender.d.ts.map +0 -1
  295. package/dist/auth/ConsoleEmailSender.js +0 -19
  296. package/dist/auth/ConsoleEmailSender.js.map +0 -1
  297. package/dist/auth/appleClientSecret.d.ts +0 -75
  298. package/dist/auth/appleClientSecret.d.ts.map +0 -1
  299. package/dist/auth/appleClientSecret.js +0 -116
  300. package/dist/auth/appleClientSecret.js.map +0 -1
  301. package/dist/auth/buildAuth.d.ts +0 -4566
  302. package/dist/auth/buildAuth.d.ts.map +0 -1
  303. package/dist/auth/buildAuth.js +0 -311
  304. package/dist/auth/buildAuth.js.map +0 -1
  305. package/dist/auth/callerResolver.d.ts +0 -48
  306. package/dist/auth/callerResolver.d.ts.map +0 -1
  307. package/dist/auth/callerResolver.js +0 -49
  308. package/dist/auth/callerResolver.js.map +0 -1
  309. package/dist/auth/createAuthRoutes.d.ts +0 -22
  310. package/dist/auth/createAuthRoutes.d.ts.map +0 -1
  311. package/dist/auth/createAuthRoutes.js.map +0 -1
  312. package/dist/auth/createMantleAuth.d.ts +0 -3
  313. package/dist/auth/createMantleAuth.d.ts.map +0 -1
  314. package/dist/auth/createMantleAuth.js +0 -503
  315. package/dist/auth/createMantleAuth.js.map +0 -1
  316. package/dist/auth/db.d.ts +0 -17
  317. package/dist/auth/db.d.ts.map +0 -1
  318. package/dist/auth/db.js +0 -24
  319. package/dist/auth/db.js.map +0 -1
  320. package/dist/auth/emailTemplates.d.ts +0 -7
  321. package/dist/auth/emailTemplates.d.ts.map +0 -1
  322. package/dist/auth/emailTemplates.js.map +0 -1
  323. package/dist/auth/index.d.ts +0 -9
  324. package/dist/auth/index.d.ts.map +0 -1
  325. package/dist/auth/index.js +0 -7
  326. package/dist/auth/index.js.map +0 -1
  327. package/dist/auth/methods.d.ts +0 -717
  328. package/dist/auth/methods.d.ts.map +0 -1
  329. package/dist/auth/methods.js +0 -321
  330. package/dist/auth/methods.js.map +0 -1
  331. package/dist/auth/oauthTokens.d.ts +0 -24
  332. package/dist/auth/oauthTokens.d.ts.map +0 -1
  333. package/dist/auth/oauthTokens.js +0 -146
  334. package/dist/auth/oauthTokens.js.map +0 -1
  335. package/dist/auth/setupIncomplete.d.ts +0 -16
  336. package/dist/auth/setupIncomplete.d.ts.map +0 -1
  337. package/dist/auth/setupIncomplete.js +0 -50
  338. package/dist/auth/setupIncomplete.js.map +0 -1
  339. package/dist/auth/types.d.ts +0 -440
  340. package/dist/auth/types.d.ts.map +0 -1
  341. package/dist/auth/types.js +0 -10
  342. package/dist/auth/types.js.map +0 -1
  343. package/dist/bun/index.d.ts +0 -65
  344. package/dist/bun/index.d.ts.map +0 -1
  345. package/dist/bun/index.js +0 -130
  346. package/dist/bun/index.js.map +0 -1
  347. package/dist/cli/emitModule.d.ts +0 -7
  348. package/dist/cli/emitModule.d.ts.map +0 -1
  349. package/dist/cli/emitModule.js +0 -127
  350. package/dist/cli/emitModule.js.map +0 -1
  351. package/dist/cli/generate.d.ts +0 -8
  352. package/dist/cli/generate.d.ts.map +0 -1
  353. package/dist/cli/generate.js +0 -391
  354. package/dist/cli/generate.js.map +0 -1
  355. package/dist/cli/main.d.ts +0 -3
  356. package/dist/cli/main.d.ts.map +0 -1
  357. package/dist/cli/main.js +0 -21
  358. package/dist/cli/main.js.map +0 -1
  359. package/dist/cli/preset.d.ts +0 -18
  360. package/dist/cli/preset.d.ts.map +0 -1
  361. package/dist/cli/preset.js +0 -353
  362. package/dist/cli/preset.js.map +0 -1
  363. package/dist/cloudflare/index.d.ts +0 -21
  364. package/dist/cloudflare/index.d.ts.map +0 -1
  365. package/dist/cloudflare/index.js +0 -14
  366. package/dist/cloudflare/index.js.map +0 -1
  367. package/dist/cloudflare/r2Media.d.ts.map +0 -1
  368. package/dist/cloudflare/r2Media.js +0 -69
  369. package/dist/cloudflare/r2Media.js.map +0 -1
  370. package/dist/core/caller.d.ts +0 -35
  371. package/dist/core/caller.d.ts.map +0 -1
  372. package/dist/core/caller.js +0 -3
  373. package/dist/core/caller.js.map +0 -1
  374. package/dist/core/createMantle.d.ts +0 -22
  375. package/dist/core/createMantle.d.ts.map +0 -1
  376. package/dist/core/createMantle.js +0 -117
  377. package/dist/core/createMantle.js.map +0 -1
  378. package/dist/core/dialect.d.ts +0 -41
  379. package/dist/core/dialect.d.ts.map +0 -1
  380. package/dist/core/dialect.js +0 -7
  381. package/dist/core/dialect.js.map +0 -1
  382. package/dist/core/driver.d.ts +0 -17
  383. package/dist/core/driver.d.ts.map +0 -1
  384. package/dist/core/driver.js +0 -2
  385. package/dist/core/driver.js.map +0 -1
  386. package/dist/core/email.d.ts +0 -17
  387. package/dist/core/email.d.ts.map +0 -1
  388. package/dist/core/email.js +0 -2
  389. package/dist/core/email.js.map +0 -1
  390. package/dist/core/index.d.ts +0 -16
  391. package/dist/core/index.d.ts.map +0 -1
  392. package/dist/core/index.js +0 -16
  393. package/dist/core/index.js.map +0 -1
  394. package/dist/core/invocation.d.ts +0 -66
  395. package/dist/core/invocation.d.ts.map +0 -1
  396. package/dist/core/invocation.js +0 -3
  397. package/dist/core/invocation.js.map +0 -1
  398. package/dist/core/observation.d.ts +0 -3
  399. package/dist/core/observation.d.ts.map +0 -1
  400. package/dist/core/observation.js +0 -10
  401. package/dist/core/observation.js.map +0 -1
  402. package/dist/core/runtime/auth.d.ts +0 -9
  403. package/dist/core/runtime/auth.d.ts.map +0 -1
  404. package/dist/core/runtime/auth.js +0 -39
  405. package/dist/core/runtime/auth.js.map +0 -1
  406. package/dist/core/runtime/createRuntime.d.ts +0 -23
  407. package/dist/core/runtime/createRuntime.d.ts.map +0 -1
  408. package/dist/core/runtime/createRuntime.js +0 -214
  409. package/dist/core/runtime/createRuntime.js.map +0 -1
  410. package/dist/core/runtime/verifyPlan.d.ts +0 -34
  411. package/dist/core/runtime/verifyPlan.d.ts.map +0 -1
  412. package/dist/core/runtime/verifyPlan.js +0 -301
  413. package/dist/core/runtime/verifyPlan.js.map +0 -1
  414. package/dist/core/service.d.ts +0 -45
  415. package/dist/core/service.d.ts.map +0 -1
  416. package/dist/core/service.js +0 -2
  417. package/dist/core/service.js.map +0 -1
  418. package/dist/core/site.d.ts.map +0 -1
  419. package/dist/core/site.js +0 -2
  420. package/dist/core/site.js.map +0 -1
  421. package/dist/core/siteConfig.d.ts +0 -5
  422. package/dist/core/siteConfig.d.ts.map +0 -1
  423. package/dist/core/siteConfig.js +0 -24
  424. package/dist/core/siteConfig.js.map +0 -1
  425. package/dist/core/sql/allowlist.d.ts +0 -65
  426. package/dist/core/sql/allowlist.d.ts.map +0 -1
  427. package/dist/core/sql/allowlist.js +0 -705
  428. package/dist/core/sql/allowlist.js.map +0 -1
  429. package/dist/core/sql/ast.d.ts +0 -24
  430. package/dist/core/sql/ast.d.ts.map +0 -1
  431. package/dist/core/sql/ast.js +0 -32
  432. package/dist/core/sql/ast.js.map +0 -1
  433. package/dist/core/sql/compile.d.ts +0 -50
  434. package/dist/core/sql/compile.d.ts.map +0 -1
  435. package/dist/core/sql/compile.js +0 -48
  436. package/dist/core/sql/compile.js.map +0 -1
  437. package/dist/core/sql/policy.d.ts +0 -121
  438. package/dist/core/sql/policy.d.ts.map +0 -1
  439. package/dist/core/sql/policy.js +0 -379
  440. package/dist/core/sql/policy.js.map +0 -1
  441. package/dist/core/sql/positions.d.ts +0 -30
  442. package/dist/core/sql/positions.d.ts.map +0 -1
  443. package/dist/core/sql/positions.js +0 -22
  444. package/dist/core/sql/positions.js.map +0 -1
  445. package/dist/core/sql/run.d.ts +0 -76
  446. package/dist/core/sql/run.d.ts.map +0 -1
  447. package/dist/core/sql/run.js +0 -267
  448. package/dist/core/sql/run.js.map +0 -1
  449. package/dist/core/store/createStore.d.ts +0 -49
  450. package/dist/core/store/createStore.d.ts.map +0 -1
  451. package/dist/core/store/createStore.js +0 -227
  452. package/dist/core/store/createStore.js.map +0 -1
  453. package/dist/core/store/cursor.d.ts +0 -4
  454. package/dist/core/store/cursor.d.ts.map +0 -1
  455. package/dist/core/store/cursor.js +0 -22
  456. package/dist/core/store/cursor.js.map +0 -1
  457. package/dist/core/store/json.d.ts +0 -80
  458. package/dist/core/store/json.d.ts.map +0 -1
  459. package/dist/core/store/json.js +0 -342
  460. package/dist/core/store/json.js.map +0 -1
  461. package/dist/core/store.d.ts +0 -160
  462. package/dist/core/store.d.ts.map +0 -1
  463. package/dist/core/store.js +0 -2
  464. package/dist/core/store.js.map +0 -1
  465. package/dist/core/wire.d.ts +0 -20
  466. package/dist/core/wire.d.ts.map +0 -1
  467. package/dist/core/wire.js +0 -84
  468. package/dist/core/wire.js.map +0 -1
  469. package/dist/core/withCaller.d.ts +0 -24
  470. package/dist/core/withCaller.d.ts.map +0 -1
  471. package/dist/core/withCaller.js +0 -35
  472. package/dist/core/withCaller.js.map +0 -1
  473. package/dist/d1/adapter.d.ts +0 -12
  474. package/dist/d1/adapter.d.ts.map +0 -1
  475. package/dist/d1/adapter.js +0 -23
  476. package/dist/d1/adapter.js.map +0 -1
  477. package/dist/d1/codec.d.ts +0 -14
  478. package/dist/d1/codec.d.ts.map +0 -1
  479. package/dist/d1/codec.js +0 -136
  480. package/dist/d1/codec.js.map +0 -1
  481. package/dist/d1/compile/index.d.ts +0 -9
  482. package/dist/d1/compile/index.d.ts.map +0 -1
  483. package/dist/d1/compile/index.js +0 -9
  484. package/dist/d1/compile/index.js.map +0 -1
  485. package/dist/d1/dialect.d.ts +0 -4
  486. package/dist/d1/dialect.d.ts.map +0 -1
  487. package/dist/d1/dialect.js +0 -13
  488. package/dist/d1/dialect.js.map +0 -1
  489. package/dist/d1/executor.d.ts +0 -13
  490. package/dist/d1/executor.d.ts.map +0 -1
  491. package/dist/d1/executor.js +0 -91
  492. package/dist/d1/executor.js.map +0 -1
  493. package/dist/d1/index.d.ts +0 -6
  494. package/dist/d1/index.d.ts.map +0 -1
  495. package/dist/d1/index.js +0 -6
  496. package/dist/d1/index.js.map +0 -1
  497. package/dist/d1/lower.d.ts +0 -8
  498. package/dist/d1/lower.d.ts.map +0 -1
  499. package/dist/d1/lower.js +0 -167
  500. package/dist/d1/lower.js.map +0 -1
  501. package/dist/d1/media.d.ts +0 -5
  502. package/dist/d1/media.d.ts.map +0 -1
  503. package/dist/d1/media.js +0 -157
  504. package/dist/d1/media.js.map +0 -1
  505. package/dist/d1/migrations.d.ts +0 -12
  506. package/dist/d1/migrations.d.ts.map +0 -1
  507. package/dist/d1/migrations.js +0 -111
  508. package/dist/d1/migrations.js.map +0 -1
  509. package/dist/d1/print.d.ts +0 -28
  510. package/dist/d1/print.d.ts.map +0 -1
  511. package/dist/d1/print.js +0 -54
  512. package/dist/d1/print.js.map +0 -1
  513. package/dist/d1/site.d.ts +0 -17
  514. package/dist/d1/site.d.ts.map +0 -1
  515. package/dist/d1/site.js +0 -63
  516. package/dist/d1/site.js.map +0 -1
  517. package/dist/d1/storage.d.ts +0 -34
  518. package/dist/d1/storage.d.ts.map +0 -1
  519. package/dist/d1/storage.js +0 -288
  520. package/dist/d1/storage.js.map +0 -1
  521. package/dist/d1/tz.d.ts +0 -21
  522. package/dist/d1/tz.d.ts.map +0 -1
  523. package/dist/d1/tz.js +0 -54
  524. package/dist/d1/tz.js.map +0 -1
  525. package/dist/d1/validator.d.ts +0 -10
  526. package/dist/d1/validator.d.ts.map +0 -1
  527. package/dist/d1/validator.js +0 -33
  528. package/dist/d1/validator.js.map +0 -1
  529. package/dist/mcp/apps.d.ts +0 -43
  530. package/dist/mcp/apps.d.ts.map +0 -1
  531. package/dist/mcp/apps.js +0 -57
  532. package/dist/mcp/apps.js.map +0 -1
  533. package/dist/mcp/catalog.d.ts +0 -55
  534. package/dist/mcp/catalog.d.ts.map +0 -1
  535. package/dist/mcp/catalog.js +0 -81
  536. package/dist/mcp/catalog.js.map +0 -1
  537. package/dist/mcp/createMcpSurface.d.ts +0 -60
  538. package/dist/mcp/createMcpSurface.d.ts.map +0 -1
  539. package/dist/mcp/createMcpSurface.js +0 -182
  540. package/dist/mcp/createMcpSurface.js.map +0 -1
  541. package/dist/mcp/index.d.ts +0 -4
  542. package/dist/mcp/index.d.ts.map +0 -1
  543. package/dist/mcp/index.js +0 -4
  544. package/dist/mcp/index.js.map +0 -1
  545. package/dist/mcp/media.d.ts +0 -9
  546. package/dist/mcp/media.d.ts.map +0 -1
  547. package/dist/mcp/media.js +0 -33
  548. package/dist/mcp/media.js.map +0 -1
  549. package/dist/postgres/adapter.d.ts +0 -20
  550. package/dist/postgres/adapter.d.ts.map +0 -1
  551. package/dist/postgres/adapter.js +0 -44
  552. package/dist/postgres/adapter.js.map +0 -1
  553. package/dist/postgres/codec.d.ts +0 -13
  554. package/dist/postgres/codec.d.ts.map +0 -1
  555. package/dist/postgres/codec.js +0 -110
  556. package/dist/postgres/codec.js.map +0 -1
  557. package/dist/postgres/compile/index.d.ts +0 -9
  558. package/dist/postgres/compile/index.d.ts.map +0 -1
  559. package/dist/postgres/compile/index.js +0 -9
  560. package/dist/postgres/compile/index.js.map +0 -1
  561. package/dist/postgres/driver.d.ts +0 -92
  562. package/dist/postgres/driver.d.ts.map +0 -1
  563. package/dist/postgres/driver.js +0 -110
  564. package/dist/postgres/driver.js.map +0 -1
  565. package/dist/postgres/executor.d.ts +0 -20
  566. package/dist/postgres/executor.d.ts.map +0 -1
  567. package/dist/postgres/executor.js +0 -69
  568. package/dist/postgres/executor.js.map +0 -1
  569. package/dist/postgres/index.d.ts +0 -7
  570. package/dist/postgres/index.d.ts.map +0 -1
  571. package/dist/postgres/index.js +0 -7
  572. package/dist/postgres/index.js.map +0 -1
  573. package/dist/postgres/lower.d.ts +0 -6
  574. package/dist/postgres/lower.d.ts.map +0 -1
  575. package/dist/postgres/lower.js +0 -157
  576. package/dist/postgres/lower.js.map +0 -1
  577. package/dist/postgres/print.d.ts +0 -11
  578. package/dist/postgres/print.d.ts.map +0 -1
  579. package/dist/postgres/print.js +0 -121
  580. package/dist/postgres/print.js.map +0 -1
  581. package/dist/postgres/storage.d.ts +0 -19
  582. package/dist/postgres/storage.d.ts.map +0 -1
  583. package/dist/postgres/storage.js +0 -201
  584. package/dist/postgres/storage.js.map +0 -1
  585. package/dist/postgres/textRows.d.ts +0 -10
  586. package/dist/postgres/textRows.d.ts.map +0 -1
  587. package/dist/postgres/textRows.js +0 -44
  588. package/dist/postgres/textRows.js.map +0 -1
  589. package/dist/postgres/validator.d.ts +0 -12
  590. package/dist/postgres/validator.d.ts.map +0 -1
  591. package/dist/postgres/validator.js +0 -46
  592. package/dist/postgres/validator.js.map +0 -1
  593. package/dist/spec/domain/index.d.ts +0 -3
  594. package/dist/spec/domain/index.d.ts.map +0 -1
  595. package/dist/spec/domain/index.js +0 -3
  596. package/dist/spec/domain/index.js.map +0 -1
  597. package/dist/spec/domain/model/ContentState.d.ts +0 -8
  598. package/dist/spec/domain/model/ContentState.d.ts.map +0 -1
  599. package/dist/spec/domain/model/ContentState.js +0 -7
  600. package/dist/spec/domain/model/ContentState.js.map +0 -1
  601. package/dist/spec/domain/model/Entry.d.ts +0 -29
  602. package/dist/spec/domain/model/Entry.d.ts.map +0 -1
  603. package/dist/spec/domain/model/Entry.js +0 -16
  604. package/dist/spec/domain/model/Entry.js.map +0 -1
  605. package/dist/spec/domain/model/Locale.d.ts +0 -30
  606. package/dist/spec/domain/model/Locale.d.ts.map +0 -1
  607. package/dist/spec/domain/model/Locale.js +0 -33
  608. package/dist/spec/domain/model/Locale.js.map +0 -1
  609. package/dist/spec/domain/model/ManifestGrammar.d.ts.map +0 -1
  610. package/dist/spec/domain/model/ManifestGrammar.js +0 -149
  611. package/dist/spec/domain/model/ManifestGrammar.js.map +0 -1
  612. package/dist/spec/domain/model/MediaMimeAccept.d.ts +0 -55
  613. package/dist/spec/domain/model/MediaMimeAccept.d.ts.map +0 -1
  614. package/dist/spec/domain/model/MediaMimeAccept.js +0 -90
  615. package/dist/spec/domain/model/MediaMimeAccept.js.map +0 -1
  616. package/dist/spec/domain/model/RuntimePlan.d.ts.map +0 -1
  617. package/dist/spec/domain/model/RuntimePlan.js +0 -4
  618. package/dist/spec/domain/model/RuntimePlan.js.map +0 -1
  619. package/dist/spec/domain/model/SiteConfig.d.ts +0 -173
  620. package/dist/spec/domain/model/SiteConfig.d.ts.map +0 -1
  621. package/dist/spec/domain/model/SiteConfig.js +0 -13
  622. package/dist/spec/domain/model/SiteConfig.js.map +0 -1
  623. package/dist/spec/domain/model/SqlIr.d.ts.map +0 -1
  624. package/dist/spec/domain/model/SqlIr.js +0 -95
  625. package/dist/spec/domain/model/SqlIr.js.map +0 -1
  626. package/dist/spec/domain/model/index.d.ts +0 -14
  627. package/dist/spec/domain/model/index.d.ts.map +0 -1
  628. package/dist/spec/domain/model/index.js +0 -14
  629. package/dist/spec/domain/model/index.js.map +0 -1
  630. package/dist/spec/domain/service/CloudflareCron.d.ts.map +0 -1
  631. package/dist/spec/domain/service/CloudflareCron.js.map +0 -1
  632. package/dist/spec/domain/service/CrossSchemaChecker.d.ts +0 -34
  633. package/dist/spec/domain/service/CrossSchemaChecker.d.ts.map +0 -1
  634. package/dist/spec/domain/service/CrossSchemaChecker.js +0 -114
  635. package/dist/spec/domain/service/CrossSchemaChecker.js.map +0 -1
  636. package/dist/spec/domain/service/EntryDataValidator.d.ts +0 -56
  637. package/dist/spec/domain/service/EntryDataValidator.d.ts.map +0 -1
  638. package/dist/spec/domain/service/EntryDataValidator.js +0 -88
  639. package/dist/spec/domain/service/EntryDataValidator.js.map +0 -1
  640. package/dist/spec/domain/service/JsonSchemaToZod.d.ts +0 -29
  641. package/dist/spec/domain/service/JsonSchemaToZod.d.ts.map +0 -1
  642. package/dist/spec/domain/service/JsonSchemaToZod.js +0 -156
  643. package/dist/spec/domain/service/JsonSchemaToZod.js.map +0 -1
  644. package/dist/spec/domain/service/LifecycleStateMachine.d.ts +0 -75
  645. package/dist/spec/domain/service/LifecycleStateMachine.d.ts.map +0 -1
  646. package/dist/spec/domain/service/LifecycleStateMachine.js +0 -76
  647. package/dist/spec/domain/service/LifecycleStateMachine.js.map +0 -1
  648. package/dist/spec/domain/service/LocaleCanonicalizer.d.ts +0 -29
  649. package/dist/spec/domain/service/LocaleCanonicalizer.d.ts.map +0 -1
  650. package/dist/spec/domain/service/LocaleCanonicalizer.js +0 -96
  651. package/dist/spec/domain/service/LocaleCanonicalizer.js.map +0 -1
  652. package/dist/spec/domain/service/ManifestFieldChecks.d.ts +0 -60
  653. package/dist/spec/domain/service/ManifestFieldChecks.d.ts.map +0 -1
  654. package/dist/spec/domain/service/ManifestFieldChecks.js +0 -116
  655. package/dist/spec/domain/service/ManifestFieldChecks.js.map +0 -1
  656. package/dist/spec/domain/service/ManifestGraphValidator.d.ts +0 -15
  657. package/dist/spec/domain/service/ManifestGraphValidator.d.ts.map +0 -1
  658. package/dist/spec/domain/service/ManifestGraphValidator.js +0 -225
  659. package/dist/spec/domain/service/ManifestGraphValidator.js.map +0 -1
  660. package/dist/spec/domain/service/ManifestLinker.d.ts +0 -45
  661. package/dist/spec/domain/service/ManifestLinker.d.ts.map +0 -1
  662. package/dist/spec/domain/service/ManifestLinker.js +0 -92
  663. package/dist/spec/domain/service/ManifestLinker.js.map +0 -1
  664. package/dist/spec/domain/service/ManifestLocaleTrimmer.d.ts +0 -16
  665. package/dist/spec/domain/service/ManifestLocaleTrimmer.d.ts.map +0 -1
  666. package/dist/spec/domain/service/ManifestLocaleTrimmer.js +0 -76
  667. package/dist/spec/domain/service/ManifestLocaleTrimmer.js.map +0 -1
  668. package/dist/spec/domain/service/ManifestParser.d.ts +0 -49
  669. package/dist/spec/domain/service/ManifestParser.d.ts.map +0 -1
  670. package/dist/spec/domain/service/ManifestParser.js +0 -203
  671. package/dist/spec/domain/service/ManifestParser.js.map +0 -1
  672. package/dist/spec/domain/service/ManifestPartition.d.ts +0 -9
  673. package/dist/spec/domain/service/ManifestPartition.d.ts.map +0 -1
  674. package/dist/spec/domain/service/ManifestPartition.js +0 -19
  675. package/dist/spec/domain/service/ManifestPartition.js.map +0 -1
  676. package/dist/spec/domain/service/ManifestPathDiagnoser.d.ts +0 -33
  677. package/dist/spec/domain/service/ManifestPathDiagnoser.d.ts.map +0 -1
  678. package/dist/spec/domain/service/ManifestPathDiagnoser.js +0 -43
  679. package/dist/spec/domain/service/ManifestPathDiagnoser.js.map +0 -1
  680. package/dist/spec/domain/service/ManifestSourceSpans.d.ts +0 -10
  681. package/dist/spec/domain/service/ManifestSourceSpans.d.ts.map +0 -1
  682. package/dist/spec/domain/service/ManifestSourceSpans.js +0 -76
  683. package/dist/spec/domain/service/ManifestSourceSpans.js.map +0 -1
  684. package/dist/spec/domain/service/McpToolNaming.d.ts +0 -25
  685. package/dist/spec/domain/service/McpToolNaming.d.ts.map +0 -1
  686. package/dist/spec/domain/service/McpToolNaming.js +0 -50
  687. package/dist/spec/domain/service/McpToolNaming.js.map +0 -1
  688. package/dist/spec/domain/service/PlanFingerprint.d.ts.map +0 -1
  689. package/dist/spec/domain/service/PlanFingerprint.js +0 -14
  690. package/dist/spec/domain/service/PlanFingerprint.js.map +0 -1
  691. package/dist/spec/domain/service/ProcedureViewSpecChecks.d.ts +0 -4
  692. package/dist/spec/domain/service/ProcedureViewSpecChecks.d.ts.map +0 -1
  693. package/dist/spec/domain/service/ProcedureViewSpecChecks.js +0 -211
  694. package/dist/spec/domain/service/ProcedureViewSpecChecks.js.map +0 -1
  695. package/dist/spec/domain/service/SchemaAdminUiChecker.d.ts +0 -42
  696. package/dist/spec/domain/service/SchemaAdminUiChecker.d.ts.map +0 -1
  697. package/dist/spec/domain/service/SchemaAdminUiChecker.js +0 -289
  698. package/dist/spec/domain/service/SchemaAdminUiChecker.js.map +0 -1
  699. package/dist/spec/domain/service/SchemaIndexChecker.d.ts +0 -33
  700. package/dist/spec/domain/service/SchemaIndexChecker.d.ts.map +0 -1
  701. package/dist/spec/domain/service/SchemaIndexChecker.js +0 -256
  702. package/dist/spec/domain/service/SchemaIndexChecker.js.map +0 -1
  703. package/dist/spec/domain/service/SchemaSearchChecker.d.ts +0 -11
  704. package/dist/spec/domain/service/SchemaSearchChecker.d.ts.map +0 -1
  705. package/dist/spec/domain/service/SchemaSearchChecker.js +0 -78
  706. package/dist/spec/domain/service/SchemaSearchChecker.js.map +0 -1
  707. package/dist/spec/domain/service/SchemaSpecChecks.d.ts +0 -31
  708. package/dist/spec/domain/service/SchemaSpecChecks.d.ts.map +0 -1
  709. package/dist/spec/domain/service/SchemaSpecChecks.js +0 -445
  710. package/dist/spec/domain/service/SchemaSpecChecks.js.map +0 -1
  711. package/dist/spec/domain/service/SiteDefaultsValidator.d.ts +0 -39
  712. package/dist/spec/domain/service/SiteDefaultsValidator.d.ts.map +0 -1
  713. package/dist/spec/domain/service/SiteDefaultsValidator.js +0 -194
  714. package/dist/spec/domain/service/SiteDefaultsValidator.js.map +0 -1
  715. package/dist/spec/domain/service/SqlClassify.d.ts +0 -19
  716. package/dist/spec/domain/service/SqlClassify.d.ts.map +0 -1
  717. package/dist/spec/domain/service/SqlClassify.js +0 -42
  718. package/dist/spec/domain/service/SqlClassify.js.map +0 -1
  719. package/dist/spec/domain/service/SqlRefusal.d.ts +0 -16
  720. package/dist/spec/domain/service/SqlRefusal.d.ts.map +0 -1
  721. package/dist/spec/domain/service/SqlRefusal.js +0 -20
  722. package/dist/spec/domain/service/SqlRefusal.js.map +0 -1
  723. package/dist/spec/domain/service/SqlTypes.d.ts +0 -40
  724. package/dist/spec/domain/service/SqlTypes.d.ts.map +0 -1
  725. package/dist/spec/domain/service/SqlTypes.js +0 -110
  726. package/dist/spec/domain/service/SqlTypes.js.map +0 -1
  727. package/dist/spec/domain/service/StaffRoleHierarchy.d.ts +0 -3
  728. package/dist/spec/domain/service/StaffRoleHierarchy.d.ts.map +0 -1
  729. package/dist/spec/domain/service/StaffRoleHierarchy.js +0 -19
  730. package/dist/spec/domain/service/StaffRoleHierarchy.js.map +0 -1
  731. package/dist/spec/domain/service/TriggerGraphChecks.d.ts +0 -16
  732. package/dist/spec/domain/service/TriggerGraphChecks.d.ts.map +0 -1
  733. package/dist/spec/domain/service/TriggerGraphChecks.js +0 -337
  734. package/dist/spec/domain/service/TriggerGraphChecks.js.map +0 -1
  735. package/dist/spec/domain/service/TriggerSpecChecks.d.ts +0 -4
  736. package/dist/spec/domain/service/TriggerSpecChecks.d.ts.map +0 -1
  737. package/dist/spec/domain/service/TriggerSpecChecks.js +0 -89
  738. package/dist/spec/domain/service/TriggerSpecChecks.js.map +0 -1
  739. package/dist/spec/domain/service/ValidatedAdminUiProjection.d.ts +0 -11
  740. package/dist/spec/domain/service/ValidatedAdminUiProjection.d.ts.map +0 -1
  741. package/dist/spec/domain/service/ValidatedAdminUiProjection.js +0 -26
  742. package/dist/spec/domain/service/ValidatedAdminUiProjection.js.map +0 -1
  743. package/dist/spec/domain/service/ViewAdminUiChecker.d.ts +0 -14
  744. package/dist/spec/domain/service/ViewAdminUiChecker.d.ts.map +0 -1
  745. package/dist/spec/domain/service/ViewAdminUiChecker.js +0 -53
  746. package/dist/spec/domain/service/ViewAdminUiChecker.js.map +0 -1
  747. package/dist/spec/domain/service/index.d.ts +0 -24
  748. package/dist/spec/domain/service/index.d.ts.map +0 -1
  749. package/dist/spec/domain/service/index.js +0 -24
  750. package/dist/spec/domain/service/index.js.map +0 -1
  751. package/dist/spec/index.d.ts +0 -10
  752. package/dist/spec/index.d.ts.map +0 -1
  753. package/dist/spec/index.js +0 -12
  754. package/dist/spec/index.js.map +0 -1
  755. package/dist/spec/infrastructure/cli/parseArgsError.d.ts +0 -16
  756. package/dist/spec/infrastructure/cli/parseArgsError.d.ts.map +0 -1
  757. package/dist/spec/infrastructure/cli/parseArgsError.js +0 -34
  758. package/dist/spec/infrastructure/cli/parseArgsError.js.map +0 -1
  759. package/dist/spec/infrastructure/index.d.ts +0 -2
  760. package/dist/spec/infrastructure/index.d.ts.map +0 -1
  761. package/dist/spec/infrastructure/index.js +0 -2
  762. package/dist/spec/infrastructure/index.js.map +0 -1
  763. package/dist/spec/infrastructure/sql/PgQueryParser.d.ts +0 -18
  764. package/dist/spec/infrastructure/sql/PgQueryParser.d.ts.map +0 -1
  765. package/dist/spec/infrastructure/sql/PgQueryParser.js +0 -17
  766. package/dist/spec/infrastructure/sql/PgQueryParser.js.map +0 -1
  767. package/dist/spec/infrastructure/sql/compilePlan.d.ts +0 -37
  768. package/dist/spec/infrastructure/sql/compilePlan.d.ts.map +0 -1
  769. package/dist/spec/infrastructure/sql/compilePlan.js +0 -282
  770. package/dist/spec/infrastructure/sql/compilePlan.js.map +0 -1
  771. package/dist/spec/infrastructure/sql/compileSql.d.ts +0 -35
  772. package/dist/spec/infrastructure/sql/compileSql.d.ts.map +0 -1
  773. package/dist/spec/infrastructure/sql/compileSql.js +0 -92
  774. package/dist/spec/infrastructure/sql/compileSql.js.map +0 -1
  775. package/dist/spec/infrastructure/sql/frontEnd.d.ts +0 -8
  776. package/dist/spec/infrastructure/sql/frontEnd.d.ts.map +0 -1
  777. package/dist/spec/infrastructure/sql/frontEnd.js +0 -100
  778. package/dist/spec/infrastructure/sql/frontEnd.js.map +0 -1
  779. package/dist/spec/infrastructure/sql/index.d.ts +0 -4
  780. package/dist/spec/infrastructure/sql/index.d.ts.map +0 -1
  781. package/dist/spec/infrastructure/sql/index.js +0 -4
  782. package/dist/spec/infrastructure/sql/index.js.map +0 -1
  783. package/dist/spec/kernel/diagnostic.d.ts.map +0 -1
  784. package/dist/spec/kernel/diagnostic.js +0 -296
  785. package/dist/spec/kernel/diagnostic.js.map +0 -1
  786. package/dist/spec/kernel/index.d.ts +0 -8
  787. package/dist/spec/kernel/index.d.ts.map +0 -1
  788. package/dist/spec/kernel/index.js +0 -8
  789. package/dist/spec/kernel/index.js.map +0 -1
  790. package/dist/spec/usecase/EmitTypes.d.ts +0 -22
  791. package/dist/spec/usecase/EmitTypes.d.ts.map +0 -1
  792. package/dist/spec/usecase/EmitTypes.js +0 -182
  793. package/dist/spec/usecase/EmitTypes.js.map +0 -1
  794. package/dist/spec/usecase/ValidateManifestsUseCase.d.ts +0 -8
  795. package/dist/spec/usecase/ValidateManifestsUseCase.d.ts.map +0 -1
  796. package/dist/spec/usecase/ValidateManifestsUseCase.js +0 -101
  797. package/dist/spec/usecase/ValidateManifestsUseCase.js.map +0 -1
  798. package/dist/spec/usecase/dto/ValidateManifestsRequest.d.ts +0 -27
  799. package/dist/spec/usecase/dto/ValidateManifestsRequest.d.ts.map +0 -1
  800. package/dist/spec/usecase/dto/ValidateManifestsRequest.js +0 -2
  801. package/dist/spec/usecase/dto/ValidateManifestsRequest.js.map +0 -1
  802. package/dist/spec/usecase/dto/ValidateManifestsResponse.d.ts +0 -14
  803. package/dist/spec/usecase/dto/ValidateManifestsResponse.d.ts.map +0 -1
  804. package/dist/spec/usecase/dto/ValidateManifestsResponse.js +0 -2
  805. package/dist/spec/usecase/dto/ValidateManifestsResponse.js.map +0 -1
  806. package/dist/spec/usecase/dto/index.d.ts +0 -3
  807. package/dist/spec/usecase/dto/index.d.ts.map +0 -1
  808. package/dist/spec/usecase/dto/index.js +0 -3
  809. package/dist/spec/usecase/dto/index.js.map +0 -1
  810. package/dist/spec/usecase/index.d.ts +0 -10
  811. package/dist/spec/usecase/index.d.ts.map +0 -1
  812. package/dist/spec/usecase/index.js +0 -10
  813. package/dist/spec/usecase/index.js.map +0 -1
  814. package/dist/testing/cases/before-hook.d.ts +0 -4
  815. package/dist/testing/cases/before-hook.d.ts.map +0 -1
  816. package/dist/testing/cases/before-hook.js +0 -71
  817. package/dist/testing/cases/before-hook.js.map +0 -1
  818. package/dist/testing/cases/corpus.d.ts +0 -12
  819. package/dist/testing/cases/corpus.d.ts.map +0 -1
  820. package/dist/testing/cases/corpus.js +0 -91
  821. package/dist/testing/cases/corpus.js.map +0 -1
  822. package/dist/testing/cases/policy.d.ts +0 -74
  823. package/dist/testing/cases/policy.d.ts.map +0 -1
  824. package/dist/testing/cases/policy.js +0 -142
  825. package/dist/testing/cases/policy.js.map +0 -1
  826. package/dist/testing/cases/printer.d.ts +0 -4
  827. package/dist/testing/cases/printer.d.ts.map +0 -1
  828. package/dist/testing/cases/printer.js +0 -32
  829. package/dist/testing/cases/printer.js.map +0 -1
  830. package/dist/testing/cases/report-view.d.ts +0 -5
  831. package/dist/testing/cases/report-view.d.ts.map +0 -1
  832. package/dist/testing/cases/report-view.js +0 -33
  833. package/dist/testing/cases/report-view.js.map +0 -1
  834. package/dist/testing/cases/requisition.d.ts +0 -4
  835. package/dist/testing/cases/requisition.d.ts.map +0 -1
  836. package/dist/testing/cases/requisition.js +0 -38
  837. package/dist/testing/cases/requisition.js.map +0 -1
  838. package/dist/testing/cases/search-places.d.ts +0 -4
  839. package/dist/testing/cases/search-places.d.ts.map +0 -1
  840. package/dist/testing/cases/search-places.js +0 -60
  841. package/dist/testing/cases/search-places.js.map +0 -1
  842. package/dist/testing/cases/stock.d.ts +0 -4
  843. package/dist/testing/cases/stock.d.ts.map +0 -1
  844. package/dist/testing/cases/stock.js +0 -35
  845. package/dist/testing/cases/stock.js.map +0 -1
  846. package/dist/testing/cases/store.d.ts +0 -4
  847. package/dist/testing/cases/store.d.ts.map +0 -1
  848. package/dist/testing/cases/store.js +0 -100
  849. package/dist/testing/cases/store.js.map +0 -1
  850. package/dist/testing/harness.d.ts +0 -94
  851. package/dist/testing/harness.d.ts.map +0 -1
  852. package/dist/testing/harness.js +0 -168
  853. package/dist/testing/harness.js.map +0 -1
  854. package/dist/testing/index.d.ts.map +0 -1
  855. package/dist/testing/index.js.map +0 -1
  856. package/dist/testing/report.d.ts +0 -15
  857. package/dist/testing/report.d.ts.map +0 -1
  858. package/dist/testing/report.js +0 -22
  859. package/dist/testing/report.js.map +0 -1
  860. package/dist/web/createRestSurface.d.ts +0 -7
  861. package/dist/web/createRestSurface.d.ts.map +0 -1
  862. package/dist/web/createRestSurface.js +0 -41
  863. package/dist/web/createRestSurface.js.map +0 -1
  864. package/dist/web/index.d.ts +0 -2
  865. package/dist/web/index.d.ts.map +0 -1
  866. package/dist/web/index.js +0 -2
  867. package/dist/web/index.js.map +0 -1
  868. package/docs/adr/0001-four-atom-manifest-model.md +0 -440
  869. package/docs/adr/0002-closed-enums-for-bindings.md +0 -253
  870. package/docs/adr/0007-ai-as-primary-author.md +0 -473
  871. package/docs/adr/0008-structured-diagnostic-shape.md +0 -338
  872. package/docs/adr/0009-consumer-supplied-manifests.md +0 -149
  873. package/docs/adr/0010-locale-and-translates.md +0 -453
  874. package/docs/adr/0011-adapter-port-spec.md +0 -281
  875. package/docs/adr/0012-views-as-public-rest.md +0 -161
  876. package/docs/adr/0013-agent-provisioned-consumer-projects.md +0 -154
  877. package/docs/adr/0014-auth-better-auth-and-multi-tenant-mcp.md +0 -939
  878. package/docs/adr/0016-site-semantic-layer.md +0 -70
  879. package/docs/adr/0017-media-multi-variant-agent-side-optimization.md +0 -181
  880. package/docs/adr/0018-core-starters-repository-boundary.md +0 -179
  881. package/docs/adr/0019-sealed-manifest-runtime-pipeline.md +0 -244
  882. package/docs/adr/0020-builtin-handler-contracts-and-matched-upsert.md +0 -199
  883. package/docs/adr/0021-retire-starter-scaffolding.md +0 -30
  884. package/docs/adr/0022-caller-observed-version-occ.md +0 -212
  885. package/docs/adr/0023-port-failure-contract.md +0 -69
  886. package/docs/adr/0024-manifest-native-schema-tables.md +0 -264
  887. package/docs/adr/0025-reserved-native-columns-and-published-only-public-views.md +0 -105
  888. package/docs/adr/0026-progressive-generate.md +0 -36
  889. package/docs/adr/0027-scheduled-procedure-triggers.md +0 -31
  890. package/docs/adr/0028-schema-ttl-expiry.md +0 -33
  891. package/docs/adr/0029-mcp-apps-interaction-contracts.md +0 -324
  892. package/docs/adr/0030-store.md +0 -40
  893. package/docs/adr/0031-host-cloud-core-contract.md +0 -102
  894. package/docs/adr/0032-store-centric-core-and-service-contract.md +0 -384
  895. package/docs/adr/0033-storage-converges-to-the-plan.md +0 -92
  896. package/docs/adr/0034-store-is-authored-as-sql.md +0 -192
  897. package/docs/adr/0035-sql-dialects.md +0 -154
  898. package/docs/adr/0036-host-and-dialect.md +0 -65
  899. package/docs/adr/0037-postgresql-is-the-reference-dialect.md +0 -124
  900. package/docs/adr/0038-bun-native-host.md +0 -63
  901. package/docs/adr/README.md +0 -96
  902. package/docs/adr/adr-lite-803-request-diagnostics.md +0 -38
  903. package/docs/adr/adr-lite-808-route-readiness.md +0 -47
  904. package/docs/adr/adr-lite-809-bounded-public-content.md +0 -71
  905. package/docs/adr/adr-lite-812-native-parity.md +0 -150
  906. package/docs/adr/adr-lite-823-home-statistics.md +0 -64
  907. package/docs/adr/adr-lite-842-mcp-authoring.md +0 -30
  908. package/docs/adr/adr-lite-845-frontend-client.md +0 -38
  909. package/docs/adr/adr-lite-861-admin-webmcp.md +0 -48
  910. package/docs/adr/adr-lite-909-admin-ui-kit.md +0 -37
  911. package/docs/examples/commerce-inventory.md +0 -481
  912. package/docs/examples/commerce.md +0 -254
  913. package/docs/examples/guarded-api.md +0 -238
  914. package/docs/examples/intake-hooks.md +0 -237
  915. package/docs/examples/intake.md +0 -127
  916. package/docs/examples/legal-documents.md +0 -218
  917. package/docs/examples/procurement.md +0 -226
  918. package/docs/examples/publication.md +0 -211
  919. package/docs/examples/reference-service/.mantle/generated/mantle.ts +0 -174
  920. package/docs/examples/reference-service/.mantle/generated/plan.json +0 -1936
  921. package/docs/examples/reference-service/README.md +0 -33
  922. package/docs/examples/reference-service/manifests/catalog.yaml +0 -103
  923. package/docs/examples/reference-service/manifests/orders.yaml +0 -120
  924. package/docs/examples/reference-service/mantle.config.json +0 -1
  925. package/docs/examples/reference-service/package.json +0 -27
  926. package/docs/examples/reference-service/smoke.mjs +0 -160
  927. package/docs/examples/reference-service/src/handlers.ts +0 -36
  928. package/docs/examples/reference-service/src/index.ts +0 -33
  929. package/docs/examples/reference-service/src/service.ts +0 -78
  930. package/docs/examples/reference-service/wrangler.jsonc +0 -26
  931. package/docs/examples/reservation.md +0 -142
  932. /package/docs/examples/{reference-service → app-shell}/.dev.vars.example +0 -0
@@ -1,79 +1,39 @@
1
1
  # Recipe: an MCP App for members
2
2
 
3
- The preset serves Mantle's App on `/mcp/staff` only. A member-facing App, on
4
- `/mcp`, is the application's: the SDK attaches none, because what a member
5
- should see in a chat (one order, a booking form, a status card) is a product
6
- decision. Build it case by case from these pieces.
7
-
8
- ## Pieces
9
-
10
- | Piece | From | What it gives |
11
- |---|---|---|
12
- | `apps: { resources: [...] }` | `createMcpSurface` (`@aotter/mantle/mcp`) | a `ui://` resource beside the tools; `renders` names the tools whose results it shows, `appOnly` the View tools only the App may call |
13
- | `appCatalog(plan, "public")`, `withCatalog(html, catalog)` | `@aotter/mantle/mcp` | each public View tool's columns as the fields they read, and the row operations, embedded in your HTML as `#mantle-catalog` |
14
- | `planApp(plan, { surface: "public", html: mantleAppHtml })` | `@aotter/mantle/mcp`, `@aotter/mantle-ui/mcp-app` | the staff App as is, for every public View: the quickest start when a list is what you want |
15
- | `App` | `@modelcontextprotocol/ext-apps` | the host bridge: `ontoolresult`, `ontoolinput`, `callServerTool`, the host's locale and theme |
16
- | `readCatalog`, `toolOf`, `outputOf`, `rowsOf`, `invokeTool`, `actionsFor` | `@aotter/mantle-ui` | the catalog, a result's tool, its output and rows, and a tool call as the controller reads it, so the App never parses the wire itself |
17
- | `renderDataValue`, `propertyLabel`, `optionLabel`, `OperationPanel` | `@aotter/mantle-ui` | a value as Admin shows it (money, dates, option titles, in the host's locale), and Admin's review-and-submit panel |
18
- | `createInteractionController` | `@aotter/mantle-ui/controller` | one operation on one row: review, submit once, a refusal or `CONFLICT` kept, never retried |
19
- | `SchemaFields` and the primitives | `@aotter/mantle-ui/kit`, styled by `@aotter/mantle-ui/kit.css` | Admin's form controls |
20
-
21
- The App's own build installs what it imports: `@modelcontextprotocol/ext-apps`
22
- at the exact version in the installed Core's `peerDependencies`, React and the kit's peers
23
- (`@aotter/mantle-ui`'s README lists them). `docs/handbook/concepts/mcp-and-agents.md`
24
- (MCP Apps) describes the catalog and the staff App these share.
25
-
26
- ## Steps
27
-
28
- 1. Decide what the App shows and which tool's result opens it. It renders a
29
- tool the surface already serves: a public View, or a Procedure with an
30
- `mcp` Trigger on `public`. Add that Trigger or View first; an App never
31
- reaches data a tool does not.
32
- 2. Build one self-contained HTML file, for example `app/dist/member.html`:
33
- Vite with `vite-plugin-singlefile` (and React, if you use the components).
34
- A host loads the App in a sandbox that fetches nothing else unless the
35
- resource's `csp` allows it. The build runs before `wrangler dev` and
36
- deploy: add it to the project's scripts.
37
- 3. Serve it. Wrangler imports `.html` as text; declare it for TypeScript in
38
- `src/env.d.ts` (`declare module "*.html" { const html: string; export default html; }`),
39
- then in `src/service.ts` (identity `mantle`, whose preset defines
40
- `resourceMetadata`; with `custom`, pass the surface to your own `guard`):
41
-
42
- ```ts
43
- import memberHtml from "../app/dist/member.html";
44
- import { appCatalog, withCatalog } from "@aotter/mantle/mcp";
45
-
46
- const html = withCatalog(memberHtml, appCatalog(runtime.plan, "public"));
47
- const mcp = guard(createMcpSurface(runtime, { basePath: "/mcp", surface: "public", resourceMetadata,
48
- apps: { resources: [{ uri: "ui://shop/my-orders", name: "my-orders", html, renders: ["my_orders"] }] } }), { resourceMetadata });
49
- ```
50
-
51
- 4. In the App, `readCatalog()` once; in `ontoolresult`, `toolOf(result)` names
52
- the tool and `outputOf(result)` (or `rowsOf` for a View) is its data. A
53
- success is `structuredContent` when the output is an object and the JSON
54
- text otherwise; a failure of a tool with an output schema is the text
55
- alone, which `outputOf` reads either way. Call tools through
56
- `invokeTool(app.callServerTool…)`: a refusal is `{ ok: false, diagnostics }`
57
- (`AUTH_DENIED`, `CONFLICT`, ...), and a thrown call (a 401 or 403 from a
58
- missing scope or sign-in, a lost connection) is an unknown outcome to
59
- re-read, never to retry blindly.
60
-
61
- ## Rules
62
-
63
- - The HTML is a static asset: no caller data, no secrets, the same for every
64
- member. Caller data arrives only in tool results.
65
- - Every read and write is a tool call under the member's own token; `requires`
66
- and `scope` apply exactly as they do to the model's calls.
67
- - `appOnly` hides a read from the model; only a View can be app-only, never a
68
- write.
69
- - A public View over a `publishing` Schema shows published rows only; over a
70
- `scope`d Schema it shows the caller's own rows, without a `WHERE` of yours.
71
-
72
- ## Verify
73
-
74
- Add the App's build to the develop loop, then: `tools/list` from a client that
75
- declares the MCP Apps extension shows the rendered tool with
76
- `_meta.ui.resourceUri`; `resources/read` of that URI returns your HTML with
77
- `#mantle-catalog`; a call to the tool returns its result with
78
- `_meta["net.aotter.mantle/tool"]`. Then open it in a host that renders MCP
79
- Apps, signed in as a member.
3
+ ## Native applications
4
+
5
+ Read the installed MCP App contract. The SDK's generic hook attaches only the resources the app selects;
6
+ only selected modules enter the service.
7
+
8
+ ```ts
9
+ import type { McpApps } from '@aotter/mantle/mcp';
10
+ import { mcp } from '../generated/mcp.js';
11
+ const memberApp: McpApps = { resources: [{
12
+ uri: 'ui://shop/my-orders',
13
+ name: 'my-orders-app',
14
+ renders: ['my_orders'], // the tool for the declared public View my-orders
15
+ html: async () => (await import('./member-app.js')).memberHtml,
16
+ }] };
17
+ const tools = mcp({ db, caller, handlers, apps: { public: memberApp } });
18
+ ```
19
+
20
+ Each endpoint accepts one contributor or an array. The separate
21
+ `@aotter/mantle-admin` package contributes its admin App through this same
22
+ `apps.admin` hook; it owns `ui://mantle-admin/…`. App resources use their own
23
+ `ui://<app>/…` namespace. Duplicate resource URI/name, conflicting `renders`,
24
+ or `renders`/`appOnly` naming an unavailable endpoint tool (or a Procedure for
25
+ `appOnly`) fail when `mcp(...)` is built; with a request-bound tool table, the
26
+ tool names are checked on the first matching request. Only clients that
27
+ declare no MCP Apps support see no UI resources; a request that advertises no
28
+ capabilities at all is treated as supported.
29
+
30
+ Use `renders` for a declared tool; `appOnly` optionally hides it from non-UI
31
+ clients. Import HTML lazily; it carries no secrets or caller data. Tool results
32
+ use the caller's SQL policy, and an App cannot authorize a hidden admin tool.
33
+ Generic interaction components and controllers remain in `@aotter/mantle-ui`;
34
+ Admin-specific controllers/catalogues belong to `@aotter/mantle-admin`.
35
+
36
+ Verify tools/list metadata, resources/read, actual tool calls and a host-rendered
37
+ member App. Test anonymous/member isolation and resource conflicts. Never retry
38
+ unknown writes blindly; retain OCC and re-read state after an uncertain outcome.
39
+ Commit generated output and run generation with `--check` before deployment.
@@ -10,87 +10,45 @@ metadata:
10
10
 
11
11
  # Integrate Mantle into an existing application
12
12
 
13
- Mantle is added to a running service; it does not replace it. The service
14
- keeps its entry, users, auth, tables, routes and frontend. Mantle adds its own
15
- `_mantle_*` tables, the Schemas it declares, and the surfaces the service
16
- chooses to mount. Read the installed package's
17
- `docs/handbook/start/overview.md` and
18
- `docs/handbook/concepts/authorization.md` first.
19
-
20
- ## Inspect and decide
21
-
22
- Map the application before installing anything: its entry and router, frontend,
23
- users and sign-in, database and data volume, deployment, background jobs and
24
- tests. Ask which behavior the owner wants Mantle to own. Then choose:
25
-
26
- 1. **Embed.** Keep the application's entry. Compose Mantle into its existing
27
- `fetch` (`createMantle(service, { plan, storage })`, the surfaces you want,
28
- behind a `CallerResolver` over the application's own sessions). Best when
29
- the application already runs on Workers with D1.
30
- 2. **Move one capability at a time.** Give one bounded set of data (a form, a
31
- catalog) a Schema, then its Views and Procedures; the rest stays. At every
32
- step, each table has exactly one writer.
33
- 3. **Rebuild and migrate.** Generate a new Mantle service in a separate
34
- directory, port the frontend and business rules, and import the data. Best
35
- when adapting the old structure costs more than rebuilding.
36
-
37
- Explain the choice and its tradeoffs to the owner before changing code.
38
-
39
- ## Identity
40
-
41
- The application keeps its users. Pick `identity`:
42
-
43
- - `custom`: write `src/identity.ts` as a `CallerResolver` over the existing
44
- sessions or tokens. `subject` is the application's stable user id,
45
- namespaced when there are several issuers, never an email. Map existing
46
- admin roles to `owner` / `editor` / `contributor`, or leave `role` null.
47
- - `mantle`: only when the application has no sign-in and wants Better Auth's.
48
- - `none`: a public service with no signed-in callers.
49
-
50
- Switching identity later is refused; choose deliberately.
51
-
52
- ## Embedding into an existing entry
53
-
54
- `mantle generate` writes the preset only where `src/service.ts` does not
55
- exist; `--host none` writes no preset at all, only the plan and its types.
56
- For an application with its own entry, generate in a scratch
57
- directory with the same manifests and config, then copy the composition you
58
- need from the generated `src/service.ts` into the application's own entry:
59
-
60
- - the `createMantle(service, { plan, storage: (env) => d1Storage(env.DB), schedules: true })` call;
61
- - `withCaller(resolver, createRestSurface(runtime, { basePath: "/api" }))`
62
- and any other surface, mounted on paths the application does not use;
63
- - the `scheduled` mapping from `src/index.ts`, if the plan has schedules.
64
-
65
- Put that composition in the application's `src/service.ts` before the first
66
- `mantle generate` inside the application: while `src/service.ts` is missing,
67
- generate writes every missing preset file (`src/service.ts`, `src/index.ts`,
68
- `src/handlers.ts`, `src/identity.ts` for `custom`, `tsconfig.json`,
69
- `.gitignore`, `.dev.vars.example` for `mantle`, and `wrangler.jsonc` unless a
70
- `wrangler.*` exists; on Bun `.env.example` and no `wrangler.jsonc`) beside the
71
- application's own.
72
- Commit `.mantle/generated/` and run `mantle generate --check` in CI.
73
-
74
- ## Moving data into a Schema
75
-
76
- - Mantle never reads or writes a table it did not create. A table with a
77
- Schema's name that Mantle does not own stops boot
78
- (`STORAGE_TABLE_NOT_OWNED`); give the Schema a new name.
79
- - Import through `runtime.store` in trusted code. A scoped row goes through
80
- `runtime.store.as(<its owner's caller>)`, so the owner field is right.
81
- `status`, timestamps and `author_id` cannot be imported: publish with a
82
- second update that sets `status`.
83
- - Rehearse on a copy, compare row counts, and keep the old table until the
84
- owner confirms. Never touch live data before the cutover is agreed.
85
-
86
- ## Verify
87
-
88
- Run the application's own build and tests, then `mantle generate --check`,
89
- the typecheck, and real requests against the routes Mantle now serves, as the
90
- right callers (owner, member, anonymous). `--check` proves the generated files;
91
- it does not prove the integration.
92
-
93
- ## When you are done
94
-
95
- Report which capabilities Mantle now owns, the identity mapping, what moved and
96
- how it was verified, and what remains for cutover or deployment.
13
+ ## Workflow
14
+
15
+ Read the installed SDK README and version-matched handbook before editing.
16
+
17
+ Follow the installed [native generation and service workflow](../../handbook/cloudflare/service-entry.md)
18
+ with its [native contract](../../handbook/guides/native-execution.md) and [supported declarations](../../handbook/reference/features.md). Commit
19
+ all generated output, run the same generation command with `--check`, and keep
20
+ bundle `dist/` untracked. The app owns its verified Caller, handlers and native
21
+ resources; Better Auth’s admin plugin `adminRoles` defines the admin layer (default `["admin"]`); `ctx.admin` accepts open role names.
22
+
23
+ Keep the application router, database/pool, identity and frontend. Replace
24
+ Core consumers explicitly and compose only selected generated entries. Resolve
25
+ one Caller per request with the shared cookie-session origin check. Rehearse
26
+ data-preserving schema/auth/role migrations on a copy and retain rollback artifacts.
27
+ Initial schema.sql is for an empty database, not an in-place upgrade. Requests run
28
+ no DDL or storage checks; the only request-time write outside app operations is
29
+ the configured OAuth resource row (see [OAuth](../../handbook/guides/oauth.md)).
30
+ Verify cutover with actual app tests.
31
+
32
+ Preserve the app router, verified identity and native resources. For selected
33
+ Admin use the [native guide](../../handbook/guides/native-admin.md): three matching
34
+ packages, generated checks and `entries(bindings.schemas, bindings.adapter)`.
35
+ Do not import old `/spec`, `/core` or runtime surface APIs. Review data/role
36
+ migrations explicitly; full cross-target int64 parity and automated transfer
37
+ are not this release's upgrade contract.
38
+
39
+ ## Partial adoption in TypeScript/Node
40
+
41
+ Keep the app's router, pool/handle, identity and frontend. Declare only the Schemas and operations being adopted; import selected `views/<encoded-name>.ts` or `procedures/<encoded-name>.ts`, then call `(appHandle, verifiedCaller, validatedInput)`. Bun.SQL and postgres.js fit directly; [node-postgres can adapt](../../handbook/guides/postgres-adapters.md). No Admin/auth/surface module is required for direct queries.
42
+
43
+ Existing tables need explicit migration into the declared storage shape, including system columns and constraints. Initial schema.sql must not be applied over an occupied database. Rehearse on a copy and test scope, TTL, publication, OCC and persisted state with the app's own identity.
44
+
45
+ Writes use Store or declared Procedures; never raw SQL writes to adopted collections. Use internal Views for joins, aggregates, OR and reusable reads. Store findById/find/first remain useful for simple AND lookups in existing handlers.
46
+
47
+ Direct declared Schema-column outputs in Views and SQL Procedure `RETURNING`
48
+ keep their authored field names; explicit aliases keep SQL casing rules. Store
49
+ rows and nested SQL relations use storage names. Boundary validators support a
50
+ permissive `format: email` check (one `@`, non-empty parts, no whitespace). For
51
+ LEFT JOIN paging, join on the joined Schema's id or single-field unique key and
52
+ keep the base indexed, non-null order/id tuple. Generation always emits `Handlers`
53
+ (empty without ref Procedures); pass `handlers` at `adminBindings()`, generated REST/MCP options and
54
+ `webmcpRoutes(catalogue, tools, handlers)`, as the app shell does.
@@ -11,14 +11,25 @@ metadata:
11
11
 
12
12
  # Mantle Media GC
13
13
 
14
+ ## Generated native applications (alpha.7 and later)
15
+
16
+ If the installed README describes generated native queries, read
17
+ `docs/handbook/cloudflare/media-r2.md` and app-owned site/media wiring instead of Core storage
18
+ options. Resolve the exact configured bucket and declared purposes. The
19
+ `uploads/` candidate audit below still applies. Committed copies live under
20
+ `committed/` and must never be candidates. Attempt-isolated committed copies
21
+ retained after an uncertain DB outcome require reconciliation with live DB
22
+ references before any separately authorized cleanup.
23
+
14
24
  Use the connected Cloudflare API. Audit by default; delete only the exact
15
25
  objects approved by the user.
16
26
 
17
27
  ## Preflight
18
28
 
19
- 1. Read `wrangler.jsonc` and `src/service.ts`. Resolve the R2 bucket that
20
- `r2MediaStorage` uses and the media purpose names in the site defaults
21
- passed to `d1Storage(db, { site })`.
29
+ 1. Read `wrangler.jsonc`, the app-owned entry (`src/worker.ts` by default,
30
+ or the generation command's `--entry`) and its media wiring. Resolve the R2
31
+ bucket that `r2MediaStorage` uses and the media purpose names in
32
+ `siteDefaults.media.purposes` selected by `--site`.
22
33
  2. Confirm the exact Cloudflare account and bucket. If either is ambiguous,
23
34
  ask; never choose by name similarity.
24
35
  3. Use the Cloudflare OpenAPI search before execution to resolve the current
@@ -11,91 +11,28 @@ metadata:
11
11
 
12
12
  # Provision a Mantle project
13
13
 
14
- Provision only after the user asks to create remote resources or ship. Read the
15
- installed `docs/handbook/cloudflare/deploy-and-operate.md` and
16
- `docs/handbook/cloudflare/authentication.md` first.
17
-
18
- ## Choose the target
19
-
20
- Ask which target, unless the project already shows one.
21
-
22
- | Target | Config | Follow |
23
- |---|---|---|
24
- | Cloudflare Workers | `wrangler.jsonc` | the rest of this skill |
25
- | ChatGPT Sites | the Site's hosting config | installed `docs/handbook/cloudflare/chatgpt-sites.md`; publish through Sites, never `wrangler deploy` |
26
- | Mantle Cloud | Cloud project link | the plugin's `mantle` skill and its Cloud workflow; connect Cloud MCP and use its exact host contract, not `wrangler deploy` |
27
- | Bun (host `bun`) | `.env` | self-hosted; installed `docs/handbook/start/project-and-cli.md` (Bun), not this skill |
28
-
29
- Self-hosting is always an option; never present a hosted target as required.
30
-
31
- ## Local gate
32
-
33
- ```bash
34
- pnpm install --frozen-lockfile
35
- pnpm exec mantle generate --check
36
- pnpm exec tsc --noEmit
37
- git status --short
38
- ```
39
-
40
- Confirm the active Cloudflare account with the user before creating anything.
41
-
42
- ## Cloudflare
43
-
44
- 1. **Database.** `pnpm exec wrangler d1 create <name>` and put the
45
- `database_id` into `wrangler.jsonc`'s `d1_databases[0]`, keeping the
46
- binding `DB`. With dialect `postgres`, instead run
47
- `pnpm exec wrangler hyperdrive create <name> --caching-disabled --connection-string=...`
48
- (the connection string by hidden input) and replace the placeholder id in
49
- `hyperdrive[0]`, keeping the binding `HYPERDRIVE`. An existing 0.1.x
50
- database is never reused: 0.2 starts on a new one.
51
- 2. **Origin.** Set `PUBLIC_ORIGIN` in `vars` to the deployed HTTPS origin.
52
- Update it together with any OAuth callback when a custom domain is added.
53
- 3. **Sign-in (identity `mantle`).** Choose one production method and edit
54
- `src/service.ts`; never deploy `ConsoleEmailSender`:
55
- - **Email OTP or magic link** with the application's own `EmailSender`
56
- over its email provider, `bootstrapOwner: { match: "email", value }`.
57
- - **GitHub**: `{ kind: "social", provider: "github", options: { clientId, clientSecret } }`
58
- and `bootstrapOwner: { match: "github-login", value }`. The user creates a
59
- GitHub OAuth App with callback `<PUBLIC_ORIGIN>/api/auth/callback/github`.
60
- Remove the preset's loopback-only check once the method is real.
61
- 4. **Secrets.** Never commit them or put them in chat, logs or `wrangler.jsonc`
62
- `vars`. Store production values in the deployment's secret store. Use a
63
- connector, or hidden input:
64
-
65
- ```bash
66
- openssl rand -hex 32 | pnpm exec wrangler secret put BETTER_AUTH_SECRET
67
- read -rsp "GitHub client secret: " S && printf '%s' "$S" | pnpm exec wrangler secret put GITHUB_CLIENT_SECRET; unset S
68
- ```
69
-
70
- Set `BETTER_AUTH_SECRET` once; rotating it signs everyone out.
71
- 5. **Optional bindings.** R2 for media only when asked
72
- (`docs/handbook/cloudflare/media-r2.md`).
73
- 6. **Deploy.** `pnpm exec wrangler deploy`. The first request creates the
74
- tables. Later Schema changes on D1: run
75
- `mantle generate --check --database <local SQLite file>` (local D1 under
76
- `.wrangler/state/v3/d1/`, which must have run the plan now deployed) before
77
- each deploy and resolve any blocked change by hand.
78
-
79
- Commit and push only non-secret changes.
80
-
81
- ## Verify the deployed service
82
-
83
- - A public View and an HTTP Trigger answer.
84
- - Sign-in works with the production method; the owner gets
85
- `GET /admin/api/me` → `owner`, a second account gets 403.
86
- - `/mcp` answers `tools/list`, and an anonymous call to a protected tool is
87
- 401 with a `WWW-Authenticate` challenge. When every public tool `requires` a
88
- caller, anonymous `initialize` and `tools/list` are already that 401.
89
- - Every enabled schedule appears in the Worker's cron triggers.
90
-
91
- ## Handoff
92
-
93
- Return the public origin, the sign-in method and who the owner is, the MCP
94
- URL (`<origin>/mcp`), the resources created or reused, and anything deferred.
95
-
96
- ## Don't
97
-
98
- - Don't create remote resources before the user asks to ship.
99
- - Don't commit secrets or put them in `wrangler.jsonc` `vars`.
100
- - Don't point a 0.2 service at a 0.1.x database.
101
- - Don't patch `site_config` or `_mantle_*` tables; boot owns them.
14
+ ## Workflow
15
+
16
+ Read the installed SDK README and version-matched handbook before editing.
17
+
18
+ Follow the installed [native generation and service workflow](../../handbook/cloudflare/service-entry.md)
19
+ with its [native contract](../../handbook/guides/native-execution.md) and [supported declarations](../../handbook/reference/features.md). Commit
20
+ all generated output, run the same generation command with `--check`, and keep
21
+ bundle `dist/` untracked. The app owns its verified Caller, handlers and native
22
+ resources; Better Auth’s admin plugin `adminRoles` defines the admin layer (default `["admin"]`); `ctx.admin` accepts open role names.
23
+
24
+ Deploy/create resources only within the user's authorization; reuse configured
25
+ host resources. Apply reviewed and rehearsed migrations before routing traffic;
26
+ imports/first requests perform no DDL or schema checks. Keep auth dynamic, production
27
+ secrets in the host store, trusted HTTPS origin and verified bootstrap rule,
28
+ production email and selected media wiring. Configure Admin ASSETS worker-first
29
+ as in [Workers assets and secrets](../../handbook/cloudflare/service-entry.md#workers-assets-and-secrets). Hyperdrive caching stays off; PG settings are deployment-owned.
30
+ Bun uses native Database/SQL, an app server and scheduler. Verify admin sign-in
31
+ (role admin), denied access, public reads, a persisted write, MCP and selected UI.
32
+ Report artifact/resources/checks and keep rollback artifacts.
33
+
34
+ Use the installed [Native Admin](../../handbook/guides/native-admin.md) asset
35
+ contract and `entries(bindings.schemas, bindings.adapter)`. Admin SPA assets
36
+ belong to `@aotter/mantle-admin`, while UI supplies the shared kit. Verify both
37
+ member and admin OTP/UI flows. Deployment of an authorized application does
38
+ not authorize SDK publication; a workspace preview remains a preview.
@@ -10,47 +10,26 @@ metadata:
10
10
 
11
11
  # Mantle Update
12
12
 
13
- Upgrade deliberately; never overwrite application-owned code.
13
+ ## Workflow
14
14
 
15
- 1. Inspect `git status`, `package.json`, the lockfile and the installed
16
- `@aotter/mantle` version. Keep unrelated local changes. Work on a branch.
17
- 2. Choose an explicit target version (`npm view @aotter/mantle dist-tags`).
18
- Read its release notes on GitHub and, after installing, its own
19
- `node_modules/@aotter/mantle/docs/`. The old version's docs are not the new
20
- contract.
21
- 3. **From 0.1.x to 0.2:** stop here and follow
22
- `node_modules/@aotter/mantle/docs/upgrade-0.1-to-0.2.md` after installing
23
- the target. There is no codemod and no in-place database upgrade: the
24
- project moves by hand, to a new database.
25
- 4. Set `@aotter/mantle`, and `@aotter/mantle-ui` where present, to the same
26
- exact version (`@aotter/mantle-admin-ui` is gone: the console is
27
- `@aotter/mantle-ui/admin`), and update the lockfile with the
28
- package manager. Review the dependency diff and any peer changes
29
- `mantle generate` names.
30
- With identity `mantle`, inspect auth database upgrade requirements in
31
- `docs/handbook/cloudflare/authentication.md` before starting the new service.
32
- Better Auth 1.7.0–1.7.2's required legacy `account.issuer` needs a
33
- data-preserving host-specific constraint migration when moving to 1.7.7;
34
- fresh-database success alone does not verify an upgrade. Back up the service's
35
- own database and retain existing users, sessions, roles and content.
36
- 5. Regenerate and check:
15
+ Read the installed SDK README and version-matched handbook before editing.
37
16
 
38
- ```sh
39
- pnpm exec mantle generate
40
- pnpm exec mantle generate --check
41
- pnpm exec tsc --noEmit
42
- ```
17
+ Follow the installed [native generation and service workflow](../../handbook/cloudflare/service-entry.md)
18
+ with its [native contract](../../handbook/guides/native-execution.md) and [supported declarations](../../handbook/reference/features.md). Commit
19
+ all generated output, run the same generation command with `--check`, and keep
20
+ bundle `dist/` untracked. The app owns its verified Caller, handlers and native
21
+ resources; Better Auth’s admin plugin `adminRoles` defines the admin layer (default `["admin"]`); `ctx.admin` accepts open role names.
43
22
 
44
- 6. The preset (`src/service.ts`, `src/index.ts`, `src/handlers.ts`,
45
- `wrangler.jsonc`) is never
46
- rewritten. Generate into a scratch directory with the same manifests and
47
- `mantle.config.json`, diff it against the project's files, and apply the
48
- changes that matter by hand.
49
- 7. Run the service locally and test its real routes and sign-in. Before
50
- deploying a SQLite project, run
51
- `mantle generate --check --database <local SQLite file>` to see what boot
52
- will change.
23
+ Pin exact target SDK/peer versions and read its release notes and Admin asset
24
+ installation instructions. Core-to-native replaces app imports/wiring; it is not
25
+ a package-only update. Preserve users, sessions, content and application code.
26
+ Review emitted SQL/policy diffs and rehearse explicit data-preserving schema/auth/role
27
+ migrations on a copy. Initial schema.sql never authorizes rebuilding production
28
+ tables. Verify auth/Admin/MCP/REST, locks and persistence before authorized cutover.
53
29
 
54
- Report the old and new versions, the checks and their results, what changed
55
- in the service files, and what remains. A dependency update does not
56
- authorize a deploy. Never commit secrets.
30
+ Follow [Native Admin](../../handbook/guides/native-admin.md) for the three-package
31
+ SDK/Admin/shared-kit split and asset/extension/MCP App subpath moves; old UI
32
+ subpaths have no compatibility aliases. Pin only actually published versions,
33
+ or explicitly use a matching workspace preview. Recheck member and Admin OTP,
34
+ all affected native routes, private field visibility, OCC and unknown outcomes.
35
+ Do not publish a package as part of an application dependency update.
@@ -0,0 +1,101 @@
1
+ /** Reusable application-owned adapter check. The factory must open an isolated, disposable database/schema. */
2
+ import assert from "node:assert/strict";
3
+ import { mkdir, mkdtemp, rm } from "node:fs/promises";
4
+ import { resolve } from "node:path";
5
+ import { pathToFileURL } from "node:url";
6
+ import { unstable_splitSqlQuery } from "wrangler";
7
+ import type { Postgres } from "../src/kernel/contracts.js";
8
+ import { procedure, transaction } from "../src/kernel/driver/postgres.js";
9
+ import { generateOrThrow, writeGenerated } from "../tests/apps/link.js";
10
+
11
+ export type PostgresAdapterFactory = () => Promise<{ db: Postgres; close(): Promise<void>; interactive?: boolean }>;
12
+
13
+ const atom = (kind: string, name: string, spec: object) => JSON.stringify({ apiVersion: "cms.mantle.aotter.net/v2", kind, metadata: { name }, spec });
14
+ const properties = { key: { type: "string" }, at: { type: "string", format: "date-time" }, day: { type: "string", format: "date" }, payload: { type: "object" }, units: { type: "integer" }, enabled: { type: "boolean" }, amount: { type: "number" } };
15
+ const source = [
16
+ atom("Schema", "adapter_items", { title: "Adapter conformance", schema: { type: "object", properties, required: Object.keys(properties) }, uniqueIndexes: [["key"]] }),
17
+ atom("View", "adapter-items", { surface: "internal", sql: "SELECT id, key, at, day, payload, units, enabled, amount, created_at, CAST(at AS timestamptz) AS computed_at FROM adapter_items ORDER BY id" }),
18
+ atom("View", "adapter-wire", { surface: "public", sql: `SELECT units AS "quantityAlias", enabled, amount, version AS "versionAlias" FROM adapter_items ORDER BY id` }),
19
+ atom("Procedure", "adapter-create", { input: { type: "object", properties, required: Object.keys(properties) }, output: { type: "object" }, handler: { sql: "INSERT INTO adapter_items(key, at, day, payload, units, enabled, amount) VALUES(input.key, input.at, input.day, input.payload, input.units, input.enabled, input.amount) RETURNING id, at, day, payload, units, enabled, amount" } }),
20
+ ].join("\n---\n");
21
+
22
+ /** Returns only a check count; assertions retain the exact failing contract. No latency or benchmark data. */
23
+ export async function verifyPostgresAdapter(factory: PostgresAdapterFactory): Promise<{ checks: number }> {
24
+ const files = await generateOrThrow("bun-postgres", [{ sourceId: "adapter-conformance.yaml", text: source }]);
25
+ await mkdir(resolve(import.meta.dir, "../tests/apps/.generated"), { recursive: true });
26
+ const directory = await mkdtemp(resolve(import.meta.dir, "../tests/apps/.generated/adapter-"));
27
+ let client: Awaited<ReturnType<PostgresAdapterFactory>> | undefined;
28
+ let checks = 0;
29
+ try {
30
+ await writeGenerated(directory, files);
31
+ const app = await import(pathToFileURL(resolve(directory, "generated.ts")).href);
32
+ client = await factory();
33
+ const { db, interactive = true } = client;
34
+ for (const sql of unstable_splitSqlQuery(files["schema.sql"]!)) await db.unsafe(sql, []);
35
+ const caller = { kind: "system", reason: "adapter conformance" } as const;
36
+ const input = { key: "first", at: "2026-10-12T08:00:00.123456+08:00", day: "2024-02-29", payload: JSON.stringify({ text: "'\\", nested: [false, null] }), units: Number.MAX_SAFE_INTEGER, enabled: true, amount: 0.1 };
37
+ const output = await app.procedures["adapter-create"](db, caller, input);
38
+ const created = output.results[0][0];
39
+ assert.equal(created.at, "2026-10-12T00:00:00.123456Z", "declared RETURNING date-time retains microseconds");
40
+ assert.equal(created.day, input.day, "declared RETURNING date retains calendar day");
41
+ assert.deepEqual(created.payload, JSON.parse(input.payload), "JSON text is bound verbatim, not JSON-encoded twice");
42
+ assert.equal(String(created.units), String(input.units), "int8 retains a safe integer exactly");
43
+ assert.equal(created.enabled, true, "PostgreSQL boolean native output"); assert.equal(created.amount, input.amount, "declared number native output"); checks += 6;
44
+ const rows = await app.views["adapter-items"](db, caller, {});
45
+ const count = rows.count;
46
+ assert.ok(Array.isArray(rows), "unsafe returns a row array");
47
+ assert.equal(count, 1, "unsafe array carries affected count");
48
+ assert.equal(rows[0].at, created.at, "declared SELECT date-time retains microseconds");
49
+ assert.equal(rows[0].day, input.day);
50
+ assert.match(rows[0].created_at, /^\d{4}-\d\d-\d\dT\d\d:\d\d:\d\d\.\d{6}Z$/, "system timestamps have the same wire form");
51
+ // Computed outputs are native: the driver may return Date (milliseconds) or text (microseconds).
52
+ assert.ok(rows[0].computed_at instanceof Date || typeof rows[0].computed_at === "string"); checks += 6;
53
+ await assert.rejects(() => app.procedures["adapter-create"](db, caller, input), { code: "CONFLICT" }); checks++;
54
+ const step = { sql: "UPDATE adapter_items SET key = $1 WHERE id = $2 RETURNING id", binds: ["changed", "missing"], row: true };
55
+ await assert.rejects(() => procedure(db, [step], "adapter/zero"), { code: "CONFLICT" }); checks++;
56
+ const integer = await db.unsafe("SELECT CAST($1 AS bigint) AS positive, CAST($2 AS bigint) AS negative, CAST($3 AS numeric(15,2)) AS decimal", ["9007199254740993", "-9007199254740993", "1234567890123.45"]);
57
+ assert.equal(String(integer[0].positive), "9007199254740993", "unsafe int8 must not be rounded by an adapter");
58
+ assert.equal(String(integer[0].negative), "-9007199254740993");
59
+ assert.equal(integer[0].decimal, "1234567890123.45", "numeric text retains declared scale and precision"); checks += 3;
60
+ const { default: page } = await import(pathToFileURL(resolve(directory, "paged/wire/views/adapter-wire.ts")).href);
61
+ for (const value of ["9007199254740991", "9007199254740993", "-9007199254740993", "9223372036854775807", "-9223372036854775808"]) {
62
+ await db.unsafe("UPDATE adapter_items SET units=CAST($1 AS bigint), version=CAST($1 AS bigint)", [value]);
63
+ const wire = (await page(db, caller, {})).rows[0];
64
+ // The selected-boundary module returns exact integer text; REST/MCP turn safe values into numbers.
65
+ assert.equal(String(wire.quantityAlias), value); assert.equal(String(wire.versionAlias), value);
66
+ assert.equal(wire.enabled, true); assert.equal(wire.amount, input.amount); checks += 4;
67
+ }
68
+ await db.unsafe("UPDATE adapter_items SET version=1", []);
69
+ const store = app.store(db, caller), collection = store.collection("adapter_items");
70
+ const changed = { sql: "UPDATE adapter_items SET key = $1 WHERE id = $2 RETURNING id", binds: ["transaction", created.id], row: true };
71
+ if (!interactive) {
72
+ let calls = 0;
73
+ const tapped = { unsafe: (sql: string, values: any[]) => { calls++; return db.unsafe(sql, values); }, begin: db.begin.bind(db) };
74
+ const limitedStore = app.store(tapped, caller);
75
+ for (const run of [() => procedure(tapped, [changed, changed], "adapter/multi"), () => limitedStore.transaction(async () => { throw Error("callback must not run"); }), () => limitedStore.batch([limitedStore.collection("adapter_items").update(created.id, { key: "no-write" }, { lock: 1 }), limitedStore.collection("adapter_items").update(created.id, { key: "also-no-write" }, { lock: 1 })])]) {
76
+ await assert.rejects(run, (error: unknown) => {
77
+ const e = error as Error & { code?: string; status?: number };
78
+ return e instanceof Error && e.name === "ContractError" && e.code === "TRANSACTION_UNSUPPORTED" && e.status === 400 && /transaction/i.test(e.message);
79
+ });
80
+ assert.equal(calls, 0, "unsupported interactive transaction refuses before any statement"); checks += 2;
81
+ }
82
+ } else {
83
+ await transaction(db, async tx => {
84
+ await procedure(tx, [changed, changed], "adapter/nested-handle");
85
+ assert.equal((await tx.unsafe("SELECT key FROM adapter_items WHERE id = $1", [created.id]))[0].key, "transaction");
86
+ await assert.rejects(() => transaction(tx, async () => {}), /Nested transactions/);
87
+ }); checks += 2;
88
+ assert.equal((await db.unsafe("SELECT key FROM adapter_items WHERE id = $1", [created.id]))[0].key, "transaction", "begin commits after callback"); checks++;
89
+ const rollback = new Error("rollback sentinel");
90
+ await assert.rejects(() => transaction(db, async tx => { await tx.unsafe("UPDATE adapter_items SET key = $1 WHERE id = $2", ["rolled-back", created.id]); throw rollback; }), error => error === rollback);
91
+ assert.equal((await db.unsafe("SELECT key FROM adapter_items WHERE id = $1", [created.id]))[0].key, "transaction", "begin rolls back callback failure"); checks += 2;
92
+ await store.batch([collection.update(created.id, { key: "batch" }, { lock: 1 })]); checks++;
93
+ }
94
+ const uncertain = { unsafe: db.unsafe.bind(db), begin: async <T>(_options: string, callback: (tx: Postgres) => Promise<T>) => { await callback(db); throw new Error("socket lost at COMMIT"); } };
95
+ await assert.rejects(() => transaction(uncertain, async () => {}), { code: "OUTCOME_UNKNOWN" }); checks++;
96
+ return { checks };
97
+ } finally {
98
+ try { if (client) await client.close(); }
99
+ finally { await rm(directory, { recursive: true, force: true }); }
100
+ }
101
+ }