@dag-kit/kit 1.0.2 → 1.0.4-alpha.3

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 (54) hide show
  1. package/dist/index.cjs +564 -0
  2. package/dist/index.cjs.map +1 -0
  3. package/dist/index.d.cts +209 -0
  4. package/dist/index.d.ts +209 -0
  5. package/dist/index.js +544 -0
  6. package/dist/index.js.map +1 -0
  7. package/package.json +16 -11
  8. package/src/clients/actions/contract.ts +1 -1
  9. package/src/clients/actions/example.ts +252 -252
  10. package/src/clients/actions/example2.ts +60 -60
  11. package/src/clients/actions/index.ts +145 -0
  12. package/src/clients/actions/main.ts +34 -17
  13. package/src/clients/actions/test.ts +210 -210
  14. package/src/clients/types.ts +2 -1
  15. package/src/exports/index.ts +7 -4
  16. package/src/exports/public-types.ts +6 -0
  17. package/src/index.ts +17 -0
  18. package/src/signers/PrivateKeySigner.ts +41 -0
  19. package/src/signers/PrivySigner.ts +93 -0
  20. package/src/signers/types.ts +45 -0
  21. package/src/version.ts +1 -1
  22. package/dist/esm/clients/actions/contract.js +0 -42
  23. package/dist/esm/clients/actions/example.js +0 -211
  24. package/dist/esm/clients/actions/example2.js +0 -50
  25. package/dist/esm/clients/actions/index.js +0 -1
  26. package/dist/esm/clients/actions/main.js +0 -415
  27. package/dist/esm/clients/actions/test.js +0 -1
  28. package/dist/esm/clients/actions/testPaymasterService.js +0 -88
  29. package/dist/esm/clients/chains.js +0 -19
  30. package/dist/esm/clients/types.js +0 -1
  31. package/dist/esm/exports/index.js +0 -2
  32. package/dist/esm/version.js +0 -3
  33. package/dist/types/clients/actions/contract.d.ts +0 -12
  34. package/dist/types/clients/actions/contract.d.ts.map +0 -1
  35. package/dist/types/clients/actions/example.d.ts +0 -2
  36. package/dist/types/clients/actions/example.d.ts.map +0 -1
  37. package/dist/types/clients/actions/example2.d.ts +0 -2
  38. package/dist/types/clients/actions/example2.d.ts.map +0 -1
  39. package/dist/types/clients/actions/index.d.ts +0 -1
  40. package/dist/types/clients/actions/index.d.ts.map +0 -1
  41. package/dist/types/clients/actions/main.d.ts +0 -40
  42. package/dist/types/clients/actions/main.d.ts.map +0 -1
  43. package/dist/types/clients/actions/test.d.ts +0 -1
  44. package/dist/types/clients/actions/test.d.ts.map +0 -1
  45. package/dist/types/clients/actions/testPaymasterService.d.ts +0 -2
  46. package/dist/types/clients/actions/testPaymasterService.d.ts.map +0 -1
  47. package/dist/types/clients/chains.d.ts +0 -81
  48. package/dist/types/clients/chains.d.ts.map +0 -1
  49. package/dist/types/clients/types.d.ts +0 -31
  50. package/dist/types/clients/types.d.ts.map +0 -1
  51. package/dist/types/exports/index.d.ts +0 -4
  52. package/dist/types/exports/index.d.ts.map +0 -1
  53. package/dist/types/version.d.ts +0 -2
  54. package/dist/types/version.d.ts.map +0 -1
