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,325 @@
|
|
|
1
|
+
import { base64 } from "@scure/base";
|
|
2
|
+
import { InvalidTransactionError, NearError, NetworkError, } from "../../errors/index.js";
|
|
3
|
+
import { checkOutcomeForFunctionCallError, extractErrorMessage, isRetryableStatus, parseQueryError, parseRpcError, } from "./rpc-error-handler.js";
|
|
4
|
+
import { AccessKeyViewSchema, AccountViewSchema, FinalExecutionOutcomeSchema, FinalExecutionOutcomeWithReceiptsSchema, GasPriceResponseSchema, StatusResponseSchema, ViewFunctionCallResultSchema, } from "./rpc-schemas.js";
|
|
5
|
+
const DEFAULT_RETRY_CONFIG = {
|
|
6
|
+
maxRetries: 4,
|
|
7
|
+
initialDelayMs: 1000, // 1 second
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Low-level JSON-RPC client for NEAR Protocol.
|
|
11
|
+
*
|
|
12
|
+
* @remarks
|
|
13
|
+
* Most applications should use {@link Near} instead of interacting with this
|
|
14
|
+
* class directly. `RpcClient` is exposed for advanced use cases that need full
|
|
15
|
+
* control over RPC calls or access to methods not wrapped by `Near`.
|
|
16
|
+
*/
|
|
17
|
+
export class RpcClient {
|
|
18
|
+
constructor(url, headers, retryConfig) {
|
|
19
|
+
this.url = url;
|
|
20
|
+
this.headers = headers || {};
|
|
21
|
+
this.requestId = 0;
|
|
22
|
+
this.retryConfig = {
|
|
23
|
+
maxRetries: retryConfig?.maxRetries ?? DEFAULT_RETRY_CONFIG.maxRetries,
|
|
24
|
+
initialDelayMs: retryConfig?.initialDelayMs ?? DEFAULT_RETRY_CONFIG.initialDelayMs,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Sleep for the specified number of milliseconds.
|
|
29
|
+
* @internal
|
|
30
|
+
*/
|
|
31
|
+
async sleep(ms) {
|
|
32
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Perform a raw JSON-RPC call with automatic retries and error mapping.
|
|
36
|
+
*
|
|
37
|
+
* @param method - RPC method name (e.g. `"query"`, `"status"`).
|
|
38
|
+
* @param params - RPC params object or array.
|
|
39
|
+
*
|
|
40
|
+
* @returns Parsed JSON result typed as `T`.
|
|
41
|
+
*
|
|
42
|
+
* @throws {NetworkError} On HTTP failures, network issues, or malformed responses.
|
|
43
|
+
* @throws {InvalidTransactionError} For transaction failures detected by {@link parseRpcError}.
|
|
44
|
+
* @throws {NearError} For other RPC-level errors.
|
|
45
|
+
*/
|
|
46
|
+
async call(method, params) {
|
|
47
|
+
const request = {
|
|
48
|
+
jsonrpc: "2.0",
|
|
49
|
+
id: ++this.requestId,
|
|
50
|
+
method,
|
|
51
|
+
params,
|
|
52
|
+
};
|
|
53
|
+
let lastError = null;
|
|
54
|
+
// Retry loop with exponential backoff
|
|
55
|
+
// Total attempts = 1 (initial) + maxRetries
|
|
56
|
+
const totalAttempts = 1 + this.retryConfig.maxRetries;
|
|
57
|
+
for (let attempt = 0; attempt < totalAttempts; attempt++) {
|
|
58
|
+
try {
|
|
59
|
+
// Debug logging for RPC requests
|
|
60
|
+
if (typeof process !== "undefined" &&
|
|
61
|
+
process.env["NEAR_RPC_DEBUG"] === "true") {
|
|
62
|
+
console.log("[RPC Request]", JSON.stringify(request, null, 2));
|
|
63
|
+
}
|
|
64
|
+
const response = await fetch(this.url, {
|
|
65
|
+
method: "POST",
|
|
66
|
+
headers: {
|
|
67
|
+
"Content-Type": "application/json",
|
|
68
|
+
...this.headers,
|
|
69
|
+
},
|
|
70
|
+
body: JSON.stringify(request),
|
|
71
|
+
});
|
|
72
|
+
if (!response.ok) {
|
|
73
|
+
// Use isRetryableStatus to determine if this HTTP error is retryable
|
|
74
|
+
throw new NetworkError(`HTTP ${response.status}: ${response.statusText}`, response.status, isRetryableStatus(response.status));
|
|
75
|
+
}
|
|
76
|
+
const data = await response.json();
|
|
77
|
+
// Debug logging for RPC responses
|
|
78
|
+
if (typeof process !== "undefined" &&
|
|
79
|
+
process.env["NEAR_RPC_DEBUG"] === "true") {
|
|
80
|
+
console.log("[RPC Response]", JSON.stringify(data, null, 2));
|
|
81
|
+
}
|
|
82
|
+
if (data.error) {
|
|
83
|
+
// Pass status code to parseRpcError for better retryable detection
|
|
84
|
+
parseRpcError(data.error, response.status);
|
|
85
|
+
}
|
|
86
|
+
if (data.result === undefined) {
|
|
87
|
+
throw new NetworkError("RPC response missing result field");
|
|
88
|
+
}
|
|
89
|
+
return data.result;
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
// Re-throw non-NearError instances as NetworkError
|
|
93
|
+
let nearError;
|
|
94
|
+
if (!(error instanceof NearError)) {
|
|
95
|
+
// Network failure (fetch threw an error)
|
|
96
|
+
nearError = new NetworkError(`Network request failed: ${error.message}`, undefined, true);
|
|
97
|
+
}
|
|
98
|
+
else {
|
|
99
|
+
nearError = error;
|
|
100
|
+
}
|
|
101
|
+
lastError = nearError;
|
|
102
|
+
// Check if we should retry
|
|
103
|
+
const isRetryable = "retryable" in lastError && lastError.retryable;
|
|
104
|
+
const hasRetriesLeft = attempt + 1 < totalAttempts;
|
|
105
|
+
if (!isRetryable || !hasRetriesLeft) {
|
|
106
|
+
// Not retryable or out of retries - throw the error
|
|
107
|
+
throw lastError;
|
|
108
|
+
}
|
|
109
|
+
// Calculate exponential backoff delay: initialDelay * 2^attempt
|
|
110
|
+
const delayMs = this.retryConfig.initialDelayMs * 2 ** attempt;
|
|
111
|
+
// Wait before retrying
|
|
112
|
+
await this.sleep(delayMs);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// This should never be reached, but TypeScript needs it
|
|
116
|
+
throw lastError || new NetworkError("Unknown error during RPC call");
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Perform a generic `query` RPC call.
|
|
120
|
+
*
|
|
121
|
+
* @param path - `request_type` (e.g. `"view_account"`, `"view_access_key"`).
|
|
122
|
+
* @param data - Raw args as base64 string or bytes.
|
|
123
|
+
*/
|
|
124
|
+
async query(path, data) {
|
|
125
|
+
return this.call("query", {
|
|
126
|
+
request_type: path,
|
|
127
|
+
finality: "final",
|
|
128
|
+
args_base64: typeof data === "string" ? data : base64.encode(data),
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Call a contract view function via RPC.
|
|
133
|
+
*
|
|
134
|
+
* @param contractId - Account ID of the target contract.
|
|
135
|
+
* @param methodName - Name of the view method.
|
|
136
|
+
* @param args - Arguments object or raw bytes; defaults to `{}`.
|
|
137
|
+
* @param options - Optional {@link BlockReference} to control finality or block.
|
|
138
|
+
*/
|
|
139
|
+
async viewFunction(contractId, methodName, args = {}, options) {
|
|
140
|
+
const argsBytes = args instanceof Uint8Array
|
|
141
|
+
? args
|
|
142
|
+
: new TextEncoder().encode(JSON.stringify(args));
|
|
143
|
+
const argsBase64 = base64.encode(argsBytes);
|
|
144
|
+
const result = await this.call("query", {
|
|
145
|
+
request_type: "call_function",
|
|
146
|
+
...(options?.blockId
|
|
147
|
+
? { block_id: options.blockId }
|
|
148
|
+
: { finality: options?.finality || "final" }),
|
|
149
|
+
account_id: contractId,
|
|
150
|
+
method_name: methodName,
|
|
151
|
+
args_base64: argsBase64,
|
|
152
|
+
});
|
|
153
|
+
// Check for errors in result (NEAR returns view function errors this way)
|
|
154
|
+
parseQueryError(result, { contractId, methodName });
|
|
155
|
+
return ViewFunctionCallResultSchema.parse(result);
|
|
156
|
+
}
|
|
157
|
+
/**
|
|
158
|
+
* Get basic account information via `view_account`.
|
|
159
|
+
*
|
|
160
|
+
* @param accountId - Account ID to query.
|
|
161
|
+
* @param options - Optional {@link BlockReference} to control finality or block.
|
|
162
|
+
*/
|
|
163
|
+
async getAccount(accountId, options) {
|
|
164
|
+
const result = await this.call("query", {
|
|
165
|
+
request_type: "view_account",
|
|
166
|
+
...(options?.blockId
|
|
167
|
+
? { block_id: options.blockId }
|
|
168
|
+
: { finality: options?.finality || "optimistic" }),
|
|
169
|
+
account_id: accountId,
|
|
170
|
+
});
|
|
171
|
+
return AccountViewSchema.parse(result);
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Get an access key via `view_access_key`.
|
|
175
|
+
*
|
|
176
|
+
* @param accountId - Account ID that owns the key.
|
|
177
|
+
* @param publicKey - Public key string (e.g. `"ed25519:..."`).
|
|
178
|
+
* @param options - Optional {@link BlockReference} to control finality or block.
|
|
179
|
+
*/
|
|
180
|
+
async getAccessKey(accountId, publicKey, options) {
|
|
181
|
+
const result = await this.call("query", {
|
|
182
|
+
request_type: "view_access_key",
|
|
183
|
+
...(options?.blockId
|
|
184
|
+
? { block_id: options.blockId }
|
|
185
|
+
: { finality: options?.finality || "optimistic" }),
|
|
186
|
+
account_id: accountId,
|
|
187
|
+
public_key: publicKey,
|
|
188
|
+
});
|
|
189
|
+
// Check for errors in result (NEAR returns access key errors this way)
|
|
190
|
+
parseQueryError(result, { accountId, publicKey });
|
|
191
|
+
return AccessKeyViewSchema.parse(result);
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Send a signed transaction via `send_tx`.
|
|
195
|
+
*
|
|
196
|
+
* @param signedTransaction - Borsh-serialized signed transaction bytes.
|
|
197
|
+
* @param waitUntil - Execution status level to wait for (see {@link TxExecutionStatus}).
|
|
198
|
+
*/
|
|
199
|
+
async sendTransaction(signedTransaction, waitUntil) {
|
|
200
|
+
const actualWaitUntil = (waitUntil ?? "EXECUTED_OPTIMISTIC");
|
|
201
|
+
const base64Encoded = base64.encode(signedTransaction);
|
|
202
|
+
// Use send_tx with wait_until parameter instead of deprecated broadcast_tx_commit
|
|
203
|
+
const result = await this.call("send_tx", {
|
|
204
|
+
signed_tx_base64: base64Encoded,
|
|
205
|
+
wait_until: actualWaitUntil,
|
|
206
|
+
});
|
|
207
|
+
const parsed = FinalExecutionOutcomeSchema.parse(result);
|
|
208
|
+
// Check for execution failures (only in modes that return execution status)
|
|
209
|
+
// NONE, INCLUDED, and INCLUDED_FINAL don't have status/transaction/outcome fields
|
|
210
|
+
if (parsed.final_execution_status !== "NONE" &&
|
|
211
|
+
parsed.final_execution_status !== "INCLUDED" &&
|
|
212
|
+
parsed.final_execution_status !== "INCLUDED_FINAL") {
|
|
213
|
+
// TypeScript now knows parsed has status, transaction, transaction_outcome, receipts_outcome
|
|
214
|
+
if (parsed.status &&
|
|
215
|
+
typeof parsed.status === "object" &&
|
|
216
|
+
"Failure" in parsed.status) {
|
|
217
|
+
// Check transaction_outcome for direct failures
|
|
218
|
+
if (parsed.transaction_outcome) {
|
|
219
|
+
checkOutcomeForFunctionCallError(parsed.transaction_outcome, parsed.transaction);
|
|
220
|
+
}
|
|
221
|
+
// Check receipts_outcome for cross-contract failures
|
|
222
|
+
const failedReceipt = parsed.receipts_outcome?.find((receipt) => typeof receipt.outcome.status === "object" &&
|
|
223
|
+
"Failure" in receipt.outcome.status);
|
|
224
|
+
if (failedReceipt) {
|
|
225
|
+
checkOutcomeForFunctionCallError(failedReceipt, parsed.transaction);
|
|
226
|
+
}
|
|
227
|
+
// Generic transaction failure (non-function-call errors)
|
|
228
|
+
// Extract error message from the actual failure in transaction_outcome or receipts
|
|
229
|
+
let errorMessage = "Transaction execution failed";
|
|
230
|
+
let failureDetails = parsed.status.Failure;
|
|
231
|
+
if (parsed.transaction_outcome &&
|
|
232
|
+
typeof parsed.transaction_outcome.outcome.status === "object" &&
|
|
233
|
+
"Failure" in parsed.transaction_outcome.outcome.status) {
|
|
234
|
+
failureDetails = parsed.transaction_outcome.outcome.status.Failure;
|
|
235
|
+
errorMessage = extractErrorMessage(failureDetails);
|
|
236
|
+
}
|
|
237
|
+
else if (failedReceipt &&
|
|
238
|
+
typeof failedReceipt.outcome.status === "object" &&
|
|
239
|
+
"Failure" in failedReceipt.outcome.status) {
|
|
240
|
+
failureDetails = failedReceipt.outcome.status.Failure;
|
|
241
|
+
errorMessage = extractErrorMessage(failureDetails);
|
|
242
|
+
}
|
|
243
|
+
throw new InvalidTransactionError(errorMessage, failureDetails);
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
// Safe cast: TypeScript guarantees W is a valid key, Zod validates the structure,
|
|
247
|
+
// and waitUntil determines which variant we get from the RPC
|
|
248
|
+
return parsed;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Query transaction status with receipts via `EXPERIMENTAL_tx_status`.
|
|
252
|
+
*
|
|
253
|
+
* @param txHash - Transaction hash.
|
|
254
|
+
* @param senderAccountId - Account ID that sent the transaction.
|
|
255
|
+
* @param waitUntil - Execution status level to wait for.
|
|
256
|
+
*/
|
|
257
|
+
async getTransactionStatus(txHash, senderAccountId, waitUntil) {
|
|
258
|
+
const actualWaitUntil = (waitUntil ?? "EXECUTED_OPTIMISTIC");
|
|
259
|
+
// Call EXPERIMENTAL_tx_status with wait_until parameter
|
|
260
|
+
const result = await this.call("EXPERIMENTAL_tx_status", {
|
|
261
|
+
tx_hash: txHash,
|
|
262
|
+
sender_account_id: senderAccountId,
|
|
263
|
+
wait_until: actualWaitUntil,
|
|
264
|
+
});
|
|
265
|
+
const parsed = FinalExecutionOutcomeWithReceiptsSchema.parse(result);
|
|
266
|
+
// Check for execution failures (only in modes that return execution status)
|
|
267
|
+
// NONE, INCLUDED, and INCLUDED_FINAL don't have status/transaction/outcome fields
|
|
268
|
+
if (parsed.final_execution_status !== "NONE" &&
|
|
269
|
+
parsed.final_execution_status !== "INCLUDED" &&
|
|
270
|
+
parsed.final_execution_status !== "INCLUDED_FINAL") {
|
|
271
|
+
// TypeScript now knows parsed has status, transaction, transaction_outcome, receipts_outcome
|
|
272
|
+
if (parsed.status &&
|
|
273
|
+
typeof parsed.status === "object" &&
|
|
274
|
+
"Failure" in parsed.status) {
|
|
275
|
+
// Check transaction_outcome for direct failures
|
|
276
|
+
if (parsed.transaction_outcome) {
|
|
277
|
+
checkOutcomeForFunctionCallError(parsed.transaction_outcome, parsed.transaction);
|
|
278
|
+
}
|
|
279
|
+
// Check receipts_outcome for cross-contract failures
|
|
280
|
+
const failedReceipt = parsed.receipts_outcome?.find((receipt) => typeof receipt.outcome.status === "object" &&
|
|
281
|
+
"Failure" in receipt.outcome.status);
|
|
282
|
+
if (failedReceipt) {
|
|
283
|
+
checkOutcomeForFunctionCallError(failedReceipt, parsed.transaction);
|
|
284
|
+
}
|
|
285
|
+
// Generic transaction failure (non-function-call errors)
|
|
286
|
+
// Extract error message from the actual failure in transaction_outcome or receipts
|
|
287
|
+
let errorMessage = "Transaction execution failed";
|
|
288
|
+
let failureDetails = parsed.status.Failure;
|
|
289
|
+
if (parsed.transaction_outcome &&
|
|
290
|
+
typeof parsed.transaction_outcome.outcome.status === "object" &&
|
|
291
|
+
"Failure" in parsed.transaction_outcome.outcome.status) {
|
|
292
|
+
failureDetails = parsed.transaction_outcome.outcome.status.Failure;
|
|
293
|
+
errorMessage = extractErrorMessage(failureDetails);
|
|
294
|
+
}
|
|
295
|
+
else if (failedReceipt &&
|
|
296
|
+
typeof failedReceipt.outcome.status === "object" &&
|
|
297
|
+
"Failure" in failedReceipt.outcome.status) {
|
|
298
|
+
failureDetails = failedReceipt.outcome.status.Failure;
|
|
299
|
+
errorMessage = extractErrorMessage(failureDetails);
|
|
300
|
+
}
|
|
301
|
+
throw new InvalidTransactionError(errorMessage, failureDetails);
|
|
302
|
+
}
|
|
303
|
+
}
|
|
304
|
+
// Safe cast: TypeScript guarantees W is a valid key, Zod validates the structure,
|
|
305
|
+
// and waitUntil determines which variant we get from the RPC
|
|
306
|
+
return parsed;
|
|
307
|
+
}
|
|
308
|
+
/**
|
|
309
|
+
* Get node status via `status`.
|
|
310
|
+
*/
|
|
311
|
+
async getStatus() {
|
|
312
|
+
const result = await this.call("status", []);
|
|
313
|
+
return StatusResponseSchema.parse(result);
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Get gas price via `gas_price`.
|
|
317
|
+
*
|
|
318
|
+
* @param blockId - Optional block hash or height; `null` for latest.
|
|
319
|
+
*/
|
|
320
|
+
async getGasPrice(blockId = null) {
|
|
321
|
+
const result = await this.call("gas_price", [blockId]);
|
|
322
|
+
return GasPriceResponseSchema.parse(result);
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
//# sourceMappingURL=rpc.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpc.js","sourceRoot":"","sources":["../../../src/core/rpc/rpc.ts"],"names":[],"mappings":"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"}
|