@voltro/cli 0.27.0 → 0.29.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (284) hide show
  1. package/CHANGELOG.md +513 -0
  2. package/THIRD-PARTY-NOTICES.md +88 -2
  3. package/dist/{apiBuild-D22_EpoR.js → apiBuild-BESZbTjA.js} +4 -4
  4. package/dist/apiBuild-C8d74T6g.js +2 -0
  5. package/dist/bin.js +3 -3
  6. package/dist/checkCommand-BPAtyWs8.js +2420 -0
  7. package/dist/checkCommand-DBvZvCh1.js +2 -0
  8. package/dist/cliRuntime-Oh517vCV.js +96 -0
  9. package/dist/{commands-jBX8no1I.js → commands-82BDEktg.js} +6476 -7672
  10. package/dist/dbCommand-CaIVTp-a.js +2 -0
  11. package/dist/{dbCommand-uuNCrFAb.js → dbCommand-bCBbk6tz.js} +3 -3
  12. package/dist/{dev-DcbIJrWg.js → dev-Cg4BKLmi.js} +3034 -2619
  13. package/dist/dev-DeEJj5T4.js +3 -0
  14. package/dist/fileConventions-Cof68_BL.js +33 -0
  15. package/dist/{frameworkTableAssembly-BwHU9Euq.js → frameworkTableAssembly-4Db40V23.js} +2 -2
  16. package/dist/frameworkTableAssembly-BTNirAAk.js +2 -0
  17. package/dist/index.js +1 -1
  18. package/dist/{inspect-CUCCzw2I.js → inspect-BMvQpwqy.js} +211 -190
  19. package/dist/inspect-DHeaMZak.js +2 -0
  20. package/dist/{inspectMetrics-BU90mvJN.js → inspectMetrics-DHYygE4s.js} +999 -961
  21. package/dist/{manifestBuild-BnzAxp2O.js → manifestBuild-C4R1EdHn.js} +1 -1
  22. package/dist/manifestBuild-Ck_90gZy.js +2 -0
  23. package/dist/sdkgen-CW5NbYF0.js +582 -0
  24. package/dist/{seedRunner-D6eu-u5U.js → seedRunner-Bqxgp7HZ.js} +60 -59
  25. package/dist/serveCommand-BXl8mhZD.js +1489 -0
  26. package/dist/serveEntry.js +3 -3
  27. package/dist/{start-BGXIf6zT.js → start-CsCIaW4-.js} +282 -269
  28. package/dist/startEntry.js +2 -2
  29. package/package.json +17 -17
  30. package/templates/AGENTS.md +2 -1
  31. package/templates/agent-docs/_index.md +2 -1
  32. package/templates/agent-docs/_manifest.json +10 -1
  33. package/templates/agent-docs/ai.md +135 -0
  34. package/templates/agent-docs/cli.md +124 -6
  35. package/templates/agent-docs/configuration.md +32 -0
  36. package/templates/agent-docs/data.md +282 -0
  37. package/templates/agent-docs/database/migrations.md +47 -0
  38. package/templates/agent-docs/database/misc.md +57 -0
  39. package/templates/agent-docs/database/schema.md +3 -1
  40. package/templates/agent-docs/deployment.md +56 -0
  41. package/templates/agent-docs/internationalization.md +161 -1
  42. package/templates/agent-docs/local-first-mobile.md +414 -0
  43. package/templates/agent-docs/routing.md +93 -2
  44. package/templates/agent-docs/schema-driven-ui.md +12 -0
  45. package/templates/agent-docs/templates/apibackends.md +1 -1
  46. package/templates/agent-docs/testing.md +42 -0
  47. package/templates/agent-docs/whats-new.md +165 -131
  48. package/templates/agent-docs/workflows.md +11 -0
  49. package/templates/apps/api-ai/package.json +7 -7
  50. package/templates/apps/api-auth/package.json +8 -8
  51. package/templates/apps/api-backend/package.json +7 -7
  52. package/templates/apps/api-backend-deactivation/package.json +7 -7
  53. package/templates/apps/api-backend-mail/package.json +8 -8
  54. package/templates/apps/api-backend-mariadb/package.json +9 -9
  55. package/templates/apps/api-backend-sqlite/.env.example +19 -0
  56. package/templates/apps/api-backend-sqlite/README.md +38 -0
  57. package/templates/apps/api-backend-sqlite/app.config.ts +35 -0
  58. package/templates/apps/api-backend-sqlite/database/schema.ts +54 -0
  59. package/templates/apps/api-backend-sqlite/mutations/notes.create.mutation.server.ts +19 -0
  60. package/templates/apps/api-backend-sqlite/mutations/notes.create.mutation.ts +37 -0
  61. package/templates/apps/api-backend-sqlite/package.json +30 -0
  62. package/templates/apps/api-backend-sqlite/queries/notes.query.server.ts +14 -0
  63. package/templates/apps/api-backend-sqlite/queries/notes.query.ts +20 -0
  64. package/templates/apps/api-backend-sqlite/template.json +6 -0
  65. package/templates/apps/api-backend-sqlite/tests/notes.create.test.ts +50 -0
  66. package/templates/apps/api-backend-sqlite/tsconfig.json +5 -0
  67. package/templates/apps/api-backend-storage/package.json +8 -8
  68. package/templates/apps/api-cms/README.md +104 -0
  69. package/templates/apps/api-cms/actions/content.get.action.server.ts +27 -0
  70. package/templates/apps/api-cms/actions/content.get.action.ts +19 -0
  71. package/templates/apps/api-cms/actions/content.types.action.server.ts +26 -0
  72. package/templates/apps/api-cms/actions/content.types.action.ts +40 -0
  73. package/templates/apps/api-cms/actions/me.action.server.ts +18 -0
  74. package/templates/apps/api-cms/actions/me.action.ts +16 -0
  75. package/templates/apps/api-cms/app.config.ts +61 -0
  76. package/templates/apps/api-cms/content/blogPost.contentType.ts +39 -0
  77. package/templates/apps/api-cms/content/index.ts +18 -0
  78. package/templates/apps/api-cms/content/page.contentType.ts +24 -0
  79. package/templates/apps/api-cms/database/schema.ts +64 -0
  80. package/templates/apps/api-cms/mutations/content.publish.mutation.server.ts +19 -0
  81. package/templates/apps/api-cms/mutations/content.publish.mutation.ts +15 -0
  82. package/templates/apps/api-cms/mutations/content.saveDraft.mutation.server.ts +36 -0
  83. package/templates/apps/api-cms/mutations/content.saveDraft.mutation.ts +32 -0
  84. package/templates/apps/api-cms/mutations/content.unpublish.mutation.server.ts +19 -0
  85. package/templates/apps/api-cms/mutations/content.unpublish.mutation.ts +11 -0
  86. package/templates/apps/api-cms/package.json +32 -0
  87. package/templates/apps/api-cms/queries/content.list.query.server.ts +0 -0
  88. package/templates/apps/api-cms/queries/content.list.query.ts +27 -0
  89. package/templates/apps/api-cms/template.json +6 -0
  90. package/templates/apps/api-cms/tests/content.descriptors.test.ts +64 -0
  91. package/templates/apps/api-cms/tests/content.write.test.ts +85 -0
  92. package/templates/apps/api-cms/tsconfig.json +5 -0
  93. package/templates/apps/api-data-advanced/package.json +8 -8
  94. package/templates/apps/api-durable/package.json +8 -8
  95. package/templates/apps/api-feature-flags/package.json +9 -9
  96. package/templates/apps/api-governance/package.json +8 -8
  97. package/templates/apps/api-kv/package.json +8 -8
  98. package/templates/apps/api-moderation/package.json +8 -8
  99. package/templates/apps/api-observability/package.json +8 -8
  100. package/templates/apps/api-ratelimit/package.json +8 -8
  101. package/templates/apps/api-rbac/package.json +8 -8
  102. package/templates/apps/api-rest/package.json +7 -7
  103. package/templates/apps/api-saas/package.json +11 -11
  104. package/templates/apps/api-saas-starter/README.md +103 -0
  105. package/templates/apps/api-saas-starter/actions/me.action.server.ts +18 -0
  106. package/templates/apps/api-saas-starter/actions/me.action.ts +20 -0
  107. package/templates/apps/api-saas-starter/app.config.ts +87 -0
  108. package/templates/apps/api-saas-starter/database/schema.ts +57 -0
  109. package/templates/apps/api-saas-starter/mutations/invites.create.mutation.server.ts +26 -0
  110. package/templates/apps/api-saas-starter/mutations/invites.create.mutation.ts +18 -0
  111. package/templates/apps/api-saas-starter/mutations/projects.create.mutation.server.ts +29 -0
  112. package/templates/apps/api-saas-starter/mutations/projects.create.mutation.ts +18 -0
  113. package/templates/apps/api-saas-starter/package.json +32 -0
  114. package/templates/apps/api-saas-starter/queries/invites.list.query.server.ts +14 -0
  115. package/templates/apps/api-saas-starter/queries/invites.list.query.ts +17 -0
  116. package/templates/apps/api-saas-starter/queries/projects.list.query.server.ts +14 -0
  117. package/templates/apps/api-saas-starter/queries/projects.list.query.ts +18 -0
  118. package/templates/apps/api-saas-starter/template.json +6 -0
  119. package/templates/apps/api-saas-starter/tests/projects.create.test.ts +62 -0
  120. package/templates/apps/api-saas-starter/tests/session.test.ts +33 -0
  121. package/templates/apps/api-saas-starter/tsconfig.json +5 -0
  122. package/templates/apps/api-search/package.json +8 -8
  123. package/templates/apps/api-status/README.md +88 -0
  124. package/templates/apps/api-status/app.config.ts +36 -0
  125. package/templates/apps/api-status/authz.ts +33 -0
  126. package/templates/apps/api-status/database/schema.ts +70 -0
  127. package/templates/apps/api-status/mutations/components.create.mutation.server.ts +19 -0
  128. package/templates/apps/api-status/mutations/components.create.mutation.ts +16 -0
  129. package/templates/apps/api-status/mutations/incidents.create.mutation.server.ts +25 -0
  130. package/templates/apps/api-status/mutations/incidents.create.mutation.ts +22 -0
  131. package/templates/apps/api-status/mutations/incidents.resolve.mutation.server.ts +24 -0
  132. package/templates/apps/api-status/mutations/incidents.resolve.mutation.ts +19 -0
  133. package/templates/apps/api-status/mutations/incidents.update.mutation.server.ts +26 -0
  134. package/templates/apps/api-status/mutations/incidents.update.mutation.ts +21 -0
  135. package/templates/apps/api-status/package.json +30 -0
  136. package/templates/apps/api-status/queries/components.list.query.server.ts +14 -0
  137. package/templates/apps/api-status/queries/components.list.query.ts +13 -0
  138. package/templates/apps/api-status/queries/incidents.live.query.server.ts +14 -0
  139. package/templates/apps/api-status/queries/incidents.live.query.ts +20 -0
  140. package/templates/apps/api-status/queries/updates.list.query.server.ts +14 -0
  141. package/templates/apps/api-status/queries/updates.list.query.ts +17 -0
  142. package/templates/apps/api-status/template.json +6 -0
  143. package/templates/apps/api-status/tests/status.test.ts +70 -0
  144. package/templates/apps/api-status/tsconfig.json +5 -0
  145. package/templates/apps/api-versioning/package.json +8 -8
  146. package/templates/apps/api-webhooks/package.json +9 -9
  147. package/templates/apps/changelog/package.json +6 -6
  148. package/templates/apps/edge-functions/package.json +2 -2
  149. package/templates/apps/frontend-admin/package.json +8 -8
  150. package/templates/apps/frontend-app/package.json +8 -8
  151. package/templates/apps/frontend-auth/README.md +78 -0
  152. package/templates/apps/frontend-auth/app.config.ts +34 -0
  153. package/templates/apps/frontend-auth/package.json +32 -0
  154. package/templates/apps/frontend-auth/src/components/AuthShell.tsx +35 -0
  155. package/templates/apps/frontend-auth/src/components/PasswordStrength.tsx +33 -0
  156. package/templates/apps/frontend-auth/src/config.ts +11 -0
  157. package/templates/apps/frontend-auth/src/globals.css +105 -0
  158. package/templates/apps/frontend-auth/src/globals.d.ts +6 -0
  159. package/templates/apps/frontend-auth/src/lib/auth.ts +34 -0
  160. package/templates/apps/frontend-auth/src/lib/redirect.test.ts +24 -0
  161. package/templates/apps/frontend-auth/src/lib/redirect.ts +29 -0
  162. package/templates/apps/frontend-auth/src/locales/de.ts +66 -0
  163. package/templates/apps/frontend-auth/src/locales/en.ts +76 -0
  164. package/templates/apps/frontend-auth/src/locales/index.ts +14 -0
  165. package/templates/apps/frontend-auth/src/pages/forgot/page.tsx +51 -0
  166. package/templates/apps/frontend-auth/src/pages/layout.tsx +12 -0
  167. package/templates/apps/frontend-auth/src/pages/login/page.test.tsx +53 -0
  168. package/templates/apps/frontend-auth/src/pages/login/page.tsx +67 -0
  169. package/templates/apps/frontend-auth/src/pages/logout/page.tsx +28 -0
  170. package/templates/apps/frontend-auth/src/pages/magic/page.tsx +51 -0
  171. package/templates/apps/frontend-auth/src/pages/page.tsx +26 -0
  172. package/templates/apps/frontend-auth/src/pages/reset/page.test.tsx +51 -0
  173. package/templates/apps/frontend-auth/src/pages/reset/page.tsx +63 -0
  174. package/templates/apps/frontend-auth/src/pages/signup/page.tsx +60 -0
  175. package/templates/apps/frontend-auth/src/pages/verify/page.tsx +50 -0
  176. package/templates/apps/frontend-auth/template.json +6 -0
  177. package/templates/apps/frontend-auth/tsconfig.json +5 -0
  178. package/templates/apps/frontend-blank/package.json +7 -7
  179. package/templates/apps/frontend-cms/README.md +47 -0
  180. package/templates/apps/frontend-cms/app.config.ts +37 -0
  181. package/templates/apps/frontend-cms/package.json +33 -0
  182. package/templates/apps/frontend-cms/src/config.ts +8 -0
  183. package/templates/apps/frontend-cms/src/globals.css +105 -0
  184. package/templates/apps/frontend-cms/src/globals.d.ts +6 -0
  185. package/templates/apps/frontend-cms/src/lib/api.ts +58 -0
  186. package/templates/apps/frontend-cms/src/locales/de.ts +50 -0
  187. package/templates/apps/frontend-cms/src/locales/en.ts +55 -0
  188. package/templates/apps/frontend-cms/src/locales/index.ts +14 -0
  189. package/templates/apps/frontend-cms/src/pages/(app)/error.tsx +18 -0
  190. package/templates/apps/frontend-cms/src/pages/(app)/layout.test.tsx +31 -0
  191. package/templates/apps/frontend-cms/src/pages/(app)/layout.tsx +62 -0
  192. package/templates/apps/frontend-cms/src/pages/(app)/not-found.tsx +14 -0
  193. package/templates/apps/frontend-cms/src/pages/(app)/page.test.tsx +110 -0
  194. package/templates/apps/frontend-cms/src/pages/(app)/page.tsx +159 -0
  195. package/templates/apps/frontend-cms/src/pages/layout.tsx +12 -0
  196. package/templates/apps/frontend-cms/src/pages/login/page.test.tsx +58 -0
  197. package/templates/apps/frontend-cms/src/pages/login/page.tsx +93 -0
  198. package/templates/apps/frontend-cms/template.json +6 -0
  199. package/templates/apps/frontend-cms/tsconfig.json +5 -0
  200. package/templates/apps/frontend-contact/package.json +7 -7
  201. package/templates/apps/frontend-dashboard/package.json +7 -7
  202. package/templates/apps/frontend-docs/package.json +7 -7
  203. package/templates/apps/frontend-i18n/package.json +6 -6
  204. package/templates/apps/frontend-landing/package.json +7 -7
  205. package/templates/apps/frontend-portal/README.md +71 -0
  206. package/templates/apps/frontend-portal/app.config.ts +37 -0
  207. package/templates/apps/frontend-portal/package.json +32 -0
  208. package/templates/apps/frontend-portal/src/config.ts +8 -0
  209. package/templates/apps/frontend-portal/src/globals.css +93 -0
  210. package/templates/apps/frontend-portal/src/globals.d.ts +6 -0
  211. package/templates/apps/frontend-portal/src/lib/api.ts +62 -0
  212. package/templates/apps/frontend-portal/src/locales/de.ts +86 -0
  213. package/templates/apps/frontend-portal/src/locales/en.ts +93 -0
  214. package/templates/apps/frontend-portal/src/locales/index.ts +14 -0
  215. package/templates/apps/frontend-portal/src/pages/(portal)/api-keys/page.test.tsx +71 -0
  216. package/templates/apps/frontend-portal/src/pages/(portal)/api-keys/page.tsx +124 -0
  217. package/templates/apps/frontend-portal/src/pages/(portal)/billing/page.test.tsx +86 -0
  218. package/templates/apps/frontend-portal/src/pages/(portal)/billing/page.tsx +97 -0
  219. package/templates/apps/frontend-portal/src/pages/(portal)/error.tsx +19 -0
  220. package/templates/apps/frontend-portal/src/pages/(portal)/invoices/page.tsx +45 -0
  221. package/templates/apps/frontend-portal/src/pages/(portal)/layout.test.tsx +31 -0
  222. package/templates/apps/frontend-portal/src/pages/(portal)/layout.tsx +63 -0
  223. package/templates/apps/frontend-portal/src/pages/(portal)/not-found.tsx +15 -0
  224. package/templates/apps/frontend-portal/src/pages/(portal)/page.tsx +39 -0
  225. package/templates/apps/frontend-portal/src/pages/(portal)/profile/page.tsx +79 -0
  226. package/templates/apps/frontend-portal/src/pages/layout.tsx +12 -0
  227. package/templates/apps/frontend-portal/src/pages/login/page.test.tsx +58 -0
  228. package/templates/apps/frontend-portal/src/pages/login/page.tsx +96 -0
  229. package/templates/apps/frontend-portal/template.json +6 -0
  230. package/templates/apps/frontend-portal/tsconfig.json +5 -0
  231. package/templates/apps/frontend-saas/README.md +73 -0
  232. package/templates/apps/frontend-saas/app.config.ts +46 -0
  233. package/templates/apps/frontend-saas/package.json +32 -0
  234. package/templates/apps/frontend-saas/src/config.ts +8 -0
  235. package/templates/apps/frontend-saas/src/globals.css +85 -0
  236. package/templates/apps/frontend-saas/src/globals.d.ts +6 -0
  237. package/templates/apps/frontend-saas/src/lib/api.ts +47 -0
  238. package/templates/apps/frontend-saas/src/locales/de.ts +72 -0
  239. package/templates/apps/frontend-saas/src/locales/en.ts +81 -0
  240. package/templates/apps/frontend-saas/src/locales/index.ts +14 -0
  241. package/templates/apps/frontend-saas/src/pages/(marketing)/layout.tsx +30 -0
  242. package/templates/apps/frontend-saas/src/pages/(marketing)/login/page.test.tsx +58 -0
  243. package/templates/apps/frontend-saas/src/pages/(marketing)/login/page.tsx +96 -0
  244. package/templates/apps/frontend-saas/src/pages/(marketing)/page.tsx +27 -0
  245. package/templates/apps/frontend-saas/src/pages/dashboard/billing/page.tsx +72 -0
  246. package/templates/apps/frontend-saas/src/pages/dashboard/error.tsx +20 -0
  247. package/templates/apps/frontend-saas/src/pages/dashboard/layout.test.tsx +32 -0
  248. package/templates/apps/frontend-saas/src/pages/dashboard/layout.tsx +69 -0
  249. package/templates/apps/frontend-saas/src/pages/dashboard/not-found.tsx +17 -0
  250. package/templates/apps/frontend-saas/src/pages/dashboard/page.test.tsx +113 -0
  251. package/templates/apps/frontend-saas/src/pages/dashboard/page.tsx +76 -0
  252. package/templates/apps/frontend-saas/src/pages/dashboard/team/page.tsx +73 -0
  253. package/templates/apps/frontend-saas/src/pages/layout.tsx +12 -0
  254. package/templates/apps/frontend-saas/template.json +6 -0
  255. package/templates/apps/frontend-saas/tsconfig.json +5 -0
  256. package/templates/apps/frontend-spa/package.json +7 -7
  257. package/templates/apps/frontend-ssr/package.json +7 -7
  258. package/templates/apps/frontend-ssr-api/package.json +8 -8
  259. package/templates/apps/frontend-static-blog/package.json +6 -6
  260. package/templates/apps/frontend-status/README.md +51 -0
  261. package/templates/apps/frontend-status/app.config.ts +39 -0
  262. package/templates/apps/frontend-status/package.json +32 -0
  263. package/templates/apps/frontend-status/src/config.ts +7 -0
  264. package/templates/apps/frontend-status/src/globals.css +70 -0
  265. package/templates/apps/frontend-status/src/globals.d.ts +6 -0
  266. package/templates/apps/frontend-status/src/lib/status.ts +81 -0
  267. package/templates/apps/frontend-status/src/locales/de.ts +41 -0
  268. package/templates/apps/frontend-status/src/locales/en.ts +45 -0
  269. package/templates/apps/frontend-status/src/locales/index.ts +13 -0
  270. package/templates/apps/frontend-status/src/pages/layout.tsx +27 -0
  271. package/templates/apps/frontend-status/src/pages/page.test.tsx +123 -0
  272. package/templates/apps/frontend-status/src/pages/page.tsx +136 -0
  273. package/templates/apps/frontend-status/template.json +6 -0
  274. package/templates/apps/frontend-status/tsconfig.json +11 -0
  275. package/templates/baselines/compose/docker-compose.prod.yml +15 -0
  276. package/templates/baselines/compose-mariadb/docker-compose.prod.yml +15 -0
  277. package/dist/apiBuild-BrjrVJJh.js +0 -2
  278. package/dist/dbCommand-DrzXimKf.js +0 -2
  279. package/dist/dev-DNkso403.js +0 -3
  280. package/dist/fileConventions-3bffWssN.js +0 -30
  281. package/dist/frameworkTableAssembly-lrjZtk0G.js +0 -2
  282. package/dist/inspect-gt8bq-Tz.js +0 -2
  283. package/dist/manifestBuild-ifczArzr.js +0 -2
  284. package/dist/serveCommand-DfkisVWP.js +0 -1310