package/dist/index.js ADDED
@@ -0,0 +1,544 @@
1
+ // src/clients/actions/main.ts
2
+ import {
3
+ createPublicClient,
4
+ createWalletClient,
5
+ http,
6
+ encodeFunctionData,
7
+ parseEther
8
+ } from "viem";
9
+ import { privateKeyToAccount } from "viem/accounts";
10
+ import { toSimpleSmartAccount } from "permissionless/accounts";
11
+ import { createPimlicoClient } from "permissionless/clients/pimlico";
12
+ import { entryPoint06Address } from "viem/account-abstraction";
13
+ import { createSmartAccountClient } from "permissionless";
14
+ var DagAAClient = class {
15
+ config;
16
+ publicClient;
17
+ walletClient;
18
+ bundlerClient = null;
19
+ smartAccount = null;
20
+ paymasterClient = null;
21
+ smartAccountClient = null;
22
+ constructor(config) {
23
+ this.config = {
24
+ ...config,
25
+ entryPointAddress: config.entryPointAddress || entryPoint06Address
26
+ };
27
+ this.publicClient = createPublicClient({
28
+ chain: config.chain,
29
+ transport: http(config.rpcUrl)
30
+ });
31
+ this.walletClient = createWalletClient({
32
+ chain: config.chain,
33
+ transport: http(config.rpcUrl)
34
+ });
35
+ if (config.paymasterUrl) {
36
+ this.paymasterClient = this.createPaymasterClient(config.paymasterUrl);
37
+ }
38
+ }
39
+ // ==============================================================================
40
+ // Paymaster Client (Fixed Serialization)
41
+ // ==============================================================================
42
+ createPaymasterClient(paymasterUrl) {
43
+ const stringify = (data) => {
44
+ return JSON.stringify(
45
+ data,
46
+ (_, value) => typeof value === "bigint" ? `0x${value.toString(16)}` : value
47
+ );
48
+ };
49
+ return {
50
+ /**
51
+ * Get paymaster stub data for gas estimation
52
+ */
53
+ async getPaymasterStubData(userOp, entryPoint) {
54
+ try {
55
+ const response = await fetch(paymasterUrl, {
56
+ method: "POST",
57
+ headers: { "Content-Type": "application/json" },
58
+ // 👇 Use the robust stringify helper
59
+ body: stringify({
60
+ jsonrpc: "2.0",
61
+ id: 1,
62
+ method: "pm_getPaymasterStubData",
63
+ params: [userOp, entryPoint, {}]
64
+ })
65
+ });
66
+ const data = await response.json();
67
+ if (data.error) throw new Error(data.error.message);
68
+ return data.result;
69
+ } catch (error) {
70
+ console.warn("Failed to get paymaster stub data:", error);
71
+ return { paymasterAndData: "0x" };
72
+ }
73
+ },
74
+ /**
75
+ * Get paymaster data for actual transaction
76
+ */
77
+ async getPaymasterData(userOp, entryPoint) {
78
+ try {
79
+ const response = await fetch(paymasterUrl, {
80
+ method: "POST",
81
+ headers: { "Content-Type": "application/json" },
82
+ body: stringify({
83
+ jsonrpc: "2.0",
84
+ id: 1,
85
+ method: "pm_getPaymasterData",
86
+ params: [userOp, entryPoint, {}]
87
+ })
88
+ });
89
+ const data = await response.json();
90
+ if (data.error) throw new Error(data.error.message);
91
+ return data.result;
92
+ } catch (error) {
93
+ console.warn("Failed to get paymaster data:", error);
94
+ return null;
95
+ }
96
+ },
97
+ /**
98
+ * Sponsor user operation
99
+ */
100
+ async sponsorUserOperation(userOp, entryPoint) {
101
+ try {
102
+ const response = await fetch(paymasterUrl, {
103
+ method: "POST",
104
+ headers: { "Content-Type": "application/json" },
105
+ body: stringify({
106
+ jsonrpc: "2.0",
107
+ id: 1,
108
+ method: "pm_sponsorUserOperation",
109
+ params: [userOp, entryPoint, {}]
110
+ })
111
+ });
112
+ const data = await response.json();
113
+ if (data.error) throw new Error(data.error.message);
114
+ return data.result;
115
+ } catch (error) {
116
+ console.warn("Failed to sponsor user operation:", error);
117
+ throw error;
118
+ }
119
+ }
120
+ };
121
+ }
122
+ // ==============================================================================
123
+ // Smart Account Management
124
+ // ==============================================================================
125
+ async connectSmartAccount(accountConfig) {
126
+ const { signer, accountAddress } = accountConfig;
127
+ const isReady = await signer.isReady();
128
+ if (!isReady) {
129
+ throw new Error("Signer is not ready. Ensure wallet is connected.");
130
+ }
131
+ const owner = await signer.getAccount();
132
+ const signingClient = await signer.getWalletClient();
133
+ if (accountAddress) {
134
+ this.smartAccount = await toSimpleSmartAccount({
135
+ client: signingClient,
136
+ owner,
137
+ factoryAddress: this.config.factoryAddress,
138
+ entryPoint: {
139
+ address: this.config.entryPointAddress,
140
+ version: "0.6"
141
+ },
142
+ address: accountAddress
143
+ });
144
+ } else {
145
+ this.smartAccount = await toSimpleSmartAccount({
146
+ client: signingClient,
147
+ owner,
148
+ factoryAddress: this.config.factoryAddress,
149
+ entryPoint: {
150
+ address: this.config.entryPointAddress,
151
+ version: "0.6"
152
+ }
153
+ });
154
+ }
155
+ this.bundlerClient = createPimlicoClient({
156
+ transport: http(this.config.bundlerUrl),
157
+ entryPoint: {
158
+ address: this.config.entryPointAddress,
159
+ version: "0.6"
160
+ }
161
+ });
162
+ const clientConfig = {
163
+ bundlerTransport: http(this.config.bundlerUrl),
164
+ chain: this.config.chain,
165
+ account: this.smartAccount
166
+ };
167
+ if (this.paymasterClient) {
168
+ clientConfig.paymaster = {
169
+ getPaymasterData: async (userOperation) => {
170
+ console.log("\u{1F3AB} Requesting paymaster sponsorship...");
171
+ console.log("UserOp sender:", userOperation.sender);
172
+ try {
173
+ const result = await this.paymasterClient.sponsorUserOperation(
174
+ userOperation,
175
+ this.config.entryPointAddress
176
+ );
177
+ console.log("Paymaster result:", result);
178
+ if (result && result.paymasterAndData) {
179
+ console.log("\u2705 Paymaster sponsorship approved!");
180
+ console.log("PaymasterAndData:", result.paymasterAndData);
181
+ return {
182
+ paymasterAndData: result.paymasterAndData,
183
+ ...result.preVerificationGas && {
184
+ preVerificationGas: BigInt(result.preVerificationGas)
185
+ },
186
+ ...result.verificationGasLimit && {
187
+ verificationGasLimit: BigInt(result.verificationGasLimit)
188
+ },
189
+ ...result.callGasLimit && {
190
+ callGasLimit: BigInt(result.callGasLimit)
191
+ }
192
+ };
193
+ } else {
194
+ console.error("\u274C No paymasterAndData in response:", result);
195
+ throw new Error("No paymaster data returned");
196
+ }
197
+ } catch (error) {
198
+ console.error("\u274C Paymaster sponsorship failed:", error);
199
+ throw error;
200
+ }
201
+ },
202
+ getPaymasterStubData: async (userOperation) => {
203
+ console.log("\u{1F4DD} Getting paymaster stub data for gas estimation...");
204
+ try {
205
+ const result = await this.paymasterClient.getPaymasterStubData(
206
+ userOperation,
207
+ this.config.entryPointAddress
208
+ );
209
+ console.log("Stub data result:", result);
210
+ if (result && result.paymasterAndData) {
211
+ console.log("\u2705 Got paymaster stub data");
212
+ return {
213
+ paymasterAndData: result.paymasterAndData
214
+ };
215
+ }
216
+ } catch (error) {
217
+ console.warn("\u26A0\uFE0F Failed to get paymaster stub data:", error);
218
+ }
219
+ console.log("\u26A0\uFE0F Using default stub data");
220
+ return {
221
+ paymasterAndData: "0x"
222
+ };
223
+ }
224
+ };
225
+ }
226
+ this.smartAccountClient = createSmartAccountClient(clientConfig);
227
+ console.log(`\u2705 Connected to smart account: ${this.smartAccount.address}`);
228
+ return this.smartAccount.address;
229
+ }
230
+ // ==============================================================================
231
+ // Account Information
232
+ // ==============================================================================
233
+ getAddress() {
234
+ if (!this.smartAccount) {
235
+ throw new Error(
236
+ "Smart account not connected. Call connectSmartAccount() first."
237
+ );
238
+ }
239
+ return this.smartAccount.address;
240
+ }
241
+ async getBalance() {
242
+ if (!this.smartAccount) {
243
+ throw new Error("Smart account not connected");
244
+ }
245
+ return await this.publicClient.getBalance({
246
+ address: this.smartAccount.address
247
+ });
248
+ }
249
+ async isDeployed() {
250
+ if (!this.smartAccount) {
251
+ throw new Error("Smart account not connected");
252
+ }
253
+ const code = await this.publicClient.getCode({
254
+ address: this.smartAccount.address
255
+ });
256
+ return code !== void 0 && code !== "0x";
257
+ }
258
+ async getNonce() {
259
+ if (!this.smartAccount) {
260
+ throw new Error("Smart account not connected");
261
+ }
262
+ return await this.publicClient.readContract({
263
+ address: this.config.entryPointAddress,
264
+ abi: [
265
+ {
266
+ name: "getNonce",
267
+ type: "function",
268
+ stateMutability: "view",
269
+ inputs: [
270
+ { name: "sender", type: "address" },
271
+ { name: "key", type: "uint192" }
272
+ ],
273
+ outputs: [{ name: "nonce", type: "uint256" }]
274
+ }
275
+ ],
276
+ functionName: "getNonce",
277
+ args: [this.smartAccount.address, 0n]
278
+ });
279
+ }
280
+ // ==============================================================================
281
+ // Send UserOperations
282
+ // ==============================================================================
283
+ async sendUserOperation(params) {
284
+ if (!this.smartAccountClient) {
285
+ throw new Error("Smart account not connected");
286
+ }
287
+ const {
288
+ target,
289
+ data = "0x",
290
+ value = 0n,
291
+ maxFeePerGas,
292
+ maxPriorityFeePerGas,
293
+ callGasLimit,
294
+ verificationGasLimit,
295
+ preVerificationGas
296
+ } = params;
297
+ let gasPrices = {
298
+ maxFeePerGas,
299
+ maxPriorityFeePerGas
300
+ };
301
+ if (!maxFeePerGas || !maxPriorityFeePerGas) {
302
+ const estimatedGas = await this.bundlerClient.getUserOperationGasPrice();
303
+ gasPrices = {
304
+ maxFeePerGas: maxFeePerGas || estimatedGas.fast.maxFeePerGas,
305
+ maxPriorityFeePerGas: maxPriorityFeePerGas || estimatedGas.fast.maxPriorityFeePerGas
306
+ };
307
+ }
308
+ console.log("Sending UserOperation...");
309
+ console.log(` Target: ${target}`);
310
+ console.log(` Value: ${value}`);
311
+ console.log(
312
+ ` Gas: ${gasPrices.maxFeePerGas} / ${gasPrices.maxPriorityFeePerGas}`
313
+ );
314
+ const txOptions = {
315
+ calls: [
316
+ {
317
+ to: target,
318
+ value,
319
+ data
320
+ }
321
+ ],
322
+ maxFeePerGas: gasPrices.maxFeePerGas,
323
+ maxPriorityFeePerGas: gasPrices.maxPriorityFeePerGas
324
+ };
325
+ if (callGasLimit) txOptions.callGasLimit = callGasLimit;
326
+ if (verificationGasLimit)
327
+ txOptions.verificationGasLimit = verificationGasLimit;
328
+ if (preVerificationGas) txOptions.preVerificationGas = preVerificationGas;
329
+ const userOpHash = await this.smartAccountClient.sendTransaction(txOptions);
330
+ console.log(`\u2705 UserOperation sent: ${userOpHash}`);
331
+ return userOpHash;
332
+ }
333
+ // ==============================================================================
334
+ // Contract Interactions
335
+ // ==============================================================================
336
+ async writeContract(params) {
337
+ const { address, abi, functionName, args = [], value = 0n } = params;
338
+ const data = encodeFunctionData({
339
+ abi,
340
+ functionName,
341
+ args
342
+ });
343
+ return await this.sendUserOperation({
344
+ target: address,
345
+ data,
346
+ value,
347
+ maxFeePerGas: params.maxFeePerGas,
348
+ maxPriorityFeePerGas: params.maxPriorityFeePerGas
349
+ });
350
+ }
351
+ async readContract(params) {
352
+ return await this.publicClient.readContract({
353
+ address: params.address,
354
+ abi: params.abi,
355
+ functionName: params.functionName,
356
+ args: params.args || []
357
+ });
358
+ }
359
+ // ==============================================================================
360
+ // Utilities
361
+ // ==============================================================================
362
+ async waitForUserOperationReceipt(userOpHash, timeout = 3e4) {
363
+ console.log(`Waiting for UserOperation receipt...`);
364
+ const startTime = Date.now();
365
+ while (Date.now() - startTime < timeout) {
366
+ await new Promise((resolve) => setTimeout(resolve, 2e3));
367
+ console.log("Checking for receipt...");
368
+ }
369
+ return {
370
+ userOpHash,
371
+ success: true
372
+ };
373
+ }
374
+ async fundAccount(amount, fromPrivateKey) {
375
+ if (!this.smartAccount) {
376
+ throw new Error("Smart account not connected");
377
+ }
378
+ const signer = privateKeyToAccount(fromPrivateKey);
379
+ const client = createWalletClient({
380
+ account: signer,
381
+ chain: this.config.chain,
382
+ transport: http(this.config.rpcUrl)
383
+ });
384
+ console.log(`Funding account with ${amount} wei...`);
385
+ const hash = await client.sendTransaction({
386
+ account: signer,
387
+ // ✅ Add this line
388
+ to: this.smartAccount.address,
389
+ value: amount,
390
+ kzg: {
391
+ blobToKzgCommitment: function(blob) {
392
+ throw new Error("Function not implemented.");
393
+ },
394
+ computeBlobKzgProof: function(blob, commitment) {
395
+ throw new Error("Function not implemented.");
396
+ }
397
+ },
398
+ chain: void 0
399
+ });
400
+ console.log(`\u2705 Funded: ${hash}`);
401
+ return hash;
402
+ }
403
+ // ==============================================================================
404
+ // Batch Operations
405
+ // ==============================================================================
406
+ async sendBatchUserOperations(operations) {
407
+ const results = [];
408
+ for (const op of operations) {
409
+ const hash = await this.sendUserOperation(op);
410
+ results.push(hash);
411
+ }
412
+ return results;
413
+ }
414
+ };
415
+ function createDagAAClient(config) {
416
+ return new DagAAClient(config);
417
+ }
418
+ function parseDAG(amount) {
419
+ return parseEther(amount);
420
+ }
421
+
422
+ // src/clients/chains.ts
423
+ import { defineChain } from "viem";
424
+ import { arbitrumSepolia } from "viem/chains";
425
+ var awakening_ = defineChain({
426
+ id: 1043,
427
+ name: "Awakening Testnet",
428
+ nativeCurrency: { decimals: 18, name: "Dag", symbol: "DAG" },
429
+ rpcUrls: { default: { http: ["https://public-bdag.nownodes.io"] } },
430
+ blockExplorers: {
431
+ default: { name: "Explorer", url: "https://awakening.bdagscan.com/" }
432
+ }
433
+ });
434
+ var awakening = {
435
+ bundler_rpc: "http://0.0.0.0:3000/",
436
+ chain_config: awakening_
437
+ };
438
+ var arbitrumSep = {
439
+ bundler_rpc: "http://0.0.0.0:3001/",
440
+ chain_config: arbitrumSepolia
441
+ };
442
+
443
+ // src/signers/PrivySigner.ts
444
+ import {
445
+ createWalletClient as createWalletClient2,
446
+ custom
447
+ } from "viem";
448
+ var PrivySigner = class {
449
+ privyWallet;
450
+ // Privy wallet object
451
+ chain;
452
+ cachedAddress;
453
+ cachedWalletClient;
454
+ constructor(privyWallet, chain) {
455
+ if (!privyWallet) {
456
+ throw new Error("Privy wallet is required");
457
+ }
458
+ this.privyWallet = privyWallet;
459
+ this.chain = chain;
460
+ }
461
+ async getAccount() {
462
+ const provider = await this.privyWallet.getEthereumProvider();
463
+ if (!provider) {
464
+ throw new Error("No Ethereum provider found in Privy wallet");
465
+ }
466
+ return {
467
+ address: this.privyWallet.address,
468
+ type: "json-rpc",
469
+ // @ts-ignore - Privy provider compatible with viem
470
+ source: "privateKey"
471
+ };
472
+ }
473
+ async getWalletClient() {
474
+ if (this.cachedWalletClient) {
475
+ return this.cachedWalletClient;
476
+ }
477
+ const provider = await this.privyWallet.getEthereumProvider();
478
+ if (!provider) {
479
+ throw new Error("No Ethereum provider found in Privy wallet");
480
+ }
481
+ this.cachedWalletClient = createWalletClient2({
482
+ account: await this.getAccount(),
483
+ chain: this.chain,
484
+ transport: custom(provider)
485
+ });
486
+ return this.cachedWalletClient;
487
+ }
488
+ async getAddress() {
489
+ if (this.cachedAddress) {
490
+ return this.cachedAddress;
491
+ }
492
+ this.cachedAddress = this.privyWallet.address;
493
+ return this.cachedAddress;
494
+ }
495
+ async isReady() {
496
+ try {
497
+ const provider = await this.privyWallet.getEthereumProvider();
498
+ return !!provider && !!this.privyWallet.address;
499
+ } catch {
500
+ return false;
501
+ }
502
+ }
503
+ };
504
+
505
+ // src/signers/PrivateKeySigner.ts
506
+ import {
507
+ createWalletClient as createWalletClient3,
508
+ http as http2
509
+ } from "viem";
510
+ import { privateKeyToAccount as privateKeyToAccount2 } from "viem/accounts";
511
+ var PrivateKeySigner = class {
512
+ account;
513
+ walletClient;
514
+ constructor(privateKey, chain, rpcUrl) {
515
+ this.account = privateKeyToAccount2(privateKey);
516
+ this.walletClient = createWalletClient3({
517
+ account: this.account,
518
+ chain,
519
+ transport: http2(rpcUrl)
520
+ });
521
+ }
522
+ getAccount() {
523
+ return this.account;
524
+ }
525
+ getWalletClient() {
526
+ return this.walletClient;
527
+ }
528
+ getAddress() {
529
+ return this.account.address;
530
+ }
531
+ isReady() {
532
+ return true;
533
+ }
534
+ };
535
+ export {
536
+ DagAAClient,
537
+ PrivateKeySigner,
538
+ PrivySigner,
539
+ arbitrumSep,
540
+ awakening,
541
+ createDagAAClient,
542
+ parseDAG
543
+ };
544
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/clients/actions/main.ts","../src/clients/chains.ts","../src/signers/PrivySigner.ts","../src/signers/PrivateKeySigner.ts"],"sourcesContent":["// ==============================================================================\n// DAG AA SDK - BlockDAG Account Abstraction SDK\n// Inspired by Alchemy AA SDK\n// ==============================================================================\n\nimport {\n createPublicClient,\n createWalletClient,\n http,\n type Chain,\n type Transport,\n type Account,\n type Hash,\n type Address,\n encodeFunctionData,\n parseEther,\n Client,\n ByteArray,\n} from \"viem\";\nimport { privateKeyToAccount } from \"viem/accounts\";\nimport { toSimpleSmartAccount } from \"permissionless/accounts\";\nimport { createPimlicoClient } from \"permissionless/clients/pimlico\";\nimport { entryPoint06Address } from \"viem/account-abstraction\";\nimport { createSmartAccountClient } from \"permissionless\";\nimport {\n DagAAConfig,\n SmartAccountConfig,\n SendUserOperationParams,\n UserOperationReceipt,\n} from \"../types.js\";\nimport { ISigner } from \"../../signers/types.js\";\n\n// ==============================================================================\n// Main SDK Class\n// ==============================================================================\n\nexport class DagAAClient {\n private config: DagAAConfig;\n private publicClient: any | null;\n private walletClient: any | null;\n private bundlerClient: any | null = null;\n private smartAccount: any | null = null;\n private paymasterClient: any | null = null;\n private smartAccountClient: any | null = null;\n\n constructor(config: DagAAConfig) {\n this.config = {\n ...config,\n entryPointAddress: config.entryPointAddress || entryPoint06Address,\n };\n\n this.publicClient = createPublicClient({\n chain: config.chain,\n transport: http(config.rpcUrl),\n });\n\n this.walletClient = createWalletClient({\n chain: config.chain,\n transport: http(config.rpcUrl),\n });\n\n // Initialize paymaster client if URL provided\n if (config.paymasterUrl) {\n this.paymasterClient = this.createPaymasterClient(config.paymasterUrl);\n }\n }\n // ==============================================================================\n // Paymaster Client (Fixed Serialization)\n // ==============================================================================\n\n private createPaymasterClient(paymasterUrl: string) {\n // 1. Define a robust serializer that handles nested BigInts automatically\n const stringify = (data: any) => {\n return JSON.stringify(data, (_, value) =>\n typeof value === \"bigint\" ? `0x${value.toString(16)}` : value\n );\n };\n\n return {\n /**\n * Get paymaster stub data for gas estimation\n */\n async getPaymasterStubData(\n userOp: any,\n entryPoint: Address\n ): Promise<any> {\n try {\n const response = await fetch(paymasterUrl, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n // 👇 Use the robust stringify helper\n body: stringify({\n jsonrpc: \"2.0\",\n id: 1,\n method: \"pm_getPaymasterStubData\",\n params: [userOp, entryPoint, {}],\n }),\n });\n\n const data = await response.json();\n if (data.error) throw new Error(data.error.message);\n\n return data.result;\n } catch (error) {\n console.warn(\"Failed to get paymaster stub data:\", error);\n // ⚠️ If this fails, the UserOp usually fails with AA21\n return { paymasterAndData: \"0x\" };\n }\n },\n\n /**\n * Get paymaster data for actual transaction\n */\n async getPaymasterData(userOp: any, entryPoint: Address): Promise<any> {\n try {\n const response = await fetch(paymasterUrl, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: stringify({\n jsonrpc: \"2.0\",\n id: 1,\n method: \"pm_getPaymasterData\",\n params: [userOp, entryPoint, {}],\n }),\n });\n\n const data = await response.json();\n if (data.error) throw new Error(data.error.message);\n\n return data.result;\n } catch (error) {\n console.warn(\"Failed to get paymaster data:\", error);\n return null;\n }\n },\n\n /**\n * Sponsor user operation\n */\n async sponsorUserOperation(\n userOp: any,\n entryPoint: Address\n ): Promise<any> {\n try {\n const response = await fetch(paymasterUrl, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: stringify({\n jsonrpc: \"2.0\",\n id: 1,\n method: \"pm_sponsorUserOperation\",\n params: [userOp, entryPoint, {}],\n }),\n });\n\n const data = await response.json();\n if (data.error) throw new Error(data.error.message);\n\n return data.result;\n } catch (error) {\n console.warn(\"Failed to sponsor user operation:\", error);\n throw error;\n }\n },\n };\n }\n // ==============================================================================\n // Smart Account Management\n // ==============================================================================\n\n async connectSmartAccount(\n accountConfig: SmartAccountConfig\n ): Promise<Address> {\n const { signer, accountAddress } = accountConfig;\n\n const isReady = await signer.isReady();\n if (!isReady) {\n throw new Error(\"Signer is not ready. Ensure wallet is connected.\");\n }\n\n const owner = await signer.getAccount();\n\n const signingClient = await signer.getWalletClient();\n\n if (accountAddress) {\n // Use existing account\n this.smartAccount = await toSimpleSmartAccount({\n client: signingClient as unknown as Client,\n owner: owner,\n factoryAddress: this.config.factoryAddress,\n entryPoint: {\n address: this.config.entryPointAddress!,\n version: \"0.6\",\n },\n address: accountAddress,\n });\n } else {\n // Create new account\n this.smartAccount = await toSimpleSmartAccount({\n client: signingClient as unknown as Client,\n owner: owner,\n factoryAddress: this.config.factoryAddress,\n entryPoint: {\n address: this.config.entryPointAddress!,\n version: \"0.6\",\n },\n });\n }\n\n // Create bundler client\n this.bundlerClient = createPimlicoClient({\n transport: http(this.config.bundlerUrl),\n entryPoint: {\n address: this.config.entryPointAddress!,\n version: \"0.6\",\n },\n });\n\n // Create smart account client with optional paymaster\n const clientConfig: any = {\n bundlerTransport: http(this.config.bundlerUrl),\n chain: this.config.chain,\n account: this.smartAccount,\n };\n\n // Add paymaster if configured\n if (this.paymasterClient) {\n clientConfig.paymaster = {\n getPaymasterData: async (userOperation: any) => {\n console.log(\"🎫 Requesting paymaster sponsorship...\");\n console.log(\"UserOp sender:\", userOperation.sender);\n\n try {\n const result = await this.paymasterClient!.sponsorUserOperation(\n userOperation,\n this.config.entryPointAddress!\n );\n\n console.log(\"Paymaster result:\", result);\n\n if (result && result.paymasterAndData) {\n console.log(\"✅ Paymaster sponsorship approved!\");\n console.log(\"PaymasterAndData:\", result.paymasterAndData);\n return {\n paymasterAndData: result.paymasterAndData,\n ...(result.preVerificationGas && {\n preVerificationGas: BigInt(result.preVerificationGas),\n }),\n ...(result.verificationGasLimit && {\n verificationGasLimit: BigInt(result.verificationGasLimit),\n }),\n ...(result.callGasLimit && {\n callGasLimit: BigInt(result.callGasLimit),\n }),\n };\n } else {\n console.error(\"❌ No paymasterAndData in response:\", result);\n throw new Error(\"No paymaster data returned\");\n }\n } catch (error) {\n console.error(\"❌ Paymaster sponsorship failed:\", error);\n throw error;\n }\n },\n\n getPaymasterStubData: async (userOperation: any) => {\n console.log(\"📝 Getting paymaster stub data for gas estimation...\");\n\n try {\n const result = await this.paymasterClient!.getPaymasterStubData(\n userOperation,\n this.config.entryPointAddress!\n );\n\n console.log(\"Stub data result:\", result);\n\n if (result && result.paymasterAndData) {\n console.log(\"✅ Got paymaster stub data\");\n return {\n paymasterAndData: result.paymasterAndData,\n };\n }\n } catch (error) {\n console.warn(\"⚠️ Failed to get paymaster stub data:\", error);\n }\n\n // Return default stub if fails\n console.log(\"⚠️ Using default stub data\");\n return {\n paymasterAndData: \"0x\",\n };\n },\n };\n }\n\n this.smartAccountClient = createSmartAccountClient(clientConfig);\n\n console.log(`✅ Connected to smart account: ${this.smartAccount.address}`);\n return this.smartAccount.address;\n }\n\n // ==============================================================================\n // Account Information\n // ==============================================================================\n\n getAddress(): Address {\n if (!this.smartAccount) {\n throw new Error(\n \"Smart account not connected. Call connectSmartAccount() first.\"\n );\n }\n return this.smartAccount.address;\n }\n\n async getBalance(): Promise<bigint> {\n if (!this.smartAccount) {\n throw new Error(\"Smart account not connected\");\n }\n\n return await this.publicClient.getBalance({\n address: this.smartAccount.address,\n });\n }\n\n async isDeployed(): Promise<boolean> {\n if (!this.smartAccount) {\n throw new Error(\"Smart account not connected\");\n }\n\n const code = await this.publicClient.getCode({\n address: this.smartAccount.address,\n });\n\n return code !== undefined && code !== \"0x\";\n }\n\n async getNonce(): Promise<bigint> {\n if (!this.smartAccount) {\n throw new Error(\"Smart account not connected\");\n }\n\n return await this.publicClient.readContract({\n address: this.config.entryPointAddress!,\n abi: [\n {\n name: \"getNonce\",\n type: \"function\",\n stateMutability: \"view\",\n inputs: [\n { name: \"sender\", type: \"address\" },\n { name: \"key\", type: \"uint192\" },\n ],\n outputs: [{ name: \"nonce\", type: \"uint256\" }],\n },\n ],\n functionName: \"getNonce\",\n args: [this.smartAccount.address, 0n],\n });\n }\n\n // ==============================================================================\n // Send UserOperations\n // ==============================================================================\n\n async sendUserOperation(params: SendUserOperationParams): Promise<Hash> {\n if (!this.smartAccountClient) {\n throw new Error(\"Smart account not connected\");\n }\n\n const {\n target,\n data = \"0x\",\n value = 0n,\n maxFeePerGas,\n maxPriorityFeePerGas,\n callGasLimit,\n verificationGasLimit,\n preVerificationGas,\n } = params;\n\n // Get gas prices if not provided\n let gasPrices = {\n maxFeePerGas: maxFeePerGas,\n maxPriorityFeePerGas: maxPriorityFeePerGas,\n };\n\n if (!maxFeePerGas || !maxPriorityFeePerGas) {\n const estimatedGas = await this.bundlerClient!.getUserOperationGasPrice();\n gasPrices = {\n maxFeePerGas: maxFeePerGas || estimatedGas.fast.maxFeePerGas,\n maxPriorityFeePerGas:\n maxPriorityFeePerGas || estimatedGas.fast.maxPriorityFeePerGas,\n };\n }\n\n console.log(\"Sending UserOperation...\");\n console.log(` Target: ${target}`);\n console.log(` Value: ${value}`);\n console.log(\n ` Gas: ${gasPrices.maxFeePerGas} / ${gasPrices.maxPriorityFeePerGas}`\n );\n\n const txOptions: any = {\n calls: [\n {\n to: target,\n value: value,\n data: data,\n },\n ],\n maxFeePerGas: gasPrices.maxFeePerGas,\n maxPriorityFeePerGas: gasPrices.maxPriorityFeePerGas,\n };\n\n // Add optional gas limits if provided\n if (callGasLimit) txOptions.callGasLimit = callGasLimit;\n if (verificationGasLimit)\n txOptions.verificationGasLimit = verificationGasLimit;\n if (preVerificationGas) txOptions.preVerificationGas = preVerificationGas;\n\n // Send transaction - paymaster is automatically called if configured\n const userOpHash = await this.smartAccountClient.sendTransaction(txOptions);\n\n console.log(`✅ UserOperation sent: ${userOpHash}`);\n return userOpHash;\n }\n\n // ==============================================================================\n // Contract Interactions\n // ==============================================================================\n\n async writeContract(params: {\n address: Address;\n abi: any[];\n functionName: string;\n args?: any[];\n value?: bigint;\n maxFeePerGas?: bigint;\n maxPriorityFeePerGas?: bigint;\n }): Promise<Hash> {\n const { address, abi, functionName, args = [], value = 0n } = params;\n\n const data = encodeFunctionData({\n abi,\n functionName,\n args,\n });\n\n return await this.sendUserOperation({\n target: address,\n data,\n value,\n maxFeePerGas: params.maxFeePerGas,\n maxPriorityFeePerGas: params.maxPriorityFeePerGas,\n });\n }\n\n async readContract(params: {\n address: Address;\n abi: any[];\n functionName: string;\n args?: any[];\n }): Promise<any> {\n return await this.publicClient.readContract({\n address: params.address,\n abi: params.abi,\n functionName: params.functionName,\n args: params.args || [],\n });\n }\n\n // ==============================================================================\n // Utilities\n // ==============================================================================\n\n async waitForUserOperationReceipt(\n userOpHash: Hash,\n timeout: number = 30000\n ): Promise<UserOperationReceipt> {\n console.log(`Waiting for UserOperation receipt...`);\n\n const startTime = Date.now();\n\n while (Date.now() - startTime < timeout) {\n await new Promise((resolve) => setTimeout(resolve, 2000));\n\n // In a real implementation, you'd query the bundler for receipt\n // For now, we'll return a basic receipt structure\n console.log(\"Checking for receipt...\");\n }\n\n return {\n userOpHash,\n success: true,\n };\n }\n\n async fundAccount(\n amount: bigint,\n fromPrivateKey: `0x${string}`\n ): Promise<Hash> {\n if (!this.smartAccount) {\n throw new Error(\"Smart account not connected\");\n }\n\n const signer = privateKeyToAccount(fromPrivateKey);\n const client = createWalletClient({\n account: signer,\n chain: this.config.chain,\n transport: http(this.config.rpcUrl),\n });\n\n console.log(`Funding account with ${amount} wei...`);\n\n const hash = await client.sendTransaction({\n account: signer, // ✅ Add this line\n to: this.smartAccount.address,\n value: amount,\n kzg: {\n blobToKzgCommitment: function (blob: ByteArray): ByteArray {\n throw new Error(\"Function not implemented.\");\n },\n computeBlobKzgProof: function (\n blob: ByteArray,\n commitment: ByteArray\n ): ByteArray {\n throw new Error(\"Function not implemented.\");\n },\n },\n chain: undefined,\n });\n\n console.log(`✅ Funded: ${hash}`);\n return hash;\n }\n\n // ==============================================================================\n // Batch Operations\n // ==============================================================================\n\n async sendBatchUserOperations(\n operations: SendUserOperationParams[]\n ): Promise<Hash[]> {\n const results: Hash[] = [];\n\n for (const op of operations) {\n const hash = await this.sendUserOperation(op);\n results.push(hash);\n }\n\n return results;\n }\n}\n\n// ==============================================================================\n// Helper Functions\n// ==============================================================================\n\nexport function createDagAAClient(config: DagAAConfig): DagAAClient {\n return new DagAAClient(config);\n}\n\nexport function parseDAG(amount: string): bigint {\n return parseEther(amount);\n}\n","import { defineChain } from \"viem\";\nimport { arbitrumSepolia } from \"viem/chains\";\nconst awakening_ = defineChain({\n id: 1043,\n name: \"Awakening Testnet\",\n nativeCurrency: { decimals: 18, name: \"Dag\", symbol: \"DAG\" },\n rpcUrls: { default: { http: [\"https://public-bdag.nownodes.io\"] } },\n blockExplorers: {\n default: { name: \"Explorer\", url: \"https://awakening.bdagscan.com/\" },\n },\n});\n\nexport const awakening = {\n bundler_rpc: \"http://0.0.0.0:3000/\",\n chain_config: awakening_,\n};\n\nexport const arbitrumSep = {\n bundler_rpc: \"http://0.0.0.0:3001/\",\n chain_config: arbitrumSepolia,\n};\n","// src/signers/PrivySigner.ts\nimport {\n type Account,\n type WalletClient,\n createWalletClient,\n custom,\n type Chain,\n LocalAccount,\n} from \"viem\";\nimport { ISigner } from \"./types.js\";\n\n/**\n * Privy Signer - Works with Privy's embedded wallets\n *\n * Usage in React:\n * ```tsx\n * import { useWallets } from '@privy-io/react-auth';\n *\n * const { wallets } = useWallets();\n * const embeddedWallet = wallets.find(w => w.walletClientType === 'privy');\n *\n * const signer = new PrivySigner(embeddedWallet, chain);\n * ```\n */\nexport class PrivySigner implements ISigner {\n private privyWallet: any; // Privy wallet object\n private chain: Chain;\n private cachedAddress?: `0x${string}`;\n private cachedWalletClient;\n\n constructor(privyWallet: any, chain: Chain) {\n if (!privyWallet) {\n throw new Error(\"Privy wallet is required\");\n }\n this.privyWallet = privyWallet;\n this.chain = chain;\n }\n\n async getAccount(): Promise<LocalAccount> {\n const provider = await this.privyWallet.getEthereumProvider();\n\n if (!provider) {\n throw new Error(\"No Ethereum provider found in Privy wallet\");\n }\n\n // Create a custom account from the provider\n return {\n address: this.privyWallet.address as `0x${string}`,\n type: \"json-rpc\",\n // @ts-ignore - Privy provider compatible with viem\n source: \"privateKey\",\n } as unknown as LocalAccount;\n }\n\n async getWalletClient(): Promise<WalletClient> {\n if (this.cachedWalletClient) {\n return this.cachedWalletClient;\n }\n\n const provider = await this.privyWallet.getEthereumProvider();\n\n if (!provider) {\n throw new Error(\"No Ethereum provider found in Privy wallet\");\n }\n\n // Create wallet client with Privy's provider\n this.cachedWalletClient = createWalletClient({\n account: await this.getAccount(),\n chain: this.chain,\n transport: custom(provider),\n });\n\n return this.cachedWalletClient;\n }\n\n async getAddress(): Promise<`0x${string}`> {\n if (this.cachedAddress) {\n return this.cachedAddress;\n }\n\n this.cachedAddress = this.privyWallet.address as `0x${string}`;\n return this.cachedAddress;\n }\n\n async isReady(): Promise<boolean> {\n try {\n const provider = await this.privyWallet.getEthereumProvider();\n return !!provider && !!this.privyWallet.address;\n } catch {\n return false;\n }\n }\n}\n","// src/signers/PrivateKeySigner.ts\nimport {\n createWalletClient,\n http,\n type Chain,\n type Account,\n type WalletClient,\n LocalAccount,\n} from \"viem\";\nimport { privateKeyToAccount } from \"viem/accounts\";\nimport { ISigner } from \"./types.js\";\n\nexport class PrivateKeySigner implements ISigner {\n private account: LocalAccount;\n private walletClient;\n\n constructor(privateKey: `0x${string}`, chain: Chain, rpcUrl: string) {\n this.account = privateKeyToAccount(privateKey);\n this.walletClient = createWalletClient({\n account: this.account,\n chain,\n transport: http(rpcUrl),\n });\n }\n\n getAccount(): LocalAccount {\n return this.account;\n }\n\n getWalletClient(): WalletClient {\n return this.walletClient;\n }\n\n getAddress(): `0x${string}` {\n return this.account.address;\n }\n\n isReady(): boolean {\n return true;\n }\n}\n"],"mappings":";AAKA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EAMA;AAAA,EACA;AAAA,OAGK;AACP,SAAS,2BAA2B;AACpC,SAAS,4BAA4B;AACrC,SAAS,2BAA2B;AACpC,SAAS,2BAA2B;AACpC,SAAS,gCAAgC;AAalC,IAAM,cAAN,MAAkB;AAAA,EACf;AAAA,EACA;AAAA,EACA;AAAA,EACA,gBAA4B;AAAA,EAC5B,eAA2B;AAAA,EAC3B,kBAA8B;AAAA,EAC9B,qBAAiC;AAAA,EAEzC,YAAY,QAAqB;AAC/B,SAAK,SAAS;AAAA,MACZ,GAAG;AAAA,MACH,mBAAmB,OAAO,qBAAqB;AAAA,IACjD;AAEA,SAAK,eAAe,mBAAmB;AAAA,MACrC,OAAO,OAAO;AAAA,MACd,WAAW,KAAK,OAAO,MAAM;AAAA,IAC/B,CAAC;AAED,SAAK,eAAe,mBAAmB;AAAA,MACrC,OAAO,OAAO;AAAA,MACd,WAAW,KAAK,OAAO,MAAM;AAAA,IAC/B,CAAC;AAGD,QAAI,OAAO,cAAc;AACvB,WAAK,kBAAkB,KAAK,sBAAsB,OAAO,YAAY;AAAA,IACvE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,sBAAsB,cAAsB;AAElD,UAAM,YAAY,CAAC,SAAc;AAC/B,aAAO,KAAK;AAAA,QAAU;AAAA,QAAM,CAAC,GAAG,UAC9B,OAAO,UAAU,WAAW,KAAK,MAAM,SAAS,EAAE,CAAC,KAAK;AAAA,MAC1D;AAAA,IACF;AAEA,WAAO;AAAA;AAAA;AAAA;AAAA,MAIL,MAAM,qBACJ,QACA,YACc;AACd,YAAI;AACF,gBAAM,WAAW,MAAM,MAAM,cAAc;AAAA,YACzC,QAAQ;AAAA,YACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA;AAAA,YAE9C,MAAM,UAAU;AAAA,cACd,SAAS;AAAA,cACT,IAAI;AAAA,cACJ,QAAQ;AAAA,cACR,QAAQ,CAAC,QAAQ,YAAY,CAAC,CAAC;AAAA,YACjC,CAAC;AAAA,UACH,CAAC;AAED,gBAAM,OAAO,MAAM,SAAS,KAAK;AACjC,cAAI,KAAK,MAAO,OAAM,IAAI,MAAM,KAAK,MAAM,OAAO;AAElD,iBAAO,KAAK;AAAA,QACd,SAAS,OAAO;AACd,kBAAQ,KAAK,sCAAsC,KAAK;AAExD,iBAAO,EAAE,kBAAkB,KAAK;AAAA,QAClC;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MAKA,MAAM,iBAAiB,QAAa,YAAmC;AACrE,YAAI;AACF,gBAAM,WAAW,MAAM,MAAM,cAAc;AAAA,YACzC,QAAQ;AAAA,YACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,YAC9C,MAAM,UAAU;AAAA,cACd,SAAS;AAAA,cACT,IAAI;AAAA,cACJ,QAAQ;AAAA,cACR,QAAQ,CAAC,QAAQ,YAAY,CAAC,CAAC;AAAA,YACjC,CAAC;AAAA,UACH,CAAC;AAED,gBAAM,OAAO,MAAM,SAAS,KAAK;AACjC,cAAI,KAAK,MAAO,OAAM,IAAI,MAAM,KAAK,MAAM,OAAO;AAElD,iBAAO,KAAK;AAAA,QACd,SAAS,OAAO;AACd,kBAAQ,KAAK,iCAAiC,KAAK;AACnD,iBAAO;AAAA,QACT;AAAA,MACF;AAAA;AAAA;AAAA;AAAA,MAKA,MAAM,qBACJ,QACA,YACc;AACd,YAAI;AACF,gBAAM,WAAW,MAAM,MAAM,cAAc;AAAA,YACzC,QAAQ;AAAA,YACR,SAAS,EAAE,gBAAgB,mBAAmB;AAAA,YAC9C,MAAM,UAAU;AAAA,cACd,SAAS;AAAA,cACT,IAAI;AAAA,cACJ,QAAQ;AAAA,cACR,QAAQ,CAAC,QAAQ,YAAY,CAAC,CAAC;AAAA,YACjC,CAAC;AAAA,UACH,CAAC;AAED,gBAAM,OAAO,MAAM,SAAS,KAAK;AACjC,cAAI,KAAK,MAAO,OAAM,IAAI,MAAM,KAAK,MAAM,OAAO;AAElD,iBAAO,KAAK;AAAA,QACd,SAAS,OAAO;AACd,kBAAQ,KAAK,qCAAqC,KAAK;AACvD,gBAAM;AAAA,QACR;AAAA,MACF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,oBACJ,eACkB;AAClB,UAAM,EAAE,QAAQ,eAAe,IAAI;AAEnC,UAAM,UAAU,MAAM,OAAO,QAAQ;AACrC,QAAI,CAAC,SAAS;AACZ,YAAM,IAAI,MAAM,kDAAkD;AAAA,IACpE;AAEA,UAAM,QAAQ,MAAM,OAAO,WAAW;AAEtC,UAAM,gBAAgB,MAAM,OAAO,gBAAgB;AAEnD,QAAI,gBAAgB;AAElB,WAAK,eAAe,MAAM,qBAAqB;AAAA,QAC7C,QAAQ;AAAA,QACR;AAAA,QACA,gBAAgB,KAAK,OAAO;AAAA,QAC5B,YAAY;AAAA,UACV,SAAS,KAAK,OAAO;AAAA,UACrB,SAAS;AAAA,QACX;AAAA,QACA,SAAS;AAAA,MACX,CAAC;AAAA,IACH,OAAO;AAEL,WAAK,eAAe,MAAM,qBAAqB;AAAA,QAC7C,QAAQ;AAAA,QACR;AAAA,QACA,gBAAgB,KAAK,OAAO;AAAA,QAC5B,YAAY;AAAA,UACV,SAAS,KAAK,OAAO;AAAA,UACrB,SAAS;AAAA,QACX;AAAA,MACF,CAAC;AAAA,IACH;AAGA,SAAK,gBAAgB,oBAAoB;AAAA,MACvC,WAAW,KAAK,KAAK,OAAO,UAAU;AAAA,MACtC,YAAY;AAAA,QACV,SAAS,KAAK,OAAO;AAAA,QACrB,SAAS;AAAA,MACX;AAAA,IACF,CAAC;AAGD,UAAM,eAAoB;AAAA,MACxB,kBAAkB,KAAK,KAAK,OAAO,UAAU;AAAA,MAC7C,OAAO,KAAK,OAAO;AAAA,MACnB,SAAS,KAAK;AAAA,IAChB;AAGA,QAAI,KAAK,iBAAiB;AACxB,mBAAa,YAAY;AAAA,QACvB,kBAAkB,OAAO,kBAAuB;AAC9C,kBAAQ,IAAI,+CAAwC;AACpD,kBAAQ,IAAI,kBAAkB,cAAc,MAAM;AAElD,cAAI;AACF,kBAAM,SAAS,MAAM,KAAK,gBAAiB;AAAA,cACzC;AAAA,cACA,KAAK,OAAO;AAAA,YACd;AAEA,oBAAQ,IAAI,qBAAqB,MAAM;AAEvC,gBAAI,UAAU,OAAO,kBAAkB;AACrC,sBAAQ,IAAI,wCAAmC;AAC/C,sBAAQ,IAAI,qBAAqB,OAAO,gBAAgB;AACxD,qBAAO;AAAA,gBACL,kBAAkB,OAAO;AAAA,gBACzB,GAAI,OAAO,sBAAsB;AAAA,kBAC/B,oBAAoB,OAAO,OAAO,kBAAkB;AAAA,gBACtD;AAAA,gBACA,GAAI,OAAO,wBAAwB;AAAA,kBACjC,sBAAsB,OAAO,OAAO,oBAAoB;AAAA,gBAC1D;AAAA,gBACA,GAAI,OAAO,gBAAgB;AAAA,kBACzB,cAAc,OAAO,OAAO,YAAY;AAAA,gBAC1C;AAAA,cACF;AAAA,YACF,OAAO;AACL,sBAAQ,MAAM,2CAAsC,MAAM;AAC1D,oBAAM,IAAI,MAAM,4BAA4B;AAAA,YAC9C;AAAA,UACF,SAAS,OAAO;AACd,oBAAQ,MAAM,wCAAmC,KAAK;AACtD,kBAAM;AAAA,UACR;AAAA,QACF;AAAA,QAEA,sBAAsB,OAAO,kBAAuB;AAClD,kBAAQ,IAAI,6DAAsD;AAElE,cAAI;AACF,kBAAM,SAAS,MAAM,KAAK,gBAAiB;AAAA,cACzC;AAAA,cACA,KAAK,OAAO;AAAA,YACd;AAEA,oBAAQ,IAAI,qBAAqB,MAAM;AAEvC,gBAAI,UAAU,OAAO,kBAAkB;AACrC,sBAAQ,IAAI,gCAA2B;AACvC,qBAAO;AAAA,gBACL,kBAAkB,OAAO;AAAA,cAC3B;AAAA,YACF;AAAA,UACF,SAAS,OAAO;AACd,oBAAQ,KAAK,mDAAyC,KAAK;AAAA,UAC7D;AAGA,kBAAQ,IAAI,sCAA4B;AACxC,iBAAO;AAAA,YACL,kBAAkB;AAAA,UACpB;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,SAAK,qBAAqB,yBAAyB,YAAY;AAE/D,YAAQ,IAAI,sCAAiC,KAAK,aAAa,OAAO,EAAE;AACxE,WAAO,KAAK,aAAa;AAAA,EAC3B;AAAA;AAAA;AAAA;AAAA,EAMA,aAAsB;AACpB,QAAI,CAAC,KAAK,cAAc;AACtB,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,WAAO,KAAK,aAAa;AAAA,EAC3B;AAAA,EAEA,MAAM,aAA8B;AAClC,QAAI,CAAC,KAAK,cAAc;AACtB,YAAM,IAAI,MAAM,6BAA6B;AAAA,IAC/C;AAEA,WAAO,MAAM,KAAK,aAAa,WAAW;AAAA,MACxC,SAAS,KAAK,aAAa;AAAA,IAC7B,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,aAA+B;AACnC,QAAI,CAAC,KAAK,cAAc;AACtB,YAAM,IAAI,MAAM,6BAA6B;AAAA,IAC/C;AAEA,UAAM,OAAO,MAAM,KAAK,aAAa,QAAQ;AAAA,MAC3C,SAAS,KAAK,aAAa;AAAA,IAC7B,CAAC;AAED,WAAO,SAAS,UAAa,SAAS;AAAA,EACxC;AAAA,EAEA,MAAM,WAA4B;AAChC,QAAI,CAAC,KAAK,cAAc;AACtB,YAAM,IAAI,MAAM,6BAA6B;AAAA,IAC/C;AAEA,WAAO,MAAM,KAAK,aAAa,aAAa;AAAA,MAC1C,SAAS,KAAK,OAAO;AAAA,MACrB,KAAK;AAAA,QACH;AAAA,UACE,MAAM;AAAA,UACN,MAAM;AAAA,UACN,iBAAiB;AAAA,UACjB,QAAQ;AAAA,YACN,EAAE,MAAM,UAAU,MAAM,UAAU;AAAA,YAClC,EAAE,MAAM,OAAO,MAAM,UAAU;AAAA,UACjC;AAAA,UACA,SAAS,CAAC,EAAE,MAAM,SAAS,MAAM,UAAU,CAAC;AAAA,QAC9C;AAAA,MACF;AAAA,MACA,cAAc;AAAA,MACd,MAAM,CAAC,KAAK,aAAa,SAAS,EAAE;AAAA,IACtC,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,kBAAkB,QAAgD;AACtE,QAAI,CAAC,KAAK,oBAAoB;AAC5B,YAAM,IAAI,MAAM,6BAA6B;AAAA,IAC/C;AAEA,UAAM;AAAA,MACJ;AAAA,MACA,OAAO;AAAA,MACP,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI;AAGJ,QAAI,YAAY;AAAA,MACd;AAAA,MACA;AAAA,IACF;AAEA,QAAI,CAAC,gBAAgB,CAAC,sBAAsB;AAC1C,YAAM,eAAe,MAAM,KAAK,cAAe,yBAAyB;AACxE,kBAAY;AAAA,QACV,cAAc,gBAAgB,aAAa,KAAK;AAAA,QAChD,sBACE,wBAAwB,aAAa,KAAK;AAAA,MAC9C;AAAA,IACF;AAEA,YAAQ,IAAI,0BAA0B;AACtC,YAAQ,IAAI,aAAa,MAAM,EAAE;AACjC,YAAQ,IAAI,YAAY,KAAK,EAAE;AAC/B,YAAQ;AAAA,MACN,UAAU,UAAU,YAAY,MAAM,UAAU,oBAAoB;AAAA,IACtE;AAEA,UAAM,YAAiB;AAAA,MACrB,OAAO;AAAA,QACL;AAAA,UACE,IAAI;AAAA,UACJ;AAAA,UACA;AAAA,QACF;AAAA,MACF;AAAA,MACA,cAAc,UAAU;AAAA,MACxB,sBAAsB,UAAU;AAAA,IAClC;AAGA,QAAI,aAAc,WAAU,eAAe;AAC3C,QAAI;AACF,gBAAU,uBAAuB;AACnC,QAAI,mBAAoB,WAAU,qBAAqB;AAGvD,UAAM,aAAa,MAAM,KAAK,mBAAmB,gBAAgB,SAAS;AAE1E,YAAQ,IAAI,8BAAyB,UAAU,EAAE;AACjD,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,cAAc,QAQF;AAChB,UAAM,EAAE,SAAS,KAAK,cAAc,OAAO,CAAC,GAAG,QAAQ,GAAG,IAAI;AAE9D,UAAM,OAAO,mBAAmB;AAAA,MAC9B;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAED,WAAO,MAAM,KAAK,kBAAkB;AAAA,MAClC,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA,cAAc,OAAO;AAAA,MACrB,sBAAsB,OAAO;AAAA,IAC/B,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,aAAa,QAKF;AACf,WAAO,MAAM,KAAK,aAAa,aAAa;AAAA,MAC1C,SAAS,OAAO;AAAA,MAChB,KAAK,OAAO;AAAA,MACZ,cAAc,OAAO;AAAA,MACrB,MAAM,OAAO,QAAQ,CAAC;AAAA,IACxB,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,4BACJ,YACA,UAAkB,KACa;AAC/B,YAAQ,IAAI,sCAAsC;AAElD,UAAM,YAAY,KAAK,IAAI;AAE3B,WAAO,KAAK,IAAI,IAAI,YAAY,SAAS;AACvC,YAAM,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,GAAI,CAAC;AAIxD,cAAQ,IAAI,yBAAyB;AAAA,IACvC;AAEA,WAAO;AAAA,MACL;AAAA,MACA,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EAEA,MAAM,YACJ,QACA,gBACe;AACf,QAAI,CAAC,KAAK,cAAc;AACtB,YAAM,IAAI,MAAM,6BAA6B;AAAA,IAC/C;AAEA,UAAM,SAAS,oBAAoB,cAAc;AACjD,UAAM,SAAS,mBAAmB;AAAA,MAChC,SAAS;AAAA,MACT,OAAO,KAAK,OAAO;AAAA,MACnB,WAAW,KAAK,KAAK,OAAO,MAAM;AAAA,IACpC,CAAC;AAED,YAAQ,IAAI,wBAAwB,MAAM,SAAS;AAEnD,UAAM,OAAO,MAAM,OAAO,gBAAgB;AAAA,MACxC,SAAS;AAAA;AAAA,MACT,IAAI,KAAK,aAAa;AAAA,MACtB,OAAO;AAAA,MACP,KAAK;AAAA,QACH,qBAAqB,SAAU,MAA4B;AACzD,gBAAM,IAAI,MAAM,2BAA2B;AAAA,QAC7C;AAAA,QACA,qBAAqB,SACnB,MACA,YACW;AACX,gBAAM,IAAI,MAAM,2BAA2B;AAAA,QAC7C;AAAA,MACF;AAAA,MACA,OAAO;AAAA,IACT,CAAC;AAED,YAAQ,IAAI,kBAAa,IAAI,EAAE;AAC/B,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,wBACJ,YACiB;AACjB,UAAM,UAAkB,CAAC;AAEzB,eAAW,MAAM,YAAY;AAC3B,YAAM,OAAO,MAAM,KAAK,kBAAkB,EAAE;AAC5C,cAAQ,KAAK,IAAI;AAAA,IACnB;AAEA,WAAO;AAAA,EACT;AACF;AAMO,SAAS,kBAAkB,QAAkC;AAClE,SAAO,IAAI,YAAY,MAAM;AAC/B;AAEO,SAAS,SAAS,QAAwB;AAC/C,SAAO,WAAW,MAAM;AAC1B;;;ACpjBA,SAAS,mBAAmB;AAC5B,SAAS,uBAAuB;AAChC,IAAM,aAAa,YAAY;AAAA,EAC7B,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,gBAAgB,EAAE,UAAU,IAAI,MAAM,OAAO,QAAQ,MAAM;AAAA,EAC3D,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,iCAAiC,EAAE,EAAE;AAAA,EAClE,gBAAgB;AAAA,IACd,SAAS,EAAE,MAAM,YAAY,KAAK,kCAAkC;AAAA,EACtE;AACF,CAAC;AAEM,IAAM,YAAY;AAAA,EACvB,aAAa;AAAA,EACb,cAAc;AAChB;AAEO,IAAM,cAAc;AAAA,EACzB,aAAa;AAAA,EACb,cAAc;AAChB;;;ACnBA;AAAA,EAGE,sBAAAA;AAAA,EACA;AAAA,OAGK;AAgBA,IAAM,cAAN,MAAqC;AAAA,EAClC;AAAA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAER,YAAY,aAAkB,OAAc;AAC1C,QAAI,CAAC,aAAa;AAChB,YAAM,IAAI,MAAM,0BAA0B;AAAA,IAC5C;AACA,SAAK,cAAc;AACnB,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,MAAM,aAAoC;AACxC,UAAM,WAAW,MAAM,KAAK,YAAY,oBAAoB;AAE5D,QAAI,CAAC,UAAU;AACb,YAAM,IAAI,MAAM,4CAA4C;AAAA,IAC9D;AAGA,WAAO;AAAA,MACL,SAAS,KAAK,YAAY;AAAA,MAC1B,MAAM;AAAA;AAAA,MAEN,QAAQ;AAAA,IACV;AAAA,EACF;AAAA,EAEA,MAAM,kBAAyC;AAC7C,QAAI,KAAK,oBAAoB;AAC3B,aAAO,KAAK;AAAA,IACd;AAEA,UAAM,WAAW,MAAM,KAAK,YAAY,oBAAoB;AAE5D,QAAI,CAAC,UAAU;AACb,YAAM,IAAI,MAAM,4CAA4C;AAAA,IAC9D;AAGA,SAAK,qBAAqBA,oBAAmB;AAAA,MAC3C,SAAS,MAAM,KAAK,WAAW;AAAA,MAC/B,OAAO,KAAK;AAAA,MACZ,WAAW,OAAO,QAAQ;AAAA,IAC5B,CAAC;AAED,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,aAAqC;AACzC,QAAI,KAAK,eAAe;AACtB,aAAO,KAAK;AAAA,IACd;AAEA,SAAK,gBAAgB,KAAK,YAAY;AACtC,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,MAAM,UAA4B;AAChC,QAAI;AACF,YAAM,WAAW,MAAM,KAAK,YAAY,oBAAoB;AAC5D,aAAO,CAAC,CAAC,YAAY,CAAC,CAAC,KAAK,YAAY;AAAA,IAC1C,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AACF;;;AC3FA;AAAA,EACE,sBAAAC;AAAA,EACA,QAAAC;AAAA,OAKK;AACP,SAAS,uBAAAC,4BAA2B;AAG7B,IAAM,mBAAN,MAA0C;AAAA,EACvC;AAAA,EACA;AAAA,EAER,YAAY,YAA2B,OAAc,QAAgB;AACnE,SAAK,UAAUA,qBAAoB,UAAU;AAC7C,SAAK,eAAeF,oBAAmB;AAAA,MACrC,SAAS,KAAK;AAAA,MACd;AAAA,MACA,WAAWC,MAAK,MAAM;AAAA,IACxB,CAAC;AAAA,EACH;AAAA,EAEA,aAA2B;AACzB,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,kBAAgC;AAC9B,WAAO,KAAK;AAAA,EACd;AAAA,EAEA,aAA4B;AAC1B,WAAO,KAAK,QAAQ;AAAA,EACtB;AAAA,EAEA,UAAmB;AACjB,WAAO;AAAA,EACT;AACF;","names":["createWalletClient","createWalletClient","http","privateKeyToAccount"]}
package/package.json CHANGED
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "name": "@dag-kit/kit",
3
- "version": "1.0.2",
3
+ "version": "1.0.4-alpha.3",
4
4
  "description": "",
