near-kit 0.0.0 → 0.2.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.
Files changed (132) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +473 -2
  3. package/dist/contracts/contract.d.ts +63 -0
  4. package/dist/contracts/contract.d.ts.map +1 -0
  5. package/dist/contracts/contract.js +42 -0
  6. package/dist/contracts/contract.js.map +1 -0
  7. package/dist/contracts/index.d.ts +5 -0
  8. package/dist/contracts/index.d.ts.map +1 -0
  9. package/dist/contracts/index.js +5 -0
  10. package/dist/contracts/index.js.map +1 -0
  11. package/dist/core/actions.d.ts +193 -0
  12. package/dist/core/actions.d.ts.map +1 -0
  13. package/dist/core/actions.js +195 -0
  14. package/dist/core/actions.js.map +1 -0
  15. package/dist/core/config-schemas.d.ts +179 -0
  16. package/dist/core/config-schemas.d.ts.map +1 -0
  17. package/dist/core/config-schemas.js +169 -0
  18. package/dist/core/config-schemas.js.map +1 -0
  19. package/dist/core/constants.d.ts +43 -0
  20. package/dist/core/constants.d.ts.map +1 -0
  21. package/dist/core/constants.js +49 -0
  22. package/dist/core/constants.js.map +1 -0
  23. package/dist/core/near.d.ts +301 -0
  24. package/dist/core/near.d.ts.map +1 -0
  25. package/dist/core/near.js +504 -0
  26. package/dist/core/near.js.map +1 -0
  27. package/dist/core/nonce-manager.d.ts +39 -0
  28. package/dist/core/nonce-manager.d.ts.map +1 -0
  29. package/dist/core/nonce-manager.js +73 -0
  30. package/dist/core/nonce-manager.js.map +1 -0
  31. package/dist/core/rpc/rpc-error-handler.d.ts +60 -0
  32. package/dist/core/rpc/rpc-error-handler.d.ts.map +1 -0
  33. package/dist/core/rpc/rpc-error-handler.js +324 -0
  34. package/dist/core/rpc/rpc-error-handler.js.map +1 -0
  35. package/dist/core/rpc/rpc-schemas.d.ts +1812 -0
  36. package/dist/core/rpc/rpc-schemas.d.ts.map +1 -0
  37. package/dist/core/rpc/rpc-schemas.js +424 -0
  38. package/dist/core/rpc/rpc-schemas.js.map +1 -0
  39. package/dist/core/rpc/rpc.d.ts +117 -0
  40. package/dist/core/rpc/rpc.d.ts.map +1 -0
  41. package/dist/core/rpc/rpc.js +325 -0
  42. package/dist/core/rpc/rpc.js.map +1 -0
  43. package/dist/core/schema.d.ts +1188 -0
  44. package/dist/core/schema.d.ts.map +1 -0
  45. package/dist/core/schema.js +396 -0
  46. package/dist/core/schema.js.map +1 -0
  47. package/dist/core/transaction.d.ts +390 -0
  48. package/dist/core/transaction.d.ts.map +1 -0
  49. package/dist/core/transaction.js +653 -0
  50. package/dist/core/transaction.js.map +1 -0
  51. package/dist/core/types.d.ts +271 -0
  52. package/dist/core/types.d.ts.map +1 -0
  53. package/dist/core/types.js +9 -0
  54. package/dist/core/types.js.map +1 -0
  55. package/dist/errors/index.d.ts +226 -0
  56. package/dist/errors/index.d.ts.map +1 -0
  57. package/dist/errors/index.js +366 -0
  58. package/dist/errors/index.js.map +1 -0
  59. package/dist/index.d.ts +16 -0
  60. package/dist/index.d.ts.map +1 -0
  61. package/dist/index.js +23 -0
  62. package/dist/index.js.map +1 -0
  63. package/dist/keys/credential-schemas.d.ts +98 -0
  64. package/dist/keys/credential-schemas.d.ts.map +1 -0
  65. package/dist/keys/credential-schemas.js +128 -0
  66. package/dist/keys/credential-schemas.js.map +1 -0
  67. package/dist/keys/file-keystore.d.ts +130 -0
  68. package/dist/keys/file-keystore.d.ts.map +1 -0
  69. package/dist/keys/file-keystore.js +266 -0
  70. package/dist/keys/file-keystore.js.map +1 -0
  71. package/dist/keys/in-memory-keystore.d.ts +71 -0
  72. package/dist/keys/in-memory-keystore.d.ts.map +1 -0
  73. package/dist/keys/in-memory-keystore.js +85 -0
  74. package/dist/keys/in-memory-keystore.js.map +1 -0
  75. package/dist/keys/index.d.ts +14 -0
  76. package/dist/keys/index.d.ts.map +1 -0
  77. package/dist/keys/index.js +20 -0
  78. package/dist/keys/index.js.map +1 -0
  79. package/dist/keys/native-keystore.d.ts +111 -0
  80. package/dist/keys/native-keystore.d.ts.map +1 -0
  81. package/dist/keys/native-keystore.js +167 -0
  82. package/dist/keys/native-keystore.js.map +1 -0
  83. package/dist/keys/rotating-keystore.d.ts +207 -0
  84. package/dist/keys/rotating-keystore.d.ts.map +1 -0
  85. package/dist/keys/rotating-keystore.js +240 -0
  86. package/dist/keys/rotating-keystore.js.map +1 -0
  87. package/dist/sandbox/index.d.ts +6 -0
  88. package/dist/sandbox/index.d.ts.map +1 -0
  89. package/dist/sandbox/index.js +5 -0
  90. package/dist/sandbox/index.js.map +1 -0
  91. package/dist/sandbox/sandbox.d.ts +55 -0
  92. package/dist/sandbox/sandbox.d.ts.map +1 -0
  93. package/dist/sandbox/sandbox.js +341 -0
  94. package/dist/sandbox/sandbox.js.map +1 -0
  95. package/dist/utils/amount.d.ts +76 -0
  96. package/dist/utils/amount.d.ts.map +1 -0
  97. package/dist/utils/amount.js +137 -0
  98. package/dist/utils/amount.js.map +1 -0
  99. package/dist/utils/gas.d.ts +69 -0
  100. package/dist/utils/gas.d.ts.map +1 -0
  101. package/dist/utils/gas.js +92 -0
  102. package/dist/utils/gas.js.map +1 -0
  103. package/dist/utils/index.d.ts +14 -0
  104. package/dist/utils/index.d.ts.map +1 -0
  105. package/dist/utils/index.js +14 -0
  106. package/dist/utils/index.js.map +1 -0
  107. package/dist/utils/key.d.ts +117 -0
  108. package/dist/utils/key.d.ts.map +1 -0
  109. package/dist/utils/key.js +270 -0
  110. package/dist/utils/key.js.map +1 -0
  111. package/dist/utils/nep413.d.ts +97 -0
  112. package/dist/utils/nep413.d.ts.map +1 -0
  113. package/dist/utils/nep413.js +154 -0
  114. package/dist/utils/nep413.js.map +1 -0
  115. package/dist/utils/validation.d.ts +114 -0
  116. package/dist/utils/validation.d.ts.map +1 -0
  117. package/dist/utils/validation.js +150 -0
  118. package/dist/utils/validation.js.map +1 -0
  119. package/dist/wallets/adapters.d.ts +119 -0
  120. package/dist/wallets/adapters.d.ts.map +1 -0
  121. package/dist/wallets/adapters.js +267 -0
  122. package/dist/wallets/adapters.js.map +1 -0
  123. package/dist/wallets/index.d.ts +11 -0
  124. package/dist/wallets/index.d.ts.map +1 -0
  125. package/dist/wallets/index.js +2 -0
  126. package/dist/wallets/index.js.map +1 -0
  127. package/dist/wallets/types.d.ts +99 -0
  128. package/dist/wallets/types.d.ts.map +1 -0
  129. package/dist/wallets/types.js +10 -0
  130. package/dist/wallets/types.js.map +1 -0
  131. package/package.json +78 -7
  132. package/index.js +0 -1
