@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.
- package/dist/metadata-display-reactor.d.ts +0 -20
- package/dist/metadata-display-reactor.d.ts.map +1 -1
- package/dist/metadata-display-reactor.js +0 -27
- package/dist/metadata-display-reactor.js.map +1 -1
- package/dist/utils.d.ts +4 -0
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +33 -6
- package/dist/utils.js.map +1 -1
- package/dist/visitor/constants.d.ts.map +1 -1
- package/dist/visitor/constants.js +15 -5
- package/dist/visitor/constants.js.map +1 -1
- package/dist/visitor/returns/types.d.ts +47 -12
- package/dist/visitor/returns/types.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/metadata-display-reactor.ts +0 -31
- package/src/utils.ts +39 -7
- package/src/visitor/arguments/schema.test.ts +3 -4
- package/src/visitor/constants.ts +16 -11
- package/src/visitor/returns/types.ts +104 -26
|
@@ -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
|
|
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.
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
|
11
|
-
const
|
|
12
|
-
//
|
|
13
|
-
|
|
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:
|
|
16
|
-
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":"
|
|
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;
|
|
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
|
-
|
|
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
|
|
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 (
|
|
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 (
|
|
67
|
+
if (isTimestampKey(label))
|
|
58
68
|
return "timestamp";
|
|
59
|
-
if (
|
|
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":"AAEA,MAAM,cAAc,GAAG;IACrB,MAAM;IACN,MAAM;IACN,UAAU;IACV,WAAW;IACX,iBAAiB;IACjB,UAAU;IACV,WAAW;IACX,WAAW;IACX,WAAW;IACX,YAAY;IACZ,WAAW;IACX,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,aAAa;CACd,CAAA;AAED,MAAM,
|
|
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
|
-
|
|
28
|
+
interface RecordNodeExtras {
|
|
29
|
+
/** Child fields of the record */
|
|
29
30
|
fields: Record<string, ResultNode>;
|
|
30
|
-
}
|
|
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
|
-
}
|
|
39
|
+
}
|
|
40
|
+
interface TupleNodeExtras {
|
|
41
|
+
/** Tuple element fields */
|
|
38
42
|
items: ResultNode[];
|
|
39
|
-
}
|
|
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
|
-
}
|
|
51
|
+
}
|
|
52
|
+
interface RecursiveNodeExtras {
|
|
53
|
+
/** The resolved recursive inner type */
|
|
42
54
|
inner: ResultNode;
|
|
43
|
-
}
|
|
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
|
-
}
|
|
63
|
+
}
|
|
64
|
+
interface NumberNodeExtras {
|
|
65
|
+
/** Detected number format */
|
|
48
66
|
format: NumberFormat;
|
|
67
|
+
/** The numeric value */
|
|
49
68
|
value: string | number;
|
|
50
|
-
}
|
|
69
|
+
}
|
|
70
|
+
interface TextNodeExtras {
|
|
71
|
+
/** Detected text format */
|
|
51
72
|
format: TextFormat;
|
|
73
|
+
/** The text value */
|
|
52
74
|
value: string;
|
|
53
|
-
}
|
|
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
|
-
}
|
|
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":"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,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/visitor/returns/types.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ic-reactor/candid",
|
|
3
|
-
"version": "3.0.
|
|
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.
|
|
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
|
|
15
|
-
const
|
|
16
|
-
|
|
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
|
-
//
|
|
19
|
-
const
|
|
50
|
+
// Execute the function with the exports object and IDL
|
|
51
|
+
const result = evalFunction(exports, IDL)
|
|
20
52
|
|
|
21
53
|
return {
|
|
22
|
-
idlFactory:
|
|
23
|
-
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
|
|
package/src/visitor/constants.ts
CHANGED
|
@@ -18,17 +18,22 @@ const TAMESTAMP_KEYS = [
|
|
|
18
18
|
"valid_until",
|
|
19
19
|
]
|
|
20
20
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
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
|
|
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 (
|
|
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 (
|
|
69
|
-
if (
|
|
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
|
-
?
|
|
142
|
+
? RecordNodeExtras
|
|
64
143
|
: T extends "variant"
|
|
65
|
-
?
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
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.
|