near-kit 0.1.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/README.md +232 -130
- package/dist/core/transaction.d.ts.map +1 -1
- package/dist/core/transaction.js +4 -0
- package/dist/core/transaction.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/keys/index.d.ts +3 -1
- package/dist/keys/index.d.ts.map +1 -1
- package/dist/keys/index.js +3 -1
- package/dist/keys/index.js.map +1 -1
- 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/package.json +3 -3
package/README.md
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
# near-kit
|
|
2
|
+
|
|
2
3
|
[](https://www.npmjs.com/package/near-kit)
|
|
3
4
|
[](https://opensource.org/licenses/MIT)
|
|
4
5
|
[](https://www.typescriptlang.org/)
|
|
@@ -26,75 +27,129 @@ bun install near-kit
|
|
|
26
27
|
## Quick Start
|
|
27
28
|
|
|
28
29
|
```typescript
|
|
29
|
-
import { Near } from
|
|
30
|
+
import { Near } from "near-kit"
|
|
30
31
|
|
|
31
|
-
// Initialize
|
|
32
|
+
// Initialize for backend/scripts
|
|
32
33
|
const near = new Near({
|
|
33
|
-
network:
|
|
34
|
-
privateKey:
|
|
35
|
-
defaultSignerId:
|
|
36
|
-
})
|
|
34
|
+
network: "testnet",
|
|
35
|
+
privateKey: "ed25519:...",
|
|
36
|
+
defaultSignerId: "alice.testnet",
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
// View methods (read-only, no gas)
|
|
40
|
+
const balance = await near.view("example.testnet", "get_balance", {
|
|
41
|
+
account_id: "alice.testnet",
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
// Call methods (requires signature, costs gas)
|
|
45
|
+
await near.call(
|
|
46
|
+
"example.testnet",
|
|
47
|
+
"increment",
|
|
48
|
+
{},
|
|
49
|
+
{attachedDeposit: "0.1 NEAR"}
|
|
50
|
+
)
|
|
37
51
|
|
|
38
|
-
//
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
});
|
|
52
|
+
// Send NEAR tokens
|
|
53
|
+
await near.send("bob.testnet", "5 NEAR")
|
|
54
|
+
```
|
|
42
55
|
|
|
43
|
-
|
|
44
|
-
await near.call('example.testnet', 'increment', {}, {
|
|
45
|
-
attachedDeposit: '0.1' // Attach 0.1 NEAR
|
|
46
|
-
});
|
|
56
|
+
## Getting Started
|
|
47
57
|
|
|
48
|
-
|
|
49
|
-
await near.send('bob.testnet', '5'); // Send 5 NEAR to Bob
|
|
58
|
+
near-kit provides a unified API that works across different environments. Configuration varies by environment, but the API for calling contracts, sending transactions, and building transactions remains identical.
|
|
50
59
|
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
60
|
+
### Backend & Scripts
|
|
61
|
+
|
|
62
|
+
For local testing, use the sandbox (no network or key configuration needed):
|
|
63
|
+
|
|
64
|
+
```typescript
|
|
65
|
+
import { Sandbox } from "near-kit"
|
|
66
|
+
|
|
67
|
+
const sandbox = await Sandbox.start()
|
|
68
|
+
const near = new Near({ network: sandbox })
|
|
69
|
+
|
|
70
|
+
// Test with automatically provisioned accounts
|
|
71
|
+
await near.call("contract.test.near", "method", {})
|
|
72
|
+
|
|
73
|
+
await sandbox.stop()
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
For testnet/mainnet development, pass a private key directly:
|
|
77
|
+
|
|
78
|
+
```typescript
|
|
79
|
+
const near = new Near({
|
|
80
|
+
network: "testnet",
|
|
81
|
+
privateKey: "ed25519:...",
|
|
82
|
+
defaultSignerId: "alice.testnet",
|
|
83
|
+
})
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
For production applications, use a keyStore:
|
|
87
|
+
|
|
88
|
+
```typescript
|
|
89
|
+
import { FileKeyStore } from "near-kit"
|
|
90
|
+
|
|
91
|
+
const near = new Near({
|
|
92
|
+
network: "testnet",
|
|
93
|
+
keyStore: new FileKeyStore("~/.near-credentials"),
|
|
94
|
+
})
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Frontend & Wallets
|
|
98
|
+
|
|
99
|
+
In the browser, connect to user wallets. The same `near.call()`, `near.send()`, and `near.transaction()` methods work seamlessly:
|
|
100
|
+
|
|
101
|
+
```typescript
|
|
102
|
+
import { fromWalletSelector } from "near-kit"
|
|
103
|
+
|
|
104
|
+
const near = new Near({
|
|
105
|
+
network: "testnet",
|
|
106
|
+
wallet: fromWalletSelector(walletInstance),
|
|
107
|
+
})
|
|
108
|
+
|
|
109
|
+
// Same API as backend
|
|
110
|
+
await near.call("contract.near", "method", { arg: "value" })
|
|
54
111
|
```
|
|
55
112
|
|
|
113
|
+
This works through a signer abstraction - whether you pass `privateKey`, `keyStore`, `wallet`, or `sandbox`, they all implement the same signing interface internally.
|
|
114
|
+
|
|
56
115
|
## Core API
|
|
57
116
|
|
|
58
117
|
### Initialization
|
|
59
118
|
|
|
60
119
|
```typescript
|
|
61
120
|
// Simple - defaults to mainnet
|
|
62
|
-
const near = new Near()
|
|
121
|
+
const near = new Near()
|
|
63
122
|
|
|
64
123
|
// With network selection
|
|
65
|
-
const near = new Near({ network:
|
|
124
|
+
const near = new Near({ network: "testnet" })
|
|
66
125
|
|
|
67
126
|
// With custom configuration
|
|
68
127
|
const near = new Near({
|
|
69
|
-
network:
|
|
70
|
-
privateKey:
|
|
71
|
-
})
|
|
128
|
+
network: "testnet",
|
|
129
|
+
privateKey: "ed25519:...",
|
|
130
|
+
})
|
|
72
131
|
```
|
|
73
132
|
|
|
74
133
|
### Basic Operations
|
|
75
134
|
|
|
76
135
|
```typescript
|
|
77
136
|
// View methods (free, no signature required)
|
|
78
|
-
const result = await near.view(
|
|
79
|
-
'contract.near',
|
|
80
|
-
'get_data',
|
|
81
|
-
{ key: 'value' }
|
|
82
|
-
);
|
|
137
|
+
const result = await near.view("contract.near", "get_data", { key: "value" })
|
|
83
138
|
|
|
84
139
|
// Check account balance
|
|
85
|
-
const balance = await near.getBalance(
|
|
140
|
+
const balance = await near.getBalance("alice.near")
|
|
86
141
|
|
|
87
142
|
// Check if account exists
|
|
88
|
-
const exists = await near.accountExists(
|
|
143
|
+
const exists = await near.accountExists("alice.near")
|
|
89
144
|
|
|
90
145
|
// Get network status
|
|
91
|
-
const status = await near.getStatus()
|
|
146
|
+
const status = await near.getStatus()
|
|
92
147
|
```
|
|
93
148
|
|
|
94
149
|
### Type-Safe Contracts
|
|
95
150
|
|
|
96
151
|
```typescript
|
|
97
|
-
import type { Contract } from
|
|
152
|
+
import type { Contract } from "near-kit"
|
|
98
153
|
|
|
99
154
|
// Define contract interface using Contract<> helper
|
|
100
155
|
type MyContract = Contract<{
|
|
@@ -109,17 +164,17 @@ type MyContract = Contract<{
|
|
|
109
164
|
}>
|
|
110
165
|
|
|
111
166
|
// Create type-safe contract
|
|
112
|
-
const contract = near.contract<MyContract>(
|
|
167
|
+
const contract = near.contract<MyContract>("example.near")
|
|
113
168
|
|
|
114
169
|
// Fully typed method calls
|
|
115
|
-
const balance = await contract.view.get_balance({ account_id:
|
|
116
|
-
const info = await contract.view.get_info()
|
|
170
|
+
const balance = await contract.view.get_balance({ account_id: "alice.near" })
|
|
171
|
+
const info = await contract.view.get_info()
|
|
117
172
|
|
|
118
173
|
// Call methods automatically get options parameter
|
|
119
174
|
await contract.call.transfer(
|
|
120
|
-
{ to:
|
|
121
|
-
{ attachedDeposit:
|
|
122
|
-
)
|
|
175
|
+
{ to: "bob.near", amount: "10" },
|
|
176
|
+
{ attachedDeposit: "1 NEAR" }
|
|
177
|
+
)
|
|
123
178
|
```
|
|
124
179
|
|
|
125
180
|
### Transaction Builder
|
|
@@ -127,12 +182,16 @@ await contract.call.transfer(
|
|
|
127
182
|
```typescript
|
|
128
183
|
// Alice builds a transaction with multiple actions
|
|
129
184
|
// 'alice.near' is the signer - the account that signs and pays for this transaction
|
|
130
|
-
const receipt = await near
|
|
131
|
-
.
|
|
132
|
-
.
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
185
|
+
const receipt = await near
|
|
186
|
+
.transaction("alice.near") // Alice signs
|
|
187
|
+
.transfer("bob.near", "10 NEAR") // Alice sends Bob 10 NEAR
|
|
188
|
+
.functionCall(
|
|
189
|
+
"market.near",
|
|
190
|
+
"buy",
|
|
191
|
+
{ id: "123" },
|
|
192
|
+
{ attachedDeposit: "5 NEAR" } // Alice attaches 5 NEAR to the call
|
|
193
|
+
)
|
|
194
|
+
.send()
|
|
136
195
|
```
|
|
137
196
|
|
|
138
197
|
### Batch Operations
|
|
@@ -140,125 +199,167 @@ const receipt = await near.transaction('alice.near') // Alice signs
|
|
|
140
199
|
```typescript
|
|
141
200
|
// Run multiple operations in parallel
|
|
142
201
|
const [balance, status, exists] = await near.batch(
|
|
143
|
-
near.getBalance(
|
|
202
|
+
near.getBalance("alice.near"),
|
|
144
203
|
near.getStatus(),
|
|
145
|
-
near.accountExists(
|
|
146
|
-
)
|
|
204
|
+
near.accountExists("bob.near")
|
|
205
|
+
)
|
|
147
206
|
```
|
|
148
207
|
|
|
149
208
|
## Local Testing with Sandbox
|
|
150
209
|
|
|
151
210
|
```typescript
|
|
152
|
-
import { Sandbox } from
|
|
211
|
+
import { Sandbox } from "near-kit"
|
|
153
212
|
|
|
154
|
-
const sandbox = await Sandbox.start()
|
|
155
|
-
const near = new Near({ network: sandbox })
|
|
213
|
+
const sandbox = await Sandbox.start()
|
|
214
|
+
const near = new Near({ network: sandbox })
|
|
156
215
|
// ... run tests
|
|
157
|
-
await sandbox.stop()
|
|
216
|
+
await sandbox.stop()
|
|
158
217
|
```
|
|
159
218
|
|
|
160
219
|
**With test framework:**
|
|
220
|
+
|
|
161
221
|
```typescript
|
|
162
|
-
let sandbox: Sandbox
|
|
163
|
-
beforeAll(async () => {
|
|
164
|
-
|
|
222
|
+
let sandbox: Sandbox
|
|
223
|
+
beforeAll(async () => {
|
|
224
|
+
sandbox = await Sandbox.start()
|
|
225
|
+
})
|
|
226
|
+
afterAll(async () => {
|
|
227
|
+
await sandbox.stop()
|
|
228
|
+
})
|
|
165
229
|
```
|
|
166
230
|
|
|
167
231
|
## Key Management
|
|
168
232
|
|
|
169
233
|
```typescript
|
|
170
|
-
import { InMemoryKeyStore, FileKeyStore } from
|
|
234
|
+
import { InMemoryKeyStore, FileKeyStore, RotatingKeyStore } from "near-kit"
|
|
171
235
|
|
|
172
236
|
// In-memory (runtime only)
|
|
173
237
|
const near = new Near({
|
|
174
238
|
keyStore: new InMemoryKeyStore({
|
|
175
|
-
|
|
176
|
-
})
|
|
177
|
-
})
|
|
239
|
+
"alice.near": "ed25519:...",
|
|
240
|
+
}),
|
|
241
|
+
})
|
|
178
242
|
|
|
179
243
|
// File-based (persistent)
|
|
180
244
|
const near = new Near({
|
|
181
|
-
keyStore: new FileKeyStore(
|
|
182
|
-
})
|
|
245
|
+
keyStore: new FileKeyStore("~/.near-credentials"),
|
|
246
|
+
})
|
|
247
|
+
|
|
248
|
+
// Rotating keys for high-throughput concurrent transactions
|
|
249
|
+
const near = new Near({
|
|
250
|
+
keyStore: new RotatingKeyStore({
|
|
251
|
+
"alice.near": [
|
|
252
|
+
"ed25519:key1...",
|
|
253
|
+
"ed25519:key2...",
|
|
254
|
+
"ed25519:key3...",
|
|
255
|
+
],
|
|
256
|
+
}),
|
|
257
|
+
})
|
|
183
258
|
```
|
|
184
259
|
|
|
185
260
|
## Wallet Integration
|
|
186
261
|
|
|
187
|
-
near-kit
|
|
262
|
+
near-kit integrates with Wallet Selector and HOT Connector through a signer abstraction. Wallet adapters are converted to signers via `fromWalletSelector()` and `fromHotConnect()` shims, allowing the same API to work across backend and frontend without separate client implementations.
|
|
188
263
|
|
|
189
264
|
### NEAR Wallet Selector
|
|
190
265
|
|
|
191
266
|
```typescript
|
|
192
|
-
import { Near, fromWalletSelector } from
|
|
193
|
-
import { setupWalletSelector } from
|
|
194
|
-
import { setupMyNearWallet } from
|
|
195
|
-
import { setupHereWallet } from
|
|
267
|
+
import { Near, fromWalletSelector } from "near-kit"
|
|
268
|
+
import { setupWalletSelector } from "@near-wallet-selector/core"
|
|
269
|
+
import { setupMyNearWallet } from "@near-wallet-selector/my-near-wallet"
|
|
270
|
+
import { setupHereWallet } from "@near-wallet-selector/here-wallet"
|
|
196
271
|
|
|
197
272
|
// Setup wallet selector
|
|
198
273
|
const selector = await setupWalletSelector({
|
|
199
|
-
network:
|
|
200
|
-
modules: [
|
|
201
|
-
|
|
202
|
-
setupHereWallet(),
|
|
203
|
-
],
|
|
204
|
-
});
|
|
274
|
+
network: "testnet",
|
|
275
|
+
modules: [setupMyNearWallet(), setupHereWallet()],
|
|
276
|
+
})
|
|
205
277
|
|
|
206
278
|
// Get wallet instance (after user connects)
|
|
207
|
-
const wallet = await selector.wallet()
|
|
279
|
+
const wallet = await selector.wallet()
|
|
208
280
|
|
|
209
281
|
// Use with near-kit
|
|
210
282
|
const near = new Near({
|
|
211
|
-
network:
|
|
283
|
+
network: "testnet",
|
|
212
284
|
wallet: fromWalletSelector(wallet),
|
|
213
|
-
})
|
|
285
|
+
})
|
|
214
286
|
|
|
215
287
|
// All operations now use the wallet for signing
|
|
216
|
-
await near.call(
|
|
217
|
-
await near.send(
|
|
288
|
+
await near.call("contract.near", "method", { arg: "value" })
|
|
289
|
+
await near.send("bob.near", "10 NEAR")
|
|
218
290
|
```
|
|
219
291
|
|
|
220
292
|
### HOT Connector
|
|
221
293
|
|
|
222
294
|
```typescript
|
|
223
|
-
import { Near, fromHotConnect } from
|
|
224
|
-
import { NearConnector } from
|
|
295
|
+
import { Near, fromHotConnect } from "near-kit"
|
|
296
|
+
import { NearConnector } from "@hot-labs/near-connect"
|
|
225
297
|
|
|
226
298
|
// Create connector
|
|
227
|
-
const connector = new NearConnector({ network:
|
|
299
|
+
const connector = new NearConnector({ network: "testnet" })
|
|
228
300
|
|
|
229
301
|
// Wait for user to connect
|
|
230
|
-
connector.on(
|
|
302
|
+
connector.on("wallet:signIn", async () => {
|
|
231
303
|
const near = new Near({
|
|
232
|
-
network:
|
|
304
|
+
network: "testnet",
|
|
233
305
|
wallet: fromHotConnect(connector),
|
|
234
|
-
})
|
|
306
|
+
})
|
|
235
307
|
|
|
236
308
|
// Use near-kit with the connected wallet
|
|
237
|
-
await near.call(
|
|
238
|
-
})
|
|
309
|
+
await near.call("contract.near", "method", { arg: "value" })
|
|
310
|
+
})
|
|
239
311
|
|
|
240
312
|
// Trigger wallet connection
|
|
241
|
-
await connector.signIn()
|
|
313
|
+
await connector.signIn()
|
|
242
314
|
```
|
|
243
315
|
|
|
244
316
|
## Error Handling
|
|
245
317
|
|
|
318
|
+
Errors are organized by category and include detailed context for debugging. Use `instanceof` checks to handle specific error types.
|
|
319
|
+
|
|
320
|
+
#### Network Errors
|
|
321
|
+
|
|
246
322
|
```typescript
|
|
247
|
-
import {
|
|
248
|
-
InsufficientBalanceError,
|
|
249
|
-
FunctionCallError,
|
|
250
|
-
NetworkError,
|
|
251
|
-
} from 'near-kit';
|
|
323
|
+
import { NetworkError, TimeoutError } from "near-kit"
|
|
252
324
|
|
|
253
325
|
try {
|
|
254
|
-
await near.call(
|
|
326
|
+
await near.call("contract.near", "method", {})
|
|
255
327
|
} catch (error) {
|
|
256
|
-
if (error instanceof
|
|
257
|
-
console.log(
|
|
258
|
-
} else if (error instanceof FunctionCallError) {
|
|
259
|
-
console.log(`Contract error: ${error.panic}`);
|
|
328
|
+
if (error instanceof TimeoutError) {
|
|
329
|
+
console.log("Request timed out - already retried automatically")
|
|
260
330
|
} else if (error instanceof NetworkError) {
|
|
261
|
-
//
|
|
331
|
+
// Handle other network issues
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
```
|
|
335
|
+
|
|
336
|
+
#### Transaction Errors
|
|
337
|
+
|
|
338
|
+
```typescript
|
|
339
|
+
import { InsufficientBalanceError, InvalidNonceError } from "near-kit"
|
|
340
|
+
|
|
341
|
+
try {
|
|
342
|
+
await near.send("bob.near", "1000000 NEAR")
|
|
343
|
+
} catch (error) {
|
|
344
|
+
if (error instanceof InsufficientBalanceError) {
|
|
345
|
+
console.log(`Need ${error.required}, have ${error.available}`)
|
|
346
|
+
} else if (error instanceof InvalidNonceError) {
|
|
347
|
+
// Already retried automatically - only thrown if retries exhausted
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
#### Contract Errors
|
|
353
|
+
|
|
354
|
+
```typescript
|
|
355
|
+
import { FunctionCallError } from "near-kit"
|
|
356
|
+
|
|
357
|
+
try {
|
|
358
|
+
await near.call("contract.near", "method", {})
|
|
359
|
+
} catch (error) {
|
|
360
|
+
if (error instanceof FunctionCallError) {
|
|
361
|
+
console.log(`Contract panicked: ${error.panic}`)
|
|
362
|
+
console.log(`Logs:`, error.logs)
|
|
262
363
|
}
|
|
263
364
|
}
|
|
264
365
|
```
|
|
@@ -270,14 +371,15 @@ try {
|
|
|
270
371
|
Deploy and initialize a contract in a single transaction:
|
|
271
372
|
|
|
272
373
|
```typescript
|
|
273
|
-
const contractWasm = await fs.readFile(
|
|
274
|
-
|
|
275
|
-
await near
|
|
276
|
-
.
|
|
277
|
-
.
|
|
278
|
-
.
|
|
279
|
-
.
|
|
280
|
-
.
|
|
374
|
+
const contractWasm = await fs.readFile("./contract.wasm")
|
|
375
|
+
|
|
376
|
+
await near
|
|
377
|
+
.transaction("alice.near")
|
|
378
|
+
.createAccount("contract.alice.near")
|
|
379
|
+
.transfer("contract.alice.near", "10 NEAR")
|
|
380
|
+
.deployContract("contract.alice.near", contractWasm)
|
|
381
|
+
.functionCall("contract.alice.near", "init", { owner: "alice.near" })
|
|
382
|
+
.send()
|
|
281
383
|
```
|
|
282
384
|
|
|
283
385
|
### NEP-413 Message Signing
|
|
@@ -286,16 +388,16 @@ Authenticate users without gas fees:
|
|
|
286
388
|
|
|
287
389
|
```typescript
|
|
288
390
|
const signedMessage = await near.signMessage({
|
|
289
|
-
message:
|
|
290
|
-
recipient:
|
|
291
|
-
nonce: crypto.getRandomValues(new Uint8Array(32))
|
|
292
|
-
})
|
|
391
|
+
message: "Login to MyApp",
|
|
392
|
+
recipient: "myapp.near",
|
|
393
|
+
nonce: crypto.getRandomValues(new Uint8Array(32)),
|
|
394
|
+
})
|
|
293
395
|
|
|
294
396
|
// Send to backend for verification
|
|
295
|
-
await fetch(
|
|
296
|
-
method:
|
|
297
|
-
body: JSON.stringify(signedMessage)
|
|
298
|
-
})
|
|
397
|
+
await fetch("/api/auth", {
|
|
398
|
+
method: "POST",
|
|
399
|
+
body: JSON.stringify(signedMessage),
|
|
400
|
+
})
|
|
299
401
|
```
|
|
300
402
|
|
|
301
403
|
### Delegate Actions (NEP-366)
|
|
@@ -305,25 +407,25 @@ Enable meta-transactions and sponsored transactions where a relayer pays the gas
|
|
|
305
407
|
```typescript
|
|
306
408
|
// User creates and signs a delegate action (no gas cost to user)
|
|
307
409
|
const userNear = new Near({
|
|
308
|
-
network:
|
|
309
|
-
privateKey:
|
|
310
|
-
})
|
|
410
|
+
network: "testnet",
|
|
411
|
+
privateKey: "ed25519:...", // User's key
|
|
412
|
+
})
|
|
311
413
|
|
|
312
414
|
const signedDelegateAction = await userNear
|
|
313
|
-
.transaction(
|
|
314
|
-
.transfer(
|
|
315
|
-
.delegate({ blockHeightOffset: 100 })
|
|
415
|
+
.transaction("user.near")
|
|
416
|
+
.transfer("recipient.near", "1 NEAR")
|
|
417
|
+
.delegate({ blockHeightOffset: 100 })
|
|
316
418
|
|
|
317
419
|
// Relayer submits the transaction (pays the gas)
|
|
318
420
|
const relayerNear = new Near({
|
|
319
|
-
network:
|
|
320
|
-
privateKey:
|
|
321
|
-
})
|
|
421
|
+
network: "testnet",
|
|
422
|
+
privateKey: "ed25519:...", // Relayer's key
|
|
423
|
+
})
|
|
322
424
|
|
|
323
425
|
await relayerNear
|
|
324
|
-
.transaction(
|
|
426
|
+
.transaction("relayer.near")
|
|
325
427
|
.signedDelegateAction(signedDelegateAction)
|
|
326
|
-
.send()
|
|
428
|
+
.send()
|
|
327
429
|
```
|
|
328
430
|
|
|
329
431
|
### Automatic Nonce Management
|
|
@@ -333,10 +435,10 @@ No more nonce conflicts - the library handles nonce tracking and retries automat
|
|
|
333
435
|
```typescript
|
|
334
436
|
// Safe to run multiple transactions concurrently
|
|
335
437
|
await Promise.all([
|
|
336
|
-
near.send(
|
|
337
|
-
near.send(
|
|
338
|
-
near.send(
|
|
339
|
-
])
|
|
438
|
+
near.send("bob.near", "1 NEAR"),
|
|
439
|
+
near.send("charlie.near", "1 NEAR"),
|
|
440
|
+
near.send("dave.near", "1 NEAR"),
|
|
441
|
+
])
|
|
340
442
|
// Nonces are automatically managed and conflicts are retried
|
|
341
443
|
```
|
|
342
444
|
|
|
@@ -346,7 +448,7 @@ Automatic retries for network errors with exponential backoff:
|
|
|
346
448
|
|
|
347
449
|
```typescript
|
|
348
450
|
try {
|
|
349
|
-
await near.call(
|
|
451
|
+
await near.call("contract.near", "method", {})
|
|
350
452
|
} catch (error) {
|
|
351
453
|
if (error instanceof TimeoutError && error.retryable) {
|
|
352
454
|
// Already retried automatically
|
|
@@ -367,7 +469,7 @@ bun test
|
|
|
367
469
|
bun run build
|
|
368
470
|
|
|
369
471
|
# Run examples
|
|
370
|
-
bun run examples/
|
|
472
|
+
bun run examples/quickstart.ts
|
|
371
473
|
```
|
|
372
474
|
|
|
373
475
|
## License
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../src/core/transaction.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AAUH,OAAO,EACL,KAAK,MAAM,EACX,KAAK,GAAG,EAGR,KAAK,UAAU,EAChB,MAAM,wBAAwB,CAAA;AAI/B,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAC7C,OAAO,EAGL,KAAK,oBAAoB,EAI1B,MAAM,aAAa,CAAA;AACpB,OAAO,KAAK,EAEV,wBAAwB,EAExB,QAAQ,EACR,SAAS,EACT,WAAW,EAEX,MAAM,EACN,WAAW,EACX,iBAAiB,EACjB,gBAAgB,EACjB,MAAM,YAAY,CAAA;AAEnB;;GAEG;AACH,MAAM,MAAM,mBAAmB,GAC3B;IAAE,IAAI,EAAE,YAAY,CAAA;CAAE,GACtB;IACE,IAAI,EAAE,cAAc,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;IACtB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,CAAA;AAEL,KAAK,sBAAsB,GAAG;IAC5B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAA;IAC1B;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,CAAA;IACd;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;CAC/B,CAAA;AA0CD;;;;;;GAMG;AACH,qBAAa,kBAAkB;IAE7B,OAAO,CAAC,MAAM,CAAC,YAAY,CAAqB;IAEhD,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,OAAO,CAAU;IACzB,OAAO,CAAC,UAAU,CAAC,CAAQ;IAC3B,OAAO,CAAC,GAAG,CAAW;IACtB,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,MAAM,CAAC,CAAQ;IACvB,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,MAAM,CAAC,CAAkB;IACjC,OAAO,CAAC,gBAAgB,CAAmB;IAC3C,OAAO,CAAC,mBAAmB,CAAC,CAAqB;IACjD,OAAO,CAAC,cAAc,CAAC,CAGtB;gBAGC,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,SAAS,EACd,QAAQ,EAAE,QAAQ,EAClB,MAAM,CAAC,EAAE,MAAM,EACf,gBAAgB,GAAE,iBAAyC,EAC3D,MAAM,CAAC,EAAE,gBAAgB,EACzB,mBAAmB,CAAC,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC;IAkB3C;;OAEG;IACH,OAAO,CAAC,eAAe;IAKvB;;OAEG;YACW,cAAc;
|
|
1
|
+
{"version":3,"file":"transaction.d.ts","sourceRoot":"","sources":["../../src/core/transaction.ts"],"names":[],"mappings":"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"}
|
package/dist/core/transaction.js
CHANGED
|
@@ -118,6 +118,10 @@ export class TransactionBuilder {
|
|
|
118
118
|
if (!keyPair) {
|
|
119
119
|
throw new InvalidKeyError(`No key found for account: ${this.signerId}`);
|
|
120
120
|
}
|
|
121
|
+
// Cache the resolved key pair to ensure keyStore.get() is only called once
|
|
122
|
+
// per TransactionBuilder instance. This is critical for RotatingKeyStore
|
|
123
|
+
// which returns a different key on each get() call.
|
|
124
|
+
this.keyPair = keyPair;
|
|
121
125
|
return keyPair;
|
|
122
126
|
}
|
|
123
127
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../src/core/transaction.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"transaction.js","sourceRoot":"","sources":["../../src/core/transaction.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -9,7 +9,7 @@ export { TransactionBuilder } from "./core/transaction.js";
|
|
|
9
9
|
export type { CallOptions, FinalExecutionOutcome, KeyConfig, KeyPair, KeyStore, NearConfig, NetworkConfig, PublicKey, SendOptions, Signature, SignedMessage, SignMessageParams, TxExecutionStatus, WalletAccount, WalletConnection, WalletSignInOptions, } from "./core/types.js";
|
|
10
10
|
export { AccessKeyDoesNotExistError, AccountDoesNotExistError, FunctionCallError, GasLimitExceededError, InsufficientBalanceError, InvalidAccountIdError, InvalidKeyError, NearError, NetworkError, SignatureError, TransactionTimeoutError, WalletError, } from "./errors/index.js";
|
|
11
11
|
export type { LegacyCredential, NearCliCredential, Network, } from "./keys/index.js";
|
|
12
|
-
export { InMemoryKeyStore, } from "./keys/index.js";
|
|
12
|
+
export { InMemoryKeyStore, RotatingKeyStore, } from "./keys/index.js";
|
|
13
13
|
export type { SandboxOptions } from "./sandbox/index.js";
|
|
14
14
|
export { Amount, formatAmount, formatGas, Gas, generateKey, generateNep413Nonce, generateSeedPhrase, isPrivateKey, isValidAccountId, isValidPublicKey, type PrivateKey, parseAmount, parseGas, parseKey, parseSeedPhrase, validatePrivateKey, verifyNep413Signature, } from "./utils/index.js";
|
|
15
15
|
export { fromHotConnect, fromWalletSelector } from "./wallets/index.js";
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAExE,OAAO,EACL,cAAc,EACd,cAAc,GACf,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AACrC,OAAO,EACL,sBAAsB,EACtB,KAAK,oBAAoB,EACzB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAE1D,YAAY,EACV,WAAW,EACX,qBAAqB,EACrB,SAAS,EACT,OAAO,EACP,QAAQ,EACR,UAAU,EACV,aAAa,EACb,SAAS,EACT,WAAW,EACX,SAAS,EACT,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,EACxB,iBAAiB,EACjB,qBAAqB,EACrB,wBAAwB,EACxB,qBAAqB,EACrB,eAAe,EACf,SAAS,EACT,YAAY,EACZ,cAAc,EACd,uBAAuB,EACvB,WAAW,GACZ,MAAM,mBAAmB,CAAA;AAE1B,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,OAAO,GACR,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACL,gBAAgB,GAKjB,MAAM,iBAAiB,CAAA;AAGxB,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAExD,OAAO,EACL,MAAM,EACN,YAAY,EACZ,SAAS,EACT,GAAG,EACH,WAAW,EACX,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,UAAU,EACf,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,YAAY,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,yBAAyB,CAAA;AAExE,OAAO,EACL,cAAc,EACd,cAAc,GACf,MAAM,mBAAmB,CAAA;AAE1B,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AACrC,OAAO,EACL,sBAAsB,EACtB,KAAK,oBAAoB,EACzB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAE1D,YAAY,EACV,WAAW,EACX,qBAAqB,EACrB,SAAS,EACT,OAAO,EACP,QAAQ,EACR,UAAU,EACV,aAAa,EACb,SAAS,EACT,WAAW,EACX,SAAS,EACT,aAAa,EACb,iBAAiB,EACjB,iBAAiB,EACjB,aAAa,EACb,gBAAgB,EAChB,mBAAmB,GACpB,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,EACxB,iBAAiB,EACjB,qBAAqB,EACrB,wBAAwB,EACxB,qBAAqB,EACrB,eAAe,EACf,SAAS,EACT,YAAY,EACZ,cAAc,EACd,uBAAuB,EACvB,WAAW,GACZ,MAAM,mBAAmB,CAAA;AAE1B,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,OAAO,GACR,MAAM,iBAAiB,CAAA;AAExB,OAAO,EACL,gBAAgB,EAChB,gBAAgB,GAKjB,MAAM,iBAAiB,CAAA;AAGxB,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAExD,OAAO,EACL,MAAM,EACN,YAAY,EACZ,SAAS,EACT,GAAG,EACH,WAAW,EACX,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAChB,KAAK,UAAU,EACf,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,kBAAkB,CAAA;AAEzB,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -10,7 +10,7 @@ export { TransactionBuilder } from "./core/transaction.js";
|
|
|
10
10
|
// Errors
|
|
11
11
|
export { AccessKeyDoesNotExistError, AccountDoesNotExistError, FunctionCallError, GasLimitExceededError, InsufficientBalanceError, InvalidAccountIdError, InvalidKeyError, NearError, NetworkError, SignatureError, TransactionTimeoutError, WalletError, } from "./errors/index.js";
|
|
12
12
|
// Key stores
|
|
13
|
-
export { InMemoryKeyStore,
|
|
13
|
+
export { InMemoryKeyStore, RotatingKeyStore,
|
|
14
14
|
// Node.js-only keystores not exported by default (browser environments don't support them)
|
|
15
15
|
// For Node.js/Bun:
|
|
16
16
|
// import { FileKeyStore } from "near-kit/keys/file"
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,mBAAmB;AACnB,OAAO,EACL,cAAc,EACd,cAAc,GACf,MAAM,mBAAmB,CAAA;AAC1B,aAAa;AACb,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AACrC,OAAO,EACL,sBAAsB,EAEtB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAoB1D,SAAS;AACT,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,EACxB,iBAAiB,EACjB,qBAAqB,EACrB,wBAAwB,EACxB,qBAAqB,EACrB,eAAe,EACf,SAAS,EACT,YAAY,EACZ,cAAc,EACd,uBAAuB,EACvB,WAAW,GACZ,MAAM,mBAAmB,CAAA;AAO1B,aAAa;AACb,OAAO,EACL,gBAAgB;AAChB,2FAA2F;AAC3F,mBAAmB;AACnB,sDAAsD;AACtD,0DAA0D;EAC3D,MAAM,iBAAiB,CAAA;AAIxB,YAAY;AACZ,OAAO,EACL,MAAM,EACN,YAAY,EACZ,SAAS,EACT,GAAG,EACH,WAAW,EACX,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAEhB,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,kBAAkB,CAAA;AACzB,kBAAkB;AAClB,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,mBAAmB;AACnB,OAAO,EACL,cAAc,EACd,cAAc,GACf,MAAM,mBAAmB,CAAA;AAC1B,aAAa;AACb,OAAO,EAAE,IAAI,EAAE,MAAM,gBAAgB,CAAA;AACrC,OAAO,EACL,sBAAsB,EAEtB,uBAAuB,EACvB,uBAAuB,GACxB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAA;AAoB1D,SAAS;AACT,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,EACxB,iBAAiB,EACjB,qBAAqB,EACrB,wBAAwB,EACxB,qBAAqB,EACrB,eAAe,EACf,SAAS,EACT,YAAY,EACZ,cAAc,EACd,uBAAuB,EACvB,WAAW,GACZ,MAAM,mBAAmB,CAAA;AAO1B,aAAa;AACb,OAAO,EACL,gBAAgB,EAChB,gBAAgB;AAChB,2FAA2F;AAC3F,mBAAmB;AACnB,sDAAsD;AACtD,0DAA0D;EAC3D,MAAM,iBAAiB,CAAA;AAIxB,YAAY;AACZ,OAAO,EACL,MAAM,EACN,YAAY,EACZ,SAAS,EACT,GAAG,EACH,WAAW,EACX,mBAAmB,EACnB,kBAAkB,EAClB,YAAY,EACZ,gBAAgB,EAChB,gBAAgB,EAEhB,WAAW,EACX,QAAQ,EACR,QAAQ,EACR,eAAe,EACf,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,kBAAkB,CAAA;AACzB,kBAAkB;AAClB,OAAO,EAAE,cAAc,EAAE,kBAAkB,EAAE,MAAM,oBAAoB,CAAA"}
|
package/dist/keys/index.d.ts
CHANGED
|
@@ -3,10 +3,12 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @remarks
|
|
5
5
|
* Includes {@link InMemoryKeyStore} for ephemeral keys, {@link FileKeyStore}
|
|
6
|
-
* for NEAR-CLI compatible disk storage,
|
|
6
|
+
* for NEAR-CLI compatible disk storage, {@link RotatingKeyStore} for
|
|
7
|
+
* high-throughput concurrent transactions, and credential schemas for working
|
|
7
8
|
* with existing NEAR tooling.
|
|
8
9
|
*/
|
|
9
10
|
export * from "./credential-schemas.js";
|
|
10
11
|
export * from "./file-keystore.js";
|
|
11
12
|
export * from "./in-memory-keystore.js";
|
|
13
|
+
export * from "./rotating-keystore.js";
|
|
12
14
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/keys/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/keys/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/keys/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,cAAc,yBAAyB,CAAA;AACvC,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,wBAAwB,CAAA"}
|
package/dist/keys/index.js
CHANGED
|
@@ -3,12 +3,14 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @remarks
|
|
5
5
|
* Includes {@link InMemoryKeyStore} for ephemeral keys, {@link FileKeyStore}
|
|
6
|
-
* for NEAR-CLI compatible disk storage,
|
|
6
|
+
* for NEAR-CLI compatible disk storage, {@link RotatingKeyStore} for
|
|
7
|
+
* high-throughput concurrent transactions, and credential schemas for working
|
|
7
8
|
* with existing NEAR tooling.
|
|
8
9
|
*/
|
|
9
10
|
export * from "./credential-schemas.js";
|
|
10
11
|
export * from "./file-keystore.js";
|
|
11
12
|
export * from "./in-memory-keystore.js";
|
|
13
|
+
export * from "./rotating-keystore.js";
|
|
12
14
|
// NativeKeyStore contains native Node.js dependencies and cannot be bundled for browsers
|
|
13
15
|
// For Node.js/Bun environments, import directly:
|
|
14
16
|
// import { NativeKeyStore } from "near-kit/dist/keys/native-keystore.js"
|
package/dist/keys/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/keys/index.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/keys/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,cAAc,yBAAyB,CAAA;AACvC,cAAc,oBAAoB,CAAA;AAClC,cAAc,yBAAyB,CAAA;AACvC,cAAc,wBAAwB,CAAA;AAEtC,yFAAyF;AACzF,iDAAiD;AACjD,yEAAyE;AACzE,EAAE;AACF,yDAAyD;AACzD,uCAAuC"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Rotating key store implementation for concurrent transaction handling.
|
|
3
|
+
*/
|
|
4
|
+
import type { KeyPair, KeyStore } from "../core/types.js";
|
|
5
|
+
/**
|
|
6
|
+
* Rotating key store that cycles through multiple keys per account.
|
|
7
|
+
*
|
|
8
|
+
* This keystore enables high-throughput concurrent transactions by rotating
|
|
9
|
+
* through multiple access keys for a single account. Each transaction uses
|
|
10
|
+
* a different key in round-robin fashion, eliminating nonce collisions.
|
|
11
|
+
*
|
|
12
|
+
* ## Use Cases
|
|
13
|
+
* - **High-throughput applications**: Send many concurrent transactions without nonce collisions
|
|
14
|
+
* - **Load balancing**: Distribute transaction load across multiple access keys
|
|
15
|
+
* - **Key rotation**: Seamlessly rotate keys without downtime
|
|
16
|
+
*
|
|
17
|
+
* ## How It Works
|
|
18
|
+
* - Each account can have multiple keys registered
|
|
19
|
+
* - `get()` returns the next key in round-robin order
|
|
20
|
+
* - Each key has independent nonce tracking via NonceManager
|
|
21
|
+
* - No nonce collisions between concurrent transactions
|
|
22
|
+
*
|
|
23
|
+
* @example
|
|
24
|
+
* ```typescript
|
|
25
|
+
* // Create keystore with multiple keys for one account
|
|
26
|
+
* const keyStore = new RotatingKeyStore()
|
|
27
|
+
* await keyStore.add("alice.near", parseKey("ed25519:key1..."))
|
|
28
|
+
* await keyStore.add("alice.near", parseKey("ed25519:key2..."))
|
|
29
|
+
* await keyStore.add("alice.near", parseKey("ed25519:key3..."))
|
|
30
|
+
*
|
|
31
|
+
* const near = new Near({ network: "testnet", keyStore })
|
|
32
|
+
*
|
|
33
|
+
* // Send 100 concurrent transactions - no nonce collisions!
|
|
34
|
+
* await Promise.all(
|
|
35
|
+
* Array(100).fill(0).map(() =>
|
|
36
|
+
* near.transaction("alice.near")
|
|
37
|
+
* .transfer("bob.near", "0.1")
|
|
38
|
+
* .send()
|
|
39
|
+
* )
|
|
40
|
+
* )
|
|
41
|
+
* ```
|
|
42
|
+
*
|
|
43
|
+
* @example
|
|
44
|
+
* ```typescript
|
|
45
|
+
* // Initialize with keys
|
|
46
|
+
* const keyStore = new RotatingKeyStore({
|
|
47
|
+
* "alice.near": [
|
|
48
|
+
* "ed25519:key1...",
|
|
49
|
+
* "ed25519:key2...",
|
|
50
|
+
* "ed25519:key3..."
|
|
51
|
+
* ]
|
|
52
|
+
* })
|
|
53
|
+
* ```
|
|
54
|
+
*
|
|
55
|
+
* @example
|
|
56
|
+
* ```typescript
|
|
57
|
+
* // Query rotation state
|
|
58
|
+
* const keys = await keyStore.getAll("alice.near")
|
|
59
|
+
* console.log(`Account has ${keys.length} keys`)
|
|
60
|
+
*
|
|
61
|
+
* const index = keyStore.getCurrentIndex("alice.near")
|
|
62
|
+
* console.log(`Currently at key index ${index}`)
|
|
63
|
+
* ```
|
|
64
|
+
*/
|
|
65
|
+
export declare class RotatingKeyStore implements KeyStore {
|
|
66
|
+
private keys;
|
|
67
|
+
private counters;
|
|
68
|
+
/**
|
|
69
|
+
* Create a new rotating keystore.
|
|
70
|
+
*
|
|
71
|
+
* @param initialKeys - Optional initial keys to populate the store.
|
|
72
|
+
* Maps account IDs to arrays of private key strings.
|
|
73
|
+
*
|
|
74
|
+
* @example
|
|
75
|
+
* ```typescript
|
|
76
|
+
* const keyStore = new RotatingKeyStore({
|
|
77
|
+
* "alice.near": ["ed25519:key1...", "ed25519:key2..."],
|
|
78
|
+
* "bob.near": ["ed25519:key3..."]
|
|
79
|
+
* })
|
|
80
|
+
* ```
|
|
81
|
+
*/
|
|
82
|
+
constructor(initialKeys?: Record<string, string[]>);
|
|
83
|
+
/**
|
|
84
|
+
* Get the next key for an account using round-robin rotation.
|
|
85
|
+
*
|
|
86
|
+
* Each call to `get()` advances to the next key in the rotation.
|
|
87
|
+
* This is the core mechanism that enables concurrent transactions
|
|
88
|
+
* without nonce collisions.
|
|
89
|
+
*
|
|
90
|
+
* @param accountId - NEAR account ID
|
|
91
|
+
* @returns Next key in rotation, or null if no keys exist for account
|
|
92
|
+
*
|
|
93
|
+
* @example
|
|
94
|
+
* ```typescript
|
|
95
|
+
* // First call returns key1, second returns key2, third returns key3, fourth returns key1...
|
|
96
|
+
* const key1 = await keyStore.get("alice.near")
|
|
97
|
+
* const key2 = await keyStore.get("alice.near")
|
|
98
|
+
* const key3 = await keyStore.get("alice.near")
|
|
99
|
+
* const key4 = await keyStore.get("alice.near") // Back to key1
|
|
100
|
+
* ```
|
|
101
|
+
*/
|
|
102
|
+
get(accountId: string): Promise<KeyPair | null>;
|
|
103
|
+
/**
|
|
104
|
+
* Add a key to an account's rotation pool.
|
|
105
|
+
*
|
|
106
|
+
* If the account already has keys, the new key is appended to the rotation.
|
|
107
|
+
* If this is the first key for the account, it becomes the starting key.
|
|
108
|
+
*
|
|
109
|
+
* @param accountId - NEAR account ID
|
|
110
|
+
* @param key - Key pair to add to rotation
|
|
111
|
+
* @param options - Optional metadata (preserved but not used for rotation)
|
|
112
|
+
*
|
|
113
|
+
* @example
|
|
114
|
+
* ```typescript
|
|
115
|
+
* await keyStore.add("alice.near", keyPair1)
|
|
116
|
+
* await keyStore.add("alice.near", keyPair2) // Now rotates between both
|
|
117
|
+
* ```
|
|
118
|
+
*/
|
|
119
|
+
add(accountId: string, key: KeyPair, _options?: {
|
|
120
|
+
seedPhrase?: string;
|
|
121
|
+
derivationPath?: string;
|
|
122
|
+
implicitAccountId?: string;
|
|
123
|
+
}): Promise<void>;
|
|
124
|
+
/**
|
|
125
|
+
* Remove all keys for an account from the rotation pool.
|
|
126
|
+
*
|
|
127
|
+
* This also resets the rotation counter for the account.
|
|
128
|
+
*
|
|
129
|
+
* @param accountId - NEAR account ID
|
|
130
|
+
*
|
|
131
|
+
* @example
|
|
132
|
+
* ```typescript
|
|
133
|
+
* await keyStore.remove("alice.near")
|
|
134
|
+
* ```
|
|
135
|
+
*/
|
|
136
|
+
remove(accountId: string): Promise<void>;
|
|
137
|
+
/**
|
|
138
|
+
* List all account IDs in the keystore.
|
|
139
|
+
*
|
|
140
|
+
* @returns Array of account IDs that have at least one key
|
|
141
|
+
*
|
|
142
|
+
* @example
|
|
143
|
+
* ```typescript
|
|
144
|
+
* const accounts = await keyStore.list()
|
|
145
|
+
* console.log(`Managing keys for: ${accounts.join(", ")}`)
|
|
146
|
+
* ```
|
|
147
|
+
*/
|
|
148
|
+
list(): Promise<string[]>;
|
|
149
|
+
/**
|
|
150
|
+
* Get all keys for an account (non-rotating).
|
|
151
|
+
*
|
|
152
|
+
* Returns all keys in the rotation pool without advancing the counter.
|
|
153
|
+
* Useful for inspecting or managing the key pool.
|
|
154
|
+
*
|
|
155
|
+
* @param accountId - NEAR account ID
|
|
156
|
+
* @returns Array of all key pairs for the account, or empty array if none exist
|
|
157
|
+
*
|
|
158
|
+
* @example
|
|
159
|
+
* ```typescript
|
|
160
|
+
* const keys = await keyStore.getAll("alice.near")
|
|
161
|
+
* console.log(`Account has ${keys.length} keys in rotation`)
|
|
162
|
+
* ```
|
|
163
|
+
*/
|
|
164
|
+
getAll(accountId: string): Promise<KeyPair[]>;
|
|
165
|
+
/**
|
|
166
|
+
* Get the current rotation index for an account.
|
|
167
|
+
*
|
|
168
|
+
* The index indicates which key will be returned on the next `get()` call.
|
|
169
|
+
*
|
|
170
|
+
* @param accountId - NEAR account ID
|
|
171
|
+
* @returns Current counter value (0-based index into key array)
|
|
172
|
+
*
|
|
173
|
+
* @example
|
|
174
|
+
* ```typescript
|
|
175
|
+
* const index = keyStore.getCurrentIndex("alice.near")
|
|
176
|
+
* const totalKeys = (await keyStore.getAll("alice.near")).length
|
|
177
|
+
* console.log(`Next key: ${index % totalKeys}`)
|
|
178
|
+
* ```
|
|
179
|
+
*/
|
|
180
|
+
getCurrentIndex(accountId: string): number;
|
|
181
|
+
/**
|
|
182
|
+
* Reset the rotation counter for an account.
|
|
183
|
+
*
|
|
184
|
+
* The next `get()` call will return the first key in the rotation.
|
|
185
|
+
*
|
|
186
|
+
* @param accountId - NEAR account ID
|
|
187
|
+
*
|
|
188
|
+
* @example
|
|
189
|
+
* ```typescript
|
|
190
|
+
* keyStore.resetCounter("alice.near")
|
|
191
|
+
* const key = await keyStore.get("alice.near") // Returns first key
|
|
192
|
+
* ```
|
|
193
|
+
*/
|
|
194
|
+
resetCounter(accountId: string): void;
|
|
195
|
+
/**
|
|
196
|
+
* Clear all keys and counters from the keystore.
|
|
197
|
+
*
|
|
198
|
+
* Useful for testing cleanup or resetting state.
|
|
199
|
+
*
|
|
200
|
+
* @example
|
|
201
|
+
* ```typescript
|
|
202
|
+
* keyStore.clear()
|
|
203
|
+
* ```
|
|
204
|
+
*/
|
|
205
|
+
clear(): void;
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=rotating-keystore.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rotating-keystore.d.ts","sourceRoot":"","sources":["../../src/keys/rotating-keystore.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAA;AAGzD;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2DG;AACH,qBAAa,gBAAiB,YAAW,QAAQ;IAC/C,OAAO,CAAC,IAAI,CAAwB;IACpC,OAAO,CAAC,QAAQ,CAAqB;IAErC;;;;;;;;;;;;;OAaG;gBACS,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;IAgBlD;;;;;;;;;;;;;;;;;;OAkBG;IACG,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,IAAI,CAAC;IAerD;;;;;;;;;;;;;;;OAeG;IACG,GAAG,CACP,SAAS,EAAE,MAAM,EACjB,GAAG,EAAE,OAAO,EACZ,QAAQ,CAAC,EAAE;QACT,UAAU,CAAC,EAAE,MAAM,CAAA;QACnB,cAAc,CAAC,EAAE,MAAM,CAAA;QACvB,iBAAiB,CAAC,EAAE,MAAM,CAAA;KAC3B,GACA,OAAO,CAAC,IAAI,CAAC;IAMhB;;;;;;;;;;;OAWG;IACG,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK9C;;;;;;;;;;OAUG;IACG,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAI/B;;;;;;;;;;;;;;OAcG;IACG,MAAM,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAInD;;;;;;;;;;;;;;OAcG;IACH,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM;IAI1C;;;;;;;;;;;;OAYG;IACH,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAIrC;;;;;;;;;OASG;IACH,KAAK,IAAI,IAAI;CAId"}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
import { parseKey } from "../utils/key.js";
|
|
2
|
+
/**
|
|
3
|
+
* Rotating key store that cycles through multiple keys per account.
|
|
4
|
+
*
|
|
5
|
+
* This keystore enables high-throughput concurrent transactions by rotating
|
|
6
|
+
* through multiple access keys for a single account. Each transaction uses
|
|
7
|
+
* a different key in round-robin fashion, eliminating nonce collisions.
|
|
8
|
+
*
|
|
9
|
+
* ## Use Cases
|
|
10
|
+
* - **High-throughput applications**: Send many concurrent transactions without nonce collisions
|
|
11
|
+
* - **Load balancing**: Distribute transaction load across multiple access keys
|
|
12
|
+
* - **Key rotation**: Seamlessly rotate keys without downtime
|
|
13
|
+
*
|
|
14
|
+
* ## How It Works
|
|
15
|
+
* - Each account can have multiple keys registered
|
|
16
|
+
* - `get()` returns the next key in round-robin order
|
|
17
|
+
* - Each key has independent nonce tracking via NonceManager
|
|
18
|
+
* - No nonce collisions between concurrent transactions
|
|
19
|
+
*
|
|
20
|
+
* @example
|
|
21
|
+
* ```typescript
|
|
22
|
+
* // Create keystore with multiple keys for one account
|
|
23
|
+
* const keyStore = new RotatingKeyStore()
|
|
24
|
+
* await keyStore.add("alice.near", parseKey("ed25519:key1..."))
|
|
25
|
+
* await keyStore.add("alice.near", parseKey("ed25519:key2..."))
|
|
26
|
+
* await keyStore.add("alice.near", parseKey("ed25519:key3..."))
|
|
27
|
+
*
|
|
28
|
+
* const near = new Near({ network: "testnet", keyStore })
|
|
29
|
+
*
|
|
30
|
+
* // Send 100 concurrent transactions - no nonce collisions!
|
|
31
|
+
* await Promise.all(
|
|
32
|
+
* Array(100).fill(0).map(() =>
|
|
33
|
+
* near.transaction("alice.near")
|
|
34
|
+
* .transfer("bob.near", "0.1")
|
|
35
|
+
* .send()
|
|
36
|
+
* )
|
|
37
|
+
* )
|
|
38
|
+
* ```
|
|
39
|
+
*
|
|
40
|
+
* @example
|
|
41
|
+
* ```typescript
|
|
42
|
+
* // Initialize with keys
|
|
43
|
+
* const keyStore = new RotatingKeyStore({
|
|
44
|
+
* "alice.near": [
|
|
45
|
+
* "ed25519:key1...",
|
|
46
|
+
* "ed25519:key2...",
|
|
47
|
+
* "ed25519:key3..."
|
|
48
|
+
* ]
|
|
49
|
+
* })
|
|
50
|
+
* ```
|
|
51
|
+
*
|
|
52
|
+
* @example
|
|
53
|
+
* ```typescript
|
|
54
|
+
* // Query rotation state
|
|
55
|
+
* const keys = await keyStore.getAll("alice.near")
|
|
56
|
+
* console.log(`Account has ${keys.length} keys`)
|
|
57
|
+
*
|
|
58
|
+
* const index = keyStore.getCurrentIndex("alice.near")
|
|
59
|
+
* console.log(`Currently at key index ${index}`)
|
|
60
|
+
* ```
|
|
61
|
+
*/
|
|
62
|
+
export class RotatingKeyStore {
|
|
63
|
+
/**
|
|
64
|
+
* Create a new rotating keystore.
|
|
65
|
+
*
|
|
66
|
+
* @param initialKeys - Optional initial keys to populate the store.
|
|
67
|
+
* Maps account IDs to arrays of private key strings.
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```typescript
|
|
71
|
+
* const keyStore = new RotatingKeyStore({
|
|
72
|
+
* "alice.near": ["ed25519:key1...", "ed25519:key2..."],
|
|
73
|
+
* "bob.near": ["ed25519:key3..."]
|
|
74
|
+
* })
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
constructor(initialKeys) {
|
|
78
|
+
this.keys = new Map();
|
|
79
|
+
this.counters = new Map();
|
|
80
|
+
if (initialKeys) {
|
|
81
|
+
for (const [accountId, keyStrings] of Object.entries(initialKeys)) {
|
|
82
|
+
for (const keyString of keyStrings) {
|
|
83
|
+
const keyPair = parseKey(keyString);
|
|
84
|
+
const existing = this.keys.get(accountId) ?? [];
|
|
85
|
+
existing.push(keyPair);
|
|
86
|
+
this.keys.set(accountId, existing);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Get the next key for an account using round-robin rotation.
|
|
93
|
+
*
|
|
94
|
+
* Each call to `get()` advances to the next key in the rotation.
|
|
95
|
+
* This is the core mechanism that enables concurrent transactions
|
|
96
|
+
* without nonce collisions.
|
|
97
|
+
*
|
|
98
|
+
* @param accountId - NEAR account ID
|
|
99
|
+
* @returns Next key in rotation, or null if no keys exist for account
|
|
100
|
+
*
|
|
101
|
+
* @example
|
|
102
|
+
* ```typescript
|
|
103
|
+
* // First call returns key1, second returns key2, third returns key3, fourth returns key1...
|
|
104
|
+
* const key1 = await keyStore.get("alice.near")
|
|
105
|
+
* const key2 = await keyStore.get("alice.near")
|
|
106
|
+
* const key3 = await keyStore.get("alice.near")
|
|
107
|
+
* const key4 = await keyStore.get("alice.near") // Back to key1
|
|
108
|
+
* ```
|
|
109
|
+
*/
|
|
110
|
+
async get(accountId) {
|
|
111
|
+
const accountKeys = this.keys.get(accountId);
|
|
112
|
+
if (!accountKeys || accountKeys.length === 0) {
|
|
113
|
+
return null;
|
|
114
|
+
}
|
|
115
|
+
// Get current counter and increment for next call
|
|
116
|
+
const counter = this.counters.get(accountId) ?? 0;
|
|
117
|
+
const key = accountKeys[counter % accountKeys.length];
|
|
118
|
+
this.counters.set(accountId, counter + 1);
|
|
119
|
+
// We know key exists because we checked accountKeys.length > 0 above
|
|
120
|
+
return key ?? null;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Add a key to an account's rotation pool.
|
|
124
|
+
*
|
|
125
|
+
* If the account already has keys, the new key is appended to the rotation.
|
|
126
|
+
* If this is the first key for the account, it becomes the starting key.
|
|
127
|
+
*
|
|
128
|
+
* @param accountId - NEAR account ID
|
|
129
|
+
* @param key - Key pair to add to rotation
|
|
130
|
+
* @param options - Optional metadata (preserved but not used for rotation)
|
|
131
|
+
*
|
|
132
|
+
* @example
|
|
133
|
+
* ```typescript
|
|
134
|
+
* await keyStore.add("alice.near", keyPair1)
|
|
135
|
+
* await keyStore.add("alice.near", keyPair2) // Now rotates between both
|
|
136
|
+
* ```
|
|
137
|
+
*/
|
|
138
|
+
async add(accountId, key, _options) {
|
|
139
|
+
const existing = this.keys.get(accountId) ?? [];
|
|
140
|
+
existing.push(key);
|
|
141
|
+
this.keys.set(accountId, existing);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Remove all keys for an account from the rotation pool.
|
|
145
|
+
*
|
|
146
|
+
* This also resets the rotation counter for the account.
|
|
147
|
+
*
|
|
148
|
+
* @param accountId - NEAR account ID
|
|
149
|
+
*
|
|
150
|
+
* @example
|
|
151
|
+
* ```typescript
|
|
152
|
+
* await keyStore.remove("alice.near")
|
|
153
|
+
* ```
|
|
154
|
+
*/
|
|
155
|
+
async remove(accountId) {
|
|
156
|
+
this.keys.delete(accountId);
|
|
157
|
+
this.counters.delete(accountId);
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* List all account IDs in the keystore.
|
|
161
|
+
*
|
|
162
|
+
* @returns Array of account IDs that have at least one key
|
|
163
|
+
*
|
|
164
|
+
* @example
|
|
165
|
+
* ```typescript
|
|
166
|
+
* const accounts = await keyStore.list()
|
|
167
|
+
* console.log(`Managing keys for: ${accounts.join(", ")}`)
|
|
168
|
+
* ```
|
|
169
|
+
*/
|
|
170
|
+
async list() {
|
|
171
|
+
return Array.from(this.keys.keys());
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Get all keys for an account (non-rotating).
|
|
175
|
+
*
|
|
176
|
+
* Returns all keys in the rotation pool without advancing the counter.
|
|
177
|
+
* Useful for inspecting or managing the key pool.
|
|
178
|
+
*
|
|
179
|
+
* @param accountId - NEAR account ID
|
|
180
|
+
* @returns Array of all key pairs for the account, or empty array if none exist
|
|
181
|
+
*
|
|
182
|
+
* @example
|
|
183
|
+
* ```typescript
|
|
184
|
+
* const keys = await keyStore.getAll("alice.near")
|
|
185
|
+
* console.log(`Account has ${keys.length} keys in rotation`)
|
|
186
|
+
* ```
|
|
187
|
+
*/
|
|
188
|
+
async getAll(accountId) {
|
|
189
|
+
return this.keys.get(accountId) ?? [];
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Get the current rotation index for an account.
|
|
193
|
+
*
|
|
194
|
+
* The index indicates which key will be returned on the next `get()` call.
|
|
195
|
+
*
|
|
196
|
+
* @param accountId - NEAR account ID
|
|
197
|
+
* @returns Current counter value (0-based index into key array)
|
|
198
|
+
*
|
|
199
|
+
* @example
|
|
200
|
+
* ```typescript
|
|
201
|
+
* const index = keyStore.getCurrentIndex("alice.near")
|
|
202
|
+
* const totalKeys = (await keyStore.getAll("alice.near")).length
|
|
203
|
+
* console.log(`Next key: ${index % totalKeys}`)
|
|
204
|
+
* ```
|
|
205
|
+
*/
|
|
206
|
+
getCurrentIndex(accountId) {
|
|
207
|
+
return this.counters.get(accountId) ?? 0;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Reset the rotation counter for an account.
|
|
211
|
+
*
|
|
212
|
+
* The next `get()` call will return the first key in the rotation.
|
|
213
|
+
*
|
|
214
|
+
* @param accountId - NEAR account ID
|
|
215
|
+
*
|
|
216
|
+
* @example
|
|
217
|
+
* ```typescript
|
|
218
|
+
* keyStore.resetCounter("alice.near")
|
|
219
|
+
* const key = await keyStore.get("alice.near") // Returns first key
|
|
220
|
+
* ```
|
|
221
|
+
*/
|
|
222
|
+
resetCounter(accountId) {
|
|
223
|
+
this.counters.set(accountId, 0);
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Clear all keys and counters from the keystore.
|
|
227
|
+
*
|
|
228
|
+
* Useful for testing cleanup or resetting state.
|
|
229
|
+
*
|
|
230
|
+
* @example
|
|
231
|
+
* ```typescript
|
|
232
|
+
* keyStore.clear()
|
|
233
|
+
* ```
|
|
234
|
+
*/
|
|
235
|
+
clear() {
|
|
236
|
+
this.keys.clear();
|
|
237
|
+
this.counters.clear();
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=rotating-keystore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rotating-keystore.js","sourceRoot":"","sources":["../../src/keys/rotating-keystore.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "near-kit",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.0",
|
|
4
4
|
"description": "A simple, intuitive TypeScript library for interacting with NEAR Protocol",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "./dist/index.js",
|
|
@@ -59,12 +59,12 @@
|
|
|
59
59
|
}
|
|
60
60
|
},
|
|
61
61
|
"devDependencies": {
|
|
62
|
-
"@biomejs/biome": "^2.3.
|
|
62
|
+
"@biomejs/biome": "^2.3.6",
|
|
63
63
|
"@changesets/cli": "^2.29.7",
|
|
64
64
|
"@hot-labs/near-connect": "^0.6.9",
|
|
65
65
|
"@near-js/transactions": "^2.5.1",
|
|
66
66
|
"@near-js/types": "^2.5.1",
|
|
67
|
-
"@near-wallet-selector/core": "^10.1.
|
|
67
|
+
"@near-wallet-selector/core": "^10.1.1",
|
|
68
68
|
"@types/bun": "^1.3.2",
|
|
69
69
|
"@types/tar": "^6.1.13",
|
|
70
70
|
"lefthook": "^2.0.4",
|