@@ -0,0 +1,60 @@
1
+ /**
2
+ * RPC error handling utilities
3
+ * Parses NEAR RPC errors and throws appropriate typed exceptions
4
+ */
5
+ import type { ExecutionOutcomeWithId, RpcTransaction } from "../types.js";
6
+ export interface RpcErrorResponse {
7
+ name: string;
8
+ code: number;
9
+ message: string;
10
+ data?: string | Record<string, unknown>;
11
+ cause?: {
12
+ name: string;
13
+ info?: Record<string, unknown>;
14
+ };
15
+ }
16
+ /**
17
+ * Extract error message from an ActionError failure object.
18
+ *
19
+ * @internal
20
+ */
21
+ export declare function extractErrorMessage(failure: Record<string, unknown>): string;
22
+ /**
23
+ * Check outcome for FunctionCallError and throw if found.
24
+ *
25
+ * @internal
26
+ */
27
+ export declare function checkOutcomeForFunctionCallError(outcome: ExecutionOutcomeWithId, transaction: RpcTransaction | undefined): void;
28
+ /**
29
+ * Determine if an HTTP status code indicates a retryable error.
30
+ *
31
+ * @internal
32
+ */
33
+ export declare function isRetryableStatus(statusCode: number): boolean;
34
+ /**
35
+ * Context for parsing query errors.
36
+ */
37
+ interface QueryErrorContext {
38
+ accountId?: string;
39
+ publicKey?: string;
40
+ contractId?: string;
41
+ methodName?: string;
42
+ }
43
+ /**
44
+ * Parse query result errors (from `result.error` field).
45
+ *
46
+ * Query methods (e.g. `view_access_key`, `call_function`) return errors in
47
+ * `result.error` instead of the top-level error field.
48
+ *
49
+ * @internal
50
+ */
51
+ export declare function parseQueryError(result: unknown, context?: QueryErrorContext): void;
52
+ /**
53
+ * Parse RPC error and throw appropriate typed error.
54
+ * Follows NEAR RPC error documentation.
55
+ *
56
+ * @internal
57
+ */
58
+ export declare function parseRpcError(error: RpcErrorResponse | undefined, statusCode?: number): never;
59
+ export {};
60
+ //# sourceMappingURL=rpc-error-handler.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc-error-handler.d.ts","sourceRoot":"","sources":["../../../src/core/rpc/rpc-error-handler.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAyBH,OAAO,KAAK,EACV,sBAAsB,EAEtB,cAAc,EACf,MAAM,aAAa,CAAA;AA2CpB,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,CAAA;IACf,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACvC,KAAK,CAAC,EAAE;QACN,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAC/B,CAAA;CACF;AA2DD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAsC5E;AAED;;;;GAIG;AACH,wBAAgB,gCAAgC,CAC9C,OAAO,EAAE,sBAAsB,EAC/B,WAAW,EAAE,cAAc,GAAG,SAAS,GACtC,IAAI,CAgBN;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAW7D;AAED;;GAEG;AACH,UAAU,iBAAiB;IACzB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,MAAM,EAAE,OAAO,EACf,OAAO,GAAE,iBAAsB,GAC9B,IAAI,CA8BN;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAC3B,KAAK,EAAE,gBAAgB,GAAG,SAAS,EACnC,UAAU,CAAC,EAAE,MAAM,GAClB,KAAK,CA0NP"}
@@ -0,0 +1,324 @@
1
+ /**
2
+ * RPC error handling utilities
3
+ * Parses NEAR RPC errors and throws appropriate typed exceptions
4
+ */
5
+ import { AccessKeyDoesNotExistError, AccountDoesNotExistError, ContractExecutionError, ContractNotDeployedError, ContractStateTooLargeError, FunctionCallError, InternalServerError, InvalidAccountError, InvalidNonceError, InvalidShardIdError, InvalidTransactionError, NearError, NetworkError, NodeNotSyncedError, ParseError, ShardUnavailableError, TimeoutError, UnknownBlockError, UnknownChunkError, UnknownEpochError, UnknownReceiptError, } from "../../errors/index.js";
6
+ import { RpcErrorResponseSchema } from "./rpc-schemas.js";
7
+ // ==================== Helper Functions ====================
8
+ /**
9
+ * Check if a failure object represents a FunctionCallError
10
+ */
11
+ function isFunctionCallError(failure) {
12
+ return (failure.ActionError?.kind?.FunctionCallError !==
13
+ undefined ||
14
+ failure.FunctionCallError !== undefined);
15
+ }
16
+ /**
17
+ * Extract panic message from FunctionCallError
18
+ */
19
+ function extractPanicMessage(failure) {
20
+ const functionCallError = failure.ActionError?.kind?.FunctionCallError ||
21
+ failure.FunctionCallError;
22
+ if (!functionCallError)
23
+ return undefined;
24
+ if (typeof functionCallError.ExecutionError === "string") {
25
+ return functionCallError.ExecutionError;
26
+ }
27
+ if (typeof functionCallError.HostError === "string") {
28
+ return functionCallError.HostError;
29
+ }
30
+ return JSON.stringify(functionCallError);
31
+ }
32
+ /**
33
+ * Extract method name from transaction actions
34
+ */
35
+ function extractMethodName(transaction) {
36
+ if (!transaction)
37
+ return undefined;
38
+ const functionCallAction = transaction.actions.find((action) => typeof action === "object" && "FunctionCall" in action);
39
+ if (functionCallAction &&
40
+ typeof functionCallAction === "object" &&
41
+ "FunctionCall" in functionCallAction) {
42
+ return functionCallAction.FunctionCall.method_name;
43
+ }
44
+ return undefined;
45
+ }
46
+ /**
47
+ * Extract error message from an ActionError failure object.
48
+ *
49
+ * @internal
50
+ */
51
+ export function extractErrorMessage(failure) {
52
+ // Handle ActionError structure
53
+ if ("ActionError" in failure &&
54
+ typeof failure["ActionError"] === "object" &&
55
+ failure["ActionError"] !== null) {
56
+ const actionError = failure["ActionError"];
57
+ if ("kind" in actionError &&
58
+ typeof actionError["kind"] === "object" &&
59
+ actionError["kind"] !== null) {
60
+ const kind = actionError["kind"];
61
+ // Get the error type (first key in kind object)
62
+ const errorType = Object.keys(kind)[0];
63
+ if (!errorType) {
64
+ return JSON.stringify(failure);
65
+ }
66
+ const errorData = kind[errorType];
67
+ // Format error message with data if available
68
+ if (errorData && typeof errorData === "object" && errorData !== null) {
69
+ const dataObj = errorData;
70
+ const dataStr = Object.entries(dataObj)
71
+ .map(([key, value]) => `${key}: ${value}`)
72
+ .join(", ");
73
+ return `${errorType} (${dataStr})`;
74
+ }
75
+ return errorType;
76
+ }
77
+ }
78
+ // Fallback to JSON stringified representation
79
+ return JSON.stringify(failure);
80
+ }
81
+ /**
82
+ * Check outcome for FunctionCallError and throw if found.
83
+ *
84
+ * @internal
85
+ */
86
+ export function checkOutcomeForFunctionCallError(outcome, transaction) {
87
+ if (typeof outcome.outcome.status === "object" &&
88
+ "Failure" in outcome.outcome.status) {
89
+ const failure = outcome.outcome.status.Failure;
90
+ if (isFunctionCallError(failure)) {
91
+ const contractId = outcome.outcome.executor_id;
92
+ const logs = outcome.outcome.logs;
93
+ const methodName = extractMethodName(transaction);
94
+ const panicMessage = extractPanicMessage(failure);
95
+ throw new FunctionCallError(contractId, methodName, panicMessage, logs);
96
+ }
97
+ }
98
+ }
99
+ /**
100
+ * Determine if an HTTP status code indicates a retryable error.
101
+ *
102
+ * @internal
103
+ */
104
+ export function isRetryableStatus(statusCode) {
105
+ // 408 Request Timeout - retryable
106
+ // 429 Too Many Requests - retryable (rate limiting)
107
+ // 503 Service Unavailable - retryable
108
+ // 5xx Server Errors - retryable
109
+ return (statusCode === 408 ||
110
+ statusCode === 429 ||
111
+ statusCode === 503 ||
112
+ (statusCode >= 500 && statusCode < 600));
113
+ }
114
+ /**
115
+ * Parse query result errors (from `result.error` field).
116
+ *
117
+ * Query methods (e.g. `view_access_key`, `call_function`) return errors in
118
+ * `result.error` instead of the top-level error field.
119
+ *
120
+ * @internal
121
+ */
122
+ export function parseQueryError(result, context = {}) {
123
+ if (!result || typeof result !== "object" || !("error" in result)) {
124
+ return;
125
+ }
126
+ const errorMsg = result.error;
127
+ // Function call errors (method not found, execution failures, etc.)
128
+ // Check this FIRST to avoid misinterpreting "Method X does not exist" as access key error
129
+ if (context.contractId) {
130
+ throw new FunctionCallError(context.contractId, context.methodName, errorMsg);
131
+ }
132
+ // Access key not found
133
+ // Only check this for access key queries (when accountId/publicKey are in context)
134
+ if ((context.accountId || context.publicKey) &&
135
+ errorMsg.includes("does not exist")) {
136
+ const accountId = context.accountId || "unknown";
137
+ const publicKey = context.publicKey || "unknown";
138
+ throw new AccessKeyDoesNotExistError(accountId, publicKey);
139
+ }
140
+ // Generic query error
141
+ throw new NetworkError(`Query error: ${errorMsg}`);
142
+ }
143
+ /**
144
+ * Parse RPC error and throw appropriate typed error.
145
+ * Follows NEAR RPC error documentation.
146
+ *
147
+ * @internal
148
+ */
149
+ export function parseRpcError(error, statusCode) {
150
+ if (!error) {
151
+ throw new NetworkError("Unknown RPC error");
152
+ }
153
+ // Try to parse the error using the schema
154
+ try {
155
+ const parsedError = RpcErrorResponseSchema.parse(error);
156
+ const causeName = parsedError.cause?.name;
157
+ const causeInfo = parsedError.cause?.info || {};
158
+ // Handle errors based on ERROR_CAUSE (as per documentation)
159
+ // This is more reliable than string matching on error messages
160
+ // === General Errors (HANDLER_ERROR) ===
161
+ if (causeName === "UNKNOWN_BLOCK") {
162
+ // block_reference can be a string or an object like { block_id: 999999999 }
163
+ let blockRef;
164
+ const blockReference = causeInfo["block_reference"];
165
+ if (typeof blockReference === "string") {
166
+ blockRef = blockReference;
167
+ }
168
+ else if (blockReference && typeof blockReference === "object") {
169
+ const blockId = blockReference["block_id"] ||
170
+ blockReference["BlockId"];
171
+ blockRef = blockId
172
+ ? String(blockId)
173
+ : parsedError.data || parsedError.message;
174
+ }
175
+ else {
176
+ blockRef = parsedError.data || parsedError.message;
177
+ }
178
+ throw new UnknownBlockError(blockRef);
179
+ }
180
+ if (causeName === "INVALID_ACCOUNT") {
181
+ const accountId = causeInfo.requested_account_id || "unknown";
182
+ throw new InvalidAccountError(accountId);
183
+ }
184
+ if (causeName === "UNKNOWN_ACCOUNT") {
185
+ const accountId = causeInfo.requested_account_id || "unknown";
186
+ throw new AccountDoesNotExistError(accountId);
187
+ }
188
+ if (causeName === "UNAVAILABLE_SHARD") {
189
+ throw new ShardUnavailableError(parsedError.message);
190
+ }
191
+ if (causeName === "NO_SYNCED_BLOCKS" || causeName === "NOT_SYNCED_YET") {
192
+ throw new NodeNotSyncedError(parsedError.message);
193
+ }
194
+ // === Contract Errors ===
195
+ if (causeName === "NO_CONTRACT_CODE") {
196
+ const accountId = causeInfo["contract_account_id"] ||
197
+ causeInfo["account_id"] ||
198
+ causeInfo["contract_id"] ||
199
+ "unknown";
200
+ throw new ContractNotDeployedError(accountId);
201
+ }
202
+ if (causeName === "TOO_LARGE_CONTRACT_STATE") {
203
+ const accountId = causeInfo["account_id"] ||
204
+ causeInfo["contract_id"] ||
205
+ "unknown";
206
+ throw new ContractStateTooLargeError(accountId);
207
+ }
208
+ if (causeName === "CONTRACT_EXECUTION_ERROR") {
209
+ const contractId = causeInfo["contract_id"] || "unknown";
210
+ const methodName = causeInfo.method_name;
211
+ throw new ContractExecutionError(contractId, methodName, causeInfo);
212
+ }
213
+ // ActionError is for function call panics during transaction execution
214
+ if (causeName === "ActionError") {
215
+ const contractId = causeInfo["contract_id"] || "unknown";
216
+ const methodName = causeInfo.method_name || "unknown";
217
+ const panic = parsedError.message || undefined;
218
+ throw new FunctionCallError(contractId, methodName, panic);
219
+ }
220
+ // === Block / Chunk Errors ===
221
+ if (causeName === "UNKNOWN_CHUNK") {
222
+ // chunk_reference might be an object structure, or there may be a chunk_hash field
223
+ let chunkRef;
224
+ const chunkHash = causeInfo["chunk_hash"];
225
+ const chunkReference = causeInfo["chunk_reference"];
226
+ if (typeof chunkHash === "string") {
227
+ chunkRef = chunkHash;
228
+ }
229
+ else if (typeof chunkReference === "string") {
230
+ chunkRef = chunkReference;
231
+ }
232
+ else if (chunkReference && typeof chunkReference === "object") {
233
+ // Extract chunk_id or similar field, fallback to data/message
234
+ const chunkId = chunkReference["chunk_id"];
235
+ chunkRef = chunkId
236
+ ? String(chunkId)
237
+ : parsedError.data || parsedError.message;
238
+ }
239
+ else {
240
+ chunkRef = parsedError.data || parsedError.message;
241
+ }
242
+ throw new UnknownChunkError(chunkRef);
243
+ }
244
+ if (causeName === "INVALID_SHARD_ID") {
245
+ const shardId = causeInfo["shard_id"] || "unknown";
246
+ throw new InvalidShardIdError(shardId);
247
+ }
248
+ // === Network Errors ===
249
+ if (causeName === "UNKNOWN_EPOCH") {
250
+ // block_reference can be a string or an object like { block_id: 999999999 }
251
+ let blockRef;
252
+ const blockReference = causeInfo["block_reference"];
253
+ if (typeof blockReference === "string") {
254
+ blockRef = blockReference;
255
+ }
256
+ else if (blockReference && typeof blockReference === "object") {
257
+ const blockId = blockReference["block_id"] ||
258
+ blockReference["BlockId"];
259
+ blockRef = blockId
260
+ ? String(blockId)
261
+ : parsedError.data || parsedError.message;
262
+ }
263
+ else {
264
+ blockRef = parsedError.data || parsedError.message;
265
+ }
266
+ throw new UnknownEpochError(blockRef);
267
+ }
268
+ // === Transaction Errors ===
269
+ if (causeName === "INVALID_TRANSACTION") {
270
+ // Check for InvalidNonce error in data field
271
+ if (parsedError.data && typeof parsedError.data === "object") {
272
+ // Navigate nested error structure: TxExecutionError.InvalidTxError.InvalidNonce
273
+ const txExecError = parsedError.data.TxExecutionError;
274
+ const invalidTxError = txExecError?.InvalidTxError || parsedError.data.InvalidTxError;
275
+ const invalidNonce = invalidTxError?.InvalidNonce;
276
+ if (invalidNonce &&
277
+ "ak_nonce" in invalidNonce &&
278
+ "tx_nonce" in invalidNonce) {
279
+ throw new InvalidNonceError(invalidNonce.tx_nonce, invalidNonce.ak_nonce);
280
+ }
281
+ }
282
+ // Extract detailed error info from data field if available
283
+ let errorDetails = causeInfo;
284
+ if (parsedError.data && typeof parsedError.data === "object") {
285
+ const txError = parsedError.data.TxExecutionError || parsedError.data.InvalidTxError;
286
+ if (txError) {
287
+ errorDetails = { ...causeInfo, ...txError };
288
+ }
289
+ }
290
+ throw new InvalidTransactionError(parsedError.message, errorDetails);
291
+ }
292
+ if (causeName === "UNKNOWN_RECEIPT") {
293
+ const receiptId = causeInfo["receipt_id"] || "unknown";
294
+ throw new UnknownReceiptError(receiptId);
295
+ }
296
+ if (causeName === "TIMEOUT_ERROR") {
297
+ const txHash = causeInfo["transaction_hash"];
298
+ throw new TimeoutError(parsedError.message, txHash);
299
+ }
300
+ // === Request Validation Errors (400) ===
301
+ if (causeName === "PARSE_ERROR" ||
302
+ parsedError.name === "REQUEST_VALIDATION_ERROR") {
303
+ throw new ParseError(parsedError.message, causeInfo);
304
+ }
305
+ // === Internal Errors (500) ===
306
+ if (causeName === "INTERNAL_ERROR" ||
307
+ parsedError.name === "INTERNAL_ERROR") {
308
+ throw new InternalServerError(parsedError.message, causeInfo);
309
+ }
310
+ // === Fallback for unknown error types ===
311
+ // Determine if error is retryable based on HTTP status code
312
+ const retryable = statusCode ? isRetryableStatus(statusCode) : false;
313
+ throw new NetworkError(`RPC error [${causeName || parsedError.name}]: ${parsedError.message}`, parsedError.code, retryable);
314
+ }
315
+ catch (parseError) {
316
+ // If parsing fails or we already threw a specific error, re-throw it
317
+ if (parseError instanceof NearError) {
318
+ throw parseError;
319
+ }
320
+ // Parsing failed, fall back to generic error
321
+ throw new NetworkError(`RPC error: ${error.message}`, error.code, false);
322
+ }
323
+ }
324
+ //# sourceMappingURL=rpc-error-handler.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rpc-error-handler.js","sourceRoot":"","sources":["../../../src/core/rpc/rpc-error-handler.ts"],"names":[],"mappings":"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"}