@capaxle/runtime 0.1.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +5 -0
  3. package/dist/authorization.d.ts +12 -0
  4. package/dist/authorization.d.ts.map +1 -0
  5. package/dist/authorization.js +23 -0
  6. package/dist/authorization.js.map +1 -0
  7. package/dist/base64url.d.ts +4 -0
  8. package/dist/base64url.d.ts.map +1 -0
  9. package/dist/base64url.js +11 -0
  10. package/dist/base64url.js.map +1 -0
  11. package/dist/confirmation-types.d.ts +255 -0
  12. package/dist/confirmation-types.d.ts.map +1 -0
  13. package/dist/confirmation-types.js +2 -0
  14. package/dist/confirmation-types.js.map +1 -0
  15. package/dist/confirmation.d.ts +6 -0
  16. package/dist/confirmation.d.ts.map +1 -0
  17. package/dist/confirmation.js +1205 -0
  18. package/dist/confirmation.js.map +1 -0
  19. package/dist/idempotency-types.d.ts +130 -0
  20. package/dist/idempotency-types.d.ts.map +1 -0
  21. package/dist/idempotency-types.js +2 -0
  22. package/dist/idempotency-types.js.map +1 -0
  23. package/dist/idempotency.d.ts +4 -0
  24. package/dist/idempotency.d.ts.map +1 -0
  25. package/dist/idempotency.js +798 -0
  26. package/dist/idempotency.js.map +1 -0
  27. package/dist/index.d.ts +13 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +7 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/ingress.d.ts +33 -0
  32. package/dist/ingress.d.ts.map +1 -0
  33. package/dist/ingress.js +325 -0
  34. package/dist/ingress.js.map +1 -0
  35. package/dist/kernel.d.ts +5 -0
  36. package/dist/kernel.d.ts.map +1 -0
  37. package/dist/kernel.js +2872 -0
  38. package/dist/kernel.js.map +1 -0
  39. package/dist/principal.d.ts +7 -0
  40. package/dist/principal.d.ts.map +1 -0
  41. package/dist/principal.js +130 -0
  42. package/dist/principal.js.map +1 -0
  43. package/dist/rate-limit.d.ts +12 -0
  44. package/dist/rate-limit.d.ts.map +1 -0
  45. package/dist/rate-limit.js +82 -0
  46. package/dist/rate-limit.js.map +1 -0
  47. package/dist/redaction.d.ts +19 -0
  48. package/dist/redaction.d.ts.map +1 -0
  49. package/dist/redaction.js +338 -0
  50. package/dist/redaction.js.map +1 -0
  51. package/dist/registry.d.ts +23 -0
  52. package/dist/registry.d.ts.map +1 -0
  53. package/dist/registry.js +188 -0
  54. package/dist/registry.js.map +1 -0
  55. package/dist/types.d.ts +401 -0
  56. package/dist/types.d.ts.map +1 -0
  57. package/dist/types.js +2 -0
  58. package/dist/types.js.map +1 -0
  59. package/package.json +33 -0