@@ -114,13 +114,29 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
114
114
  error: "cross-site write rejected",
115
115
  reason: `a state-changing inspect request may not come from origin "${i}" — only same-machine (loopback) origins may write`
116
116
  }, n);
117
- }, f = (e) => {
117
+ }, f = (e = process.env.VOLTRO_INSPECT_ALLOWED_HOSTS) => (e ?? "").split(/[,\s]+/).map((e) => e.trim().toLowerCase()).filter((e) => e.length > 0), p = (e) => {
118
+ if (e === void 0) return "";
119
+ let t = e.trim();
120
+ if (t === "") return "";
121
+ if (t.startsWith("[")) {
122
+ let e = t.indexOf("]");
123
+ return (e === -1 ? t.slice(1) : t.slice(1, e)).toLowerCase();
124
+ }
125
+ let n = t.indexOf(":");
126
+ return (n === -1 ? t : t.slice(0, n)).toLowerCase();
127
+ }, m = (e) => /^\d{1,3}(?:\.\d{1,3}){3}$/.test(e) || e.includes(":"), h = (e, t = f()) => {
128
+ let n = p(e);
129
+ return n === "" || n === "localhost" || n.endsWith(".localhost") || m(n) ? !0 : t.includes(n);
130
+ }, g = (e, t = {}, n) => h(e, n) ? null : s(403, {
131
+ error: "forbidden host",
132
+ reason: `the dev inspect surface refuses a request with Host "${e ?? ""}" — a DNS-rebinding guard. Only loopback names, IP literals, and hosts listed in VOLTRO_INSPECT_ALLOWED_HOSTS may reach it.`
133
+ }, t), _ = (e) => {
118
134
  let t = e.indexOf("?");
119
135
  return t === -1 ? e : e.slice(0, t);
120
- }, p = (e) => {
136
+ }, v = (e) => {
121
137
  let t = e.indexOf("?");
122
138
  return t === -1 ? new URLSearchParams() : new URLSearchParams(e.slice(t + 1));
123
- }, m = (e) => e === "/_voltro/inspect" || e.startsWith("/_voltro/inspect/"), h = [
139
+ }, y = (e) => e === "/_voltro/inspect" || e.startsWith("/_voltro/inspect/"), b = [
124
140
  "text",
125
141
  "textarea",
126
142
  "number",
@@ -136,7 +152,7 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
136
152
  "file",
137
153
  "hidden",
138
154
  "custom"
139
- ], g = (e, t, n = [], r = []) => ({
155
+ ], x = (e, t, n = [], r = []) => ({
140
156
  version: 2,
141
157
  scopes: [...new Set(r.flatMap((e) => e.declaredScopes ?? []))].sort(),
142
158
  procedures: [...e].sort((e, t) => e.tag.localeCompare(t.tag)).map((e) => ({
@@ -151,7 +167,7 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
151
167
  ...e.exposeAsTool === void 0 ? {} : { exposeAsTool: e.exposeAsTool }
152
168
  })),
153
169
  workflows: [...t].sort((e, t) => e.tag.localeCompare(t.tag)).map((e) => ({ name: e.tag })),
154
- widgets: h,
170
+ widgets: b,
155
171
  tables: [...n].filter((e) => !e.isFrameworkTable).sort((e, t) => e.name.localeCompare(t.name)).map((e) => ({
156
172
  name: e.name,
157
173
  reactive: e.isReactive,
@@ -164,9 +180,9 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
164
180
  ...e.oneOf === void 0 ? {} : { enum: e.oneOf }
165
181
  }))
166
182
  }))
