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,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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"}