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.
- package/LICENSE +21 -0
- package/README.md +473 -2
- package/dist/contracts/contract.d.ts +63 -0
- package/dist/contracts/contract.d.ts.map +1 -0
- package/dist/contracts/contract.js +42 -0
- package/dist/contracts/contract.js.map +1 -0
- package/dist/contracts/index.d.ts +5 -0
- package/dist/contracts/index.d.ts.map +1 -0
- package/dist/contracts/index.js +5 -0
- package/dist/contracts/index.js.map +1 -0
- package/dist/core/actions.d.ts +193 -0
- package/dist/core/actions.d.ts.map +1 -0
- package/dist/core/actions.js +195 -0
- package/dist/core/actions.js.map +1 -0
- package/dist/core/config-schemas.d.ts +179 -0
- package/dist/core/config-schemas.d.ts.map +1 -0
- package/dist/core/config-schemas.js +169 -0
- package/dist/core/config-schemas.js.map +1 -0
- package/dist/core/constants.d.ts +43 -0
- package/dist/core/constants.d.ts.map +1 -0
- package/dist/core/constants.js +49 -0
- package/dist/core/constants.js.map +1 -0
- package/dist/core/near.d.ts +301 -0
- package/dist/core/near.d.ts.map +1 -0
- package/dist/core/near.js +504 -0
- package/dist/core/near.js.map +1 -0
- package/dist/core/nonce-manager.d.ts +39 -0
- package/dist/core/nonce-manager.d.ts.map +1 -0
- package/dist/core/nonce-manager.js +73 -0
- package/dist/core/nonce-manager.js.map +1 -0
- package/dist/core/rpc/rpc-error-handler.d.ts +60 -0
- package/dist/core/rpc/rpc-error-handler.d.ts.map +1 -0
- package/dist/core/rpc/rpc-error-handler.js +324 -0
- package/dist/core/rpc/rpc-error-handler.js.map +1 -0
- package/dist/core/rpc/rpc-schemas.d.ts +1812 -0
- package/dist/core/rpc/rpc-schemas.d.ts.map +1 -0
- package/dist/core/rpc/rpc-schemas.js +424 -0
- package/dist/core/rpc/rpc-schemas.js.map +1 -0
- package/dist/core/rpc/rpc.d.ts +117 -0
- package/dist/core/rpc/rpc.d.ts.map +1 -0
- package/dist/core/rpc/rpc.js +325 -0
- package/dist/core/rpc/rpc.js.map +1 -0
- package/dist/core/schema.d.ts +1188 -0
- package/dist/core/schema.d.ts.map +1 -0
- package/dist/core/schema.js +396 -0
- package/dist/core/schema.js.map +1 -0
- package/dist/core/transaction.d.ts +390 -0
- package/dist/core/transaction.d.ts.map +1 -0
- package/dist/core/transaction.js +653 -0
- package/dist/core/transaction.js.map +1 -0
- package/dist/core/types.d.ts +271 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +9 -0
- package/dist/core/types.js.map +1 -0
- package/dist/errors/index.d.ts +226 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +366 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/index.d.ts +16 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +23 -0
- package/dist/index.js.map +1 -0
- package/dist/keys/credential-schemas.d.ts +98 -0
- package/dist/keys/credential-schemas.d.ts.map +1 -0
- package/dist/keys/credential-schemas.js +128 -0
- package/dist/keys/credential-schemas.js.map +1 -0
- package/dist/keys/file-keystore.d.ts +130 -0
- package/dist/keys/file-keystore.d.ts.map +1 -0
- package/dist/keys/file-keystore.js +266 -0
- package/dist/keys/file-keystore.js.map +1 -0
- package/dist/keys/in-memory-keystore.d.ts +71 -0
- package/dist/keys/in-memory-keystore.d.ts.map +1 -0
- package/dist/keys/in-memory-keystore.js +85 -0
- package/dist/keys/in-memory-keystore.js.map +1 -0
- package/dist/keys/index.d.ts +14 -0
- package/dist/keys/index.d.ts.map +1 -0
- package/dist/keys/index.js +20 -0
- package/dist/keys/index.js.map +1 -0
- package/dist/keys/native-keystore.d.ts +111 -0
- package/dist/keys/native-keystore.d.ts.map +1 -0
- package/dist/keys/native-keystore.js +167 -0
- package/dist/keys/native-keystore.js.map +1 -0
- package/dist/keys/rotating-keystore.d.ts +207 -0
- package/dist/keys/rotating-keystore.d.ts.map +1 -0
- package/dist/keys/rotating-keystore.js +240 -0
- package/dist/keys/rotating-keystore.js.map +1 -0
- package/dist/sandbox/index.d.ts +6 -0
- package/dist/sandbox/index.d.ts.map +1 -0
- package/dist/sandbox/index.js +5 -0
- package/dist/sandbox/index.js.map +1 -0
- package/dist/sandbox/sandbox.d.ts +55 -0
- package/dist/sandbox/sandbox.d.ts.map +1 -0
- package/dist/sandbox/sandbox.js +341 -0
- package/dist/sandbox/sandbox.js.map +1 -0
- package/dist/utils/amount.d.ts +76 -0
- package/dist/utils/amount.d.ts.map +1 -0
- package/dist/utils/amount.js +137 -0
- package/dist/utils/amount.js.map +1 -0
- package/dist/utils/gas.d.ts +69 -0
- package/dist/utils/gas.d.ts.map +1 -0
- package/dist/utils/gas.js +92 -0
- package/dist/utils/gas.js.map +1 -0
- package/dist/utils/index.d.ts +14 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +14 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/key.d.ts +117 -0
- package/dist/utils/key.d.ts.map +1 -0
- package/dist/utils/key.js +270 -0
- package/dist/utils/key.js.map +1 -0
- package/dist/utils/nep413.d.ts +97 -0
- package/dist/utils/nep413.d.ts.map +1 -0
- package/dist/utils/nep413.js +154 -0
- package/dist/utils/nep413.js.map +1 -0
- package/dist/utils/validation.d.ts +114 -0
- package/dist/utils/validation.d.ts.map +1 -0
- package/dist/utils/validation.js +150 -0
- package/dist/utils/validation.js.map +1 -0
- package/dist/wallets/adapters.d.ts +119 -0
- package/dist/wallets/adapters.d.ts.map +1 -0
- package/dist/wallets/adapters.js +267 -0
- package/dist/wallets/adapters.js.map +1 -0
- package/dist/wallets/index.d.ts +11 -0
- package/dist/wallets/index.d.ts.map +1 -0
- package/dist/wallets/index.js +2 -0
- package/dist/wallets/index.js.map +1 -0
- package/dist/wallets/types.d.ts +99 -0
- package/dist/wallets/types.d.ts.map +1 -0
- package/dist/wallets/types.js +10 -0
- package/dist/wallets/types.js.map +1 -0
- package/package.json +78 -7
- 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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"}
|