167
- }), _ = (e, t, n = {}, i = {}) => {
168
- let o = f(e);
169
- if (!m(o)) return null;
183
+ }), S = (e, t, n = {}, i = {}) => {
184
+ let o = _(e);
185
+ if (!y(o)) return null;
170
186
  let c = l(n.origin ?? n.Origin), u = (i.method ?? "GET").toUpperCase();
171
187
  if (u === "OPTIONS") return {
172
188
  status: 204,
@@ -196,7 +212,7 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
196
212
  if (o === "/_voltro/inspect/manifest") {
197
213
  if (t.kind !== "api") return s(404, { error: "manifest endpoint is api-only" }, c);
198
214
  let e = t.inspectTables?.().tables ?? [];
199
- return s(200, g(t.rpc, t.workflows, e, t.plugins?.().plugins ?? []), c);
215
+ return s(200, x(t.rpc, t.workflows, e, t.plugins?.().plugins ?? []), c);
200
216
  }
201
217
  return o === "/_voltro/inspect/metrics" ? t.metrics === void 0 ? s(200, [], c) : s(200, t.metrics(), c) : o === "/_voltro/inspect/subscriptions" ? t.kind === "api" ? t.subscriptions === void 0 ? s(200, {
202
218
  subscriptions: [],
@@ -240,7 +256,7 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
240
256
  error: "unknown inspect endpoint",
241
257
  path: o
242
258
  }, c);
243
- }, v = async (e, t, n, i = {}) => {
259
+ }, C = async (e, t, n, i = {}) => {
244
260
  let o = l(t.origin ?? t.Origin);
245
261
  if (r()) return s(503, { error: "inspect disabled (VOLTRO_INSPECT=off)" }, o);
246
262
  let c = (i.method ?? "POST").toUpperCase();
@@ -275,80 +291,80 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
275
291
  n !== "cookie" && (h[n] = t);
276
292
  }
277
293
  return s(200, await p(f.input, h), o);
278
- }, y = async (e, t, i, o, c = {}) => {
279
- let u = f(e);
280
- if (!m(u) || !u.startsWith("/_voltro/inspect/webhooks/")) return null;
281
- let p = l(i.origin ?? i.Origin);
294
+ }, w = async (e, t, i, o, c = {}) => {
295
+ let u = _(e);
296
+ if (!y(u) || !u.startsWith("/_voltro/inspect/webhooks/")) return null;
297
+ let f = l(i.origin ?? i.Origin);
282
298
  if ((c.method ?? "POST").toUpperCase() !== "POST") return null;
283
- if (r()) return s(503, { error: "inspect disabled (VOLTRO_INSPECT=off)" }, p);
284
- let h = (c.authResolver ?? a)(i, c.method ?? "POST");
285
- if (!h.ok) return s(401, {
299
+ if (r()) return s(503, { error: "inspect disabled (VOLTRO_INSPECT=off)" }, f);
300
+ let p = (c.authResolver ?? a)(i, c.method ?? "POST");
301
+ if (!p.ok) return s(401, {
286
302
  error: "unauthorized",
287
- reason: h.reason
288
- }, p);
289
- let g = d(c.method, i, p);
290
- if (g) return g;
291
- if (t.kind !== "api") return s(404, { error: "webhook actions are api-only" }, p);
292
- if (!t.webhookActions) return s(404, { error: "webhook actions not configured — is @voltro/plugin-webhooks active?" }, p);
293
- let _;
303
+ reason: p.reason
304
+ }, f);
305
+ let m = d(c.method, i, f);
306
+ if (m) return m;
307
+ if (t.kind !== "api") return s(404, { error: "webhook actions are api-only" }, f);
308
+ if (!t.webhookActions) return s(404, { error: "webhook actions not configured — is @voltro/plugin-webhooks active?" }, f);
309
+ let h;
294
310
  try {
295
- _ = JSON.parse(o || "{}");
311
+ h = JSON.parse(o || "{}");
296
312
  } catch {
297
- return s(400, { error: "body must be JSON" }, p);
313
+ return s(400, { error: "body must be JSON" }, f);
298
314
  }
299
- let v = u.slice(`${n}/webhooks/`.length);
315
+ let g = u.slice(`${n}/webhooks/`.length);
300
316
  try {
301
- switch (v) {
317
+ switch (g) {
302
318
  case "subscribe": {
303
- let e = _;
304
- return typeof e.event != "string" || e.event.length === 0 ? s(400, { error: "event required" }, p) : typeof e.url != "string" || e.url.length === 0 ? s(400, { error: "url required" }, p) : s(200, await t.webhookActions.subscribe(e), p);
319
+ let e = h;
320
+ return typeof e.event != "string" || e.event.length === 0 ? s(400, { error: "event required" }, f) : typeof e.url != "string" || e.url.length === 0 ? s(400, { error: "url required" }, f) : s(200, await t.webhookActions.subscribe(e), f);
305
321
  }
306
322
  case "pause": {
307
- let e = _.targetId;
308
- return typeof e != "string" || e.length === 0 ? s(400, { error: "targetId required" }, p) : (await t.webhookActions.pause(e), s(200, { ok: !0 }, p));
323
+ let e = h.targetId;
324
+ return typeof e != "string" || e.length === 0 ? s(400, { error: "targetId required" }, f) : (await t.webhookActions.pause(e), s(200, { ok: !0 }, f));
309
325
  }
310
326
  case "resume": {
311
- let e = _.targetId;
312
- return typeof e != "string" || e.length === 0 ? s(400, { error: "targetId required" }, p) : (await t.webhookActions.resume(e), s(200, { ok: !0 }, p));
327
+ let e = h.targetId;
328
+ return typeof e != "string" || e.length === 0 ? s(400, { error: "targetId required" }, f) : (await t.webhookActions.resume(e), s(200, { ok: !0 }, f));
313
329
  }
314
330
  case "delete": {
315
- let e = _.targetId;
316
- return typeof e != "string" || e.length === 0 ? s(400, { error: "targetId required" }, p) : (await t.webhookActions.delete(e), s(200, { ok: !0 }, p));
331
+ let e = h.targetId;
332
+ return typeof e != "string" || e.length === 0 ? s(400, { error: "targetId required" }, f) : (await t.webhookActions.delete(e), s(200, { ok: !0 }, f));
317
333
  }
318
334
  case "rotateSecret": {
319
- let e = _.targetId;
320
- return typeof e != "string" || e.length === 0 ? s(400, { error: "targetId required" }, p) : s(200, await t.webhookActions.rotateSecret(e), p);
335
+ let e = h.targetId;
336
+ return typeof e != "string" || e.length === 0 ? s(400, { error: "targetId required" }, f) : s(200, await t.webhookActions.rotateSecret(e), f);
321
337
  }
322
338
  case "replay": {
323
- let e = _.deliveryId;
324
- return typeof e != "string" || e.length === 0 ? s(400, { error: "deliveryId required" }, p) : (await t.webhookActions.replay(e), s(200, { ok: !0 }, p));
339
+ let e = h.deliveryId;
340
+ return typeof e != "string" || e.length === 0 ? s(400, { error: "deliveryId required" }, f) : (await t.webhookActions.replay(e), s(200, { ok: !0 }, f));
325
341
  }
326
342
  case "repinVersion": {
327
- let e = _.targetId, n = _.version;
328
- return typeof e != "string" || e.length === 0 ? s(400, { error: "targetId required" }, p) : typeof n != "number" || !Number.isInteger(n) || n < 1 ? s(400, { error: "version must be a positive integer" }, p) : (await t.webhookActions.updateTargetPayloadVersion(e, n), s(200, { ok: !0 }, p));
343
+ let e = h.targetId, n = h.version;
344
+ return typeof e != "string" || e.length === 0 ? s(400, { error: "targetId required" }, f) : typeof n != "number" || !Number.isInteger(n) || n < 1 ? s(400, { error: "version must be a positive integer" }, f) : (await t.webhookActions.updateTargetPayloadVersion(e, n), s(200, { ok: !0 }, f));
329
345
  }
330
- default: return s(404, { error: `unknown webhook action: ${v}` }, p);
346
+ default: return s(404, { error: `unknown webhook action: ${g}` }, f);
331
347
  }
332
348
  } catch (e) {
333
349
  return s(500, {
334
350
  error: "webhook action failed",
335
351
  message: e?.message ?? String(e)
336
- }, p);
352
+ }, f);
337
353
  }
