@ic-reactor/candid 3.0.14-beta.2 → 3.0.15-beta.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.
@@ -105,24 +105,4 @@ export declare class MetadataDisplayReactor<A = BaseActor> extends CandidDisplay
105
105
  meta: MethodMeta<A>;
106
106
  }>;
107
107
  }
108
- /**
109
- * Create and initialize a MetadataDisplayReactor.
110
- * This is a convenience function that creates the reactor and calls initialize().
111
- *
112
- * @param options Reactor configuration options
113
- * @returns Initialized MetadataDisplayReactor
114
- *
115
- * @example
116
- * ```typescript
117
- * const reactor = await createMetadataReactor({
118
- * canisterId: "ryjl3-tyaaa-aaaaa-aaaba-cai",
119
- * clientManager,
120
- * name: "ICPLedger",
121
- * })
122
- *
123
- * // Reactor is ready to use
124
- * const methods = reactor.getMethodNames()
125
- * ```
126
- */
127
- export declare function createMetadataReactor<A = BaseActor>(options: CandidDisplayReactorParameters<A>): Promise<MetadataDisplayReactor<A>>;
128
108
  //# sourceMappingURL=metadata-display-reactor.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"metadata-display-reactor.d.ts","sourceRoot":"","sources":["../src/metadata-display-reactor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,SAAS,EACT,YAAY,EACb,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,KAAK,EACV,8BAA8B,EAC9B,oBAAoB,EACrB,MAAM,SAAS,CAAA;AAChB,OAAO,EAEL,aAAa,EACb,oBAAoB,EAErB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,UAAU,EACV,YAAY,EAEZ,WAAW,EACZ,MAAM,mBAAmB,CAAA;AAM1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,OAAO,QAAQ,kBAAkB,CAAC;IAChC,UAAU,qBAAqB,CAAC,CAAC;QAC/B,QAAQ,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;KAC9C;IACD,UAAU,uBAAuB,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS;QAChD,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,CAAA;KAC1B;CACF;AAED,qBAAa,sBAAsB,CAAC,CAAC,GAAG,SAAS,CAAE,SAAQ,oBAAoB,CAC7E,CAAC,EACD,UAAU,CACX;IACC,SAAyB,SAAS,EAAG,UAAU,CAAS;IAGxD,OAAO,CAAC,YAAY,CAAuC;IAC3D,OAAO,CAAC,UAAU,CAA8B;IAGhD,OAAO,CAAC,MAAM,CAAC,UAAU,CAAqB;IAC9C,OAAO,CAAC,MAAM,CAAC,aAAa,CAA2B;gBAE3C,MAAM,EAAE,8BAA8B,CAAC,CAAC,CAAC;IAQrD;;OAEG;IACmB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAOjD;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAqBxB;;;;;;OAMG;IACI,YAAY,CAAC,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EAC3C,UAAU,EAAE,CAAC,GACZ,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS;IAIlC;;;;;;OAMG;IACI,aAAa,CAAC,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EAC5C,UAAU,EAAE,CAAC,GACZ,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS;IAI/B;;OAEG;IACI,eAAe,IAAI,oBAAoB,CAAC,CAAC,CAAC,GAAG,IAAI;IAIxD;;OAEG;IACI,gBAAgB,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI;IAOhD;;;OAGG;IACmB,cAAc,CAClC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,IAAI,CAAC;cAUG,eAAe,CAAC,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EAC1D,UAAU,EAAE,CAAC,EACb,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAClC,YAAY,CAAC,CAAC,CAAC;IAclB;;;;;OAKG;IACU,mBAAmB,CAAC,CAAC,GAAG,OAAO,EAC1C,OAAO,EAAE,oBAAoB,GAAG;QAAE,IAAI,CAAC,EAAE,OAAO,EAAE,CAAA;KAAE,GACnD,OAAO,CAAC;QAAE,MAAM,EAAE,CAAC,CAAC;QAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAA;KAAE,CAAC;CAY/C;AAMD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAsB,qBAAqB,CAAC,CAAC,GAAG,SAAS,EACvD,OAAO,EAAE,8BAA8B,CAAC,CAAC,CAAC,GACzC,OAAO,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC,CAIpC"}
