@voltro/cli 0.52.0 → 0.53.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 +229 -0
- package/THIRD-PARTY-NOTICES.md +8311 -3318
- package/dist/{apiBuild-CSFI8QGq.js → apiBuild-CaPfoWku.js} +11 -5
- package/dist/apiBuild-DHtLXYx9.js +2 -0
- package/dist/bin.js +1 -1
- package/dist/build-D-OnvNMf.js +843 -0
- package/dist/{checkCommand-COmqc2cB.js → checkCommand-C5elt0tW.js} +6 -6
- package/dist/{checkCommand-2SbqzukH.js → checkCommand-D2ZduVlh.js} +1 -1
- package/dist/codegen-BWpt3VgF.js +2 -0
- package/dist/{codegen-VF479Cnb.js → codegen-FEk8AZHb.js} +2 -2
- package/dist/{codegenCommand-DCdG2JN-.js → codegenCommand-BOiWQ5hz.js} +4 -4
- package/dist/{codemodRunner-r7J9lIa7.js → codemodRunner-BjtB2lq6.js} +109 -11
- package/dist/{commands-Cc_nV8WI.js → commands-DyxAmhP0.js} +30 -30
- package/dist/{dashboardCommand-C-gKvwqh.js → dashboardCommand-BdKTyT13.js} +5 -5
- package/dist/{dataCommand-BgpBHnlB.js → dataCommand-Bab9X7s8.js} +2 -2
- package/dist/{dbCommand-sHedr-NJ.js → dbCommand-06O2finM.js} +277 -236
- package/dist/dbCommand-B1EXBC6f.js +2 -0
- package/dist/{dev-CRHoCEiy.js → dev-C6LGF4iY.js} +3006 -2426
- package/dist/{dev--A3nsxA3.js → dev-GjJWAYo2.js} +1 -1
- package/dist/doctorCommand-B0hX0tdz.js +2 -0
- package/dist/{doctorCommand-DtfJ3FA6.js → doctorCommand-etMkflRc.js} +101 -69
- package/dist/{dormancyCommand-Drn7o0No.js → dormancyCommand-UwZ1AZzB.js} +1 -1
- package/dist/{embeddingsCommand-Z-jO1fWN.js → embeddingsCommand-C70zWHwo.js} +1 -1
- package/dist/{envCommand-D4gCrrTZ.js → envCommand-dSyKvRkM.js} +18 -18
- package/dist/{evolveCommand-CMROeKeA.js → evolveCommand-CG0_ebO5.js} +2 -2
- package/dist/fileConventions-DASGEmj-.js +35 -0
- package/dist/{fileTaxonomy-DvDUV9wq.js → fileTaxonomy-B7uxipWS.js} +55 -55
- package/dist/fontPipeline-LxIHa1vo.js +2 -0
- package/dist/fontPipeline-Tsh8kZfA.js +152 -0
- package/dist/frameworkTableAssembly-C_7Z-rMs.js +2 -0
- package/dist/{frameworkTableAssembly-w-XnLa3q.js → frameworkTableAssembly-DKx3ba3S.js} +5 -5
- package/dist/imagePipeline-B_GVJgm6.js +2 -0
- package/dist/imagePipeline-CBZmjT4i.js +127 -0
- package/dist/index.js +1 -1
- package/dist/{infoCommand-DXM868o_.js → infoCommand-_53iOc_j.js} +1 -1
- package/dist/{inspect-CtL_xTbu.js → inspect-Bd8-9wsi.js} +1 -1
- package/dist/inspect-CuoDInfZ.js +2 -0
- package/dist/{inspectGateHint-BjnFubmH.js → inspectGateHint-4LxkNtrz.js} +1 -1
- package/dist/manifestBuild-C4-J1-m_.js +2 -0
- package/dist/{manifestBuild-CuU1VrSm.js → manifestBuild-Cqgsx2bM.js} +1 -1
- package/dist/{metaCommands-C6RFmF1r.js → metaCommands-Cn2oboG4.js} +8 -2
- package/dist/{migrate-D0F-eTlK.js → migrate-Cko9rswM.js} +2 -2
- package/dist/{pageConvention-CzUiSbtU.js → pageConvention-C938S8oC.js} +1 -1
- package/dist/{privacyCommand-DGdopOI6.js → privacyCommand-DWTQMC6R.js} +2 -2
- package/dist/{probeCommand-C9gazU0H.js → probeCommand-DkGGLknv.js} +83 -24
- package/dist/{renderModeScan-CcH2X1_D.js → renderModeScan-CUbOeOAg.js} +3 -1
- package/dist/{renderProfile-Ck32Fzxr.js → renderProfile-CskIgAfn.js} +2 -2
- package/dist/{runtimeTrace-BPQyCmC5.js → runtimeTrace-c0APJz7E.js} +1 -1
- package/dist/{sdkgen-Se88ifTd.js → sdkgen-BiQCgIEr.js} +1 -1
- package/dist/{serveCommand-DkP3OT0W.js → serveCommand-CueKQgzl.js} +869 -805
- package/dist/serveCommand-DsnrVN3U.js +2 -0
- package/dist/serveEntry.js +1 -1
- package/dist/start-BJzZLbt8.js +3 -0
- package/dist/start-ekPan8BT.js +1510 -0
- package/dist/startEntry.js +1 -1
- package/dist/{staticCommand-BwNEDlSU.js → staticCommand-xlSL-IWk.js} +1 -1
- package/dist/{test-f3amja6a.js → test-BWPQcRoB.js} +1 -1
- package/dist/updateCommand-Bqql_rsQ.js +2 -0
- package/dist/{updateCommand-BMk2e4ky.js → updateCommand-C_8I8Rzo.js} +139 -115
- package/dist/webDev-C7jWJ5dX.js +2 -0
- package/dist/{webDev-BgWL9gKV.js → webDev-oczpugbx.js} +1455 -922
- package/dist/{webhooksCommand-CoIO3jbj.js → webhooksCommand-4SVPDjKg.js} +1 -1
- package/package.json +60 -19
- package/templates/AGENTS.md +5 -3
- package/templates/agent-docs/_index.md +5 -3
- package/templates/agent-docs/_manifest.json +20 -4
- package/templates/agent-docs/ai.md +2 -2
- package/templates/agent-docs/authentication.md +1 -1
- package/templates/agent-docs/cli.md +2 -2
- package/templates/agent-docs/configuration.md +17 -0
- package/templates/agent-docs/data.md +470 -26
- package/templates/agent-docs/database/advancedqueries.md +7 -7
- package/templates/agent-docs/database/columntypes.md +2 -2
- package/templates/agent-docs/database/querying.md +1 -1
- package/templates/agent-docs/database/schema.md +1 -1
- package/templates/agent-docs/database/seedsdialects.md +1 -1
- package/templates/agent-docs/database/transactions.md +3 -3
- package/templates/agent-docs/deployment.md +8 -0
- package/templates/agent-docs/internationalization.md +2 -2
- package/templates/agent-docs/introduction.md +7 -1
- package/templates/agent-docs/local-first-mobile.md +102 -4
- package/templates/agent-docs/observability.md +2 -0
- package/templates/agent-docs/plugins/auth.md +1 -1
- package/templates/agent-docs/plugins/comments.md +142 -0
- package/templates/agent-docs/plugins/notifications.md +47 -4
- package/templates/agent-docs/plugins/presence.md +16 -3
- package/templates/agent-docs/plugins/prometheus.md +1 -1
- package/templates/agent-docs/plugins/queue.md +129 -0
- package/templates/agent-docs/plugins.md +11 -7
- package/templates/agent-docs/reference.md +16 -4
- package/templates/agent-docs/routing.md +527 -3
- package/templates/agent-docs/schema-driven-ui.md +214 -3
- package/templates/agent-docs/security.md +3 -3
- package/templates/agent-docs/whats-new.md +160 -66
- package/templates/apps/api-ai/package.json +6 -6
- 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/package.json +8 -8
- package/templates/apps/api-backend-storage/package.json +8 -8
- package/templates/apps/api-cms/package.json +9 -9
- package/templates/apps/api-collab/package.json +8 -8
- 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-row-history/package.json +8 -8
- package/templates/apps/api-saas/package.json +10 -10
- package/templates/apps/api-saas-starter/package.json +10 -10
- package/templates/apps/api-search/package.json +8 -8
- package/templates/apps/api-status/package.json +8 -8
- package/templates/apps/api-webhooks/package.json +9 -9
- package/templates/apps/changelog/app.config.ts +26 -2
- package/templates/apps/changelog/content/releases/{0.1.0.mdx → v0-1-0.mdx} +0 -1
- package/templates/apps/changelog/content/releases/{0.2.0.mdx → v0-2-0.mdx} +0 -1
- package/templates/apps/changelog/package.json +8 -8
- package/templates/apps/changelog/src/collections/releases.collection.ts +48 -0
- package/templates/apps/changelog/src/globals.d.ts +1 -1
- package/templates/apps/changelog/src/locales/de.ts +1 -1
- package/templates/apps/changelog/src/locales/en.ts +1 -1
- package/templates/apps/changelog/src/pages/[locale]/[slug]/page.tsx +7 -4
- package/templates/apps/changelog/src/pages/[locale]/mirrors.test.tsx +13 -41
- package/templates/apps/changelog/src/pages/[slug]/page.test.tsx +26 -51
- package/templates/apps/changelog/src/pages/[slug]/page.tsx +21 -19
- package/templates/apps/changelog/src/pages/page.test.tsx +14 -37
- package/templates/apps/changelog/src/pages/page.tsx +18 -12
- 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 +9 -9
- package/templates/apps/frontend-auth/package.json +8 -8
- package/templates/apps/frontend-blank/package.json +7 -7
- package/templates/apps/frontend-cms/package.json +9 -9
- package/templates/apps/frontend-collab/package.json +10 -10
- package/templates/apps/frontend-contact/package.json +7 -7
- package/templates/apps/frontend-dashboard/package.json +7 -7
- package/templates/apps/frontend-docs/content/docs/de/guides/first-page.md +4 -0
- package/templates/apps/frontend-docs/content/docs/de/intro/getting-started.md +4 -0
- package/templates/apps/frontend-docs/content/docs/en/guides/first-page.md +4 -0
- package/templates/apps/frontend-docs/content/docs/en/intro/getting-started.md +4 -0
- package/templates/apps/frontend-docs/package.json +8 -6
- package/templates/apps/frontend-docs/src/collections/docs.collection.ts +21 -0
- package/templates/apps/frontend-docs/src/locales/de.ts +0 -5
- package/templates/apps/frontend-docs/src/locales/en.ts +0 -5
- package/templates/apps/frontend-docs/src/pages/[locale]/docs/[...slug]/page.tsx +17 -9
- package/templates/apps/frontend-docs/src/pages/[locale]/mirrors.test.tsx +10 -5
- package/templates/apps/frontend-docs/src/pages/[locale]/page.tsx +8 -0
- package/templates/apps/frontend-docs/src/pages/docs/[...slug]/page.test.tsx +53 -15
- package/templates/apps/frontend-docs/src/pages/docs/[...slug]/page.tsx +27 -33
- package/templates/apps/frontend-docs/src/pages/page.test.tsx +17 -3
- package/templates/apps/frontend-docs/src/pages/page.tsx +16 -12
- package/templates/apps/frontend-i18n/package.json +6 -6
- package/templates/apps/frontend-landing/package.json +6 -6
- package/templates/apps/frontend-portal/package.json +8 -8
- package/templates/apps/frontend-saas/package.json +8 -8
- 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/content/posts/cms-to-ssg.md +12 -0
- package/templates/apps/frontend-static-blog/content/posts/hello-static.md +12 -0
- package/templates/apps/frontend-static-blog/content/posts/islands-not-hydration.md +14 -0
- package/templates/apps/frontend-static-blog/package.json +8 -6
- package/templates/apps/frontend-static-blog/src/collections/posts.collection.ts +27 -0
- package/templates/apps/frontend-static-blog/src/pages/[locale]/blog/[slug]/page.tsx +7 -4
- package/templates/apps/frontend-static-blog/src/pages/[locale]/mirrors.test.tsx +7 -1
- package/templates/apps/frontend-static-blog/src/pages/blog/[slug]/page.test.tsx +19 -9
- package/templates/apps/frontend-static-blog/src/pages/blog/[slug]/page.tsx +19 -21
- package/templates/apps/frontend-static-blog/src/pages/page.test.tsx +18 -5
- package/templates/apps/frontend-static-blog/src/pages/page.tsx +21 -14
- package/templates/apps/frontend-status/package.json +8 -8
- package/templates/apps/mobile-app/package.json +4 -4
- package/dist/apiBuild-BYBpL7Pz.js +0 -2
- package/dist/build-CPgcMQug.js +0 -793
- package/dist/codegen-CctkDO-1.js +0 -2
- package/dist/dbCommand-DNb6yeOG.js +0 -2
- package/dist/doctorCommand-CqoWA2p5.js +0 -2
- package/dist/fileConventions-DOqD3lPS.js +0 -34
- package/dist/frameworkTableAssembly-C6ETawPR.js +0 -2
- package/dist/inspect-CuGDYES0.js +0 -2
- package/dist/manifestBuild-CPjhvM62.js +0 -2
- package/dist/serveCommand-DLc-BznW.js +0 -2
- package/dist/start-DfL3fOiN.js +0 -3
- package/dist/start-jw89Xbqy.js +0 -1339
- package/dist/updateCommand-5gFVfK5q.js +0 -2
- package/dist/webDev-CZbTsDcH.js +0 -2
- package/templates/apps/changelog/scripts/generate-rss.mjs +0 -38
- package/templates/apps/changelog/src/lib/releases.ts +0 -21
- package/templates/apps/frontend-static-blog/src/content/posts.ts +0 -64
|
@@ -4,50 +4,50 @@ import { r as n, t as r } from "./appModuleLoader-C9r9mxZt.js";
|
|
|
4
4
|
import { t as i } from "./bootRefusal-pgvDxlrU.js";
|
|
5
5
|
import { n as a, r as o } from "./startupRunner-CEqQq7ax.js";
|
|
6
6
|
import { t as s } from "./interruptedReplace-C3O3M1MM.js";
|
|
7
|
-
import { $ as c, $t as l, A as u,
|
|
7
|
+
import { $ as c, $t as l, A as u, An as d, At as f, Bt as ee, C as te, Cn as p, Ct as m, D as ne, Dn as h, Dt as re, E as g, Et as ie, F as ae, Ft as oe, G as se, Gt as ce, H as _, I as le, It as ue, J as de, Jt as fe, K as pe, Kt as v, L as y, Lt as b, M as me, Mt as he, N as ge, Nt as _e, O as ve, On as ye, Ot as be, P as xe, Pt as Se, Q as Ce, Qt as we, R as Te, Rt as Ee, S as x, Sn as De, St as Oe, T as ke, Tn as Ae, Tt as je, U as Me, Ut as S, Vt as Ne, W as C, X as Pe, Xt as Fe, Y as Ie, Yt as w, Z as Le, Zt as Re, _ as ze, _n as Be, _t as Ve, an as He, at as T, b as Ue, bn as We, bt as Ge, c as Ke, cn as qe, ct as Je, d as Ye, dn as Xe, dt as Ze, en as Qe, et as $e, fn as et, ft as tt, g as nt, gn as rt, gt as it, h as at, hn as ot, ht as st, i as ct, in as lt, it as ut, j as dt, jt as ft, k as pt, kn as mt, kt as ht, ln as gt, lt as _t, m as vt, mn as yt, mt as E, nn as D, nt as bt, o as O, on as xt, ot as St, p as Ct, pn as k, pt as wt, q as Tt, qt as Et, r as Dt, rn as Ot, rt as kt, sn as At, st as jt, t as Mt, tn as Nt, tt as A, u as Pt, un as Ft, ut as It, v as Lt, vn as j, vt as M, w as Rt, wn as zt, wt as Bt, x as Vt, xn as Ht, xt as Ut, y as Wt, yt as Gt, z as Kt, zt as qt } from "./dev-C6LGF4iY.js";
|
|
8
8
|
import { n as N } from "./cliArgs-D4p8n7EE.js";
|
|
9
|
-
import { r as
|
|
10
|
-
import {
|
|
9
|
+
import { r as Jt } from "./appPort-B_HpJ_ck.js";
|
|
10
|
+
import { Ht as Yt, Wt as Xt } from "./webDev-oczpugbx.js";
|
|
11
11
|
import { r as P } from "./dialectDriver-czCHYpeH.js";
|
|
12
|
-
import { i as
|
|
13
|
-
import { c as F, n as
|
|
14
|
-
import { d as
|
|
15
|
-
import { n as
|
|
16
|
-
import { S as
|
|
17
|
-
import { h as
|
|
18
|
-
import { i as
|
|
19
|
-
import { n as
|
|
20
|
-
import { i as
|
|
21
|
-
import { r as
|
|
22
|
-
import { t as
|
|
23
|
-
import { a as
|
|
24
|
-
import I, { basename as
|
|
25
|
-
import { createWriteStream as
|
|
26
|
-
import { pathToFileURL as
|
|
27
|
-
import { createLogger as L } from "@voltro/logger";
|
|
28
|
-
import { AuthMiddleware as
|
|
29
|
-
import { DATA_TRANSFERS_TABLE as H, _voltroDataTransfersTable as
|
|
30
|
-
import { Cause as
|
|
31
|
-
import { SqlClient as
|
|
32
|
-
import { declaredSnapshot as
|
|
33
|
-
import { AggregateRegistry as
|
|
34
|
-
import
|
|
35
|
-
import { RpcGroup as
|
|
36
|
-
import { appStorageProvider as
|
|
37
|
-
import { isEnvContract as
|
|
38
|
-
import { assertProductionSessionSecret as
|
|
12
|
+
import { i as Zt, n as Qt } from "./connectionConfig-Bk9IC7D0.js";
|
|
13
|
+
import { c as F, n as $t, o as en } from "./seedRunner-Dgsiwk_e.js";
|
|
14
|
+
import { d as tn, h as nn, m as rn, p as an, r as on } from "./frameworkTableAssembly-DKx3ba3S.js";
|
|
15
|
+
import { n as sn, r as cn, t as ln } from "./declaredSchemaGates-BlcwObhb.js";
|
|
16
|
+
import { C as un, S as dn, a as fn, c as pn, l as mn, m as hn, n as gn } from "./fileConventions-DASGEmj-.js";
|
|
17
|
+
import { h as _n, o as vn } from "./inspect-Bd8-9wsi.js";
|
|
18
|
+
import { i as yn, n as bn, t as xn } from "./inspectMetrics-CGF94puw.js";
|
|
19
|
+
import { n as Sn } from "./mssqlClusterPatch-_4cE_nun.js";
|
|
20
|
+
import { i as Cn, n as wn, r as Tn, t as En } from "./webhookDiscovery-CphsQe59.js";
|
|
21
|
+
import { r as Dn, u as On } from "./apiBuild-CaPfoWku.js";
|
|
22
|
+
import { t as kn } from "./bootTiming-BdyP9nYw.js";
|
|
23
|
+
import { a as An, o as jn, t as Mn } from "./dataProfile-Du3ztYxv.js";
|
|
24
|
+
import I, { basename as Nn, join as Pn } from "node:path";
|
|
25
|
+
import { createWriteStream as Fn, existsSync as In } from "node:fs";
|
|
26
|
+
import { pathToFileURL as Ln } from "node:url";
|
|
27
|
+
import { LoggerLayer as Rn, createLogger as L } from "@voltro/logger";
|
|
28
|
+
import { AuthMiddleware as zn, ConnectionInfoMiddleware as Bn, actionToRpc as R, anonymousSubject as Vn, isWireReachable as Hn, mutationToRpc as Un, queryToRpc as z, streamToRpc as Wn, wireErrorUnion as Gn, workflowCancelDescriptor as Kn, workflowDomainEventsQueryDescriptor as B, workflowEventDeliveriesQueryDescriptor as V, workflowResumeDescriptor as qn, workflowRunEventsQueryDescriptor as Jn, workflowRunQueryDescriptor as Yn, workflowRunStepsQueryDescriptor as Xn, workflowRunsQueryDescriptor as Zn, workflowSignalDescriptor as Qn, workflowUpdateDescriptor as $n } from "@voltro/protocol";
|
|
29
|
+
import { DATA_TRANSFERS_TABLE as H, _voltroDataTransfersTable as er, allRegisteredTables as tr, and as nr, connectionIdentity as rr, derivedRowId as ir, describeTransferRun as ar, ensureTableRegistered as or, eq as U, or as sr } from "@voltro/database";
|
|
30
|
+
import { Cause as cr, Effect as W, Layer as G, ManagedRuntime as lr } from "effect";
|
|
31
|
+
import { SqlClient as ur } from "@effect/sql";
|
|
32
|
+
import { declaredSnapshot as dr, describeOutcome as fr, pendingFileMigrationIds as pr, runPlannedMigrations as mr } from "@voltro/database/sql";
|
|
33
|
+
import { AggregateRegistry as hr, CostRegistry as gr, DORMANCY_WAKEUP_TENANT as _r, Dispatcher as vr, ExpectationRegistry as yr, ExperimentRegistry as br, apiKeyManagementRoutes as xr, attachAnalyticsMirror as Sr, attachExpectations as Cr, attachExperiments as wr, attachFinops as Tr, awaitServerListening as Er, bindMutation as Dr, bindStream as Or, bindSubscription as K, buildTracingLayer as kr, cancelWakeup as Ar, compileCron as jr, dataStoreApiKeyStore as Mr, formatServerOnlyLeaks as Nr, formatUnresolvedSources as Pr, frameworkApiKeyStrategy as Fr, getResourcePolicy as Ir, installPolicyGuardResolver as Lr, loadResourceTuples as Rr, makeActionRunner as zr, makeAdvisoryLockCoordinator as Br, makeApiKeyService as Vr, makeApiKeyUsageBuffer as Hr, makeApiKeyUsageFlusher as Ur, makeAsyncKv as Wr, makeAuthMiddlewareLayers as Gr, makeCoordinatedScheduler as Kr, makeEffectStoreLayer as qr, makeLazyWorkflowFacade as Jr, makeMutationOutputCodec as Yr, makeMutationRunner as Xr, makeOneShotQueryRunner as Zr, makeQueryDescriptorProducer as q, makeQueryFinalizer as Qr, makeQueryReauthorizer as $r, makeQuerySubscriber as ei, makeSchemaRegistry as ti, makeWorkflowFacade as ni, makeWorkflowFacadeWithCallerContext as ri, makeWorkflowLayers as ii, noopKv as ai, onProcessShutdown as J, recordSubscriptionDelivery as Y, recordWorkflowRun as oi, registerDefaultTupleSource as si, registerWakeup as ci, resolveSecretsBackend as li, runProvidedEffect as ui, setSecretsBackend as di, setSystemStoreHandle as fi, shutdownGraceMsFromEnv as pi, singleCoordinator as mi, startRpcServer as hi, startScheduler as gi, stripForbiddenForWire as _i, undoCaptureEnabled as vi, unresolvedSources as yi, withScopedRequest as bi, workflowToRpc as xi, wrapStoreWithBootCodec as Si } from "@voltro/runtime";
|
|
34
|
+
import Ci, { tmpdir as wi } from "node:os";
|
|
35
|
+
import { RpcGroup as Ti } from "@effect/rpc";
|
|
36
|
+
import { appStorageProvider as Ei, durabilityNotice as Di, fromNodeReadable as Oi, getObjectStream as ki, putObjectStream as Ai, toNodeReadable as ji } from "@voltro/plugin-storage";
|
|
37
|
+
import { isEnvContract as Mi } from "@voltro/env";
|
|
38
|
+
import { assertProductionSessionSecret as Ni } from "@voltro/protocol/session";
|
|
39
39
|
import X from "node:fs/promises";
|
|
40
|
-
import { createHash as
|
|
41
|
-
import { channelFor as
|
|
42
|
-
import { buildDeliverWebhookExecute as
|
|
43
|
-
import { getAuthSessionStrategy as
|
|
44
|
-
import { registerEmailTemplates as
|
|
45
|
-
import { checkSchemaDrift as
|
|
40
|
+
import { createHash as Pi, timingSafeEqual as Fi } from "node:crypto";
|
|
41
|
+
import { channelFor as Ii, getBroadcastPlugin as Li } from "@voltro/plugin-broadcast";
|
|
42
|
+
import { buildDeliverWebhookExecute as Ri, buildWebhooksService as zi, defaultIncomingPath as Bi, deliverWebhookWorkflow as Vi, makeDeferredEmitHandler as Hi, mountIncomingWebhook as Ui } from "@voltro/plugin-webhooks";
|
|
43
|
+
import { getAuthSessionStrategy as Wi } from "@voltro/plugin-auth";
|
|
44
|
+
import { registerEmailTemplates as Gi } from "@voltro/plugin-mail";
|
|
45
|
+
import { checkSchemaDrift as Ki, decideStaging as qi, isEnvironmentLocal as Ji, packBundle as Yi, peekBundle as Xi, runExport as Zi, runImport as Qi, storageBlobSink as $i, storageRefsBlobSource as ea, unpackBundle as ta, unpackBundleToDir as na } from "@voltro/data-transfer";
|
|
46
46
|
//#region \0rolldown/runtime.js
|
|
47
|
-
var
|
|
47
|
+
var ra = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy < "u" ? new Proxy(e, { get: (e, t) => (typeof require < "u" ? require : e)[t] }) : e)(function(e) {
|
|
48
48
|
if (typeof require < "u") return require.apply(this, arguments);
|
|
49
49
|
throw Error("Calling `require` for \"" + e + "\" in an environment that doesn't expose the `require` function. See https://rolldown.rs/in-depth/bundling-cjs#require-external-modules for more details.");
|
|
50
|
-
}),
|
|
50
|
+
}), ia = () => Math.max(500, Math.floor(pi() * .6)), aa = (e) => new Promise((t) => setTimeout(t, e)), oa = (e) => {
|
|
51
51
|
let t = /* @__PURE__ */ new Set(), n = /* @__PURE__ */ new Set(), r = 0;
|
|
52
52
|
e.on("connection", (e) => {
|
|
53
53
|
t.add(e), e.once("close", () => {
|
|
@@ -61,14 +61,14 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
61
61
|
});
|
|
62
62
|
});
|
|
63
63
|
let i, a = async (t = {}) => {
|
|
64
|
-
let n = t.budgetMs ??
|
|
64
|
+
let n = t.budgetMs ?? ia();
|
|
65
65
|
i ??= new Promise((t) => {
|
|
66
66
|
e.close(() => {
|
|
67
67
|
t();
|
|
68
68
|
});
|
|
69
69
|
}), e.closeIdleConnections();
|
|
70
70
|
let a = Date.now() + n;
|
|
71
|
-
for (; r > 0 && Date.now() < a;) await
|
|
71
|
+
for (; r > 0 && Date.now() < a;) await aa(25), e.closeIdleConnections();
|
|
72
72
|
e.closeIdleConnections();
|
|
73
73
|
}, o = async () => {
|
|
74
74
|
i ??= new Promise((t) => {
|
|
@@ -85,7 +85,7 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
85
85
|
]));
|
|
86
86
|
} catch {}
|
|
87
87
|
else e.destroy();
|
|
88
|
-
for (let e = 0; t.size > 0 && e < 250; e += 25) await
|
|
88
|
+
for (let e = 0; t.size > 0 && e < 250; e += 25) await aa(25);
|
|
89
89
|
for (let e of t) e.destroy();
|
|
90
90
|
await i;
|
|
91
91
|
};
|
|
@@ -97,83 +97,83 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
97
97
|
await a(e), await o();
|
|
98
98
|
}
|
|
99
99
|
};
|
|
100
|
-
},
|
|
100
|
+
}, sa = "/_voltro/admin/import", ca = "/_voltro/admin/import/start", la = "/_voltro/admin/export", ua = "/_voltro/admin/export/download", da = "/_voltro/admin/transfers", Z = (e, t) => ({
|
|
101
101
|
status: e,
|
|
102
102
|
contentType: "application/json; charset=utf-8",
|
|
103
103
|
body: JSON.stringify(t)
|
|
104
|
-
}),
|
|
104
|
+
}), fa = (e) => {
|
|
105
105
|
let t = e.authorization ?? e.Authorization, n = t ? /^Bearer\s+(.+)$/i.exec(t) : null;
|
|
106
106
|
return n ? n[1] : null;
|
|
107
|
-
},
|
|
107
|
+
}, pa = (e, t) => Fi(Pi("sha256").update(e).digest(), Pi("sha256").update(t).digest()), ma = (e, t, n = "POST") => {
|
|
108
108
|
if (e.method.toUpperCase() !== n) return Z(405, { error: "method not allowed" });
|
|
109
109
|
if (!t || t.length < 16) return Z(503, { error: "data transfer misconfigured (no/weak secret)" });
|
|
110
|
-
let r =
|
|
111
|
-
return !r || !
|
|
112
|
-
},
|
|
110
|
+
let r = fa(e.headers);
|
|
111
|
+
return !r || !pa(r, t) ? Z(401, { error: "unauthorized" }) : null;
|
|
112
|
+
}, ha = /^[A-Za-z0-9_-]{8,64}$/, ga = (e) => ha.test(e), _a = () => process.env.VOLTRO_IMPORT_UPLOAD_DIR ?? I.join(Ci.tmpdir(), "voltro-import-uploads"), va = (e) => I.join(_a(), e), ya = (e) => I.join(va(e), "archive.bin"), ba = (e) => I.join(va(e), "meta.json"), xa = async (e = Date.now()) => {
|
|
113
113
|
let t = 0;
|
|
114
114
|
try {
|
|
115
|
-
for (let n of await X.readdir(
|
|
115
|
+
for (let n of await X.readdir(_a())) {
|
|
116
116
|
if (n === ".runs") continue;
|
|
117
|
-
let r = await X.stat(
|
|
118
|
-
r !== null && (e - r.mtimeMs <= 864e5 || (await X.rm(
|
|
117
|
+
let r = await X.stat(va(n)).catch(() => null);
|
|
118
|
+
r !== null && (e - r.mtimeMs <= 864e5 || (await X.rm(va(n), {
|
|
119
119
|
recursive: !0,
|
|
120
120
|
force: !0
|
|
121
121
|
}).catch(() => void 0), t++));
|
|
122
122
|
}
|
|
123
123
|
} catch {}
|
|
124
124
|
return t;
|
|
125
|
-
},
|
|
126
|
-
if (!
|
|
125
|
+
}, Sa = async (e) => {
|
|
126
|
+
if (!ga(e)) return {
|
|
127
127
|
bytes: 0,
|
|
128
128
|
key: null,
|
|
129
129
|
runId: null
|
|
130
130
|
};
|
|
131
|
-
let t = await X.stat(
|
|
131
|
+
let t = await X.stat(ya(e)).catch(() => null);
|
|
132
132
|
if (t === null) return {
|
|
133
133
|
bytes: 0,
|
|
134
134
|
key: null,
|
|
135
135
|
runId: null
|
|
136
136
|
};
|
|
137
|
-
let n = await
|
|
137
|
+
let n = await Ca(e);
|
|
138
138
|
return {
|
|
139
139
|
bytes: t.size,
|
|
140
140
|
key: n.key ?? null,
|
|
141
141
|
runId: n.runId ?? null
|
|
142
142
|
};
|
|
143
|
-
},
|
|
143
|
+
}, Ca = async (e) => {
|
|
144
144
|
try {
|
|
145
|
-
let t = await X.readFile(
|
|
145
|
+
let t = await X.readFile(ba(e), "utf8");
|
|
146
146
|
return JSON.parse(t);
|
|
147
147
|
} catch {
|
|
148
148
|
return {};
|
|
149
149
|
}
|
|
150
|
-
},
|
|
151
|
-
let n =
|
|
150
|
+
}, wa = async (e, t) => {
|
|
151
|
+
let n = ba(e), r = `${n}.${process.pid}.${Math.random().toString(36).slice(2, 8)}.tmp`;
|
|
152
152
|
await X.writeFile(r, JSON.stringify(t)), await X.rename(r, n);
|
|
153
|
-
},
|
|
154
|
-
if (!
|
|
155
|
-
await X.mkdir(
|
|
156
|
-
let r = await
|
|
157
|
-
return i !== null && n?.takeOver !== !0 ? i : (await
|
|
153
|
+
}, Ta = async (e, t, n) => {
|
|
154
|
+
if (!ga(e)) return t;
|
|
155
|
+
await X.mkdir(va(e), { recursive: !0 });
|
|
156
|
+
let r = await Ca(e), i = typeof r.runId == "string" && r.runId.length > 0 ? r.runId : null;
|
|
157
|
+
return i !== null && n?.takeOver !== !0 ? i : (await wa(e, {
|
|
158
158
|
...r,
|
|
159
159
|
runId: t
|
|
160
160
|
}), t);
|
|
161
|
-
},
|
|
162
|
-
if (!
|
|
163
|
-
let t = await
|
|
161
|
+
}, Ea = async (e) => {
|
|
162
|
+
if (!ga(e)) return;
|
|
163
|
+
let t = await Ca(e);
|
|
164
164
|
if (t.runId === void 0) return;
|
|
165
165
|
let { runId: n, ...r } = t;
|
|
166
|
-
await
|
|
167
|
-
},
|
|
168
|
-
...await
|
|
166
|
+
await wa(e, r).catch(() => void 0);
|
|
167
|
+
}, Da = async (e, t, n) => (await X.mkdir(va(e), { recursive: !0 }), await X.writeFile(ya(e), Buffer.from(t)), await wa(e, {
|
|
168
|
+
...await Ca(e),
|
|
169
169
|
key: n,
|
|
170
170
|
startedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
171
|
-
}), t.byteLength),
|
|
172
|
-
if (!
|
|
171
|
+
}), t.byteLength), Oa = (e) => `up-${Pi("sha256").update(e).digest("hex").slice(0, 32)}`, ka = async (e) => {
|
|
172
|
+
if (!ga(e.id)) return {
|
|
173
173
|
reason: "bad-id",
|
|
174
|
-
message: `upload id must match ${String(
|
|
174
|
+
message: `upload id must match ${String(ha)}`
|
|
175
175
|
};
|
|
176
|
-
let t = await
|
|
176
|
+
let t = await Sa(e.id);
|
|
177
177
|
if (t.key !== null && t.key !== e.key) return {
|
|
178
178
|
reason: "key-mismatch",
|
|
179
179
|
message: "this upload id already holds a different bundle. Use a new upload id, or delete the partial upload."
|
|
@@ -183,34 +183,34 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
183
183
|
message: `chunk starts at ${e.offset} but the server holds ${t.bytes} byte(s)`,
|
|
184
184
|
expectedOffset: t.bytes
|
|
185
185
|
};
|
|
186
|
-
if (await X.mkdir(
|
|
187
|
-
let t = await
|
|
188
|
-
await
|
|
186
|
+
if (await X.mkdir(va(e.id), { recursive: !0 }), t.key === null) {
|
|
187
|
+
let t = await Ca(e.id);
|
|
188
|
+
await wa(e.id, {
|
|
189
189
|
...t,
|
|
190
190
|
key: e.key,
|
|
191
191
|
startedAt: (/* @__PURE__ */ new Date()).toISOString()
|
|
192
192
|
});
|
|
193
193
|
}
|
|
194
194
|
return await new Promise((t, n) => {
|
|
195
|
-
let r =
|
|
195
|
+
let r = Fn(ya(e.id), { flags: "a" });
|
|
196
196
|
r.on("error", n), r.on("finish", () => t()), r.end(Buffer.from(e.bytes));
|
|
197
197
|
}), { total: t.bytes + e.bytes.byteLength };
|
|
198
|
-
},
|
|
199
|
-
let t = await X.stat(
|
|
198
|
+
}, Aa = async (e) => {
|
|
199
|
+
let t = await X.stat(ya(e));
|
|
200
200
|
return {
|
|
201
|
-
path:
|
|
201
|
+
path: ya(e),
|
|
202
202
|
bytes: t.size
|
|
203
203
|
};
|
|
204
|
-
},
|
|
205
|
-
if (!
|
|
206
|
-
let n =
|
|
204
|
+
}, ja = () => I.join(_a(), ".runs"), Ma = (e) => I.join(ja(), `${e}.bin`), Na = async (e, t) => {
|
|
205
|
+
if (!ga(e)) return null;
|
|
206
|
+
let n = ya(e), r = await X.stat(n).catch(() => null);
|
|
207
207
|
if (r === null || r.size === 0) return null;
|
|
208
|
-
await X.mkdir(
|
|
209
|
-
let i =
|
|
208
|
+
await X.mkdir(ja(), { recursive: !0 });
|
|
209
|
+
let i = Ma(t);
|
|
210
210
|
return await X.rename(n, i), i;
|
|
211
|
-
},
|
|
212
|
-
await X.rm(
|
|
213
|
-
}, Q = L({ scope: "voltro:admin-import" }),
|
|
211
|
+
}, Pa = async (e) => {
|
|
212
|
+
await X.rm(Ma(e), { force: !0 }).catch(() => void 0);
|
|
213
|
+
}, Q = L({ scope: "voltro:admin-import" }), Fa = "VBUNDLE2", Ia = (e) => {
|
|
214
214
|
let t = e.req.headers["x-import-rollback-key"];
|
|
215
215
|
if (e.mode !== "replace") return { options: {} };
|
|
216
216
|
if (typeof t != "string" || t.length === 0) return Q.warn("admin.import: no rollback capture — this run empties the target first, and nothing was asked to be kept. Send `x-import-rollback-key: <storage key>` (voltro data import --rollback-key <key>) to have the instance store the target's current rows before deleting them."), { options: {} };
|
|
@@ -221,18 +221,18 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
221
221
|
hint: "A capture written to the pod would not survive the failure it exists for. Configure storage (the same one the storage-push export uses), or re-send without `x-import-rollback-key` to accept that a run which does not finish can leave the target emptied. Note that CONFIGURED is not the same question as SURVIVES: a `filesystem` provider pointed at a container directory with no volume behind it passes this check and dies with the pod. The run says so when it can observe it — the capture path being on the same filesystem as `/`."
|
|
222
222
|
})
|
|
223
223
|
};
|
|
224
|
-
let n =
|
|
224
|
+
let n = Pn(wi(), `voltro-rollback-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`), r = e.deps.putArchive;
|
|
225
225
|
return {
|
|
226
226
|
key: t,
|
|
227
227
|
options: {
|
|
228
228
|
rollbackDir: n,
|
|
229
229
|
onRollbackCaptured: async () => {
|
|
230
|
-
let e =
|
|
231
|
-
e !== void 0 && Q.warn(`admin.import: ${e}`), await r(t, () =>
|
|
230
|
+
let e = Di(n);
|
|
231
|
+
e !== void 0 && Q.warn(`admin.import: ${e}`), await r(t, () => Yi({ dir: n })), Q.info("admin.import: rollback capture stored", { bundleKey: t });
|
|
232
232
|
}
|
|
233
233
|
}
|
|
234
234
|
};
|
|
235
|
-
},
|
|
235
|
+
}, La = (e) => {
|
|
236
236
|
let t = e["x-import-mode"], n = e["x-import-atomic"];
|
|
237
237
|
return {
|
|
238
238
|
mode: t,
|
|
@@ -242,34 +242,34 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
242
242
|
dryRun: e["x-import-dry-run"] === "1" || e["x-import-dry-run"] === "true",
|
|
243
243
|
tables: (e["x-import-tables"] ?? "").split(",").map((e) => e.trim()).filter(Boolean)
|
|
244
244
|
};
|
|
245
|
-
},
|
|
245
|
+
}, Ra = async (e, t) => {
|
|
246
246
|
if (typeof t.bundleKey == "string" && t.bundleKey !== "") {
|
|
247
247
|
if (!e.openArchive) return { refusal: Z(501, { error: "storage transport not configured on this instance" }) };
|
|
248
248
|
let n = e.openArchive, r = t.bundleKey;
|
|
249
249
|
return {
|
|
250
250
|
source: () => n(r),
|
|
251
251
|
transport: "storage",
|
|
252
|
-
uploadId:
|
|
252
|
+
uploadId: Oa(r)
|
|
253
253
|
};
|
|
254
254
|
}
|
|
255
255
|
let n = t.uploadId;
|
|
256
|
-
if (typeof n != "string" || !
|
|
257
|
-
let r = await
|
|
256
|
+
if (typeof n != "string" || !ga(n)) return { refusal: Z(400, { error: "start needs { uploadId } from an upload, or { bundleKey } for the storage transport" }) };
|
|
257
|
+
let r = await Aa(n).catch(() => null);
|
|
258
258
|
return r === null || r.bytes === 0 ? { refusal: Z(409, {
|
|
259
259
|
error: "no such upload",
|
|
260
260
|
message: `this instance holds no bytes for upload '${n}'. Upload the bundle first, or re-upload if it has expired.`
|
|
261
261
|
}) } : {
|
|
262
|
-
source: () =>
|
|
262
|
+
source: () => za(r.path),
|
|
263
263
|
transport: "upload",
|
|
264
264
|
uploadId: n
|
|
265
265
|
};
|
|
266
|
-
},
|
|
267
|
-
let { createReadStream: t } =
|
|
266
|
+
}, za = (e) => {
|
|
267
|
+
let { createReadStream: t } = ra("node:fs");
|
|
268
268
|
return t(e);
|
|
269
|
-
},
|
|
270
|
-
let n =
|
|
269
|
+
}, Ba = (e) => async (t) => {
|
|
270
|
+
let n = ma(t, e.secret);
|
|
271
271
|
if (n) return n;
|
|
272
|
-
let r =
|
|
272
|
+
let r = La(t.headers), i = Ia({
|
|
273
273
|
req: t,
|
|
274
274
|
mode: r.mode,
|
|
275
275
|
deps: e
|
|
@@ -283,16 +283,16 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
283
283
|
return Z(400, { error: "a preflight body must be JSON: { tables: string[] } or { bundleKey: string }" });
|
|
284
284
|
}
|
|
285
285
|
let a = Array.isArray(n.tables) ? n.tables.filter((e) => typeof e == "string") : [];
|
|
286
|
-
if (a.length === 0 && typeof n.bundleKey == "string" && n.bundleKey !== "" && e.openArchive && (a = [...await
|
|
286
|
+
if (a.length === 0 && typeof n.bundleKey == "string" && n.bundleKey !== "" && e.openArchive && (a = [...await Va(e.openArchive(n.bundleKey))]), a.length === 0) return Z(400, {
|
|
287
287
|
error: "a preflight needs { tables: string[] } — the bundle's table names, so the staging decision can be made against them",
|
|
288
288
|
hint: "or { bundleKey } on an instance with storage configured, where this endpoint reads the table list out of the archive itself"
|
|
289
289
|
});
|
|
290
|
-
let o =
|
|
290
|
+
let o = qi({
|
|
291
291
|
mode: r.mode ?? "upsert",
|
|
292
292
|
...e.dialect === void 0 ? {} : { targetDialect: e.dialect },
|
|
293
293
|
...e.snapshot === void 0 ? {} : { targetSnapshot: e.snapshot },
|
|
294
294
|
bundleTables: a,
|
|
295
|
-
isSkipped:
|
|
295
|
+
isSkipped: Ji,
|
|
296
296
|
canRunSql: !0
|
|
297
297
|
});
|
|
298
298
|
return Z(200, {
|
|
@@ -311,8 +311,8 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
311
311
|
}
|
|
312
312
|
let a = t.headers["x-import-upload-id"];
|
|
313
313
|
if (a !== void 0 && a !== "") {
|
|
314
|
-
if (
|
|
315
|
-
let e = await
|
|
314
|
+
if (xa(), t.headers["x-import-probe"] === "1") {
|
|
315
|
+
let e = await Sa(a);
|
|
316
316
|
return Z(200, {
|
|
317
317
|
uploadId: a,
|
|
318
318
|
bytes: e.bytes,
|
|
@@ -321,7 +321,7 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
321
321
|
}
|
|
322
322
|
let e = t.headers["x-import-upload-key"] ?? "", n = Number(t.headers["x-import-chunk-offset"] ?? "0");
|
|
323
323
|
if (e === "" || !Number.isFinite(n) || n < 0) return Z(400, { error: "a chunked upload needs x-import-upload-key and a numeric x-import-chunk-offset" });
|
|
324
|
-
let r = await
|
|
324
|
+
let r = await ka({
|
|
325
325
|
id: a,
|
|
326
326
|
key: e,
|
|
327
327
|
offset: n,
|
|
@@ -343,12 +343,12 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
343
343
|
complete: i
|
|
344
344
|
});
|
|
345
345
|
}
|
|
346
|
-
if (t.rawBody.byteLength >= 8 && Buffer.from(t.rawBody.subarray(0, 8)).toString("latin1") ===
|
|
347
|
-
|
|
348
|
-
let e =
|
|
346
|
+
if (t.rawBody.byteLength >= 8 && Buffer.from(t.rawBody.subarray(0, 8)).toString("latin1") === Fa) {
|
|
347
|
+
xa();
|
|
348
|
+
let e = Pi("sha256").update(Buffer.from(t.rawBody)).digest("hex"), n = Oa(e);
|
|
349
349
|
return Z(202, {
|
|
350
350
|
uploadId: n,
|
|
351
|
-
bytes: await
|
|
351
|
+
bytes: await Da(n, t.rawBody, e),
|
|
352
352
|
complete: !0
|
|
353
353
|
});
|
|
354
354
|
}
|
|
@@ -359,22 +359,22 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
359
359
|
return Z(400, { error: "body must be a packed bundle archive or { bundleKey } JSON" });
|
|
360
360
|
}
|
|
361
361
|
return typeof o.bundleKey != "string" || !o.bundleKey ? Z(400, { error: "body.bundleKey (string) is required for the storage transport" }) : e.openArchive ? Z(202, {
|
|
362
|
-
uploadId:
|
|
362
|
+
uploadId: Oa(o.bundleKey),
|
|
363
363
|
bundleKey: o.bundleKey,
|
|
364
364
|
complete: !0
|
|
365
365
|
}) : Z(501, { error: "storage transport not configured on this instance" });
|
|
366
|
-
},
|
|
367
|
-
let t = await
|
|
366
|
+
}, Va = async (e) => {
|
|
367
|
+
let t = await Xi(e, ["manifest.json"]).then((e) => e.get("manifest.json"), () => void 0);
|
|
368
368
|
if (t === void 0) return [];
|
|
369
369
|
try {
|
|
370
370
|
return (JSON.parse(Buffer.from(t).toString("utf8")).tables ?? []).map((e) => e.name).filter((e) => typeof e == "string");
|
|
371
371
|
} catch {
|
|
372
372
|
return [];
|
|
373
373
|
}
|
|
374
|
-
},
|
|
375
|
-
let n =
|
|
374
|
+
}, Ha = (e) => async (t) => {
|
|
375
|
+
let n = ma(t, e.secret);
|
|
376
376
|
if (n) return n;
|
|
377
|
-
let r =
|
|
377
|
+
let r = La(t.headers), i = Ia({
|
|
378
378
|
req: t,
|
|
379
379
|
mode: r.mode,
|
|
380
380
|
deps: e
|
|
@@ -386,12 +386,12 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
386
386
|
} catch {
|
|
387
387
|
return Z(400, { error: "body must be JSON: { uploadId } or { bundleKey }" });
|
|
388
388
|
}
|
|
389
|
-
let o = typeof a.bundleKey == "string" && a.bundleKey !== "" ?
|
|
390
|
-
if (!
|
|
391
|
-
let s =
|
|
389
|
+
let o = typeof a.bundleKey == "string" && a.bundleKey !== "" ? Oa(a.bundleKey) : typeof a.uploadId == "string" ? a.uploadId : "";
|
|
390
|
+
if (!ga(o)) return Z(400, { error: "start needs { uploadId } from an upload, or { bundleKey } for the storage transport" });
|
|
391
|
+
let s = ir("dimp", `${o}-${Date.now()}-${Math.random()}`), c = await Ta(o, s);
|
|
392
392
|
if (c !== s) {
|
|
393
|
-
let t = await
|
|
394
|
-
if (
|
|
393
|
+
let t = await An(e.store, c);
|
|
394
|
+
if (jn(t) === void 0 && t !== null) return Q.info("admin.import start: already running", {
|
|
395
395
|
uploadId: o,
|
|
396
396
|
runId: c
|
|
397
397
|
}), Z(202, {
|
|
@@ -402,18 +402,18 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
402
402
|
Q.info("admin.import start: taking over a claim whose run is not running", {
|
|
403
403
|
uploadId: o,
|
|
404
404
|
staleRunId: c,
|
|
405
|
-
outcome:
|
|
406
|
-
}), c = await
|
|
405
|
+
outcome: jn(t) ?? "no record"
|
|
406
|
+
}), c = await Ta(o, s, { takeOver: !0 });
|
|
407
407
|
}
|
|
408
|
-
let l = async (e) => (await
|
|
408
|
+
let l = async (e) => (await Ea(o).catch(() => void 0), e), u = await Ra(e, {
|
|
409
409
|
...typeof a.uploadId == "string" ? { uploadId: a.uploadId } : {},
|
|
410
410
|
...typeof a.bundleKey == "string" ? { bundleKey: a.bundleKey } : {}
|
|
411
411
|
});
|
|
412
412
|
if ("refusal" in u) return l(u.refusal);
|
|
413
413
|
if (e.snapshot !== void 0 && !r.force) {
|
|
414
|
-
let t = await
|
|
414
|
+
let t = await Ua(u.source());
|
|
415
415
|
if (t !== null) {
|
|
416
|
-
let n =
|
|
416
|
+
let n = Ki(t.source?.schemaFingerprint ?? "", e.snapshot, Wa(t));
|
|
417
417
|
if (n.drifted) return Q.warn("admin.import refused (schema drift)", {
|
|
418
418
|
transport: u.transport,
|
|
419
419
|
bundle: n.bundleFingerprint.slice(0, 16),
|
|
@@ -428,17 +428,17 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
428
428
|
}
|
|
429
429
|
}
|
|
430
430
|
let d = null;
|
|
431
|
-
if (u.transport === "upload" && (d = await
|
|
431
|
+
if (u.transport === "upload" && (d = await Na(u.uploadId, c), d === null)) return l(Z(409, {
|
|
432
432
|
error: "no such upload",
|
|
433
433
|
message: `the bytes for upload '${u.uploadId}' are gone. Re-upload the bundle.`
|
|
434
434
|
}));
|
|
435
|
-
let f = await
|
|
435
|
+
let f = await Ga(e.store, {
|
|
436
436
|
runId: c,
|
|
437
437
|
mode: r.mode ?? "upsert",
|
|
438
438
|
via: "api",
|
|
439
439
|
bundle: u.transport === "storage" ? String(a.bundleKey) : u.uploadId
|
|
440
440
|
});
|
|
441
|
-
return
|
|
441
|
+
return Ka({
|
|
442
442
|
deps: e,
|
|
443
443
|
opts: r,
|
|
444
444
|
rollback: i,
|
|
@@ -446,7 +446,7 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
446
446
|
traced: f,
|
|
447
447
|
resolved: d === null ? u : {
|
|
448
448
|
...u,
|
|
449
|
-
source: () =>
|
|
449
|
+
source: () => za(d)
|
|
450
450
|
}
|
|
451
451
|
}), Q.info("admin.import started", {
|
|
452
452
|
runId: c,
|
|
@@ -465,15 +465,15 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
465
465
|
recorded: f,
|
|
466
466
|
outcome: "poll /_voltro/admin/transfers for this runId — a 202 means started, not finished"
|
|
467
467
|
});
|
|
468
|
-
},
|
|
469
|
-
let t = await
|
|
468
|
+
}, Ua = async (e) => {
|
|
469
|
+
let t = await Xi(e, ["manifest.json"]).then((e) => e.get("manifest.json"), () => null);
|
|
470
470
|
if (t == null) return null;
|
|
471
471
|
try {
|
|
472
472
|
return JSON.parse(Buffer.from(t).toString("utf8"));
|
|
473
473
|
} catch {
|
|
474
474
|
return null;
|
|
475
475
|
}
|
|
476
|
-
},
|
|
476
|
+
}, Wa = (e) => ({ tables: (e.tables ?? []).map((e) => ({
|
|
477
477
|
name: e.name,
|
|
478
478
|
indexes: [],
|
|
479
479
|
columns: Object.entries(e.columnTypes ?? {}).map(([e, t]) => ({
|
|
@@ -483,9 +483,9 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
483
483
|
unique: !1,
|
|
484
484
|
hasDefault: !1
|
|
485
485
|
}))
|
|
486
|
-
})) }),
|
|
486
|
+
})) }), Ga = async (e, t) => {
|
|
487
487
|
try {
|
|
488
|
-
return
|
|
488
|
+
return or(er), await e.insert(H, {
|
|
489
489
|
id: t.runId,
|
|
490
490
|
direction: "import",
|
|
491
491
|
startedAt: /* @__PURE__ */ new Date(),
|
|
@@ -505,7 +505,7 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
505
505
|
error: e?.message ?? String(e)
|
|
506
506
|
}), !1;
|
|
507
507
|
}
|
|
508
|
-
},
|
|
508
|
+
}, Ka = async (e) => {
|
|
509
509
|
let { deps: t, opts: n, rollback: r, resolved: i, runId: a } = e, o = await import("node:os"), s = await import("node:fs/promises"), c = await import("node:path"), l = await s.mkdtemp(c.join(o.tmpdir(), "voltro-admin-import-")), u = async (n) => {
|
|
510
510
|
Q.warn("admin.import failed", {
|
|
511
511
|
runId: a,
|
|
@@ -517,11 +517,11 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
517
517
|
}).then(() => void 0, () => void 0);
|
|
518
518
|
};
|
|
519
519
|
try {
|
|
520
|
-
t.assetSink ? await
|
|
520
|
+
t.assetSink ? await ta(i.source(), {
|
|
521
521
|
dir: l,
|
|
522
522
|
blobs: t.assetSink
|
|
523
|
-
}) : await
|
|
524
|
-
let o = await W.runPromiseExit(
|
|
523
|
+
}) : await na(i.source(), l);
|
|
524
|
+
let o = await W.runPromiseExit(Qi({
|
|
525
525
|
store: t.store,
|
|
526
526
|
bundleDir: l,
|
|
527
527
|
...n.mode ? { mode: n.mode } : {},
|
|
@@ -566,24 +566,24 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
566
566
|
await s.rm(l, {
|
|
567
567
|
recursive: !0,
|
|
568
568
|
force: !0
|
|
569
|
-
}).catch(() => void 0), await
|
|
569
|
+
}).catch(() => void 0), await Pa(a).catch(() => void 0), await Ea(i.uploadId).catch(() => void 0);
|
|
570
570
|
}
|
|
571
|
-
},
|
|
571
|
+
}, qa = /^[A-Za-z0-9_-]{8,64}$/, Ja = (e) => qa.test(e), Ya = () => process.env.VOLTRO_EXPORT_ARTIFACT_DIR ?? I.join(Ci.tmpdir(), "voltro-export-artifacts"), Xa = (e) => I.join(Ya(), e), Za = (e) => I.join(Xa(e), "archive.bin"), Qa = async (e = Date.now()) => {
|
|
572
572
|
let t = 0;
|
|
573
573
|
try {
|
|
574
|
-
for (let n of await X.readdir(
|
|
575
|
-
let r = await X.stat(
|
|
576
|
-
r !== null && (e - r.mtimeMs <= 864e5 || (await X.rm(
|
|
574
|
+
for (let n of await X.readdir(Ya())) {
|
|
575
|
+
let r = await X.stat(Xa(n)).catch(() => null);
|
|
576
|
+
r !== null && (e - r.mtimeMs <= 864e5 || (await X.rm(Xa(n), {
|
|
577
577
|
recursive: !0,
|
|
578
578
|
force: !0
|
|
579
579
|
}).catch(() => void 0), t++));
|
|
580
580
|
}
|
|
581
581
|
} catch {}
|
|
582
582
|
return t;
|
|
583
|
-
},
|
|
584
|
-
if (!
|
|
585
|
-
await X.mkdir(
|
|
586
|
-
let { createWriteStream: n } = await import("node:fs"), r = n(
|
|
583
|
+
}, $a = async (e, t) => {
|
|
584
|
+
if (!Ja(e)) throw Error(`invalid run id: ${e}`);
|
|
585
|
+
await X.mkdir(Xa(e), { recursive: !0 });
|
|
586
|
+
let { createWriteStream: n } = await import("node:fs"), r = n(Za(e)), i = 0;
|
|
587
587
|
try {
|
|
588
588
|
for await (let e of t) i += e.byteLength, r.write(Buffer.from(e)) || await new Promise((e, t) => {
|
|
589
589
|
r.once("drain", e), r.once("error", t);
|
|
@@ -594,18 +594,18 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
594
594
|
});
|
|
595
595
|
}
|
|
596
596
|
return i;
|
|
597
|
-
},
|
|
598
|
-
if (!
|
|
599
|
-
let t = await X.stat(
|
|
597
|
+
}, eo = async (e) => {
|
|
598
|
+
if (!Ja(e)) return null;
|
|
599
|
+
let t = await X.stat(Za(e)).catch(() => null);
|
|
600
600
|
return t === null ? null : t.size;
|
|
601
|
-
},
|
|
602
|
-
let r = await
|
|
601
|
+
}, to = async (e, t, n) => {
|
|
602
|
+
let r = await eo(e);
|
|
603
603
|
if (r === null) return null;
|
|
604
604
|
if (t >= r) return {
|
|
605
605
|
bytes: Buffer.alloc(0),
|
|
606
606
|
total: r
|
|
607
607
|
};
|
|
608
|
-
let i = await X.open(
|
|
608
|
+
let i = await X.open(Za(e), "r");
|
|
609
609
|
try {
|
|
610
610
|
let e = Math.max(0, Math.min(n, r - t)), a = Buffer.alloc(e);
|
|
611
611
|
return await i.read(a, 0, e, t), {
|
|
@@ -615,27 +615,27 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
615
615
|
} finally {
|
|
616
616
|
await i.close();
|
|
617
617
|
}
|
|
618
|
-
},
|
|
619
|
-
|
|
618
|
+
}, no = async (e) => {
|
|
619
|
+
Ja(e) && await X.rm(Xa(e), {
|
|
620
620
|
recursive: !0,
|
|
621
621
|
force: !0
|
|
622
622
|
}).catch(() => void 0);
|
|
623
|
-
},
|
|
623
|
+
}, ro = L({ scope: "voltro:admin-export" }), io = (e) => Array.isArray(e) ? e.filter((e) => typeof e == "string") : [], ao = (e) => {
|
|
624
624
|
if (typeof e.tenant == "string" && e.tenant) return {
|
|
625
625
|
kind: "tenant",
|
|
626
626
|
tenantId: e.tenant
|
|
627
627
|
};
|
|
628
628
|
if (Array.isArray(e.tables) && e.tables.length) return {
|
|
629
629
|
kind: "tables",
|
|
630
|
-
tables:
|
|
630
|
+
tables: io(e.tables)
|
|
631
631
|
};
|
|
632
|
-
let t =
|
|
632
|
+
let t = io(e.exclude);
|
|
633
633
|
return t.length > 0 ? {
|
|
634
634
|
kind: "all",
|
|
635
635
|
exclude: t
|
|
636
636
|
} : { kind: "all" };
|
|
637
|
-
},
|
|
638
|
-
let n =
|
|
637
|
+
}, oo = (e) => async (t) => {
|
|
638
|
+
let n = ma(t, e.secret);
|
|
639
639
|
if (n) return n;
|
|
640
640
|
let r;
|
|
641
641
|
try {
|
|
@@ -655,12 +655,12 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
655
655
|
});
|
|
656
656
|
}
|
|
657
657
|
}
|
|
658
|
-
let a = r.consistency === "snapshot" ? "snapshot" : i.consistency ?? "live", o = (typeof r.compression == "string" ? r.compression : void 0) ?? i.compression, s = i.scope ??
|
|
658
|
+
let a = r.consistency === "snapshot" ? "snapshot" : i.consistency ?? "live", o = (typeof r.compression == "string" ? r.compression : void 0) ?? i.compression, s = i.scope ?? ao(r), c = typeof r.bundleKey == "string" && r.bundleKey.length > 0, l = r.assets === !0 && e.assetSource ? { blobs: e.assetSource } : {}, u = ir("dexp", `${Date.now()}-${Math.random()}`), d = await so(e.store, {
|
|
659
659
|
runId: u,
|
|
660
660
|
mode: i.subset ? "subset" : s.kind,
|
|
661
661
|
bundle: c ? String(r.bundleKey) : null
|
|
662
662
|
});
|
|
663
|
-
return
|
|
663
|
+
return co({
|
|
664
664
|
deps: e,
|
|
665
665
|
runId: u,
|
|
666
666
|
recorded: d,
|
|
@@ -670,7 +670,7 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
670
670
|
blobs: l,
|
|
671
671
|
...o ? { compression: o } : {},
|
|
672
672
|
...c ? { bundleKey: String(r.bundleKey) } : {}
|
|
673
|
-
}),
|
|
673
|
+
}), Qa(), ro.info("admin.export started", {
|
|
674
674
|
runId: u,
|
|
675
675
|
scope: s.kind,
|
|
676
676
|
storage: c
|
|
@@ -681,9 +681,9 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
681
681
|
recorded: d,
|
|
682
682
|
outcome: "poll /_voltro/admin/transfers for this runId; fetch the bytes from /_voltro/admin/export/download"
|
|
683
683
|
});
|
|
684
|
-
},
|
|
684
|
+
}, so = async (e, t) => {
|
|
685
685
|
try {
|
|
686
|
-
return
|
|
686
|
+
return or(er), await e.insert(H, {
|
|
687
687
|
id: t.runId,
|
|
688
688
|
direction: "export",
|
|
689
689
|
startedAt: /* @__PURE__ */ new Date(),
|
|
@@ -698,17 +698,17 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
698
698
|
staged: null
|
|
699
699
|
}), !0;
|
|
700
700
|
} catch (e) {
|
|
701
|
-
return
|
|
701
|
+
return ro.warn("admin.export: the run could not be recorded", {
|
|
702
702
|
runId: t.runId,
|
|
703
703
|
error: e?.message ?? String(e)
|
|
704
704
|
}), !1;
|
|
705
705
|
}
|
|
706
|
-
},
|
|
706
|
+
}, co = async (e) => {
|
|
707
707
|
let { deps: t, runId: n } = e, r = await import("node:os"), i = await import("node:fs/promises"), a = await import("node:path"), o = await i.mkdtemp(a.join(r.tmpdir(), "voltro-admin-export-")), s = async (r) => {
|
|
708
708
|
e.recorded && await t.store.update(H, n, r).then(() => void 0, () => void 0);
|
|
709
709
|
};
|
|
710
710
|
try {
|
|
711
|
-
let r = await W.runPromise(
|
|
711
|
+
let r = await W.runPromise(Zi({
|
|
712
712
|
store: t.store,
|
|
713
713
|
snapshot: t.snapshot,
|
|
714
714
|
dialect: t.dialect,
|
|
@@ -723,16 +723,16 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
723
723
|
})), i = r.tables.reduce((e, t) => e + t.rowCount, 0), a = r.masking?.transformed.length ?? 0;
|
|
724
724
|
if (e.bundleKey !== void 0) {
|
|
725
725
|
if (!t.putArchive) throw Error("storage transport not configured on this instance");
|
|
726
|
-
await t.putArchive(e.bundleKey, () =>
|
|
726
|
+
await t.putArchive(e.bundleKey, () => Yi({
|
|
727
727
|
dir: o,
|
|
728
728
|
...e.blobs
|
|
729
729
|
}));
|
|
730
730
|
}
|
|
731
|
-
let c = await
|
|
731
|
+
let c = await $a(n, Yi({
|
|
732
732
|
dir: o,
|
|
733
733
|
...e.blobs
|
|
734
734
|
}));
|
|
735
|
-
|
|
735
|
+
ro.info("admin.export complete", {
|
|
736
736
|
runId: n,
|
|
737
737
|
tables: r.tables.length,
|
|
738
738
|
rows: i,
|
|
@@ -748,25 +748,25 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
748
748
|
});
|
|
749
749
|
} catch (e) {
|
|
750
750
|
let t = e?.message ?? String(e);
|
|
751
|
-
|
|
751
|
+
ro.warn("admin.export failed", {
|
|
752
752
|
runId: n,
|
|
753
753
|
error: t
|
|
754
754
|
}), await s({
|
|
755
755
|
failure: t,
|
|
756
756
|
finishedAt: null
|
|
757
|
-
}), await
|
|
757
|
+
}), await no(n);
|
|
758
758
|
} finally {
|
|
759
759
|
await i.rm(o, {
|
|
760
760
|
recursive: !0,
|
|
761
761
|
force: !0
|
|
762
762
|
}).catch(() => void 0);
|
|
763
763
|
}
|
|
764
|
-
},
|
|
765
|
-
let n =
|
|
764
|
+
}, lo = (e) => async (t) => {
|
|
765
|
+
let n = ma(t, e.secret, "GET");
|
|
766
766
|
if (n) return n;
|
|
767
767
|
let r = new URLSearchParams(t.query ?? ""), i = r.get("runId") ?? "";
|
|
768
|
-
if (!
|
|
769
|
-
let a = Math.max(0, Number(r.get("offset") ?? "0") || 0), o = Number(r.get("length") ?? "8388608"), s = await
|
|
768
|
+
if (!Ja(i)) return Z(400, { error: "download needs ?runId=<id> from the 202 the export answered with" });
|
|
769
|
+
let a = Math.max(0, Number(r.get("offset") ?? "0") || 0), o = Number(r.get("length") ?? "8388608"), s = await to(i, a, Number.isFinite(o) && o > 0 ? Math.min(o, fo) : uo);
|
|
770
770
|
return s === null ? Z(404, {
|
|
771
771
|
error: "no artefact",
|
|
772
772
|
message: `this instance holds no produced bundle for run '${i}'. It may have expired, or the export may still be running — poll the run first.`
|
|
@@ -780,7 +780,7 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
780
780
|
"x-export-length": String(s.bytes.byteLength)
|
|
781
781
|
}
|
|
782
782
|
};
|
|
783
|
-
},
|
|
783
|
+
}, uo = 8388608, fo = 33554432, po = async (e, t) => await e.query({
|
|
784
784
|
table: H,
|
|
785
785
|
order: [{
|
|
786
786
|
column: "startedAt",
|
|
@@ -790,19 +790,19 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
790
790
|
projection: void 0,
|
|
791
791
|
skip: 0,
|
|
792
792
|
take: t
|
|
793
|
-
}),
|
|
793
|
+
}), mo = (e) => {
|
|
794
794
|
let t = new Date(e);
|
|
795
795
|
return Number.isFinite(t.getTime()) ? t : /* @__PURE__ */ new Date(0);
|
|
796
|
-
},
|
|
796
|
+
}, ho = (e) => ({
|
|
797
797
|
...e,
|
|
798
|
-
startedAt:
|
|
799
|
-
finishedAt: e.finishedAt === null || e.finishedAt === void 0 ? null :
|
|
800
|
-
}),
|
|
801
|
-
let n =
|
|
798
|
+
startedAt: mo(e.startedAt),
|
|
799
|
+
finishedAt: e.finishedAt === null || e.finishedAt === void 0 ? null : mo(e.finishedAt)
|
|
800
|
+
}), go = (e) => async (t) => {
|
|
801
|
+
let n = ma(t, e.secret, "GET");
|
|
802
802
|
if (n) return n;
|
|
803
803
|
let r = Number(new URLSearchParams(t.query ?? "").get("limit") ?? "20"), i = Number.isFinite(r) ? Math.max(1, Math.min(200, Math.trunc(r))) : 20, a;
|
|
804
804
|
try {
|
|
805
|
-
a = (await
|
|
805
|
+
a = (await po(e.store, i)).map(ho);
|
|
806
806
|
} catch (e) {
|
|
807
807
|
return Z(409, {
|
|
808
808
|
error: "no import history",
|
|
@@ -825,11 +825,11 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
825
825
|
direction: e.direction,
|
|
826
826
|
failure: e.failure,
|
|
827
827
|
staged: e.staged,
|
|
828
|
-
line:
|
|
828
|
+
line: ar(e)
|
|
829
829
|
}))
|
|
830
830
|
});
|
|
831
|
-
},
|
|
832
|
-
let r = await W.runPromise(
|
|
831
|
+
}, _o = (e, t, n = {}) => (async function* () {
|
|
832
|
+
let r = await W.runPromise(ki(e, t).pipe(W.timeout(n.openTimeout ?? "30 seconds"))), i = await ji(r.stream), a = n.stallMs ?? 12e4, o, s = () => {
|
|
833
833
|
o && clearTimeout(o), o = setTimeout(() => i.destroy(/* @__PURE__ */ Error(`storage read stalled for ${a}ms reading '${t}'`)), a);
|
|
834
834
|
};
|
|
835
835
|
try {
|
|
@@ -838,7 +838,7 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
838
838
|
} finally {
|
|
839
839
|
o && clearTimeout(o), i.destroy();
|
|
840
840
|
}
|
|
841
|
-
})(),
|
|
841
|
+
})(), vo = {
|
|
842
842
|
get: async () => void 0,
|
|
843
843
|
set: async () => {},
|
|
844
844
|
setWithTags: async () => {},
|
|
@@ -847,64 +847,63 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
847
847
|
clear: async () => {},
|
|
848
848
|
invalidateTag: async () => 0,
|
|
849
849
|
wrap: async (e, t, n) => n()
|
|
850
|
-
},
|
|
851
|
-
|
|
850
|
+
}, yo = async (e) => {
|
|
851
|
+
Ne(e.appProcedures ?? e.discovered, {
|
|
852
852
|
defaultDeny: e.security?.defaultDeny ?? !0,
|
|
853
853
|
commandHint: "`voltro serve`"
|
|
854
|
-
}),
|
|
854
|
+
}), fi({
|
|
855
855
|
dataStore: e.store,
|
|
856
856
|
schemaRegistry: e.schemaRegistry
|
|
857
857
|
});
|
|
858
|
-
let t = (e.discovered.budgets?.length ?? 0) > 0, n, r = new
|
|
858
|
+
let t = (e.discovered.budgets?.length ?? 0) > 0, n, r = new vr({
|
|
859
|
+
crdtColumnsOf: (t) => e.schemaRegistry.crdtColumns(t),
|
|
859
860
|
store: e.store,
|
|
860
861
|
...e.snapshotCache ? { cache: e.snapshotCache } : {},
|
|
861
862
|
...e.reactive === void 0 ? {} : { reactive: e.reactive },
|
|
862
863
|
...t ? { recordCost: (e) => n?.record(e) } : {},
|
|
863
|
-
recordDelivery: (e) =>
|
|
864
|
+
recordDelivery: (e) => Y({
|
|
864
865
|
label: e.label,
|
|
865
866
|
kind: e.kind,
|
|
866
867
|
durationMs: e.durationMs,
|
|
867
868
|
rowCount: e.rowCount
|
|
868
869
|
})
|
|
869
|
-
}), i = e.cache ??
|
|
870
|
+
}), i = e.cache ?? vo, a = e.kv ?? ai, o, s = () => void 0, u, d, f, ee, te, ne, h, g = L({ scope: "voltro:workflow" }), ie = L({ scope: "voltro:schedule" }), ae = Et({
|
|
870
871
|
store: e.store,
|
|
871
|
-
warn: (e, t) =>
|
|
872
|
-
|
|
873
|
-
}
|
|
874
|
-
}), ie = re.remember, ae = re.resolve, oe = de({
|
|
872
|
+
warn: (e, t) => g.warn(e, t)
|
|
873
|
+
}), oe = ae.remember, ce = ae.resolve, de = fe({
|
|
875
874
|
authority: e.authority,
|
|
876
875
|
getStore: () => e.store
|
|
877
|
-
}),
|
|
878
|
-
if (
|
|
876
|
+
}), v = (e.discovered.workflows?.length ?? 0) > 0 ? Jr(() => o) : void 0, ve = (e.discovered.workflows?.length ?? 0) > 0 || (e.discovered.eventTriggers?.length ?? 0) > 0, ye = ve || (e.discovered.workflowWorkers?.length ?? 0) > 0 || e.scheduleCoordination === "cluster", Se = e.tenantIsolation === "namespace", we = (e.log ?? L({ scope: "voltro:serve" })).child("webhooks"), Te, Ee, x = e.discovered.webhooks;
|
|
877
|
+
if (x && x.outgoing.length > 0 && e.workflowEngineLayer !== void 0) {
|
|
879
878
|
e.workflowEngineLayer;
|
|
880
|
-
let t =
|
|
879
|
+
let t = Xe({
|
|
881
880
|
store: e.store,
|
|
882
881
|
schemaRegistry: e.schemaRegistry,
|
|
883
882
|
cache: i,
|
|
884
883
|
kv: a
|
|
885
|
-
}), n =
|
|
886
|
-
|
|
884
|
+
}), n = x.outgoing.map((e) => e.descriptor);
|
|
885
|
+
Ee = Vi.toLayer(Ri(t, { events: n })), Te = zi(t, async (e) => {
|
|
887
886
|
let t = f;
|
|
888
887
|
if (t === void 0) {
|
|
889
|
-
|
|
888
|
+
we.error("webhook delivery skipped — the workflow runtime was never built. This is a framework defect, not a configuration problem: report it with your engine setting. Deliveries are NOT queued and will not be retried.", {
|
|
890
889
|
deliveryId: e.deliveryId,
|
|
891
890
|
targetId: e.targetId
|
|
892
891
|
});
|
|
893
892
|
return;
|
|
894
893
|
}
|
|
895
|
-
t.runPromise(
|
|
896
|
-
|
|
894
|
+
t.runPromise(Vi.execute(e)).catch((t) => {
|
|
895
|
+
we.error("deliverWebhook workflow crashed", {
|
|
897
896
|
deliveryId: e.deliveryId,
|
|
898
897
|
targetId: e.targetId
|
|
899
898
|
}, t);
|
|
900
899
|
});
|
|
901
900
|
}, { events: n });
|
|
902
901
|
}
|
|
903
|
-
let
|
|
904
|
-
if (
|
|
905
|
-
let t = e.descriptor.path ??
|
|
902
|
+
let De = /* @__PURE__ */ new Map();
|
|
903
|
+
if (x) for (let e of x.incoming) {
|
|
904
|
+
let t = e.descriptor.path ?? Bi(e.descriptor.id), n = `VOLTRO_WEBHOOK_SECRET_${e.descriptor.id.toUpperCase().replace(/[^A-Z0-9]/g, "_")}`, r = Ui(e.descriptor, {
|
|
906
905
|
resolveSecret: async () => process.env[n] ?? null,
|
|
907
|
-
resolveWorkflows: () =>
|
|
906
|
+
resolveWorkflows: () => v === void 0 ? void 0 : ri(v, {
|
|
908
907
|
traceId: `incoming:${e.descriptor.id}`,
|
|
909
908
|
source: `incoming:${e.descriptor.id}`
|
|
910
909
|
}),
|
|
@@ -916,18 +915,18 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
916
915
|
idempotency: e.idempotency,
|
|
917
916
|
durationMs: e.durationMs
|
|
918
917
|
};
|
|
919
|
-
e.status >= 500 ?
|
|
918
|
+
e.status >= 500 ? we.error("incoming delivery failed", t) : e.status >= 400 ? we.warn("incoming delivery rejected", t) : we.info("incoming delivery handled", t);
|
|
920
919
|
}
|
|
921
920
|
});
|
|
922
|
-
|
|
921
|
+
De.set(t, { handle: r });
|
|
923
922
|
}
|
|
924
|
-
|
|
925
|
-
let
|
|
923
|
+
Lr(), si((t) => Rr(e.store, t.subjectId, t.resourceType, t.resourceId)) || L({ scope: "voltro:serve" }).info("policy guards: using the app-registered tuple source");
|
|
924
|
+
let ke = [], Ae = [...e.discovered.outboxHandlers ?? [], ...wn((x?.outgoing.length ?? 0) + (x?.incoming.length ?? 0) + (x?.providers.length ?? 0), []) ? [{
|
|
926
925
|
file: "<framework>/webhooks",
|
|
927
926
|
id: "voltro-webhook-emit",
|
|
928
|
-
definition:
|
|
929
|
-
}] : []],
|
|
930
|
-
handlers:
|
|
927
|
+
definition: Hi(() => Te)
|
|
928
|
+
}] : []], je = Ae.length > 0 ? l({
|
|
929
|
+
handlers: Ae,
|
|
931
930
|
store: e.store,
|
|
932
931
|
log: (e.log ?? L({ scope: "voltro:serve" })).child("outbox"),
|
|
933
932
|
onChange: (t) => e.store.onChange((e) => t({
|
|
@@ -935,15 +934,15 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
935
934
|
op: e.op
|
|
936
935
|
})),
|
|
937
936
|
onShutdown: (e) => {
|
|
938
|
-
|
|
937
|
+
ke.push(e);
|
|
939
938
|
}
|
|
940
|
-
}) : void 0,
|
|
939
|
+
}) : void 0, S = Fe({
|
|
941
940
|
definitions: (e.discovered.connections ?? []).map((e) => e.definition),
|
|
942
941
|
store: e.store,
|
|
943
|
-
publicUrl:
|
|
942
|
+
publicUrl: w(e.port ?? 4e3),
|
|
944
943
|
log: (e.log ?? L({ scope: "voltro:serve" })).child("connections")
|
|
945
944
|
});
|
|
946
|
-
|
|
945
|
+
me({
|
|
947
946
|
events: e.discovered.events ?? [],
|
|
948
947
|
rpcTags: [
|
|
949
948
|
...e.discovered.queries.map((e) => e.descriptor.name),
|
|
@@ -952,236 +951,293 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
952
951
|
...(e.discovered.streams ?? []).map((e) => e.descriptor.name)
|
|
953
952
|
]
|
|
954
953
|
});
|
|
955
|
-
let
|
|
956
|
-
instanceId:
|
|
957
|
-
namespace:
|
|
954
|
+
let Pe = (e.log ?? L({ scope: "voltro:serve" })).child("events"), Le = e.broadcastNamespace ?? ze(e.plugins, void 0), Re = Lt(e.plugins, Le, Pe), Be = e.membership?.instanceId ?? process.env.POD_NAME ?? process.env.HOSTNAME ?? `serve-${process.pid}`, He = e.membership ?? Wt(e.plugins, {
|
|
955
|
+
instanceId: Be,
|
|
956
|
+
namespace: Le,
|
|
958
957
|
meta: { mode: "serve" },
|
|
959
|
-
logger:
|
|
960
|
-
}),
|
|
958
|
+
logger: Pe
|
|
959
|
+
}), T = ge({
|
|
961
960
|
events: e.discovered.events ?? [],
|
|
962
|
-
origin:
|
|
963
|
-
...
|
|
964
|
-
}),
|
|
961
|
+
origin: Be,
|
|
962
|
+
...Re.publishRemote === void 0 ? {} : { publishRemote: Re.publishRemote }
|
|
963
|
+
}), Ue = (e.discovered.events ?? []).length > 0 ? await Re.attach(T.bus) : null, Ge = Ft({
|
|
965
964
|
store: e.store,
|
|
966
965
|
schemaRegistry: e.schemaRegistry,
|
|
967
966
|
cache: i,
|
|
968
967
|
kv: a,
|
|
969
|
-
...
|
|
970
|
-
...
|
|
968
|
+
...Te === void 0 ? {} : { webhooksService: Te },
|
|
969
|
+
...v === void 0 ? {} : { workflowsProxy: v },
|
|
971
970
|
eventTriggers: e.discovered.eventTriggers ?? [],
|
|
972
|
-
namespaceIsolationOn:
|
|
971
|
+
namespaceIsolationOn: Se,
|
|
973
972
|
...e.ensureTenantProvisioned === void 0 ? {} : { ensureTenantProvisioned: e.ensureTenantProvisioned },
|
|
974
973
|
...e.resolveResidentStore === void 0 ? {} : { resolveResidentStore: e.resolveResidentStore },
|
|
975
|
-
...
|
|
976
|
-
...
|
|
977
|
-
eventBus:
|
|
978
|
-
}),
|
|
979
|
-
let r = t.pipe(W.provide(
|
|
980
|
-
return (e.baseLayer ? r.pipe(W.provide(e.baseLayer)) : r).pipe(W.provide(
|
|
981
|
-
},
|
|
974
|
+
...je === void 0 ? {} : { outbox: { nudge: je.nudge } },
|
|
975
|
+
...S.active ? { connections: { registry: S.registry } } : {},
|
|
976
|
+
eventBus: T.bus
|
|
977
|
+
}), Ke = G.succeed(hr, be), qe = G.succeed(yr, Oe), Je = G.succeed(gr, Ut), Ye = G.succeed(br, m), et = (t, n) => {
|
|
978
|
+
let r = t.pipe(W.provide(qr(n)));
|
|
979
|
+
return (e.baseLayer ? r.pipe(W.provide(e.baseLayer)) : r).pipe(W.provide(Ke)).pipe(W.provide(qe)).pipe(W.provide(Je)).pipe(W.provide(Ye));
|
|
980
|
+
}, nt = (e, t) => {
|
|
982
981
|
let n = et(e, t);
|
|
983
|
-
return
|
|
984
|
-
},
|
|
982
|
+
return ui(n);
|
|
983
|
+
}, rt = xn(), it = Ie(e.plugins ?? [], rt), at = _({
|
|
985
984
|
plugins: e.plugins ?? [],
|
|
986
|
-
metrics:
|
|
985
|
+
metrics: rt,
|
|
987
986
|
log: e.log ?? L({ scope: "voltro:serve" })
|
|
988
|
-
}),
|
|
987
|
+
}), ot = Tt(e.plugins ?? [], rt), st = e.security?.defaultDeny ?? !0, ct = Xr({
|
|
989
988
|
store: e.store,
|
|
990
|
-
defaultDeny:
|
|
989
|
+
defaultDeny: st,
|
|
991
990
|
recordMetric: (e) => {
|
|
992
|
-
|
|
991
|
+
rt.record(e);
|
|
993
992
|
},
|
|
994
|
-
...
|
|
995
|
-
buildContext: (e, t, n) =>
|
|
996
|
-
runEffect:
|
|
997
|
-
undoCapture:
|
|
998
|
-
}),
|
|
993
|
+
...it.mutation === void 0 ? {} : { interceptor: it.mutation },
|
|
994
|
+
buildContext: (e, t, n) => Ge(e, t, n),
|
|
995
|
+
runEffect: nt,
|
|
996
|
+
undoCapture: $e((t) => e.schemaRegistry.crdtColumns(t))
|
|
997
|
+
}), ut = c();
|
|
999
998
|
{
|
|
1000
|
-
let t =
|
|
999
|
+
let t = A();
|
|
1001
1000
|
t !== void 0 && (e.log ?? L({ scope: "voltro:serve" })).info(t);
|
|
1002
1001
|
}
|
|
1003
|
-
let
|
|
1002
|
+
let dt = Ce({
|
|
1004
1003
|
store: e.store,
|
|
1005
1004
|
...e.approvals === void 0 ? {} : { defaultExpiryMs: e.approvals.defaultExpiryMs }
|
|
1006
|
-
}),
|
|
1007
|
-
defaultDeny:
|
|
1008
|
-
buildContext: (e) =>
|
|
1009
|
-
runEffect:
|
|
1005
|
+
}), ft = zr({
|
|
1006
|
+
defaultDeny: st,
|
|
1007
|
+
buildContext: (e) => Ge(e),
|
|
1008
|
+
runEffect: nt,
|
|
1010
1009
|
recordMetric: (e) => {
|
|
1011
|
-
|
|
1010
|
+
rt.record(e);
|
|
1012
1011
|
},
|
|
1013
|
-
...
|
|
1014
|
-
}),
|
|
1012
|
+
...it.action === void 0 ? {} : { interceptor: it.action }
|
|
1013
|
+
}), pt = Qr({
|
|
1015
1014
|
tenantScopedTables: e.tenantScopedTables,
|
|
1016
1015
|
softDeleteScopedTables: e.softDeleteScopedTables
|
|
1017
|
-
}),
|
|
1018
|
-
defaultDeny:
|
|
1019
|
-
buildContext: (e) =>
|
|
1020
|
-
finalize: (e, t) =>
|
|
1016
|
+
}), mt = {
|
|
1017
|
+
defaultDeny: st,
|
|
1018
|
+
buildContext: (e) => Ge(e),
|
|
1019
|
+
finalize: (e, t) => pt(e, t.subject),
|
|
1021
1020
|
provideEffect: et,
|
|
1022
|
-
...
|
|
1023
|
-
},
|
|
1024
|
-
...
|
|
1025
|
-
queryRows: (t, n) => e.store.query(t).then((e) =>
|
|
1026
|
-
}),
|
|
1027
|
-
...
|
|
1021
|
+
...it.query === void 0 ? {} : { interceptor: it.query }
|
|
1022
|
+
}, ht = q(mt), vt = Zr({
|
|
1023
|
+
...mt,
|
|
1024
|
+
queryRows: (t, n) => e.store.query(t).then((e) => _i(t.table, e, n.subject))
|
|
1025
|
+
}), yt = ei({
|
|
1026
|
+
...mt,
|
|
1028
1027
|
subscribeDescriptor: (e, t, n) => r.subscribe(e, t, n),
|
|
1029
1028
|
subscribeComputed: (e, t, n) => r.subscribeComputed(e, t, n)
|
|
1030
|
-
}), E = (e) => e.filter((e) =>
|
|
1029
|
+
}), E = (e) => e.filter((e) => Hn(e.descriptor)), D = {};
|
|
1031
1030
|
for (let t of [
|
|
1032
1031
|
...E(e.discovered.queries),
|
|
1033
|
-
...
|
|
1034
|
-
...
|
|
1035
|
-
...
|
|
1036
|
-
]) D[t.descriptor.name] = (e) =>
|
|
1032
|
+
...ut.queries,
|
|
1033
|
+
...dt.queries,
|
|
1034
|
+
...S.queries
|
|
1035
|
+
]) D[t.descriptor.name] = (e) => K(ht(t, e), r, `subscription.${t.descriptor.name}`, void 0, void 0, $r(t, e));
|
|
1037
1036
|
for (let t of [
|
|
1038
1037
|
...E(e.discovered.mutations),
|
|
1039
|
-
...
|
|
1040
|
-
...
|
|
1041
|
-
...
|
|
1038
|
+
...ut.mutations,
|
|
1039
|
+
...dt.mutations,
|
|
1040
|
+
...S.mutations
|
|
1042
1041
|
]) {
|
|
1043
|
-
let n =
|
|
1044
|
-
D[t.descriptor.name] = (r) =>
|
|
1042
|
+
let n = Yr(t.descriptor.output);
|
|
1043
|
+
D[t.descriptor.name] = (r) => Dr(async (e, n) => ct(t, e, n), r, `mutation.${t.descriptor.name}`, n, e.idempotency, Gn(t.descriptor, "mutation"));
|
|
1045
1044
|
}
|
|
1046
|
-
for (let t of [...E(e.discovered.actions), ...
|
|
1047
|
-
let n =
|
|
1048
|
-
D[t.descriptor.name] = (r) =>
|
|
1045
|
+
for (let t of [...E(e.discovered.actions), ...S.actions]) {
|
|
1046
|
+
let n = Yr(t.descriptor.output);
|
|
1047
|
+
D[t.descriptor.name] = (r) => Dr(async (e, n) => ft(t, e, n), r, `action.${t.descriptor.name}`, n, e.idempotency, Gn(t.descriptor, "action"));
|
|
1049
1048
|
}
|
|
1050
|
-
let
|
|
1049
|
+
let bt = () => `public-${Math.random().toString(36).slice(2, 10)}`, O = [
|
|
1051
1050
|
...e.discovered.queries.filter((e) => e.descriptor.publicApi !== void 0).map((e) => ({
|
|
1052
1051
|
descriptor: e.descriptor,
|
|
1053
|
-
invoke: (t, n) =>
|
|
1052
|
+
invoke: (t, n) => vt(e, t, {
|
|
1054
1053
|
subject: n.subject,
|
|
1055
|
-
traceId:
|
|
1054
|
+
traceId: bt()
|
|
1056
1055
|
}),
|
|
1057
|
-
subscribe: (t, n, r) =>
|
|
1056
|
+
subscribe: (t, n, r) => yt(e, t, {
|
|
1058
1057
|
subject: n.subject,
|
|
1059
|
-
traceId:
|
|
1058
|
+
traceId: bt()
|
|
1060
1059
|
}, r)
|
|
1061
1060
|
})),
|
|
1062
1061
|
...e.discovered.mutations.filter((e) => e.descriptor.publicApi !== void 0).map((e) => ({
|
|
1063
1062
|
descriptor: e.descriptor,
|
|
1064
|
-
invoke: (t, n) =>
|
|
1063
|
+
invoke: (t, n) => ct(e, t, {
|
|
1065
1064
|
subject: n.subject,
|
|
1066
|
-
traceId:
|
|
1065
|
+
traceId: bt()
|
|
1067
1066
|
})
|
|
1068
1067
|
})),
|
|
1069
1068
|
...e.discovered.actions.filter((e) => e.descriptor.publicApi !== void 0).map((e) => ({
|
|
1070
1069
|
descriptor: e.descriptor,
|
|
1071
|
-
invoke: (t, n) =>
|
|
1070
|
+
invoke: (t, n) => ft(e, t, {
|
|
1072
1071
|
subject: n.subject,
|
|
1073
|
-
traceId:
|
|
1072
|
+
traceId: bt()
|
|
1074
1073
|
})
|
|
1075
1074
|
}))
|
|
1076
|
-
],
|
|
1077
|
-
candidates:
|
|
1075
|
+
], St = {
|
|
1076
|
+
candidates: b({
|
|
1078
1077
|
queries: e.discovered.queries,
|
|
1079
1078
|
mutations: e.discovered.mutations,
|
|
1080
1079
|
actions: e.discovered.actions,
|
|
1081
1080
|
descriptorOf: (e) => e.descriptor,
|
|
1082
|
-
runQuery: (e, t, n) => Promise.resolve(
|
|
1083
|
-
runMutation: (e, t, n) => Promise.resolve(
|
|
1084
|
-
runAction: (e, t, n) => Promise.resolve(
|
|
1081
|
+
runQuery: (e, t, n) => Promise.resolve(vt(e, t, n)),
|
|
1082
|
+
runMutation: (e, t, n) => Promise.resolve(ct(e, t, n)),
|
|
1083
|
+
runAction: (e, t, n) => Promise.resolve(ft(e, t, n))
|
|
1085
1084
|
}),
|
|
1086
1085
|
policy: e.agents?.tools ?? {},
|
|
1087
1086
|
mcpEnabled: e.agents?.mcp === !0,
|
|
1088
1087
|
resolveSubject: (t) => e.resolveSubject(t, -1).then((e) => e.subject)
|
|
1089
|
-
}
|
|
1088
|
+
};
|
|
1089
|
+
if (e.grpc !== void 0) {
|
|
1090
|
+
let t = () => `grpc-${Math.random().toString(36).slice(2, 10)}`, n = [
|
|
1091
|
+
...e.discovered.queries.map((e) => ({
|
|
1092
|
+
tag: e.descriptor.name,
|
|
1093
|
+
kind: "query",
|
|
1094
|
+
input: e.descriptor.input,
|
|
1095
|
+
output: e.descriptor.output,
|
|
1096
|
+
invoke: (n, r, i) => vt(e, n, {
|
|
1097
|
+
subject: r.subject,
|
|
1098
|
+
traceId: t(),
|
|
1099
|
+
signal: i
|
|
1100
|
+
}),
|
|
1101
|
+
subscribe: (n, r, i) => yt(e, n, {
|
|
1102
|
+
subject: r.subject,
|
|
1103
|
+
traceId: t()
|
|
1104
|
+
}, i)
|
|
1105
|
+
})),
|
|
1106
|
+
...e.discovered.mutations.map((e) => ({
|
|
1107
|
+
tag: e.descriptor.name,
|
|
1108
|
+
kind: "mutation",
|
|
1109
|
+
input: e.descriptor.input,
|
|
1110
|
+
output: e.descriptor.output,
|
|
1111
|
+
invoke: (n, r, i) => ct(e, n, {
|
|
1112
|
+
subject: r.subject,
|
|
1113
|
+
traceId: t(),
|
|
1114
|
+
signal: i
|
|
1115
|
+
})
|
|
1116
|
+
})),
|
|
1117
|
+
...e.discovered.actions.map((e) => ({
|
|
1118
|
+
tag: e.descriptor.name,
|
|
1119
|
+
kind: "action",
|
|
1120
|
+
input: e.descriptor.input,
|
|
1121
|
+
output: e.descriptor.output,
|
|
1122
|
+
invoke: async (n, r, i) => ft(e, n, {
|
|
1123
|
+
subject: r.subject,
|
|
1124
|
+
traceId: t(),
|
|
1125
|
+
signal: i
|
|
1126
|
+
})
|
|
1127
|
+
}))
|
|
1128
|
+
];
|
|
1129
|
+
await We({
|
|
1130
|
+
config: e.grpc.config,
|
|
1131
|
+
candidates: n,
|
|
1132
|
+
resolveSubject: async (t) => {
|
|
1133
|
+
let { subject: n } = await e.resolveSubject(t, -1), r = n;
|
|
1134
|
+
return r.type === "anonymous" && r.credentialRejected !== void 0 ? null : {
|
|
1135
|
+
subject: n,
|
|
1136
|
+
anonymous: r.type === "anonymous"
|
|
1137
|
+
};
|
|
1138
|
+
},
|
|
1139
|
+
store: e.store,
|
|
1140
|
+
root: e.grpc.root,
|
|
1141
|
+
log: e.log ?? L({ scope: "voltro:serve" }),
|
|
1142
|
+
onShutdown: (e) => J(e)
|
|
1143
|
+
});
|
|
1144
|
+
}
|
|
1145
|
+
let Ct = lt({
|
|
1090
1146
|
...e.restRoutes === void 0 ? {} : { restRoutes: e.restRoutes },
|
|
1091
|
-
publicApiEntries:
|
|
1147
|
+
publicApiEntries: O,
|
|
1092
1148
|
store: e.store,
|
|
1093
1149
|
resolveSubject: (t) => e.resolveSubject(t, -1).then((e) => e.subject),
|
|
1094
1150
|
...e.idempotency === void 0 ? {} : { idempotency: e.idempotency },
|
|
1095
1151
|
log: e.log ?? L({ scope: "voltro:serve" })
|
|
1096
|
-
}), k = e.dataTransferSecret ?? process.env.VOLTRO_DATA_TRANSFER_SECRET,
|
|
1097
|
-
let { Readable: n } = await import("node:stream"), r =
|
|
1098
|
-
await W.runPromise(
|
|
1099
|
-
},
|
|
1152
|
+
}), k = e.dataTransferSecret ?? process.env.VOLTRO_DATA_TRANSFER_SECRET, Dt = async (e, t) => {
|
|
1153
|
+
let { Readable: n } = await import("node:stream"), r = Ei(), i = Oi("storage", () => n.from(t()));
|
|
1154
|
+
await W.runPromise(Ai(r, e, i, { contentType: "application/octet-stream" }));
|
|
1155
|
+
}, Ot = k && k.length >= 16 ? [
|
|
1100
1156
|
{
|
|
1101
1157
|
method: "POST",
|
|
1102
|
-
path:
|
|
1103
|
-
handle:
|
|
1158
|
+
path: sa,
|
|
1159
|
+
handle: Ba({
|
|
1104
1160
|
secret: k,
|
|
1105
1161
|
store: e.store,
|
|
1106
1162
|
...e.dataTransferSnapshot ? { snapshot: e.dataTransferSnapshot } : {},
|
|
1107
1163
|
...e.dataTransferDialect ? { dialect: e.dataTransferDialect } : {},
|
|
1108
|
-
assetSink:
|
|
1109
|
-
openArchive: (e) =>
|
|
1164
|
+
assetSink: $i(Ei()),
|
|
1165
|
+
openArchive: (e) => _o(Ei(), e),
|
|
1110
1166
|
refreshSubscriptions: (e) => {
|
|
1111
1167
|
r.refreshAll(e);
|
|
1112
1168
|
},
|
|
1113
|
-
putArchive:
|
|
1169
|
+
putArchive: Dt,
|
|
1114
1170
|
...e.dataTransferDialect ? { dialect: e.dataTransferDialect } : {}
|
|
1115
1171
|
})
|
|
1116
1172
|
},
|
|
1117
1173
|
{
|
|
1118
1174
|
method: "POST",
|
|
1119
|
-
path:
|
|
1120
|
-
handle:
|
|
1175
|
+
path: ca,
|
|
1176
|
+
handle: Ha({
|
|
1121
1177
|
secret: k,
|
|
1122
1178
|
store: e.store,
|
|
1123
1179
|
...e.dataTransferSnapshot ? { snapshot: e.dataTransferSnapshot } : {},
|
|
1124
1180
|
...e.dataTransferDialect ? { dialect: e.dataTransferDialect } : {},
|
|
1125
|
-
assetSink:
|
|
1126
|
-
openArchive: (e) =>
|
|
1181
|
+
assetSink: $i(Ei()),
|
|
1182
|
+
openArchive: (e) => _o(Ei(), e),
|
|
1127
1183
|
refreshSubscriptions: (e) => {
|
|
1128
1184
|
r.refreshAll(e);
|
|
1129
1185
|
},
|
|
1130
|
-
putArchive:
|
|
1186
|
+
putArchive: Dt
|
|
1131
1187
|
})
|
|
1132
1188
|
},
|
|
1133
1189
|
{
|
|
1134
1190
|
method: "GET",
|
|
1135
|
-
path:
|
|
1136
|
-
handle:
|
|
1191
|
+
path: da,
|
|
1192
|
+
handle: go({
|
|
1137
1193
|
secret: k,
|
|
1138
1194
|
store: e.store
|
|
1139
1195
|
})
|
|
1140
1196
|
},
|
|
1141
1197
|
{
|
|
1142
1198
|
method: "GET",
|
|
1143
|
-
path:
|
|
1144
|
-
handle:
|
|
1199
|
+
path: ua,
|
|
1200
|
+
handle: lo({ secret: k })
|
|
1145
1201
|
},
|
|
1146
1202
|
{
|
|
1147
1203
|
method: "POST",
|
|
1148
|
-
path:
|
|
1149
|
-
handle:
|
|
1204
|
+
path: la,
|
|
1205
|
+
handle: oo({
|
|
1150
1206
|
secret: k,
|
|
1151
1207
|
store: e.store,
|
|
1152
1208
|
snapshot: e.dataTransferSnapshot ?? { tables: [] },
|
|
1153
1209
|
dialect: e.dataTransferDialect ?? "memory",
|
|
1154
1210
|
tenantTables: [...e.tenantScopedTables],
|
|
1155
|
-
loadProfile:
|
|
1156
|
-
assetSource:
|
|
1157
|
-
putArchive:
|
|
1211
|
+
loadProfile: Mn,
|
|
1212
|
+
assetSource: ea(Ei(), e.store),
|
|
1213
|
+
putArchive: Dt
|
|
1158
1214
|
})
|
|
1159
1215
|
}
|
|
1160
|
-
] : [],
|
|
1216
|
+
] : [], kt = [
|
|
1161
1217
|
...e.httpRoutes ?? [],
|
|
1162
|
-
...
|
|
1163
|
-
...
|
|
1164
|
-
...
|
|
1218
|
+
...Ct.httpRoutes,
|
|
1219
|
+
...Ot,
|
|
1220
|
+
...S.httpRoutes
|
|
1165
1221
|
];
|
|
1166
|
-
Object.assign(D,
|
|
1167
|
-
for (let t of E(e.discovered.streams ?? [])) D[t.descriptor.name] = (n) =>
|
|
1168
|
-
let i =
|
|
1222
|
+
Object.assign(D, T.handlers);
|
|
1223
|
+
for (let t of E(e.discovered.streams ?? [])) D[t.descriptor.name] = (n) => Or((r) => bi(r, (r) => {
|
|
1224
|
+
let i = Ge(r), a = t.executor(n, i);
|
|
1169
1225
|
if (W.isEffect(a)) {
|
|
1170
|
-
let t = a.pipe(W.provide(
|
|
1171
|
-
return (e.baseLayer ? t.pipe(W.provide(e.baseLayer)) : t).pipe(W.provide(
|
|
1226
|
+
let t = a.pipe(W.provide(qr(i.store)));
|
|
1227
|
+
return (e.baseLayer ? t.pipe(W.provide(e.baseLayer)) : t).pipe(W.provide(Ke)).pipe(W.provide(qe)).pipe(W.provide(Je)).pipe(W.provide(Ye));
|
|
1172
1228
|
}
|
|
1173
1229
|
return typeof a == "object" && a && typeof a.then == "function" ? W.promise(() => a) : a;
|
|
1174
1230
|
}), `stream.${t.descriptor.name}`);
|
|
1175
|
-
for (let t of e.discovered.workflows ?? []) D[t.definition.name] = (e) =>
|
|
1231
|
+
for (let t of e.discovered.workflows ?? []) D[t.definition.name] = (e) => Dr(async (e, n) => {
|
|
1176
1232
|
let r = n;
|
|
1177
|
-
return
|
|
1233
|
+
return ri(v, {
|
|
1178
1234
|
subject: r.subject,
|
|
1179
1235
|
traceId: r.traceId,
|
|
1180
1236
|
source: "workflow-rpc"
|
|
1181
1237
|
}).start(t.definition.name, e);
|
|
1182
1238
|
}, e, `workflow.${t.definition.name}`);
|
|
1183
|
-
|
|
1184
|
-
descriptor:
|
|
1239
|
+
ve && (D[Yn.name] = (e) => K(ht({
|
|
1240
|
+
descriptor: Yn,
|
|
1185
1241
|
executor: (e) => {
|
|
1186
1242
|
let t = e.id;
|
|
1187
1243
|
return {
|
|
@@ -1190,14 +1246,14 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
1190
1246
|
column: "startedAt",
|
|
1191
1247
|
direction: "desc"
|
|
1192
1248
|
}],
|
|
1193
|
-
predicate:
|
|
1249
|
+
predicate: sr(U("id", t), U("executionId", t)),
|
|
1194
1250
|
take: 1,
|
|
1195
1251
|
skip: void 0,
|
|
1196
1252
|
projection: void 0
|
|
1197
1253
|
};
|
|
1198
1254
|
}
|
|
1199
|
-
}, e), r, `subscription.${
|
|
1200
|
-
descriptor:
|
|
1255
|
+
}, e), r, `subscription.${Yn.name}`), D[Zn.name] = (e) => K(ht({
|
|
1256
|
+
descriptor: Zn,
|
|
1201
1257
|
executor: (e) => {
|
|
1202
1258
|
let t = e, n = [...t.tag === void 0 ? [] : [U("tag", t.tag)], ...t.status === void 0 ? [] : [U("status", t.status)]], r = Number.isFinite(t.limit) && t.limit !== void 0 ? Math.min(Math.max(Math.floor(t.limit), 1), 500) : 100;
|
|
1203
1259
|
return {
|
|
@@ -1206,14 +1262,14 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
1206
1262
|
column: "startedAt",
|
|
1207
1263
|
direction: "desc"
|
|
1208
1264
|
}],
|
|
1209
|
-
predicate: n.length === 0 ? void 0 : n.length === 1 ? n[0] :
|
|
1265
|
+
predicate: n.length === 0 ? void 0 : n.length === 1 ? n[0] : nr(...n),
|
|
1210
1266
|
take: r,
|
|
1211
1267
|
skip: void 0,
|
|
1212
1268
|
projection: void 0
|
|
1213
1269
|
};
|
|
1214
1270
|
}
|
|
1215
|
-
}, e), r, `subscription.${
|
|
1216
|
-
descriptor:
|
|
1271
|
+
}, e), r, `subscription.${Zn.name}`), D[Xn.name] = (e) => K(ht({
|
|
1272
|
+
descriptor: Xn,
|
|
1217
1273
|
executor: (e) => {
|
|
1218
1274
|
let t = e.runId;
|
|
1219
1275
|
return {
|
|
@@ -1228,8 +1284,8 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
1228
1284
|
projection: void 0
|
|
1229
1285
|
};
|
|
1230
1286
|
}
|
|
1231
|
-
}, e), r, `subscription.${
|
|
1232
|
-
descriptor:
|
|
1287
|
+
}, e), r, `subscription.${Xn.name}`), D[Jn.name] = (e) => K(ht({
|
|
1288
|
+
descriptor: Jn,
|
|
1233
1289
|
executor: (e) => {
|
|
1234
1290
|
let t = e.runId;
|
|
1235
1291
|
return {
|
|
@@ -1244,8 +1300,8 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
1244
1300
|
projection: void 0
|
|
1245
1301
|
};
|
|
1246
1302
|
}
|
|
1247
|
-
}, e), r, `subscription.${
|
|
1248
|
-
descriptor:
|
|
1303
|
+
}, e), r, `subscription.${Jn.name}`), D[B.name] = (e) => K(ht({
|
|
1304
|
+
descriptor: B,
|
|
1249
1305
|
executor: (e) => {
|
|
1250
1306
|
let t = e;
|
|
1251
1307
|
return {
|
|
@@ -1260,8 +1316,8 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
1260
1316
|
projection: void 0
|
|
1261
1317
|
};
|
|
1262
1318
|
}
|
|
1263
|
-
}, e), r, `subscription.${
|
|
1264
|
-
descriptor:
|
|
1319
|
+
}, e), r, `subscription.${B.name}`), D[V.name] = (e) => K(ht({
|
|
1320
|
+
descriptor: V,
|
|
1265
1321
|
executor: (e) => {
|
|
1266
1322
|
let t = e.eventId;
|
|
1267
1323
|
return {
|
|
@@ -1276,70 +1332,68 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
1276
1332
|
projection: void 0
|
|
1277
1333
|
};
|
|
1278
1334
|
}
|
|
1279
|
-
}, e), r, `subscription.${
|
|
1335
|
+
}, e), r, `subscription.${V.name}`), D[Kn.name] = (t) => Dr(async (t, n) => {
|
|
1280
1336
|
let r = t;
|
|
1281
|
-
return await
|
|
1282
|
-
}, t, `action.${
|
|
1337
|
+
return await gt(e.store, n.subject, { executionId: r.executionId }), await v.cancel(r.workflowName, r.executionId), await zt(r.workflowName, r.executionId, "workflow.cancel"), { ok: !0 };
|
|
1338
|
+
}, t, `action.${Kn.name}`), D[qn.name] = (t) => Dr(async (t, n) => {
|
|
1283
1339
|
let r = t;
|
|
1284
|
-
return await
|
|
1285
|
-
}, t, `action.${
|
|
1340
|
+
return await gt(e.store, n.subject, { executionId: r.executionId }), await v.resume(r.workflowName, r.executionId), { ok: !0 };
|
|
1341
|
+
}, t, `action.${qn.name}`), D[Qn.name] = (t) => Dr(async (t, n) => {
|
|
1286
1342
|
let r = t;
|
|
1287
|
-
return await
|
|
1288
|
-
}, t, `action.${
|
|
1343
|
+
return await gt(e.store, n.subject, { id: r.id }), v.signal({ id: r.id }, r.signalName, r.payload);
|
|
1344
|
+
}, t, `action.${Qn.name}`), D[$n.name] = (t) => Dr(async (t, n) => {
|
|
1289
1345
|
let r = t;
|
|
1290
|
-
return await
|
|
1291
|
-
}, t, `action.${
|
|
1292
|
-
let
|
|
1293
|
-
...E(e.discovered.queries).map((e) =>
|
|
1294
|
-
...E(e.discovered.mutations).map((e) =>
|
|
1295
|
-
...E(e.discovered.actions).map((e) =>
|
|
1296
|
-
...
|
|
1297
|
-
...
|
|
1298
|
-
...
|
|
1299
|
-
...
|
|
1300
|
-
...
|
|
1301
|
-
...
|
|
1302
|
-
...
|
|
1303
|
-
...E(e.discovered.streams ?? []).map((e) =>
|
|
1304
|
-
...
|
|
1305
|
-
...(e.discovered.workflows ?? []).map((e) =>
|
|
1306
|
-
...
|
|
1346
|
+
return await gt(e.store, n.subject, { id: r.id }), v.update({ id: r.id }, r.updateName, r.payload, r.timeoutMs === void 0 ? void 0 : { timeoutMs: r.timeoutMs });
|
|
1347
|
+
}, t, `action.${$n.name}`));
|
|
1348
|
+
let At = [
|
|
1349
|
+
...E(e.discovered.queries).map((e) => z(e.descriptor)),
|
|
1350
|
+
...E(e.discovered.mutations).map((e) => Un(e.descriptor)),
|
|
1351
|
+
...E(e.discovered.actions).map((e) => R(e.descriptor)),
|
|
1352
|
+
...ut.queries.map((e) => z(e.descriptor)),
|
|
1353
|
+
...ut.mutations.map((e) => Un(e.descriptor)),
|
|
1354
|
+
...dt.queries.map((e) => z(e.descriptor)),
|
|
1355
|
+
...dt.mutations.map((e) => Un(e.descriptor)),
|
|
1356
|
+
...S.queries.map((e) => z(e.descriptor)),
|
|
1357
|
+
...S.mutations.map((e) => Un(e.descriptor)),
|
|
1358
|
+
...S.actions.map((e) => R(e.descriptor)),
|
|
1359
|
+
...E(e.discovered.streams ?? []).map((e) => Wn(e.descriptor)),
|
|
1360
|
+
...T.rpcs,
|
|
1361
|
+
...(e.discovered.workflows ?? []).map((e) => xi(e.definition)),
|
|
1362
|
+
...ve ? [
|
|
1363
|
+
z(Yn),
|
|
1364
|
+
z(Zn),
|
|
1365
|
+
z(Xn),
|
|
1366
|
+
z(Jn),
|
|
1367
|
+
z(B),
|
|
1368
|
+
z(V),
|
|
1307
1369
|
R(Kn),
|
|
1308
|
-
R(Jn),
|
|
1309
1370
|
R(qn),
|
|
1310
|
-
R(
|
|
1311
|
-
R(
|
|
1312
|
-
R(Un),
|
|
1313
|
-
In(Hn),
|
|
1314
|
-
In(Wn),
|
|
1315
|
-
In(B),
|
|
1316
|
-
In(V)
|
|
1371
|
+
R(Qn),
|
|
1372
|
+
R($n)
|
|
1317
1373
|
] : []
|
|
1318
|
-
],
|
|
1319
|
-
register: (t, n, r) =>
|
|
1320
|
-
tenantId: r ??
|
|
1374
|
+
], jt = Ti.make(...At).middleware(zn).middleware(Bn), Mt = Gr({ resolveSubject: ({ headers: t, clientId: n }) => e.resolveSubject(t, n) }), Nt = e.dormancyTenantId ?? _r, Pt = e.dormancy === "sleep" ? {
|
|
1375
|
+
register: (t, n, r) => ci(e.store, {
|
|
1376
|
+
tenantId: r ?? Nt,
|
|
1321
1377
|
kind: "workflow",
|
|
1322
1378
|
refId: t,
|
|
1323
1379
|
wakeAt: n
|
|
1324
1380
|
}),
|
|
1325
|
-
cancel: (t, n) =>
|
|
1326
|
-
tenantId: n ??
|
|
1381
|
+
cancel: (t, n) => Ar(e.store, {
|
|
1382
|
+
tenantId: n ?? Nt,
|
|
1327
1383
|
kind: "workflow",
|
|
1328
1384
|
refId: t
|
|
1329
1385
|
}).then(() => {})
|
|
1330
|
-
} : void 0, j =
|
|
1386
|
+
} : void 0, j = ye ? await import("@voltro/workflow") : void 0, M = j?.makeWorkflowRunRecorder({
|
|
1331
1387
|
store: e.store,
|
|
1332
1388
|
...e.workflowRecording === void 0 ? {} : { recording: e.workflowRecording },
|
|
1333
1389
|
...Pt === void 0 ? {} : { wakeups: Pt }
|
|
1334
|
-
}),
|
|
1390
|
+
}), Rt = async (t, n) => {
|
|
1335
1391
|
await j.closeWorkflowChildrenForParent({
|
|
1336
1392
|
store: e.store,
|
|
1337
1393
|
parentExecutionId: t,
|
|
1338
1394
|
parentStatus: n,
|
|
1339
1395
|
recorder: M,
|
|
1340
|
-
log: { warn: (e, t) => {
|
|
1341
|
-
process.stderr.write(`[workflow] ${e} ${t ? JSON.stringify(t) : ""}\n`);
|
|
1342
|
-
} },
|
|
1396
|
+
log: { warn: (e, t) => g.warn(e, t ?? {}) },
|
|
1343
1397
|
interruptChild: async (t, n) => {
|
|
1344
1398
|
let r = (e.discovered.workflows ?? []).find((e) => e.definition.name === t);
|
|
1345
1399
|
if (!r) throw Error(`Unknown child workflow: ${t}`);
|
|
@@ -1347,7 +1401,7 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
1347
1401
|
await f.runPromise(r.definition.interrupt(n));
|
|
1348
1402
|
}
|
|
1349
1403
|
});
|
|
1350
|
-
},
|
|
1404
|
+
}, zt = async (t, n, r) => {
|
|
1351
1405
|
let i = (await e.store.query({
|
|
1352
1406
|
table: "_voltro_workflow_runs",
|
|
1353
1407
|
order: [],
|
|
@@ -1371,15 +1425,15 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
1371
1425
|
executionId: n,
|
|
1372
1426
|
...o == null ? {} : { tenantId: o }
|
|
1373
1427
|
}
|
|
1374
|
-
}), a && await
|
|
1375
|
-
},
|
|
1376
|
-
...
|
|
1377
|
-
buildContext: (t, n) => e.buildContextForWorkflow?.(t, n) ??
|
|
1428
|
+
}), a && await Rt(n, "cancelled");
|
|
1429
|
+
}, Bt = [
|
|
1430
|
+
...ii(e.discovered.workflows ?? [], {
|
|
1431
|
+
buildContext: (t, n) => e.buildContextForWorkflow?.(t, n) ?? Ge({
|
|
1378
1432
|
subject: t.subject,
|
|
1379
1433
|
traceId: t.traceId
|
|
1380
1434
|
}, e.store, void 0, `workflow:${n.workflowName}`, { parentExecutionId: n.executionId }),
|
|
1381
|
-
resolveStartContext:
|
|
1382
|
-
...
|
|
1435
|
+
resolveStartContext: ce,
|
|
1436
|
+
...de === void 0 ? {} : { resolveAuthority: de }
|
|
1383
1437
|
}, (t, n, r) => {
|
|
1384
1438
|
let i = j.getWorkflowVersionMetadata(t.definition);
|
|
1385
1439
|
return j.wrapWorkflowExecuteWithRunRecording({
|
|
@@ -1393,27 +1447,27 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
1393
1447
|
workflowPatches: i.patches,
|
|
1394
1448
|
parentExecutionId: r?.parentExecutionId ?? null,
|
|
1395
1449
|
parentClosePolicy: r?.parentClosePolicy ?? null,
|
|
1396
|
-
onParentClose: ({ executionId: e, status: t }) =>
|
|
1397
|
-
...
|
|
1450
|
+
onParentClose: ({ executionId: e, status: t }) => Rt(e, t),
|
|
1451
|
+
...It(t.definition),
|
|
1398
1452
|
onTerminal: async ({ executionId: e }) => {
|
|
1399
1453
|
await d?.gate.release(e);
|
|
1400
1454
|
},
|
|
1401
1455
|
recorder: M,
|
|
1402
|
-
pluginWorkflowStepLayer:
|
|
1403
|
-
recordRun:
|
|
1456
|
+
pluginWorkflowStepLayer: ot,
|
|
1457
|
+
recordRun: oi
|
|
1404
1458
|
}, n);
|
|
1405
1459
|
}),
|
|
1406
1460
|
...e.discovered.workflowWorkers ?? [],
|
|
1407
|
-
...
|
|
1408
|
-
],
|
|
1409
|
-
if (((e.discovered.workflows?.length ?? 0) > 0 || (e.discovered.workflowWorkers?.length ?? 0) > 0 || e.scheduleCoordination === "cluster" ||
|
|
1410
|
-
let t =
|
|
1411
|
-
f =
|
|
1461
|
+
...Ee === void 0 ? [] : [Ee]
|
|
1462
|
+
], Vt = [...(e.discovered.workflows ?? []).map((e) => e.definition.name).filter(Boolean), ...Ee === void 0 ? [] : ["voltro.deliverWebhook"]], Ht = Bt.length > 0 ? G.mergeAll(...Bt) : G.empty;
|
|
1463
|
+
if (((e.discovered.workflows?.length ?? 0) > 0 || (e.discovered.workflowWorkers?.length ?? 0) > 0 || e.scheduleCoordination === "cluster" || Ee !== void 0) && e.workflowEngineLayer !== void 0) {
|
|
1464
|
+
let t = Ht.pipe(G.provideMerge(e.workflowEngineLayer));
|
|
1465
|
+
f = lr.make((e.baseLayer === void 0 ? t : t.pipe(G.provideMerge(e.baseLayer))).pipe(G.provideMerge(Rn({})))), await f.runPromise(W.void), (e.log ?? L({ scope: "voltro:serve" })).child("workflow").info(`workflow runtime ready — ${Vt.length} entity type(s) registered`, { entities: Vt });
|
|
1412
1466
|
let n = await import("@voltro/workflow/cluster"), r = (e) => f.runPromise(n.redriveFailedRun(e)), i = (e) => f.runPromise(n.resumeRunFromStep(e));
|
|
1413
|
-
ne = await
|
|
1414
|
-
provider:
|
|
1415
|
-
crossReplica:
|
|
1416
|
-
namespace:
|
|
1467
|
+
ne = await p({
|
|
1468
|
+
provider: Li(e.plugins ?? [])?.broadcast?.provider,
|
|
1469
|
+
crossReplica: Li(e.plugins ?? [])?.broadcast?.crossReplica ?? !1,
|
|
1470
|
+
namespace: Le,
|
|
1417
1471
|
replicaId: crypto.randomUUID(),
|
|
1418
1472
|
pollStorage: () => f.runPromise(n.pollWorkflowStorage),
|
|
1419
1473
|
onChange: (t) => e.store.onChange((e) => t({
|
|
@@ -1423,7 +1477,7 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
1423
1477
|
})),
|
|
1424
1478
|
log: (e.log ?? L({ scope: "voltro:serve" })).child("workflow")
|
|
1425
1479
|
}), ee = async (t) => {
|
|
1426
|
-
let n = await
|
|
1480
|
+
let n = await C({
|
|
1427
1481
|
store: e.store,
|
|
1428
1482
|
workflows: e.discovered.workflows ?? [],
|
|
1429
1483
|
runRedrive: r
|
|
@@ -1461,32 +1515,32 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
1461
1515
|
reason: n.outcome.reason
|
|
1462
1516
|
};
|
|
1463
1517
|
};
|
|
1464
|
-
let a = (e.scheduleCoordination ?? "single") === "advisoryLock" ?
|
|
1518
|
+
let a = (e.scheduleCoordination ?? "single") === "advisoryLock" ? Br(e.store, e.scheduleReplicaId ?? `pid-${process.pid}`) : mi, c = Kr({
|
|
1465
1519
|
coordinator: a,
|
|
1466
1520
|
replicaId: e.scheduleReplicaId ?? `pid-${process.pid}`
|
|
1467
|
-
}), l = {
|
|
1521
|
+
}), l = L({ scope: "voltro:flow-control" }), m = {
|
|
1468
1522
|
info: (e, t) => {
|
|
1469
|
-
|
|
1523
|
+
l.info(e, t);
|
|
1470
1524
|
},
|
|
1471
1525
|
warn: (e, t) => {
|
|
1472
|
-
|
|
1526
|
+
l.warn(e, t);
|
|
1473
1527
|
},
|
|
1474
1528
|
error: (e, t) => {
|
|
1475
|
-
|
|
1529
|
+
l.error(e, t ?? {});
|
|
1476
1530
|
}
|
|
1477
|
-
},
|
|
1478
|
-
if (
|
|
1479
|
-
if (o !== void 0 && M !== void 0) return
|
|
1531
|
+
}, h, re = () => {
|
|
1532
|
+
if (h !== void 0) return h;
|
|
1533
|
+
if (o !== void 0 && M !== void 0) return h = le({
|
|
1480
1534
|
store: e.store,
|
|
1481
1535
|
log: F,
|
|
1482
1536
|
workflows: e.discovered.workflows ?? [],
|
|
1483
1537
|
workflowsProxy: o,
|
|
1484
1538
|
workflowRuntime: f,
|
|
1485
1539
|
workflowRunRecorder: M,
|
|
1486
|
-
closeChildrenForParent:
|
|
1487
|
-
}),
|
|
1540
|
+
closeChildrenForParent: Rt
|
|
1541
|
+
}), h;
|
|
1488
1542
|
};
|
|
1489
|
-
s =
|
|
1543
|
+
s = re, d = Ve({
|
|
1490
1544
|
store: e.store,
|
|
1491
1545
|
onChange: (t) => e.store.onChange((e) => t({
|
|
1492
1546
|
table: e.table,
|
|
@@ -1500,23 +1554,23 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
1500
1554
|
},
|
|
1501
1555
|
workflows: e.discovered.workflows ?? [],
|
|
1502
1556
|
facade: () => o,
|
|
1503
|
-
cancelRunWithReason:
|
|
1557
|
+
cancelRunWithReason: re,
|
|
1504
1558
|
recordRunEvent: () => M?.recordEvent,
|
|
1505
1559
|
...e.workflowStaleness === void 0 ? {} : { staleness: e.workflowStaleness },
|
|
1506
1560
|
...e.workflowSuspendSignalHintMs === void 0 ? {} : { suspendSignalHintMs: e.workflowSuspendSignalHintMs },
|
|
1507
1561
|
scheduleCoordinated: c,
|
|
1508
1562
|
onAbandoned: async (t) => {
|
|
1509
|
-
await
|
|
1563
|
+
await _t({
|
|
1510
1564
|
workflows: e.discovered.workflows ?? [],
|
|
1511
1565
|
facade: () => o,
|
|
1512
|
-
log:
|
|
1566
|
+
log: m,
|
|
1513
1567
|
...t
|
|
1514
1568
|
});
|
|
1515
1569
|
},
|
|
1516
|
-
log:
|
|
1570
|
+
log: m
|
|
1517
1571
|
});
|
|
1518
|
-
let
|
|
1519
|
-
|
|
1572
|
+
let g = d;
|
|
1573
|
+
g !== void 0 && J(() => g.stop()), u = wt({
|
|
1520
1574
|
store: e.store,
|
|
1521
1575
|
onChange: (t) => e.store.onChange((e) => t({
|
|
1522
1576
|
table: e.table,
|
|
@@ -1530,26 +1584,26 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
1530
1584
|
resumeSignal: () => f === void 0 || j === void 0 ? void 0 : async ({ executionId: t, workflowName: n, signalName: r, payload: i }) => {
|
|
1531
1585
|
await f.runPromise(j.completeSuspendingSignal({
|
|
1532
1586
|
store: e.store,
|
|
1533
|
-
target:
|
|
1587
|
+
target: tt(t, n),
|
|
1534
1588
|
signalName: r,
|
|
1535
1589
|
payload: i
|
|
1536
1590
|
}));
|
|
1537
1591
|
},
|
|
1538
1592
|
runEffect: (e) => f.runPromise(e),
|
|
1539
1593
|
scheduleCoordinated: c,
|
|
1540
|
-
log:
|
|
1594
|
+
log: m
|
|
1541
1595
|
});
|
|
1542
|
-
let
|
|
1543
|
-
|
|
1596
|
+
let ie = u;
|
|
1597
|
+
ie !== void 0 && J(() => ie.stop()), o = (e.discovered.workflows?.length ?? 0) > 0 ? ni({
|
|
1544
1598
|
workflows: e.discovered.workflows ?? [],
|
|
1545
1599
|
runEffect: (e) => f.runPromise(e),
|
|
1546
1600
|
onEnqueue: () => ne?.publishWake(),
|
|
1547
|
-
...
|
|
1548
|
-
admitStart:
|
|
1549
|
-
startPayloadSchema:
|
|
1550
|
-
parkDelayedStart:
|
|
1601
|
+
...g === void 0 ? {} : {
|
|
1602
|
+
admitStart: g.gate.admitStart,
|
|
1603
|
+
startPayloadSchema: g.gate.startPayloadSchema,
|
|
1604
|
+
parkDelayedStart: g.gate.parkDelayed
|
|
1551
1605
|
},
|
|
1552
|
-
rememberStartContext:
|
|
1606
|
+
rememberStartContext: oe,
|
|
1553
1607
|
signal: async (t, n, r) => {
|
|
1554
1608
|
let i = await j.sendWorkflowSignal({
|
|
1555
1609
|
store: e.store,
|
|
@@ -1573,35 +1627,35 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
1573
1627
|
payload: r,
|
|
1574
1628
|
...i === void 0 ? {} : { options: i }
|
|
1575
1629
|
}),
|
|
1576
|
-
listRuns: (t) =>
|
|
1577
|
-
retry: (t, n) =>
|
|
1630
|
+
listRuns: (t) => Me(e.store, t),
|
|
1631
|
+
retry: (t, n) => pe({
|
|
1578
1632
|
store: e.store,
|
|
1579
1633
|
workflows: e.discovered.workflows ?? [],
|
|
1580
1634
|
runPromise: (e) => f.runPromise(e)
|
|
1581
1635
|
}, t, n),
|
|
1582
|
-
redrive: (t) =>
|
|
1636
|
+
redrive: (t) => C({
|
|
1583
1637
|
store: e.store,
|
|
1584
1638
|
workflows: e.discovered.workflows ?? [],
|
|
1585
1639
|
runRedrive: r
|
|
1586
1640
|
}, t).then((e) => e.outcome)
|
|
1587
1641
|
}) : void 0;
|
|
1588
1642
|
}
|
|
1589
|
-
let
|
|
1643
|
+
let Gt = G.mergeAll(jt.toLayer(D), Mt), Kt = xt(D, e.discovered.queries.map((e) => e.descriptor.name), ve), qt = G.mergeAll(jt.toLayer(Kt), Mt), N = e.observability, Jt = await kr({
|
|
1590
1644
|
...e.appName === void 0 ? {} : { serviceName: e.appName },
|
|
1591
1645
|
...N && N.spanProcessors.length > 0 ? { extraSpanProcessors: N.spanProcessors } : {},
|
|
1592
1646
|
...N && N.metricReaders.length > 0 ? { extraMetricReaders: N.metricReaders } : {},
|
|
1593
1647
|
...N && Object.keys(N.resourceAttributes).length > 0 ? { resourceAttributes: N.resourceAttributes } : {},
|
|
1594
1648
|
...N && N.sampler !== void 0 ? { sampler: N.sampler } : {}
|
|
1595
|
-
}),
|
|
1596
|
-
group:
|
|
1597
|
-
handlersLayer:
|
|
1598
|
-
httpHandlersLayer:
|
|
1649
|
+
}), Yt = !1, Xt = e.store.ping ? () => e.store.ping().then(() => !0).catch(() => !1) : void 0, { server: P, shutdown: Zt } = hi({
|
|
1650
|
+
group: jt,
|
|
1651
|
+
handlersLayer: Gt,
|
|
1652
|
+
httpHandlersLayer: qt,
|
|
1599
1653
|
port: e.port ?? 4e3,
|
|
1600
1654
|
...e.host === void 0 ? {} : { host: e.host },
|
|
1601
1655
|
path: e.path ?? "/ws",
|
|
1602
|
-
tracerLayer:
|
|
1603
|
-
security:
|
|
1604
|
-
...
|
|
1656
|
+
tracerLayer: Jt.layer,
|
|
1657
|
+
security: ue(e),
|
|
1658
|
+
...bn(e),
|
|
1605
1659
|
...e.discovered.wsGateways !== void 0 && e.discovered.wsGateways.length > 0 ? { webSocketGateways: e.discovered.wsGateways } : {},
|
|
1606
1660
|
resolveGatewaySubject: async (t) => {
|
|
1607
1661
|
let n = await e.resolveSubject(t, -1);
|
|
@@ -1610,19 +1664,19 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
1610
1664
|
...n.credentialExpiresAt === void 0 ? {} : { credentialExpiresAt: n.credentialExpiresAt * 1e3 }
|
|
1611
1665
|
};
|
|
1612
1666
|
},
|
|
1613
|
-
...
|
|
1667
|
+
...at,
|
|
1614
1668
|
healthCheck: {
|
|
1615
|
-
isReady: () =>
|
|
1616
|
-
...
|
|
1669
|
+
isReady: () => Yt,
|
|
1670
|
+
...Xt ? { ping: Xt } : {}
|
|
1617
1671
|
},
|
|
1618
|
-
...
|
|
1672
|
+
...kt.length > 0 ? { httpRoutes: kt } : {},
|
|
1619
1673
|
...e.getStore === void 0 ? {} : { getStore: e.getStore },
|
|
1620
|
-
...
|
|
1674
|
+
...De.size > 0 ? { webhookRoutes: De } : {},
|
|
1621
1675
|
...e.inspectRoute === void 0 ? {} : { inspectRoute: e.inspectRoute }
|
|
1622
|
-
}),
|
|
1623
|
-
if (await
|
|
1624
|
-
let t = (e.scheduleCoordination ?? "single") === "advisoryLock" ?
|
|
1625
|
-
h = await
|
|
1676
|
+
}), Qt = oa(P);
|
|
1677
|
+
if (await Er(P), (e.discovered.schedules?.length ?? 0) > 0) {
|
|
1678
|
+
let t = (e.scheduleCoordination ?? "single") === "advisoryLock" ? Br(e.store, e.scheduleReplicaId ?? `pid-${process.pid}`) : mi;
|
|
1679
|
+
h = await gi(e.discovered.schedules ?? [], {
|
|
1626
1680
|
store: e.store,
|
|
1627
1681
|
coordinator: t,
|
|
1628
1682
|
defaultTrigger: e.scheduleDefaultTrigger ?? "self",
|
|
@@ -1630,19 +1684,19 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
1630
1684
|
armSelf: e.scheduleArmSelf ?? !0,
|
|
1631
1685
|
dormancy: e.dormancy ?? "always-on",
|
|
1632
1686
|
...e.dormancyTenantId === void 0 ? {} : { dormancyTenantId: e.dormancyTenantId },
|
|
1633
|
-
buildContext: ({ traceId: t, scheduleName: n, subject: r }) =>
|
|
1687
|
+
buildContext: ({ traceId: t, scheduleName: n, subject: r }) => Ge({
|
|
1634
1688
|
subject: r,
|
|
1635
1689
|
traceId: t
|
|
1636
1690
|
}, e.store, void 0, `schedule:${n}`),
|
|
1637
1691
|
log: {
|
|
1638
1692
|
info: (e, t) => {
|
|
1639
|
-
|
|
1693
|
+
ie.info(e, t);
|
|
1640
1694
|
},
|
|
1641
1695
|
warn: (e, t) => {
|
|
1642
|
-
|
|
1696
|
+
ie.warn(e, t);
|
|
1643
1697
|
},
|
|
1644
1698
|
error: (e, t) => {
|
|
1645
|
-
|
|
1699
|
+
ie.error(e, t ?? {});
|
|
1646
1700
|
},
|
|
1647
1701
|
debug: () => {}
|
|
1648
1702
|
},
|
|
@@ -1650,16 +1704,16 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
1650
1704
|
...e.onScheduleRunEvent === void 0 ? {} : { onRunEvent: e.onScheduleRunEvent }
|
|
1651
1705
|
}), e.onSchedulerReady?.(h);
|
|
1652
1706
|
}
|
|
1653
|
-
let F = e.log ?? L({ scope: "voltro:serve" }),
|
|
1654
|
-
if ((e.discovered.subscribers?.length ?? 0) > 0 && (
|
|
1707
|
+
let F = e.log ?? L({ scope: "voltro:serve" }), $t, en;
|
|
1708
|
+
if ((e.discovered.subscribers?.length ?? 0) > 0 && ($t = Qe(e.discovered.subscribers ?? [], e.store, F.child("subscribe"), e.schemaRegistry, T.bus)), (e.discovered.reactions?.length ?? 0) > 0) {
|
|
1655
1709
|
let t = F.child("reaction"), n = async (n, r) => {
|
|
1656
1710
|
if (n.kind === "workflow") {
|
|
1657
|
-
if (
|
|
1711
|
+
if (v === void 0) {
|
|
1658
1712
|
t.warn("reaction workflow act skipped — no workflow engine in this app", { workflow: n.workflow });
|
|
1659
1713
|
return;
|
|
1660
1714
|
}
|
|
1661
1715
|
let e = n.payload === void 0 ? r.new ?? r.old ?? {} : n.payload(r);
|
|
1662
|
-
await
|
|
1716
|
+
await ri(v, {
|
|
1663
1717
|
traceId: `reaction:${n.workflow}`,
|
|
1664
1718
|
source: `reaction:${n.workflow}`
|
|
1665
1719
|
}).start(n.workflow, e);
|
|
@@ -1667,8 +1721,8 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
1667
1721
|
}
|
|
1668
1722
|
await _e(n.agent, r, {
|
|
1669
1723
|
findAgentSend: (t) => e.discovered.actions.find((e) => e.descriptor.name === `${t}.send`),
|
|
1670
|
-
runAction: (e, t, n) => Promise.resolve(
|
|
1671
|
-
makeSubject: (e) =>
|
|
1724
|
+
runAction: (e, t, n) => Promise.resolve(ft(e, t, n)),
|
|
1725
|
+
makeSubject: (e) => Vn(e),
|
|
1672
1726
|
now: () => Date.now(),
|
|
1673
1727
|
log: t
|
|
1674
1728
|
});
|
|
@@ -1682,190 +1736,190 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
1682
1736
|
} catch (e) {
|
|
1683
1737
|
return t.warn("reaction budget check failed — refusing the act", { tenantId: n }, e), !1;
|
|
1684
1738
|
}
|
|
1685
|
-
}, i =
|
|
1686
|
-
|
|
1739
|
+
}, i = Ze(e.store, { onError: (e) => t.warn("reaction: rate-slot claim failed; refusing the act", { cause: String(e) }) });
|
|
1740
|
+
en = he(e.discovered.reactions ?? [], e.store, {
|
|
1687
1741
|
runAct: n,
|
|
1688
1742
|
checkBudget: r,
|
|
1689
1743
|
claimRateSlot: (e) => i.claim(e)
|
|
1690
1744
|
}, t);
|
|
1691
1745
|
}
|
|
1692
|
-
let
|
|
1693
|
-
(e.discovered.aggregates?.length ?? 0) > 0 && (
|
|
1746
|
+
let tn;
|
|
1747
|
+
(e.discovered.aggregates?.length ?? 0) > 0 && (tn = await re({
|
|
1694
1748
|
discovered: e.discovered.aggregates ?? [],
|
|
1695
1749
|
store: e.store,
|
|
1696
1750
|
log: F.child("aggregate"),
|
|
1697
1751
|
...e.analytics === void 0 ? {} : { analytics: e.analytics },
|
|
1698
1752
|
...e.aggregateStorage === void 0 ? {} : { storage: e.aggregateStorage },
|
|
1699
1753
|
...e.aggregateCoordinator === void 0 ? {} : { coordinator: e.aggregateCoordinator }
|
|
1700
|
-
}),
|
|
1701
|
-
let
|
|
1702
|
-
(e.discovered.expectations?.length ?? 0) > 0 && (
|
|
1754
|
+
}), Ke = G.succeed(hr, tn.registry));
|
|
1755
|
+
let nn;
|
|
1756
|
+
(e.discovered.expectations?.length ?? 0) > 0 && (nn = Cr({
|
|
1703
1757
|
discovered: e.discovered.expectations ?? [],
|
|
1704
1758
|
store: e.store,
|
|
1705
1759
|
log: F.child("expectation")
|
|
1706
|
-
}),
|
|
1760
|
+
}), qe = G.succeed(yr, nn.registry)), (e.discovered.budgets?.length ?? 0) > 0 && (n = Tr({
|
|
1707
1761
|
discovered: e.discovered.budgets ?? [],
|
|
1708
1762
|
log: F.child("finops")
|
|
1709
|
-
}),
|
|
1710
|
-
let
|
|
1711
|
-
return (e.discovered.experiments?.length ?? 0) > 0 && (
|
|
1763
|
+
}), Je = G.succeed(gr, n.registry));
|
|
1764
|
+
let rn;
|
|
1765
|
+
return (e.discovered.experiments?.length ?? 0) > 0 && (rn = wr({
|
|
1712
1766
|
discovered: e.discovered.experiments ?? [],
|
|
1713
1767
|
store: e.store,
|
|
1714
1768
|
log: F.child("experiment")
|
|
1715
|
-
}),
|
|
1769
|
+
}), Ye = G.succeed(br, rn.registry)), Yt = !0, e.bootTiming?.mark("ready"), {
|
|
1716
1770
|
dispatcher: r,
|
|
1717
1771
|
server: P,
|
|
1718
1772
|
scheduler: h,
|
|
1719
|
-
eventsSnapshot:
|
|
1773
|
+
eventsSnapshot: xe(T.bus, T.declared),
|
|
1720
1774
|
membersSnapshot: () => ({
|
|
1721
1775
|
members: He.membership.list(),
|
|
1722
1776
|
capturedAt: Date.now()
|
|
1723
1777
|
}),
|
|
1724
|
-
agentTools: () =>
|
|
1725
|
-
rpcMetrics: () =>
|
|
1726
|
-
webhooksService: () =>
|
|
1778
|
+
agentTools: () => St,
|
|
1779
|
+
rpcMetrics: () => rt,
|
|
1780
|
+
webhooksService: () => Te,
|
|
1727
1781
|
runCanceller: () => s(),
|
|
1728
1782
|
flowControlHealth: () => d?.cancelHealth(),
|
|
1729
1783
|
inferenceHealth: () => u?.health(),
|
|
1730
|
-
workflowWriteActions: () =>
|
|
1784
|
+
workflowWriteActions: () => v === void 0 || M === void 0 ? void 0 : y({
|
|
1731
1785
|
store: e.store,
|
|
1732
1786
|
log: F,
|
|
1733
1787
|
workflows: e.discovered.workflows ?? [],
|
|
1734
1788
|
workflowsProxy: o,
|
|
1735
1789
|
workflowRuntime: f,
|
|
1736
1790
|
workflowRunRecorder: M,
|
|
1737
|
-
closeChildrenForParent:
|
|
1791
|
+
closeChildrenForParent: Rt
|
|
1738
1792
|
}),
|
|
1739
1793
|
redriveWorkflowRun: (e) => ee ? ee(e) : Promise.reject(/* @__PURE__ */ Error("redrive: this app registers no workflows")),
|
|
1740
1794
|
resumeWorkflowRunFromStep: (e) => te ? te(e) : Promise.reject(/* @__PURE__ */ Error("resume-from-step: this app registers no workflows")),
|
|
1741
1795
|
close: async () => {
|
|
1742
|
-
|
|
1743
|
-
for (let e of
|
|
1796
|
+
Yt = !1, await Qt.drainRequests();
|
|
1797
|
+
for (let e of ke) try {
|
|
1744
1798
|
await e();
|
|
1745
1799
|
} catch (e) {
|
|
1746
1800
|
F.warn("serve: teardown step failed", {}, e);
|
|
1747
1801
|
}
|
|
1748
|
-
await
|
|
1802
|
+
await Ue?.detach(), await He.detach(), tn?.detach(), nn?.detach(), n?.detach(), rn?.detach(), en?.(), $t?.(), await h?.shutdown(), r.close(), await ne?.detach(), await f?.dispose(), await Zt(), await Qt.finish();
|
|
1749
1803
|
}
|
|
1750
1804
|
};
|
|
1751
|
-
}, $ = L({ scope: "voltro:serve" }),
|
|
1752
|
-
let t =
|
|
1753
|
-
if (
|
|
1805
|
+
}, $ = L({ scope: "voltro:serve" }), bo = (e, t, n) => (e === "production" || e === "staging") && t !== "memory" && n !== "0", xo = N, So = async (e) => {
|
|
1806
|
+
let t = On(process.cwd());
|
|
1807
|
+
if (In(t)) {
|
|
1754
1808
|
let n;
|
|
1755
1809
|
try {
|
|
1756
|
-
let e = await import(
|
|
1810
|
+
let e = await import(Ln(t).href);
|
|
1757
1811
|
typeof e.runServe == "function" ? n = e.runServe : $.warn("serve bundle has no runServe export — using the standard serve path");
|
|
1758
1812
|
} catch (e) {
|
|
1759
1813
|
$.warn("serve bundle failed to load — using the standard serve path", {}, e);
|
|
1760
1814
|
}
|
|
1761
1815
|
if (n) return $.info("serve: booting from the precompiled serve bundle"), n(e);
|
|
1762
1816
|
}
|
|
1763
|
-
return
|
|
1764
|
-
},
|
|
1765
|
-
let l =
|
|
1817
|
+
return Co(e);
|
|
1818
|
+
}, Co = async (c) => {
|
|
1819
|
+
let l = kn();
|
|
1766
1820
|
e("serve");
|
|
1767
1821
|
try {
|
|
1768
|
-
|
|
1822
|
+
Ni();
|
|
1769
1823
|
} catch (e) {
|
|
1770
1824
|
throw i(e instanceof Error ? e.message : String(e));
|
|
1771
1825
|
}
|
|
1772
|
-
let p = process.cwd(), m = await
|
|
1826
|
+
let p = process.cwd(), m = await Ke(p), re = Jt({
|
|
1773
1827
|
kind: "api",
|
|
1774
1828
|
configPort: m?.port,
|
|
1775
1829
|
env: process.env,
|
|
1776
|
-
flagPort:
|
|
1830
|
+
flagPort: xo(c, "--port")
|
|
1777
1831
|
});
|
|
1778
|
-
for (let e of
|
|
1779
|
-
let
|
|
1780
|
-
|
|
1832
|
+
for (let e of re.warnings) $.warn(e);
|
|
1833
|
+
let se = re.port;
|
|
1834
|
+
di(li(m?.secrets)), await Xt({
|
|
1781
1835
|
rawEnv: m?.env,
|
|
1782
1836
|
appType: "api",
|
|
1783
1837
|
root: p,
|
|
1784
1838
|
log: $,
|
|
1785
1839
|
generateTypes: !1
|
|
1786
1840
|
}), l.mark("config");
|
|
1787
|
-
let _ = (process.env.DB_DIALECT ?? m?.store ?? "memory").toLowerCase(),
|
|
1788
|
-
if (!r() &&
|
|
1789
|
-
let e = await import(
|
|
1841
|
+
let _ = (process.env.DB_DIALECT ?? m?.store ?? "memory").toLowerCase(), le = (_ === "mariadb" || _ === "postgres" || _ === "mssql") && (process.env.CDC ?? "1") !== "0", fe = _ === "mariadb" ? "mariadb" : _ === "mssql" ? "mssql" : void 0, pe = Dn(p);
|
|
1842
|
+
if (!r() && In(pe)) try {
|
|
1843
|
+
let e = await import(Ln(pe).href);
|
|
1790
1844
|
if (e.modules) {
|
|
1791
1845
|
let t = {};
|
|
1792
|
-
for (let [n, r] of Object.entries(e.modules)) t[
|
|
1846
|
+
for (let [n, r] of Object.entries(e.modules)) t[Pn(p, n)] = r;
|
|
1793
1847
|
n(t), $.info("precompiled api bundle loaded", { modules: Object.keys(t).length });
|
|
1794
1848
|
}
|
|
1795
1849
|
} catch (e) {
|
|
1796
1850
|
$.warn("precompiled api bundle failed to load — falling back to source", {}, e);
|
|
1797
1851
|
}
|
|
1798
|
-
let
|
|
1852
|
+
let y = await Ct(p), b = await Pt(y, { cdc: le && fe !== void 0 }), me = ee(b);
|
|
1799
1853
|
{
|
|
1800
|
-
|
|
1854
|
+
Ye({
|
|
1801
1855
|
plugins: m?.plugins ?? [],
|
|
1802
|
-
queries:
|
|
1803
|
-
mutations:
|
|
1804
|
-
actions:
|
|
1805
|
-
streams:
|
|
1856
|
+
queries: b.queries,
|
|
1857
|
+
mutations: b.mutations,
|
|
1858
|
+
actions: b.actions,
|
|
1859
|
+
streams: b.streams,
|
|
1806
1860
|
log: $
|
|
1807
1861
|
});
|
|
1808
|
-
let e =
|
|
1862
|
+
let e = v(b.serverOnlyLeaks, ce(process.env, "strict"), Nr, "`voltro serve`");
|
|
1809
1863
|
if (e.action === "fail") throw i(e.message ?? "");
|
|
1810
1864
|
e.action === "warn" && $.warn(e.message ?? "");
|
|
1811
1865
|
}
|
|
1812
|
-
let
|
|
1866
|
+
let he = y.filter((e) => En.test(e)), ge = he.length > 0 ? await Tn(he, $.child("webhooks")) : {
|
|
1813
1867
|
outgoing: [],
|
|
1814
1868
|
incoming: [],
|
|
1815
1869
|
providers: []
|
|
1816
|
-
},
|
|
1817
|
-
...
|
|
1818
|
-
outgoing: [...
|
|
1819
|
-
},
|
|
1870
|
+
}, _e = Cn(b.events), be = ge.outgoing.length + ge.incoming.length + ge.providers.length + _e.length === 0 ? void 0 : {
|
|
1871
|
+
...ge,
|
|
1872
|
+
outgoing: [...ge.outgoing, ..._e]
|
|
1873
|
+
}, xe = sn({
|
|
1820
1874
|
nodeEnv: process.env.NODE_ENV,
|
|
1821
1875
|
cdcDialect: fe,
|
|
1822
1876
|
declared: m?.schema
|
|
1823
|
-
}), Ce =
|
|
1824
|
-
gates:
|
|
1877
|
+
}), Ce = cn({
|
|
1878
|
+
gates: xe,
|
|
1825
1879
|
runtime: {
|
|
1826
1880
|
traces: ae(),
|
|
1827
|
-
undo:
|
|
1881
|
+
undo: vi()
|
|
1828
1882
|
}
|
|
1829
1883
|
});
|
|
1830
1884
|
if (Ce !== void 0) throw i(`serve: ${Ce}`);
|
|
1831
|
-
let
|
|
1832
|
-
mix:
|
|
1885
|
+
let Oe = on({
|
|
1886
|
+
mix: b.featureMix,
|
|
1833
1887
|
plugins: m?.plugins ?? [],
|
|
1834
|
-
gates:
|
|
1888
|
+
gates: xe,
|
|
1835
1889
|
...fe ? { cdcDialect: fe } : {}
|
|
1836
|
-
}),
|
|
1890
|
+
}), Me = m?.analytics !== void 0 && m.analytics.kind !== "noop" && _ !== "memory" ? (await P(_)).makeSqlLayer(O()) : void 0, Ne = await D({
|
|
1837
1891
|
spec: m?.analytics,
|
|
1838
|
-
sqlLayer:
|
|
1892
|
+
sqlLayer: Me,
|
|
1839
1893
|
log: $
|
|
1840
|
-
}),
|
|
1841
|
-
let e = new Set(
|
|
1842
|
-
for (let n of [...
|
|
1894
|
+
}), C = (() => {
|
|
1895
|
+
let e = new Set(b.tables.map((e) => e.tableName)), t = [...b.tables];
|
|
1896
|
+
for (let n of [...Oe, ...Ne.tables]) e.has(n.tableName) || (e.add(n.tableName), t.push(n));
|
|
1843
1897
|
return t;
|
|
1844
1898
|
})();
|
|
1845
|
-
for (let e of
|
|
1899
|
+
for (let e of C) or(e);
|
|
1846
1900
|
{
|
|
1847
|
-
let e =
|
|
1901
|
+
let e = Pr(yi(zt(b), Ae(C)));
|
|
1848
1902
|
e !== void 0 && $.warn(e);
|
|
1849
1903
|
}
|
|
1850
|
-
let
|
|
1851
|
-
if (
|
|
1852
|
-
let e = (await P(_)).makeSqlLayer(O()), t = await W.runPromise(
|
|
1904
|
+
let Fe = (process.env.NODE_ENV ?? "").toLowerCase();
|
|
1905
|
+
if (bo(Fe, _, process.env.VOLTRO_AUTO_MIGRATE)) {
|
|
1906
|
+
let e = (await P(_)).makeSqlLayer(O()), t = await W.runPromise(ur.SqlClient.pipe(W.flatMap((e) => pr(e, p)), W.provide(e), W.catchAll(() => W.succeed([]))));
|
|
1853
1907
|
t.length > 0 && ($.error(`serve: refusing to boot — ${t.length} pending file-based migration(s) have never run against this database. They perform the changes a schema diff cannot infer (data moves, backfills, table splits), so the declarative fingerprint check below cannot see them and would have let this process serve un-migrated data.`, { pending: t }), $.error("Run them from your pre-deploy job — `voltro db migrate .` (schema + files) or `voltro db files .` (files alone) — or set VOLTRO_AUTO_MIGRATE=0 to bypass every boot schema check. `voltro serve` never applies them itself: a rolling deploy would start N replicas and each would try."), process.exit(1));
|
|
1854
|
-
let n = await W.runPromise(
|
|
1855
|
-
appliedBy: `serve:${
|
|
1908
|
+
let n = await W.runPromise(ur.SqlClient.pipe(W.flatMap((e) => mr(e, C, {
|
|
1909
|
+
appliedBy: `serve:${Fe}`,
|
|
1856
1910
|
environment: "prod",
|
|
1857
1911
|
dialectId: _
|
|
1858
1912
|
})), W.provide(e)));
|
|
1859
|
-
n.kind === "prod-mismatch" && ($.error(
|
|
1860
|
-
gates:
|
|
1913
|
+
n.kind === "prod-mismatch" && ($.error(fr(n, _)), $.error(ln({
|
|
1914
|
+
gates: xe,
|
|
1861
1915
|
nodeEnv: process.env.NODE_ENV,
|
|
1862
1916
|
cdcDialect: fe,
|
|
1863
1917
|
declared: m?.schema
|
|
1864
|
-
})), $.error("serve: refusing to boot — apply the schema first (voltro db apply in a pre-deploy step), or set VOLTRO_AUTO_MIGRATE=0 to bypass this check."), process.exit(1)), $.info(
|
|
1918
|
+
})), $.error("serve: refusing to boot — apply the schema first (voltro db apply in a pre-deploy step), or set VOLTRO_AUTO_MIGRATE=0 to bypass this check."), process.exit(1)), $.info(fr(n, _));
|
|
1865
1919
|
}
|
|
1866
|
-
await
|
|
1920
|
+
await en({
|
|
1867
1921
|
dialectId: _,
|
|
1868
|
-
tables:
|
|
1922
|
+
tables: C,
|
|
1869
1923
|
mode: F(m?.reactiveTriggers),
|
|
1870
1924
|
lockSchema: O().schema,
|
|
1871
1925
|
makeLayer: async () => (await P(_)).makeSqlLayer(O()),
|
|
@@ -1874,204 +1928,210 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
1874
1928
|
warn: (e, t) => $.warn(e, t ?? {})
|
|
1875
1929
|
}
|
|
1876
1930
|
});
|
|
1877
|
-
let
|
|
1931
|
+
let Ie = ti(C);
|
|
1878
1932
|
l.mark("discover");
|
|
1879
|
-
let
|
|
1933
|
+
let w = await ct(m, void 0);
|
|
1880
1934
|
{
|
|
1881
|
-
let e = await s(
|
|
1935
|
+
let e = await s(w);
|
|
1882
1936
|
if (e !== void 0) throw i(`serve: ${e}`);
|
|
1883
1937
|
}
|
|
1884
|
-
let
|
|
1885
|
-
for (let e of
|
|
1938
|
+
let Ve = Si(w, _);
|
|
1939
|
+
for (let e of j({
|
|
1886
1940
|
dialect: String(m?.store ?? process.env.DB_DIALECT ?? "postgres"),
|
|
1887
1941
|
changeStrategy: (process.env.CDC ?? "1") === "0" ? "inline" : "cdc",
|
|
1888
1942
|
dbUrl: process.env.DB_URL,
|
|
1889
|
-
crossReplicaBus:
|
|
1890
|
-
tables:
|
|
1943
|
+
crossReplicaBus: Li(m?.plugins ?? [])?.broadcast.crossReplica === !0,
|
|
1944
|
+
tables: b.tables.map((e) => ({
|
|
1891
1945
|
tableName: e.tableName,
|
|
1892
1946
|
isReactive: e.isReactive === !0
|
|
1893
1947
|
})),
|
|
1894
|
-
querySources:
|
|
1948
|
+
querySources: b.queries.flatMap((e) => {
|
|
1895
1949
|
let t = e.descriptor.source;
|
|
1896
1950
|
return t === void 0 ? [] : typeof t == "string" ? [t] : [...t];
|
|
1897
1951
|
})
|
|
1898
1952
|
})) e.level === "warn" ? $.warn(e.message) : $.info(e.message);
|
|
1899
1953
|
{
|
|
1900
|
-
let e =
|
|
1901
|
-
tables:
|
|
1902
|
-
queries:
|
|
1954
|
+
let e = rt({
|
|
1955
|
+
tables: tr().map((e) => ({ tableName: e.tableName })),
|
|
1956
|
+
queries: b.queries.map((e) => ({
|
|
1903
1957
|
name: e.descriptor.name,
|
|
1904
1958
|
source: e.descriptor.source
|
|
1905
1959
|
}))
|
|
1906
|
-
}), t =
|
|
1960
|
+
}), t = Be(e);
|
|
1907
1961
|
t !== void 0 && $.warn(t);
|
|
1908
1962
|
}
|
|
1909
1963
|
m?.cache && !process.env.CACHE_BACKEND && (process.env.CACHE_BACKEND = m.cache), m?.cacheRedisUrl && !process.env.CACHE_REDIS_URL && (process.env.CACHE_REDIS_URL = m.cacheRedisUrl), m?.cacheRedisDriver && !process.env.CACHE_REDIS_DRIVER && (process.env.CACHE_REDIS_DRIVER = m.cacheRedisDriver), m?.cacheKeyPrefix && !process.env.CACHE_KEY_PREFIX && (process.env.CACHE_KEY_PREFIX = m.cacheKeyPrefix);
|
|
1910
|
-
let { service:
|
|
1964
|
+
let { service: We, invalidationBus: Xe, snapshotCache: Ze, cache: Qe, semantic: $e, evictSource: tt, backend: lt, stats: gt, dispose: _t } = await ot({
|
|
1911
1965
|
env: process.env,
|
|
1912
1966
|
semantic: m?.cacheSemantic ?? !1
|
|
1913
1967
|
});
|
|
1914
|
-
|
|
1915
|
-
if (W.runFork(
|
|
1968
|
+
$e !== void 0 && $.info("semantic cache enabled — reactive eviction on live writes"), $.info(`cache backend resolved: ${lt}` + (lt === "redis" ? ` (driver ${process.env.CACHE_REDIS_DRIVER ?? "resp"})` : " — in-process, not cross-instance")), w.onChange((e) => {
|
|
1969
|
+
if (W.runFork(Xe.publish(e.table)), tt !== void 0) {
|
|
1916
1970
|
let t = (e.new ?? e.old)?.id;
|
|
1917
|
-
|
|
1971
|
+
tt({
|
|
1918
1972
|
table: e.table,
|
|
1919
1973
|
op: e.op,
|
|
1920
1974
|
...t === void 0 ? {} : { id: t }
|
|
1921
1975
|
});
|
|
1922
1976
|
}
|
|
1923
1977
|
}), m?.kv && !process.env.KV_BACKEND && (process.env.KV_BACKEND = m.kv), m?.kvRedisUrl && !process.env.KV_REDIS_URL && (process.env.KV_REDIS_URL = m.kvRedisUrl), m?.kvKeyPrefix && !process.env.KV_KEY_PREFIX && (process.env.KV_KEY_PREFIX = m.kvKeyPrefix);
|
|
1924
|
-
let { kv: xt, service:
|
|
1925
|
-
|
|
1978
|
+
let { kv: xt, service: wt } = await Wr({ store: w });
|
|
1979
|
+
ye({
|
|
1926
1980
|
log: $,
|
|
1927
|
-
max:
|
|
1928
|
-
outOfPool:
|
|
1981
|
+
max: Qt(),
|
|
1982
|
+
outOfPool: h(_, (process.env.CDC ?? "1") !== "0"),
|
|
1929
1983
|
readPools: t.replicationSnapshot()?.replicaCount ?? 0,
|
|
1930
1984
|
always: !0
|
|
1931
1985
|
}), l.mark("store");
|
|
1932
|
-
let
|
|
1933
|
-
store:
|
|
1934
|
-
sink:
|
|
1986
|
+
let Tt = Sr({
|
|
1987
|
+
store: w,
|
|
1988
|
+
sink: Ne.sink,
|
|
1935
1989
|
log: $
|
|
1936
|
-
}),
|
|
1937
|
-
store:
|
|
1990
|
+
}), Et = yt({
|
|
1991
|
+
store: w,
|
|
1938
1992
|
dialect: _,
|
|
1939
1993
|
log: { info: (e) => $.info(e) }
|
|
1940
|
-
}), A = m?.plugins ?? [],
|
|
1941
|
-
_ !== "memory" && (
|
|
1942
|
-
let
|
|
1994
|
+
}), A = m?.plugins ?? [], Ft = process.env.POD_NAME ?? process.env.HOSTNAME ?? `serve-${process.pid}`, It, Lt;
|
|
1995
|
+
_ !== "memory" && (It = lr.make((await P(_)).makeSqlLayer(O()).pipe(G.provideMerge(Rn({})))), Lt = await It.runPromise(ur.SqlClient));
|
|
1996
|
+
let Ut = [
|
|
1943
1997
|
"postgres",
|
|
1944
1998
|
"mariadb",
|
|
1945
1999
|
"mysql",
|
|
1946
2000
|
"mssql"
|
|
1947
|
-
].includes(_) ?
|
|
1948
|
-
maxIdleIntervalMs:
|
|
1949
|
-
coordinator:
|
|
1950
|
-
replicaId:
|
|
2001
|
+
].includes(_) ? Br(w, Ft, $) : mi, N = Gt(m?.scheduling), bn = Kr({
|
|
2002
|
+
maxIdleIntervalMs: N.pollCeilingMs,
|
|
2003
|
+
coordinator: Ut,
|
|
2004
|
+
replicaId: Ft,
|
|
1951
2005
|
log: $
|
|
1952
|
-
}), wn = [],
|
|
2006
|
+
}), wn = [], On = process.env.POD_NAME ?? process.env.HOSTNAME ?? `serve-${process.pid}`, An = Li(m?.plugins ?? [])?.broadcast?.provider, jn = ze(m?.plugins, m?.name ?? Nn(p));
|
|
1953
2007
|
{
|
|
1954
|
-
let e =
|
|
2008
|
+
let e = nt(m?.plugins, m?.name ?? Nn(p));
|
|
1955
2009
|
e !== void 0 && $.warn(e);
|
|
1956
2010
|
}
|
|
1957
|
-
let
|
|
1958
|
-
instanceId:
|
|
1959
|
-
namespace:
|
|
2011
|
+
let Mn = Wt(m?.plugins, {
|
|
2012
|
+
instanceId: On,
|
|
2013
|
+
namespace: jn,
|
|
1960
2014
|
meta: { mode: "serve" },
|
|
1961
2015
|
logger: $
|
|
1962
|
-
}),
|
|
2016
|
+
}), I = yn({
|
|
1963
2017
|
mode: "serve",
|
|
1964
2018
|
dialect: _,
|
|
1965
|
-
...
|
|
2019
|
+
...An === void 0 ? {} : { provider: An },
|
|
1966
2020
|
logger: $
|
|
1967
2021
|
});
|
|
1968
|
-
|
|
1969
|
-
await
|
|
1970
|
-
});
|
|
1971
|
-
let
|
|
1972
|
-
...
|
|
1973
|
-
instanceId:
|
|
1974
|
-
membership:
|
|
1975
|
-
...
|
|
1976
|
-
broadcastChannels: { presence:
|
|
2022
|
+
J(async () => {
|
|
2023
|
+
await I.stop();
|
|
2024
|
+
}), k(m?.reactive);
|
|
2025
|
+
let Fn = {
|
|
2026
|
+
...Lt ? { sql: Lt } : {},
|
|
2027
|
+
instanceId: On,
|
|
2028
|
+
membership: Mn.membership,
|
|
2029
|
+
...An === void 0 ? {} : { broadcast: An },
|
|
2030
|
+
broadcastChannels: { presence: Ii(jn, "presence") },
|
|
1977
2031
|
scheduleCoordinated: (e, t, n) => {
|
|
1978
2032
|
let r = bn(e, t, n);
|
|
1979
2033
|
return wn.push(r), r;
|
|
1980
2034
|
}
|
|
1981
2035
|
};
|
|
1982
|
-
for (let e of A) e.bindDataStore?.(
|
|
1983
|
-
|
|
1984
|
-
store:
|
|
2036
|
+
for (let e of A) e.bindDataStore?.(Ve, Fn);
|
|
2037
|
+
dt({
|
|
2038
|
+
store: w,
|
|
1985
2039
|
...u(),
|
|
1986
2040
|
log: $
|
|
1987
2041
|
});
|
|
1988
|
-
let
|
|
1989
|
-
if (
|
|
1990
|
-
let e =
|
|
1991
|
-
|
|
2042
|
+
let zn = A.filter((e) => typeof e.onChangeEvent == "function");
|
|
2043
|
+
if (zn.length > 0) {
|
|
2044
|
+
let e = w.changeScope ?? "local";
|
|
2045
|
+
w.onChange((t) => {
|
|
1992
2046
|
let n = oe(t, e);
|
|
1993
|
-
for (let e of
|
|
2047
|
+
for (let e of zn) W.runFork(e.onChangeEvent(n).pipe(W.catchAllCause((t) => W.sync(() => $.warn(`plugin ${e.name} onChangeEvent failed`, { error: cr.pretty(t) })))));
|
|
1994
2048
|
});
|
|
1995
2049
|
}
|
|
1996
|
-
let
|
|
2050
|
+
let Bn = y.filter((e) => fn.test(e));
|
|
2051
|
+
Bn.length > 0 && (await Re(Bn, $), $.info(`queue: ${Bn.length} consumer file(s) loaded`));
|
|
2052
|
+
let R = Pe({
|
|
1997
2053
|
plugins: A,
|
|
1998
2054
|
appName: m?.name ?? "voltro-api",
|
|
1999
2055
|
appType: "api",
|
|
2000
2056
|
voltroVersion: process.env.npm_package_version ?? "0.0.0",
|
|
2001
2057
|
log: $
|
|
2002
2058
|
});
|
|
2003
|
-
A.length && await
|
|
2004
|
-
let
|
|
2005
|
-
info: (e, t) =>
|
|
2006
|
-
|
|
2059
|
+
A.length && await R.activate(), l.mark("plugins");
|
|
2060
|
+
let Vn = await R.gatherObservability(), Hn = L({ scope: "voltro:broadcast" }), Un = {
|
|
2061
|
+
info: (e, t) => {
|
|
2062
|
+
Hn.info(e, t);
|
|
2063
|
+
},
|
|
2064
|
+
warn: (e, t) => {
|
|
2065
|
+
Hn.warn(e, t);
|
|
2066
|
+
},
|
|
2007
2067
|
debug: () => {}
|
|
2008
|
-
},
|
|
2009
|
-
|
|
2010
|
-
}),
|
|
2011
|
-
|
|
2012
|
-
let
|
|
2013
|
-
prefix:
|
|
2014
|
-
...
|
|
2015
|
-
}) : void 0,
|
|
2016
|
-
analyticsLayer:
|
|
2017
|
-
cacheService:
|
|
2018
|
-
kvService:
|
|
2019
|
-
|
|
2020
|
-
pluginServices:
|
|
2068
|
+
}, z, Wn = await vt(w, m, _, jn, Un, (e, t) => {
|
|
2069
|
+
z?.refreshAll(`broadcast gap: missed ${t} change(s) from ${e}`);
|
|
2070
|
+
}), Gn = m?.apiKeys, Kn = (typeof Gn == "object" ? Gn.prefix : void 0) ?? "voltro_", B = Gn ? Mr(w) : void 0, V = B ? Hr({ flush: Ur(B) }) : void 0;
|
|
2071
|
+
V && J(() => V.shutdown());
|
|
2072
|
+
let qn = B ? Vr(B, {
|
|
2073
|
+
prefix: Kn,
|
|
2074
|
+
...V ? { usage: V } : {}
|
|
2075
|
+
}) : void 0, Jn = qn ? [Fr(qn, { prefix: Kn })] : [], Yn = Dt([...m?.auth?.strategies ?? [], ...Jn], Wi(m?.plugins ?? []), m?.auth?.anonymousTenantRequired ?? !1, m?.auth, () => Ve), Xn = [...m?.restRoutes ?? [], ...qn ? xr(qn, (typeof Gn == "object" ? Gn.managementPath : void 0) ?? "/v1/api-keys") : []], Zn = He(m?.idempotency, w), Qn = A.map((e) => e.services).filter((e) => e !== void 0), $n = G.mergeAll(qe({
|
|
2076
|
+
analyticsLayer: Ne.layer,
|
|
2077
|
+
cacheService: We,
|
|
2078
|
+
kvService: wt,
|
|
2079
|
+
...$e === void 0 ? {} : { semanticCache: $e },
|
|
2080
|
+
pluginServices: Qn,
|
|
2021
2081
|
userLayers: m?.layers ?? []
|
|
2022
|
-
}),
|
|
2023
|
-
files:
|
|
2024
|
-
store:
|
|
2082
|
+
}), At(m?.http ?? {})), H = await St({
|
|
2083
|
+
files: y,
|
|
2084
|
+
store: w,
|
|
2025
2085
|
log: $,
|
|
2026
2086
|
seedPolicy: "report",
|
|
2027
|
-
seedPattern:
|
|
2028
|
-
loadSeedFiles:
|
|
2029
|
-
startupPattern:
|
|
2087
|
+
seedPattern: dn,
|
|
2088
|
+
loadSeedFiles: $t,
|
|
2089
|
+
startupPattern: un,
|
|
2030
2090
|
loadStartupFiles: a,
|
|
2031
2091
|
runStartups: o,
|
|
2032
|
-
emailPattern:
|
|
2033
|
-
loadEmailFiles:
|
|
2034
|
-
registerEmailTemplates:
|
|
2092
|
+
emailPattern: jt,
|
|
2093
|
+
loadEmailFiles: Je,
|
|
2094
|
+
registerEmailTemplates: Gi
|
|
2035
2095
|
});
|
|
2036
|
-
(
|
|
2037
|
-
startups:
|
|
2038
|
-
emailTemplates:
|
|
2039
|
-
}),
|
|
2040
|
-
await
|
|
2041
|
-
}),
|
|
2042
|
-
demands:
|
|
2043
|
-
isRegistered: (e) =>
|
|
2096
|
+
(H.startupCount > 0 || H.emailCount > 0) && $.info("boot lifecycle", {
|
|
2097
|
+
startups: H.startupCount,
|
|
2098
|
+
emailTemplates: H.emailCount
|
|
2099
|
+
}), H.startups !== void 0 && J(async () => {
|
|
2100
|
+
await H.startups.stop();
|
|
2101
|
+
}), Ee({
|
|
2102
|
+
demands: qt(me),
|
|
2103
|
+
isRegistered: (e) => Ir(e) !== void 0
|
|
2044
2104
|
});
|
|
2045
|
-
let
|
|
2046
|
-
schedules:
|
|
2047
|
-
schedules:
|
|
2048
|
-
seeds:
|
|
2049
|
-
store:
|
|
2105
|
+
let er = ut({
|
|
2106
|
+
schedules: T({
|
|
2107
|
+
schedules: b.schedules,
|
|
2108
|
+
seeds: H.seeds,
|
|
2109
|
+
store: w,
|
|
2050
2110
|
log: $.child("seeds")
|
|
2051
2111
|
}),
|
|
2052
|
-
workflows:
|
|
2112
|
+
workflows: b.workflows ?? [],
|
|
2053
2113
|
log: $.child("workflow-schedules")
|
|
2054
|
-
}),
|
|
2114
|
+
}), nr = m?.scheduling ?? {}, ir = nr.trigger ?? "self", ar = /* @__PURE__ */ new Set([
|
|
2055
2115
|
"postgres",
|
|
2056
2116
|
"mysql",
|
|
2057
2117
|
"mariadb",
|
|
2058
2118
|
"mssql"
|
|
2059
|
-
]),
|
|
2060
|
-
|
|
2061
|
-
let
|
|
2062
|
-
if (
|
|
2119
|
+
]), U = nr.coordination ?? (ar.has(_) ? "advisoryLock" : "single"), sr = U === "cluster" && ar.has(_), hr = sr ? "cluster" : U === "advisoryLock" && ar.has(_) ? "advisoryLock" : "single";
|
|
2120
|
+
U === "cluster" && !sr && $.warn("scheduling.coordination=cluster needs a sql-backed store except sqlite — falling back to single"), U === "advisoryLock" && !ar.has(_) && $.warn("scheduling.coordination=advisoryLock needs a SQL store (the claim-row gate) — falling back to single");
|
|
2121
|
+
let gr, _r = b.workflows.length > 0 || b.workflowWorkers.length > 0 || b.eventTriggers.length > 0 || (be?.outgoing.length ?? 0) > 0 || sr, vr;
|
|
2122
|
+
if (_r) {
|
|
2063
2123
|
if (_ === "mssql") {
|
|
2064
|
-
let e = await
|
|
2124
|
+
let e = await Sn(process.cwd());
|
|
2065
2125
|
e && $.warn(e);
|
|
2066
2126
|
}
|
|
2067
|
-
let [{ WorkflowEngine: e }, { makeClusterCronLayer: t, workflowEngineLayer: n, resolveRunnerStorage: r, resolveFailoverTuning: i }] = await Promise.all([import("@effect/workflow"), import("@voltro/workflow/cluster")]), a =
|
|
2127
|
+
let [{ WorkflowEngine: e }, { makeClusterCronLayer: t, workflowEngineLayer: n, resolveRunnerStorage: r, resolveFailoverTuning: i }] = await Promise.all([import("@effect/workflow"), import("@voltro/workflow/cluster")]), a = sr ? er.filter((e) => (e.trigger ?? ir) === "self").map((e) => t({
|
|
2068
2128
|
name: e.name,
|
|
2069
|
-
cron:
|
|
2129
|
+
cron: jr(e),
|
|
2070
2130
|
execute: async () => {
|
|
2071
|
-
await
|
|
2131
|
+
await gr?.fireFromCluster(e.name);
|
|
2072
2132
|
}
|
|
2073
2133
|
})) : [];
|
|
2074
|
-
|
|
2134
|
+
vr = _ === "memory" ? e.layerMemory : await (async () => {
|
|
2075
2135
|
let e = await P(_), t = r({ sqliteFamily: e.id === "sqlite" || e.id === "turso" });
|
|
2076
2136
|
return $.info(`workflow engine: cluster-${t}, dialect=${e.id}` + (t === "memory" ? " — single-process durable replay, no cross-pod shard handoff" + (e.id !== "sqlite" && e.id !== "turso" ? " (VOLTRO_WORKFLOW_RUNNER_STORAGE=memory: SqlRunnerStorage/cluster_runners + GET_LOCK skipped)" : "") : "")), n({
|
|
2077
2137
|
sqlClientLayer: e.makeSqlLayer(O()),
|
|
@@ -2083,24 +2143,24 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
2083
2143
|
});
|
|
2084
2144
|
})();
|
|
2085
2145
|
}
|
|
2086
|
-
let
|
|
2146
|
+
let yr = de(A, xn()), br = y.filter((e) => /\.subscribe\.tsx?$/.test(e)), Cr = br.length > 0 ? await Nt(br, $) : [], wr = y.filter((e) => /\.reaction\.tsx?$/.test(e)), Tr = wr.length > 0 ? await Se(wr, $) : [], Er = y.filter((e) => hn.test(e)), Dr = Er.length > 0 ? await we(Er, $) : [], Or = y.filter((e) => /\.aggregate\.tsx?$/.test(e)), K = Or.length > 0 ? await ht(Or, $) : [];
|
|
2087
2147
|
{
|
|
2088
|
-
let e =
|
|
2148
|
+
let e = Pr(yi(zt({ aggregates: K.map((e) => e.definition) }), Ae(C)));
|
|
2089
2149
|
e !== void 0 && $.warn(e);
|
|
2090
2150
|
}
|
|
2091
|
-
let
|
|
2151
|
+
let kr = f();
|
|
2092
2152
|
if (K.length > 0 && _ !== "memory") try {
|
|
2093
2153
|
let e = (await P(_)).makeSqlLayer(O());
|
|
2094
|
-
|
|
2154
|
+
kr = ft(e);
|
|
2095
2155
|
} catch (e) {
|
|
2096
2156
|
$.warn("aggregate: SQL storage init failed — falling back to in-process", { err: String(e) });
|
|
2097
2157
|
}
|
|
2098
|
-
let
|
|
2099
|
-
if (
|
|
2100
|
-
let e = $.child("agent"), t =
|
|
2101
|
-
t.length > 0 && await
|
|
2102
|
-
let n = await
|
|
2103
|
-
for (let e of n.agents) for (let t of
|
|
2158
|
+
let Ar = _ === "memory" ? mi : Br(w, `aggregate@${process.pid}`, $), Lr = y.filter((e) => pn.test(e)), Rr = Lr.length > 0 ? await je(Lr, $) : [], zr = y.filter((e) => gn.test(e)), Gr = zr.length > 0 ? await Bt(zr, $) : [], qr = y.filter((e) => mn.test(e)), Jr = qr.length > 0 ? await ie(qr, $) : [], Yr = [], Xr = [], Zr = y.filter((e) => tn.test(e));
|
|
2159
|
+
if (Zr.length > 0) {
|
|
2160
|
+
let e = $.child("agent"), t = y.filter((e) => an.test(e));
|
|
2161
|
+
t.length > 0 && await nn(t, e);
|
|
2162
|
+
let n = await rn(Zr, e);
|
|
2163
|
+
for (let e of n.agents) for (let t of bt(e)) (t.kind === "action" ? Yr : Xr).push({
|
|
2104
2164
|
file: t.file,
|
|
2105
2165
|
descriptor: t.descriptor,
|
|
2106
2166
|
executor: t.executor
|
|
@@ -2108,117 +2168,117 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
2108
2168
|
n.agents.length > 0 && e.info("synthesized agent routes", { agents: n.agents.map((e) => e.descriptor.name) });
|
|
2109
2169
|
}
|
|
2110
2170
|
l.mark("workflow");
|
|
2111
|
-
let
|
|
2171
|
+
let q = () => {
|
|
2112
2172
|
let e = Y.workflowWriteActions();
|
|
2113
2173
|
if (e === void 0) throw Error("workflow actions: this app registers no workflows");
|
|
2114
2174
|
return e;
|
|
2115
|
-
},
|
|
2175
|
+
}, Qr = rr({
|
|
2116
2176
|
dialect: _,
|
|
2117
2177
|
...O()
|
|
2118
|
-
}),
|
|
2119
|
-
sqlLayer:
|
|
2120
|
-
declared:
|
|
2178
|
+
}), $r = _ === "memory" ? void 0 : (await P(_)).makeSqlLayer(O()), ei = async () => kt({
|
|
2179
|
+
sqlLayer: $r,
|
|
2180
|
+
declared: C,
|
|
2121
2181
|
log: $
|
|
2122
|
-
}),
|
|
2182
|
+
}), ni = {
|
|
2123
2183
|
kind: "api",
|
|
2124
2184
|
meta: {
|
|
2125
2185
|
name: m?.name ?? "voltro-api",
|
|
2126
|
-
voltroVersion:
|
|
2127
|
-
port:
|
|
2186
|
+
voltroVersion: Mt,
|
|
2187
|
+
port: se,
|
|
2128
2188
|
mode: "start",
|
|
2129
2189
|
store: _,
|
|
2130
|
-
cdc:
|
|
2131
|
-
...
|
|
2190
|
+
cdc: le ? "on" : "off",
|
|
2191
|
+
...Qr === void 0 ? {} : { databaseId: Qr }
|
|
2132
2192
|
},
|
|
2133
|
-
rpc:
|
|
2134
|
-
workflows:
|
|
2135
|
-
migrations:
|
|
2193
|
+
rpc: Ht(b, p),
|
|
2194
|
+
workflows: De(b, p),
|
|
2195
|
+
migrations: ei,
|
|
2136
2196
|
events: () => Y.eventsSnapshot(),
|
|
2137
2197
|
agentTools: () => Y.agentTools(),
|
|
2138
2198
|
invariantChecks: () => ({
|
|
2139
2199
|
mode: "serve",
|
|
2140
|
-
accessGate:
|
|
2200
|
+
accessGate: me,
|
|
2141
2201
|
config: m,
|
|
2142
|
-
serverOnlyLeaks:
|
|
2143
|
-
migrations:
|
|
2202
|
+
serverOnlyLeaks: b.serverOnlyLeaks,
|
|
2203
|
+
migrations: ei
|
|
2144
2204
|
}),
|
|
2145
2205
|
members: () => Y.membersSnapshot(),
|
|
2146
2206
|
inspectFireSchedule: async ({ name: e, trigger: t }) => {
|
|
2147
|
-
if (!
|
|
2148
|
-
return { runId: await
|
|
2207
|
+
if (!gr) throw Error("scheduler not started — this app registers no self-triggered schedules (all schedules are trigger:'external', or there are none).");
|
|
2208
|
+
return { runId: await gr.fireNow(e, t) ?? null };
|
|
2149
2209
|
},
|
|
2150
|
-
inspectBackfillSchedule:
|
|
2151
|
-
getHandle: () =>
|
|
2152
|
-
getSchedules: () =>
|
|
2210
|
+
inspectBackfillSchedule: ne({
|
|
2211
|
+
getHandle: () => gr,
|
|
2212
|
+
getSchedules: () => er
|
|
2153
2213
|
}),
|
|
2154
|
-
...be === void 0 ? {} : { webhooks: () =>
|
|
2155
|
-
store:
|
|
2214
|
+
...be === void 0 ? {} : { webhooks: () => pt({
|
|
2215
|
+
store: w,
|
|
2156
2216
|
discoveredWebhooks: be
|
|
2157
2217
|
}) },
|
|
2158
2218
|
plugins: () => ({
|
|
2159
|
-
plugins:
|
|
2219
|
+
plugins: R.snapshot(),
|
|
2160
2220
|
capturedAt: Date.now()
|
|
2161
2221
|
}),
|
|
2162
|
-
env: () =>
|
|
2163
|
-
...m?.env !== void 0 &&
|
|
2222
|
+
env: () => Yt(m?.name ?? Nn(p), {
|
|
2223
|
+
...m?.env !== void 0 && Mi(m.env) ? { contract: m.env } : {},
|
|
2164
2224
|
plugins: m?.plugins ?? []
|
|
2165
2225
|
}),
|
|
2166
|
-
dataCache: () =>
|
|
2167
|
-
stats:
|
|
2168
|
-
backendKind:
|
|
2226
|
+
dataCache: () => Vt({
|
|
2227
|
+
stats: gt,
|
|
2228
|
+
backendKind: lt
|
|
2169
2229
|
}),
|
|
2170
|
-
subscriptions: () =>
|
|
2171
|
-
inspectTables: () =>
|
|
2172
|
-
inspectRows:
|
|
2173
|
-
store:
|
|
2174
|
-
tables:
|
|
2230
|
+
subscriptions: () => x(() => z),
|
|
2231
|
+
inspectTables: () => Te(C),
|
|
2232
|
+
inspectRows: Kt({
|
|
2233
|
+
store: w,
|
|
2234
|
+
tables: C,
|
|
2175
2235
|
mask: !0
|
|
2176
2236
|
}),
|
|
2177
2237
|
metrics: (e) => Y.rpcMetrics().snapshot(e),
|
|
2178
|
-
cluster: () =>
|
|
2179
|
-
store:
|
|
2238
|
+
cluster: () => Ue({
|
|
2239
|
+
store: w,
|
|
2180
2240
|
dialect: _,
|
|
2181
|
-
useClusterCron:
|
|
2182
|
-
scheduleCoordChoice:
|
|
2241
|
+
useClusterCron: sr,
|
|
2242
|
+
scheduleCoordChoice: U
|
|
2183
2243
|
}),
|
|
2184
|
-
inspectSchedules: () =>
|
|
2185
|
-
schedules:
|
|
2186
|
-
defaultTrigger:
|
|
2187
|
-
coordination:
|
|
2244
|
+
inspectSchedules: () => g({
|
|
2245
|
+
schedules: er,
|
|
2246
|
+
defaultTrigger: ir,
|
|
2247
|
+
coordination: hr
|
|
2188
2248
|
}),
|
|
2189
|
-
inspectScheduleRuns: (e) =>
|
|
2190
|
-
...
|
|
2191
|
-
controls:
|
|
2192
|
-
active: (
|
|
2249
|
+
inspectScheduleRuns: (e) => ke(w, e),
|
|
2250
|
+
...Rt(w, {
|
|
2251
|
+
controls: it(b.workflows ?? []),
|
|
2252
|
+
active: (b.workflows?.length ?? 0) > 0,
|
|
2193
2253
|
cancellation: () => Y.flowControlHealth()
|
|
2194
2254
|
}),
|
|
2195
|
-
webhookActions:
|
|
2196
|
-
inspectStartWorkflow: (e) =>
|
|
2197
|
-
inspectCancelWorkflowRun: (e) =>
|
|
2198
|
-
inspectSuspendWorkflowRun: (e) =>
|
|
2199
|
-
inspectResumeWorkflowRun: (e) =>
|
|
2200
|
-
inspectDiscardWorkflowRun: (e) =>
|
|
2201
|
-
inspectRetryWorkflowRun: (e) =>
|
|
2202
|
-
inspectSignalWorkflowRun: (e) =>
|
|
2203
|
-
inspectUpdateWorkflowRun: (e) =>
|
|
2204
|
-
inspectInferences: (e) =>
|
|
2205
|
-
store:
|
|
2206
|
-
active: (
|
|
2255
|
+
webhookActions: te(() => Y.webhooksService()),
|
|
2256
|
+
inspectStartWorkflow: (e) => q().inspectStartWorkflow(e),
|
|
2257
|
+
inspectCancelWorkflowRun: (e) => q().inspectCancelWorkflowRun(e),
|
|
2258
|
+
inspectSuspendWorkflowRun: (e) => q().inspectSuspendWorkflowRun(e),
|
|
2259
|
+
inspectResumeWorkflowRun: (e) => q().inspectResumeWorkflowRun(e),
|
|
2260
|
+
inspectDiscardWorkflowRun: (e) => q().inspectDiscardWorkflowRun(e),
|
|
2261
|
+
inspectRetryWorkflowRun: (e) => q().inspectRetryWorkflowRun(e),
|
|
2262
|
+
inspectSignalWorkflowRun: (e) => q().inspectSignalWorkflowRun(e),
|
|
2263
|
+
inspectUpdateWorkflowRun: (e) => q().inspectUpdateWorkflowRun(e),
|
|
2264
|
+
inspectInferences: (e) => E({
|
|
2265
|
+
store: w,
|
|
2266
|
+
active: (b.workflows?.length ?? 0) > 0,
|
|
2207
2267
|
dispatcher: () => Y.inferenceHealth()
|
|
2208
2268
|
}, e.limit === void 0 ? {} : { limit: e.limit }),
|
|
2209
|
-
...
|
|
2210
|
-
store:
|
|
2269
|
+
...st({
|
|
2270
|
+
store: w,
|
|
2211
2271
|
cancelRun: async (e) => await Y.runCanceller()?.(e) ?? !1,
|
|
2212
|
-
retryRun: async (e) =>
|
|
2272
|
+
retryRun: async (e) => q().inspectRetryWorkflowRun({ runId: e }),
|
|
2213
2273
|
redriveRun: async (e) => Y.redriveWorkflowRun({ runId: e }),
|
|
2214
2274
|
log: $
|
|
2215
2275
|
}),
|
|
2216
2276
|
inspectRedriveWorkflowRun: (e) => Y.redriveWorkflowRun(e),
|
|
2217
2277
|
inspectResumeWorkflowRunFromStep: (e) => Y.resumeWorkflowRunFromStep(e)
|
|
2218
|
-
},
|
|
2278
|
+
}, ri = (process.env.VOLTRO_TENANT_ISOLATION ?? m?.tenancy?.isolation) === "namespace", ii = ri && _ !== "memory" ? await (async () => {
|
|
2219
2279
|
let e = await P(_);
|
|
2220
|
-
return
|
|
2221
|
-
tables:
|
|
2280
|
+
return et({
|
|
2281
|
+
tables: C,
|
|
2222
2282
|
sqlLayer: e.makeSqlLayer(O()),
|
|
2223
2283
|
dialect: _,
|
|
2224
2284
|
options: { retryFilter: e.retryFilter },
|
|
@@ -2227,111 +2287,115 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
2227
2287
|
error: (e, t, n) => $.error(e, t ?? {}, n)
|
|
2228
2288
|
}
|
|
2229
2289
|
});
|
|
2230
|
-
})() : void 0,
|
|
2290
|
+
})() : void 0, ai = await at({
|
|
2231
2291
|
input: m?.tenancy?.residency,
|
|
2232
|
-
namespaceIsolationOn:
|
|
2233
|
-
makeStoreForUrl: (e, t) =>
|
|
2292
|
+
namespaceIsolationOn: ri,
|
|
2293
|
+
makeStoreForUrl: (e, t) => ct(m, void 0, Zt(O(), t)),
|
|
2234
2294
|
log: {
|
|
2235
2295
|
info: (e, t) => $.info(e, t),
|
|
2236
2296
|
warn: (e, t) => $.warn(e, t)
|
|
2237
2297
|
}
|
|
2238
2298
|
});
|
|
2239
|
-
|
|
2240
|
-
await
|
|
2299
|
+
ai !== void 0 && J(async () => {
|
|
2300
|
+
await ai.close();
|
|
2241
2301
|
});
|
|
2242
|
-
let Y = await
|
|
2302
|
+
let Y = await yo({
|
|
2243
2303
|
bootTiming: l,
|
|
2244
|
-
broadcastNamespace:
|
|
2304
|
+
broadcastNamespace: jn,
|
|
2245
2305
|
scheduling: (() => {
|
|
2246
|
-
let e =
|
|
2306
|
+
let e = N;
|
|
2247
2307
|
return {
|
|
2248
2308
|
admissionDrainMs: e.admissionDrainMs,
|
|
2249
2309
|
inferenceTickMs: e.inferenceTickMs,
|
|
2250
2310
|
cancelSweepMs: e.cancelSweepMs,
|
|
2251
2311
|
stalenessSweepMs: e.stalenessSweepMs,
|
|
2252
|
-
disarmWhenIdle:
|
|
2253
|
-
changeScope:
|
|
2254
|
-
broadcastAttached:
|
|
2312
|
+
disarmWhenIdle: M({
|
|
2313
|
+
changeScope: w.changeScope,
|
|
2314
|
+
broadcastAttached: Wn !== void 0
|
|
2255
2315
|
})
|
|
2256
2316
|
};
|
|
2257
2317
|
})(),
|
|
2258
2318
|
...m?.workflows?.staleness === void 0 ? {} : { workflowStaleness: m.workflows.staleness },
|
|
2259
2319
|
...m?.workflows?.suspendSignalHintMs === void 0 ? {} : { workflowSuspendSignalHintMs: m.workflows.suspendSignalHintMs },
|
|
2260
|
-
workflowRecording:
|
|
2320
|
+
workflowRecording: Ge(m?.workflows?.recording),
|
|
2261
2321
|
membership: {
|
|
2262
|
-
...
|
|
2263
|
-
instanceId:
|
|
2322
|
+
...Mn,
|
|
2323
|
+
instanceId: On
|
|
2264
2324
|
},
|
|
2265
2325
|
security: {
|
|
2266
|
-
defaultDeny:
|
|
2267
|
-
...
|
|
2326
|
+
defaultDeny: S(m),
|
|
2327
|
+
...ue(m)
|
|
2268
2328
|
},
|
|
2269
|
-
approvals: { defaultExpiryMs:
|
|
2329
|
+
approvals: { defaultExpiryMs: Le(m) },
|
|
2270
2330
|
...m?.plugins === void 0 ? {} : { plugins: m.plugins },
|
|
2271
|
-
...
|
|
2272
|
-
restRoutes:
|
|
2273
|
-
|
|
2331
|
+
...Zn ? { idempotency: Zn } : {},
|
|
2332
|
+
restRoutes: Xn,
|
|
2333
|
+
...m?.grpc === void 0 ? {} : { grpc: {
|
|
2334
|
+
config: m.grpc,
|
|
2335
|
+
root: p
|
|
2336
|
+
} },
|
|
2337
|
+
appProcedures: me,
|
|
2274
2338
|
discovered: {
|
|
2275
|
-
wsGateways:
|
|
2276
|
-
queries: [...
|
|
2277
|
-
mutations:
|
|
2278
|
-
actions: [...
|
|
2279
|
-
streams:
|
|
2280
|
-
events:
|
|
2281
|
-
workflows:
|
|
2282
|
-
workflowWorkers:
|
|
2283
|
-
eventTriggers:
|
|
2284
|
-
schedules:
|
|
2285
|
-
subscribers:
|
|
2286
|
-
outboxHandlers:
|
|
2287
|
-
connections:
|
|
2288
|
-
reactions:
|
|
2339
|
+
wsGateways: b.wsGateways,
|
|
2340
|
+
queries: [...b.queries, ...Xr],
|
|
2341
|
+
mutations: b.mutations,
|
|
2342
|
+
actions: [...b.actions, ...Yr],
|
|
2343
|
+
streams: b.streams,
|
|
2344
|
+
events: b.events,
|
|
2345
|
+
workflows: b.workflows,
|
|
2346
|
+
workflowWorkers: b.workflowWorkers,
|
|
2347
|
+
eventTriggers: b.eventTriggers,
|
|
2348
|
+
schedules: er,
|
|
2349
|
+
subscribers: Cr,
|
|
2350
|
+
outboxHandlers: Dr,
|
|
2351
|
+
connections: b.connections,
|
|
2352
|
+
reactions: Tr,
|
|
2289
2353
|
aggregates: K,
|
|
2290
|
-
expectations:
|
|
2291
|
-
budgets:
|
|
2292
|
-
experiments:
|
|
2354
|
+
expectations: Rr,
|
|
2355
|
+
budgets: Gr,
|
|
2356
|
+
experiments: Jr,
|
|
2293
2357
|
...be === void 0 ? {} : { webhooks: be }
|
|
2294
2358
|
},
|
|
2295
2359
|
log: $,
|
|
2296
|
-
analytics:
|
|
2297
|
-
aggregateStorage:
|
|
2298
|
-
aggregateCoordinator:
|
|
2299
|
-
store:
|
|
2360
|
+
analytics: Ne.sink,
|
|
2361
|
+
aggregateStorage: kr,
|
|
2362
|
+
aggregateCoordinator: Ar,
|
|
2363
|
+
store: w,
|
|
2300
2364
|
kv: xt,
|
|
2301
|
-
cache:
|
|
2302
|
-
snapshotCache:
|
|
2365
|
+
cache: Qe,
|
|
2366
|
+
snapshotCache: Ze,
|
|
2303
2367
|
...m?.reactive === void 0 ? {} : { reactive: m.reactive },
|
|
2304
|
-
schemaRegistry:
|
|
2305
|
-
tenantScopedTables:
|
|
2306
|
-
softDeleteScopedTables:
|
|
2307
|
-
dataTransferSnapshot:
|
|
2368
|
+
schemaRegistry: Ie,
|
|
2369
|
+
tenantScopedTables: b.tenantScopedTables,
|
|
2370
|
+
softDeleteScopedTables: b.softDeleteScopedTables,
|
|
2371
|
+
dataTransferSnapshot: dr(C, _),
|
|
2308
2372
|
dataTransferDialect: _,
|
|
2309
|
-
...
|
|
2310
|
-
...
|
|
2373
|
+
...ii === void 0 ? {} : { ensureTenantProvisioned: ii.ensure },
|
|
2374
|
+
...ai === void 0 ? {} : { resolveResidentStore: ai.resolveStore },
|
|
2311
2375
|
tenantIsolation: (process.env.VOLTRO_TENANT_ISOLATION ?? m?.tenancy?.isolation) === "namespace" ? "namespace" : "shared-schema",
|
|
2312
|
-
resolveSubject: (e, t) =>
|
|
2376
|
+
resolveSubject: (e, t) => Yn({
|
|
2313
2377
|
headers: e,
|
|
2314
2378
|
clientId: t
|
|
2315
2379
|
}),
|
|
2316
2380
|
...m?.auth === void 0 ? {} : { authority: m.auth },
|
|
2317
2381
|
...m?.agents === void 0 ? {} : { agents: m.agents },
|
|
2318
2382
|
httpRoutes: A.flatMap((e) => e.httpRoutes ?? []),
|
|
2319
|
-
getStore: () =>
|
|
2320
|
-
|
|
2321
|
-
...
|
|
2322
|
-
scheduleDefaultTrigger:
|
|
2323
|
-
scheduleCoordination:
|
|
2324
|
-
scheduleArmSelf: !
|
|
2383
|
+
getStore: () => Ve,
|
|
2384
|
+
...$n ? { baseLayer: $n } : {},
|
|
2385
|
+
...vr === void 0 ? {} : { workflowEngineLayer: vr },
|
|
2386
|
+
scheduleDefaultTrigger: ir,
|
|
2387
|
+
scheduleCoordination: hr,
|
|
2388
|
+
scheduleArmSelf: !sr,
|
|
2325
2389
|
dormancy: process.env.VOLTRO_DORMANCY === "sleep" || process.env.VOLTRO_DORMANCY === "always-on" ? process.env.VOLTRO_DORMANCY : m?.dormancy ?? "always-on",
|
|
2326
2390
|
scheduleReplicaId: process.env.HOSTNAME ?? `pid-${process.pid}`,
|
|
2327
|
-
...
|
|
2391
|
+
...yr === void 0 ? {} : { scheduleFireInterceptor: yr },
|
|
2328
2392
|
onSchedulerReady: (e) => {
|
|
2329
|
-
|
|
2393
|
+
gr = e;
|
|
2330
2394
|
},
|
|
2331
|
-
inspectRoute: { handle: async (e, t, n, r) => await ve(e,
|
|
2395
|
+
inspectRoute: { handle: async (e, t, n, r) => await ve(e, ni, t, {
|
|
2332
2396
|
method: n,
|
|
2333
2397
|
...r === void 0 ? {} : { body: r }
|
|
2334
|
-
}) || ((n === "GET" ? await
|
|
2398
|
+
}) || ((n === "GET" ? await vn(e, ni, t, { method: n }) : null) ?? _n(e, ni, t, {
|
|
2335
2399
|
method: n,
|
|
2336
2400
|
...r === void 0 ? {} : { body: r }
|
|
2337
2401
|
}) ?? {
|
|
@@ -2340,40 +2404,40 @@ var Qi = /* @__PURE__ */ ((e) => typeof require < "u" ? require : typeof Proxy <
|
|
|
2340
2404
|
body: JSON.stringify({ error: "not an inspect route" })
|
|
2341
2405
|
}) },
|
|
2342
2406
|
...m?.name === void 0 ? {} : { appName: m.name },
|
|
2343
|
-
observability:
|
|
2344
|
-
port:
|
|
2407
|
+
observability: Vn,
|
|
2408
|
+
port: se,
|
|
2345
2409
|
...m?.transport?.wsPath ? { path: m.transport.wsPath } : {},
|
|
2346
2410
|
...m?.http === void 0 ? {} : { http: m.http }
|
|
2347
2411
|
});
|
|
2348
|
-
return
|
|
2349
|
-
|
|
2350
|
-
|
|
2351
|
-
|
|
2352
|
-
|
|
2412
|
+
return z = Y.dispatcher, d(mt([
|
|
2413
|
+
b.queries,
|
|
2414
|
+
b.mutations,
|
|
2415
|
+
b.actions,
|
|
2416
|
+
b.streams
|
|
2353
2417
|
]), (e) => {
|
|
2354
2418
|
$.warn(e);
|
|
2355
|
-
}), $.info(`API listening on :${
|
|
2419
|
+
}), $.info(`API listening on :${se}`, {
|
|
2356
2420
|
dialect: _,
|
|
2357
|
-
queries:
|
|
2358
|
-
mutations:
|
|
2359
|
-
actions:
|
|
2360
|
-
streams:
|
|
2361
|
-
workflows:
|
|
2362
|
-
workflowWorkers:
|
|
2363
|
-
schedules:
|
|
2364
|
-
scheduleCoordination:
|
|
2365
|
-
}), l.finish($),
|
|
2421
|
+
queries: b.queries.length,
|
|
2422
|
+
mutations: b.mutations.length,
|
|
2423
|
+
actions: b.actions.length,
|
|
2424
|
+
streams: b.streams.length,
|
|
2425
|
+
workflows: b.workflows.length,
|
|
2426
|
+
workflowWorkers: b.workflowWorkers.length,
|
|
2427
|
+
schedules: er.length,
|
|
2428
|
+
scheduleCoordination: hr
|
|
2429
|
+
}), l.finish($), J(async () => {
|
|
2366
2430
|
for (let e of wn) e.stop();
|
|
2367
|
-
|
|
2431
|
+
Et.stop();
|
|
2368
2432
|
try {
|
|
2369
|
-
await Y.close(),
|
|
2370
|
-
mirror:
|
|
2433
|
+
await Y.close(), _t(), It?.dispose(), await R.deactivate(), await Wn?.close(), await Ot({
|
|
2434
|
+
mirror: Tt,
|
|
2371
2435
|
log: $
|
|
2372
|
-
}), await
|
|
2436
|
+
}), await Ne.dispose(), await w.close?.();
|
|
2373
2437
|
} catch (e) {
|
|
2374
2438
|
console.error("serve: shutdown step failed, exiting anyway:", e);
|
|
2375
2439
|
}
|
|
2376
2440
|
}), await new Promise(() => {}), 0;
|
|
2377
2441
|
};
|
|
2378
2442
|
//#endregion
|
|
2379
|
-
export {
|
|
2443
|
+
export { So as n, bo as r, Co as t };
|