@ic-reactor/core 2.0.1 → 3.0.0-beta.2

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 (123) hide show
  1. package/README.md +398 -175
  2. package/dist/client.d.ts +161 -0
  3. package/dist/client.d.ts.map +1 -0
  4. package/dist/client.js +499 -0
  5. package/dist/client.js.map +1 -0
  6. package/dist/display/helper.d.ts +10 -0
  7. package/dist/display/helper.d.ts.map +1 -0
  8. package/dist/display/helper.js +67 -0
  9. package/dist/display/helper.js.map +1 -0
  10. package/dist/display/index.d.ts +4 -0
  11. package/dist/display/index.d.ts.map +1 -0
  12. package/dist/display/index.js +4 -0
  13. package/dist/display/index.js.map +1 -0
  14. package/dist/display/types.d.ts +31 -0
  15. package/dist/display/types.d.ts.map +1 -0
  16. package/dist/display/types.js +2 -0
  17. package/dist/display/types.js.map +1 -0
  18. package/dist/display/visitor.d.ts +28 -0
  19. package/dist/display/visitor.d.ts.map +1 -0
  20. package/dist/display/visitor.js +318 -0
  21. package/dist/display/visitor.js.map +1 -0
  22. package/dist/display-reactor.d.ts +245 -0
  23. package/dist/display-reactor.d.ts.map +1 -0
  24. package/dist/display-reactor.js +331 -0
  25. package/dist/display-reactor.js.map +1 -0
  26. package/dist/errors/index.d.ts +118 -0
  27. package/dist/errors/index.d.ts.map +1 -0
  28. package/dist/errors/index.js +204 -0
  29. package/dist/errors/index.js.map +1 -0
  30. package/dist/index.d.ts +9 -8
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +9 -47
  33. package/dist/index.js.map +1 -0
  34. package/dist/reactor.d.ts +133 -0
  35. package/dist/reactor.d.ts.map +1 -0
  36. package/dist/reactor.js +325 -0
  37. package/dist/reactor.js.map +1 -0
  38. package/dist/types/client.d.ts +89 -0
  39. package/dist/types/client.d.ts.map +1 -0
  40. package/dist/types/client.js +2 -0
  41. package/dist/types/client.js.map +1 -0
  42. package/dist/types/index.d.ts +6 -0
  43. package/dist/types/index.d.ts.map +1 -0
  44. package/dist/types/index.js +6 -0
  45. package/dist/types/index.js.map +1 -0
  46. package/dist/types/reactor.d.ts +117 -0
  47. package/dist/types/reactor.d.ts.map +1 -0
  48. package/dist/types/reactor.js +2 -0
  49. package/dist/types/reactor.js.map +1 -0
  50. package/dist/types/result.d.ts +48 -0
  51. package/dist/types/result.d.ts.map +1 -0
  52. package/dist/types/result.js +2 -0
  53. package/dist/types/result.js.map +1 -0
  54. package/dist/types/transform.d.ts +7 -0
  55. package/dist/types/transform.d.ts.map +1 -0
  56. package/dist/types/transform.js +2 -0
  57. package/dist/types/transform.js.map +1 -0
  58. package/dist/types/variant.d.ts +18 -0
  59. package/dist/types/variant.d.ts.map +1 -0
  60. package/dist/types/variant.js +2 -0
  61. package/dist/types/variant.js.map +1 -0
  62. package/dist/utils/agent.d.ts +30 -1
  63. package/dist/utils/agent.d.ts.map +1 -0
  64. package/dist/utils/agent.js +118 -16
  65. package/dist/utils/agent.js.map +1 -0
  66. package/dist/utils/candid.d.ts +39 -1
  67. package/dist/utils/candid.d.ts.map +1 -0
  68. package/dist/utils/candid.js +76 -16
  69. package/dist/utils/candid.js.map +1 -0
  70. package/dist/utils/constants.d.ts +3 -4
  71. package/dist/utils/constants.d.ts.map +1 -0
  72. package/dist/utils/constants.js +7 -11
  73. package/dist/utils/constants.js.map +1 -0
  74. package/dist/utils/helper.d.ts +16 -39
  75. package/dist/utils/helper.d.ts.map +1 -0
  76. package/dist/utils/helper.js +53 -155
  77. package/dist/utils/helper.js.map +1 -0
  78. package/dist/utils/index.d.ts +4 -5
  79. package/dist/utils/index.d.ts.map +1 -0
  80. package/dist/utils/index.js +5 -49
  81. package/dist/utils/index.js.map +1 -0
  82. package/dist/utils/polling.d.ts +176 -0
  83. package/dist/utils/polling.d.ts.map +1 -0
  84. package/dist/utils/polling.js +170 -0
  85. package/dist/utils/polling.js.map +1 -0
  86. package/dist/version.d.ts +5 -0
  87. package/dist/version.d.ts.map +1 -0
  88. package/dist/version.js +5 -0
  89. package/dist/version.js.map +1 -0
  90. package/package.json +65 -39
  91. package/LICENSE.md +0 -8
  92. package/dist/classes/actor/index.d.ts +0 -34
  93. package/dist/classes/actor/index.js +0 -245
  94. package/dist/classes/actor/types.d.ts +0 -113
  95. package/dist/classes/actor/types.js +0 -2
  96. package/dist/classes/adapter/index.d.ts +0 -19
  97. package/dist/classes/adapter/index.js +0 -140
  98. package/dist/classes/adapter/types.d.ts +0 -14
  99. package/dist/classes/adapter/types.js +0 -2
  100. package/dist/classes/agent/index.d.ts +0 -37
  101. package/dist/classes/agent/index.js +0 -221
  102. package/dist/classes/agent/types.d.ts +0 -87
  103. package/dist/classes/agent/types.js +0 -2
  104. package/dist/classes/index.d.ts +0 -3
  105. package/dist/classes/index.js +0 -19
  106. package/dist/classes/types.d.ts +0 -15
  107. package/dist/classes/types.js +0 -20
  108. package/dist/createActorManager.d.ts +0 -12
  109. package/dist/createActorManager.js +0 -17
  110. package/dist/createAgentManager.d.ts +0 -12
  111. package/dist/createAgentManager.js +0 -17
  112. package/dist/createCandidAdapter.d.ts +0 -11
  113. package/dist/createCandidAdapter.js +0 -16
  114. package/dist/createReactorCore.d.ts +0 -10
  115. package/dist/createReactorCore.js +0 -112
  116. package/dist/createReactorStore.d.ts +0 -11
  117. package/dist/createReactorStore.js +0 -31
  118. package/dist/types.d.ts +0 -96
  119. package/dist/types.js +0 -17
  120. package/dist/utils/hash.d.ts +0 -12
  121. package/dist/utils/hash.js +0 -70
  122. package/dist/utils/principal.d.ts +0 -1
  123. package/dist/utils/principal.js +0 -17
