@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.
- package/CHANGELOG.md +513 -0
- package/THIRD-PARTY-NOTICES.md +88 -2
- package/dist/{apiBuild-D22_EpoR.js → apiBuild-BESZbTjA.js} +4 -4
- package/dist/apiBuild-C8d74T6g.js +2 -0
- package/dist/bin.js +3 -3
- package/dist/checkCommand-BPAtyWs8.js +2420 -0
- package/dist/checkCommand-DBvZvCh1.js +2 -0
- package/dist/cliRuntime-Oh517vCV.js +96 -0
- package/dist/{commands-jBX8no1I.js → commands-82BDEktg.js} +6476 -7672
- package/dist/dbCommand-CaIVTp-a.js +2 -0
- package/dist/{dbCommand-uuNCrFAb.js → dbCommand-bCBbk6tz.js} +3 -3
- package/dist/{dev-DcbIJrWg.js → dev-Cg4BKLmi.js} +3034 -2619
- package/dist/dev-DeEJj5T4.js +3 -0
- package/dist/fileConventions-Cof68_BL.js +33 -0
- package/dist/{frameworkTableAssembly-BwHU9Euq.js → frameworkTableAssembly-4Db40V23.js} +2 -2
- package/dist/frameworkTableAssembly-BTNirAAk.js +2 -0
- package/dist/index.js +1 -1
- package/dist/{inspect-CUCCzw2I.js → inspect-BMvQpwqy.js} +211 -190
- package/dist/inspect-DHeaMZak.js +2 -0
- package/dist/{inspectMetrics-BU90mvJN.js → inspectMetrics-DHYygE4s.js} +999 -961
- package/dist/{manifestBuild-BnzAxp2O.js → manifestBuild-C4R1EdHn.js} +1 -1
- package/dist/manifestBuild-Ck_90gZy.js +2 -0
- package/dist/sdkgen-CW5NbYF0.js +582 -0
- package/dist/{seedRunner-D6eu-u5U.js → seedRunner-Bqxgp7HZ.js} +60 -59
- package/dist/serveCommand-BXl8mhZD.js +1489 -0
- package/dist/serveEntry.js +3 -3
- package/dist/{start-BGXIf6zT.js → start-CsCIaW4-.js} +282 -269
- package/dist/startEntry.js +2 -2
- package/package.json +17 -17
- package/templates/AGENTS.md +2 -1
- package/templates/agent-docs/_index.md +2 -1
- package/templates/agent-docs/_manifest.json +10 -1
- package/templates/agent-docs/ai.md +135 -0
- package/templates/agent-docs/cli.md +124 -6
- package/templates/agent-docs/configuration.md +32 -0
- package/templates/agent-docs/data.md +282 -0
- package/templates/agent-docs/database/migrations.md +47 -0
- package/templates/agent-docs/database/misc.md +57 -0
- package/templates/agent-docs/database/schema.md +3 -1
- package/templates/agent-docs/deployment.md +56 -0
- package/templates/agent-docs/internationalization.md +161 -1
- package/templates/agent-docs/local-first-mobile.md +414 -0
- package/templates/agent-docs/routing.md +93 -2
- package/templates/agent-docs/schema-driven-ui.md +12 -0
- package/templates/agent-docs/templates/apibackends.md +1 -1
- package/templates/agent-docs/testing.md +42 -0
- package/templates/agent-docs/whats-new.md +165 -131
- package/templates/agent-docs/workflows.md +11 -0
- package/templates/apps/api-ai/package.json +7 -7
- package/templates/apps/api-auth/package.json +8 -8
- package/templates/apps/api-backend/package.json +7 -7
- package/templates/apps/api-backend-deactivation/package.json +7 -7
- package/templates/apps/api-backend-mail/package.json +8 -8
- package/templates/apps/api-backend-mariadb/package.json +9 -9
- package/templates/apps/api-backend-sqlite/.env.example +19 -0
- package/templates/apps/api-backend-sqlite/README.md +38 -0
- package/templates/apps/api-backend-sqlite/app.config.ts +35 -0
- package/templates/apps/api-backend-sqlite/database/schema.ts +54 -0
- package/templates/apps/api-backend-sqlite/mutations/notes.create.mutation.server.ts +19 -0
- package/templates/apps/api-backend-sqlite/mutations/notes.create.mutation.ts +37 -0
- package/templates/apps/api-backend-sqlite/package.json +30 -0
- package/templates/apps/api-backend-sqlite/queries/notes.query.server.ts +14 -0
- package/templates/apps/api-backend-sqlite/queries/notes.query.ts +20 -0
- package/templates/apps/api-backend-sqlite/template.json +6 -0
- package/templates/apps/api-backend-sqlite/tests/notes.create.test.ts +50 -0
- package/templates/apps/api-backend-sqlite/tsconfig.json +5 -0
- package/templates/apps/api-backend-storage/package.json +8 -8
- package/templates/apps/api-cms/README.md +104 -0
- package/templates/apps/api-cms/actions/content.get.action.server.ts +27 -0
- package/templates/apps/api-cms/actions/content.get.action.ts +19 -0
- package/templates/apps/api-cms/actions/content.types.action.server.ts +26 -0
- package/templates/apps/api-cms/actions/content.types.action.ts +40 -0
- package/templates/apps/api-cms/actions/me.action.server.ts +18 -0
- package/templates/apps/api-cms/actions/me.action.ts +16 -0
- package/templates/apps/api-cms/app.config.ts +61 -0
- package/templates/apps/api-cms/content/blogPost.contentType.ts +39 -0
- package/templates/apps/api-cms/content/index.ts +18 -0
- package/templates/apps/api-cms/content/page.contentType.ts +24 -0
- package/templates/apps/api-cms/database/schema.ts +64 -0
- package/templates/apps/api-cms/mutations/content.publish.mutation.server.ts +19 -0
- package/templates/apps/api-cms/mutations/content.publish.mutation.ts +15 -0
- package/templates/apps/api-cms/mutations/content.saveDraft.mutation.server.ts +36 -0
- package/templates/apps/api-cms/mutations/content.saveDraft.mutation.ts +32 -0
- package/templates/apps/api-cms/mutations/content.unpublish.mutation.server.ts +19 -0
- package/templates/apps/api-cms/mutations/content.unpublish.mutation.ts +11 -0
- package/templates/apps/api-cms/package.json +32 -0
- package/templates/apps/api-cms/queries/content.list.query.server.ts +0 -0
- package/templates/apps/api-cms/queries/content.list.query.ts +27 -0
- package/templates/apps/api-cms/template.json +6 -0
- package/templates/apps/api-cms/tests/content.descriptors.test.ts +64 -0
- package/templates/apps/api-cms/tests/content.write.test.ts +85 -0
- package/templates/apps/api-cms/tsconfig.json +5 -0
- package/templates/apps/api-data-advanced/package.json +8 -8
- package/templates/apps/api-durable/package.json +8 -8
- package/templates/apps/api-feature-flags/package.json +9 -9
- package/templates/apps/api-governance/package.json +8 -8
- package/templates/apps/api-kv/package.json +8 -8
- package/templates/apps/api-moderation/package.json +8 -8
- package/templates/apps/api-observability/package.json +8 -8
- package/templates/apps/api-ratelimit/package.json +8 -8
- package/templates/apps/api-rbac/package.json +8 -8
- package/templates/apps/api-rest/package.json +7 -7
- package/templates/apps/api-saas/package.json +11 -11
- package/templates/apps/api-saas-starter/README.md +103 -0
- package/templates/apps/api-saas-starter/actions/me.action.server.ts +18 -0
- package/templates/apps/api-saas-starter/actions/me.action.ts +20 -0
- package/templates/apps/api-saas-starter/app.config.ts +87 -0
- package/templates/apps/api-saas-starter/database/schema.ts +57 -0
- package/templates/apps/api-saas-starter/mutations/invites.create.mutation.server.ts +26 -0
- package/templates/apps/api-saas-starter/mutations/invites.create.mutation.ts +18 -0
- package/templates/apps/api-saas-starter/mutations/projects.create.mutation.server.ts +29 -0
- package/templates/apps/api-saas-starter/mutations/projects.create.mutation.ts +18 -0
- package/templates/apps/api-saas-starter/package.json +32 -0
- package/templates/apps/api-saas-starter/queries/invites.list.query.server.ts +14 -0
- package/templates/apps/api-saas-starter/queries/invites.list.query.ts +17 -0
- package/templates/apps/api-saas-starter/queries/projects.list.query.server.ts +14 -0
- package/templates/apps/api-saas-starter/queries/projects.list.query.ts +18 -0
- package/templates/apps/api-saas-starter/template.json +6 -0
- package/templates/apps/api-saas-starter/tests/projects.create.test.ts +62 -0
- package/templates/apps/api-saas-starter/tests/session.test.ts +33 -0
- package/templates/apps/api-saas-starter/tsconfig.json +5 -0
- package/templates/apps/api-search/package.json +8 -8
- package/templates/apps/api-status/README.md +88 -0
- package/templates/apps/api-status/app.config.ts +36 -0
- package/templates/apps/api-status/authz.ts +33 -0
- package/templates/apps/api-status/database/schema.ts +70 -0
- package/templates/apps/api-status/mutations/components.create.mutation.server.ts +19 -0
- package/templates/apps/api-status/mutations/components.create.mutation.ts +16 -0
- package/templates/apps/api-status/mutations/incidents.create.mutation.server.ts +25 -0
- package/templates/apps/api-status/mutations/incidents.create.mutation.ts +22 -0
- package/templates/apps/api-status/mutations/incidents.resolve.mutation.server.ts +24 -0
- package/templates/apps/api-status/mutations/incidents.resolve.mutation.ts +19 -0
- package/templates/apps/api-status/mutations/incidents.update.mutation.server.ts +26 -0
- package/templates/apps/api-status/mutations/incidents.update.mutation.ts +21 -0
- package/templates/apps/api-status/package.json +30 -0
- package/templates/apps/api-status/queries/components.list.query.server.ts +14 -0
- package/templates/apps/api-status/queries/components.list.query.ts +13 -0
- package/templates/apps/api-status/queries/incidents.live.query.server.ts +14 -0
- package/templates/apps/api-status/queries/incidents.live.query.ts +20 -0
- package/templates/apps/api-status/queries/updates.list.query.server.ts +14 -0
- package/templates/apps/api-status/queries/updates.list.query.ts +17 -0
- package/templates/apps/api-status/template.json +6 -0
- package/templates/apps/api-status/tests/status.test.ts +70 -0
- package/templates/apps/api-status/tsconfig.json +5 -0
- package/templates/apps/api-versioning/package.json +8 -8
- package/templates/apps/api-webhooks/package.json +9 -9
- package/templates/apps/changelog/package.json +6 -6
- package/templates/apps/edge-functions/package.json +2 -2
- package/templates/apps/frontend-admin/package.json +8 -8
- package/templates/apps/frontend-app/package.json +8 -8
- package/templates/apps/frontend-auth/README.md +78 -0
- package/templates/apps/frontend-auth/app.config.ts +34 -0
- package/templates/apps/frontend-auth/package.json +32 -0
- package/templates/apps/frontend-auth/src/components/AuthShell.tsx +35 -0
- package/templates/apps/frontend-auth/src/components/PasswordStrength.tsx +33 -0
- package/templates/apps/frontend-auth/src/config.ts +11 -0
- package/templates/apps/frontend-auth/src/globals.css +105 -0
- package/templates/apps/frontend-auth/src/globals.d.ts +6 -0
- package/templates/apps/frontend-auth/src/lib/auth.ts +34 -0
- package/templates/apps/frontend-auth/src/lib/redirect.test.ts +24 -0
- package/templates/apps/frontend-auth/src/lib/redirect.ts +29 -0
- package/templates/apps/frontend-auth/src/locales/de.ts +66 -0
- package/templates/apps/frontend-auth/src/locales/en.ts +76 -0
- package/templates/apps/frontend-auth/src/locales/index.ts +14 -0
- package/templates/apps/frontend-auth/src/pages/forgot/page.tsx +51 -0
- package/templates/apps/frontend-auth/src/pages/layout.tsx +12 -0
- package/templates/apps/frontend-auth/src/pages/login/page.test.tsx +53 -0
- package/templates/apps/frontend-auth/src/pages/login/page.tsx +67 -0
- package/templates/apps/frontend-auth/src/pages/logout/page.tsx +28 -0
- package/templates/apps/frontend-auth/src/pages/magic/page.tsx +51 -0
- package/templates/apps/frontend-auth/src/pages/page.tsx +26 -0
- package/templates/apps/frontend-auth/src/pages/reset/page.test.tsx +51 -0
- package/templates/apps/frontend-auth/src/pages/reset/page.tsx +63 -0
- package/templates/apps/frontend-auth/src/pages/signup/page.tsx +60 -0
- package/templates/apps/frontend-auth/src/pages/verify/page.tsx +50 -0
- package/templates/apps/frontend-auth/template.json +6 -0
- package/templates/apps/frontend-auth/tsconfig.json +5 -0
- package/templates/apps/frontend-blank/package.json +7 -7
- package/templates/apps/frontend-cms/README.md +47 -0
- package/templates/apps/frontend-cms/app.config.ts +37 -0
- package/templates/apps/frontend-cms/package.json +33 -0
- package/templates/apps/frontend-cms/src/config.ts +8 -0
- package/templates/apps/frontend-cms/src/globals.css +105 -0
- package/templates/apps/frontend-cms/src/globals.d.ts +6 -0
- package/templates/apps/frontend-cms/src/lib/api.ts +58 -0
- package/templates/apps/frontend-cms/src/locales/de.ts +50 -0
- package/templates/apps/frontend-cms/src/locales/en.ts +55 -0
- package/templates/apps/frontend-cms/src/locales/index.ts +14 -0
- package/templates/apps/frontend-cms/src/pages/(app)/error.tsx +18 -0
- package/templates/apps/frontend-cms/src/pages/(app)/layout.test.tsx +31 -0
- package/templates/apps/frontend-cms/src/pages/(app)/layout.tsx +62 -0
- package/templates/apps/frontend-cms/src/pages/(app)/not-found.tsx +14 -0
- package/templates/apps/frontend-cms/src/pages/(app)/page.test.tsx +110 -0
- package/templates/apps/frontend-cms/src/pages/(app)/page.tsx +159 -0
- package/templates/apps/frontend-cms/src/pages/layout.tsx +12 -0
- package/templates/apps/frontend-cms/src/pages/login/page.test.tsx +58 -0
- package/templates/apps/frontend-cms/src/pages/login/page.tsx +93 -0
- package/templates/apps/frontend-cms/template.json +6 -0
- package/templates/apps/frontend-cms/tsconfig.json +5 -0
- package/templates/apps/frontend-contact/package.json +7 -7
- package/templates/apps/frontend-dashboard/package.json +7 -7
- package/templates/apps/frontend-docs/package.json +7 -7
- package/templates/apps/frontend-i18n/package.json +6 -6
- package/templates/apps/frontend-landing/package.json +7 -7
- package/templates/apps/frontend-portal/README.md +71 -0
- package/templates/apps/frontend-portal/app.config.ts +37 -0
- package/templates/apps/frontend-portal/package.json +32 -0
- package/templates/apps/frontend-portal/src/config.ts +8 -0
- package/templates/apps/frontend-portal/src/globals.css +93 -0
- package/templates/apps/frontend-portal/src/globals.d.ts +6 -0
- package/templates/apps/frontend-portal/src/lib/api.ts +62 -0
- package/templates/apps/frontend-portal/src/locales/de.ts +86 -0
- package/templates/apps/frontend-portal/src/locales/en.ts +93 -0
- package/templates/apps/frontend-portal/src/locales/index.ts +14 -0
- package/templates/apps/frontend-portal/src/pages/(portal)/api-keys/page.test.tsx +71 -0
- package/templates/apps/frontend-portal/src/pages/(portal)/api-keys/page.tsx +124 -0
- package/templates/apps/frontend-portal/src/pages/(portal)/billing/page.test.tsx +86 -0
- package/templates/apps/frontend-portal/src/pages/(portal)/billing/page.tsx +97 -0
- package/templates/apps/frontend-portal/src/pages/(portal)/error.tsx +19 -0
- package/templates/apps/frontend-portal/src/pages/(portal)/invoices/page.tsx +45 -0
- package/templates/apps/frontend-portal/src/pages/(portal)/layout.test.tsx +31 -0
- package/templates/apps/frontend-portal/src/pages/(portal)/layout.tsx +63 -0
- package/templates/apps/frontend-portal/src/pages/(portal)/not-found.tsx +15 -0
- package/templates/apps/frontend-portal/src/pages/(portal)/page.tsx +39 -0
- package/templates/apps/frontend-portal/src/pages/(portal)/profile/page.tsx +79 -0
- package/templates/apps/frontend-portal/src/pages/layout.tsx +12 -0
- package/templates/apps/frontend-portal/src/pages/login/page.test.tsx +58 -0
- package/templates/apps/frontend-portal/src/pages/login/page.tsx +96 -0
- package/templates/apps/frontend-portal/template.json +6 -0
- package/templates/apps/frontend-portal/tsconfig.json +5 -0
- package/templates/apps/frontend-saas/README.md +73 -0
- package/templates/apps/frontend-saas/app.config.ts +46 -0
- package/templates/apps/frontend-saas/package.json +32 -0
- package/templates/apps/frontend-saas/src/config.ts +8 -0
- package/templates/apps/frontend-saas/src/globals.css +85 -0
- package/templates/apps/frontend-saas/src/globals.d.ts +6 -0
- package/templates/apps/frontend-saas/src/lib/api.ts +47 -0
- package/templates/apps/frontend-saas/src/locales/de.ts +72 -0
- package/templates/apps/frontend-saas/src/locales/en.ts +81 -0
- package/templates/apps/frontend-saas/src/locales/index.ts +14 -0
- package/templates/apps/frontend-saas/src/pages/(marketing)/layout.tsx +30 -0
- package/templates/apps/frontend-saas/src/pages/(marketing)/login/page.test.tsx +58 -0
- package/templates/apps/frontend-saas/src/pages/(marketing)/login/page.tsx +96 -0
- package/templates/apps/frontend-saas/src/pages/(marketing)/page.tsx +27 -0
- package/templates/apps/frontend-saas/src/pages/dashboard/billing/page.tsx +72 -0
- package/templates/apps/frontend-saas/src/pages/dashboard/error.tsx +20 -0
- package/templates/apps/frontend-saas/src/pages/dashboard/layout.test.tsx +32 -0
- package/templates/apps/frontend-saas/src/pages/dashboard/layout.tsx +69 -0
- package/templates/apps/frontend-saas/src/pages/dashboard/not-found.tsx +17 -0
- package/templates/apps/frontend-saas/src/pages/dashboard/page.test.tsx +113 -0
- package/templates/apps/frontend-saas/src/pages/dashboard/page.tsx +76 -0
- package/templates/apps/frontend-saas/src/pages/dashboard/team/page.tsx +73 -0
- package/templates/apps/frontend-saas/src/pages/layout.tsx +12 -0
- package/templates/apps/frontend-saas/template.json +6 -0
- package/templates/apps/frontend-saas/tsconfig.json +5 -0
- package/templates/apps/frontend-spa/package.json +7 -7
- package/templates/apps/frontend-ssr/package.json +7 -7
- package/templates/apps/frontend-ssr-api/package.json +8 -8
- package/templates/apps/frontend-static-blog/package.json +6 -6
- package/templates/apps/frontend-status/README.md +51 -0
- package/templates/apps/frontend-status/app.config.ts +39 -0
- package/templates/apps/frontend-status/package.json +32 -0
- package/templates/apps/frontend-status/src/config.ts +7 -0
- package/templates/apps/frontend-status/src/globals.css +70 -0
- package/templates/apps/frontend-status/src/globals.d.ts +6 -0
- package/templates/apps/frontend-status/src/lib/status.ts +81 -0
- package/templates/apps/frontend-status/src/locales/de.ts +41 -0
- package/templates/apps/frontend-status/src/locales/en.ts +45 -0
- package/templates/apps/frontend-status/src/locales/index.ts +13 -0
- package/templates/apps/frontend-status/src/pages/layout.tsx +27 -0
- package/templates/apps/frontend-status/src/pages/page.test.tsx +123 -0
- package/templates/apps/frontend-status/src/pages/page.tsx +136 -0
- package/templates/apps/frontend-status/template.json +6 -0
- package/templates/apps/frontend-status/tsconfig.json +11 -0
- package/templates/baselines/compose/docker-compose.prod.yml +15 -0
- package/templates/baselines/compose-mariadb/docker-compose.prod.yml +15 -0
- package/dist/apiBuild-BrjrVJJh.js +0 -2
- package/dist/dbCommand-DrzXimKf.js +0 -2
- package/dist/dev-DNkso403.js +0 -3
- package/dist/fileConventions-3bffWssN.js +0 -30
- package/dist/frameworkTableAssembly-lrjZtk0G.js +0 -2
- package/dist/inspect-gt8bq-Tz.js +0 -2
- package/dist/manifestBuild-ifczArzr.js +0 -2
- 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
|
-
},
|
|
136
|
+
}, v = (e) => {
|
|
121
137
|
let t = e.indexOf("?");
|
|
122
138
|
return t === -1 ? new URLSearchParams() : new URLSearchParams(e.slice(t + 1));
|
|
123
|
-
},
|
|
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
|
-
],
|
|
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:
|
|
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
|
-
}),
|
|
168
|
-
let o =
|
|
169
|
-
if (!
|
|
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,
|
|
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
|
-
},
|
|
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
|
-
},
|
|
279
|
-
let u =
|
|
280
|
-
if (!
|
|
281
|
-
let
|
|
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)" },
|
|
284
|
-
let
|
|
285
|
-
if (!
|
|
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:
|
|
288
|
-
},
|
|
289
|
-
let
|
|
290
|
-
if (
|
|
291
|
-
if (t.kind !== "api") return s(404, { error: "webhook actions are api-only" },
|
|
292
|
-
if (!t.webhookActions) return s(404, { error: "webhook actions not configured — is @voltro/plugin-webhooks active?" },
|
|
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
|
-
|
|
311
|
+
h = JSON.parse(o || "{}");
|
|
296
312
|
} catch {
|
|
297
|
-
return s(400, { error: "body must be JSON" },
|
|
313
|
+
return s(400, { error: "body must be JSON" }, f);
|
|
298
314
|
}
|
|
299
|
-
let
|
|
315
|
+
let g = u.slice(`${n}/webhooks/`.length);
|
|
300
316
|
try {
|
|
301
|
-
switch (
|
|
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" },
|
|
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 =
|
|
308
|
-
return typeof e != "string" || e.length === 0 ? s(400, { error: "targetId required" },
|
|
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 =
|
|
312
|
-
return typeof e != "string" || e.length === 0 ? s(400, { error: "targetId required" },
|
|
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 =
|
|
316
|
-
return typeof e != "string" || e.length === 0 ? s(400, { error: "targetId required" },
|
|
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 =
|
|
320
|
-
return typeof e != "string" || e.length === 0 ? s(400, { error: "targetId required" },
|
|
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 =
|
|
324
|
-
return typeof e != "string" || e.length === 0 ? s(400, { error: "deliveryId required" },
|
|
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 =
|
|
328
|
-
return typeof e != "string" || e.length === 0 ? s(400, { error: "targetId required" },
|
|
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: ${
|
|
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
|
-
},
|
|
352
|
+
}, f);
|
|
337
353
|
}
|
|
338
|
-
},
|
|
339
|
-
let u =
|
|
340
|
-
if (!
|
|
341
|
-
let d = l(i.origin ?? i.Origin),
|
|
342
|
-
if (
|
|
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
|
|
345
|
-
if (!
|
|
360
|
+
let p = (c.authResolver ?? a)(i, f);
|
|
361
|
+
if (!p.ok) return s(401, {
|
|
346
362
|
error: "unauthorized",
|
|
347
|
-
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
|
|
351
|
-
if (u !==
|
|
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 ===
|
|
360
|
-
if (u ===
|
|
361
|
-
if (u ===
|
|
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 ===
|
|
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
|
-
},
|
|
382
|
-
if (
|
|
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 =
|
|
397
|
-
if (!
|
|
398
|
-
let
|
|
399
|
-
if (
|
|
400
|
-
if (
|
|
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
|
-
|
|
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:
|
|
410
|
-
offset:
|
|
411
|
-
limit:
|
|
412
|
-
...
|
|
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
|
-
},
|
|
424
|
-
if (
|
|
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
|
|
432
|
-
if (!
|
|
447
|
+
let f = (o.authResolver ?? a)(i, u);
|
|
448
|
+
if (!f.ok) return s(401, {
|
|
433
449
|
error: "unauthorized",
|
|
434
|
-
reason:
|
|
450
|
+
reason: f.reason
|
|
435
451
|
}, c);
|
|
436
|
-
let
|
|
437
|
-
if (
|
|
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
|
|
441
|
-
if (!
|
|
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:
|
|
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:
|
|
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
|
-
},
|
|
483
|
+
}, O = (e) => {
|
|
468
484
|
let t = e.indexOf("?");
|
|
469
485
|
return t < 0 ? new URLSearchParams() : new URLSearchParams(e.slice(t + 1));
|
|
470
|
-
},
|
|
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
|
-
},
|
|
475
|
-
if (
|
|
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 =
|
|
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:
|
|
501
|
-
limit:
|
|
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
|
-
},
|
|
510
|
-
let c =
|
|
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),
|
|
513
|
-
if (
|
|
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
|
|
519
|
-
if (!
|
|
534
|
+
let p = (o.authResolver ?? a)(n, f);
|
|
535
|
+
if (!p.ok) return s(401, {
|
|
520
536
|
error: "unauthorized",
|
|
521
|
-
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
|
|
541
|
+
let m = {};
|
|
526
542
|
if (i.length > 0) try {
|
|
527
|
-
|
|
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:
|
|
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
|
-
},
|
|
543
|
-
let o =
|
|
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
|
|
553
|
-
if (
|
|
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
|
|
556
|
-
if (
|
|
557
|
-
if (
|
|
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(
|
|
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 (
|
|
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 =
|
|
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:
|
|
591
|
-
limit:
|
|
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" ?
|
|
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
|
-
},
|
|
611
|
-
if (
|
|
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
|
-
},
|
|
659
|
-
let o =
|
|
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
|
|
668
|
-
if (!
|
|
683
|
+
let f = (i.authResolver ?? a)(n, d);
|
|
684
|
+
if (!f.ok) return s(401, {
|
|
669
685
|
error: "unauthorized",
|
|
670
|
-
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
|
-
},
|
|
683
|
-
let o =
|
|
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
|
|
692
|
-
if (!
|
|
707
|
+
let f = (i.authResolver ?? a)(n, d);
|
|
708
|
+
if (!f.ok) return s(401, {
|
|
693
709
|
error: "unauthorized",
|
|
694
|
-
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
|
-
},
|
|
707
|
-
if (
|
|
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 =
|
|
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
|
-
...
|
|
730
|
-
offset: Number.isFinite(
|
|
731
|
-
limit: Number.isFinite(
|
|
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
|
-
},
|
|
740
|
-
let o =
|
|
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
|
|
749
|
-
if (!
|
|
764
|
+
let f = (i.authResolver ?? a)(n, d);
|
|
765
|
+
if (!f.ok) return s(401, {
|
|
750
766
|
error: "unauthorized",
|
|
751
|
-
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
|
-
},
|
|
764
|
-
if (
|
|
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 =
|
|
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
|
-
},
|
|
794
|
-
let c =
|
|
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],
|
|
797
|
-
if (
|
|
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
|
-
},
|
|
801
|
-
if (r()) return s(503, { error: "inspect disabled (VOLTRO_INSPECT=off)" },
|
|
802
|
-
let
|
|
803
|
-
if (!
|
|
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:
|
|
806
|
-
},
|
|
807
|
-
if (t.kind !== "api") return s(404, { error: "workflow actions are api-only" },
|
|
808
|
-
let
|
|
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 (!
|
|
819
|
-
let
|
|
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" && (
|
|
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 }`" },
|
|
825
|
-
if (d === "update" && b === void 0) return s(400, { error: "update requires JSON body `{ updateName: string, payload?: unknown, timeoutMs?: number }`" },
|
|
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" &&
|
|
845
|
+
return s(200, d === "retry" && g !== void 0 ? await h({
|
|
828
846
|
runId: u,
|
|
829
|
-
payloadOverride:
|
|
830
|
-
}) : d === "signal" ? await
|
|
847
|
+
payloadOverride: g
|
|
848
|
+
}) : d === "signal" ? await h({
|
|
831
849
|
runId: u,
|
|
832
850
|
signalName: v,
|
|
833
851
|
payload: y
|
|
834
|
-
}) : d === "update" ? await
|
|
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
|
-
}) :
|
|
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
|
-
},
|
|
865
|
+
}, f);
|
|
845
866
|
}
|
|
846
|
-
},
|
|
847
|
-
if (
|
|
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
|
|
856
|
-
if (
|
|
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
|
|
880
|
+
let p;
|
|
860
881
|
try {
|
|
861
|
-
|
|
882
|
+
p = JSON.parse(i || "{}");
|
|
862
883
|
} catch {
|
|
863
884
|
return s(400, { error: "body must be JSON" }, c);
|
|
864
885
|
}
|
|
865
|
-
if (typeof
|
|
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:
|
|
869
|
-
...
|
|
870
|
-
...
|
|
871
|
-
...typeof
|
|
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
|
-
},
|
|
880
|
-
let c =
|
|
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
|
|
887
|
-
if (!
|
|
907
|
+
let f = (o.authResolver ?? a)(n, u);
|
|
908
|
+
if (!f.ok) return s(401, {
|
|
888
909
|
error: "unauthorized",
|
|
889
|
-
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
|
|
914
|
-
if (!
|
|
915
|
-
let
|
|
916
|
-
if (!
|
|
917
|
-
let
|
|
918
|
-
if (!
|
|
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:
|
|
931
|
-
id:
|
|
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:
|
|
946
|
-
id:
|
|
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 {
|
|
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 };
|