1
+ {"version":3,"file":"metadata-display-reactor.d.ts","sourceRoot":"","sources":["../src/metadata-display-reactor.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,SAAS,EACT,YAAY,EACb,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAA;AACxD,OAAO,KAAK,EACV,8BAA8B,EAC9B,oBAAoB,EACrB,MAAM,SAAS,CAAA;AAChB,OAAO,EAEL,aAAa,EACb,oBAAoB,EAErB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EACL,UAAU,EACV,YAAY,EAEZ,WAAW,EACZ,MAAM,mBAAmB,CAAA;AAM1B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmCG;AACH,OAAO,QAAQ,kBAAkB,CAAC;IAChC,UAAU,qBAAqB,CAAC,CAAC;QAC/B,QAAQ,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAA;KAC9C;IACD,UAAU,uBAAuB,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS;QAChD,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,CAAA;KAC1B;CACF;AAED,qBAAa,sBAAsB,CAAC,CAAC,GAAG,SAAS,CAAE,SAAQ,oBAAoB,CAC7E,CAAC,EACD,UAAU,CACX;IACC,SAAyB,SAAS,EAAG,UAAU,CAAS;IAGxD,OAAO,CAAC,YAAY,CAAuC;IAC3D,OAAO,CAAC,UAAU,CAA8B;IAGhD,OAAO,CAAC,MAAM,CAAC,UAAU,CAAqB;IAC9C,OAAO,CAAC,MAAM,CAAC,aAAa,CAA2B;gBAE3C,MAAM,EAAE,8BAA8B,CAAC,CAAC,CAAC;IAQrD;;OAEG;IACmB,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAOjD;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAqBxB;;;;;;OAMG;IACI,YAAY,CAAC,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EAC3C,UAAU,EAAE,CAAC,GACZ,aAAa,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS;IAIlC;;;;;;OAMG;IACI,aAAa,CAAC,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EAC5C,UAAU,EAAE,CAAC,GACZ,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,SAAS;IAI/B;;OAEG;IACI,eAAe,IAAI,oBAAoB,CAAC,CAAC,CAAC,GAAG,IAAI;IAIxD;;OAEG;IACI,gBAAgB,IAAI,WAAW,CAAC,CAAC,CAAC,GAAG,IAAI;IAOhD;;;OAGG;IACmB,cAAc,CAClC,OAAO,EAAE,oBAAoB,GAC5B,OAAO,CAAC,IAAI,CAAC;cAUG,eAAe,CAAC,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,EAC1D,UAAU,EAAE,CAAC,EACb,MAAM,EAAE,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAClC,YAAY,CAAC,CAAC,CAAC;IAclB;;;;;OAKG;IACU,mBAAmB,CAAC,CAAC,GAAG,OAAO,EAC1C,OAAO,EAAE,oBAAoB,GAAG;QAAE,IAAI,CAAC,EAAE,OAAO,EAAE,CAAA;KAAE,GACnD,OAAO,CAAC;QAAE,MAAM,EAAE,CAAC,CAAC;QAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAA;KAAE,CAAC;CAY/C"}
@@ -134,31 +134,4 @@ Object.defineProperty(MetadataDisplayReactor, "resultVisitor", {
134
134
  writable: true,
135
135
  value: new ResultFieldVisitor()
136
136
  });
137
- // ════════════════════════════════════════════════════════════════════════════
138
- // Factory Function
139
- // ════════════════════════════════════════════════════════════════════════════
140
- /**
141
- * Create and initialize a MetadataDisplayReactor.
142
- * This is a convenience function that creates the reactor and calls initialize().
143
- *
144
- * @param options Reactor configuration options
145
- * @returns Initialized MetadataDisplayReactor
146
- *
147
- * @example
148
- * ```typescript
149
- * const reactor = await createMetadataReactor({
150
- * canisterId: "ryjl3-tyaaa-aaaaa-aaaba-cai",
151
- * clientManager,
152
- * name: "ICPLedger",
153
- * })
154
- *
155
- * // Reactor is ready to use
156
- * const methods = reactor.getMethodNames()
157
- * ```
158
- */
159
- export async function createMetadataReactor(options) {
160
- const reactor = new MetadataDisplayReactor(options);
161
- await reactor.initialize();
162
- return reactor;
163
- }
164
137
  //# sourceMappingURL=metadata-display-reactor.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"metadata-display-reactor.js","sourceRoot":"","sources":["../src/metadata-display-reactor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"metadata-display-reactor.js","sourceRoot":"","sources":["../src/metadata-display-reactor.ts"],"names":[],"mappings":"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"}
package/dist/utils.d.ts CHANGED
@@ -2,6 +2,10 @@ import type { CandidDefinition } from "./types";
2
2
  /**
3
3
  * Imports and evaluates a Candid definition from JavaScript code.
4
4
  *
5
+ * This function evaluates JavaScript code in a controlled manner to extract
6
+ * the idlFactory and init exports. The evaluation is done using Function constructor
7
+ * which is safer than dynamic imports with data URLs and more CSP-friendly.
8
+ *
5
9
  * @param candidJs - The JavaScript code containing the Candid definition.
6
10
  * @returns A promise that resolves to the CandidDefinition.
7
11
  * @throws Error if the import fails.
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAE/C;;;;;;GAMG;AACH,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,gBAAgB,CAAC,CAgB3B"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,SAAS,CAAA;AAG/C;;;;;;;;;;GAUG;AACH,wBAAsB,sBAAsB,CAC1C,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,gBAAgB,CAAC,CA2C3B"}
package/dist/utils.js CHANGED
@@ -1,19 +1,46 @@
1
+ import { IDL } from "@icp-sdk/core/candid";
1
2
  /**
2
3
  * Imports and evaluates a Candid definition from JavaScript code.
3
4
  *
5
+ * This function evaluates JavaScript code in a controlled manner to extract
6
+ * the idlFactory and init exports. The evaluation is done using Function constructor
7
+ * which is safer than dynamic imports with data URLs and more CSP-friendly.
8
+ *
4
9
  * @param candidJs - The JavaScript code containing the Candid definition.
5
10
  * @returns A promise that resolves to the CandidDefinition.
6
11
  * @throws Error if the import fails.
7
12
  */
8
13
  export async function importCandidDefinition(candidJs) {
9
14
  try {
10
- // Create a data URL with the JavaScript code
11
- const dataUri = "data:text/javascript;charset=utf-8," + encodeURIComponent(candidJs);
12
- // Dynamically import the module
13
- const module = await import(/* webpackIgnore: true */ dataUri);
15
+ // Create a module exports object
16
+ const exports = {};
17
+ // Transform ES6 export statements to assignments
18
+ // This is safe because we're only transforming the syntax pattern,
19
+ // not evaluating arbitrary code
20
+ const transformedJs = candidJs
21
+ // Replace 'export const name = value' with 'const name = value; exports.name = name'
22
+ .replace(/export\s+const\s+(\w+)\s*=/g, "const $1 =")
23
+ // Replace 'export function name' with 'function name'
24
+ .replace(/export\s+function\s+(\w+)/g, "function $1");
25
+ // Create a safe evaluation context with necessary globals
26
+ // We provide IDL from the trusted @icp-sdk/core/candid package
27
+ const evalFunction = new Function("exports", "IDL", `
28
+ ${transformedJs}
29
+
30
+ // Capture exports
31
+ if (typeof idlFactory !== 'undefined') {
32
+ exports.idlFactory = idlFactory;
33
+ }
34
+ if (typeof init !== 'undefined') {
35
+ exports.init = init;
36
+ }
37
+ return exports;
38
+ `);
39
+ // Execute the function with the exports object and IDL
40
+ const result = evalFunction(exports, IDL);
14
41
  return {
15
- idlFactory: module.idlFactory,
16
- init: module.init,
42
+ idlFactory: result.idlFactory,
43
+ init: result.init,
17
44
  };
18
45
  }
19
46
  catch (error) {
package/dist/utils.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,QAAgB;IAEhB,IAAI,CAAC;QACH,6CAA6C;QAC7C,MAAM,OAAO,GACX,qCAAqC,GAAG,kBAAkB,CAAC,QAAQ,CAAC,CAAA;QAEtE,gCAAgC;QAChC,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,yBAAyB,CAAC,OAAO,CAAC,CAAA;QAE9D,OAAO;YACL,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,IAAI,EAAE,MAAM,CAAC,IAAI;SAClB,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,uCAAuC,KAAK,EAAE,CAAC,CAAA;IACjE,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,GAAG,EAAE,MAAM,sBAAsB,CAAA;AAE1C;;;;;;;;;;GAUG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,QAAgB;IAEhB,IAAI,CAAC;QACH,iCAAiC;QACjC,MAAM,OAAO,GAA4B,EAAE,CAAA;QAE3C,iDAAiD;QACjD,mEAAmE;QACnE,gCAAgC;QAChC,MAAM,aAAa,GAAG,QAAQ;YAC5B,qFAAqF;aACpF,OAAO,CAAC,6BAA6B,EAAE,YAAY,CAAC;YACrD,sDAAsD;aACrD,OAAO,CAAC,4BAA4B,EAAE,aAAa,CAAC,CAAA;QAEvD,0DAA0D;QAC1D,+DAA+D;QAC/D,MAAM,YAAY,GAAG,IAAI,QAAQ,CAC/B,SAAS,EACT,KAAK,EACL;QACE,aAAa;;;;;;;;;;OAUd,CACF,CAAA;QAED,uDAAuD;QACvD,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;QAEzC,OAAO;YACL,UAAU,EAAE,MAAM,CAAC,UAA4C;YAC/D,IAAI,EAAE,MAAM,CAAC,IAAgC;SAC9C,CAAA;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,uCAAuC,KAAK,EAAE,CAAC,CAAA;IACjE,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/visitor/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AA4C/D,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,KAAG,UAmBhD,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM,KAAG,YAKlD,CAAA"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../src/visitor/constants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,iBAAiB,CAAA;AAiD/D,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,KAAG,UAmBhD,CAAA;AAED,eAAO,MAAM,iBAAiB,GAAI,QAAQ,MAAM,KAAG,YAKlD,CAAA"}
@@ -15,9 +15,19 @@ const TAMESTAMP_KEYS = [
15
15
  "deleted_at",
16
16
  "valid_until",
17
17
  ];
18
- const TAMESTAMP_KEYS_REGEX = new RegExp(TAMESTAMP_KEYS.map((key) => `^[\\w-]*${key}[\\w-]*$`).join("|"), "i");
18
+ // Fixed ReDoS vulnerability by eliminating nested quantifiers
19
+ // Original pattern ^[\w-]*key[\w-]*$ had catastrophic backtracking
20
+ // New approach: use simple substring matching (case-insensitive)
21
+ const createKeyMatcher = (keys) => {
22
+ const lowerKeys = keys.map((k) => k.toLowerCase());
23
+ return (str) => {
24
+ const lower = str.toLowerCase();
25
+ return lowerKeys.some((key) => lower.includes(key));
26
+ };
27
+ };
28
+ const isTimestampKey = createKeyMatcher(TAMESTAMP_KEYS);
19
29
  const CYCLE_KEYS = ["cycle", "cycles"];
20
- const CYCLE_KEYS_REGEX = new RegExp(CYCLE_KEYS.map((key) => `^[\\w-]*${key}[\\w-]*$`).join("|"), "i");
30
+ const isCycleKey = createKeyMatcher(CYCLE_KEYS);
21
31
  const ACCOUNT_ID_KEYS_REGEX = /account_identifier|ledger_account|block_hash|transaction_hash|tx_hash/i;
22
32
  const tokenize = (label) => {
23
33
  const parts = label
@@ -30,7 +40,7 @@ const tokenize = (label) => {
30
40
  export const checkTextFormat = (label) => {
31
41
  if (!label)
32
42
  return "plain";
33
- if (TAMESTAMP_KEYS_REGEX.test(label))
43
+ if (isTimestampKey(label))
34
44
  return "timestamp";
35
45
  if (ACCOUNT_ID_KEYS_REGEX.test(label))
36
46
  return "account-id";
@@ -54,9 +64,9 @@ export const checkTextFormat = (label) => {
54
64
  export const checkNumberFormat = (label) => {
55
65
  if (!label)
56
66
  return "normal";
57
- if (TAMESTAMP_KEYS_REGEX.test(label))
67
+ if (isTimestampKey(label))
58
68
  return "timestamp";
59
- if (CYCLE_KEYS_REGEX.test(label))
69
+ if (isCycleKey(label))
60
70
  return "cycle";
61
71
  return "normal";
62
72
  };
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/visitor/constants.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/visitor/constants.ts"],"names":[],"mappings":"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"}
@@ -25,38 +25,73 @@ interface ResultNodeBase<T extends VisitorDataType = VisitorDataType> {
25
25
  /** Value after display transformation (present after resolution) */
26
26
  value?: unknown;
27
27
  }
28
- type NodeTypeExtras<T extends VisitorDataType> = T extends "record" ? {
28
+ interface RecordNodeExtras {
29
+ /** Child fields of the record */
29
30
  fields: Record<string, ResultNode>;
30
- } : T extends "variant" ? {
31
+ }
32
+ interface VariantNodeExtras {
31
33
  /** All variant options as schema */
32
34
  options: Record<string, ResultNode>;
33
35
  /** The resolved selected option value */
34
36
  selectedValue: ResultNode;
35
37
  /** The selected option key (populated after resolution) */
36
38
  selected?: string;
37
- } : T extends "tuple" | "vector" ? {
39
+ }
40
+ interface TupleNodeExtras {
41
+ /** Tuple element fields */
38
42
  items: ResultNode[];
39
- } : T extends "optional" ? {
43
+ }
44
+ interface VectorNodeExtras {
45
+ /** Vector element fields */
46
+ items: ResultNode[];
47
+ }
48
+ interface OptionalNodeExtras {
49
+ /** The inner value, or null if not enabled */
40
50
  value: ResultNode | null;
41
- } : T extends "recursive" ? {
51
+ }
52
+ interface RecursiveNodeExtras {
53
+ /** The resolved recursive inner type */
42
54
  inner: ResultNode;
43
- } : T extends "blob" ? {
55
+ }
56
+ interface BlobNodeExtras {
57
+ /** The blob value as hex/base64 or Uint8Array */
44
58
  value: string | Uint8Array;
59
+ /** Hash of the blob content */
45
60
  hash: string;
61
+ /** Length in bytes */
46
62
  length: number;
47
- } : T extends "number" ? {
63
+ }
64
+ interface NumberNodeExtras {
65
+ /** Detected number format */
48
66
  format: NumberFormat;
67
+ /** The numeric value */
49
68
  value: string | number;
50
- } : T extends "text" | "principal" ? {
69
+ }
70
+ interface TextNodeExtras {
71
+ /** Detected text format */
51
72
  format: TextFormat;
73
+ /** The text value */
52
74
  value: string;
53
- } : T extends "boolean" ? {
75
+ }
76
+ interface PrincipalNodeExtras {
77
+ /** Detected text format */
78
+ format: TextFormat;
79
+ /** The principal value as string */
80
+ value: string;
81
+ }
82
+ interface BooleanNodeExtras {
83
+ /** The boolean value */
54
84
  value: boolean;
55
- } : T extends "null" ? {
85
+ }
86
+ interface NullNodeExtras {
87
+ /** The null value */
56
88
  value: null;
57
- } : {
89
+ }
90
+ interface UnknownNodeExtras {
91
+ /** The unknown value */
58
92
  value: unknown;
59
- };
93
+ }
94
+ type NodeTypeExtras<T extends VisitorDataType> = T extends "record" ? RecordNodeExtras : T extends "variant" ? VariantNodeExtras : T extends "tuple" ? TupleNodeExtras : T extends "vector" ? VectorNodeExtras : T extends "optional" ? OptionalNodeExtras : T extends "recursive" ? RecursiveNodeExtras : T extends "blob" ? BlobNodeExtras : T extends "number" ? NumberNodeExtras : T extends "text" ? TextNodeExtras : T extends "principal" ? PrincipalNodeExtras : T extends "boolean" ? BooleanNodeExtras : T extends "null" ? NullNodeExtras : T extends "unknown" ? UnknownNodeExtras : {};
60
95
  /**
61
96
  * A unified result node that contains both schema and resolved value.
62
97
  * When used as schema only, `raw` is undefined.
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/visitor/returns/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/visitor/returns/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,qBAAqB,EACtB,MAAM,kBAAkB,CAAA;AACzB,OAAO,KAAK,EAAE,eAAe,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,UAAU,CAAA;AAEzE,YAAY,EAAE,eAAe,EAAE,UAAU,EAAE,YAAY,EAAE,CAAA;AAMzD;;;GAGG;AACH,MAAM,MAAM,WAAW,GACnB,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,MAAM,GACN,QAAQ,GACR,OAAO,GACP,SAAS,GACT,QAAQ,GACR,UAAU,GACV,WAAW,GACX,MAAM,GACN,SAAS,CAAA;AAMb;;GAEG;AACH,UAAU,cAAc,CAAC,CAAC,SAAS,eAAe,GAAG,eAAe;IAClE,+BAA+B;IAC/B,IAAI,EAAE,CAAC,CAAA;IACP,uCAAuC;IACvC,KAAK,EAAE,MAAM,CAAA;IACb,iDAAiD;IACjD,YAAY,EAAE,MAAM,CAAA;IACpB,gCAAgC;IAChC,UAAU,EAAE,MAAM,CAAA;IAClB,mDAAmD;IACnD,WAAW,EAAE,WAAW,CAAA;IACxB,0EAA0E;IAC1E,GAAG,CAAC,EAAE,OAAO,CAAA;IACb,oEAAoE;IACpE,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB;AAOD,UAAU,gBAAgB;IACxB,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;CACnC;AAED,UAAU,iBAAiB;IACzB,oCAAoC;IACpC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;IACnC,yCAAyC;IACzC,aAAa,EAAE,UAAU,CAAA;IACzB,2DAA2D;IAC3D,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,UAAU,eAAe;IACvB,2BAA2B;IAC3B,KAAK,EAAE,UAAU,EAAE,CAAA;CACpB;AAED,UAAU,gBAAgB;IACxB,4BAA4B;IAC5B,KAAK,EAAE,UAAU,EAAE,CAAA;CACpB;AAED,UAAU,kBAAkB;IAC1B,8CAA8C;IAC9C,KAAK,EAAE,UAAU,GAAG,IAAI,CAAA;CACzB;AAED,UAAU,mBAAmB;IAC3B,wCAAwC;IACxC,KAAK,EAAE,UAAU,CAAA;CAClB;AAED,UAAU,cAAc;IACtB,iDAAiD;IACjD,KAAK,EAAE,MAAM,GAAG,UAAU,CAAA;IAC1B,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,sBAAsB;IACtB,MAAM,EAAE,MAAM,CAAA;CACf;AAED,UAAU,gBAAgB;IACxB,6BAA6B;IAC7B,MAAM,EAAE,YAAY,CAAA;IACpB,wBAAwB;IACxB,KAAK,EAAE,MAAM,GAAG,MAAM,CAAA;CACvB;AAED,UAAU,cAAc;IACtB,2BAA2B;IAC3B,MAAM,EAAE,UAAU,CAAA;IAClB,qBAAqB;IACrB,KAAK,EAAE,MAAM,CAAA;CACd;AAED,UAAU,mBAAmB;IAC3B,2BAA2B;IAC3B,MAAM,EAAE,UAAU,CAAA;IAClB,oCAAoC;IACpC,KAAK,EAAE,MAAM,CAAA;CACd;AAED,UAAU,iBAAiB;IACzB,wBAAwB;IACxB,KAAK,EAAE,OAAO,CAAA;CACf;AAED,UAAU,cAAc;IACtB,qBAAqB;IACrB,KAAK,EAAE,IAAI,CAAA;CACZ;AAED,UAAU,iBAAiB;IACzB,wBAAwB;IACxB,KAAK,EAAE,OAAO,CAAA;CACf;AAED,KAAK,cAAc,CAAC,CAAC,SAAS,eAAe,IAAI,CAAC,SAAS,QAAQ,GAC/D,gBAAgB,GAChB,CAAC,SAAS,SAAS,GACjB,iBAAiB,GACjB,CAAC,SAAS,OAAO,GACf,eAAe,GACf,CAAC,SAAS,QAAQ,GAChB,gBAAgB,GAChB,CAAC,SAAS,UAAU,GAClB,kBAAkB,GAClB,CAAC,SAAS,WAAW,GACnB,mBAAmB,GACnB,CAAC,SAAS,MAAM,GACd,cAAc,GACd,CAAC,SAAS,QAAQ,GAChB,gBAAgB,GAChB,CAAC,SAAS,MAAM,GACd,cAAc,GACd,CAAC,SAAS,WAAW,GACnB,mBAAmB,GACnB,CAAC,SAAS,SAAS,GACjB,iBAAiB,GACjB,CAAC,SAAS,MAAM,GACd,cAAc,GACd,CAAC,SAAS,SAAS,GACjB,iBAAiB,GACjB,EAAE,CAAA;AAE9B;;;;;;;;GAQG;AACH,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,eAAe,GAAG,eAAe,IAChE,cAAc,CAAC,CAAC,CAAC,GACf,cAAc,CAAC,CAAC,CAAC,GAAG;IAClB,oEAAoE;IACpE,OAAO,CAAC,IAAI,EAAE,OAAO,GAAG,YAAY,CAAC,CAAC,CAAC,CAAA;CACxC,CAAA;AAEL;;GAEG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,eAAe,GAAG,eAAe,IAClE,UAAU,CAAC,CAAC,CAAC,GAAG;IACd,GAAG,EAAE,OAAO,CAAA;CACb,CAAA;AAMH,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAA;AAC7C,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,SAAS,CAAC,CAAA;AAC/C,MAAM,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,CAAA;AAC3C,MAAM,MAAM,YAAY,GAAG,UAAU,CAAC,UAAU,CAAC,CAAA;AACjD,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAA;AAC7C,MAAM,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAA;AACzC,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,WAAW,CAAC,CAAA;AACnD,MAAM,MAAM,aAAa,GAAG,UAAU,CAAC,WAAW,CAAC,CAAA;AACnD,MAAM,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAA;AAC7C,MAAM,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAA;AACzC,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,SAAS,CAAC,CAAA;AAC/C,MAAM,MAAM,QAAQ,GAAG,UAAU,CAAC,MAAM,CAAC,CAAA;AACzC,MAAM,MAAM,WAAW,GAAG,UAAU,CAAC,SAAS,CAAC,CAAA;AAM/C;;;GAGG;AACH,MAAM,WAAW,UAAU,CACzB,CAAC,GAAG,SAAS,EACb,IAAI,SAAS,YAAY,CAAC,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC;IAE9C,iDAAiD;IACjD,YAAY,EAAE,YAAY,CAAA;IAC1B,yDAAyD;IACzD,YAAY,EAAE,IAAI,CAAA;IAClB,6DAA6D;IAC7D,OAAO,EAAE,UAAU,EAAE,CAAA;IACrB,8BAA8B;IAC9B,WAAW,EAAE,MAAM,CAAA;IACnB;;;;OAIG;IACH,OAAO,CAAC,IAAI,EAAE,qBAAqB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,CAAA;CAC/D;AAED;;GAEG;AACH,MAAM,WAAW,YAAY,CAAC,CAAC,GAAG,SAAS;IACzC,iDAAiD;IACjD,YAAY,EAAE,YAAY,CAAA;IAC1B,sBAAsB;IACtB,YAAY,EAAE,YAAY,CAAC,CAAC,CAAC,CAAA;IAC7B,6BAA6B;IAC7B,OAAO,EAAE,YAAY,EAAE,CAAA;IACvB,0CAA0C;IAC1C,GAAG,EAAE,qBAAqB,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;CAC/C;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,CAAC,CAAC,GAAG,SAAS,IAAI;KACtC,CAAC,IAAI,YAAY,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,EAAE,CAAC,CAAC;CACzC,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,kBAAkB,CAAC,CAAC,SAAS,eAAe,GAAG,eAAe,IAAI;IAC5E,+BAA+B;IAC/B,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,CAAA;IACrB,oCAAoC;IACpC,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAAA"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ic-reactor/candid",
3
- "version": "3.0.14-beta.2",
3
+ "version": "3.0.15-beta.0",
4
4
  "description": "IC Reactor Candid Adapter - Fetch and parse Candid definitions from Internet Computer canisters",
5
5
  "main": "dist/index.js",
6
6
  "module": "dist/index.js",
@@ -44,7 +44,7 @@
44
44
  "dependencies": {
45
45
  "@noble/hashes": "^2.0.1",
46
46
  "zod": "^4.3.5",
47
- "@ic-reactor/core": "^3.0.14-beta.2"
47
+ "@ic-reactor/core": "^3.0.15-beta.0"
48
48
  },
49
49
  "peerDependencies": {
50
50
  "zod": "^4.3.5",
@@ -223,34 +223,3 @@ export class MetadataDisplayReactor<A = BaseActor> extends CandidDisplayReactor<
223
223
  return { result, meta }
224
224
  }
225
225
  }
226
-
227
- // ════════════════════════════════════════════════════════════════════════════
228
- // Factory Function
229
- // ════════════════════════════════════════════════════════════════════════════
230
-
231
- /**
232
- * Create and initialize a MetadataDisplayReactor.
233
- * This is a convenience function that creates the reactor and calls initialize().
234
- *
235
- * @param options Reactor configuration options
236
- * @returns Initialized MetadataDisplayReactor
237
- *
238
- * @example
239
- * ```typescript
240
- * const reactor = await createMetadataReactor({
241
- * canisterId: "ryjl3-tyaaa-aaaaa-aaaba-cai",
242
- * clientManager,
243
- * name: "ICPLedger",
244
- * })
245
- *
246
- * // Reactor is ready to use
247
- * const methods = reactor.getMethodNames()
248
- * ```
249
- */
250
- export async function createMetadataReactor<A = BaseActor>(
251
- options: CandidDisplayReactorParameters<A>
252
- ): Promise<MetadataDisplayReactor<A>> {
253
- const reactor = new MetadataDisplayReactor<A>(options)
254
- await reactor.initialize()
255
- return reactor
256
- }
package/src/utils.ts CHANGED
@@ -1,8 +1,13 @@
1
1
  import type { CandidDefinition } from "./types"
2
+ import { IDL } from "@icp-sdk/core/candid"
2
3
 
3
4
  /**
4
5
  * Imports and evaluates a Candid definition from JavaScript code.
5
6
  *
7
+ * This function evaluates JavaScript code in a controlled manner to extract
8
+ * the idlFactory and init exports. The evaluation is done using Function constructor
9
+ * which is safer than dynamic imports with data URLs and more CSP-friendly.
10
+ *
6
11
  * @param candidJs - The JavaScript code containing the Candid definition.
7
12
  * @returns A promise that resolves to the CandidDefinition.
8
13
  * @throws Error if the import fails.
@@ -11,16 +16,43 @@ export async function importCandidDefinition(
11
16
  candidJs: string
12
17
  ): Promise<CandidDefinition> {
13
18
  try {
14
- // Create a data URL with the JavaScript code
15
- const dataUri =
16
- "data:text/javascript;charset=utf-8," + encodeURIComponent(candidJs)
19
+ // Create a module exports object
20
+ const exports: Record<string, unknown> = {}
21
+
22
+ // Transform ES6 export statements to assignments
23
+ // This is safe because we're only transforming the syntax pattern,
24
+ // not evaluating arbitrary code
25
+ const transformedJs = candidJs
26
+ // Replace 'export const name = value' with 'const name = value; exports.name = name'
27
+ .replace(/export\s+const\s+(\w+)\s*=/g, "const $1 =")
28
+ // Replace 'export function name' with 'function name'
29
+ .replace(/export\s+function\s+(\w+)/g, "function $1")
30
+
31
+ // Create a safe evaluation context with necessary globals
32
+ // We provide IDL from the trusted @icp-sdk/core/candid package
33
+ const evalFunction = new Function(
34
+ "exports",
35
+ "IDL",
36
+ `
37
+ ${transformedJs}
38
+
39
+ // Capture exports
40
+ if (typeof idlFactory !== 'undefined') {
41
+ exports.idlFactory = idlFactory;
42
+ }
43
+ if (typeof init !== 'undefined') {
44
+ exports.init = init;
45
+ }
46
+ return exports;
47
+ `
48
+ )
17
49
 
18
- // Dynamically import the module
19
- const module = await import(/* webpackIgnore: true */ dataUri)
50
+ // Execute the function with the exports object and IDL
51
+ const result = evalFunction(exports, IDL)
20
52
 
21
53
  return {
22
- idlFactory: module.idlFactory,
23
- init: module.init,
54
+ idlFactory: result.idlFactory as CandidDefinition["idlFactory"],
55
+ init: result.init as CandidDefinition["init"],
24
56
  }
25
57
  } catch (error) {
26
58
  throw new Error(`Failed to import Candid definition: ${error}`)
@@ -182,13 +182,12 @@ describe("FieldVisitor Schema Generation", () => {
182
182
  ],
183
183
  "person"
184
184
  )
185
- const schema = field.schema as z.ZodObject<any>
186
185
 
187
186
  const validData = { name: "John", age: "30" }
188
- expect(schema.parse(validData)).toEqual(validData)
187
+ expect(field.schema.parse(validData)).toEqual(validData)
189
188
 
190
- expect(() => schema.parse({ name: "John" })).toThrow() // missing age
191
- expect(() => schema.parse({ name: 123, age: "30" })).toThrow() // invalid type
189
+ expect(() => field.schema.parse({ name: "John" })).toThrow() // missing age
190
+ expect(() => field.schema.parse({ name: 123, age: "30" })).toThrow() // invalid type
192
191
  })
193
192
  })
194
193
 
@@ -18,17 +18,22 @@ const TAMESTAMP_KEYS = [
18
18
  "valid_until",
19
19
  ]
20
20
 
21
- const TAMESTAMP_KEYS_REGEX = new RegExp(
22
- TAMESTAMP_KEYS.map((key) => `^[\\w-]*${key}[\\w-]*$`).join("|"),
23
- "i"
24
- )
21
+ // Fixed ReDoS vulnerability by eliminating nested quantifiers
22
+ // Original pattern ^[\w-]*key[\w-]*$ had catastrophic backtracking
23
+ // New approach: use simple substring matching (case-insensitive)
24
+ const createKeyMatcher = (keys: string[]): ((str: string) => boolean) => {
25
+ const lowerKeys = keys.map((k) => k.toLowerCase())
26
+ return (str: string) => {
27
+ const lower = str.toLowerCase()
28
+ return lowerKeys.some((key) => lower.includes(key))
29
+ }
30
+ }
31
+
32
+ const isTimestampKey = createKeyMatcher(TAMESTAMP_KEYS)
25
33
 
26
34
  const CYCLE_KEYS = ["cycle", "cycles"]
27
35
 
28
- const CYCLE_KEYS_REGEX = new RegExp(
29
- CYCLE_KEYS.map((key) => `^[\\w-]*${key}[\\w-]*$`).join("|"),
30
- "i"
31
- )
36
+ const isCycleKey = createKeyMatcher(CYCLE_KEYS)
32
37
 
33
38
  const ACCOUNT_ID_KEYS_REGEX =
34
39
  /account_identifier|ledger_account|block_hash|transaction_hash|tx_hash/i
@@ -45,7 +50,7 @@ const tokenize = (label: string): Set<string> => {
45
50
  export const checkTextFormat = (label?: string): TextFormat => {
46
51
  if (!label) return "plain"
47
52
 
48
- if (TAMESTAMP_KEYS_REGEX.test(label)) return "timestamp"
53
+ if (isTimestampKey(label)) return "timestamp"
49
54
  if (ACCOUNT_ID_KEYS_REGEX.test(label)) return "account-id"
50
55
 
51
56
  const tokens = tokenize(label)
@@ -65,7 +70,7 @@ export const checkTextFormat = (label?: string): TextFormat => {
65
70
 
66
71
  export const checkNumberFormat = (label?: string): NumberFormat => {
67
72
  if (!label) return "normal"
68
- if (TAMESTAMP_KEYS_REGEX.test(label)) return "timestamp"
69
- if (CYCLE_KEYS_REGEX.test(label)) return "cycle"
73
+ if (isTimestampKey(label)) return "timestamp"
74
+ if (isCycleKey(label)) return "cycle"
70
75
  return "normal"
71
76
  }
@@ -59,34 +59,112 @@ interface ResultNodeBase<T extends VisitorDataType = VisitorDataType> {
59
59
  // For compound types, children are stored directly in their respective fields
60
60
  // ════════════════════════════════════════════════════════════════════════════
61
61
 
62
+ interface RecordNodeExtras {
63
+ /** Child fields of the record */
64
+ fields: Record<string, ResultNode>
65
+ }
66
+
67
+ interface VariantNodeExtras {
68
+ /** All variant options as schema */
69
+ options: Record<string, ResultNode>
70
+ /** The resolved selected option value */
71
+ selectedValue: ResultNode
72
+ /** The selected option key (populated after resolution) */
73
+ selected?: string
74
+ }
75
+
76
+ interface TupleNodeExtras {
77
+ /** Tuple element fields */
78
+ items: ResultNode[]
79
+ }
80
+
81
+ interface VectorNodeExtras {
82
+ /** Vector element fields */
83
+ items: ResultNode[]
84
+ }
85
+
86
+ interface OptionalNodeExtras {
87
+ /** The inner value, or null if not enabled */
88
+ value: ResultNode | null
89
+ }
90
+
91
+ interface RecursiveNodeExtras {
92
+ /** The resolved recursive inner type */
93
+ inner: ResultNode
94
+ }
95
+
96
+ interface BlobNodeExtras {
97
+ /** The blob value as hex/base64 or Uint8Array */
98
+ value: string | Uint8Array
99
+ /** Hash of the blob content */
100
+ hash: string
101
+ /** Length in bytes */
102
+ length: number
103
+ }
104
+
105
+ interface NumberNodeExtras {
106
+ /** Detected number format */
107
+ format: NumberFormat
108
+ /** The numeric value */
109
+ value: string | number
110
+ }
111
+
112
+ interface TextNodeExtras {
113
+ /** Detected text format */
114
+ format: TextFormat
115
+ /** The text value */
116
+ value: string
117
+ }
118
+
119
+ interface PrincipalNodeExtras {
120
+ /** Detected text format */
121
+ format: TextFormat
122
+ /** The principal value as string */
123
+ value: string
124
+ }
125
+
126
+ interface BooleanNodeExtras {
127
+ /** The boolean value */
128
+ value: boolean
129
+ }
130
+
131
+ interface NullNodeExtras {
132
+ /** The null value */
133
+ value: null
134
+ }
135
+
136
+ interface UnknownNodeExtras {
137
+ /** The unknown value */
138
+ value: unknown
139
+ }
140
+
62
141
  type NodeTypeExtras<T extends VisitorDataType> = T extends "record"
63
- ? { fields: Record<string, ResultNode> }
142
+ ? RecordNodeExtras
64
143
  : T extends "variant"
65
- ? {
66
- /** All variant options as schema */
67
- options: Record<string, ResultNode>
68
- /** The resolved selected option value */
69
- selectedValue: ResultNode
70
- /** The selected option key (populated after resolution) */
71
- selected?: string
72
- }
73
- : T extends "tuple" | "vector"
74
- ? { items: ResultNode[] }
75
- : T extends "optional"
76
- ? { value: ResultNode | null }
77
- : T extends "recursive"
78
- ? { inner: ResultNode }
79
- : T extends "blob"
80
- ? { value: string | Uint8Array; hash: string; length: number }
81
- : T extends "number"
82
- ? { format: NumberFormat; value: string | number }
83
- : T extends "text" | "principal"
84
- ? { format: TextFormat; value: string }
85
- : T extends "boolean"
86
- ? { value: boolean }
87
- : T extends "null"
88
- ? { value: null }
89
- : { value: unknown } // unknown
144
+ ? VariantNodeExtras
145
+ : T extends "tuple"
146
+ ? TupleNodeExtras
147
+ : T extends "vector"
148
+ ? VectorNodeExtras
149
+ : T extends "optional"
150
+ ? OptionalNodeExtras
151
+ : T extends "recursive"
152
+ ? RecursiveNodeExtras
153
+ : T extends "blob"
154
+ ? BlobNodeExtras
155
+ : T extends "number"
156
+ ? NumberNodeExtras
157
+ : T extends "text"
158
+ ? TextNodeExtras
159
+ : T extends "principal"
160
+ ? PrincipalNodeExtras
161
+ : T extends "boolean"
162
+ ? BooleanNodeExtras
163
+ : T extends "null"
164
+ ? NullNodeExtras
165
+ : T extends "unknown"
166
+ ? UnknownNodeExtras
167
+ : {}
90
168
 
91
169
  /**
92
170
  * A unified result node that contains both schema and resolved value.