@@ -0,0 +1,325 @@
1
+ import { Actor, DEFAULT_POLLING_OPTIONS } from "@icp-sdk/core/agent";
2
+ import { IDL } from "@icp-sdk/core/candid";
3
+ import { Principal } from "@icp-sdk/core/principal";
4
+ import { generateKey, extractOkResult } from "./utils/helper";
5
+ import { processQueryCallResponse, processUpdateCallResponse, } from "./utils/agent";
6
+ import { CallError, CanisterError } from "./errors";
7
+ /**
8
+ * Reactor class for interacting with IC canisters.
9
+ *
10
+ * This class provides core functionality for:
11
+ * - Direct agent calls using agent.call() and agent.query()
12
+ * - Query caching with TanStack Query integration
13
+ * - Method calls with result unwrapping
14
+ *
15
+ * @typeParam A - The actor service type
16
+ * @typeParam T - The type transformation to apply (default: candid = raw Candid types)
17
+ */
18
+ export class Reactor {
19
+ constructor(config) {
20
+ Object.defineProperty(this, "transform", {
21
+ enumerable: true,
22
+ configurable: true,
23
+ writable: true,
24
+ value: "candid"
25
+ });
26
+ Object.defineProperty(this, "clientManager", {
27
+ enumerable: true,
28
+ configurable: true,
29
+ writable: true,
30
+ value: void 0
31
+ });
32
+ Object.defineProperty(this, "name", {
33
+ enumerable: true,
34
+ configurable: true,
35
+ writable: true,
36
+ value: void 0
37
+ });
38
+ Object.defineProperty(this, "canisterId", {
39
+ enumerable: true,
40
+ configurable: true,
41
+ writable: true,
42
+ value: void 0
43
+ });
44
+ Object.defineProperty(this, "service", {
45
+ enumerable: true,
46
+ configurable: true,
47
+ writable: true,
48
+ value: void 0
49
+ });
50
+ Object.defineProperty(this, "pollingOptions", {
51
+ enumerable: true,
52
+ configurable: true,
53
+ writable: true,
54
+ value: void 0
55
+ });
56
+ this.clientManager = config.clientManager;
57
+ this.name = config.name || "";
58
+ this.pollingOptions =
59
+ "pollingOptions" in config && config.pollingOptions
60
+ ? config.pollingOptions
61
+ : DEFAULT_POLLING_OPTIONS;
62
+ if ("actor" in config && config.actor) {
63
+ // Legacy: if an actor is passed, extract service and canisterId from it
64
+ this.canisterId = Actor.canisterIdOf(config.actor);
65
+ this.service = Actor.interfaceOf(config.actor);
66
+ }
67
+ else if ("canisterId" in config && "idlFactory" in config) {
68
+ const { canisterId, idlFactory } = config;
69
+ this.canisterId = Principal.from(canisterId);
70
+ this.service = idlFactory({ IDL });
71
+ }
72
+ else {
73
+ throw new Error("Either actor or canisterId and idlFactory are required");
74
+ }
75
+ // Register this canister ID for delegation during login
76
+ this.clientManager.registerCanisterId(this.canisterId.toString(), this.name);
77
+ }
78
+ verifyCanister() {
79
+ // Optional: add any verification logic here
80
+ }
81
+ /**
82
+ * Get the service interface (IDL.ServiceClass) for this reactor.
83
+ * Useful for introspection and codec generation.
84
+ * @returns The service interface
85
+ */
86
+ getServiceInterface() {
87
+ return this.service;
88
+ }
89
+ /**
90
+ * Get the function class for a specific method.
91
+ * @param methodName - The name of the method
92
+ * @returns The function class or null if not found
93
+ */
94
+ getFuncClass(methodName) {
95
+ const field = this.service._fields.find(([name]) => name === methodName);
96
+ return field ? field[1] : null;
97
+ }
98
+ /**
99
+ * Check if a method is a query method (query or composite_query).
100
+ */
101
+ isQueryMethod(methodName) {
102
+ const func = this.getFuncClass(methodName);
103
+ if (!func)
104
+ return false;
105
+ return (func.annotations.includes("query") ||
106
+ func.annotations.includes("composite_query"));
107
+ }
108
+ // ══════════════════════════════════════════════════════════════════════
109
+ // TRANSFORMATION METHODS
110
+ // ══════════════════════════════════════════════════════════════════════
111
+ /**
112
+ * Transform arguments before calling the method.
113
+ * Default implementation returns arguments as-is.
114
+ */
115
+ transformArgs(_methodName, args) {
116
+ if (!args) {
117
+ return [];
118
+ }
119
+ return args;
120
+ }
121
+ /**
122
+ * Transform the result after calling the method.
123
+ * Default implementation extracts Ok value from Result types.
124
+ */
125
+ transformResult(_methodName, result) {
126
+ return extractOkResult(result);
127
+ }
128
+ // ══════════════════════════════════════════════════════════════════════
129
+ // QUERY KEY GENERATION
130
+ // ══════════════════════════════════════════════════════════════════════
131
+ generateQueryKey(params) {
132
+ const queryKeys = [this.canisterId.toString(), params.functionName];
133
+ if (params.args) {
134
+ const argKey = generateKey(params.args);
135
+ queryKeys.push(argKey);
136
+ }
137
+ if (params.queryKey) {
138
+ queryKeys.push(...params.queryKey);
139
+ }
140
+ return queryKeys;
141
+ }
142
+ // ══════════════════════════════════════════════════════════════════════
143
+ // QUERY OPTIONS
144
+ // ══════════════════════════════════════════════════════════════════════
145
+ getQueryOptions(params) {
146
+ return {
147
+ queryKey: this.generateQueryKey(params),
148
+ queryFn: async () => {
149
+ try {
150
+ return await this.callMethod(params);
151
+ }
152
+ catch (error) {
153
+ // Re-throw CanisterError as-is (business logic error from canister)
154
+ if (error instanceof CanisterError) {
155
+ throw error;
156
+ }
157
+ let message = `Failed to query method "${String(params.functionName)}": `;
158
+ // Wrap other errors in CallError (network/agent issues)
159
+ if (error instanceof Error) {
160
+ throw new CallError(message + error.message, error);
161
+ }
162
+ throw new CallError(message + String(error), error);
163
+ }
164
+ },
165
+ };
166
+ }
167
+ /**
168
+ * Invalidate cached queries for this canister.
169
+ * This will mark matching queries as stale and trigger a refetch for any active queries.
170
+ *
171
+ * @param params - Optional parameters to filter the invalidation
172
+ *
173
+ * @example
174
+ * ```typescript
175
+ * // Invalidate all queries for this canister
176
+ * reactor.invalidateQueries()
177
+ *
178
+ * // Invalidate only 'getUser' queries
179
+ * reactor.invalidateQueries({ functionName: 'getUser' })
180
+ *
181
+ * // Invalidate 'getUser' query for specific user
182
+ * reactor.invalidateQueries({ functionName: 'getUser', args: ['user-1'] })
183
+ * ```
184
+ */
185
+ invalidateQueries(params) {
186
+ const queryKey = params
187
+ ? this.generateQueryKey({
188
+ functionName: params.functionName,
189
+ args: params.args,
190
+ queryKey: params.queryKey,
191
+ })
192
+ : [this.canisterId.toString()];
193
+ this.queryClient.invalidateQueries({
194
+ queryKey,
195
+ });
196
+ }
197
+ // ══════════════════════════════════════════════════════════════════════
198
+ // METHOD CALLS - Using agent.call() and agent.query() directly
199
+ // ══════════════════════════════════════════════════════════════════════
200
+ /**
201
+ * Call a canister method directly using agent.call() or agent.query().
202
+ * This is the recommended approach for interacting with canisters.
203
+ *
204
+ * @example
205
+ * ```typescript
206
+ * // Query method
207
+ * const result = await reactor.callMethod({
208
+ * functionName: 'greet',
209
+ * args: ['world'],
210
+ * });
211
+ *
212
+ * // Update method with options
213
+ * const result = await reactor.callMethod({
214
+ * functionName: 'transfer',
215
+ * args: [{ to: principal, amount: 100n }],
216
+ * callConfig: { effectiveCanisterId: principal },
217
+ * });
218
+ * ```
219
+ */
220
+ async callMethod(params) {
221
+ const func = this.getFuncClass(params.functionName);
222
+ if (!func) {
223
+ throw new Error(`Method ${String(params.functionName)} not found`);
224
+ }
225
+ // Transform args
226
+ const transformedArgs = this.transformArgs(params.functionName, params.args);
227
+ // Encode arguments using Candid
228
+ const arg = IDL.encode(func.argTypes, transformedArgs);
229
+ // Determine if this is a query or update call
230
+ const isQuery = func.annotations.includes("query") ||
231
+ func.annotations.includes("composite_query");
232
+ // Execute the call
233
+ let rawResult;
234
+ if (isQuery) {
235
+ rawResult = await this.executeQuery(String(params.functionName), arg, params.callConfig);
236
+ }
237
+ else {
238
+ rawResult = await this.executeCall(String(params.functionName), arg, params.callConfig);
239
+ }
240
+ // Decode the result
241
+ const decoded = IDL.decode(func.retTypes, rawResult);
242
+ // Handle single, zero, and multiple return values appropriately
243
+ const result = (decoded.length === 0
244
+ ? undefined
245
+ : decoded.length === 1
246
+ ? decoded[0]
247
+ : decoded);
248
+ return this.transformResult(params.functionName, result);
249
+ }
250
+ /**
251
+ * Fetch data from the canister and cache it using React Query.
252
+ * This method ensures the data is in the cache and returns it.
253
+ */
254
+ async fetchQuery(params) {
255
+ const options = this.getQueryOptions(params);
256
+ return this.queryClient.ensureQueryData(options);
257
+ }
258
+ /**
259
+ * Get the current data from the cache without fetching.
260
+ */
261
+ getQueryData(params) {
262
+ const queryKey = this.generateQueryKey(params);
263
+ return this.queryClient.getQueryData(queryKey);
264
+ }
265
+ /**
266
+ * Execute a query call using agent.query()
267
+ */
268
+ async executeQuery(methodName, arg, callConfig) {
269
+ const agent = this.clientManager.agent;
270
+ const effectiveCanisterId = callConfig?.effectiveCanisterId ?? this.canisterId;
271
+ const result = await agent.query(this.canisterId, {
272
+ methodName,
273
+ arg,
274
+ effectiveCanisterId,
275
+ });
276
+ return processQueryCallResponse(result, this.canisterId, methodName);
277
+ }
278
+ /**
279
+ * Execute an update call using agent.call()
280
+ */
281
+ async executeCall(methodName, arg, callConfig) {
282
+ const agent = this.clientManager.agent;
283
+ const result = await agent.call(this.canisterId, {
284
+ methodName,
285
+ arg,
286
+ effectiveCanisterId: callConfig?.effectiveCanisterId,
287
+ nonce: callConfig?.nonce,
288
+ });
289
+ return await processUpdateCallResponse(result, this.canisterId, methodName, agent, this.pollingOptions);
290
+ }
291
+ // ══════════════════════════════════════════════════════════════════════
292
+ // SUBNET
293
+ // ══════════════════════════════════════════════════════════════════════
294
+ /**
295
+ * Get the subnet ID for this canister.
296
+ */
297
+ async subnetId() {
298
+ return this.clientManager.agent.getSubnetIdFromCanister(this.canisterId);
299
+ }
300
+ /**
301
+ * Get the subnet state for this canister.
302
+ */
303
+ async subnetState(options) {
304
+ const subnetId = await this.subnetId();
305
+ return this.clientManager.agent.readSubnetState(subnetId, options);
306
+ }
307
+ // ══════════════════════════════════════════════════════════════════════
308
+ // GETTERS
309
+ // ══════════════════════════════════════════════════════════════════════
310
+ /**
311
+ * Get the query client from clientManager.
312
+ * This is the recommended way to access the query client for direct queries.
313
+ */
314
+ get queryClient() {
315
+ return this.clientManager.queryClient;
316
+ }
317
+ /**
318
+ * Get the agent from clientManager.
319
+ * This is the recommended way to access the agent for direct calls.
320
+ */
321
+ get agent() {
322
+ return this.clientManager.agent;
323
+ }
324
+ }
325
+ //# sourceMappingURL=reactor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reactor.js","sourceRoot":"","sources":["../src/reactor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,89 @@
1
+ import type { HttpAgent, HttpAgentOptions, Identity } from "@icp-sdk/core/agent";
2
+ import type { AuthClient } from "@icp-sdk/auth/client";
3
+ import type { QueryClient } from "@tanstack/query-core";
4
+ /**
5
+ * Parameters for configuring a ClientManager instance.
6
+ *
7
+ * @property {QueryClient} queryClient - The TanStack QueryClient used for caching and state management.
8
+ * @property {number} [port] - The port used for the local IC replica (default is 4943).
9
+ * @property {HttpAgentOptions} [agentOptions] - Optional configuration for the underlying HttpAgent.
10
+ * @property {boolean} [withLocalEnv] - If true, configures the agent for a local environment.
11
+ * @property {boolean} [withProcessEnv] - If true, auto-configures the agent based on process.env settings.
12
+ */
13
+ export interface ClientManagerParameters {
14
+ /**
15
+ * The TanStack QueryClient used for caching and state management.
16
+ */
17
+ queryClient: QueryClient;
18
+ /**
19
+ * Optional configuration for the underlying HttpAgent.
20
+ */
21
+ agentOptions?: HttpAgentOptions;
22
+ /**
23
+ * The port used for the local IC replica (default is 4943).
24
+ */
25
+ port?: number;
26
+ /**
27
+ * If true, configures the agent for a local environment.
28
+ */
29
+ withLocalEnv?: boolean;
30
+ /**
31
+ * If true, auto-configures the agent based on process.env settings.
32
+ */
33
+ withProcessEnv?: boolean;
34
+ /**
35
+ * Optional pre-initialized AuthClient instance.
36
+ * If provided, the manager will use this instance instead of dynamically importing
37
+ * and creating a new one from `@icp-sdk/auth`.
38
+ * This is useful for environments where dynamic imports are not supported or
39
+ * when you want to share an AuthClient instance across multiple managers.
40
+ */
41
+ authClient?: AuthClient;
42
+ }
43
+ /**
44
+ * Represents the state of an agent.
45
+ */
46
+ export interface AgentState {
47
+ /**
48
+ * Indicates whether the agent has been initialized.
49
+ */
50
+ isInitialized: boolean;
51
+ /**
52
+ * Indicates whether the agent is in the process of initializing.
53
+ */
54
+ isInitializing: boolean;
55
+ /**
56
+ * Represents an error associated with the agent, if any.
57
+ */
58
+ error: Error | undefined;
59
+ /**
60
+ * Represents the network associated with the agent, if any.
61
+ */
62
+ network: string | undefined;
63
+ /**
64
+ * Indicates whether the agent is connected to a local network.
65
+ */
66
+ isLocalhost: boolean;
67
+ }
68
+ /**
69
+ * Represents the authentication state of an agent.
70
+ */
71
+ export interface AuthState {
72
+ identity: Identity | null;
73
+ /**
74
+ * Indicates whether the authentication process is ongoing.
75
+ */
76
+ isAuthenticating: boolean;
77
+ /**
78
+ * Indicates whether the agent is authenticated.
79
+ */
80
+ isAuthenticated: boolean;
81
+ /**
82
+ * Represents any error that occurred during authentication.
83
+ */
84
+ error: Error | undefined;
85
+ }
86
+ export interface UpdateAgentParameters extends HttpAgentOptions {
87
+ agent?: HttpAgent;
88
+ }
89
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/types/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,gBAAgB,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAA;AAChF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AACtD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAA;AAEvD;;;;;;;;GAQG;AACH,MAAM,WAAW,uBAAuB;IACtC;;OAEG;IACH,WAAW,EAAE,WAAW,CAAA;IACxB;;OAEG;IACH,YAAY,CAAC,EAAE,gBAAgB,CAAA;IAC/B;;OAEG;IACH,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;OAEG;IACH,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB;;OAEG;IACH,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB;;;;;;OAMG;IACH,UAAU,CAAC,EAAE,UAAU,CAAA;CACxB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB;;OAEG;IACH,aAAa,EAAE,OAAO,CAAA;IAEtB;;OAEG;IACH,cAAc,EAAE,OAAO,CAAA;IAEvB;;OAEG;IACH,KAAK,EAAE,KAAK,GAAG,SAAS,CAAA;IAExB;;OAEG;IACH,OAAO,EAAE,MAAM,GAAG,SAAS,CAAA;IAE3B;;OAEG;IACH,WAAW,EAAE,OAAO,CAAA;CACrB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAAA;IAEzB;;OAEG;IACH,gBAAgB,EAAE,OAAO,CAAA;IAEzB;;OAEG;IACH,eAAe,EAAE,OAAO,CAAA;IAExB;;OAEG;IACH,KAAK,EAAE,KAAK,GAAG,SAAS,CAAA;CACzB;AAED,MAAM,WAAW,qBAAsB,SAAQ,gBAAgB;IAC7D,KAAK,CAAC,EAAE,SAAS,CAAA;CAClB"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/types/client.ts"],"names":[],"mappings":""}
@@ -0,0 +1,6 @@
1
+ export * from "./reactor";
2
+ export * from "./client";
3
+ export * from "./result";
4
+ export * from "./transform";
5
+ export * from "./variant";
6
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA"}
@@ -0,0 +1,6 @@
1
+ export * from "./reactor";
2
+ export * from "./client";
3
+ export * from "./result";
4
+ export * from "./transform";
5
+ export * from "./variant";
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/types/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,UAAU,CAAA;AACxB,cAAc,UAAU,CAAA;AACxB,cAAc,aAAa,CAAA;AAC3B,cAAc,WAAW,CAAA"}
@@ -0,0 +1,117 @@
1
+ import type { ActorMethod, ActorSubclass, CallConfig, ActorConfig } from "@icp-sdk/core/agent";
2
+ import type { Principal } from "@icp-sdk/core/principal";
3
+ import type { IDL } from "@icp-sdk/core/candid";
4
+ import type { QueryKey } from "@tanstack/query-core";
5
+ import type { ClientManager } from "../client";
6
+ import type { CallError, CanisterError } from "../errors";
7
+ import type { OkResult, ErrResult } from "./result";
8
+ import type { DisplayOf, ActorDisplayCodec } from "../display";
9
+ export interface DefaultActorType {
10
+ [key: string]: ActorMethod<any, any>;
11
+ }
12
+ export type BaseActor<T = DefaultActorType> = ActorSubclass<T>;
13
+ export type FunctionName<A = BaseActor> = Extract<keyof A, string>;
14
+ export type FunctionType = "query" | "update";
15
+ export type CanisterId = string | Principal;
16
+ export type ActorMethodParameters<T> = T extends ActorMethod<infer Args, any> ? Args : never;
17
+ export type ActorMethodReturnType<T> = T extends ActorMethod<any, infer Ret> ? Ret : never;
18
+ interface BaseReactorParameters extends Omit<ActorConfig, "agent" | "effectiveCanisterId" | "canisterId"> {
19
+ clientManager: ClientManager;
20
+ name?: string;
21
+ }
22
+ export type ReactorParameters<A = BaseActor> = (BaseReactorParameters & {
23
+ idlFactory: IDL.InterfaceFactory;
24
+ canisterId: CanisterId;
25
+ }) | (BaseReactorParameters & {
26
+ actor: A;
27
+ });
28
+ export type ActorMethodType<A, M extends keyof A> = {
29
+ (...args: ActorMethodParameters<A[M]>): Promise<ActorMethodReturnType<A[M]>>;
30
+ withOptions: (options?: CallConfig) => (...args: ActorMethodParameters<A[M]>) => Promise<ActorMethodReturnType<A[M]>>;
31
+ };
32
+ /**
33
+ * Registry for argument transformations.
34
+ * Users can augment this interface to add custom transforms:
35
+ *
36
+ * @example
37
+ * ```typescript
38
+ * // In your code, augment the module
39
+ * declare module '@ic-reactor/core' {
40
+ * interface TransformArgsRegistry<T> {
41
+ * myCustom: MyCustomArgTransform<T>
42
+ * }
43
+ * }
44
+ * ```
45
+ */
46
+ /**
47
+ * Helper to extract arguments type for codecs (unwraps single argument tuples).
48
+ */
49
+ export type ArgsType<T> = T extends readonly [infer U] ? U : T extends readonly [] ? null : T;
50
+ export interface TransformArgsRegistry<T> {
51
+ candid: T;
52
+ display: AsDisplayArgs<T>;
53
+ }
54
+ /**
55
+ * Registry for return type transformations.
56
+ * Users can augment this interface to add custom transforms:
57
+ *
58
+ * @example
59
+ * ```typescript
60
+ * declare module '@ic-reactor/core' {
61
+ * interface TransformReturnRegistry<T> {
62
+ * myCustom: MyCustomReturnTransform<T>
63
+ * }
64
+ * }
65
+ * ```
66
+ */
67
+ export interface TransformReturnRegistry<T> {
68
+ candid: T;
69
+ display: DisplayOf<T>;
70
+ }
71
+ /**
72
+ * Helper type to transform args array elements using ToDisplay
73
+ */
74
+ type AsDisplayArgs<T> = T extends readonly unknown[] ? {
75
+ [K in keyof T]: DisplayOf<T[K]>;
76
+ } : DisplayOf<T>;
77
+ /**
78
+ * Union of all available transform keys.
79
+ * Automatically includes any user-defined transforms via module augmentation.
80
+ */
81
+ export type TransformKey = keyof TransformArgsRegistry<unknown>;
82
+ /**
83
+ * Apply argument transformation based on the transform key.
84
+ * Looks up the transform in TransformArgsRegistry.
85
+ */
86
+ export type ReactorArgs<A, M extends FunctionName<A>, Transform extends TransformKey = "candid"> = TransformArgsRegistry<ActorMethodParameters<A[M]>>[Transform];
87
+ /**
88
+ * Apply return type transformation based on the transform key.
89
+ * Looks up the transform in TransformReturnRegistry.
90
+ */
91
+ export type ReactorReturnOk<A, M extends FunctionName<A>, Transform extends TransformKey = "candid"> = TransformReturnRegistry<OkResult<ActorMethodReturnType<A[M]>>>[Transform];
92
+ export type ReactorReturnErr<A, M extends FunctionName<A>, Transform extends TransformKey = "candid"> = CanisterError<TransformReturnRegistry<ErrResult<ActorMethodReturnType<A[M]>>>[Transform]> | CallError;
93
+ /**
94
+ * Helper type for actor method codecs returend by getCodec
95
+ */
96
+ export interface ActorMethodCodecs<A, M extends FunctionName<A>> {
97
+ args: ActorDisplayCodec<ArgsType<ActorMethodParameters<A[M]>>, DisplayOf<ArgsType<ActorMethodParameters<A[M]>>>>;
98
+ result: ActorDisplayCodec<ActorMethodReturnType<A[M]>, DisplayOf<ActorMethodReturnType<A[M]>>>;
99
+ }
100
+ /**
101
+ * Basic query parameters for reactor cache operations.
102
+ * Used by: generateQueryKey, getQueryData
103
+ */
104
+ export interface ReactorQueryParams<A, M extends FunctionName<A>, T extends TransformKey = "candid"> {
105
+ functionName: M;
106
+ args?: ReactorArgs<A, M, T>;
107
+ queryKey?: QueryKey;
108
+ }
109
+ /**
110
+ * Query parameters with optional call configuration.
111
+ * Used by: getQueryOptions, fetchQuery, callMethod
112
+ */
113
+ export interface ReactorCallParams<A, M extends FunctionName<A>, T extends TransformKey = "candid"> extends ReactorQueryParams<A, M, T> {
114
+ callConfig?: CallConfig;
115
+ }
116
+ export {};
117
+ //# sourceMappingURL=reactor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reactor.d.ts","sourceRoot":"","sources":["../../src/types/reactor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=reactor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reactor.js","sourceRoot":"","sources":["../../src/types/reactor.ts"],"names":[],"mappings":""}
@@ -0,0 +1,48 @@
1
+ export type UnwrapOkErrResult<T> = T extends {
2
+ Ok: infer U;
3
+ } ? U : T extends {
4
+ ok: infer U;
5
+ } ? U : T extends {
6
+ Err: infer E;
7
+ } ? E : T extends {
8
+ err: infer E;
9
+ } ? E : T;
10
+ /**
11
+ * Extract the Ok value from a Result type.
12
+ * Supports both uppercase (Ok/Err - Rust) and lowercase (ok/err - Motoko).
13
+ * - If T is { Ok: U } or { ok: U }, returns U
14
+ * - If T is { Err: E } or { err: E }, returns never (filters it out from unions)
15
+ * - If T is { Ok: U } | { Err: E }, returns U (the Err variant is filtered out)
16
+ * - Otherwise, returns T as-is
17
+ */
18
+ export type OkResult<T> = T extends {
19
+ Err: unknown;
20
+ } ? never : T extends {
21
+ err: unknown;
22
+ } ? never : T extends {
23
+ Ok: infer U;
24
+ } ? U : T extends {
25
+ ok: infer U;
26
+ } ? U : T;
27
+ export type ErrResult<T> = T extends {
28
+ Ok: unknown;
29
+ } ? never : T extends {
30
+ ok: unknown;
31
+ } ? never : T extends {
32
+ Err: infer E;
33
+ } ? E : T extends {
34
+ err: infer E;
35
+ } ? E : never;
36
+ /**
37
+ * Check if T is a Result type ({ Ok: U } | { Err: E } or { ok: U } | { err: E })
38
+ */
39
+ export type IsOkErrResultType<T> = T extends {
40
+ Ok: unknown;
41
+ } ? true : T extends {
42
+ ok: unknown;
43
+ } ? true : T extends {
44
+ Err: unknown;
45
+ } ? true : T extends {
46
+ err: unknown;
47
+ } ? true : false;
48
+ //# sourceMappingURL=result.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.d.ts","sourceRoot":"","sources":["../../src/types/result.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAC,CAAA;CAAE,GACxD,CAAC,GACD,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAC,CAAA;CAAE,GACvB,CAAC,GACD,CAAC,SAAS;IAAE,GAAG,EAAE,MAAM,CAAC,CAAA;CAAE,GACxB,CAAC,GACD,CAAC,SAAS;IAAE,GAAG,EAAE,MAAM,CAAC,CAAA;CAAE,GACxB,CAAC,GACD,CAAC,CAAA;AAEX;;;;;;;GAOG;AACH,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,CAAC,SAAS;IAAE,GAAG,EAAE,OAAO,CAAA;CAAE,GAChD,KAAK,GACL,CAAC,SAAS;IAAE,GAAG,EAAE,OAAO,CAAA;CAAE,GACxB,KAAK,GACL,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAC,CAAA;CAAE,GACvB,CAAC,GACD,CAAC,SAAS;IAAE,EAAE,EAAE,MAAM,CAAC,CAAA;CAAE,GACvB,CAAC,GACD,CAAC,CAAA;AAEX,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS;IAAE,EAAE,EAAE,OAAO,CAAA;CAAE,GAChD,KAAK,GACL,CAAC,SAAS;IAAE,EAAE,EAAE,OAAO,CAAA;CAAE,GACvB,KAAK,GACL,CAAC,SAAS;IAAE,GAAG,EAAE,MAAM,CAAC,CAAA;CAAE,GACxB,CAAC,GACD,CAAC,SAAS;IAAE,GAAG,EAAE,MAAM,CAAC,CAAA;CAAE,GACxB,CAAC,GACD,KAAK,CAAA;AAEf;;GAEG;AACH,MAAM,MAAM,iBAAiB,CAAC,CAAC,IAAI,CAAC,SAAS;IAAE,EAAE,EAAE,OAAO,CAAA;CAAE,GACxD,IAAI,GACJ,CAAC,SAAS;IAAE,EAAE,EAAE,OAAO,CAAA;CAAE,GACvB,IAAI,GACJ,CAAC,SAAS;IAAE,GAAG,EAAE,OAAO,CAAA;CAAE,GACxB,IAAI,GACJ,CAAC,SAAS;IAAE,GAAG,EAAE,OAAO,CAAA;CAAE,GACxB,IAAI,GACJ,KAAK,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=result.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"result.js","sourceRoot":"","sources":["../../src/types/result.ts"],"names":[],"mappings":""}