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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (123) hide show
  1. package/dist/client.d.ts +161 -0
  2. package/dist/client.d.ts.map +1 -0
  3. package/dist/client.js +499 -0
  4. package/dist/client.js.map +1 -0
  5. package/dist/display/helper.d.ts +10 -0
  6. package/dist/display/helper.d.ts.map +1 -0
  7. package/dist/display/helper.js +67 -0
  8. package/dist/display/helper.js.map +1 -0
  9. package/dist/display/index.d.ts +4 -0
  10. package/dist/display/index.d.ts.map +1 -0
  11. package/dist/display/index.js +4 -0
  12. package/dist/display/index.js.map +1 -0
  13. package/dist/display/types.d.ts +31 -0
  14. package/dist/display/types.d.ts.map +1 -0
  15. package/dist/display/types.js +2 -0
  16. package/dist/display/types.js.map +1 -0
  17. package/dist/display/visitor.d.ts +28 -0
  18. package/dist/display/visitor.d.ts.map +1 -0
  19. package/dist/display/visitor.js +318 -0
  20. package/dist/display/visitor.js.map +1 -0
  21. package/dist/display-reactor.d.ts +245 -0
  22. package/dist/display-reactor.d.ts.map +1 -0
  23. package/dist/display-reactor.js +331 -0
  24. package/dist/display-reactor.js.map +1 -0
  25. package/dist/errors/index.d.ts +118 -0
  26. package/dist/errors/index.d.ts.map +1 -0
  27. package/dist/errors/index.js +204 -0
  28. package/dist/errors/index.js.map +1 -0
  29. package/dist/index.d.ts +9 -8
  30. package/dist/index.d.ts.map +1 -0
  31. package/dist/index.js +9 -47
  32. package/dist/index.js.map +1 -0
  33. package/dist/reactor.d.ts +133 -0
  34. package/dist/reactor.d.ts.map +1 -0
  35. package/dist/reactor.js +325 -0
  36. package/dist/reactor.js.map +1 -0
  37. package/dist/types/client.d.ts +89 -0
  38. package/dist/types/client.d.ts.map +1 -0
  39. package/dist/types/client.js +2 -0
  40. package/dist/types/client.js.map +1 -0
  41. package/dist/types/index.d.ts +6 -0
  42. package/dist/types/index.d.ts.map +1 -0
  43. package/dist/types/index.js +6 -0
  44. package/dist/types/index.js.map +1 -0
  45. package/dist/types/reactor.d.ts +117 -0
  46. package/dist/types/reactor.d.ts.map +1 -0
  47. package/dist/types/reactor.js +2 -0
  48. package/dist/types/reactor.js.map +1 -0
  49. package/dist/types/result.d.ts +48 -0
  50. package/dist/types/result.d.ts.map +1 -0
  51. package/dist/types/result.js +2 -0
  52. package/dist/types/result.js.map +1 -0
  53. package/dist/types/transform.d.ts +7 -0
  54. package/dist/types/transform.d.ts.map +1 -0
  55. package/dist/types/transform.js +2 -0
  56. package/dist/types/transform.js.map +1 -0
  57. package/dist/types/variant.d.ts +18 -0
  58. package/dist/types/variant.d.ts.map +1 -0
  59. package/dist/types/variant.js +2 -0
  60. package/dist/types/variant.js.map +1 -0
  61. package/dist/utils/agent.d.ts +30 -1
  62. package/dist/utils/agent.d.ts.map +1 -0
  63. package/dist/utils/agent.js +118 -16
  64. package/dist/utils/agent.js.map +1 -0
  65. package/dist/utils/candid.d.ts +39 -1
  66. package/dist/utils/candid.d.ts.map +1 -0
  67. package/dist/utils/candid.js +76 -16
  68. package/dist/utils/candid.js.map +1 -0
  69. package/dist/utils/constants.d.ts +3 -4
  70. package/dist/utils/constants.d.ts.map +1 -0
  71. package/dist/utils/constants.js +7 -11
  72. package/dist/utils/constants.js.map +1 -0
  73. package/dist/utils/helper.d.ts +16 -39
  74. package/dist/utils/helper.d.ts.map +1 -0
  75. package/dist/utils/helper.js +53 -155
  76. package/dist/utils/helper.js.map +1 -0
  77. package/dist/utils/index.d.ts +4 -5
  78. package/dist/utils/index.d.ts.map +1 -0
  79. package/dist/utils/index.js +5 -49
  80. package/dist/utils/index.js.map +1 -0
  81. package/dist/utils/polling.d.ts +176 -0
  82. package/dist/utils/polling.d.ts.map +1 -0
  83. package/dist/utils/polling.js +170 -0
  84. package/dist/utils/polling.js.map +1 -0
  85. package/dist/version.d.ts +5 -0
  86. package/dist/version.d.ts.map +1 -0
  87. package/dist/version.js +5 -0
  88. package/dist/version.js.map +1 -0
  89. package/package.json +65 -39
  90. package/LICENSE.md +0 -8
  91. package/README.md +0 -283
  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,118 @@
