@voltro/runtime 0.86.0 → 0.87.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 +5321 -0
- package/README.md +43 -0
- package/THIRD-PARTY-NOTICES.md +860 -221
- package/dist/analyticsSink.js +8 -14
- package/dist/apiKeys.js +82 -78
- package/dist/apiRoleBucketSampler.js +64 -0
- package/dist/apiRoleWorkloadHistory.js +56 -0
- package/dist/apiRoleWorkloadMetrics.js +78 -0
- package/dist/apiRoleWorkloadStorage.js +95 -0
- package/dist/approvals.js +67 -74
- package/dist/authMiddlewareLayer.js +7 -6
- package/dist/bindEvent.js +48 -28
- package/dist/bootListener.js +106 -39
- package/dist/bootStoreCodec.js +38 -37
- package/dist/circuitBreaker.js +1 -72
- package/dist/composeAnalytics.js +31 -10
- package/dist/computedQueryCache.js +231 -0
- package/dist/connectionsFacade.js +32 -30
- package/dist/coordinatedSchedule.js +84 -78
- package/dist/dataStore.js +154 -121
- package/dist/declaredTablesGuard.js +2 -1
- package/dist/dispatcher.js +403 -328
- package/dist/effectStore.js +2 -2
- package/dist/engineClients.js +24 -0
- package/dist/externalizedTasks.js +19 -6
- package/dist/fieldCipher.js +109 -40
- package/dist/fieldKeyRegistry.js +295 -0
- package/dist/fieldKeyRekey.js +286 -0
- package/dist/fieldKeyScan.js +136 -0
- package/dist/fieldKeyring.js +77 -0
- package/dist/hot.d.ts +56 -0
- package/dist/hot.js +3 -0
- package/dist/hotDataStore.js +148 -0
- package/dist/hotDataStoreSnapshot.js +98 -0
- package/dist/hotDataStoreTables.js +18 -0
- package/dist/http-range.d.ts +53 -0
- package/dist/http-range.js +52 -0
- package/dist/httpClientSsrf.js +12 -37
- package/dist/httpClientTracing.js +12 -9
- package/dist/httpCompression.js +17 -17
- package/dist/httpInputStream.js +82 -0
- package/dist/httpRouteMounts.js +1 -0
- package/dist/idempotencyStore.js +92 -52
- package/dist/index.d.ts +1164 -451
- package/dist/index.js +143 -132
- package/dist/kvFacade.js +23 -17
- package/dist/memoryQueryJoins.js +16 -16
- package/dist/memorySetOperations.js +43 -0
- package/dist/metrics.js +38 -24
- package/dist/outbox.js +1 -1
- package/dist/readRecorder.js +35 -34
- package/dist/readScopePredicate.js +12 -0
- package/dist/replicatedDataStore.js +22 -4
- package/dist/rowFilter.js +56 -39
- package/dist/rpcConnections.js +8 -8
- package/dist/rpcServer.js +522 -449
- package/dist/rpcWorkloadAdmission.js +50 -0
- package/dist/rywPositionStore.js +82 -47
- package/dist/scheduler.js +6 -1
- package/dist/servePipeline.js +215 -146
- package/dist/setReadScopes.js +28 -0
- package/dist/snapshotValueCodec.js +46 -0
- package/dist/sourceResolution.js +34 -24
- package/dist/storeMiddleware.js +211 -209
- package/dist/subscriber.js +1 -0
- package/dist/tenantScope.js +8 -20
- package/dist/traceparent.js +8 -19
- package/dist/webSocketGatewayRuntime.js +111 -71
- package/dist/workflowRuntime.js +9 -9
- package/package.json +19 -7
package/dist/subscriber.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
//#region src/subscriber.ts
|
|
2
2
|
var e = (e) => {
|
|
3
|
+
if (e.eventTenant !== void 0 && typeof e.eventTenant != "function") throw Error("defineSubscriber: `eventTenant` must be a function");
|
|
3
4
|
if (e.once !== void 0 && e.eachReplica === !0) throw Error("defineSubscriber: choose either `once` or `eachReplica: true`, not both");
|
|
4
5
|
return e;
|
|
5
6
|
};
|
package/dist/tenantScope.js
CHANGED
|
@@ -1,23 +1,11 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { mapSetReadScopes as e } from "./setReadScopes.js";
|
|
2
|
+
import { addReadScopePredicate as t } from "./readScopePredicate.js";
|
|
3
|
+
import { eq as n, gt as r, isNull as i, or as a } from "@voltro/database";
|
|
2
4
|
//#region src/tenantScope.ts
|
|
3
|
-
var r = (n, r, i) => {
|
|
4
|
-
|
|
5
|
-
let
|
|
6
|
-
return {
|
|
7
|
-
...n,
|
|
8
|
-
predicate: n.predicate ? e(n.predicate, a) : a
|
|
9
|
-
};
|
|
10
|
-
}, i = (e, t, n) => n === "" && !e.crossTenant && t.has(e.table), a = (e) => e?.type === "user" && e.tenantId === "", o = (t, r) => {
|
|
11
|
-
if (t.includeDeleted || !r.has(t.table)) return t;
|
|
12
|
-
let i = n("deletedAt");
|
|
13
|
-
return {
|
|
14
|
-
...t,
|
|
15
|
-
predicate: t.predicate ? e(t.predicate, i) : i
|
|
16
|
-
};
|
|
17
|
-
}, s = (e) => (t, n) => {
|
|
18
|
-
e.observe?.beforeScope?.({ ...t }, n);
|
|
19
|
-
let i = o(r(t, e.tenantScopedTables, n.tenantId), e.softDeleteScopedTables);
|
|
20
|
-
return e.observe?.afterScope?.({ ...i }), i;
|
|
5
|
+
var o = (r, i, a) => e(r, (e) => e.crossTenant || !i.has(e.table) || a == null ? e : t(e, (e) => n(e("tenantId"), a))), s = (e, t, n) => n === "" && !e.crossTenant && t.has(e.table), c = (e) => e?.type === "user" && e.tenantId === "", l = (n, r) => e(n, (e) => e.includeDeleted || !r.has(e.table) ? e : t(e, (e) => i(e("deletedAt")))), u = (n) => (s, c) => {
|
|
6
|
+
n.observe?.beforeScope?.({ ...s }, c);
|
|
7
|
+
let u = l(o(s, n.tenantScopedTables, c.tenantId), n.softDeleteScopedTables), d = /* @__PURE__ */ new Date(), f = n.expiresScopedTables, p = f === void 0 ? u : e(u, (e) => e.includeExpired || !f.has(e.table) ? e : t(e, (e) => a(i(e("expiresAt")), r(e("expiresAt"), d))));
|
|
8
|
+
return n.observe?.afterScope?.({ ...p }), p;
|
|
21
9
|
};
|
|
22
10
|
//#endregion
|
|
23
|
-
export {
|
|
11
|
+
export { l as applySoftDeleteScope, o as applyTenantScope, s as isEmptyTenantScopedRead, c as isOrglessUserSubject, u as makeQueryFinalizer };
|
package/dist/traceparent.js
CHANGED
|
@@ -1,34 +1,23 @@
|
|
|
1
1
|
import { Tracer as e } from "effect";
|
|
2
|
+
import { newTraceId as t } from "@voltro/shared";
|
|
2
3
|
//#region src/traceparent.ts
|
|
3
|
-
var
|
|
4
|
+
var n = /^00-([0-9a-f]{32})-([0-9a-f]{16})-([0-9a-f]{2})$/, r = (e) => `00-${e.traceId}-${e.spanId}-${e.sampled ? "01" : "00"}`, i = (e) => {
|
|
4
5
|
if (typeof e != "string") return null;
|
|
5
|
-
let
|
|
6
|
-
if (
|
|
7
|
-
let [, r, i, a] =
|
|
6
|
+
let t = n.exec(e.trim().toLowerCase());
|
|
7
|
+
if (t === null) return null;
|
|
8
|
+
let [, r, i, a] = t;
|
|
8
9
|
return r === "0".repeat(32) || i === "0".repeat(16) ? null : {
|
|
9
10
|
traceId: r,
|
|
10
11
|
spanId: i,
|
|
11
12
|
sampled: (parseInt(a, 16) & 1) == 1
|
|
12
13
|
};
|
|
13
|
-
},
|
|
14
|
-
let n =
|
|
14
|
+
}, a = (t) => {
|
|
15
|
+
let n = i(t);
|
|
15
16
|
if (n !== null) return e.externalSpan({
|
|
16
17
|
traceId: n.traceId,
|
|
17
18
|
spanId: n.spanId,
|
|
18
19
|
sampled: n.sampled
|
|
19
20
|
});
|
|
20
|
-
}, a = () => {
|
|
21
|
-
let e = globalThis.crypto, t = /* @__PURE__ */ new Uint8Array(16);
|
|
22
|
-
if (e?.getRandomValues !== void 0) e.getRandomValues(t);
|
|
23
|
-
else {
|
|
24
|
-
let e = `${Date.now().toString(16)}${Math.random().toString(16).slice(2)}`;
|
|
25
|
-
for (let n = 0; n < t.length; n += 1) {
|
|
26
|
-
let r = e.slice(n * 2 % e.length, n * 2 % e.length + 2);
|
|
27
|
-
t[n] = (parseInt(r, 16) || n + 1) ^ (Math.random() * 256 | 0);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
let n = Array.from(t, (e) => e.toString(16).padStart(2, "0")).join("");
|
|
31
|
-
return n === "0".repeat(32) ? `${"0".repeat(31)}1` : n;
|
|
32
21
|
};
|
|
33
22
|
//#endregion
|
|
34
|
-
export {
|
|
23
|
+
export { a as externalSpanFromTraceparent, r as formatTraceparent, t as newTraceId, i as parseTraceparent };
|
|
@@ -1,114 +1,154 @@
|
|
|
1
|
-
import { Effect as e } from "effect";
|
|
2
|
-
import { GATEWAY_CREDENTIAL_EXPIRED_CLOSE_CODE as
|
|
3
|
-
import { Socket as
|
|
1
|
+
import { Effect as e, Schema as t } from "effect";
|
|
2
|
+
import { GATEWAY_CREDENTIAL_EXPIRED_CLOSE_CODE as n, Subject as r } from "@voltro/protocol";
|
|
3
|
+
import { Socket as i } from "effect/socket";
|
|
4
4
|
//#region src/webSocketGatewayRuntime.ts
|
|
5
|
-
var
|
|
6
|
-
let
|
|
7
|
-
let e =
|
|
8
|
-
|
|
5
|
+
var a = (a, o, s, c, l, u, d) => e.scoped(e.gen(function* () {
|
|
6
|
+
let f = yield* a.writer, p = yield* e.context(), m = new AbortController(), h = s.limits?.maxMessageBytes ?? 1048576, g = s.limits?.maxPendingBytes ?? 4194304, _ = s.limits?.maxPendingMessages ?? 64, v = [], y = s.limits?.maxInboundMessagesPerSecond, b = s.limits?.burst ?? y ?? 0, x = b, S = performance.now(), C = [], w = 0, T, E = 0, D, O, k, A = 0, j, M = s.auth === "token" ? "waiting" : "admitted", N = c, P = !1, F = !1, I = () => {
|
|
7
|
+
let e = D;
|
|
8
|
+
D = void 0;
|
|
9
9
|
try {
|
|
10
10
|
e?.();
|
|
11
11
|
} catch (e) {
|
|
12
|
-
|
|
12
|
+
d(e);
|
|
13
13
|
}
|
|
14
|
-
},
|
|
15
|
-
if (!
|
|
16
|
-
|
|
17
|
-
for (let t =
|
|
18
|
-
|
|
14
|
+
}, L = (e) => {
|
|
15
|
+
if (!m.signal.aborted) {
|
|
16
|
+
m.abort(e), O !== void 0 && clearTimeout(O), k !== void 0 && clearTimeout(k), v.length = 0, T?.reject(e);
|
|
17
|
+
for (let t = w; t < C.length; t += 1) C[t]?.reject(e);
|
|
18
|
+
C.length = 0, w = 0, E = 0, I();
|
|
19
19
|
}
|
|
20
|
-
},
|
|
21
|
-
|
|
22
|
-
},
|
|
23
|
-
if (
|
|
20
|
+
}, R = (t = 1e3, n) => {
|
|
21
|
+
m.signal.aborted || (L(Error(n ?? "gateway closed")), !(F || o.destroyed) && (F = !0, j = setTimeout(() => o.destroy(), 1e3), j.unref(), P ? e.runPromiseWith(p)(f.write(new i.CloseEvent(t, n))).catch(() => o.destroy()) : o.destroy()));
|
|
22
|
+
}, z = () => new Promise((e, t) => {
|
|
23
|
+
if (m.signal.aborted || o.destroyed) {
|
|
24
24
|
t(/* @__PURE__ */ Error("gateway closed"));
|
|
25
25
|
return;
|
|
26
26
|
}
|
|
27
27
|
let n = () => {
|
|
28
28
|
t(/* @__PURE__ */ Error("gateway closed"));
|
|
29
29
|
};
|
|
30
|
-
|
|
31
|
-
|
|
30
|
+
m.signal.addEventListener("abort", n, { once: !0 }), o.write(/* @__PURE__ */ new Uint8Array(), (r) => {
|
|
31
|
+
m.signal.removeEventListener("abort", n), r ? t(r) : e();
|
|
32
32
|
});
|
|
33
|
-
}),
|
|
34
|
-
if (
|
|
35
|
-
let t =
|
|
33
|
+
}), B = async () => {
|
|
34
|
+
if (T !== void 0 || m.signal.aborted) return;
|
|
35
|
+
let t = C[w];
|
|
36
36
|
if (t) {
|
|
37
|
-
|
|
37
|
+
C[w] = void 0, w += 1, w === C.length ? (C.length = 0, w = 0) : w >= 1024 && w * 2 >= C.length && (C.splice(0, w), w = 0), T = t;
|
|
38
38
|
try {
|
|
39
|
-
if (await e.runPromiseWith(
|
|
40
|
-
t.resolve();
|
|
39
|
+
if (await e.runPromiseWith(p)(f.write(t.data), { signal: m.signal }), await z(), m.signal.aborted) throw Error("gateway closed");
|
|
40
|
+
t.resolve({ queuedBytes: E - t.size });
|
|
41
41
|
} catch (e) {
|
|
42
|
-
t.reject(e instanceof Error ? e : /* @__PURE__ */ Error("gateway write failed")),
|
|
42
|
+
t.reject(e instanceof Error ? e : /* @__PURE__ */ Error("gateway write failed")), R(1011, "gateway write failed");
|
|
43
43
|
} finally {
|
|
44
|
-
|
|
44
|
+
m.signal.aborted || (E -= t.size), T = void 0, m.signal.aborted || B();
|
|
45
45
|
}
|
|
46
46
|
}
|
|
47
|
-
},
|
|
48
|
-
if (
|
|
47
|
+
}, V = (e) => {
|
|
48
|
+
if (m.signal.aborted) return Promise.reject(/* @__PURE__ */ Error("gateway closed"));
|
|
49
49
|
let t = typeof e == "string" ? Buffer.byteLength(e) : e.byteLength;
|
|
50
|
-
if (t >
|
|
51
|
-
if (t >
|
|
52
|
-
|
|
50
|
+
if (t > h) return R(1009, "gateway message too large"), Promise.reject(/* @__PURE__ */ Error("gateway message too large"));
|
|
51
|
+
if (t > g - E || C.length - w + +!!T >= _) return R(1013, "gateway outbound queue exceeded"), Promise.reject(/* @__PURE__ */ Error("gateway outbound queue exceeded"));
|
|
52
|
+
E += t;
|
|
53
53
|
let n = new Promise((n, r) => {
|
|
54
|
-
|
|
54
|
+
C.push({
|
|
55
55
|
data: typeof e == "string" ? e : e.slice(),
|
|
56
56
|
size: t,
|
|
57
57
|
resolve: n,
|
|
58
58
|
reject: r
|
|
59
59
|
});
|
|
60
60
|
});
|
|
61
|
-
return
|
|
62
|
-
},
|
|
61
|
+
return B(), n;
|
|
62
|
+
}, H = {
|
|
63
63
|
send: (e) => {
|
|
64
|
-
|
|
64
|
+
V(e).catch(() => {});
|
|
65
65
|
},
|
|
66
|
-
sendAsync:
|
|
67
|
-
|
|
68
|
-
|
|
66
|
+
sendAsync: V,
|
|
67
|
+
get queuedBytes() {
|
|
68
|
+
return E;
|
|
69
|
+
},
|
|
70
|
+
signal: m.signal,
|
|
71
|
+
close: R,
|
|
69
72
|
onMessage: (e) => {
|
|
70
|
-
|
|
73
|
+
m.signal.aborted || v.push(e);
|
|
74
|
+
},
|
|
75
|
+
get subject() {
|
|
76
|
+
return N;
|
|
71
77
|
},
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
+
headers: l,
|
|
79
|
+
path: s.path
|
|
80
|
+
}, U = () => {
|
|
81
|
+
Promise.resolve().then(() => {
|
|
82
|
+
if (!m.signal.aborted) return s.onConnection(H);
|
|
83
|
+
}).then((e) => {
|
|
84
|
+
typeof e == "function" && (D = e), m.signal.aborted && I();
|
|
85
|
+
}, (e) => {
|
|
86
|
+
d(e), R(1011, "gateway setup failed");
|
|
87
|
+
});
|
|
88
|
+
}, W = (e) => {
|
|
89
|
+
if (m.signal.aborted) return !1;
|
|
90
|
+
let t = e - Date.now();
|
|
91
|
+
return t <= 0 ? (R(n, "credential expired"), !1) : (O = setTimeout(() => {
|
|
92
|
+
W(e);
|
|
93
|
+
}, Math.min(t, 2147483647)), O.unref(), !0);
|
|
94
|
+
}, G = (e, n) => {
|
|
95
|
+
M = "verifying";
|
|
96
|
+
let i = Uint8Array.from(e);
|
|
97
|
+
Promise.resolve().then(() => m.signal.aborted ? null : s.verify(i, {
|
|
98
|
+
signal: m.signal,
|
|
99
|
+
headers: l,
|
|
100
|
+
path: s.path,
|
|
101
|
+
receivedAt: n
|
|
102
|
+
})).then((e) => {
|
|
103
|
+
if (!m.signal.aborted) {
|
|
104
|
+
if (performance.now() >= A) R(1008, "gateway token verification timed out");
|
|
105
|
+
else if (e === null) R(1008, "gateway token rejected");
|
|
106
|
+
else {
|
|
107
|
+
if (!e || !t.is(r)(e.subject) || e.credentialExpiresAt !== void 0 && (!Number.isFinite(e.credentialExpiresAt) || !Number.isSafeInteger(Math.ceil(e.credentialExpiresAt * 1e3)))) throw Error("gateway token verifier returned an invalid SubjectResolution");
|
|
108
|
+
N = e.subject, k !== void 0 && clearTimeout(k), (e.credentialExpiresAt === void 0 || W(e.credentialExpiresAt * 1e3)) && (M = "admitted", U());
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
}).catch((e) => {
|
|
112
|
+
m.signal.aborted || (d(e), R(1011, "gateway token verification failed"));
|
|
113
|
+
});
|
|
114
|
+
}, K = () => L(/* @__PURE__ */ Error("gateway disconnected")), q = () => R(1011, "gateway transport failed");
|
|
115
|
+
o.once("close", K), o.once("error", q), yield* e.addFinalizer(() => e.sync(() => {
|
|
116
|
+
L(/* @__PURE__ */ Error("gateway stopped")), j !== void 0 && clearTimeout(j), o.off("close", K), o.off("error", q), o.destroy();
|
|
78
117
|
}));
|
|
79
|
-
let
|
|
80
|
-
if (
|
|
81
|
-
|
|
118
|
+
let J = (e) => {
|
|
119
|
+
if (m.signal.aborted) return;
|
|
120
|
+
let t = performance.now();
|
|
121
|
+
if (e.byteLength > h) R(1009, "gateway message too large");
|
|
122
|
+
else {
|
|
123
|
+
if (y !== void 0) {
|
|
124
|
+
if (x = Math.min(b, x + Math.max(0, t - S) * y / 1e3), S = t, x < 1) {
|
|
125
|
+
R(1008, "gateway inbound rate exceeded");
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
x--;
|
|
129
|
+
}
|
|
130
|
+
if (M !== "admitted" && t >= A) R(1008, "gateway token verification timed out");
|
|
131
|
+
else if (M === "waiting") G(e, t);
|
|
132
|
+
else if (M === "verifying") R(1008, "gateway token verification pending");
|
|
82
133
|
else try {
|
|
83
|
-
for (let
|
|
134
|
+
for (let n of v) n(e, t);
|
|
84
135
|
} catch (e) {
|
|
85
|
-
|
|
86
|
-
}
|
|
87
|
-
}
|
|
88
|
-
}, I = e.sync(() => {
|
|
89
|
-
if (w = !0, c !== void 0) {
|
|
90
|
-
let e = c - Date.now();
|
|
91
|
-
if (e <= 0) {
|
|
92
|
-
O(t, "credential expired");
|
|
93
|
-
return;
|
|
136
|
+
d(e), R(1011, "gateway message handler failed");
|
|
94
137
|
}
|
|
95
|
-
S = setTimeout(() => O(t, "credential expired"), e), S.unref();
|
|
96
138
|
}
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
}
|
|
102
|
-
l(e), O(1011, "gateway setup failed");
|
|
103
|
-
});
|
|
139
|
+
}, Y = e.sync(() => {
|
|
140
|
+
if (P = !0, s.auth === "token") {
|
|
141
|
+
let e = s.verificationTimeoutMs ?? 5e3;
|
|
142
|
+
A = performance.now() + e, k = setTimeout(() => R(1008, "gateway token verification timed out"), e), k.unref();
|
|
143
|
+
} else (u === void 0 || W(u)) && U();
|
|
104
144
|
});
|
|
105
145
|
yield* e.gen(function* () {
|
|
106
|
-
let e = yield*
|
|
107
|
-
for (yield*
|
|
146
|
+
let e = yield* a.reader;
|
|
147
|
+
for (yield* Y;;) {
|
|
108
148
|
let t = yield* e.pull;
|
|
109
|
-
for (let e of t)
|
|
149
|
+
for (let e of t) J(typeof e == "string" ? new TextEncoder().encode(e) : e);
|
|
110
150
|
}
|
|
111
151
|
}).pipe(e.ignore);
|
|
112
152
|
}));
|
|
113
153
|
//#endregion
|
|
114
|
-
export {
|
|
154
|
+
export { a as runWebSocketGateway };
|
package/dist/workflowRuntime.js
CHANGED
|
@@ -4,8 +4,8 @@ import { makeEffectStoreLayer as r } from "./effectStore.js";
|
|
|
4
4
|
import { Cause as i, Effect as a, Exit as o, Layer as s, Option as c, Schema as l, SchemaIssue as u } from "effect";
|
|
5
5
|
import { SubjectService as d, WorkflowControlResultSchema as f, WorkflowQueuedCancellationResultSchema as p, WorkflowRestartCommandSchema as m, WorkflowRestartObservationSchema as h, WorkflowRestartResultSchema as g, WorkflowRestartTargetSchema as _, WorkflowRetryCommandSchema as v, WorkflowRetryObservationSchema as y, WorkflowRetryTargetSchema as b } from "@voltro/protocol";
|
|
6
6
|
import { createLogger as x } from "@voltro/logger";
|
|
7
|
-
import
|
|
8
|
-
import
|
|
7
|
+
import { executePreparedWorkflow as S, getCurrentWorkflowExecutionId as C, hasPreparedWorkflowExecution as w } from "@voltro/workflow";
|
|
8
|
+
import * as T from "effect/SchemaAST";
|
|
9
9
|
//#region src/workflowRuntime.ts
|
|
10
10
|
var E = class extends l.TaggedError()("WorkflowStartNotExecuted", {
|
|
11
11
|
workflowName: l.String,
|
|
@@ -135,9 +135,9 @@ var E = class extends l.TaggedError()("WorkflowStartNotExecuted", {
|
|
|
135
135
|
}
|
|
136
136
|
}, H = (e, t) => {
|
|
137
137
|
let n = e.ast, r = [], i = [];
|
|
138
|
-
return
|
|
138
|
+
return T.isObjects(n) && n.propertySignatures.forEach((e) => {
|
|
139
139
|
let n = e.name;
|
|
140
|
-
typeof n == "string" && (
|
|
140
|
+
typeof n == "string" && (T.isOptional(e.type) ? t && i.push(n) : r.push(n));
|
|
141
141
|
}), {
|
|
142
142
|
required: r,
|
|
143
143
|
optional: i
|
|
@@ -151,7 +151,7 @@ var E = class extends l.TaggedError()("WorkflowStartNotExecuted", {
|
|
|
151
151
|
}
|
|
152
152
|
return n;
|
|
153
153
|
}, i = (e, t, n = e.payloadSchema) => {
|
|
154
|
-
let r = l.decodeUnknownResult(l.make(
|
|
154
|
+
let r = l.decodeUnknownResult(l.make(T.toType(n.ast)))(t);
|
|
155
155
|
if (r._tag === "Success") return;
|
|
156
156
|
let i = new Set(typeof t == "object" && t ? Object.keys(t) : []), a = W(n).filter((e) => !i.has(e));
|
|
157
157
|
throw new V(e.name, a, u.makeFormatterDefault()(r.failure.issue));
|
|
@@ -161,7 +161,7 @@ var E = class extends l.TaggedError()("WorkflowStartNotExecuted", {
|
|
|
161
161
|
}, d = async (t, n) => {
|
|
162
162
|
let i = r(t);
|
|
163
163
|
return z(t, n, c.getOrUndefined(await e.runEffect(i.poll(n))));
|
|
164
|
-
}, x = async () => e.runEffect(
|
|
164
|
+
}, x = async () => e.runEffect(C()), L = async (t, n, r) => {
|
|
165
165
|
if (e.resolveQueuedStart === void 0) throw Error(`Workflow '${t}' remains queued under receipt '${n}'; no receipt resolver is configured`);
|
|
166
166
|
let i = await e.resolveQueuedStart({
|
|
167
167
|
workflowName: t,
|
|
@@ -353,9 +353,9 @@ var E = class extends l.TaggedError()("WorkflowStartNotExecuted", {
|
|
|
353
353
|
}
|
|
354
354
|
let m;
|
|
355
355
|
(e.rememberStartContext !== void 0 || i?.callerContext !== void 0) && (m = c ?? await e.runEffect(u.executionId(p)), await e.rememberStartContext?.(t, m, i?.callerContext ?? { subject: n }));
|
|
356
|
-
let h = c ?? (m !== void 0 &&
|
|
357
|
-
if (d) return h === void 0 ? await e.runEffect(u.execute(p)) : await e.runEffect(
|
|
358
|
-
let g = await e.runEffect(h === void 0 ? u.execute(p, { discard: !0 }) :
|
|
356
|
+
let h = c ?? (m !== void 0 && w(u) ? m : void 0);
|
|
357
|
+
if (d) return h === void 0 ? await e.runEffect(u.execute(p)) : await e.runEffect(S(u, p, h, { discard: !1 })), e.onEnqueue?.(), M(t, h ?? await e.runEffect(u.executionId(p)), "succeeded");
|
|
358
|
+
let g = await e.runEffect(h === void 0 ? u.execute(p, { discard: !0 }) : S(u, p, h));
|
|
359
359
|
return e.onEnqueue?.(), M(t, g, "running");
|
|
360
360
|
};
|
|
361
361
|
return {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@voltro/runtime",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.87.0",
|
|
4
4
|
"description": "The Voltro server runtime — AppContext assembly, the dispatcher, handler layers, API keys, coordinated scheduling, and analytics composition.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"voltro",
|
|
@@ -18,11 +18,21 @@
|
|
|
18
18
|
},
|
|
19
19
|
"type": "module",
|
|
20
20
|
"exports": {
|
|
21
|
+
"./hot": {
|
|
22
|
+
"types": "./dist/hot.d.ts",
|
|
23
|
+
"import": "./dist/hot.js",
|
|
24
|
+
"default": "./dist/hot.js"
|
|
25
|
+
},
|
|
21
26
|
".": {
|
|
22
27
|
"types": "./dist/index.d.ts",
|
|
23
28
|
"import": "./dist/index.js",
|
|
24
29
|
"default": "./dist/index.js"
|
|
25
30
|
},
|
|
31
|
+
"./http-range": {
|
|
32
|
+
"types": "./dist/http-range.d.ts",
|
|
33
|
+
"import": "./dist/http-range.js",
|
|
34
|
+
"default": "./dist/http-range.js"
|
|
35
|
+
},
|
|
26
36
|
"./package.json": "./package.json"
|
|
27
37
|
},
|
|
28
38
|
"main": "./dist/index.js",
|
|
@@ -34,6 +44,7 @@
|
|
|
34
44
|
},
|
|
35
45
|
"dependencies": {
|
|
36
46
|
"@effect/platform-node": "4.0.1",
|
|
47
|
+
"@effect/platform-node-shared": "4.0.1",
|
|
37
48
|
"@opentelemetry/api": "^1.9.1",
|
|
38
49
|
"@opentelemetry/exporter-metrics-otlp-http": "^0.222.0",
|
|
39
50
|
"@opentelemetry/exporter-trace-otlp-http": "^0.222.0",
|
|
@@ -42,12 +53,13 @@
|
|
|
42
53
|
"@opentelemetry/sdk-trace-base": "^2.11.0",
|
|
43
54
|
"@opentelemetry/sdk-trace-node": "^2.11.0",
|
|
44
55
|
"@opentelemetry/semantic-conventions": "^1.43.0",
|
|
45
|
-
"@voltro/database": "0.
|
|
46
|
-
"@voltro/kv": "0.
|
|
47
|
-
"@voltro/local-first": "0.
|
|
48
|
-
"@voltro/logger": "0.
|
|
49
|
-
"@voltro/protocol": "0.
|
|
50
|
-
"@voltro/
|
|
56
|
+
"@voltro/database": "0.87.0",
|
|
57
|
+
"@voltro/kv": "0.87.0",
|
|
58
|
+
"@voltro/local-first": "0.87.0",
|
|
59
|
+
"@voltro/logger": "0.87.0",
|
|
60
|
+
"@voltro/protocol": "0.87.0",
|
|
61
|
+
"@voltro/shared": "0.87.0",
|
|
62
|
+
"@voltro/workflow": "0.87.0",
|
|
51
63
|
"ioredis": "^5.11.1"
|
|
52
64
|
},
|
|
53
65
|
"peerDependencies": {
|