5
5
  "author": "Abstract",
6
6
  "license": "MIT",
7
7
  "private": false,
8
8
  "type": "module",
9
- "main": "./dist/esm/exports/index.js",
10
- "module": "./dist/esm/exports/index.js",
11
- "types": "./dist/types/exports/index.d.ts",
12
- "typings": "./dist/types/exports/index.d.ts",
9
+ "main": "./dist/index.js",
10
+ "module": "./dist/index.js",
11
+ "types": "./dist/index.d.ts",
12
+ "typings": "./dist/index.d.ts",
13
13
  "sideEffects": false,
14
14
  "files": [
15
15
  "dist",
@@ -24,9 +24,9 @@
24
24
  ],
25
25
  "exports": {
26
26
  ".": {
27
- "types": "./dist/types/exports/index.d.ts",
28
- "default": "./dist/esm/exports/index.js",
29
- "import": "./dist/esm/exports/index.js"
27
+ "types": "./dist/index.d.ts",
28
+ "import": "./dist/index.js",
29
+ "default": "./dist/index.js"
30
30
  },
31
31
  "./experimental": {
32
32
  "types": "./dist/types/exports/experimental.d.ts",
@@ -36,9 +36,14 @@
36
36
  "./package.json": "./package.json"
37
37
  },
38
38
  "dependencies": {
39
+ "@privy-io/react-auth": "^3.9.1",
40
+ "@privy-io/wagmi-connector": "^0.1.13",
41
+ "@turnkey/react-wallet-kit": "^1.7.1",
39
42
  "dotenv": "^16.6.1",
40
- "permissionless": "^0.2.0",
41
- "viem": "^2.20.0"
43
+ "magic-sdk": "^32.0.0",
44
+ "permissionless": "^0.3.2",
45
+ "viem": "2.28.1",
46
+ "wagmi": "2.12.7"
42
47
  },
43
48
  "devDependencies": {
44
49
  "@types/node": "^20.11.10",
@@ -58,7 +63,7 @@
58
63
  "homepage": "https://github.com/alchemyplatform/aa-sdk#readme",
59
64
  "scripts": {
60
65
  "prebuild": "tsx ./inject-version.ts",
61
- "build": "pnpm clean && pnpm build:esm && pnpm build:types",
66
+ "build": "pnpm clean && tsup",
62
67
  "build:esm": "tsc --project tsconfig.build.json --outDir ./dist/esm",
63
68
  "build:types": "tsc --project tsconfig.build.json --declarationDir ./dist/types --emitDeclarationOnly --declaration --declarationMap",
64
69
  "clean": "rm -rf ./dist",
@@ -39,4 +39,4 @@ export const abi = [
39
39
  stateMutability: "view",
40
40
  type: "function",
41
41
  },
42
- ];
42
+ ] as const;