@@ -0,0 +1,338 @@
1
+ import { types } from "node:util";
2
+ import { ownData, RuntimeConfigurationError } from "./registry.js";
3
+ const MARKER = "[REDACTED]";
4
+ const MAX_ATOMS = 256;
5
+ const MAX_PATTERN_UNITS = 65_536;
6
+ const MAX_NODES = 10_000;
7
+ const MAX_DEPTH = 64;
8
+ const MAX_TEXT_UNITS = 1_048_576;
9
+ const MAX_SCAN_WORK = 16_777_216;
10
+ class RedactionBoundsError extends Error {
11
+ }
12
+ export function createRedactionState() {
13
+ return {
14
+ strings: new Set(),
15
+ primitives: new Set(),
16
+ patternUnits: 0,
17
+ failed: false,
18
+ };
19
+ }
20
+ export function addSensitiveString(state, value) {
21
+ if (state.strings.has(value))
22
+ return;
23
+ if (state.strings.size + state.primitives.size >= MAX_ATOMS ||
24
+ state.patternUnits + value.length > MAX_PATTERN_UNITS) {
25
+ state.failed = true;
26
+ throw new RedactionBoundsError("redaction_bounds");
27
+ }
28
+ state.strings.add(value);
29
+ state.patternUnits += value.length;
30
+ }
31
+ function addSensitivePrimitive(state, value) {
32
+ if (!state.primitives.has(value)) {
33
+ if (state.strings.size + state.primitives.size >= MAX_ATOMS) {
34
+ state.failed = true;
35
+ throw new RedactionBoundsError("redaction_bounds");
36
+ }
37
+ state.primitives.add(value);
38
+ }
39
+ addSensitiveString(state, String(value));
40
+ }
41
+ function arrayData(value, maximum) {
42
+ if (types.isProxy(value) ||
43
+ !Array.isArray(value) ||
44
+ Object.getPrototypeOf(value) !== Array.prototype ||
45
+ value.length > maximum ||
46
+ Reflect.ownKeys(value).length !== value.length + 1)
47
+ throw new Error("array");
48
+ const output = [];
49
+ for (let index = 0; index < value.length; index++) {
50
+ const descriptor = Object.getOwnPropertyDescriptor(value, String(index));
51
+ if (!descriptor || !("value" in descriptor) || !descriptor.enumerable)
52
+ throw new Error("array");
53
+ output.push(descriptor.value);
54
+ }
55
+ return output;
56
+ }
57
+ export function compileRedactionPaths(value, identities) {
58
+ try {
59
+ const output = new Map();
60
+ if (value === undefined)
61
+ return output;
62
+ const declarations = ownData(value);
63
+ if (Object.keys(declarations).length > 128)
64
+ throw new Error("paths");
65
+ for (const [id, pointers] of Object.entries(declarations)) {
66
+ if (!identities.has(id))
67
+ throw new Error("identity");
68
+ const paths = [];
69
+ const seen = new Set();
70
+ for (const pointer of arrayData(pointers, 32)) {
71
+ if (typeof pointer !== "string" ||
72
+ pointer.length > 1024 ||
73
+ (pointer !== "" && !pointer.startsWith("/")) ||
74
+ /~(?:[^01]|$)/.test(pointer))
75
+ throw new Error("pointer");
76
+ if (seen.has(pointer))
77
+ continue;
78
+ seen.add(pointer);
79
+ const tokens = pointer === ""
80
+ ? []
81
+ : pointer
82
+ .slice(1)
83
+ .split("/")
84
+ .map((token) => token.replaceAll("~1", "/").replaceAll("~0", "~"));
85
+ if (tokens.length > 64)
86
+ throw new Error("pointer");
87
+ paths.push(Object.freeze(tokens));
88
+ }
89
+ output.set(id, Object.freeze(paths));
90
+ }
91
+ return output;
92
+ }
93
+ catch {
94
+ throw new RuntimeConfigurationError("CAP_RUNTIME_CONFIGURATION_INVALID");
95
+ }
96
+ }
97
+ function node(budget, depth) {
98
+ if (++budget.nodes > MAX_NODES || depth > MAX_DEPTH)
99
+ throw new RedactionBoundsError("redaction_bounds");
100
+ }
101
+ function text(budget, units) {
102
+ if (units > MAX_TEXT_UNITS - budget.units)
103
+ throw new RedactionBoundsError("redaction_bounds");
104
+ budget.units += units;
105
+ }
106
+ /** Canonical input only; retain atoms, never input containers. Missing own matches skip. */
107
+ export function captureRedactionPaths(input, paths, state) {
108
+ if (state.failed)
109
+ throw new RedactionBoundsError("redaction_bounds");
110
+ const budget = { nodes: 0, units: 0, scan: 0 };
111
+ const capture = (value, depth) => {
112
+ node(budget, depth);
113
+ if (typeof value === "string") {
114
+ text(budget, value.length);
115
+ addSensitiveString(state, value);
116
+ }
117
+ else if (value === null ||
118
+ typeof value === "boolean" ||
119
+ typeof value === "number") {
120
+ if (typeof value === "number" && !Number.isFinite(value))
121
+ throw new Error("number");
122
+ text(budget, String(value).length);
123
+ addSensitivePrimitive(state, value);
124
+ }
125
+ else if (types.isProxy(value))
126
+ throw new Error("proxy");
127
+ else if (Array.isArray(value)) {
128
+ const entries = arrayData(value, MAX_NODES - budget.nodes);
129
+ for (let index = 0; index < entries.length; index++)
130
+ capture(entries[index], depth + 1);
131
+ }
132
+ else {
133
+ if (Object.getPrototypeOf(value) !== Object.prototype &&
134
+ Object.getPrototypeOf(value) !== null)
135
+ throw new Error("prototype");
136
+ let keys = 0;
137
+ for (const key in value)
138
+ if (Object.hasOwn(value, key)) {
139
+ keys++;
140
+ node(budget, depth + 1);
141
+ text(budget, key.length);
142
+ addSensitiveString(state, key);
143
+ const descriptor = Object.getOwnPropertyDescriptor(value, key);
144
+ if (!descriptor || !("value" in descriptor) || !descriptor.enumerable)
145
+ throw new Error("descriptor");
146
+ capture(descriptor.value, depth + 1);
147
+ }
148
+ if (Reflect.ownKeys(value).length !== keys)
149
+ throw new Error("descriptor");
150
+ }
151
+ };
152
+ const seen = new Set();
153
+ for (const tokens of paths) {
154
+ let selected = input;
155
+ for (const token of tokens) {
156
+ node(budget, 0);
157
+ text(budget, token.length);
158
+ if (typeof selected === "object" &&
159
+ selected !== null &&
160
+ types.isProxy(selected))
161
+ throw new Error("proxy");
162
+ if (selected === null ||
163
+ typeof selected !== "object" ||
164
+ (Array.isArray(selected) && !/^(0|[1-9][0-9]*)$/.test(token))) {
165
+ selected = undefined;
166
+ break;
167
+ }
168
+ if (types.isProxy(selected) ||
169
+ (Object.getPrototypeOf(selected) !== Object.prototype &&
170
+ Object.getPrototypeOf(selected) !== null &&
171
+ Object.getPrototypeOf(selected) !== Array.prototype))
172
+ throw new Error("carrier");
173
+ const descriptor = Object.getOwnPropertyDescriptor(selected, token);
174
+ if (descriptor && (!("value" in descriptor) || !descriptor.enumerable))
175
+ throw new Error("descriptor");
176
+ selected =
177
+ descriptor && "value" in descriptor
178
+ ? descriptor.value
179
+ : undefined;
180
+ if (selected === undefined)
181
+ break;
182
+ }
183
+ if (selected !== undefined && !seen.has(selected)) {
184
+ seen.add(selected);
185
+ capture(selected, 0);
186
+ }
187
+ }
188
+ }
189
+ /** Bounded own-data JSON copy, redaction, and deep freezing before export or caching. */
190
+ export function redactJson(value, state) {
191
+ if (state.failed)
192
+ throw new RedactionBoundsError("redaction_bounds");
193
+ const budget = { nodes: 0, units: 0, scan: 0 };
194
+ const active = new Set();
195
+ const patterns = [...state.strings].sort((left, right) => right.length - left.length || (left < right ? -1 : left > right ? 1 : 0));
196
+ let replacement = MARKER;
197
+ for (const pattern of patterns) {
198
+ if (pattern === "")
199
+ continue;
200
+ budget.scan += MARKER.length;
201
+ if (MARKER.includes(pattern))
202
+ replacement = "";
203
+ }
204
+ const ensureReplacement = () => {
205
+ if (replacement === "" && state.strings.has(""))
206
+ throw new Error("redaction_unrepresentable");
207
+ };
208
+ const redactText = (value) => {
209
+ text(budget, value.length);
210
+ let safe = value;
211
+ for (;;) {
212
+ let replacements = 0;
213
+ for (const pattern of patterns) {
214
+ if (pattern === "") {
215
+ if (safe === "") {
216
+ ensureReplacement();
217
+ text(budget, replacement.length);
218
+ safe = replacement;
219
+ replacements++;
220
+ }
221
+ continue;
222
+ }
223
+ if (safe.length > MAX_SCAN_WORK - budget.scan)
224
+ throw new RedactionBoundsError("redaction_bounds");
225
+ budget.scan += safe.length;
226
+ let occurrences = 0;
227
+ let index = 0;
228
+ while ((index = safe.indexOf(pattern, index)) !== -1) {
229
+ occurrences++;
230
+ index += pattern.length;
231
+ }
232
+ if (!occurrences)
233
+ continue;
234
+ ensureReplacement();
235
+ const size = safe.length + occurrences * (replacement.length - pattern.length);
236
+ text(budget, size);
237
+ safe = safe.replaceAll(pattern, replacement);
238
+ replacements += occurrences;
239
+ }
240
+ if (replacements === 0)
241
+ break;
242
+ }
243
+ text(budget, safe.length);
244
+ return safe;
245
+ };
246
+ const copy = (value, depth) => {
247
+ node(budget, depth);
248
+ if (typeof value === "string")
249
+ return redactText(value);
250
+ if (value === null ||
251
+ typeof value === "boolean" ||
252
+ (typeof value === "number" && Number.isFinite(value))) {
253
+ if (state.primitives.has(value)) {
254
+ ensureReplacement();
255
+ return redactText(replacement);
256
+ }
257
+ return value;
258
+ }
259
+ if (typeof value !== "object" ||
260
+ value === null ||
261
+ types.isProxy(value) ||
262
+ active.has(value))
263
+ throw new Error("json");
264
+ active.add(value);
265
+ try {
266
+ if (Array.isArray(value)) {
267
+ const entries = arrayData(value, MAX_NODES - budget.nodes);
268
+ return Object.freeze(entries.map((entry) => copy(entry, depth + 1)));
269
+ }
270
+ if (Object.getPrototypeOf(value) !== Object.prototype &&
271
+ Object.getPrototypeOf(value) !== null)
272
+ throw new Error("prototype");
273
+ const output = {};
274
+ for (const key in value)
275
+ if (Object.hasOwn(value, key)) {
276
+ node(budget, depth + 1);
277
+ const descriptor = Object.getOwnPropertyDescriptor(value, key);
278
+ if (!descriptor || !("value" in descriptor))
279
+ throw new Error("descriptor");
280
+ const name = redactText(key);
281
+ if (Object.hasOwn(output, name))
282
+ throw new Error("redaction_collision");
283
+ Object.defineProperty(output, name, {
284
+ value: copy(descriptor.value, depth + 1),
285
+ enumerable: true,
286
+ });
287
+ }
288
+ // Reject symbols and hidden own data without reading their values.
289
+ if (Reflect.ownKeys(value).length !== Object.keys(output).length)
290
+ throw new Error("descriptor");
291
+ return Object.freeze(output);
292
+ }
293
+ finally {
294
+ active.delete(value);
295
+ }
296
+ };
297
+ try {
298
+ return copy(value, 0);
299
+ }
300
+ catch (error) {
301
+ if (error instanceof RedactionBoundsError)
302
+ state.failed = true;
303
+ throw new Error("redaction_invalid");
304
+ }
305
+ }
306
+ /** Equality of already copied canonical JSON domain data, independent of object key order. */
307
+ export function equalJson(left, right) {
308
+ let nodes = 0;
309
+ const equal = (left, right, depth) => {
310
+ if (++nodes > MAX_NODES || depth > MAX_DEPTH)
311
+ throw new RedactionBoundsError("redaction_bounds");
312
+ if (left === right)
313
+ return true;
314
+ if (left === null ||
315
+ right === null ||
316
+ typeof left !== "object" ||
317
+ typeof right !== "object")
318
+ return false;
319
+ if (Array.isArray(left) !== Array.isArray(right))
320
+ return false;
321
+ const leftKeys = Object.keys(left);
322
+ if (leftKeys.length !== Object.keys(right).length)
323
+ return false;
324
+ for (const key of leftKeys) {
325
+ if (!Object.hasOwn(right, key))
326
+ return false;
327
+ const leftValue = Object.getOwnPropertyDescriptor(left, key)
328
+ ?.value;
329
+ const rightValue = Object.getOwnPropertyDescriptor(right, key)
330
+ ?.value;
331
+ if (!equal(leftValue, rightValue, depth + 1))
332
+ return false;
333
+ }
334
+ return true;
335
+ };
336
+ return equal(left, right, 0);
337
+ }
338
+ //# sourceMappingURL=redaction.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"redaction.js","sourceRoot":"","sources":["../src/redaction.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,OAAO,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAEnE,MAAM,MAAM,GAAG,YAAY,CAAC;AAC5B,MAAM,SAAS,GAAG,GAAG,CAAC;AACtB,MAAM,iBAAiB,GAAG,MAAM,CAAC;AACjC,MAAM,SAAS,GAAG,MAAM,CAAC;AACzB,MAAM,SAAS,GAAG,EAAE,CAAC;AACrB,MAAM,cAAc,GAAG,SAAS,CAAC;AACjC,MAAM,aAAa,GAAG,UAAU,CAAC;AACjC,MAAM,oBAAqB,SAAQ,KAAK;CAAG;AAQ3C,MAAM,UAAU,oBAAoB;IAClC,OAAO;QACL,OAAO,EAAE,IAAI,GAAG,EAAE;QAClB,UAAU,EAAE,IAAI,GAAG,EAAE;QACrB,YAAY,EAAE,CAAC;QACf,MAAM,EAAE,KAAK;KACd,CAAC;AACJ,CAAC;AACD,MAAM,UAAU,kBAAkB,CAAC,KAAqB,EAAE,KAAa;IACrE,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO;IACrC,IACE,KAAK,CAAC,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,IAAI,SAAS;QACvD,KAAK,CAAC,YAAY,GAAG,KAAK,CAAC,MAAM,GAAG,iBAAiB,EACrD,CAAC;QACD,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;QACpB,MAAM,IAAI,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;IACrD,CAAC;IACD,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACzB,KAAK,CAAC,YAAY,IAAI,KAAK,CAAC,MAAM,CAAC;AACrC,CAAC;AACD,SAAS,qBAAqB,CAAC,KAAqB,EAAE,KAAgB;IACpE,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;QACjC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC;YAC5D,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;YACpB,MAAM,IAAI,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;QACrD,CAAC;QACD,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC9B,CAAC;IACD,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3C,CAAC;AACD,SAAS,SAAS,CAAC,KAAc,EAAE,OAAe;IAChD,IACE,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACpB,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QACrB,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,KAAK,CAAC,SAAS;QAChD,KAAK,CAAC,MAAM,GAAG,OAAO;QACtB,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,KAAK,CAAC,MAAM,GAAG,CAAC;QAElD,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;IAC3B,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QAClD,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACzE,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU;YACnE,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3B,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,KAAgB,CAAC,CAAC;IAC3C,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AACD,MAAM,UAAU,qBAAqB,CACnC,KAAc,EACd,UAA+B;IAE/B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,EAA0C,CAAC;QACjE,IAAI,KAAK,KAAK,SAAS;YAAE,OAAO,MAAM,CAAC;QACvC,MAAM,YAAY,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC;QACpC,IAAI,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,MAAM,GAAG,GAAG;YAAE,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;QACrE,KAAK,MAAM,CAAC,EAAE,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YAC1D,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,UAAU,CAAC,CAAC;YACrD,MAAM,KAAK,GAA0B,EAAE,CAAC;YACxC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;YAC/B,KAAK,MAAM,OAAO,IAAI,SAAS,CAAC,QAAQ,EAAE,EAAE,CAAC,EAAE,CAAC;gBAC9C,IACE,OAAO,OAAO,KAAK,QAAQ;oBAC3B,OAAO,CAAC,MAAM,GAAG,IAAI;oBACrB,CAAC,OAAO,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;oBAC5C,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC;oBAE5B,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;gBAC7B,IAAI,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;oBAAE,SAAS;gBAChC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAClB,MAAM,MAAM,GACV,OAAO,KAAK,EAAE;oBACZ,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC,OAAO;yBACJ,KAAK,CAAC,CAAC,CAAC;yBACR,KAAK,CAAC,GAAG,CAAC;yBACV,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CACb,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAClD,CAAC;gBACV,IAAI,MAAM,CAAC,MAAM,GAAG,EAAE;oBAAE,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;gBACnD,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;YACpC,CAAC;YACD,MAAM,CAAC,GAAG,CAAC,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;QACvC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,yBAAyB,CAAC,mCAAmC,CAAC,CAAC;IAC3E,CAAC;AACH,CAAC;AAMD,SAAS,IAAI,CAAC,MAAc,EAAE,KAAa;IACzC,IAAI,EAAE,MAAM,CAAC,KAAK,GAAG,SAAS,IAAI,KAAK,GAAG,SAAS;QACjD,MAAM,IAAI,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;AACvD,CAAC;AACD,SAAS,IAAI,CAAC,MAAc,EAAE,KAAa;IACzC,IAAI,KAAK,GAAG,cAAc,GAAG,MAAM,CAAC,KAAK;QACvC,MAAM,IAAI,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;IACrD,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC;AACxB,CAAC;AACD,4FAA4F;AAC5F,MAAM,UAAU,qBAAqB,CACnC,KAAgB,EAChB,KAAqC,EACrC,KAAqB;IAErB,IAAI,KAAK,CAAC,MAAM;QAAE,MAAM,IAAI,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;IACrE,MAAM,MAAM,GAAW,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IACvD,MAAM,OAAO,GAAG,CAAC,KAAgB,EAAE,KAAa,EAAQ,EAAE;QACxD,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACpB,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YAC3B,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACnC,CAAC;aAAM,IACL,KAAK,KAAK,IAAI;YACd,OAAO,KAAK,KAAK,SAAS;YAC1B,OAAO,KAAK,KAAK,QAAQ,EACzB,CAAC;YACD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;gBACtD,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,CAAC;YAC5B,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;YACnC,qBAAqB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACtC,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;aACrD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;YAC3D,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,OAAO,CAAC,MAAM,EAAE,KAAK,EAAE;gBACjD,OAAO,CAAC,OAAO,CAAC,KAAK,CAAc,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACN,IACE,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,SAAS;gBACjD,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,IAAI;gBAErC,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;YAC/B,IAAI,IAAI,GAAG,CAAC,CAAC;YACb,KAAK,MAAM,GAAG,IAAI,KAAK;gBACrB,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;oBAC9B,IAAI,EAAE,CAAC;oBACP,IAAI,CAAC,MAAM,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;oBACxB,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;oBACzB,kBAAkB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC/B,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC/D,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU;wBACnE,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;oBAChC,OAAO,CAAC,UAAU,CAAC,KAAkB,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;gBACpD,CAAC;YACH,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC,CAAC;IACF,MAAM,IAAI,GAAG,IAAI,GAAG,EAAa,CAAC;IAClC,KAAK,MAAM,MAAM,IAAI,KAAK,EAAE,CAAC;QAC3B,IAAI,QAAQ,GAA0B,KAAK,CAAC;QAC5C,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;YAC3B,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;YAChB,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;YAC3B,IACE,OAAO,QAAQ,KAAK,QAAQ;gBAC5B,QAAQ,KAAK,IAAI;gBACjB,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;gBAEvB,MAAM,IAAI,KAAK,CAAC,OAAO,CAAC,CAAC;YAC3B,IACE,QAAQ,KAAK,IAAI;gBACjB,OAAO,QAAQ,KAAK,QAAQ;gBAC5B,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAC7D,CAAC;gBACD,QAAQ,GAAG,SAAS,CAAC;gBACrB,MAAM;YACR,CAAC;YACD,IACE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;gBACvB,CAAC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,MAAM,CAAC,SAAS;oBACnD,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,IAAI;oBACxC,MAAM,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,KAAK,CAAC,SAAS,CAAC;gBAEtD,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC,CAAC;YAC7B,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;YACpE,IAAI,UAAU,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,UAAU,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;gBACpE,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;YAChC,QAAQ;gBACN,UAAU,IAAI,OAAO,IAAI,UAAU;oBACjC,CAAC,CAAE,UAAU,CAAC,KAAmB;oBACjC,CAAC,CAAC,SAAS,CAAC;YAChB,IAAI,QAAQ,KAAK,SAAS;gBAAE,MAAM;QACpC,CAAC;QACD,IAAI,QAAQ,KAAK,SAAS,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClD,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;YACnB,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;AACH,CAAC;AACD,yFAAyF;AACzF,MAAM,UAAU,UAAU,CAAC,KAAc,EAAE,KAAqB;IAC9D,IAAI,KAAK,CAAC,MAAM;QAAE,MAAM,IAAI,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;IACrE,MAAM,MAAM,GAAW,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;IACvD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAU,CAAC;IACjC,MAAM,QAAQ,GAAG,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CACtC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACd,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC3E,CAAC;IACF,IAAI,WAAW,GAAG,MAAM,CAAC;IACzB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,IAAI,OAAO,KAAK,EAAE;YAAE,SAAS;QAC7B,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,MAAM,CAAC;QAC7B,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;YAAE,WAAW,GAAG,EAAE,CAAC;IACjD,CAAC;IACD,MAAM,iBAAiB,GAAG,GAAS,EAAE;QACnC,IAAI,WAAW,KAAK,EAAE,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;YAC7C,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC,CAAC;IACjD,CAAC,CAAC;IACF,MAAM,UAAU,GAAG,CAAC,KAAa,EAAU,EAAE;QAC3C,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,MAAM,CAAC,CAAC;QAC3B,IAAI,IAAI,GAAG,KAAK,CAAC;QACjB,SAAS,CAAC;YACR,IAAI,YAAY,GAAG,CAAC,CAAC;YACrB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;oBACnB,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;wBAChB,iBAAiB,EAAE,CAAC;wBACpB,IAAI,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;wBACjC,IAAI,GAAG,WAAW,CAAC;wBACnB,YAAY,EAAE,CAAC;oBACjB,CAAC;oBACD,SAAS;gBACX,CAAC;gBACD,IAAI,IAAI,CAAC,MAAM,GAAG,aAAa,GAAG,MAAM,CAAC,IAAI;oBAC3C,MAAM,IAAI,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;gBACrD,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,MAAM,CAAC;gBAC3B,IAAI,WAAW,GAAG,CAAC,CAAC;gBACpB,IAAI,KAAK,GAAG,CAAC,CAAC;gBACd,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;oBACrD,WAAW,EAAE,CAAC;oBACd,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC;gBAC1B,CAAC;gBACD,IAAI,CAAC,WAAW;oBAAE,SAAS;gBAC3B,iBAAiB,EAAE,CAAC;gBACpB,MAAM,IAAI,GACR,IAAI,CAAC,MAAM,GAAG,WAAW,GAAG,CAAC,WAAW,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;gBACpE,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;gBACnB,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;gBAC7C,YAAY,IAAI,WAAW,CAAC;YAC9B,CAAC;YACD,IAAI,YAAY,KAAK,CAAC;gBAAE,MAAM;QAChC,CAAC;QACD,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IACF,MAAM,IAAI,GAAG,CAAC,KAAc,EAAE,KAAa,EAAa,EAAE;QACxD,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QACpB,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC;QACxD,IACE,KAAK,KAAK,IAAI;YACd,OAAO,KAAK,KAAK,SAAS;YAC1B,CAAC,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EACrD,CAAC;YACD,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChC,iBAAiB,EAAE,CAAC;gBACpB,OAAO,UAAU,CAAC,WAAW,CAAC,CAAC;YACjC,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,IACE,OAAO,KAAK,KAAK,QAAQ;YACzB,KAAK,KAAK,IAAI;YACd,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YACpB,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;YAEjB,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;QAC1B,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAClB,IAAI,CAAC;YACH,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,MAAM,OAAO,GAAG,SAAS,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC3D,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;YACvE,CAAC;YACD,IACE,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,MAAM,CAAC,SAAS;gBACjD,MAAM,CAAC,cAAc,CAAC,KAAK,CAAC,KAAK,IAAI;gBAErC,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;YAC/B,MAAM,MAAM,GAA8B,EAAE,CAAC;YAC7C,KAAK,MAAM,GAAG,IAAI,KAAK;gBACrB,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC;oBAC9B,IAAI,CAAC,MAAM,EAAE,KAAK,GAAG,CAAC,CAAC,CAAC;oBACxB,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;oBAC/D,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,OAAO,IAAI,UAAU,CAAC;wBACzC,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;oBAChC,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC;oBAC7B,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC;wBAC7B,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;oBACzC,MAAM,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,EAAE;wBAClC,KAAK,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,GAAG,CAAC,CAAC;wBACxC,UAAU,EAAE,IAAI;qBACjB,CAAC,CAAC;gBACL,CAAC;YACH,mEAAmE;YACnE,IAAI,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM;gBAC9D,MAAM,IAAI,KAAK,CAAC,YAAY,CAAC,CAAC;YAChC,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;gBAAS,CAAC;YACT,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC;IACF,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;IACxB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,oBAAoB;YAAE,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;QAC/D,MAAM,IAAI,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACvC,CAAC;AACH,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,SAAS,CAAC,IAAe,EAAE,KAAgB;IACzD,IAAI,KAAK,GAAG,CAAC,CAAC;IACd,MAAM,KAAK,GAAG,CAAC,IAAe,EAAE,KAAgB,EAAE,KAAa,EAAW,EAAE;QAC1E,IAAI,EAAE,KAAK,GAAG,SAAS,IAAI,KAAK,GAAG,SAAS;YAC1C,MAAM,IAAI,oBAAoB,CAAC,kBAAkB,CAAC,CAAC;QACrD,IAAI,IAAI,KAAK,KAAK;YAAE,OAAO,IAAI,CAAC;QAChC,IACE,IAAI,KAAK,IAAI;YACb,KAAK,KAAK,IAAI;YACd,OAAO,IAAI,KAAK,QAAQ;YACxB,OAAO,KAAK,KAAK,QAAQ;YAEzB,OAAO,KAAK,CAAC;QACf,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAC;QAC/D,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnC,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,MAAM;YAAE,OAAO,KAAK,CAAC;QAChE,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC;gBAAE,OAAO,KAAK,CAAC;YAC7C,MAAM,SAAS,GAAG,MAAM,CAAC,wBAAwB,CAAC,IAAI,EAAE,GAAG,CAAC;gBAC1D,EAAE,KAAkB,CAAC;YACvB,MAAM,UAAU,GAAG,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,GAAG,CAAC;gBAC5D,EAAE,KAAkB,CAAC;YACvB,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,UAAU,EAAE,KAAK,GAAG,CAAC,CAAC;gBAAE,OAAO,KAAK,CAAC;QAC7D,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAC/B,CAAC"}
@@ -0,0 +1,23 @@
1
+ import "@capaxle/core";
2
+ import type { JsonValue } from "@capaxle/ir";
3
+ import type { RuntimeRegistry, RuntimeRegistryOptions, RuntimeDocument, RuntimeCapability, RuntimeValidators } from "./types.js";
4
+ export declare class RuntimeConfigurationError extends Error {
5
+ readonly code: string;
6
+ constructor(code: string);
7
+ }
8
+ /** Inspect carriers without invoking getters or proxy reflection traps. */
9
+ export declare function ownData(value: unknown, allowed?: readonly string[]): Record<string, unknown>;
10
+ export declare function copyJson(value: unknown, active?: Set<object>): JsonValue;
11
+ interface RuntimeEntry {
12
+ readonly capability: RuntimeCapability;
13
+ readonly validators: RuntimeValidators;
14
+ readonly handler: (input: unknown, context: unknown) => unknown;
15
+ }
16
+ interface RegistryState {
17
+ readonly document: RuntimeDocument;
18
+ readonly entries: ReadonlyMap<string, RuntimeEntry>;
19
+ }
20
+ export declare function registryState(registry: unknown): RegistryState | undefined;
21
+ export declare function createRuntimeRegistry(options: RuntimeRegistryOptions): RuntimeRegistry;
22
+ export {};
23
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAQvB,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,KAAK,EACV,eAAe,EACf,sBAAsB,EACtB,eAAe,EACf,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,YAAY,CAAC;AAEpB,qBAAa,yBAA0B,SAAQ,KAAK;IACtC,QAAQ,CAAC,IAAI,EAAE,MAAM;gBAAZ,IAAI,EAAE,MAAM;CAIlC;AAED,2EAA2E;AAC3E,wBAAgB,OAAO,CACrB,KAAK,EAAE,OAAO,EACd,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GAC1B,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAmBzB;AAED,wBAAgB,QAAQ,CACtB,KAAK,EAAE,OAAO,EACd,MAAM,cAAoB,GACzB,SAAS,CAyCX;AAED,UAAU,YAAY;IACpB,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;IACvC,QAAQ,CAAC,UAAU,EAAE,iBAAiB,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;CACjE;AACD,UAAU,aAAa;IACrB,QAAQ,CAAC,QAAQ,EAAE,eAAe,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;CACrD;AAMD,wBAAgB,aAAa,CAAC,QAAQ,EAAE,OAAO,GAAG,aAAa,GAAG,SAAS,CAI1E;AAED,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,sBAAsB,GAC9B,eAAe,CAkJjB"}
@@ -0,0 +1,188 @@
1
+ import "@capaxle/core";
2
+ import { types } from "node:util";
3
+ import { createRequire } from "node:module";
4
+ import { fileURLToPath } from "node:url";
5
+ import { capabilitySemanticHash, validateCapabilityDocument, } from "@capaxle/ir";
6
+ export class RuntimeConfigurationError extends Error {
7
+ code;
8
+ constructor(code) {
9
+ super("Invalid runtime configuration.");
10
+ this.code = code;
11
+ this.name = "RuntimeConfigurationError";
12
+ }
13
+ }
14
+ /** Inspect carriers without invoking getters or proxy reflection traps. */
15
+ export function ownData(value, allowed) {
16
+ if (value === null || typeof value !== "object" || types.isProxy(value))
17
+ throw new Error("carrier");
18
+ const prototype = Object.getPrototypeOf(value);
19
+ if (prototype !== Object.prototype && prototype !== null)
20
+ throw new Error("prototype");
21
+ const output = Object.create(null);
22
+ for (const key of Reflect.ownKeys(value)) {
23
+ if (typeof key !== "string" || (allowed && !allowed.includes(key)))
24
+ throw new Error("key");
25
+ const descriptor = Object.getOwnPropertyDescriptor(value, key);
26
+ if (!descriptor || !("value" in descriptor) || !descriptor.enumerable)
27
+ throw new Error("descriptor");
28
+ output[key] = descriptor.value;
29
+ }
30
+ return output;
31
+ }
32
+ export function copyJson(value, active = new Set()) {
33
+ if (value === null || typeof value === "boolean" || typeof value === "string")
34
+ return value;
35
+ if (typeof value === "number" && Number.isFinite(value))
36
+ return value;
37
+ if (typeof value !== "object" ||
38
+ value === null ||
39
+ types.isProxy(value) ||
40
+ active.has(value))
41
+ throw new Error("json");
42
+ active.add(value);
43
+ try {
44
+ if (Array.isArray(value)) {
45
+ if (Object.getPrototypeOf(value) !== Array.prototype ||
46
+ Reflect.ownKeys(value).length !== value.length + 1)
47
+ throw new Error("array");
48
+ const result = [];
49
+ for (let index = 0; index < value.length; index++) {
50
+ const descriptor = Object.getOwnPropertyDescriptor(value, String(index));
51
+ if (!descriptor || !("value" in descriptor) || !descriptor.enumerable)
52
+ throw new Error("array");
53
+ result.push(copyJson(descriptor.value, active));
54
+ }
55
+ return Object.freeze(result);
56
+ }
57
+ const result = {};
58
+ for (const [key, item] of Object.entries(ownData(value)))
59
+ Object.defineProperty(result, key, {
60
+ value: copyJson(item, active),
61
+ enumerable: true,
62
+ });
63
+ return Object.freeze(result);
64
+ }
65
+ finally {
66
+ active.delete(value);
67
+ }
68
+ }
69
+ const registries = new WeakMap();
70
+ const requirePrivate = createRequire(import.meta.url);
71
+ const bindingModulePath = fileURLToPath(new URL("./internal-bindings.js", import.meta.resolve("@capaxle/core")));
72
+ export function registryState(registry) {
73
+ return typeof registry === "object" && registry !== null
74
+ ? registries.get(registry)
75
+ : undefined;
76
+ }
77
+ export function createRuntimeRegistry(options) {
78
+ try {
79
+ const carrier = ownData(options, [
80
+ "document",
81
+ "irHash",
82
+ "bindings",
83
+ "validators",
84
+ ]);
85
+ const document = copyJson(carrier.document);
86
+ if (validateCapabilityDocument(document, { requireNormalized: true }).length)
87
+ throw new RuntimeConfigurationError("CAP_RUNTIME_IR_INVALID");
88
+ if (typeof carrier.irHash !== "string" ||
89
+ capabilitySemanticHash(document) !== carrier.irHash)
90
+ throw new RuntimeConfigurationError("CAP_RUNTIME_IR_HASH_MISMATCH");
91
+ const bindings = carrier.bindings;
92
+ const validators = carrier.validators;
93
+ // Private sibling module shares core's process-local identity WeakMaps.
94
+ // It has no public package export and never enters portable IR.
95
+ const query = requirePrivate(bindingModulePath);
96
+ const entries = new Map();
97
+ const facadePaths = new Set();
98
+ const facadeLeaves = new Set();
99
+ const reservedFacadeSegments = new Set([
100
+ "__proto__",
101
+ "prototype",
102
+ "constructor",
103
+ "then",
104
+ "toJSON",
105
+ "toString",
106
+ "valueOf",
107
+ "inspect",
108
+ ]);
109
+ for (const capability of document.capabilities) {
110
+ if (entries.has(capability.id))
111
+ throw new RuntimeConfigurationError("CAP_RUNTIME_DUPLICATE_CAPABILITY");
112
+ if (capability.access.exposure.internal !== "disabled") {
113
+ const segments = capability.id.split(".");
114
+ if (segments.some((segment) => segment.length === 0 || reservedFacadeSegments.has(segment)))
115
+ throw new RuntimeConfigurationError("CAP_INTERNAL_FACADE_NAME_INVALID");
116
+ let path = "";
117
+ for (let index = 0; index < segments.length; index++) {
118
+ path = path ? `${path}.${segments[index]}` : segments[index];
119
+ if (facadeLeaves.has(path))
120
+ throw new RuntimeConfigurationError("CAP_INTERNAL_FACADE_NAME_COLLISION");
121
+ facadePaths.add(path);
122
+ if (index === segments.length - 1) {
123
+ if (facadeLeaves.has(path) ||
124
+ [...facadePaths].some((item) => item.startsWith(`${path}.`)))
125
+ throw new RuntimeConfigurationError("CAP_INTERNAL_FACADE_NAME_COLLISION");
126
+ facadeLeaves.add(path);
127
+ }
128
+ }
129
+ }
130
+ const binding = bindings.get(capability.id);
131
+ if (!binding)
132
+ throw new RuntimeConfigurationError("CAP_RUNTIME_BINDING_MISSING");
133
+ const bound = ownData(binding, ["id", "version", "irHash", "binding"]);
134
+ const resolved = query?.resolveBindingHandle?.(bound.binding);
135
+ if (!resolved ||
136
+ typeof resolved.handler !== "function" ||
137
+ bound.id !== capability.id ||
138
+ resolved.id !== capability.id ||
139
+ bound.version !== capability.version ||
140
+ resolved.version !== capability.version ||
141
+ bound.irHash !== carrier.irHash ||
142
+ resolved.irHash !== carrier.irHash)
143
+ throw new RuntimeConfigurationError("CAP_RUNTIME_BINDING_MISMATCH");
144
+ const validator = validators.get(capability.id);
145
+ if (!validator ||
146
+ typeof validator.input?.validate !== "function" ||
147
+ typeof validator.output?.validate !== "function")
148
+ throw new RuntimeConfigurationError("CAP_RUNTIME_VALIDATOR_MISSING");
149
+ const errors = new Map(validator.errors);
150
+ for (const [code, declaration] of Object.entries(capability.errors))
151
+ if (declaration.details &&
152
+ typeof errors.get(code)?.validate !== "function")
153
+ throw new RuntimeConfigurationError("CAP_RUNTIME_VALIDATOR_MISSING");
154
+ if (Object.keys(capability.limits).some((key) => key !== "rateLimit") ||
155
+ capability.requirements.resources.length ||
156
+ capability.requirements.environment.length)
157
+ throw new RuntimeConfigurationError("CAP_RUNTIME_PROVIDER_UNAVAILABLE");
158
+ entries.set(capability.id, {
159
+ capability,
160
+ handler: resolved.handler,
161
+ validators: {
162
+ input: { validate: validator.input.validate.bind(validator.input) },
163
+ output: {
164
+ validate: validator.output.validate.bind(validator.output),
165
+ },
166
+ errors: new Map([...errors].map(([code, value]) => [
167
+ code,
168
+ { validate: value.validate.bind(value) },
169
+ ])),
170
+ },
171
+ });
172
+ }
173
+ if (bindings.size !== entries.size || validators.size !== entries.size)
174
+ throw new RuntimeConfigurationError("CAP_RUNTIME_BINDING_MISMATCH");
175
+ const registry = Object.freeze({
176
+ irHash: carrier.irHash,
177
+ capabilities: Object.freeze([...entries.values()].map(({ capability }) => Object.freeze({ id: capability.id, version: capability.version }))),
178
+ });
179
+ registries.set(registry, { document, entries });
180
+ return registry;
181
+ }
182
+ catch (error) {
183
+ if (error instanceof RuntimeConfigurationError)
184
+ throw error;
185
+ throw new RuntimeConfigurationError("CAP_RUNTIME_CONFIGURATION_INVALID");
186
+ }
187
+ }
188
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}