1
+ import { NullishType } from "../display/types";
2
+ /**
3
+ * Interface representing the generic shape of an API error.
4
+ */
5
+ export interface ApiError {
6
+ code: string;
7
+ message: NullishType<string>;
8
+ details: NullishType<Map<string, string>>;
9
+ }
10
+ /**
11
+ * Error thrown when there's an issue calling the canister.
12
+ * This includes network errors, agent errors, canister not found, etc.
13
+ */
14
+ export declare class CallError extends Error {
15
+ readonly cause?: unknown;
16
+ constructor(message: string, cause?: unknown);
17
+ }
18
+ /**
19
+ * Error thrown when the canister returns an Err result.
20
+ * The `err` property contains the typed error value from the canister.
21
+ *
22
+ * It also supports accessing `code`, `message`, and `details` directly
23
+ * if the error object follows the common API error format or is a variant.
24
+ *
25
+ * @typeParam E - The type of the error value from the canister
26
+ */
27
+ export declare class CanisterError<E = unknown> extends Error {
28
+ /** The raw error value from the canister */
29
+ readonly err: E;
30
+ /** The error code, extracted from the error object or variant key */
31
+ readonly code: string;
32
+ /** Optional error details Map */
33
+ readonly details: NullishType<Map<string, string>>;
34
+ constructor(err: E);
35
+ /**
36
+ * Type guard to check if an error object follows the API error format.
37
+ */
38
+ static isApiError(error: unknown): error is ApiError;
39
+ /**
40
+ * Factory method to create a CanisterError from any error.
41
+ * If the input is already a CanisterError, it returns it.
42
+ * If it's an API error shape, it wraps it.
43
+ * Otherwise, it creates a new CanisterError with an "UNKNOWN_ERROR" code.
44
+ */
45
+ static create(error: unknown, message?: string): CanisterError;
46
+ }
47
+ /**
48
+ * Type guard to check if an error is a CanisterError.
49
+ * Preserves the generic type E from the input when used in type narrowing.
50
+ *
51
+ * @example
52
+ * ```typescript
53
+ * // err is typed as CanisterError<TransferError> | CallError
54
+ * if (isCanisterError(err)) {
55
+ * // err.err is typed as TransferError (preserved!)
56
+ * console.log(err.err)
57
+ * }
58
+ * ```
59
+ */
60
+ export declare function isCanisterError<E>(error: CanisterError<E> | CallError): error is CanisterError<E>;
61
+ export declare function isCanisterError(error: unknown): error is CanisterError<unknown>;
62
+ /**
63
+ * Type guard to check if an error is a CallError
64
+ */
65
+ export declare function isCallError(error: unknown): error is CallError;
66
+ /**
67
+ * Represents a single validation issue
68
+ */
69
+ export interface ValidationIssue {
70
+ /** Path to the invalid field (e.g., ["to", "amount"]) */
71
+ path: (string | number)[];
72
+ /** Human-readable error message */
73
+ message: string;
74
+ /** Validation code (e.g., "required", "min_length") */
75
+ code?: string;
76
+ }
77
+ /**
78
+ * Error thrown when argument validation fails before calling the canister.
79
+ * Contains detailed information about which fields failed validation.
80
+ *
81
+ * @example
82
+ * ```typescript
83
+ * try {
84
+ * await reactor.callMethod({
85
+ * functionName: "transfer",
86
+ * args: [{ to: "", amount: -100 }],
87
+ * })
88
+ * } catch (error) {
89
+ * if (isValidationError(error)) {
90
+ * console.log(error.issues)
91
+ * // [
92
+ * // { path: ["to"], message: "Recipient is required" },
93
+ * // { path: ["amount"], message: "Amount must be positive" }
94
+ * // ]
95
+ * }
96
+ * }
97
+ * ```
98
+ */
99
+ export declare class ValidationError extends Error {
100
+ /** Array of validation issues */
101
+ readonly issues: ValidationIssue[];
102
+ /** The method name that failed validation */
103
+ readonly methodName: string;
104
+ constructor(methodName: string, issues: ValidationIssue[]);
105
+ /**
106
+ * Get issues for a specific field path
107
+ */
108
+ getIssuesForPath(path: string): ValidationIssue[];
109
+ /**
110
+ * Check if a specific field has errors
111
+ */
112
+ hasErrorForPath(path: string): boolean;
113
+ }
114
+ /**
115
+ * Type guard to check if an error is a ValidationError
116
+ */
117
+ export declare function isValidationError(error: unknown): error is ValidationError;
118
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C;;GAEG;AACH,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,WAAW,CAAC,MAAM,CAAC,CAAA;IAC5B,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;CAC1C;AAED;;;GAGG;AACH,qBAAa,SAAU,SAAQ,KAAK;IAClC,SAAgB,KAAK,CAAC,EAAE,OAAO,CAAA;gBAEnB,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAU7C;AAED;;;;;;;;GAQG;AACH,qBAAa,aAAa,CAAC,CAAC,GAAG,OAAO,CAAE,SAAQ,KAAK;IACnD,4CAA4C;IAC5C,SAAgB,GAAG,EAAE,CAAC,CAAA;IACtB,qEAAqE;IACrE,SAAgB,IAAI,EAAE,MAAM,CAAA;IAC5B,iCAAiC;IACjC,SAAgB,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;gBAE7C,GAAG,EAAE,CAAC;IAsDlB;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,QAAQ;IAQpD;;;;;OAKG;IACH,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,aAAa;CAkB/D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAC/B,KAAK,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,SAAS,GAClC,KAAK,IAAI,aAAa,CAAC,CAAC,CAAC,CAAA;AAC5B,wBAAgB,eAAe,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,aAAa,CAAC,OAAO,CAAC,CAAA;AAOhF;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,SAAS,CAE9D;AAMD;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,yDAAyD;IACzD,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAA;IACzB,mCAAmC;IACnC,OAAO,EAAE,MAAM,CAAA;IACf,uDAAuD;IACvD,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,qBAAa,eAAgB,SAAQ,KAAK;IACxC,iCAAiC;IACjC,SAAgB,MAAM,EAAE,eAAe,EAAE,CAAA;IACzC,6CAA6C;IAC7C,SAAgB,UAAU,EAAE,MAAM,CAAA;gBAEtB,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,EAAE;IAazD;;OAEG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,EAAE;IAIjD;;OAEG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAGvC;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,eAAe,CAE1E"}
@@ -0,0 +1,204 @@
1
+ /**
2
+ * Error thrown when there's an issue calling the canister.
3
+ * This includes network errors, agent errors, canister not found, etc.
4
+ */
5
+ export class CallError extends Error {
6
+ constructor(message, cause) {
7
+ super(message);
8
+ Object.defineProperty(this, "cause", {
9
+ enumerable: true,
10
+ configurable: true,
11
+ writable: true,
12
+ value: void 0
13
+ });
14
+ this.name = "CallError";
15
+ this.cause = cause;
16
+ // Maintains proper stack trace for where our error was thrown
17
+ if (Error.captureStackTrace) {
18
+ Error.captureStackTrace(this, CallError);
19
+ }
20
+ }
21
+ }
22
+ /**
23
+ * Error thrown when the canister returns an Err result.
24
+ * The `err` property contains the typed error value from the canister.
25
+ *
26
+ * It also supports accessing `code`, `message`, and `details` directly
27
+ * if the error object follows the common API error format or is a variant.
28
+ *
29
+ * @typeParam E - The type of the error value from the canister
30
+ */
31
+ export class CanisterError extends Error {
32
+ constructor(err) {
33
+ let code;
34
+ let message;
35
+ let details = undefined;
36
+ let isApiShape = false;
37
+ if (typeof err === "object" && err !== null) {
38
+ // 1. Check for structured ApiError shape (has code)
39
+ if ("code" in err && typeof err.code === "string") {
40
+ code = err.code;
41
+ isApiShape = true;
42
+ if ("message" in err && typeof err.message === "string") {
43
+ message = err.message;
44
+ }
45
+ if ("details" in err) {
46
+ details = err.details;
47
+ }
48
+ }
49
+ // 2. Check for ic-reactor transformed variant shape (_type)
50
+ else if ("_type" in err && typeof err._type === "string") {
51
+ code = err._type;
52
+ }
53
+ // 3. Simple variant check (single key object)
54
+ else {
55
+ const keys = Object.keys(err);
56
+ if (keys.length === 1) {
57
+ code = keys[0];
58
+ }
59
+ }
60
+ }
61
+ const finalCode = code ?? "UNKNOWN_ERROR";
62
+ const finalMessage = message ??
63
+ (typeof err === "object" && err !== null
64
+ ? JSON.stringify(err, (_, v) => (typeof v === "bigint" ? v.toString() : v), 2)
65
+ : String(err));
66
+ super(isApiShape ? finalMessage : `Canister Error: ${finalMessage}`);
67
+ /** The raw error value from the canister */
68
+ Object.defineProperty(this, "err", {
69
+ enumerable: true,
70
+ configurable: true,
71
+ writable: true,
72
+ value: void 0
73
+ });
74
+ /** The error code, extracted from the error object or variant key */
75
+ Object.defineProperty(this, "code", {
76
+ enumerable: true,
77
+ configurable: true,
78
+ writable: true,
79
+ value: void 0
80
+ });
81
+ /** Optional error details Map */
82
+ Object.defineProperty(this, "details", {
83
+ enumerable: true,
84
+ configurable: true,
85
+ writable: true,
86
+ value: void 0
87
+ });
88
+ this.name = "CanisterError";
89
+ this.err = err;
90
+ this.code = finalCode;
91
+ this.details = details;
92
+ // Maintains proper stack trace for where our error was thrown
93
+ if (Error.captureStackTrace) {
94
+ Error.captureStackTrace(this, CanisterError);
95
+ }
96
+ }
97
+ /**
98
+ * Type guard to check if an error object follows the API error format.
99
+ */
100
+ static isApiError(error) {
101
+ if (typeof error !== "object" || error === null) {
102
+ return false;
103
+ }
104
+ return "code" in error && "message" in error && "details" in error;
105
+ }
106
+ /**
107
+ * Factory method to create a CanisterError from any error.
108
+ * If the input is already a CanisterError, it returns it.
109
+ * If it's an API error shape, it wraps it.
110
+ * Otherwise, it creates a new CanisterError with an "UNKNOWN_ERROR" code.
111
+ */
112
+ static create(error, message) {
113
+ if (error instanceof CanisterError) {
114
+ return error;
115
+ }
116
+ if (CanisterError.isApiError(error)) {
117
+ return new CanisterError(error);
118
+ }
119
+ return new CanisterError({
120
+ code: "UNKNOWN_ERROR",
121
+ message: error instanceof Error
122
+ ? error.message
123
+ : message || "An unknown error occurred",
124
+ details: undefined,
125
+ });
126
+ }
127
+ }
128
+ export function isCanisterError(error) {
129
+ return error instanceof CanisterError;
130
+ }
131
+ /**
132
+ * Type guard to check if an error is a CallError
133
+ */
134
+ export function isCallError(error) {
135
+ return error instanceof CallError;
136
+ }
137
+ /**
138
+ * Error thrown when argument validation fails before calling the canister.
139
+ * Contains detailed information about which fields failed validation.
140
+ *
141
+ * @example
142
+ * ```typescript
143
+ * try {
144
+ * await reactor.callMethod({
145
+ * functionName: "transfer",
146
+ * args: [{ to: "", amount: -100 }],
147
+ * })
148
+ * } catch (error) {
149
+ * if (isValidationError(error)) {
150
+ * console.log(error.issues)
151
+ * // [
152
+ * // { path: ["to"], message: "Recipient is required" },
153
+ * // { path: ["amount"], message: "Amount must be positive" }
154
+ * // ]
155
+ * }
156
+ * }
157
+ * ```
158
+ */
159
+ export class ValidationError extends Error {
160
+ constructor(methodName, issues) {
161
+ const messages = issues.map((i) => i.message).join(", ");
162
+ super(`Validation failed for "${methodName}": ${messages}`);
163
+ /** Array of validation issues */
164
+ Object.defineProperty(this, "issues", {
165
+ enumerable: true,
166
+ configurable: true,
167
+ writable: true,
168
+ value: void 0
169
+ });
170
+ /** The method name that failed validation */
171
+ Object.defineProperty(this, "methodName", {
172
+ enumerable: true,
173
+ configurable: true,
174
+ writable: true,
175
+ value: void 0
176
+ });
177
+ this.name = "ValidationError";
178
+ this.methodName = methodName;
179
+ this.issues = issues;
180
+ // Maintains proper stack trace for where our error was thrown
181
+ if (Error.captureStackTrace) {
182
+ Error.captureStackTrace(this, ValidationError);
183
+ }
184
+ }
185
+ /**
186
+ * Get issues for a specific field path
187
+ */
188
+ getIssuesForPath(path) {
189
+ return this.issues.filter((issue) => issue.path.includes(path));
190
+ }
191
+ /**
192
+ * Check if a specific field has errors
193
+ */
194
+ hasErrorForPath(path) {
195
+ return this.issues.some((issue) => issue.path.includes(path));
196
+ }
197
+ }
198
+ /**
199
+ * Type guard to check if an error is a ValidationError
200
+ */
201
+ export function isValidationError(error) {
202
+ return error instanceof ValidationError;
203
+ }
204
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,8 +1,9 @@
1
- export * from "./createReactorCore";
2
- export * from "./createReactorStore";
3
- export * from "./createCandidAdapter";
4
- export * from "./createActorManager";
5
- export * from "./createAgentManager";
6
- export * as classes from "./classes";
7
- export * as types from "./types";
8
- export * as utils from "./utils";
1
+ export * from "./reactor";
2
+ export * from "./client";
3
+ export * from "./utils";
4
+ export * from "./display";
5
+ export * from "./display-reactor";
6
+ export * from "./types";
7
+ export * from "./errors";
8
+ export * from "./version";
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,UAAU,CAAA;AACxB,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,mBAAmB,CAAA;AACjC,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA"}
package/dist/index.js CHANGED
@@ -1,47 +1,9 @@
1
- "use strict";
2
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
- if (k2 === undefined) k2 = k;
4
- var desc = Object.getOwnPropertyDescriptor(m, k);
5
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
- desc = { enumerable: true, get: function() { return m[k]; } };
7
- }
8
- Object.defineProperty(o, k2, desc);
9
- }) : (function(o, m, k, k2) {
10
- if (k2 === undefined) k2 = k;
11
- o[k2] = m[k];
12
- }));
13
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
- Object.defineProperty(o, "default", { enumerable: true, value: v });
15
- }) : function(o, v) {
16
- o["default"] = v;
17
- });
18
- var __exportStar = (this && this.__exportStar) || function(m, exports) {
19
- for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
20
- };
21
- var __importStar = (this && this.__importStar) || (function () {
22
- var ownKeys = function(o) {
23
- ownKeys = Object.getOwnPropertyNames || function (o) {
24
- var ar = [];
25
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
26
- return ar;
27
- };
28
- return ownKeys(o);
29
- };
30
- return function (mod) {
31
- if (mod && mod.__esModule) return mod;
32
- var result = {};
33
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
34
- __setModuleDefault(result, mod);
35
- return result;
36
- };
37
- })();
38
- Object.defineProperty(exports, "__esModule", { value: true });
39
- exports.utils = exports.types = exports.classes = void 0;
40
- __exportStar(require("./createReactorCore"), exports);
41
- __exportStar(require("./createReactorStore"), exports);
42
- __exportStar(require("./createCandidAdapter"), exports);
43
- __exportStar(require("./createActorManager"), exports);
44
- __exportStar(require("./createAgentManager"), exports);
45
- exports.classes = __importStar(require("./classes"));
46
- exports.types = __importStar(require("./types"));
47
- exports.utils = __importStar(require("./utils"));
1
+ export * from "./reactor";
2
+ export * from "./client";
3
+ export * from "./utils";
4
+ export * from "./display";
5
+ export * from "./display-reactor";
6
+ export * from "./types";
7
+ export * from "./errors";
8
+ export * from "./version";
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAA;AACzB,cAAc,UAAU,CAAA;AACxB,cAAc,SAAS,CAAA;AACvB,cAAc,WAAW,CAAA;AACzB,cAAc,mBAAmB,CAAA;AACjC,cAAc,SAAS,CAAA;AACvB,cAAc,UAAU,CAAA;AACxB,cAAc,WAAW,CAAA"}
@@ -0,0 +1,133 @@
1
+ import type { CallConfig, PollingOptions, ReadStateOptions } from "@icp-sdk/core/agent";
2
+ import type { ClientManager } from "./client";
3
+ import type { QueryKey, FetchQueryOptions } from "@tanstack/query-core";
4
+ import type { ReactorParameters, BaseActor, ActorMethodParameters, ActorMethodReturnType, FunctionName, TransformKey, ReactorArgs, ReactorReturnOk, ReactorQueryParams, ReactorCallParams } from "./types/reactor";
5
+ import { IDL } from "@icp-sdk/core/candid";
6
+ import { Principal } from "@icp-sdk/core/principal";
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 declare class Reactor<A = BaseActor, T extends TransformKey = "candid"> {
19
+ /** Phantom type brand for inference - never assigned at runtime */
20
+ readonly _actor: A;
21
+ readonly transform: T;
22
+ clientManager: ClientManager;
23
+ name: string;
24
+ canisterId: Principal;
25
+ service: IDL.ServiceClass;
26
+ pollingOptions: PollingOptions;
27
+ constructor(config: ReactorParameters<A>);
28
+ protected verifyCanister(): void;
29
+ /**
30
+ * Get the service interface (IDL.ServiceClass) for this reactor.
31
+ * Useful for introspection and codec generation.
32
+ * @returns The service interface
33
+ */
34
+ getServiceInterface(): IDL.ServiceClass;
35
+ /**
36
+ * Get the function class for a specific method.
37
+ * @param methodName - The name of the method
38
+ * @returns The function class or null if not found
39
+ */
40
+ protected getFuncClass<M extends FunctionName<A>>(methodName: M): IDL.FuncClass | null;
41
+ /**
42
+ * Check if a method is a query method (query or composite_query).
43
+ */
44
+ protected isQueryMethod<M extends FunctionName<A>>(methodName: M): boolean;
45
+ /**
46
+ * Transform arguments before calling the method.
47
+ * Default implementation returns arguments as-is.
48
+ */
49
+ protected transformArgs<M extends FunctionName<A>>(_methodName: M, args?: ReactorArgs<A, M, T>): ActorMethodParameters<A[M]>;
50
+ /**
51
+ * Transform the result after calling the method.
52
+ * Default implementation extracts Ok value from Result types.
53
+ */
54
+ protected transformResult<M extends FunctionName<A>>(_methodName: M, result: ActorMethodReturnType<A[M]>): ReactorReturnOk<A, M, T>;
55
+ generateQueryKey<M extends FunctionName<A>>(params: ReactorQueryParams<A, M, T>): QueryKey;
56
+ getQueryOptions<M extends FunctionName<A>>(params: ReactorCallParams<A, M, T>): FetchQueryOptions<ReactorReturnOk<A, M, T>>;
57
+ /**
58
+ * Invalidate cached queries for this canister.
59
+ * This will mark matching queries as stale and trigger a refetch for any active queries.
60
+ *
61
+ * @param params - Optional parameters to filter the invalidation
62
+ *
63
+ * @example
64
+ * ```typescript
65
+ * // Invalidate all queries for this canister
66
+ * reactor.invalidateQueries()
67
+ *
68
+ * // Invalidate only 'getUser' queries
69
+ * reactor.invalidateQueries({ functionName: 'getUser' })
70
+ *
71
+ * // Invalidate 'getUser' query for specific user
72
+ * reactor.invalidateQueries({ functionName: 'getUser', args: ['user-1'] })
73
+ * ```
74
+ */
75
+ invalidateQueries<M extends FunctionName<A>>(params?: Partial<ReactorQueryParams<A, M, T>>): void;
76
+ /**
77
+ * Call a canister method directly using agent.call() or agent.query().
78
+ * This is the recommended approach for interacting with canisters.
79
+ *
80
+ * @example
81
+ * ```typescript
82
+ * // Query method
83
+ * const result = await reactor.callMethod({
84
+ * functionName: 'greet',
85
+ * args: ['world'],
86
+ * });
87
+ *
88
+ * // Update method with options
89
+ * const result = await reactor.callMethod({
90
+ * functionName: 'transfer',
91
+ * args: [{ to: principal, amount: 100n }],
92
+ * callConfig: { effectiveCanisterId: principal },
93
+ * });
94
+ * ```
95
+ */
96
+ callMethod<M extends FunctionName<A>>(params: Omit<ReactorCallParams<A, M, T>, "queryKey">): Promise<ReactorReturnOk<A, M, T>>;
97
+ /**
98
+ * Fetch data from the canister and cache it using React Query.
99
+ * This method ensures the data is in the cache and returns it.
100
+ */
101
+ fetchQuery<M extends FunctionName<A>>(params: ReactorCallParams<A, M, T>): Promise<ReactorReturnOk<A, M, T>>;
102
+ /**
103
+ * Get the current data from the cache without fetching.
104
+ */
105
+ getQueryData<M extends FunctionName<A>>(params: ReactorQueryParams<A, M, T>): ReactorReturnOk<A, M, T> | undefined;
106
+ /**
107
+ * Execute a query call using agent.query()
108
+ */
109
+ protected executeQuery(methodName: string, arg: Uint8Array, callConfig?: CallConfig): Promise<Uint8Array>;
110
+ /**
111
+ * Execute an update call using agent.call()
112
+ */
113
+ protected executeCall(methodName: string, arg: Uint8Array, callConfig?: CallConfig): Promise<Uint8Array>;
114
+ /**
115
+ * Get the subnet ID for this canister.
116
+ */
117
+ subnetId(): Promise<Principal>;
118
+ /**
119
+ * Get the subnet state for this canister.
120
+ */
121
+ subnetState(options: ReadStateOptions): Promise<import("@icp-sdk/core/agent").ReadStateResponse>;
122
+ /**
123
+ * Get the query client from clientManager.
124
+ * This is the recommended way to access the query client for direct queries.
125
+ */
126
+ get queryClient(): import("@tanstack/query-core").QueryClient;
127
+ /**
128
+ * Get the agent from clientManager.
129
+ * This is the recommended way to access the agent for direct calls.
130
+ */
131
+ get agent(): import("@icp-sdk/core/agent").HttpAgent;
132
+ }
133
+ //# sourceMappingURL=reactor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reactor.d.ts","sourceRoot":"","sources":["../src/reactor.ts"],"names":[],"mappings":"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"}