338
- }, b = async (e, t, i, o, c = {}) => {
339
- let u = f(e);
340
- if (!m(u)) return null;
341
- let d = l(i.origin ?? i.Origin), p = (c.method ?? "POST").toUpperCase();
342
- if (p !== "POST") return null;
354
+ }, T = async (e, t, i, o, c = {}) => {
355
+ let u = _(e);
356
+ if (!y(u)) return null;
357
+ let d = l(i.origin ?? i.Origin), f = (c.method ?? "POST").toUpperCase();
358
+ if (f !== "POST") return null;
343
359
  if (r()) return s(503, { error: "inspect disabled (VOLTRO_INSPECT=off)" }, d);
344
- let h = (c.authResolver ?? a)(i, p);
345
- if (!h.ok) return s(401, {
360
+ let p = (c.authResolver ?? a)(i, f);
361
+ if (!p.ok) return s(401, {
346
362
  error: "unauthorized",
347
- reason: h.reason
363
+ reason: p.reason
348
364
  }, d);
349
365
  if (t.kind !== "api") return s(404, { error: "framework-action endpoints are api-only" }, d);
350
- let g = `${n}/seeds/run`, _ = `${n}/migrations/rollback`, v = `${n}/migrations/squash`, y = `${n}/migrations/restore-snapshot`;
351
- if (u !== g && u !== _ && u !== v && u !== y && u !== "/_voltro/inspect/migrations/compare-env") return null;
366
+ let m = `${n}/seeds/run`, h = `${n}/migrations/rollback`, g = `${n}/migrations/squash`, v = `${n}/migrations/restore-snapshot`;
367
+ if (u !== m && u !== h && u !== g && u !== v && u !== "/_voltro/inspect/migrations/compare-env") return null;
352
368
  let b;
353
369
  try {
354
370
  b = JSON.parse(o || "{}");
@@ -356,9 +372,9 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
356
372
  return s(400, { error: "body must be JSON" }, d);
357
373
  }
358
374
  try {
359
- if (u === g) return typeof b.id != "string" || b.id.length === 0 ? s(400, { error: "body.id must be a non-empty string" }, d) : t.runSeed ? s(200, await t.runSeed(b.id), d) : s(404, { error: "runSeed not configured" }, d);
360
- if (u === _) return typeof b.id != "string" || b.id.length === 0 ? s(400, { error: "body.id must be a non-empty string" }, d) : t.rollbackMigration ? s(200, await t.rollbackMigration(b.id), d) : s(404, { error: "rollbackMigration not configured" }, d);
361
- if (u === v) {
375
+ if (u === m) return typeof b.id != "string" || b.id.length === 0 ? s(400, { error: "body.id must be a non-empty string" }, d) : t.runSeed ? s(200, await t.runSeed(b.id), d) : s(404, { error: "runSeed not configured" }, d);
376
+ if (u === h) return typeof b.id != "string" || b.id.length === 0 ? s(400, { error: "body.id must be a non-empty string" }, d) : t.rollbackMigration ? s(200, await t.rollbackMigration(b.id), d) : s(404, { error: "rollbackMigration not configured" }, d);
377
+ if (u === g) {
362
378
  if (typeof b.before != "string" || b.before.length === 0) return s(400, { error: "body.before must be a non-empty ISO date string" }, d);
363
379
  if (!t.squashMigrationHistory) return s(404, { error: "squashMigrationHistory not configured" }, d);
364
380
  let e = typeof b.note == "string" ? b.note : void 0;
@@ -367,7 +383,7 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
367
383
  note: e
368
384
  }), d);
369
385
  }
370
- return u === y ? typeof b.planId != "string" || b.planId.length === 0 ? s(400, { error: "body.planId must be a non-empty string" }, d) : t.restoreSnapshot ? s(200, await t.restoreSnapshot({ planId: b.planId }), d) : s(404, { error: "restoreSnapshot not configured" }, d) : typeof b.url != "string" || b.url.length === 0 ? s(400, { error: "body.url must be a non-empty URL string" }, d) : t.compareCrossEnv ? (await t.compareCrossEnv({
386
+ return u === v ? typeof b.planId != "string" || b.planId.length === 0 ? s(400, { error: "body.planId must be a non-empty string" }, d) : t.restoreSnapshot ? s(200, await t.restoreSnapshot({ planId: b.planId }), d) : s(404, { error: "restoreSnapshot not configured" }, d) : typeof b.url != "string" || b.url.length === 0 ? s(400, { error: "body.url must be a non-empty URL string" }, d) : t.compareCrossEnv ? (await t.compareCrossEnv({
371
387
  url: b.url,
372
388
  label: typeof b.label == "string" ? b.label : void 0,
373
389
  token: typeof b.token == "string" ? b.token : void 0
@@ -378,8 +394,8 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
378
394
  message: e?.message ?? String(e)
379
395
  }, d);
380
396
  }
381
- }, x = async (e, t, n, i = {}) => {
382
- if (f(e) !== "/_voltro/inspect/data/rows") return null;
397
+ }, E = async (e, t, n, i = {}) => {
398
+ if (_(e) !== "/_voltro/inspect/data/rows") return null;
383
399
  let o = l(n.origin ?? n.Origin), c = (i.method ?? "GET").toUpperCase();
384
400
  if (c !== "GET") return s(405, {
385
401
  error: "method not allowed",
@@ -393,23 +409,23 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
393
409
  }, o);
394
410
  if (t.kind !== "api") return s(404, { error: "data viewer is api-only" }, o);
395
411
  if (t.inspectRows === void 0) return s(404, { error: "inspectRows not configured" }, o);
396
- let d = C(e), p = d.get("table");
397
- if (!p) return s(400, { error: "query.table is required" }, o);
398
- let m = w(d.get("offset")) ?? 0, h = w(d.get("limit")) ?? 50, g = {}, _ = d.get("q");
399
- if (_) {
400
- if (_.length > 8192) return s(400, { error: "query.q too large" }, o);
412
+ let d = O(e), f = d.get("table");
413
+ if (!f) return s(400, { error: "query.table is required" }, o);
414
+ let p = k(d.get("offset")) ?? 0, m = k(d.get("limit")) ?? 50, h = {}, g = d.get("q");
415
+ if (g) {
416
+ if (g.length > 8192) return s(400, { error: "query.q too large" }, o);
401
417
  try {
402
- g = JSON.parse(Buffer.from(_, "base64url").toString("utf8"));
418
+ h = JSON.parse(Buffer.from(g, "base64url").toString("utf8"));
403
419
  } catch {
404
420
  return s(400, { error: "query.q is not valid base64url JSON" }, o);
405
421
  }
406
422
  }
407
423
  try {
408
424
  return s(200, await t.inspectRows({
409
- table: p,
410
- offset: m,
411
- limit: h,
412
- ...g
425
+ table: f,
426
+ offset: p,
427
+ limit: m,
428
+ ...h
413
429
  }), o);
414
430
  } catch (e) {
415
431
  return e?.name === "InspectQueryError" ? s(400, {
@@ -420,39 +436,39 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
420
436
  message: e?.message ?? String(e)
421
437
  }, o);
422
438
  }
423
- }, S = async (t, n, i, o = {}) => {
424
- if (f(t) !== "/_voltro/inspect/provenance") return null;
439
+ }, D = async (t, n, i, o = {}) => {
440
+ if (_(t) !== "/_voltro/inspect/provenance") return null;
425
441
  let c = l(i.origin ?? i.Origin), u = (o.method ?? "GET").toUpperCase();
426
442
  if (u !== "GET") return s(405, {
427
443
  error: "method not allowed",
428
444
  expected: "GET"
429
445
  }, c);
430
446
  if (r()) return s(503, { error: "inspect disabled (VOLTRO_INSPECT=off)" }, c);
431
- let p = (o.authResolver ?? a)(i, u);
432
- if (!p.ok) return s(401, {
447
+ let f = (o.authResolver ?? a)(i, u);
448
+ if (!f.ok) return s(401, {
433
449
  error: "unauthorized",
434
- reason: p.reason
450
+ reason: f.reason
435
451
  }, c);
436
- let m = d(o.method, i, c);
437
- if (m) return m;
452
+ let p = d(o.method, i, c);
453
+ if (p) return p;
438
454
  if (n.kind !== "api") return s(404, { error: "provenance is api-only" }, c);
439
455
  if (n.inspectRows === void 0) return s(404, { error: "inspectRows not configured" }, c);
440
- let h = C(t), g = h.get("table"), _ = h.get("id"), v = h.get("column") ?? void 0;
441
- if (!g || !_) return s(400, { error: "query.table and query.id are required" }, c);
456
+ let m = O(t), h = m.get("table"), g = m.get("id"), v = m.get("column") ?? void 0;
457
+ if (!h || !g) return s(400, { error: "query.table and query.id are required" }, c);
442
458
  try {
443
459
  let t = (await n.inspectRows({
444
- table: g,
460
+ table: h,
445
461
  limit: 1,
446
462
  filter: {
447
463
  kind: "leaf",
448
464
  column: "id",
449
465
  op: "eq",
450
- value: _
466
+ value: g
451
467
  }
452
468
  })).rows[0];
453
469
  return s(200, e(t, {
454
- table: g,
455
- id: _,
470
+ table: h,
471
+ id: g,
456
472
  ...v === void 0 ? {} : { column: v }
457
473
  }), c);
458
474
  } catch (e) {
@@ -464,15 +480,15 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
464
480
  message: e?.message ?? String(e)
465
481
  }, c);
466
482
  }
467
- }, C = (e) => {
483
+ }, O = (e) => {
468
484
  let t = e.indexOf("?");
469
485
  return t < 0 ? new URLSearchParams() : new URLSearchParams(e.slice(t + 1));
470
- }, w = (e) => {
486
+ }, k = (e) => {
471
487
  if (e === null || e === "") return;
472
488
  let t = Number(e);
473
489
  return Number.isFinite(t) && t >= 0 ? Math.floor(t) : void 0;
474
- }, T = async (e, t, n, i = {}) => {
475
- if (f(e) !== "/_voltro/inspect/workflows/runs") return null;
490
+ }, A = async (e, t, n, i = {}) => {
491
+ if (_(e) !== "/_voltro/inspect/workflows/runs") return null;
476
492
  let o = l(n.origin ?? n.Origin), c = (i.method ?? "GET").toUpperCase();
477
493
  if (c !== "GET") return s(405, {
478
494
  error: "method not allowed",
@@ -491,14 +507,14 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
491
507
  offset: 0,
492
508
  limit: 50
493
509
  }, o);
494
- let d = C(e);
510
+ let d = O(e);
495
511
  try {
496
512
  let e = d.get("deadLettered") === "1" || d.get("deadLettered") === "true";
497
513
  return s(200, await t.inspectWorkflowRuns({
498
514
  ...d.get("tag") === null ? {} : { tag: d.get("tag") },
499
515
  ...e ? { deadLettered: !0 } : d.get("status") === null ? {} : { status: d.get("status") },
500
- offset: w(d.get("offset")) ?? 0,
501
- limit: w(d.get("limit")) ?? 50
516
+ offset: k(d.get("offset")) ?? 0,
517
+ limit: k(d.get("limit")) ?? 50
502
518
  }), o);
503
519
  } catch (e) {
504
520
  return s(500, {
@@ -506,32 +522,32 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
506
522
  message: e?.message ?? String(e)
507
523
  }, o);
508
524
  }
509
- }, E = async (e, t, n, i, o = {}) => {
510
- let c = f(e).match(/^\/_voltro\/inspect\/workflows\/start\/([^/]+)$/);
525
+ }, j = async (e, t, n, i, o = {}) => {
526
+ let c = _(e).match(/^\/_voltro\/inspect\/workflows\/start\/([^/]+)$/);
511
527
  if (!c) return null;
512
- let u = decodeURIComponent(c[1] ?? ""), d = l(n.origin ?? n.Origin), p = (o.method ?? "POST").toUpperCase();
513
- if (p !== "POST") return s(405, {
528
+ let u = decodeURIComponent(c[1] ?? ""), d = l(n.origin ?? n.Origin), f = (o.method ?? "POST").toUpperCase();
529
+ if (f !== "POST") return s(405, {
514
530
  error: "method not allowed",
515
531
  expected: "POST"
516
532
  }, d);
517
533
  if (r()) return s(503, { error: "inspect disabled (VOLTRO_INSPECT=off)" }, d);
518
- let m = (o.authResolver ?? a)(n, p);
519
- if (!m.ok) return s(401, {
534
+ let p = (o.authResolver ?? a)(n, f);
535
+ if (!p.ok) return s(401, {
520
536
  error: "unauthorized",
521
- reason: m.reason
537
+ reason: p.reason
522
538
  }, d);
523
539
  if (t.kind !== "api") return s(404, { error: "workflow start is api-only" }, d);
524
540
  if (t.inspectStartWorkflow === void 0) return s(404, { error: "inspectStartWorkflow not configured" }, d);
525
- let h = {};
541
+ let m = {};
526
542
  if (i.length > 0) try {
527
- h = JSON.parse(i).payload ?? {};
543
+ m = JSON.parse(i).payload ?? {};
528
544
  } catch {
529
545
  return s(400, { error: "start requires JSON body `{ payload?: unknown }`" }, d);
530
546
  }
531
547
  try {
532
548
  return s(200, await t.inspectStartWorkflow({
533
549
  name: u,
534
- payload: h
550
+ payload: m
535
551
  }), d);
536
552
  } catch (e) {
537
553
  return s(500, {
@@ -539,8 +555,8 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
539
555
  message: e?.message ?? String(e)
540
556
  }, d);
541
557
  }
542
- }, D = async (e, t, n, i = {}) => {
543
- let o = f(e);
558
+ }, M = async (e, t, n, i = {}) => {
559
+ let o = _(e);
544
560
  if (!o.startsWith("/_voltro/inspect/schedules")) return null;
545
561
  let c = l(n.origin ?? n.Origin);
546
562
  if (r()) return s(503, { error: "inspect disabled (VOLTRO_INSPECT=off)" }, c);
@@ -549,17 +565,17 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
549
565
  error: "unauthorized",
550
566
  reason: u.reason
551
567
  }, c);
552
- let p = d(i.method, n, c);
553
- if (p) return p;
568
+ let f = d(i.method, n, c);
569
+ if (f) return f;
554
570
  if (t.kind !== "api") return s(404, { error: "schedules are api-only" }, c);
555
- let m = (i.method ?? "GET").toUpperCase(), h = o.match(/^\/_voltro\/inspect\/schedules\/([^/]+)\/fire$/);
556
- if (h) {
557
- if (m !== "POST") return s(405, {
571
+ let p = (i.method ?? "GET").toUpperCase(), m = o.match(/^\/_voltro\/inspect\/schedules\/([^/]+)\/fire$/);
572
+ if (m) {
573
+ if (p !== "POST") return s(405, {
558
574
  error: "method not allowed",
559
575
  expected: "POST"
560
576
  }, c);
561
577
  if (!t.inspectFireSchedule) return s(404, { error: "inspectFireSchedule not configured" }, c);
562
- let n = decodeURIComponent(h[1] ?? ""), r = C(e).get("trigger") === "external" ? "external" : "manual";
578
+ let n = decodeURIComponent(m[1] ?? ""), r = O(e).get("trigger") === "external" ? "external" : "manual";
563
579
  try {
564
580
  return s(200, await t.inspectFireSchedule({
565
581
  name: n,
@@ -573,7 +589,7 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
573
589
  }
574
590
  }
575
591
  if (o === "/_voltro/inspect/schedules/runs") {
576
- if (m !== "GET") return s(405, {
592
+ if (p !== "GET") return s(405, {
577
593
  error: "method not allowed",
578
594
  expected: "GET"
579
595
  }, c);
@@ -583,12 +599,12 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
583
599
  offset: 0,
584
600
  limit: 50
585
601
  }, c);
586
- let n = C(e);
602
+ let n = O(e);
587
603
  try {
588
604
  return s(200, await t.inspectScheduleRuns({
589
605
  ...n.get("name") === null ? {} : { name: n.get("name") },
590
- offset: w(n.get("offset")) ?? 0,
591
- limit: w(n.get("limit")) ?? 50
606
+ offset: k(n.get("offset")) ?? 0,
607
+ limit: k(n.get("limit")) ?? 50
592
608
  }), c);
593
609
  } catch (e) {
594
610
  return s(500, {
@@ -597,7 +613,7 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
597
613
  }, c);
598
614
  }
599
615
  }
600
- return o === "/_voltro/inspect/schedules" ? m === "GET" ? t.inspectSchedules ? s(200, t.inspectSchedules(), c) : s(200, {
616
+ return o === "/_voltro/inspect/schedules" ? p === "GET" ? t.inspectSchedules ? s(200, t.inspectSchedules(), c) : s(200, {
601
617
  schedules: [],
602
618
  coordination: "single"
603
619
  }, c) : s(405, {
@@ -607,8 +623,8 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
607
623
  error: "unknown schedules endpoint",
608
624
  path: o
609
625
  }, c);
610
- }, O = async (e, t, n, i = {}) => {
611
- if (f(e) !== "/_voltro/inspect/cluster") return null;
626
+ }, N = async (e, t, n, i = {}) => {
627
+ if (_(e) !== "/_voltro/inspect/cluster") return null;
612
628
  let o = l(n.origin ?? n.Origin);
613
629
  if (r()) return s(503, { error: "inspect disabled (VOLTRO_INSPECT=off)" }, o);
614
630
  let c = (i.authResolver ?? a)(n, i.method ?? "POST");
@@ -655,8 +671,8 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
655
671
  message: e?.message ?? String(e)
656
672
  }, o);
657
673
  }
658
- }, k = async (e, t, n, i = {}) => {
659
- let o = f(e).match(/^\/_voltro\/inspect\/workflows\/runs\/([^/]+)\/steps$/);
674
+ }, P = async (e, t, n, i = {}) => {
675
+ let o = _(e).match(/^\/_voltro\/inspect\/workflows\/runs\/([^/]+)\/steps$/);
660
676
  if (!o) return null;
661
677
  let c = decodeURIComponent(o[1] ?? ""), u = l(n.origin ?? n.Origin), d = (i.method ?? "GET").toUpperCase();
662
678
  if (d !== "GET") return s(405, {
@@ -664,10 +680,10 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
664
680
  expected: "GET"
665
681
  }, u);
666
682
  if (r()) return s(503, { error: "inspect disabled (VOLTRO_INSPECT=off)" }, u);
667
- let p = (i.authResolver ?? a)(n, d);
668
- if (!p.ok) return s(401, {
683
+ let f = (i.authResolver ?? a)(n, d);
684
+ if (!f.ok) return s(401, {
669
685
  error: "unauthorized",
670
- reason: p.reason
686
+ reason: f.reason
671
687
  }, u);
672
688
  if (t.kind !== "api") return s(404, { error: "workflow steps are api-only" }, u);
673
689
  if (t.inspectWorkflowRunSteps === void 0) return s(200, { steps: [] }, u);
@@ -679,8 +695,8 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
679
695
  message: e?.message ?? String(e)
680
696
  }, u);
681
697
  }
682
- }, A = async (e, t, n, i = {}) => {
683
- let o = f(e).match(/^\/_voltro\/inspect\/workflows\/runs\/([^/]+)\/events$/);
698
+ }, F = async (e, t, n, i = {}) => {
699
+ let o = _(e).match(/^\/_voltro\/inspect\/workflows\/runs\/([^/]+)\/events$/);
684
700
  if (!o) return null;
685
701
  let c = decodeURIComponent(o[1] ?? ""), u = l(n.origin ?? n.Origin), d = (i.method ?? "GET").toUpperCase();
686
702
  if (d !== "GET") return s(405, {
@@ -688,10 +704,10 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
688
704
  expected: "GET"
689
705
  }, u);
690
706
  if (r()) return s(503, { error: "inspect disabled (VOLTRO_INSPECT=off)" }, u);
691
- let p = (i.authResolver ?? a)(n, d);
692
- if (!p.ok) return s(401, {
707
+ let f = (i.authResolver ?? a)(n, d);
708
+ if (!f.ok) return s(401, {
693
709
  error: "unauthorized",
694
- reason: p.reason
710
+ reason: f.reason
695
711
  }, u);
696
712
  if (t.kind !== "api") return s(404, { error: "workflow events are api-only" }, u);
697
713
  if (t.inspectWorkflowRunEvents === void 0) return s(200, { events: [] }, u);
@@ -703,8 +719,8 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
703
719
  message: e?.message ?? String(e)
704
720
  }, u);
705
721
  }
706
- }, j = async (e, t, n, i = {}) => {
707
- if (f(t) !== "/_voltro/inspect/workflows/events") return null;
722
+ }, I = async (e, t, n, i = {}) => {
723
+ if (_(t) !== "/_voltro/inspect/workflows/events") return null;
708
724
  let o = l(n.origin ?? n.Origin), c = (i.method ?? "GET").toUpperCase();
709
725
  if (c !== "GET") return s(405, {
710
726
  error: "method not allowed",
@@ -723,12 +739,12 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
723
739
  offset: 0,
724
740
  limit: 100
725
741
  }, o);
726
- let d = p(t), m = d.get("name") ?? void 0, h = Number(d.get("offset") ?? "0"), g = Number(d.get("limit") ?? "100");
742
+ let d = v(t), f = d.get("name") ?? void 0, p = Number(d.get("offset") ?? "0"), m = Number(d.get("limit") ?? "100");
727
743
  try {
728
744
  return s(200, await e.inspectWorkflowDomainEvents({
729
- ...m !== void 0 && m !== "" ? { name: m } : {},
730
- offset: Number.isFinite(h) ? h : 0,
731
- limit: Number.isFinite(g) ? g : 100
745
+ ...f !== void 0 && f !== "" ? { name: f } : {},
746
+ offset: Number.isFinite(p) ? p : 0,
747
+ limit: Number.isFinite(m) ? m : 100
732
748
  }), o);
733
749
  } catch (e) {
734
750
  return s(500, {
@@ -736,8 +752,8 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
736
752
  message: e?.message ?? String(e)
737
753
  }, o);
738
754
  }
739
- }, M = async (e, t, n, i = {}) => {
740
- let o = f(t).match(/^\/_voltro\/inspect\/workflows\/events\/([^/]+)\/deliveries$/);
755
+ }, L = async (e, t, n, i = {}) => {
756
+ let o = _(t).match(/^\/_voltro\/inspect\/workflows\/events\/([^/]+)\/deliveries$/);
741
757
  if (!o) return null;
742
758
  let c = decodeURIComponent(o[1] ?? ""), u = l(n.origin ?? n.Origin), d = (i.method ?? "GET").toUpperCase();
743
759
  if (d !== "GET") return s(405, {
@@ -745,10 +761,10 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
745
761
  expected: "GET"
746
762
  }, u);
747
763
  if (r()) return s(503, { error: "inspect disabled (VOLTRO_INSPECT=off)" }, u);
748
- let p = (i.authResolver ?? a)(n, d);
749
- if (!p.ok) return s(401, {
764
+ let f = (i.authResolver ?? a)(n, d);
765
+ if (!f.ok) return s(401, {
750
766
  error: "unauthorized",
751
- reason: p.reason
767
+ reason: f.reason
752
768
  }, u);
753
769
  if (e.kind !== "api") return s(404, { error: "workflow event deliveries are api-only" }, u);
754
770
  if (e.inspectWorkflowEventDeliveries === void 0) return s(200, { deliveries: [] }, u);
@@ -760,8 +776,8 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
760
776
  message: e?.message ?? String(e)
761
777
  }, u);
762
778
  }
763
- }, N = async (e, t, n, i = {}) => {
764
- if (f(e) !== "/_voltro/inspect/workflows/children") return null;
779
+ }, R = async (e, t, n, i = {}) => {
780
+ if (_(e) !== "/_voltro/inspect/workflows/children") return null;
765
781
  let o = l(n.origin ?? n.Origin), c = (i.method ?? "GET").toUpperCase();
766
782
  if (c !== "GET") return s(405, {
767
783
  error: "method not allowed",
@@ -774,7 +790,7 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
774
790
  reason: u.reason
775
791
  }, o);
776
792
  if (t.kind !== "api") return s(404, { error: "workflow children are api-only" }, o);
777
- let d = C(e).get("parentExecutionId");
793
+ let d = O(e).get("parentExecutionId");
778
794
  if (d === null || d === "") return s(400, { error: "parentExecutionId query param required" }, o);
779
795
  if (t.inspectWorkflowChildren === void 0) return s(200, {
780
796
  runs: [],
@@ -790,22 +806,22 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
790
806
  message: e?.message ?? String(e)
791
807
  }, o);
792
808
  }
793
- }, P = async (e, t, n, i, o = {}) => {
794
- let c = f(e).match(/^\/_voltro\/inspect\/workflows\/runs\/([^/]+)\/(cancel|retry|suspend|resume|signal|update|discard|redrive)$/);
809
+ }, z = async (e, t, n, i, o = {}) => {
810
+ let c = _(e).match(/^\/_voltro\/inspect\/workflows\/runs\/([^/]+)\/(cancel|retry|suspend|resume-from-step|resume|signal|update|discard|redrive)$/);
795
811
  if (!c) return null;
796
- let u = decodeURIComponent(c[1] ?? ""), d = c[2], p = l(n.origin ?? n.Origin), m = (o.method ?? "POST").toUpperCase();
797
- if (m !== "POST") return s(405, {
812
+ let u = decodeURIComponent(c[1] ?? ""), d = c[2], f = l(n.origin ?? n.Origin), p = (o.method ?? "POST").toUpperCase();
813
+ if (p !== "POST") return s(405, {
798
814
  error: "method not allowed",
799
815
  expected: "POST"
800
- }, p);
801
- if (r()) return s(503, { error: "inspect disabled (VOLTRO_INSPECT=off)" }, p);
802
- let h = (o.authResolver ?? a)(n, m);
803
- if (!h.ok) return s(401, {
816
+ }, f);
817
+ if (r()) return s(503, { error: "inspect disabled (VOLTRO_INSPECT=off)" }, f);
818
+ let m = (o.authResolver ?? a)(n, p);
819
+ if (!m.ok) return s(401, {
804
820
  error: "unauthorized",
805
- reason: h.reason
806
- }, p);
807
- if (t.kind !== "api") return s(404, { error: "workflow actions are api-only" }, p);
808
- let g = {
821
+ reason: m.reason
822
+ }, f);
823
+ if (t.kind !== "api") return s(404, { error: "workflow actions are api-only" }, f);
824
+ let h = {
809
825
  cancel: t.inspectCancelWorkflowRun,
810
826
  retry: t.inspectRetryWorkflowRun,
811
827
  suspend: t.inspectSuspendWorkflowRun,
@@ -813,38 +829,43 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
813
829
  signal: t.inspectSignalWorkflowRun,
814
830
  update: t.inspectUpdateWorkflowRun,
815
831
  discard: t.inspectDiscardWorkflowRun,
816
- redrive: t.inspectRedriveWorkflowRun
832
+ redrive: t.inspectRedriveWorkflowRun,
833
+ "resume-from-step": t.inspectResumeWorkflowRunFromStep
817
834
  }[d];
818
- if (!g) return s(404, { error: `inspect${d[0]?.toUpperCase() ?? ""}${d.slice(1)}WorkflowRun not configured` }, p);
819
- let _, v, y, b, x, S;
835
+ if (!h) return s(404, { error: d === "resume-from-step" ? "inspectResumeWorkflowRunFromStep not configured" : `inspect${d[0]?.toUpperCase() ?? ""}${d.slice(1)}WorkflowRun not configured` }, f);
836
+ let g, v, y, b, x, S, C;
820
837
  if (i.length > 0) try {
821
838
  let e = JSON.parse(i);
822
- d === "retry" && (_ = e.payloadOverride), d === "signal" && (typeof e.signalName == "string" && e.signalName.length > 0 && (v = e.signalName), y = e.payload), d === "update" && (typeof e.updateName == "string" && e.updateName.length > 0 && (b = e.updateName), x = e.payload, typeof e.timeoutMs == "number" && Number.isFinite(e.timeoutMs) && (S = e.timeoutMs));
839
+ d === "retry" && (g = e.payloadOverride), d === "resume-from-step" && typeof e.step == "string" && e.step.length > 0 && (C = e.step), d === "signal" && (typeof e.signalName == "string" && e.signalName.length > 0 && (v = e.signalName), y = e.payload), d === "update" && (typeof e.updateName == "string" && e.updateName.length > 0 && (b = e.updateName), x = e.payload, typeof e.timeoutMs == "number" && Number.isFinite(e.timeoutMs) && (S = e.timeoutMs));
823
840
  } catch {}
824
- if (d === "signal" && v === void 0) return s(400, { error: "signal requires JSON body `{ signalName: string, payload?: unknown }`" }, p);
825
- if (d === "update" && b === void 0) return s(400, { error: "update requires JSON body `{ updateName: string, payload?: unknown, timeoutMs?: number }`" }, p);
841
+ if (d === "signal" && v === void 0) return s(400, { error: "signal requires JSON body `{ signalName: string, payload?: unknown }`" }, f);
842
+ if (d === "update" && b === void 0) return s(400, { error: "update requires JSON body `{ updateName: string, payload?: unknown, timeoutMs?: number }`" }, f);
843
+ if (d === "resume-from-step" && C === void 0) return s(400, { error: "resume-from-step requires JSON body `{ step: string }` (the step name to rewind to)" }, f);
826
844
  try {
827
- return s(200, d === "retry" && _ !== void 0 ? await g({
845
+ return s(200, d === "retry" && g !== void 0 ? await h({
828
846
  runId: u,
829
- payloadOverride: _
830
- }) : d === "signal" ? await g({
847
+ payloadOverride: g
848
+ }) : d === "signal" ? await h({
831
849
  runId: u,
832
850
  signalName: v,
833
851
  payload: y
834
- }) : d === "update" ? await g({
852
+ }) : d === "update" ? await h({
835
853
  runId: u,
836
854
  updateName: b,
837
855
  payload: x,
838
856
  ...S === void 0 ? {} : { timeoutMs: S }
839
- }) : await g({ runId: u }), p);
857
+ }) : d === "resume-from-step" ? await h({
858
+ runId: u,
859
+ step: C
860
+ }) : await h({ runId: u }), f);
840
861
  } catch (e) {
841
862
  return s(500, {
842
863
  error: `${d} failed`,
843
864
  message: e?.message ?? String(e)
844
- }, p);
865
+ }, f);
845
866
  }
846
- }, F = async (e, t, n, i, o = {}) => {
847
- if (f(e) !== "/_voltro/inspect/data/import" || (o.method ?? "POST").toUpperCase() !== "POST") return null;
867
+ }, B = async (e, t, n, i, o = {}) => {
868
+ if (_(e) !== "/_voltro/inspect/data/import" || (o.method ?? "POST").toUpperCase() !== "POST") return null;
848
869
  let c = l(n.origin ?? n.Origin);
849
870
  if (r()) return s(503, { error: "inspect disabled (VOLTRO_INSPECT=off)" }, c);
850
871
  let u = (o.authResolver ?? a)(n, "POST");
@@ -852,23 +873,23 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
852
873
  error: "unauthorized",
853
874
  reason: u.reason
854
875
  }, c);
855
- let p = d(o.method, n, c);
856
- if (p) return p;
876
+ let f = d(o.method, n, c);
877
+ if (f) return f;
857
878
  if (t.kind !== "api") return s(404, { error: "data import is api-only" }, c);
858
879
  if (!t.inspectImport) return s(404, { error: "inspectImport not configured" }, c);
859
- let m;
880
+ let p;
860
881
  try {
861
- m = JSON.parse(i || "{}");
882
+ p = JSON.parse(i || "{}");
862
883
  } catch {
863
884
  return s(400, { error: "body must be JSON" }, c);
864
885
  }
865
- if (typeof m.bundleDir != "string" || !m.bundleDir) return s(400, { error: "body.bundleDir (string) is required" }, c);
886
+ if (typeof p.bundleDir != "string" || !p.bundleDir) return s(400, { error: "body.bundleDir (string) is required" }, c);
866
887
  try {
867
888
  return s(200, await t.inspectImport({
868
- bundleDir: m.bundleDir,
869
- ...m.mode === "upsert" || m.mode === "append" || m.mode === "replace" ? { mode: m.mode } : {},
870
- ...m.onConflict === "skip" || m.onConflict === "fail" ? { onConflict: m.onConflict } : {},
871
- ...typeof m.atomic == "boolean" ? { atomic: m.atomic } : {}
889
+ bundleDir: p.bundleDir,
890
+ ...p.mode === "upsert" || p.mode === "append" || p.mode === "replace" ? { mode: p.mode } : {},
891
+ ...p.onConflict === "skip" || p.onConflict === "fail" ? { onConflict: p.onConflict } : {},
892
+ ...typeof p.atomic == "boolean" ? { atomic: p.atomic } : {}
872
893
  }), c);
873
894
  } catch (e) {
874
895
  return s(500, {
@@ -876,17 +897,17 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
876
897
  message: e?.message ?? String(e)
877
898
  }, c);
878
899
  }
879
- }, I = async (e, t, n, i, o = {}) => {
880
- let c = f(e);
900
+ }, V = async (e, t, n, i, o = {}) => {
901
+ let c = _(e);
881
902
  if (!c.startsWith("/_voltro/inspect/data/rows")) return null;
882
903
  let u = (o.method ?? "POST").toUpperCase();
883
904
  if (u === "GET" && c === "/_voltro/inspect/data/rows") return null;
884
905
  let d = l(n.origin ?? n.Origin);
885
906
  if (r()) return s(503, { error: "inspect disabled (VOLTRO_INSPECT=off)" }, d);
886
- let p = (o.authResolver ?? a)(n, u);
887
- if (!p.ok) return s(401, {
907
+ let f = (o.authResolver ?? a)(n, u);
908
+ if (!f.ok) return s(401, {
888
909
  error: "unauthorized",
889
- reason: p.reason
910
+ reason: f.reason
890
911
  }, d);
891
912
  if (t.kind !== "api") return s(404, { error: "data viewer is api-only" }, d);
892
913
  if (u === "POST" && c === "/_voltro/inspect/data/rows") {
@@ -910,12 +931,12 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
910
931
  }, d);
911
932
  }
912
933
  }
913
- let m = c.match(/^\/_voltro\/inspect\/data\/rows\/([^/]+)$/);
914
- if (!m) return null;
915
- let h = decodeURIComponent(m[1] ?? "");
916
- if (!h) return s(400, { error: "row id is required in URL" }, d);
917
- let g = C(e).get("table") ?? "";
918
- if (!g) return s(400, { error: "query.table is required" }, d);
934
+ let p = c.match(/^\/_voltro\/inspect\/data\/rows\/([^/]+)$/);
935
+ if (!p) return null;
936
+ let m = decodeURIComponent(p[1] ?? "");
937
+ if (!m) return s(400, { error: "row id is required in URL" }, d);
938
+ let h = O(e).get("table") ?? "";
939
+ if (!h) return s(400, { error: "query.table is required" }, d);
919
940
  if (u === "PATCH") {
920
941
  if (!t.inspectUpdateRow) return s(404, { error: "inspectUpdateRow not configured" }, d);
921
942
  let e;
@@ -927,8 +948,8 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
927
948
  if (!e.patch || typeof e.patch != "object") return s(400, { error: "body.patch must be an object" }, d);
928
949
  try {
929
950
  return s(200, await t.inspectUpdateRow({
930
- table: g,
931
- id: h,
951
+ table: h,
952
+ id: m,
932
953
  patch: e.patch
933
954
  }), d);
934
955
  } catch (e) {
@@ -942,8 +963,8 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
942
963
  if (!t.inspectDeleteRow) return s(404, { error: "inspectDeleteRow not configured" }, d);
943
964
  try {
944
965
  return s(200, await t.inspectDeleteRow({
945
- table: g,
946
- id: h
966
+ table: h,
967
+ id: m
947
968
  }), d);
948
969
  } catch (e) {
949
970
  return s(500, {
@@ -958,4 +979,4 @@ var n = "/_voltro/inspect", r = () => process.env.VOLTRO_INSPECT === "off", i =
958
979
  }, d);
959
980
  };
960
981
  //#endregion
961
- export { E as C, c as D, r as E, o as O, T as S, u as T, N as _, a, A as b, x as c, v as d, S as f, P as g, y as h, d as i, I as l, D as m, h as n, O as o, _ as p, g as r, F as s, n as t, b as u, j as v, l as w, k as x, M as y };
982
+ export { g as A, j as C, r as D, u as E, c as O, A as S, h as T, R as _, a, F as b, E as c, C as d, D as f, z as g, w as h, d as i, o as j, f as k, V as l, M as m, b as n, N as o, S as p, x as r, B as s, n as t, T as u, I as v, l as w, P as x, L as y };