@zubari/sdk 0.1.5 → 0.1.7
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/dist/{WalletManager-CYJNiww6.d.ts → WalletManager-YnFArqAt.d.ts} +22 -17
- package/dist/{WalletManager-Dmmcbtiw.d.mts → WalletManager-zKc_xew_.d.mts} +22 -17
- package/dist/{index-OxzgPoRG.d.ts → index-CLssrNf2.d.ts} +1 -1
- package/dist/{index-poGbMJzn.d.mts → index-DXTHGOnP.d.mts} +1 -1
- package/dist/index.d.mts +3 -3
- package/dist/index.d.ts +3 -3
- package/dist/index.js +720 -2924
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +716 -2927
- package/dist/index.mjs.map +1 -1
- package/dist/react/index.d.mts +2 -2
- package/dist/react/index.d.ts +2 -2
- package/dist/react/index.js +513 -2789
- package/dist/react/index.js.map +1 -1
- package/dist/react/index.mjs +514 -2790
- package/dist/react/index.mjs.map +1 -1
- package/dist/services/index.d.mts +288 -54
- package/dist/services/index.d.ts +288 -54
- package/dist/services/index.js +377 -2683
- package/dist/services/index.js.map +1 -1
- package/dist/services/index.mjs +374 -2681
- package/dist/services/index.mjs.map +1 -1
- package/dist/wallet/index.d.mts +2 -2
- package/dist/wallet/index.d.ts +2 -2
- package/dist/wallet/index.js +582 -2860
- package/dist/wallet/index.js.map +1 -1
- package/dist/wallet/index.mjs +583 -2861
- package/dist/wallet/index.mjs.map +1 -1
- package/package.json +9 -5
- package/dist/TransactionService-CxwB1kpN.d.mts +0 -205
- package/dist/TransactionService-DdL6H6M-.d.ts +0 -205
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../../../node_modules/tweetnacl/nacl-fast.js","../../../../node_modules/base-x/src/index.js","../../../../node_modules/bs58/index.js","../../src/config/contracts.ts","../../src/services/SwapService.ts","../../src/services/WdkApiClient.ts","../../src/services/BrowserAddressDerivation.ts","../../src/services/WdkService.ts","../../src/services/TransactionService.ts"],"names":["exports","i","j","DERIVATION_PATHS","WdkManager","WalletManagerBtc","WalletManagerEvm","WalletManagerSolana","WalletManagerTon","WalletManagerTron","WalletManagerSpark","wdkLoaded","wdkLoadError","dynamicImport","loadWdkModules","DEFAULT_RPC_URLS"],"mappings":"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AE,CAAA;AACR,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,CAAA,GAAI,EAAE,EAAE,CAAA;AACR,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,CAAA,GAAI,EAAE,EAAE,CAAA;AACR,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,CAAA,GAAI,EAAE,EAAE,CAAA;AACR,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,EAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,GAAA,IAAO,CAAA,GAAI,GAAA;AACX,QAAA,CAAA,GAAI,EAAE,EAAE,CAAA;AACR,QAAA,GA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Y,UAAA;AAAA,QAAY,UAAA;AAAA,QACpC,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QACpC,SAAA;AAAA,QAAY,UAAA;AAAA,QAAY,SAAA;AAAA,QAAY,SAAA;AAAA,QACpC,SAAA;AAAA,QAAY,UAAA;AAAA,QAAY,SAAA;AAAA,QAAY,UAAA;AAAA,QACpC,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QACpC,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QACpC,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,SAAA;AAAA,QACpC,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QACpC,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,SAAA;AAAA,QACpC,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QACpC,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,SAAA;AAAA,QAAY,SAAA;AAAA,QACpC,SAAA;AAAA,QAAY,UAAA;AAAA,QAAY,SAAA;AAAA,QAAY,UAAA;AAAA,QACpC,SAAA;AAAA,QAAY,UAAA;AAAA,QAAY,SAAA;AAAA,QAAY,UAAA;AAAA,QACpC,SAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QACpC,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QACpC,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QACpC,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,SAAA;AAAA,QACpC,UAAA;AAAA,QAAY,SAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QACpC,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QACpC,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,UAAA;AAAA,QAAY,SAAA;AAAA,QACpC,UAAA;AAA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","file":"index.mjs","sourcesContent":["(function(nacl) {\n'use strict';\n\n// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.\n// Public domain.\n//\n// Implementation derived from TweetNaCl version 20140427.\n// See for details: http://tweetnacl.cr.yp.to/\n\nvar gf = function(init) {\n var i, r = new Float64Array(16);\n if (init) for (i = 0; i < init.length; i++) r[i] = init[i];\n return r;\n};\n\n// Pluggable, initialized in high-level API below.\nvar randombytes = function(/* x, n */) { throw new Error('no PRNG'); };\n\nvar _0 = new Uint8Array(16);\nvar _9 = new Uint8Array(32); _9[0] = 9;\n\nvar gf0 = gf(),\n gf1 = gf([1]),\n _121665 = gf([0xdb41, 1]),\n D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]),\n D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]),\n X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]),\n Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]),\n I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);\n\nfunction ts64(x, i, h, l) {\n x[i] = (h >> 24) & 0xff;\n x[i+1] = (h >> 16) & 0xff;\n x[i+2] = (h >> 8) & 0xff;\n x[i+3] = h & 0xff;\n x[i+4] = (l >> 24) & 0xff;\n x[i+5] = (l >> 16) & 0xff;\n x[i+6] = (l >> 8) & 0xff;\n x[i+7] = l & 0xff;\n}\n\nfunction vn(x, xi, y, yi, n) {\n var i,d = 0;\n for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i];\n return (1 & ((d - 1) >>> 8)) - 1;\n}\n\nfunction crypto_verify_16(x, xi, y, yi) {\n return vn(x,xi,y,yi,16);\n}\n\nfunction crypto_verify_32(x, xi, y, yi) {\n return vn(x,xi,y,yi,32);\n}\n\nfunction core_salsa20(o, p, k, c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n x0 = x0 + j0 | 0;\n x1 = x1 + j1 | 0;\n x2 = x2 + j2 | 0;\n x3 = x3 + j3 | 0;\n x4 = x4 + j4 | 0;\n x5 = x5 + j5 | 0;\n x6 = x6 + j6 | 0;\n x7 = x7 + j7 | 0;\n x8 = x8 + j8 | 0;\n x9 = x9 + j9 | 0;\n x10 = x10 + j10 | 0;\n x11 = x11 + j11 | 0;\n x12 = x12 + j12 | 0;\n x13 = x13 + j13 | 0;\n x14 = x14 + j14 | 0;\n x15 = x15 + j15 | 0;\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x1 >>> 0 & 0xff;\n o[ 5] = x1 >>> 8 & 0xff;\n o[ 6] = x1 >>> 16 & 0xff;\n o[ 7] = x1 >>> 24 & 0xff;\n\n o[ 8] = x2 >>> 0 & 0xff;\n o[ 9] = x2 >>> 8 & 0xff;\n o[10] = x2 >>> 16 & 0xff;\n o[11] = x2 >>> 24 & 0xff;\n\n o[12] = x3 >>> 0 & 0xff;\n o[13] = x3 >>> 8 & 0xff;\n o[14] = x3 >>> 16 & 0xff;\n o[15] = x3 >>> 24 & 0xff;\n\n o[16] = x4 >>> 0 & 0xff;\n o[17] = x4 >>> 8 & 0xff;\n o[18] = x4 >>> 16 & 0xff;\n o[19] = x4 >>> 24 & 0xff;\n\n o[20] = x5 >>> 0 & 0xff;\n o[21] = x5 >>> 8 & 0xff;\n o[22] = x5 >>> 16 & 0xff;\n o[23] = x5 >>> 24 & 0xff;\n\n o[24] = x6 >>> 0 & 0xff;\n o[25] = x6 >>> 8 & 0xff;\n o[26] = x6 >>> 16 & 0xff;\n o[27] = x6 >>> 24 & 0xff;\n\n o[28] = x7 >>> 0 & 0xff;\n o[29] = x7 >>> 8 & 0xff;\n o[30] = x7 >>> 16 & 0xff;\n o[31] = x7 >>> 24 & 0xff;\n\n o[32] = x8 >>> 0 & 0xff;\n o[33] = x8 >>> 8 & 0xff;\n o[34] = x8 >>> 16 & 0xff;\n o[35] = x8 >>> 24 & 0xff;\n\n o[36] = x9 >>> 0 & 0xff;\n o[37] = x9 >>> 8 & 0xff;\n o[38] = x9 >>> 16 & 0xff;\n o[39] = x9 >>> 24 & 0xff;\n\n o[40] = x10 >>> 0 & 0xff;\n o[41] = x10 >>> 8 & 0xff;\n o[42] = x10 >>> 16 & 0xff;\n o[43] = x10 >>> 24 & 0xff;\n\n o[44] = x11 >>> 0 & 0xff;\n o[45] = x11 >>> 8 & 0xff;\n o[46] = x11 >>> 16 & 0xff;\n o[47] = x11 >>> 24 & 0xff;\n\n o[48] = x12 >>> 0 & 0xff;\n o[49] = x12 >>> 8 & 0xff;\n o[50] = x12 >>> 16 & 0xff;\n o[51] = x12 >>> 24 & 0xff;\n\n o[52] = x13 >>> 0 & 0xff;\n o[53] = x13 >>> 8 & 0xff;\n o[54] = x13 >>> 16 & 0xff;\n o[55] = x13 >>> 24 & 0xff;\n\n o[56] = x14 >>> 0 & 0xff;\n o[57] = x14 >>> 8 & 0xff;\n o[58] = x14 >>> 16 & 0xff;\n o[59] = x14 >>> 24 & 0xff;\n\n o[60] = x15 >>> 0 & 0xff;\n o[61] = x15 >>> 8 & 0xff;\n o[62] = x15 >>> 16 & 0xff;\n o[63] = x15 >>> 24 & 0xff;\n}\n\nfunction core_hsalsa20(o,p,k,c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x5 >>> 0 & 0xff;\n o[ 5] = x5 >>> 8 & 0xff;\n o[ 6] = x5 >>> 16 & 0xff;\n o[ 7] = x5 >>> 24 & 0xff;\n\n o[ 8] = x10 >>> 0 & 0xff;\n o[ 9] = x10 >>> 8 & 0xff;\n o[10] = x10 >>> 16 & 0xff;\n o[11] = x10 >>> 24 & 0xff;\n\n o[12] = x15 >>> 0 & 0xff;\n o[13] = x15 >>> 8 & 0xff;\n o[14] = x15 >>> 16 & 0xff;\n o[15] = x15 >>> 24 & 0xff;\n\n o[16] = x6 >>> 0 & 0xff;\n o[17] = x6 >>> 8 & 0xff;\n o[18] = x6 >>> 16 & 0xff;\n o[19] = x6 >>> 24 & 0xff;\n\n o[20] = x7 >>> 0 & 0xff;\n o[21] = x7 >>> 8 & 0xff;\n o[22] = x7 >>> 16 & 0xff;\n o[23] = x7 >>> 24 & 0xff;\n\n o[24] = x8 >>> 0 & 0xff;\n o[25] = x8 >>> 8 & 0xff;\n o[26] = x8 >>> 16 & 0xff;\n o[27] = x8 >>> 24 & 0xff;\n\n o[28] = x9 >>> 0 & 0xff;\n o[29] = x9 >>> 8 & 0xff;\n o[30] = x9 >>> 16 & 0xff;\n o[31] = x9 >>> 24 & 0xff;\n}\n\nfunction crypto_core_salsa20(out,inp,k,c) {\n core_salsa20(out,inp,k,c);\n}\n\nfunction crypto_core_hsalsa20(out,inp,k,c) {\n core_hsalsa20(out,inp,k,c);\n}\n\nvar sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);\n // \"expand 32-byte k\"\n\nfunction crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n mpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n }\n return 0;\n}\n\nfunction crypto_stream_salsa20(c,cpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = x[i];\n }\n return 0;\n}\n\nfunction crypto_stream(c,cpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20(c,cpos,d,sn,s);\n}\n\nfunction crypto_stream_xor(c,cpos,m,mpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s);\n}\n\n/*\n* Port of Andrew Moon's Poly1305-donna-16. Public domain.\n* https://github.com/floodyberry/poly1305-donna\n*/\n\nvar poly1305 = function(key) {\n this.buffer = new Uint8Array(16);\n this.r = new Uint16Array(10);\n this.h = new Uint16Array(10);\n this.pad = new Uint16Array(8);\n this.leftover = 0;\n this.fin = 0;\n\n var t0, t1, t2, t3, t4, t5, t6, t7;\n\n t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff;\n t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03;\n t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff;\n this.r[5] = ((t4 >>> 1)) & 0x1ffe;\n t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81;\n t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n this.r[9] = ((t7 >>> 5)) & 0x007f;\n\n this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8;\n this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8;\n this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8;\n this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8;\n this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8;\n this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8;\n this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8;\n this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8;\n};\n\npoly1305.prototype.blocks = function(m, mpos, bytes) {\n var hibit = this.fin ? 0 : (1 << 11);\n var t0, t1, t2, t3, t4, t5, t6, t7, c;\n var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;\n\n var h0 = this.h[0],\n h1 = this.h[1],\n h2 = this.h[2],\n h3 = this.h[3],\n h4 = this.h[4],\n h5 = this.h[5],\n h6 = this.h[6],\n h7 = this.h[7],\n h8 = this.h[8],\n h9 = this.h[9];\n\n var r0 = this.r[0],\n r1 = this.r[1],\n r2 = this.r[2],\n r3 = this.r[3],\n r4 = this.r[4],\n r5 = this.r[5],\n r6 = this.r[6],\n r7 = this.r[7],\n r8 = this.r[8],\n r9 = this.r[9];\n\n while (bytes >= 16) {\n t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff;\n t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff;\n t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff;\n h5 += ((t4 >>> 1)) & 0x1fff;\n t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff;\n t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n h9 += ((t7 >>> 5)) | hibit;\n\n c = 0;\n\n d0 = c;\n d0 += h0 * r0;\n d0 += h1 * (5 * r9);\n d0 += h2 * (5 * r8);\n d0 += h3 * (5 * r7);\n d0 += h4 * (5 * r6);\n c = (d0 >>> 13); d0 &= 0x1fff;\n d0 += h5 * (5 * r5);\n d0 += h6 * (5 * r4);\n d0 += h7 * (5 * r3);\n d0 += h8 * (5 * r2);\n d0 += h9 * (5 * r1);\n c += (d0 >>> 13); d0 &= 0x1fff;\n\n d1 = c;\n d1 += h0 * r1;\n d1 += h1 * r0;\n d1 += h2 * (5 * r9);\n d1 += h3 * (5 * r8);\n d1 += h4 * (5 * r7);\n c = (d1 >>> 13); d1 &= 0x1fff;\n d1 += h5 * (5 * r6);\n d1 += h6 * (5 * r5);\n d1 += h7 * (5 * r4);\n d1 += h8 * (5 * r3);\n d1 += h9 * (5 * r2);\n c += (d1 >>> 13); d1 &= 0x1fff;\n\n d2 = c;\n d2 += h0 * r2;\n d2 += h1 * r1;\n d2 += h2 * r0;\n d2 += h3 * (5 * r9);\n d2 += h4 * (5 * r8);\n c = (d2 >>> 13); d2 &= 0x1fff;\n d2 += h5 * (5 * r7);\n d2 += h6 * (5 * r6);\n d2 += h7 * (5 * r5);\n d2 += h8 * (5 * r4);\n d2 += h9 * (5 * r3);\n c += (d2 >>> 13); d2 &= 0x1fff;\n\n d3 = c;\n d3 += h0 * r3;\n d3 += h1 * r2;\n d3 += h2 * r1;\n d3 += h3 * r0;\n d3 += h4 * (5 * r9);\n c = (d3 >>> 13); d3 &= 0x1fff;\n d3 += h5 * (5 * r8);\n d3 += h6 * (5 * r7);\n d3 += h7 * (5 * r6);\n d3 += h8 * (5 * r5);\n d3 += h9 * (5 * r4);\n c += (d3 >>> 13); d3 &= 0x1fff;\n\n d4 = c;\n d4 += h0 * r4;\n d4 += h1 * r3;\n d4 += h2 * r2;\n d4 += h3 * r1;\n d4 += h4 * r0;\n c = (d4 >>> 13); d4 &= 0x1fff;\n d4 += h5 * (5 * r9);\n d4 += h6 * (5 * r8);\n d4 += h7 * (5 * r7);\n d4 += h8 * (5 * r6);\n d4 += h9 * (5 * r5);\n c += (d4 >>> 13); d4 &= 0x1fff;\n\n d5 = c;\n d5 += h0 * r5;\n d5 += h1 * r4;\n d5 += h2 * r3;\n d5 += h3 * r2;\n d5 += h4 * r1;\n c = (d5 >>> 13); d5 &= 0x1fff;\n d5 += h5 * r0;\n d5 += h6 * (5 * r9);\n d5 += h7 * (5 * r8);\n d5 += h8 * (5 * r7);\n d5 += h9 * (5 * r6);\n c += (d5 >>> 13); d5 &= 0x1fff;\n\n d6 = c;\n d6 += h0 * r6;\n d6 += h1 * r5;\n d6 += h2 * r4;\n d6 += h3 * r3;\n d6 += h4 * r2;\n c = (d6 >>> 13); d6 &= 0x1fff;\n d6 += h5 * r1;\n d6 += h6 * r0;\n d6 += h7 * (5 * r9);\n d6 += h8 * (5 * r8);\n d6 += h9 * (5 * r7);\n c += (d6 >>> 13); d6 &= 0x1fff;\n\n d7 = c;\n d7 += h0 * r7;\n d7 += h1 * r6;\n d7 += h2 * r5;\n d7 += h3 * r4;\n d7 += h4 * r3;\n c = (d7 >>> 13); d7 &= 0x1fff;\n d7 += h5 * r2;\n d7 += h6 * r1;\n d7 += h7 * r0;\n d7 += h8 * (5 * r9);\n d7 += h9 * (5 * r8);\n c += (d7 >>> 13); d7 &= 0x1fff;\n\n d8 = c;\n d8 += h0 * r8;\n d8 += h1 * r7;\n d8 += h2 * r6;\n d8 += h3 * r5;\n d8 += h4 * r4;\n c = (d8 >>> 13); d8 &= 0x1fff;\n d8 += h5 * r3;\n d8 += h6 * r2;\n d8 += h7 * r1;\n d8 += h8 * r0;\n d8 += h9 * (5 * r9);\n c += (d8 >>> 13); d8 &= 0x1fff;\n\n d9 = c;\n d9 += h0 * r9;\n d9 += h1 * r8;\n d9 += h2 * r7;\n d9 += h3 * r6;\n d9 += h4 * r5;\n c = (d9 >>> 13); d9 &= 0x1fff;\n d9 += h5 * r4;\n d9 += h6 * r3;\n d9 += h7 * r2;\n d9 += h8 * r1;\n d9 += h9 * r0;\n c += (d9 >>> 13); d9 &= 0x1fff;\n\n c = (((c << 2) + c)) | 0;\n c = (c + d0) | 0;\n d0 = c & 0x1fff;\n c = (c >>> 13);\n d1 += c;\n\n h0 = d0;\n h1 = d1;\n h2 = d2;\n h3 = d3;\n h4 = d4;\n h5 = d5;\n h6 = d6;\n h7 = d7;\n h8 = d8;\n h9 = d9;\n\n mpos += 16;\n bytes -= 16;\n }\n this.h[0] = h0;\n this.h[1] = h1;\n this.h[2] = h2;\n this.h[3] = h3;\n this.h[4] = h4;\n this.h[5] = h5;\n this.h[6] = h6;\n this.h[7] = h7;\n this.h[8] = h8;\n this.h[9] = h9;\n};\n\npoly1305.prototype.finish = function(mac, macpos) {\n var g = new Uint16Array(10);\n var c, mask, f, i;\n\n if (this.leftover) {\n i = this.leftover;\n this.buffer[i++] = 1;\n for (; i < 16; i++) this.buffer[i] = 0;\n this.fin = 1;\n this.blocks(this.buffer, 0, 16);\n }\n\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n for (i = 2; i < 10; i++) {\n this.h[i] += c;\n c = this.h[i] >>> 13;\n this.h[i] &= 0x1fff;\n }\n this.h[0] += (c * 5);\n c = this.h[0] >>> 13;\n this.h[0] &= 0x1fff;\n this.h[1] += c;\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n this.h[2] += c;\n\n g[0] = this.h[0] + 5;\n c = g[0] >>> 13;\n g[0] &= 0x1fff;\n for (i = 1; i < 10; i++) {\n g[i] = this.h[i] + c;\n c = g[i] >>> 13;\n g[i] &= 0x1fff;\n }\n g[9] -= (1 << 13);\n\n mask = (c ^ 1) - 1;\n for (i = 0; i < 10; i++) g[i] &= mask;\n mask = ~mask;\n for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i];\n\n this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff;\n this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff;\n this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff;\n this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff;\n this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff;\n this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff;\n this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff;\n this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff;\n\n f = this.h[0] + this.pad[0];\n this.h[0] = f & 0xffff;\n for (i = 1; i < 8; i++) {\n f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0;\n this.h[i] = f & 0xffff;\n }\n\n mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff;\n mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff;\n mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff;\n mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff;\n mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff;\n mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff;\n mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff;\n mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff;\n mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff;\n mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff;\n mac[macpos+10] = (this.h[5] >>> 0) & 0xff;\n mac[macpos+11] = (this.h[5] >>> 8) & 0xff;\n mac[macpos+12] = (this.h[6] >>> 0) & 0xff;\n mac[macpos+13] = (this.h[6] >>> 8) & 0xff;\n mac[macpos+14] = (this.h[7] >>> 0) & 0xff;\n mac[macpos+15] = (this.h[7] >>> 8) & 0xff;\n};\n\npoly1305.prototype.update = function(m, mpos, bytes) {\n var i, want;\n\n if (this.leftover) {\n want = (16 - this.leftover);\n if (want > bytes)\n want = bytes;\n for (i = 0; i < want; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n bytes -= want;\n mpos += want;\n this.leftover += want;\n if (this.leftover < 16)\n return;\n this.blocks(this.buffer, 0, 16);\n this.leftover = 0;\n }\n\n if (bytes >= 16) {\n want = bytes - (bytes % 16);\n this.blocks(m, mpos, want);\n mpos += want;\n bytes -= want;\n }\n\n if (bytes) {\n for (i = 0; i < bytes; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n this.leftover += bytes;\n }\n};\n\nfunction crypto_onetimeauth(out, outpos, m, mpos, n, k) {\n var s = new poly1305(k);\n s.update(m, mpos, n);\n s.finish(out, outpos);\n return 0;\n}\n\nfunction crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {\n var x = new Uint8Array(16);\n crypto_onetimeauth(x,0,m,mpos,n,k);\n return crypto_verify_16(h,hpos,x,0);\n}\n\nfunction crypto_secretbox(c,m,d,n,k) {\n var i;\n if (d < 32) return -1;\n crypto_stream_xor(c,0,m,0,d,n,k);\n crypto_onetimeauth(c, 16, c, 32, d - 32, c);\n for (i = 0; i < 16; i++) c[i] = 0;\n return 0;\n}\n\nfunction crypto_secretbox_open(m,c,d,n,k) {\n var i;\n var x = new Uint8Array(32);\n if (d < 32) return -1;\n crypto_stream(x,0,32,n,k);\n if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1;\n crypto_stream_xor(m,0,c,0,d,n,k);\n for (i = 0; i < 32; i++) m[i] = 0;\n return 0;\n}\n\nfunction set25519(r, a) {\n var i;\n for (i = 0; i < 16; i++) r[i] = a[i]|0;\n}\n\nfunction car25519(o) {\n var i, v, c = 1;\n for (i = 0; i < 16; i++) {\n v = o[i] + c + 65535;\n c = Math.floor(v / 65536);\n o[i] = v - c * 65536;\n }\n o[0] += c-1 + 37 * (c-1);\n}\n\nfunction sel25519(p, q, b) {\n var t, c = ~(b-1);\n for (var i = 0; i < 16; i++) {\n t = c & (p[i] ^ q[i]);\n p[i] ^= t;\n q[i] ^= t;\n }\n}\n\nfunction pack25519(o, n) {\n var i, j, b;\n var m = gf(), t = gf();\n for (i = 0; i < 16; i++) t[i] = n[i];\n car25519(t);\n car25519(t);\n car25519(t);\n for (j = 0; j < 2; j++) {\n m[0] = t[0] - 0xffed;\n for (i = 1; i < 15; i++) {\n m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1);\n m[i-1] &= 0xffff;\n }\n m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1);\n b = (m[15]>>16) & 1;\n m[14] &= 0xffff;\n sel25519(t, m, 1-b);\n }\n for (i = 0; i < 16; i++) {\n o[2*i] = t[i] & 0xff;\n o[2*i+1] = t[i]>>8;\n }\n}\n\nfunction neq25519(a, b) {\n var c = new Uint8Array(32), d = new Uint8Array(32);\n pack25519(c, a);\n pack25519(d, b);\n return crypto_verify_32(c, 0, d, 0);\n}\n\nfunction par25519(a) {\n var d = new Uint8Array(32);\n pack25519(d, a);\n return d[0] & 1;\n}\n\nfunction unpack25519(o, n) {\n var i;\n for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8);\n o[15] &= 0x7fff;\n}\n\nfunction A(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] + b[i];\n}\n\nfunction Z(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] - b[i];\n}\n\nfunction M(o, a, b) {\n var v, c,\n t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0,\n t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,\n t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,\n t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,\n b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7],\n b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11],\n b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n\n v = a[0];\n t0 += v * b0;\n t1 += v * b1;\n t2 += v * b2;\n t3 += v * b3;\n t4 += v * b4;\n t5 += v * b5;\n t6 += v * b6;\n t7 += v * b7;\n t8 += v * b8;\n t9 += v * b9;\n t10 += v * b10;\n t11 += v * b11;\n t12 += v * b12;\n t13 += v * b13;\n t14 += v * b14;\n t15 += v * b15;\n v = a[1];\n t1 += v * b0;\n t2 += v * b1;\n t3 += v * b2;\n t4 += v * b3;\n t5 += v * b4;\n t6 += v * b5;\n t7 += v * b6;\n t8 += v * b7;\n t9 += v * b8;\n t10 += v * b9;\n t11 += v * b10;\n t12 += v * b11;\n t13 += v * b12;\n t14 += v * b13;\n t15 += v * b14;\n t16 += v * b15;\n v = a[2];\n t2 += v * b0;\n t3 += v * b1;\n t4 += v * b2;\n t5 += v * b3;\n t6 += v * b4;\n t7 += v * b5;\n t8 += v * b6;\n t9 += v * b7;\n t10 += v * b8;\n t11 += v * b9;\n t12 += v * b10;\n t13 += v * b11;\n t14 += v * b12;\n t15 += v * b13;\n t16 += v * b14;\n t17 += v * b15;\n v = a[3];\n t3 += v * b0;\n t4 += v * b1;\n t5 += v * b2;\n t6 += v * b3;\n t7 += v * b4;\n t8 += v * b5;\n t9 += v * b6;\n t10 += v * b7;\n t11 += v * b8;\n t12 += v * b9;\n t13 += v * b10;\n t14 += v * b11;\n t15 += v * b12;\n t16 += v * b13;\n t17 += v * b14;\n t18 += v * b15;\n v = a[4];\n t4 += v * b0;\n t5 += v * b1;\n t6 += v * b2;\n t7 += v * b3;\n t8 += v * b4;\n t9 += v * b5;\n t10 += v * b6;\n t11 += v * b7;\n t12 += v * b8;\n t13 += v * b9;\n t14 += v * b10;\n t15 += v * b11;\n t16 += v * b12;\n t17 += v * b13;\n t18 += v * b14;\n t19 += v * b15;\n v = a[5];\n t5 += v * b0;\n t6 += v * b1;\n t7 += v * b2;\n t8 += v * b3;\n t9 += v * b4;\n t10 += v * b5;\n t11 += v * b6;\n t12 += v * b7;\n t13 += v * b8;\n t14 += v * b9;\n t15 += v * b10;\n t16 += v * b11;\n t17 += v * b12;\n t18 += v * b13;\n t19 += v * b14;\n t20 += v * b15;\n v = a[6];\n t6 += v * b0;\n t7 += v * b1;\n t8 += v * b2;\n t9 += v * b3;\n t10 += v * b4;\n t11 += v * b5;\n t12 += v * b6;\n t13 += v * b7;\n t14 += v * b8;\n t15 += v * b9;\n t16 += v * b10;\n t17 += v * b11;\n t18 += v * b12;\n t19 += v * b13;\n t20 += v * b14;\n t21 += v * b15;\n v = a[7];\n t7 += v * b0;\n t8 += v * b1;\n t9 += v * b2;\n t10 += v * b3;\n t11 += v * b4;\n t12 += v * b5;\n t13 += v * b6;\n t14 += v * b7;\n t15 += v * b8;\n t16 += v * b9;\n t17 += v * b10;\n t18 += v * b11;\n t19 += v * b12;\n t20 += v * b13;\n t21 += v * b14;\n t22 += v * b15;\n v = a[8];\n t8 += v * b0;\n t9 += v * b1;\n t10 += v * b2;\n t11 += v * b3;\n t12 += v * b4;\n t13 += v * b5;\n t14 += v * b6;\n t15 += v * b7;\n t16 += v * b8;\n t17 += v * b9;\n t18 += v * b10;\n t19 += v * b11;\n t20 += v * b12;\n t21 += v * b13;\n t22 += v * b14;\n t23 += v * b15;\n v = a[9];\n t9 += v * b0;\n t10 += v * b1;\n t11 += v * b2;\n t12 += v * b3;\n t13 += v * b4;\n t14 += v * b5;\n t15 += v * b6;\n t16 += v * b7;\n t17 += v * b8;\n t18 += v * b9;\n t19 += v * b10;\n t20 += v * b11;\n t21 += v * b12;\n t22 += v * b13;\n t23 += v * b14;\n t24 += v * b15;\n v = a[10];\n t10 += v * b0;\n t11 += v * b1;\n t12 += v * b2;\n t13 += v * b3;\n t14 += v * b4;\n t15 += v * b5;\n t16 += v * b6;\n t17 += v * b7;\n t18 += v * b8;\n t19 += v * b9;\n t20 += v * b10;\n t21 += v * b11;\n t22 += v * b12;\n t23 += v * b13;\n t24 += v * b14;\n t25 += v * b15;\n v = a[11];\n t11 += v * b0;\n t12 += v * b1;\n t13 += v * b2;\n t14 += v * b3;\n t15 += v * b4;\n t16 += v * b5;\n t17 += v * b6;\n t18 += v * b7;\n t19 += v * b8;\n t20 += v * b9;\n t21 += v * b10;\n t22 += v * b11;\n t23 += v * b12;\n t24 += v * b13;\n t25 += v * b14;\n t26 += v * b15;\n v = a[12];\n t12 += v * b0;\n t13 += v * b1;\n t14 += v * b2;\n t15 += v * b3;\n t16 += v * b4;\n t17 += v * b5;\n t18 += v * b6;\n t19 += v * b7;\n t20 += v * b8;\n t21 += v * b9;\n t22 += v * b10;\n t23 += v * b11;\n t24 += v * b12;\n t25 += v * b13;\n t26 += v * b14;\n t27 += v * b15;\n v = a[13];\n t13 += v * b0;\n t14 += v * b1;\n t15 += v * b2;\n t16 += v * b3;\n t17 += v * b4;\n t18 += v * b5;\n t19 += v * b6;\n t20 += v * b7;\n t21 += v * b8;\n t22 += v * b9;\n t23 += v * b10;\n t24 += v * b11;\n t25 += v * b12;\n t26 += v * b13;\n t27 += v * b14;\n t28 += v * b15;\n v = a[14];\n t14 += v * b0;\n t15 += v * b1;\n t16 += v * b2;\n t17 += v * b3;\n t18 += v * b4;\n t19 += v * b5;\n t20 += v * b6;\n t21 += v * b7;\n t22 += v * b8;\n t23 += v * b9;\n t24 += v * b10;\n t25 += v * b11;\n t26 += v * b12;\n t27 += v * b13;\n t28 += v * b14;\n t29 += v * b15;\n v = a[15];\n t15 += v * b0;\n t16 += v * b1;\n t17 += v * b2;\n t18 += v * b3;\n t19 += v * b4;\n t20 += v * b5;\n t21 += v * b6;\n t22 += v * b7;\n t23 += v * b8;\n t24 += v * b9;\n t25 += v * b10;\n t26 += v * b11;\n t27 += v * b12;\n t28 += v * b13;\n t29 += v * b14;\n t30 += v * b15;\n\n t0 += 38 * t16;\n t1 += 38 * t17;\n t2 += 38 * t18;\n t3 += 38 * t19;\n t4 += 38 * t20;\n t5 += 38 * t21;\n t6 += 38 * t22;\n t7 += 38 * t23;\n t8 += 38 * t24;\n t9 += 38 * t25;\n t10 += 38 * t26;\n t11 += 38 * t27;\n t12 += 38 * t28;\n t13 += 38 * t29;\n t14 += 38 * t30;\n // t15 left as is\n\n // first car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n // second car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n o[ 0] = t0;\n o[ 1] = t1;\n o[ 2] = t2;\n o[ 3] = t3;\n o[ 4] = t4;\n o[ 5] = t5;\n o[ 6] = t6;\n o[ 7] = t7;\n o[ 8] = t8;\n o[ 9] = t9;\n o[10] = t10;\n o[11] = t11;\n o[12] = t12;\n o[13] = t13;\n o[14] = t14;\n o[15] = t15;\n}\n\nfunction S(o, a) {\n M(o, a, a);\n}\n\nfunction inv25519(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 253; a >= 0; a--) {\n S(c, c);\n if(a !== 2 && a !== 4) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction pow2523(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 250; a >= 0; a--) {\n S(c, c);\n if(a !== 1) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction crypto_scalarmult(q, n, p) {\n var z = new Uint8Array(32);\n var x = new Float64Array(80), r, i;\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf();\n for (i = 0; i < 31; i++) z[i] = n[i];\n z[31]=(n[31]&127)|64;\n z[0]&=248;\n unpack25519(x,p);\n for (i = 0; i < 16; i++) {\n b[i]=x[i];\n d[i]=a[i]=c[i]=0;\n }\n a[0]=d[0]=1;\n for (i=254; i>=0; --i) {\n r=(z[i>>>3]>>>(i&7))&1;\n sel25519(a,b,r);\n sel25519(c,d,r);\n A(e,a,c);\n Z(a,a,c);\n A(c,b,d);\n Z(b,b,d);\n S(d,e);\n S(f,a);\n M(a,c,a);\n M(c,b,e);\n A(e,a,c);\n Z(a,a,c);\n S(b,a);\n Z(c,d,f);\n M(a,c,_121665);\n A(a,a,d);\n M(c,c,a);\n M(a,d,f);\n M(d,b,x);\n S(b,e);\n sel25519(a,b,r);\n sel25519(c,d,r);\n }\n for (i = 0; i < 16; i++) {\n x[i+16]=a[i];\n x[i+32]=c[i];\n x[i+48]=b[i];\n x[i+64]=d[i];\n }\n var x32 = x.subarray(32);\n var x16 = x.subarray(16);\n inv25519(x32,x32);\n M(x16,x16,x32);\n pack25519(q,x16);\n return 0;\n}\n\nfunction crypto_scalarmult_base(q, n) {\n return crypto_scalarmult(q, n, _9);\n}\n\nfunction crypto_box_keypair(y, x) {\n randombytes(x, 32);\n return crypto_scalarmult_base(y, x);\n}\n\nfunction crypto_box_beforenm(k, y, x) {\n var s = new Uint8Array(32);\n crypto_scalarmult(s, x, y);\n return crypto_core_hsalsa20(k, _0, s, sigma);\n}\n\nvar crypto_box_afternm = crypto_secretbox;\nvar crypto_box_open_afternm = crypto_secretbox_open;\n\nfunction crypto_box(c, m, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_afternm(c, m, d, n, k);\n}\n\nfunction crypto_box_open(m, c, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_open_afternm(m, c, d, n, k);\n}\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction crypto_hashblocks_hl(hh, hl, m, n) {\n var wh = new Int32Array(16), wl = new Int32Array(16),\n bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7,\n bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7,\n th, tl, i, j, h, l, a, b, c, d;\n\n var ah0 = hh[0],\n ah1 = hh[1],\n ah2 = hh[2],\n ah3 = hh[3],\n ah4 = hh[4],\n ah5 = hh[5],\n ah6 = hh[6],\n ah7 = hh[7],\n\n al0 = hl[0],\n al1 = hl[1],\n al2 = hl[2],\n al3 = hl[3],\n al4 = hl[4],\n al5 = hl[5],\n al6 = hl[6],\n al7 = hl[7];\n\n var pos = 0;\n while (n >= 128) {\n for (i = 0; i < 16; i++) {\n j = 8 * i + pos;\n wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3];\n wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7];\n }\n for (i = 0; i < 80; i++) {\n bh0 = ah0;\n bh1 = ah1;\n bh2 = ah2;\n bh3 = ah3;\n bh4 = ah4;\n bh5 = ah5;\n bh6 = ah6;\n bh7 = ah7;\n\n bl0 = al0;\n bl1 = al1;\n bl2 = al2;\n bl3 = al3;\n bl4 = al4;\n bl5 = al5;\n bl6 = al6;\n bl7 = al7;\n\n // add\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma1\n h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32))));\n l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Ch\n h = (ah4 & ah5) ^ (~ah4 & ah6);\n l = (al4 & al5) ^ (~al4 & al6);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // K\n h = K[i*2];\n l = K[i*2+1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // w\n h = wh[i%16];\n l = wl[i%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n th = c & 0xffff | d << 16;\n tl = a & 0xffff | b << 16;\n\n // add\n h = th;\n l = tl;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma0\n h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32))));\n l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Maj\n h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2);\n l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh7 = (c & 0xffff) | (d << 16);\n bl7 = (a & 0xffff) | (b << 16);\n\n // add\n h = bh3;\n l = bl3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = th;\n l = tl;\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh3 = (c & 0xffff) | (d << 16);\n bl3 = (a & 0xffff) | (b << 16);\n\n ah1 = bh0;\n ah2 = bh1;\n ah3 = bh2;\n ah4 = bh3;\n ah5 = bh4;\n ah6 = bh5;\n ah7 = bh6;\n ah0 = bh7;\n\n al1 = bl0;\n al2 = bl1;\n al3 = bl2;\n al4 = bl3;\n al5 = bl4;\n al6 = bl5;\n al7 = bl6;\n al0 = bl7;\n\n if (i%16 === 15) {\n for (j = 0; j < 16; j++) {\n // add\n h = wh[j];\n l = wl[j];\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = wh[(j+9)%16];\n l = wl[(j+9)%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma0\n th = wh[(j+1)%16];\n tl = wl[(j+1)%16];\n h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7);\n l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma1\n th = wh[(j+14)%16];\n tl = wl[(j+14)%16];\n h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6);\n l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n wh[j] = (c & 0xffff) | (d << 16);\n wl[j] = (a & 0xffff) | (b << 16);\n }\n }\n }\n\n // add\n h = ah0;\n l = al0;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[0];\n l = hl[0];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[0] = ah0 = (c & 0xffff) | (d << 16);\n hl[0] = al0 = (a & 0xffff) | (b << 16);\n\n h = ah1;\n l = al1;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[1];\n l = hl[1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[1] = ah1 = (c & 0xffff) | (d << 16);\n hl[1] = al1 = (a & 0xffff) | (b << 16);\n\n h = ah2;\n l = al2;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[2];\n l = hl[2];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[2] = ah2 = (c & 0xffff) | (d << 16);\n hl[2] = al2 = (a & 0xffff) | (b << 16);\n\n h = ah3;\n l = al3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[3];\n l = hl[3];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[3] = ah3 = (c & 0xffff) | (d << 16);\n hl[3] = al3 = (a & 0xffff) | (b << 16);\n\n h = ah4;\n l = al4;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[4];\n l = hl[4];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[4] = ah4 = (c & 0xffff) | (d << 16);\n hl[4] = al4 = (a & 0xffff) | (b << 16);\n\n h = ah5;\n l = al5;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[5];\n l = hl[5];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[5] = ah5 = (c & 0xffff) | (d << 16);\n hl[5] = al5 = (a & 0xffff) | (b << 16);\n\n h = ah6;\n l = al6;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[6];\n l = hl[6];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[6] = ah6 = (c & 0xffff) | (d << 16);\n hl[6] = al6 = (a & 0xffff) | (b << 16);\n\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[7];\n l = hl[7];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[7] = ah7 = (c & 0xffff) | (d << 16);\n hl[7] = al7 = (a & 0xffff) | (b << 16);\n\n pos += 128;\n n -= 128;\n }\n\n return n;\n}\n\nfunction crypto_hash(out, m, n) {\n var hh = new Int32Array(8),\n hl = new Int32Array(8),\n x = new Uint8Array(256),\n i, b = n;\n\n hh[0] = 0x6a09e667;\n hh[1] = 0xbb67ae85;\n hh[2] = 0x3c6ef372;\n hh[3] = 0xa54ff53a;\n hh[4] = 0x510e527f;\n hh[5] = 0x9b05688c;\n hh[6] = 0x1f83d9ab;\n hh[7] = 0x5be0cd19;\n\n hl[0] = 0xf3bcc908;\n hl[1] = 0x84caa73b;\n hl[2] = 0xfe94f82b;\n hl[3] = 0x5f1d36f1;\n hl[4] = 0xade682d1;\n hl[5] = 0x2b3e6c1f;\n hl[6] = 0xfb41bd6b;\n hl[7] = 0x137e2179;\n\n crypto_hashblocks_hl(hh, hl, m, n);\n n %= 128;\n\n for (i = 0; i < n; i++) x[i] = m[b-n+i];\n x[n] = 128;\n\n n = 256-128*(n<112?1:0);\n x[n-9] = 0;\n ts64(x, n-8, (b / 0x20000000) | 0, b << 3);\n crypto_hashblocks_hl(hh, hl, x, n);\n\n for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]);\n\n return 0;\n}\n\nfunction add(p, q) {\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf(),\n g = gf(), h = gf(), t = gf();\n\n Z(a, p[1], p[0]);\n Z(t, q[1], q[0]);\n M(a, a, t);\n A(b, p[0], p[1]);\n A(t, q[0], q[1]);\n M(b, b, t);\n M(c, p[3], q[3]);\n M(c, c, D2);\n M(d, p[2], q[2]);\n A(d, d, d);\n Z(e, b, a);\n Z(f, d, c);\n A(g, d, c);\n A(h, b, a);\n\n M(p[0], e, f);\n M(p[1], h, g);\n M(p[2], g, f);\n M(p[3], e, h);\n}\n\nfunction cswap(p, q, b) {\n var i;\n for (i = 0; i < 4; i++) {\n sel25519(p[i], q[i], b);\n }\n}\n\nfunction pack(r, p) {\n var tx = gf(), ty = gf(), zi = gf();\n inv25519(zi, p[2]);\n M(tx, p[0], zi);\n M(ty, p[1], zi);\n pack25519(r, ty);\n r[31] ^= par25519(tx) << 7;\n}\n\nfunction scalarmult(p, q, s) {\n var b, i;\n set25519(p[0], gf0);\n set25519(p[1], gf1);\n set25519(p[2], gf1);\n set25519(p[3], gf0);\n for (i = 255; i >= 0; --i) {\n b = (s[(i/8)|0] >> (i&7)) & 1;\n cswap(p, q, b);\n add(q, p);\n add(p, p);\n cswap(p, q, b);\n }\n}\n\nfunction scalarbase(p, s) {\n var q = [gf(), gf(), gf(), gf()];\n set25519(q[0], X);\n set25519(q[1], Y);\n set25519(q[2], gf1);\n M(q[3], X, Y);\n scalarmult(p, q, s);\n}\n\nfunction crypto_sign_keypair(pk, sk, seeded) {\n var d = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()];\n var i;\n\n if (!seeded) randombytes(sk, 32);\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n scalarbase(p, d);\n pack(pk, p);\n\n for (i = 0; i < 32; i++) sk[i+32] = pk[i];\n return 0;\n}\n\nvar L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]);\n\nfunction modL(r, x) {\n var carry, i, j, k;\n for (i = 63; i >= 32; --i) {\n carry = 0;\n for (j = i - 32, k = i - 12; j < k; ++j) {\n x[j] += carry - 16 * x[i] * L[j - (i - 32)];\n carry = Math.floor((x[j] + 128) / 256);\n x[j] -= carry * 256;\n }\n x[j] += carry;\n x[i] = 0;\n }\n carry = 0;\n for (j = 0; j < 32; j++) {\n x[j] += carry - (x[31] >> 4) * L[j];\n carry = x[j] >> 8;\n x[j] &= 255;\n }\n for (j = 0; j < 32; j++) x[j] -= carry * L[j];\n for (i = 0; i < 32; i++) {\n x[i+1] += x[i] >> 8;\n r[i] = x[i] & 255;\n }\n}\n\nfunction reduce(r) {\n var x = new Float64Array(64), i;\n for (i = 0; i < 64; i++) x[i] = r[i];\n for (i = 0; i < 64; i++) r[i] = 0;\n modL(r, x);\n}\n\n// Note: difference from C - smlen returned, not passed as argument.\nfunction crypto_sign(sm, m, n, sk) {\n var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64);\n var i, j, x = new Float64Array(64);\n var p = [gf(), gf(), gf(), gf()];\n\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n var smlen = n + 64;\n for (i = 0; i < n; i++) sm[64 + i] = m[i];\n for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];\n\n crypto_hash(r, sm.subarray(32), n+32);\n reduce(r);\n scalarbase(p, r);\n pack(sm, p);\n\n for (i = 32; i < 64; i++) sm[i] = sk[i];\n crypto_hash(h, sm, n + 64);\n reduce(h);\n\n for (i = 0; i < 64; i++) x[i] = 0;\n for (i = 0; i < 32; i++) x[i] = r[i];\n for (i = 0; i < 32; i++) {\n for (j = 0; j < 32; j++) {\n x[i+j] += h[i] * d[j];\n }\n }\n\n modL(sm.subarray(32), x);\n return smlen;\n}\n\nfunction unpackneg(r, p) {\n var t = gf(), chk = gf(), num = gf(),\n den = gf(), den2 = gf(), den4 = gf(),\n den6 = gf();\n\n set25519(r[2], gf1);\n unpack25519(r[1], p);\n S(num, r[1]);\n M(den, num, D);\n Z(num, num, r[2]);\n A(den, r[2], den);\n\n S(den2, den);\n S(den4, den2);\n M(den6, den4, den2);\n M(t, den6, num);\n M(t, t, den);\n\n pow2523(t, t);\n M(t, t, num);\n M(t, t, den);\n M(t, t, den);\n M(r[0], t, den);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) M(r[0], r[0], I);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) return -1;\n\n if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]);\n\n M(r[3], r[0], r[1]);\n return 0;\n}\n\nfunction crypto_sign_open(m, sm, n, pk) {\n var i;\n var t = new Uint8Array(32), h = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()],\n q = [gf(), gf(), gf(), gf()];\n\n if (n < 64) return -1;\n\n if (unpackneg(q, pk)) return -1;\n\n for (i = 0; i < n; i++) m[i] = sm[i];\n for (i = 0; i < 32; i++) m[i+32] = pk[i];\n crypto_hash(h, m, n);\n reduce(h);\n scalarmult(p, q, h);\n\n scalarbase(q, sm.subarray(32));\n add(p, q);\n pack(t, p);\n\n n -= 64;\n if (crypto_verify_32(sm, 0, t, 0)) {\n for (i = 0; i < n; i++) m[i] = 0;\n return -1;\n }\n\n for (i = 0; i < n; i++) m[i] = sm[i + 64];\n return n;\n}\n\nvar crypto_secretbox_KEYBYTES = 32,\n crypto_secretbox_NONCEBYTES = 24,\n crypto_secretbox_ZEROBYTES = 32,\n crypto_secretbox_BOXZEROBYTES = 16,\n crypto_scalarmult_BYTES = 32,\n crypto_scalarmult_SCALARBYTES = 32,\n crypto_box_PUBLICKEYBYTES = 32,\n crypto_box_SECRETKEYBYTES = 32,\n crypto_box_BEFORENMBYTES = 32,\n crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES,\n crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES,\n crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES,\n crypto_sign_BYTES = 64,\n crypto_sign_PUBLICKEYBYTES = 32,\n crypto_sign_SECRETKEYBYTES = 64,\n crypto_sign_SEEDBYTES = 32,\n crypto_hash_BYTES = 64;\n\nnacl.lowlevel = {\n crypto_core_hsalsa20: crypto_core_hsalsa20,\n crypto_stream_xor: crypto_stream_xor,\n crypto_stream: crypto_stream,\n crypto_stream_salsa20_xor: crypto_stream_salsa20_xor,\n crypto_stream_salsa20: crypto_stream_salsa20,\n crypto_onetimeauth: crypto_onetimeauth,\n crypto_onetimeauth_verify: crypto_onetimeauth_verify,\n crypto_verify_16: crypto_verify_16,\n crypto_verify_32: crypto_verify_32,\n crypto_secretbox: crypto_secretbox,\n crypto_secretbox_open: crypto_secretbox_open,\n crypto_scalarmult: crypto_scalarmult,\n crypto_scalarmult_base: crypto_scalarmult_base,\n crypto_box_beforenm: crypto_box_beforenm,\n crypto_box_afternm: crypto_box_afternm,\n crypto_box: crypto_box,\n crypto_box_open: crypto_box_open,\n crypto_box_keypair: crypto_box_keypair,\n crypto_hash: crypto_hash,\n crypto_sign: crypto_sign,\n crypto_sign_keypair: crypto_sign_keypair,\n crypto_sign_open: crypto_sign_open,\n\n crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES,\n crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES,\n crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES,\n crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES,\n crypto_scalarmult_BYTES: crypto_scalarmult_BYTES,\n crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES,\n crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES,\n crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES,\n crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES,\n crypto_box_NONCEBYTES: crypto_box_NONCEBYTES,\n crypto_box_ZEROBYTES: crypto_box_ZEROBYTES,\n crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES,\n crypto_sign_BYTES: crypto_sign_BYTES,\n crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES,\n crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES,\n crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES,\n crypto_hash_BYTES: crypto_hash_BYTES,\n\n gf: gf,\n D: D,\n L: L,\n pack25519: pack25519,\n unpack25519: unpack25519,\n M: M,\n A: A,\n S: S,\n Z: Z,\n pow2523: pow2523,\n add: add,\n set25519: set25519,\n modL: modL,\n scalarmult: scalarmult,\n scalarbase: scalarbase,\n};\n\n/* High-level API */\n\nfunction checkLengths(k, n) {\n if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size');\n if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size');\n}\n\nfunction checkBoxLengths(pk, sk) {\n if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size');\n if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size');\n}\n\nfunction checkArrayTypes() {\n for (var i = 0; i < arguments.length; i++) {\n if (!(arguments[i] instanceof Uint8Array))\n throw new TypeError('unexpected type, use Uint8Array');\n }\n}\n\nfunction cleanup(arr) {\n for (var i = 0; i < arr.length; i++) arr[i] = 0;\n}\n\nnacl.randomBytes = function(n) {\n var b = new Uint8Array(n);\n randombytes(b, n);\n return b;\n};\n\nnacl.secretbox = function(msg, nonce, key) {\n checkArrayTypes(msg, nonce, key);\n checkLengths(key, nonce);\n var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);\n var c = new Uint8Array(m.length);\n for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i];\n crypto_secretbox(c, m, m.length, nonce, key);\n return c.subarray(crypto_secretbox_BOXZEROBYTES);\n};\n\nnacl.secretbox.open = function(box, nonce, key) {\n checkArrayTypes(box, nonce, key);\n checkLengths(key, nonce);\n var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);\n var m = new Uint8Array(c.length);\n for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i];\n if (c.length < 32) return null;\n if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return null;\n return m.subarray(crypto_secretbox_ZEROBYTES);\n};\n\nnacl.secretbox.keyLength = crypto_secretbox_KEYBYTES;\nnacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES;\nnacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES;\n\nnacl.scalarMult = function(n, p) {\n checkArrayTypes(n, p);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult(q, n, p);\n return q;\n};\n\nnacl.scalarMult.base = function(n) {\n checkArrayTypes(n);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult_base(q, n);\n return q;\n};\n\nnacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES;\nnacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES;\n\nnacl.box = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox(msg, nonce, k);\n};\n\nnacl.box.before = function(publicKey, secretKey) {\n checkArrayTypes(publicKey, secretKey);\n checkBoxLengths(publicKey, secretKey);\n var k = new Uint8Array(crypto_box_BEFORENMBYTES);\n crypto_box_beforenm(k, publicKey, secretKey);\n return k;\n};\n\nnacl.box.after = nacl.secretbox;\n\nnacl.box.open = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox.open(msg, nonce, k);\n};\n\nnacl.box.open.after = nacl.secretbox.open;\n\nnacl.box.keyPair = function() {\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_box_SECRETKEYBYTES);\n crypto_box_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.box.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_box_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n crypto_scalarmult_base(pk, secretKey);\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES;\nnacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES;\nnacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES;\nnacl.box.nonceLength = crypto_box_NONCEBYTES;\nnacl.box.overheadLength = nacl.secretbox.overheadLength;\n\nnacl.sign = function(msg, secretKey) {\n checkArrayTypes(msg, secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length);\n crypto_sign(signedMsg, msg, msg.length, secretKey);\n return signedMsg;\n};\n\nnacl.sign.open = function(signedMsg, publicKey) {\n checkArrayTypes(signedMsg, publicKey);\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var tmp = new Uint8Array(signedMsg.length);\n var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);\n if (mlen < 0) return null;\n var m = new Uint8Array(mlen);\n for (var i = 0; i < m.length; i++) m[i] = tmp[i];\n return m;\n};\n\nnacl.sign.detached = function(msg, secretKey) {\n var signedMsg = nacl.sign(msg, secretKey);\n var sig = new Uint8Array(crypto_sign_BYTES);\n for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];\n return sig;\n};\n\nnacl.sign.detached.verify = function(msg, sig, publicKey) {\n checkArrayTypes(msg, sig, publicKey);\n if (sig.length !== crypto_sign_BYTES)\n throw new Error('bad signature size');\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var sm = new Uint8Array(crypto_sign_BYTES + msg.length);\n var m = new Uint8Array(crypto_sign_BYTES + msg.length);\n var i;\n for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];\n for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i];\n return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);\n};\n\nnacl.sign.keyPair = function() {\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n crypto_sign_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i];\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.sign.keyPair.fromSeed = function(seed) {\n checkArrayTypes(seed);\n if (seed.length !== crypto_sign_SEEDBYTES)\n throw new Error('bad seed size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n for (var i = 0; i < 32; i++) sk[i] = seed[i];\n crypto_sign_keypair(pk, sk, true);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES;\nnacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES;\nnacl.sign.seedLength = crypto_sign_SEEDBYTES;\nnacl.sign.signatureLength = crypto_sign_BYTES;\n\nnacl.hash = function(msg) {\n checkArrayTypes(msg);\n var h = new Uint8Array(crypto_hash_BYTES);\n crypto_hash(h, msg, msg.length);\n return h;\n};\n\nnacl.hash.hashLength = crypto_hash_BYTES;\n\nnacl.verify = function(x, y) {\n checkArrayTypes(x, y);\n // Zero length arguments are considered not equal.\n if (x.length === 0 || y.length === 0) return false;\n if (x.length !== y.length) return false;\n return (vn(x, 0, y, 0, x.length) === 0) ? true : false;\n};\n\nnacl.setPRNG = function(fn) {\n randombytes = fn;\n};\n\n(function() {\n // Initialize PRNG if environment provides CSPRNG.\n // If not, methods calling randombytes will throw.\n var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null;\n if (crypto && crypto.getRandomValues) {\n // Browsers.\n var QUOTA = 65536;\n nacl.setPRNG(function(x, n) {\n var i, v = new Uint8Array(n);\n for (i = 0; i < n; i += QUOTA) {\n crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));\n }\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n } else if (typeof require !== 'undefined') {\n // Node.js.\n crypto = require('crypto');\n if (crypto && crypto.randomBytes) {\n nacl.setPRNG(function(x, n) {\n var i, v = crypto.randomBytes(n);\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n }\n }\n})();\n\n})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {}));\n","'use strict'\n// base-x encoding / decoding\n// Copyright (c) 2018 base-x contributors\n// Copyright (c) 2014-2018 The Bitcoin Core developers (base58.cpp)\n// Distributed under the MIT software license, see the accompanying\n// file LICENSE or http://www.opensource.org/licenses/mit-license.php.\nfunction base (ALPHABET) {\n if (ALPHABET.length >= 255) { throw new TypeError('Alphabet too long') }\n var BASE_MAP = new Uint8Array(256)\n for (var j = 0; j < BASE_MAP.length; j++) {\n BASE_MAP[j] = 255\n }\n for (var i = 0; i < ALPHABET.length; i++) {\n var x = ALPHABET.charAt(i)\n var xc = x.charCodeAt(0)\n if (BASE_MAP[xc] !== 255) { throw new TypeError(x + ' is ambiguous') }\n BASE_MAP[xc] = i\n }\n var BASE = ALPHABET.length\n var LEADER = ALPHABET.charAt(0)\n var FACTOR = Math.log(BASE) / Math.log(256) // log(BASE) / log(256), rounded up\n var iFACTOR = Math.log(256) / Math.log(BASE) // log(256) / log(BASE), rounded up\n function encode (source) {\n if (source instanceof Uint8Array) {\n } else if (ArrayBuffer.isView(source)) {\n source = new Uint8Array(source.buffer, source.byteOffset, source.byteLength)\n } else if (Array.isArray(source)) {\n source = Uint8Array.from(source)\n }\n if (!(source instanceof Uint8Array)) { throw new TypeError('Expected Uint8Array') }\n if (source.length === 0) { return '' }\n // Skip & count leading zeroes.\n var zeroes = 0\n var length = 0\n var pbegin = 0\n var pend = source.length\n while (pbegin !== pend && source[pbegin] === 0) {\n pbegin++\n zeroes++\n }\n // Allocate enough space in big-endian base58 representation.\n var size = ((pend - pbegin) * iFACTOR + 1) >>> 0\n var b58 = new Uint8Array(size)\n // Process the bytes.\n while (pbegin !== pend) {\n var carry = source[pbegin]\n // Apply \"b58 = b58 * 256 + ch\".\n var i = 0\n for (var it1 = size - 1; (carry !== 0 || i < length) && (it1 !== -1); it1--, i++) {\n carry += (256 * b58[it1]) >>> 0\n b58[it1] = (carry % BASE) >>> 0\n carry = (carry / BASE) >>> 0\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i\n pbegin++\n }\n // Skip leading zeroes in base58 result.\n var it2 = size - length\n while (it2 !== size && b58[it2] === 0) {\n it2++\n }\n // Translate the result into a string.\n var str = LEADER.repeat(zeroes)\n for (; it2 < size; ++it2) { str += ALPHABET.charAt(b58[it2]) }\n return str\n }\n function decodeUnsafe (source) {\n if (typeof source !== 'string') { throw new TypeError('Expected String') }\n if (source.length === 0) { return new Uint8Array() }\n var psz = 0\n // Skip and count leading '1's.\n var zeroes = 0\n var length = 0\n while (source[psz] === LEADER) {\n zeroes++\n psz++\n }\n // Allocate enough space in big-endian base256 representation.\n var size = (((source.length - psz) * FACTOR) + 1) >>> 0 // log(58) / log(256), rounded up.\n var b256 = new Uint8Array(size)\n // Process the characters.\n while (source[psz]) {\n // Find code of next character\n var charCode = source.charCodeAt(psz)\n // Base map can not be indexed using char code\n if (charCode > 255) { return }\n // Decode character\n var carry = BASE_MAP[charCode]\n // Invalid character\n if (carry === 255) { return }\n var i = 0\n for (var it3 = size - 1; (carry !== 0 || i < length) && (it3 !== -1); it3--, i++) {\n carry += (BASE * b256[it3]) >>> 0\n b256[it3] = (carry % 256) >>> 0\n carry = (carry / 256) >>> 0\n }\n if (carry !== 0) { throw new Error('Non-zero carry') }\n length = i\n psz++\n }\n // Skip leading zeroes in b256.\n var it4 = size - length\n while (it4 !== size && b256[it4] === 0) {\n it4++\n }\n var vch = new Uint8Array(zeroes + (size - it4))\n var j = zeroes\n while (it4 !== size) {\n vch[j++] = b256[it4++]\n }\n return vch\n }\n function decode (string) {\n var buffer = decodeUnsafe(string)\n if (buffer) { return buffer }\n throw new Error('Non-base' + BASE + ' character')\n }\n return {\n encode: encode,\n decodeUnsafe: decodeUnsafe,\n decode: decode\n }\n}\nmodule.exports = base\n","const basex = require('base-x')\nconst ALPHABET = '123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz'\n\nmodule.exports = basex(ALPHABET)\n","// Contract addresses for Zubari ecosystem\nexport interface ContractAddresses {\n registry: string;\n nft: string;\n marketplace: string;\n tips: string;\n subscriptions: string;\n payouts: string;\n entryPoint: string;\n paymaster: string;\n accountFactory: string;\n usdt: string;\n weth: string;\n}\n\n// Placeholder addresses - will be updated after deployment\nconst ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';\n\nexport const ZUBARI_CONTRACTS: Record<'testnet' | 'mainnet', ContractAddresses> = {\n testnet: {\n // Ethereum Sepolia (11155111) - Deployed 2024-12-09\n registry: '0xEdDf443D48832f23D4A0bED4C4c5eF200B38A7d3',\n nft: '0xdc37e25650D685e4c38124aC314477Ea5f508a9e',\n marketplace: ZERO_ADDRESS, // Not yet deployed\n tips: '0xFDc353edC63Cd3D4bba35bB43861369516a9Dc85',\n subscriptions: '0x8C05F8aD2F295fB7f3596043a7c37C98A5F7fAB8',\n payouts: '0x804Fe503936E8b8d3D5Dbb62AF4fB6Fe7265Fb2c',\n entryPoint: '0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789',\n paymaster: ZERO_ADDRESS, // Not yet deployed\n accountFactory: ZERO_ADDRESS, // Not yet deployed\n usdt: '0xaA8E23Fb1079EA71e0a56F48a2aA51851D8433D0', // USDT on Sepolia\n weth: '0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14',\n },\n mainnet: {\n // Ethereum Mainnet (1)\n registry: ZERO_ADDRESS,\n nft: ZERO_ADDRESS,\n marketplace: ZERO_ADDRESS,\n tips: ZERO_ADDRESS,\n subscriptions: ZERO_ADDRESS,\n payouts: ZERO_ADDRESS,\n entryPoint: '0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789',\n paymaster: ZERO_ADDRESS,\n accountFactory: ZERO_ADDRESS,\n usdt: '0xdAC17F958D2ee523a2206206994597C13D831ec7', // USDT on Ethereum\n weth: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',\n },\n};\n\n// Platform configuration\nexport const PLATFORM_CONFIG = {\n // Platform fee in basis points (300 = 3%)\n tipFeeBps: 300,\n // Maximum royalty in basis points (1000 = 10%)\n maxRoyaltyBps: 1000,\n // Default slippage tolerance for swaps (50 = 0.5%)\n defaultSlippageBps: 50,\n // Voucher validity in seconds (30 days)\n voucherValiditySecs: 30 * 24 * 60 * 60,\n // Swap deadline in seconds (30 minutes)\n swapDeadlineSecs: 30 * 60,\n} as const;\n\n// EIP-712 Domain for lazy minting\nexport const NFT_VOUCHER_DOMAIN = {\n name: 'ZubariNFT',\n version: '1',\n} as const;\n\nexport const NFT_VOUCHER_TYPES = {\n NFTVoucher: [\n { name: 'tokenId', type: 'bytes32' },\n { name: 'uri', type: 'string' },\n { name: 'creator', type: 'address' },\n { name: 'royaltyBps', type: 'uint256' },\n { name: 'deadline', type: 'uint256' },\n ],\n} as const;\n\nexport function getContractAddresses(network: 'testnet' | 'mainnet'): ContractAddresses {\n return ZUBARI_CONTRACTS[network];\n}\n","import type { SwapQuote, TxResult } from '../types';\nimport { PLATFORM_CONFIG, getContractAddresses } from '../config/contracts';\n\n/**\n * SwapService - DEX integration via Velora\n *\n * Handles token swaps with slippage protection,\n * quote fetching, and earnings conversion.\n */\nexport class SwapService {\n private readonly _chainId: number;\n private readonly isTestnet: boolean;\n\n constructor(chainId: number, isTestnet: boolean = false) {\n this._chainId = chainId;\n this.isTestnet = isTestnet;\n }\n\n /**\n * Get a swap quote\n */\n async getQuote(\n tokenIn: string,\n tokenOut: string,\n amountIn: bigint\n ): Promise<SwapQuote> {\n if (amountIn <= 0n) {\n throw new Error('Amount must be greater than 0');\n }\n\n // Placeholder - will use Velora DEX\n return {\n tokenIn,\n tokenOut,\n amountIn,\n amountOut: BigInt(0),\n priceImpact: 0,\n route: [tokenIn, tokenOut],\n estimatedGas: BigInt(0),\n };\n }\n\n /**\n * Execute a swap with slippage protection\n */\n async executeSwap(\n quote: SwapQuote,\n slippageToleranceBps: number = PLATFORM_CONFIG.defaultSlippageBps\n ): Promise<TxResult> {\n // Calculate minimum output with slippage\n const _minAmountOut =\n quote.amountOut - (quote.amountOut * BigInt(slippageToleranceBps)) / BigInt(10000);\n\n // Calculate deadline\n const _deadline = Math.floor(Date.now() / 1000) + PLATFORM_CONFIG.swapDeadlineSecs;\n\n // Warn if price impact is high\n if (quote.priceImpact > 5) {\n console.warn(`High price impact: ${quote.priceImpact}%`);\n }\n\n // Placeholder - will call swap contract\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Convert earnings to USDT, keeping some ETH for gas\n */\n async convertEarningsToStable(\n ethBalance: bigint,\n reserveForGas: bigint = BigInt('10000000000000000') // 0.01 ETH\n ): Promise<TxResult> {\n const amountToSwap = ethBalance - reserveForGas;\n\n if (amountToSwap <= 0n) {\n throw new Error('Insufficient balance after gas reserve');\n }\n\n // Get quote for ETH -> USDT\n const contracts = getContractAddresses(this.isTestnet ? 'testnet' : 'mainnet');\n const quote = await this.getQuote(\n '0x0000000000000000000000000000000000000000', // ETH\n contracts.usdt, // USDT on Ethereum\n amountToSwap\n );\n\n return this.executeSwap(quote);\n }\n\n /**\n * Check if a swap route exists\n */\n async hasRoute(tokenIn: string, tokenOut: string): Promise<boolean> {\n try {\n const quote = await this.getQuote(tokenIn, tokenOut, BigInt(1));\n return quote.amountOut > 0n;\n } catch {\n return false;\n }\n }\n\n /**\n * Get supported tokens for swapping\n */\n async getSupportedTokens(): Promise<string[]> {\n // Placeholder - will query DEX\n return [];\n }\n}\n","/**\n * WDK API Client\n *\n * Client for calling the backend WDK endpoints to derive addresses\n * using Tether WDK (which runs server-side in Node.js).\n */\n\nimport type { NetworkType } from '../types';\n\nexport interface WdkApiConfig {\n baseUrl: string;\n timeout?: number;\n}\n\nexport interface DeriveAddressResponse {\n success: boolean;\n address?: string;\n chain?: string;\n path?: string;\n network?: string;\n error?: string;\n}\n\nexport interface DeriveAllAddressesResponse {\n success: boolean;\n addresses?: {\n ethereum: string | null;\n bitcoin: string | null;\n ton: string | null;\n tron: string | null;\n solana: string | null;\n spark: string | null;\n };\n network?: string;\n error?: string;\n}\n\nexport interface ValidateSeedResponse {\n success: boolean;\n isValid?: boolean;\n wordCount?: number;\n error?: string;\n}\n\nexport interface GenerateSeedResponse {\n success: boolean;\n seed?: string;\n wordCount?: number;\n error?: string;\n}\n\n/**\n * WDK API Client for server-side Tether WDK integration\n */\nexport class WdkApiClient {\n private config: Required<WdkApiConfig>;\n\n constructor(config: WdkApiConfig) {\n this.config = {\n baseUrl: config.baseUrl,\n timeout: config.timeout || 30000,\n };\n }\n\n /**\n * Generate a new BIP-39 seed phrase using Tether WDK\n */\n async generateSeed(): Promise<GenerateSeedResponse> {\n try {\n const response = await fetch(`${this.config.baseUrl}/api/wallets/wdk/generate-seed`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n return await response.json();\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to generate seed',\n };\n }\n }\n\n /**\n * Validate a BIP-39 seed phrase\n */\n async validateSeed(seed: string): Promise<ValidateSeedResponse> {\n try {\n const response = await fetch(`${this.config.baseUrl}/api/wallets/wdk/validate-seed`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ seed }),\n });\n\n return await response.json();\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to validate seed',\n };\n }\n }\n\n /**\n * Derive address for a specific chain using Tether WDK\n */\n async deriveAddress(\n seed: string,\n chain: NetworkType,\n network: 'mainnet' | 'testnet' = 'testnet'\n ): Promise<DeriveAddressResponse> {\n try {\n const response = await fetch(`${this.config.baseUrl}/api/wallets/wdk/derive-address`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ seed, chain, network }),\n });\n\n return await response.json();\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to derive address',\n };\n }\n }\n\n /**\n * Derive addresses for all chains using Tether WDK\n */\n async deriveAllAddresses(\n seed: string,\n network: 'mainnet' | 'testnet' = 'testnet'\n ): Promise<DeriveAllAddressesResponse> {\n try {\n const response = await fetch(`${this.config.baseUrl}/api/wallets/wdk/derive-all`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ seed, network }),\n });\n\n return await response.json();\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to derive addresses',\n };\n }\n }\n}\n\n// Default API URL (can be overridden)\nconst DEFAULT_API_URL = process.env.NEXT_PUBLIC_API_URL || 'http://localhost:3001';\n\n// Singleton instance\nlet wdkApiClient: WdkApiClient | null = null;\n\n/**\n * Get or create the WDK API client instance\n */\nexport function getWdkApiClient(baseUrl?: string): WdkApiClient {\n if (!wdkApiClient || (baseUrl && wdkApiClient['config'].baseUrl !== baseUrl)) {\n wdkApiClient = new WdkApiClient({\n baseUrl: baseUrl || DEFAULT_API_URL,\n });\n }\n return wdkApiClient;\n}\n","/**\n * Browser-Compatible Address Derivation\n *\n * This module provides multi-chain address derivation that works in browser environments.\n * It uses the @scure libraries which are pure JS and don't require Node.js polyfills.\n *\n * Supported chains:\n * - Ethereum: ethers.js (BIP-44)\n * - Bitcoin: @scure/bip32 + @scure/base (BIP-84 native SegWit)\n * - Solana: ed25519-hd-key + tweetnacl (SLIP-0010)\n * - TON: ed25519 derivation with TON address format\n * - TRON: secp256k1 + base58check\n * - Spark: Bitcoin-based with custom derivation\n */\n\nimport { HDNodeWallet } from 'ethers';\nimport { mnemonicToSeedSync, validateMnemonic, generateMnemonic } from '@scure/bip39';\nimport { wordlist } from '@scure/bip39/wordlists/english';\nimport { HDKey } from '@scure/bip32';\nimport { bech32, base58check } from '@scure/base';\nimport { sha256 } from '@noble/hashes/sha256';\nimport { ripemd160 } from '@noble/hashes/ripemd160';\nimport type { NetworkType } from '../types';\n\nexport interface ChainAddress {\n chain: NetworkType;\n address: string;\n path: string;\n}\n\nexport interface BrowserMultiChainAddresses {\n ethereum: string | null;\n bitcoin: string | null;\n ton: string | null;\n tron: string | null;\n solana: string | null;\n spark: string | null;\n}\n\n// BIP-44/84 derivation paths\nconst DERIVATION_PATHS = {\n ethereum: \"m/44'/60'/0'/0/0\",\n bitcoin_mainnet: \"m/84'/0'/0'/0/0\",\n bitcoin_testnet: \"m/84'/1'/0'/0/0\",\n ton: \"m/44'/607'/0'/0'/0'\",\n tron: \"m/44'/195'/0'/0/0\",\n solana: \"m/44'/501'/0'/0'\",\n spark: \"m/44'/998'/0'/0/0\",\n};\n\n/**\n * Derive Ethereum address from seed phrase\n */\nexport function deriveEthereumAddress(seed: string): string {\n const hdNode = HDNodeWallet.fromPhrase(seed, undefined, DERIVATION_PATHS.ethereum);\n return hdNode.address;\n}\n\n/**\n * Derive Bitcoin address from seed phrase (BIP-84 native SegWit)\n * Uses @scure libraries for browser compatibility\n */\nexport function deriveBitcoinAddress(\n seed: string,\n network: 'mainnet' | 'testnet' = 'testnet'\n): string {\n try {\n // Convert mnemonic to seed using @scure/bip39\n const seedBytes = mnemonicToSeedSync(seed);\n\n // Derive HD key using @scure/bip32\n const hdKey = HDKey.fromMasterSeed(seedBytes);\n const path = network === 'testnet' ? DERIVATION_PATHS.bitcoin_testnet : DERIVATION_PATHS.bitcoin_mainnet;\n const child = hdKey.derive(path);\n\n if (!child.publicKey) {\n throw new Error('Failed to derive public key');\n }\n\n // Create P2WPKH address (native SegWit)\n // 1. Hash160 = RIPEMD160(SHA256(publicKey))\n const pubKeyHash = ripemd160(sha256(child.publicKey));\n\n // 2. Create witness program: version (0x00) + hash160\n // For bech32, we encode: witness version (0) + pubKeyHash as 5-bit words\n const witnessVersion = 0;\n const words = bech32.toWords(pubKeyHash);\n words.unshift(witnessVersion); // Prepend witness version\n\n // 3. Encode with bech32\n const hrp = network === 'testnet' ? 'tb' : 'bc';\n const address = bech32.encode(hrp, words);\n\n return address;\n } catch (error) {\n console.error('Bitcoin address derivation failed:', error);\n throw error;\n }\n}\n\n/**\n * Derive Solana address from seed phrase using SLIP-0010 (ed25519)\n */\nexport async function deriveSolanaAddress(seed: string): Promise<string> {\n try {\n const [ed25519, nacl, bs58] = await Promise.all([\n import('ed25519-hd-key'),\n import('tweetnacl'),\n import('bs58'),\n ]);\n\n // Use @scure/bip39 for seed generation (browser compatible)\n const seedBytes = mnemonicToSeedSync(seed);\n\n // SLIP-0010 derivation for ed25519\n const derived = ed25519.derivePath(DERIVATION_PATHS.solana, Buffer.from(seedBytes).toString('hex'));\n\n // Create keypair from derived seed\n const keypair = nacl.sign.keyPair.fromSeed(new Uint8Array(derived.key));\n\n // Solana address is the base58-encoded public key (32 bytes)\n return bs58.encode(keypair.publicKey);\n } catch (error) {\n console.error('Solana address derivation failed:', error);\n throw error;\n }\n}\n\n/**\n * Derive TON address from seed phrase\n * Uses proper BIP-44 derivation path m/44'/607'/0'/0'/0'\n */\nexport async function deriveTonAddress(seed: string): Promise<string> {\n try {\n const [ed25519, nacl] = await Promise.all([\n import('ed25519-hd-key'),\n import('tweetnacl'),\n ]);\n\n // Use @scure/bip39 for seed generation (browser compatible)\n const seedBytes = mnemonicToSeedSync(seed);\n\n // Use SLIP-0010 derivation for ed25519 with TON's coin type\n const derived = ed25519.derivePath(DERIVATION_PATHS.ton, Buffer.from(seedBytes).toString('hex'));\n\n // Create keypair\n const keypair = nacl.sign.keyPair.fromSeed(new Uint8Array(derived.key));\n\n // TON address is derived from public key using workchain + hash\n // Standard TON wallet v4r2 uses the public key to derive address\n const publicKey = keypair.publicKey;\n\n // Create TON bounceable address (EQ prefix for workchain 0)\n // Format: 1 byte flags + 1 byte workchain + 32 bytes hash + 2 bytes CRC16\n const workchain = 0;\n const flags = 0x11; // bounceable\n\n // For raw address, we use SHA256 of public key using @noble/hashes\n const hash = sha256(publicKey);\n\n // Build address bytes: flags + workchain + hash\n const addressData = new Uint8Array(34);\n addressData[0] = flags;\n addressData[1] = workchain;\n addressData.set(hash, 2);\n\n // Calculate CRC16\n const crc = crc16(addressData);\n\n // Full address with CRC\n const fullAddress = new Uint8Array(36);\n fullAddress.set(addressData);\n fullAddress[34] = (crc >> 8) & 0xff;\n fullAddress[35] = crc & 0xff;\n\n // Convert to base64url (TON standard format)\n const base64 = btoa(String.fromCharCode(...fullAddress))\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_');\n\n return base64;\n } catch (error) {\n console.error('TON address derivation failed:', error);\n throw error;\n }\n}\n\n/**\n * CRC16-CCITT for TON addresses\n */\nfunction crc16(data: Uint8Array): number {\n let crc = 0;\n for (const byte of data) {\n crc ^= byte << 8;\n for (let i = 0; i < 8; i++) {\n crc = (crc & 0x8000) ? ((crc << 1) ^ 0x1021) : (crc << 1);\n crc &= 0xffff;\n }\n }\n return crc;\n}\n\n/**\n * Derive TRON address from seed phrase\n * TRON uses secp256k1 like Ethereum but with base58check encoding\n * Uses @scure/base for browser compatibility\n */\nexport function deriveTronAddress(seed: string): string {\n try {\n // Derive using TRON's BIP-44 path\n const hdNode = HDNodeWallet.fromPhrase(seed, undefined, DERIVATION_PATHS.tron);\n\n // Get the Ethereum-style address (last 20 bytes of keccak256 of public key)\n // TRON uses same derivation but different encoding\n const ethAddressHex = hdNode.address.slice(2).toLowerCase();\n\n // TRON address: 0x41 prefix + 20 bytes address\n const addressBytes = new Uint8Array(21);\n addressBytes[0] = 0x41; // TRON mainnet prefix\n\n // Copy ETH address bytes\n for (let i = 0; i < 20; i++) {\n addressBytes[i + 1] = parseInt(ethAddressHex.slice(i * 2, i * 2 + 2), 16);\n }\n\n // Base58check encode using @scure/base (uses double SHA256 for checksum)\n const tronBase58check = base58check(sha256);\n return tronBase58check.encode(addressBytes);\n } catch (error) {\n console.error('TRON address derivation failed:', error);\n throw error;\n }\n}\n\n/**\n * Derive Spark address from seed phrase\n * Spark uses its own derivation path and bech32 format\n * Uses @scure libraries for browser compatibility\n */\nexport function deriveSparkAddress(\n seed: string,\n network: 'mainnet' | 'testnet' = 'testnet'\n): string {\n try {\n // Convert mnemonic to seed using @scure/bip39\n const seedBytes = mnemonicToSeedSync(seed);\n\n // Derive HD key using @scure/bip32\n const hdKey = HDKey.fromMasterSeed(seedBytes);\n const child = hdKey.derive(DERIVATION_PATHS.spark);\n\n if (!child.publicKey) {\n throw new Error('Failed to derive public key');\n }\n\n // Create P2WPKH-style address (same as Bitcoin but with Spark HRP)\n // 1. Hash160 = RIPEMD160(SHA256(publicKey))\n const pubKeyHash = ripemd160(sha256(child.publicKey));\n\n // 2. Create witness program with version 0\n const witnessVersion = 0;\n const words = bech32.toWords(pubKeyHash);\n words.unshift(witnessVersion);\n\n // 3. Encode with bech32 using Spark's HRP\n // Note: Spark uses 'sp' for mainnet and 'tsp' for testnet\n const hrp = network === 'testnet' ? 'tsp' : 'sp';\n const address = bech32.encode(hrp, words);\n\n return address;\n } catch (error) {\n console.error('Spark address derivation failed:', error);\n throw error;\n }\n}\n\n/**\n * Derive addresses for all supported chains\n */\nexport async function deriveAllAddresses(\n seed: string,\n network: 'mainnet' | 'testnet' = 'testnet'\n): Promise<BrowserMultiChainAddresses> {\n const addresses: BrowserMultiChainAddresses = {\n ethereum: null,\n bitcoin: null,\n ton: null,\n tron: null,\n solana: null,\n spark: null,\n };\n\n // Derive synchronous chains first (Ethereum, Bitcoin, Spark, TRON)\n try {\n addresses.ethereum = deriveEthereumAddress(seed);\n } catch (e) {\n console.error('ETH derivation failed:', e);\n }\n\n try {\n addresses.bitcoin = deriveBitcoinAddress(seed, network);\n } catch (e) {\n console.error('BTC derivation failed:', e);\n }\n\n try {\n addresses.spark = deriveSparkAddress(seed, network);\n } catch (e) {\n console.error('Spark derivation failed:', e);\n }\n\n try {\n addresses.tron = deriveTronAddress(seed);\n } catch (e) {\n console.error('TRON derivation failed:', e);\n }\n\n // Derive async chains in parallel (Solana, TON use ed25519 which requires async imports)\n const [solResult, tonResult] = await Promise.allSettled([\n deriveSolanaAddress(seed),\n deriveTonAddress(seed),\n ]);\n\n if (solResult.status === 'fulfilled') {\n addresses.solana = solResult.value;\n } else {\n console.error('SOL derivation failed:', solResult.reason);\n }\n\n if (tonResult.status === 'fulfilled') {\n addresses.ton = tonResult.value;\n } else {\n console.error('TON derivation failed:', tonResult.reason);\n }\n\n return addresses;\n}\n\n/**\n * Validate a BIP-39 seed phrase using @scure/bip39\n */\nexport function isValidSeed(seed: string): boolean {\n return validateMnemonic(seed, wordlist);\n}\n\n/**\n * Generate a random BIP-39 seed phrase using @scure/bip39\n */\nexport function generateSeedPhrase(): string {\n return generateMnemonic(wordlist);\n}\n","/**\n * WDK Service for SDK\n *\n * Native integration with Tether WDK for multi-chain address derivation.\n * Uses individual wallet modules for each chain to derive cryptographically\n * valid addresses from a BIP-39 seed phrase.\n *\n * Supported chains: Ethereum, Bitcoin, TON, TRON, Solana, Spark (Lightning)\n *\n * @see https://docs.wallet.tether.io/\n */\n\n// Dynamic imports for ESM modules (WDK packages are ESM-only)\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WdkManager: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WalletManagerBtc: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WalletManagerEvm: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WalletManagerSolana: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WalletManagerTon: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WalletManagerTron: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WalletManagerSpark: any;\n\nlet wdkLoaded = false;\nlet wdkLoadError: Error | null = null;\n\n/**\n * Dynamic import helper that bypasses TypeScript's CommonJS transformation\n * TypeScript converts import() to require() in CommonJS, but WDK is ESM-only\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst dynamicImport = new Function('specifier', 'return import(specifier)') as (\n specifier: string\n) => Promise<any>;\n\n/**\n * Dynamically load WDK modules (they are ESM-only)\n */\nasync function loadWdkModules(): Promise<void> {\n if (wdkLoaded) return;\n if (wdkLoadError) throw wdkLoadError;\n\n try {\n const [wdk, btc, evm, solana, ton, tron, spark] = await Promise.all([\n dynamicImport('@tetherto/wdk'),\n dynamicImport('@tetherto/wdk-wallet-btc'),\n dynamicImport('@tetherto/wdk-wallet-evm'),\n dynamicImport('@tetherto/wdk-wallet-solana'),\n dynamicImport('@tetherto/wdk-wallet-ton'),\n dynamicImport('@tetherto/wdk-wallet-tron'),\n dynamicImport('@tetherto/wdk-wallet-spark'),\n ]);\n\n WdkManager = wdk.default;\n WalletManagerBtc = btc.default;\n WalletManagerEvm = evm.default;\n WalletManagerSolana = solana.default;\n WalletManagerTon = ton.default;\n WalletManagerTron = tron.default;\n WalletManagerSpark = spark.default;\n wdkLoaded = true;\n } catch (error) {\n wdkLoadError = error instanceof Error ? error : new Error('Failed to load WDK modules');\n console.error('Failed to load WDK modules:', error);\n throw wdkLoadError;\n }\n}\n\nexport type SupportedChain = 'ethereum' | 'bitcoin' | 'ton' | 'tron' | 'solana' | 'spark';\n\nexport interface ChainAddress {\n chain: SupportedChain;\n address: string;\n path: string;\n}\n\nexport interface MultiChainAddresses {\n ethereum: string | null;\n bitcoin: string | null;\n ton: string | null;\n tron: string | null;\n solana: string | null;\n spark: string | null;\n}\n\nexport interface WdkServiceConfig {\n network: 'mainnet' | 'testnet';\n rpcUrls?: {\n ethereum?: string;\n bitcoin?: string;\n solana?: string;\n ton?: string;\n tron?: string;\n };\n}\n\n// BIP-44 derivation paths\nconst DERIVATION_PATHS: Record<SupportedChain, string> = {\n bitcoin: \"m/84'/0'/0'/0/0\", // BIP-84 for native SegWit\n ethereum: \"m/44'/60'/0'/0/0\",\n ton: \"m/44'/607'/0'\", // Updated for v1.0.0-beta.6+\n tron: \"m/44'/195'/0'/0/0\",\n solana: \"m/44'/501'/0'/0'\", // Updated for v1.0.0-beta.4+\n spark: \"m/44'/998'/0'/0/0\",\n};\n\n// Default RPC URLs\nconst DEFAULT_RPC_URLS = {\n mainnet: {\n ethereum: 'https://eth.llamarpc.com',\n solana: 'https://api.mainnet-beta.solana.com',\n ton: 'https://toncenter.com/api/v2/jsonRPC',\n tron: 'https://api.trongrid.io',\n },\n testnet: {\n ethereum: 'https://ethereum-sepolia-rpc.publicnode.com',\n solana: 'https://api.devnet.solana.com',\n ton: 'https://testnet.toncenter.com/api/v2/jsonRPC',\n tron: 'https://api.shasta.trongrid.io',\n },\n};\n\n/**\n * WDK Service for native multi-chain address derivation\n * Uses Tether WDK wallet modules directly without needing a backend API\n */\nexport class WdkService {\n private seed: string | null = null;\n private config: WdkServiceConfig;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private wallets: Partial<Record<SupportedChain, any>> = {};\n\n constructor(config: Partial<WdkServiceConfig> = {}) {\n this.config = {\n network: config.network || 'testnet',\n rpcUrls: config.rpcUrls,\n };\n }\n\n /**\n * Check if WDK modules are loaded\n */\n static isLoaded(): boolean {\n return wdkLoaded;\n }\n\n /**\n * Ensure WDK modules are loaded\n */\n private async ensureLoaded(): Promise<void> {\n await loadWdkModules();\n }\n\n /**\n * Load WDK modules (call this before using sync methods)\n */\n async loadModules(): Promise<void> {\n await loadWdkModules();\n }\n\n /**\n * Generate a random BIP-39 seed phrase (12 words)\n */\n async generateSeedPhrase(): Promise<string> {\n await this.ensureLoaded();\n return WdkManager.getRandomSeedPhrase();\n }\n\n /**\n * Validate a BIP-39 seed phrase\n */\n async isValidSeed(seed: string): Promise<boolean> {\n await this.ensureLoaded();\n return WdkManager.isValidSeed(seed);\n }\n\n /**\n * Validate seed phrase (sync version - basic check)\n */\n isValidSeedSync(seed: string): boolean {\n const words = seed.trim().split(/\\s+/);\n return words.length === 12 || words.length === 24;\n }\n\n /**\n * Initialize the service with a seed phrase\n */\n async initialize(seed: string): Promise<void> {\n await this.ensureLoaded();\n\n if (!WdkManager.isValidSeed(seed)) {\n throw new Error('Invalid seed phrase');\n }\n\n this.seed = seed;\n this.wallets = {};\n }\n\n /**\n * Get RPC URL for a chain\n */\n private getRpcUrl(chain: SupportedChain): string {\n const networkUrls = DEFAULT_RPC_URLS[this.config.network];\n\n if (this.config.rpcUrls?.[chain as keyof typeof this.config.rpcUrls]) {\n return this.config.rpcUrls[chain as keyof typeof this.config.rpcUrls]!;\n }\n\n return networkUrls[chain as keyof typeof networkUrls] || '';\n }\n\n /**\n * Get or create wallet instance for a specific chain\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private async getWallet(chain: SupportedChain): Promise<any> {\n if (!this.seed) {\n throw new Error('WDK service not initialized. Call initialize() first.');\n }\n\n // Return cached wallet if exists\n if (this.wallets[chain]) {\n return this.wallets[chain];\n }\n\n const isTestnet = this.config.network === 'testnet';\n\n try {\n switch (chain) {\n case 'ethereum': {\n const rpcUrl = this.getRpcUrl('ethereum');\n const wallet = new WalletManagerEvm(this.seed, { provider: rpcUrl });\n this.wallets[chain] = wallet;\n return wallet;\n }\n\n case 'bitcoin': {\n const wallet = new WalletManagerBtc(this.seed, {\n network: isTestnet ? 'testnet' : 'bitcoin',\n });\n this.wallets[chain] = wallet;\n return wallet;\n }\n\n case 'solana': {\n const rpcUrl = this.getRpcUrl('solana');\n const wallet = new WalletManagerSolana(this.seed, {\n rpcUrl,\n });\n this.wallets[chain] = wallet;\n return wallet;\n }\n\n case 'ton': {\n const url = this.getRpcUrl('ton');\n const wallet = new WalletManagerTon(this.seed, {\n tonClient: { url },\n });\n this.wallets[chain] = wallet;\n return wallet;\n }\n\n case 'tron': {\n const fullHost = this.getRpcUrl('tron');\n const wallet = new WalletManagerTron(this.seed, {\n provider: fullHost,\n });\n this.wallets[chain] = wallet;\n return wallet;\n }\n\n case 'spark': {\n const wallet = new WalletManagerSpark(this.seed, {\n network: isTestnet ? 'TESTNET' : 'MAINNET',\n });\n this.wallets[chain] = wallet;\n return wallet;\n }\n\n default:\n throw new Error(`Unsupported chain: ${chain}`);\n }\n } catch (error) {\n console.error(`Failed to initialize ${chain} wallet:`, error);\n throw error;\n }\n }\n\n /**\n * Derive address for a specific chain\n */\n async deriveAddress(chain: SupportedChain): Promise<ChainAddress> {\n const path = DERIVATION_PATHS[chain];\n\n try {\n const wallet = await this.getWallet(chain);\n const account = await wallet.getAccount(0);\n const address = await account.getAddress();\n\n return {\n chain,\n address,\n path,\n };\n } catch (error) {\n console.error(`Error deriving ${chain} address:`, error);\n throw error;\n }\n }\n\n /**\n * Derive addresses for all supported chains\n */\n async deriveAllAddresses(): Promise<MultiChainAddresses> {\n const chains: SupportedChain[] = ['ethereum', 'bitcoin', 'ton', 'tron', 'solana', 'spark'];\n const addresses: MultiChainAddresses = {\n ethereum: null,\n bitcoin: null,\n ton: null,\n tron: null,\n solana: null,\n spark: null,\n };\n\n // Derive all addresses in parallel for better performance\n const results = await Promise.allSettled(\n chains.map(async (chain) => {\n const result = await this.deriveAddress(chain);\n return { chain, address: result.address };\n })\n );\n\n for (const result of results) {\n if (result.status === 'fulfilled') {\n addresses[result.value.chain] = result.value.address;\n } else {\n console.error('Failed to derive address:', result.reason);\n }\n }\n\n return addresses;\n }\n\n /**\n * Derive addresses for specific chains only\n */\n async deriveAddressesForChains(chains: SupportedChain[]): Promise<Partial<MultiChainAddresses>> {\n const addresses: Partial<MultiChainAddresses> = {};\n\n const results = await Promise.allSettled(\n chains.map(async (chain) => {\n const result = await this.deriveAddress(chain);\n return { chain, address: result.address };\n })\n );\n\n for (const result of results) {\n if (result.status === 'fulfilled') {\n addresses[result.value.chain] = result.value.address;\n }\n }\n\n return addresses;\n }\n\n /**\n * Get fee rates for a specific chain\n */\n async getFeeRates(\n chain: SupportedChain\n ): Promise<{ slow: string; medium: string; fast: string }> {\n if (!this.seed) {\n throw new Error('WDK service not initialized. Call initialize() first.');\n }\n\n try {\n const wallet = await this.getWallet(chain);\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const feeRates: any = await wallet.getFeeRates();\n return {\n slow: (feeRates.slow || feeRates.low || '0').toString(),\n medium: (feeRates.medium || feeRates.normal || feeRates.standard || '0').toString(),\n fast: (feeRates.fast || feeRates.high || '0').toString(),\n };\n } catch (error) {\n console.error(`Error fetching fee rates for ${chain}:`, error);\n throw error;\n }\n }\n\n /**\n * Get the current network configuration\n */\n getNetwork(): 'mainnet' | 'testnet' {\n return this.config.network;\n }\n\n /**\n * Check if service is initialized\n */\n isInitialized(): boolean {\n return this.seed !== null;\n }\n\n /**\n * Clean up and dispose of wallet instances\n */\n dispose(): void {\n for (const wallet of Object.values(this.wallets)) {\n if (wallet && typeof wallet.dispose === 'function') {\n try {\n wallet.dispose();\n } catch {\n // Ignore dispose errors\n }\n }\n }\n this.wallets = {};\n this.seed = null;\n }\n}\n\n// Singleton instance\nlet wdkServiceInstance: WdkService | null = null;\n\n/**\n * Get or create the WDK service singleton\n */\nexport function getWdkService(config?: Partial<WdkServiceConfig>): WdkService {\n if (!wdkServiceInstance || (config && config.network !== wdkServiceInstance.getNetwork())) {\n wdkServiceInstance = new WdkService(config);\n }\n return wdkServiceInstance;\n}\n\n/**\n * Create a new WDK service instance (non-singleton)\n */\nexport function createWdkService(config?: Partial<WdkServiceConfig>): WdkService {\n return new WdkService(config);\n}\n","/**\n * Transaction Service for Zubari SDK\n *\n * Provides multi-chain transaction capabilities using Tether WDK.\n * Supports Ethereum, Bitcoin, Solana, TON, TRON, and Spark (Lightning).\n *\n * @see https://docs.wallet.tether.io/\n */\n\nimport type { NetworkType, TxResult } from '../types';\n\n// Dynamic imports for ESM modules (WDK packages are ESM-only)\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WdkManager: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WalletManagerBtc: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WalletManagerEvm: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WalletManagerSolana: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WalletManagerTon: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WalletManagerTron: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WalletManagerSpark: any;\n\nlet wdkLoaded = false;\nlet wdkLoadError: Error | null = null;\n\n/**\n * Dynamic import helper that bypasses TypeScript's CommonJS transformation\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst dynamicImport = new Function('specifier', 'return import(specifier)') as (\n specifier: string\n) => Promise<any>;\n\n/**\n * Dynamically load WDK modules (they are ESM-only)\n */\nasync function loadWdkModules(): Promise<void> {\n if (wdkLoaded) return;\n if (wdkLoadError) throw wdkLoadError;\n\n try {\n const [wdk, btc, evm, solana, ton, tron, spark] = await Promise.all([\n dynamicImport('@tetherto/wdk'),\n dynamicImport('@tetherto/wdk-wallet-btc'),\n dynamicImport('@tetherto/wdk-wallet-evm'),\n dynamicImport('@tetherto/wdk-wallet-solana'),\n dynamicImport('@tetherto/wdk-wallet-ton'),\n dynamicImport('@tetherto/wdk-wallet-tron'),\n dynamicImport('@tetherto/wdk-wallet-spark'),\n ]);\n\n WdkManager = wdk.default;\n WalletManagerBtc = btc.default;\n WalletManagerEvm = evm.default;\n WalletManagerSolana = solana.default;\n WalletManagerTon = ton.default;\n WalletManagerTron = tron.default;\n WalletManagerSpark = spark.default;\n wdkLoaded = true;\n } catch (error) {\n wdkLoadError = error instanceof Error ? error : new Error('Failed to load WDK modules');\n console.error('Failed to load WDK modules:', error);\n throw wdkLoadError;\n }\n}\n\n/**\n * Transaction parameters for sending\n */\nexport interface TransactionParams {\n /** Recipient address */\n to: string;\n /** Amount to send (in human-readable format, e.g., \"0.1\") */\n amount: string;\n /** Token address (optional, for ERC-20/SPL tokens) */\n token?: string;\n /** Transaction memo/message (for chains that support it) */\n memo?: string;\n /** Fee priority: 'slow' | 'medium' | 'fast' */\n feePriority?: 'slow' | 'medium' | 'fast';\n /** Custom gas limit (EVM chains) */\n gasLimit?: string;\n /** Custom gas price (EVM chains) */\n gasPrice?: string;\n}\n\n/**\n * Transaction result with detailed information\n */\nexport interface TransactionResult {\n /** Transaction hash */\n hash: string;\n /** Network/chain */\n network: NetworkType;\n /** Transaction status */\n status: 'pending' | 'confirmed' | 'failed';\n /** Block number (when confirmed) */\n blockNumber?: number;\n /** Gas used (EVM chains) */\n gasUsed?: string;\n /** Fee paid */\n fee?: string;\n /** Explorer URL */\n explorerUrl?: string;\n /** Error message if failed */\n error?: string;\n /** Timestamp */\n timestamp: number;\n}\n\n/**\n * Transaction history item\n */\nexport interface TransactionHistoryItem {\n hash: string;\n network: NetworkType;\n type: 'send' | 'receive' | 'swap' | 'contract';\n from: string;\n to: string;\n amount: string;\n token?: string;\n fee?: string;\n status: 'pending' | 'confirmed' | 'failed';\n timestamp: number;\n blockNumber?: number;\n}\n\n/**\n * Fee estimate for a transaction\n */\nexport interface FeeEstimate {\n slow: {\n fee: string;\n estimatedTime: string; // e.g., \"~30 min\"\n };\n medium: {\n fee: string;\n estimatedTime: string; // e.g., \"~5 min\"\n };\n fast: {\n fee: string;\n estimatedTime: string; // e.g., \"~1 min\"\n };\n}\n\n/**\n * Transaction Service configuration\n */\nexport interface TransactionServiceConfig {\n network: 'mainnet' | 'testnet';\n rpcUrls?: Partial<Record<NetworkType, string>>;\n}\n\n// Default RPC URLs\nconst DEFAULT_RPC_URLS = {\n mainnet: {\n ethereum: 'https://eth.llamarpc.com',\n bitcoin: '', // Uses Electrum\n solana: 'https://api.mainnet-beta.solana.com',\n ton: 'https://toncenter.com/api/v2/jsonRPC',\n tron: 'https://api.trongrid.io',\n spark: '', // Uses Spark network\n },\n testnet: {\n ethereum: 'https://ethereum-sepolia-rpc.publicnode.com',\n bitcoin: '', // Uses Electrum testnet\n solana: 'https://api.devnet.solana.com',\n ton: 'https://testnet.toncenter.com/api/v2/jsonRPC',\n tron: 'https://api.shasta.trongrid.io',\n spark: '', // Uses Spark testnet\n },\n};\n\n// Explorer URLs\nconst EXPLORER_URLS = {\n mainnet: {\n ethereum: 'https://etherscan.io/tx/',\n bitcoin: 'https://mempool.space/tx/',\n solana: 'https://solscan.io/tx/',\n ton: 'https://tonscan.org/tx/',\n tron: 'https://tronscan.org/#/transaction/',\n spark: 'https://spark.info/tx/',\n },\n testnet: {\n ethereum: 'https://sepolia.etherscan.io/tx/',\n bitcoin: 'https://mempool.space/testnet/tx/',\n solana: 'https://solscan.io/tx/?cluster=devnet&tx=',\n ton: 'https://testnet.tonscan.org/tx/',\n tron: 'https://shasta.tronscan.org/#/transaction/',\n spark: 'https://testnet.spark.info/tx/',\n },\n};\n\n/**\n * Transaction Service\n *\n * Provides multi-chain transaction capabilities:\n * - Send native tokens (ETH, BTC, SOL, TON, TRX)\n * - Send ERC-20/SPL tokens\n * - Fee estimation\n * - Transaction history\n */\nexport class TransactionService {\n private seed: string | null = null;\n private config: TransactionServiceConfig;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private wallets: Partial<Record<NetworkType, any>> = {};\n\n constructor(config: Partial<TransactionServiceConfig> = {}) {\n this.config = {\n network: config.network || 'testnet',\n rpcUrls: config.rpcUrls,\n };\n }\n\n /**\n * Ensure WDK modules are loaded\n */\n private async ensureLoaded(): Promise<void> {\n await loadWdkModules();\n }\n\n /**\n * Get RPC URL for a chain\n */\n private getRpcUrl(chain: NetworkType): string {\n const networkUrls = DEFAULT_RPC_URLS[this.config.network];\n\n if (this.config.rpcUrls?.[chain]) {\n return this.config.rpcUrls[chain]!;\n }\n\n return networkUrls[chain as keyof typeof networkUrls] || '';\n }\n\n /**\n * Get explorer URL for a transaction\n */\n getExplorerUrl(chain: NetworkType, txHash: string): string {\n const explorers = EXPLORER_URLS[this.config.network];\n const baseUrl = explorers[chain as keyof typeof explorers] || '';\n return `${baseUrl}${txHash}`;\n }\n\n /**\n * Initialize the service with a seed phrase\n */\n async initialize(seed: string): Promise<void> {\n await this.ensureLoaded();\n\n if (!WdkManager.isValidSeed(seed)) {\n throw new Error('Invalid seed phrase');\n }\n\n this.seed = seed;\n this.wallets = {};\n }\n\n /**\n * Check if service is initialized\n */\n isInitialized(): boolean {\n return this.seed !== null;\n }\n\n /**\n * Get or create wallet instance for a specific chain\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private async getWallet(chain: NetworkType): Promise<any> {\n if (!this.seed) {\n throw new Error('TransactionService not initialized. Call initialize() first.');\n }\n\n // Return cached wallet if exists\n if (this.wallets[chain]) {\n return this.wallets[chain];\n }\n\n const isTestnet = this.config.network === 'testnet';\n\n try {\n switch (chain) {\n case 'ethereum': {\n const rpcUrl = this.getRpcUrl('ethereum');\n const wallet = new WalletManagerEvm(this.seed, { provider: rpcUrl });\n this.wallets[chain] = wallet;\n return wallet;\n }\n\n case 'bitcoin': {\n const wallet = new WalletManagerBtc(this.seed, {\n network: isTestnet ? 'testnet' : 'bitcoin',\n });\n this.wallets[chain] = wallet;\n return wallet;\n }\n\n case 'solana': {\n const rpcUrl = this.getRpcUrl('solana');\n const wallet = new WalletManagerSolana(this.seed, {\n rpcUrl,\n });\n this.wallets[chain] = wallet;\n return wallet;\n }\n\n case 'ton': {\n const url = this.getRpcUrl('ton');\n const wallet = new WalletManagerTon(this.seed, {\n tonClient: { url },\n });\n this.wallets[chain] = wallet;\n return wallet;\n }\n\n case 'tron': {\n const fullHost = this.getRpcUrl('tron');\n const wallet = new WalletManagerTron(this.seed, {\n provider: fullHost,\n });\n this.wallets[chain] = wallet;\n return wallet;\n }\n\n case 'spark': {\n const wallet = new WalletManagerSpark(this.seed, {\n network: isTestnet ? 'TESTNET' : 'MAINNET',\n });\n this.wallets[chain] = wallet;\n return wallet;\n }\n\n default:\n throw new Error(`Unsupported chain: ${chain}`);\n }\n } catch (error) {\n console.error(`Failed to initialize ${chain} wallet:`, error);\n throw error;\n }\n }\n\n /**\n * Estimate transaction fee\n */\n async estimateFee(chain: NetworkType, params: TransactionParams): Promise<FeeEstimate> {\n const wallet = await this.getWallet(chain);\n\n try {\n // Get fee rates from the wallet\n const feeRates = await wallet.getFeeRates();\n\n // Format based on chain type\n if (chain === 'ethereum') {\n return {\n slow: {\n fee: `${feeRates.slow || '0'} Gwei`,\n estimatedTime: '~10 min',\n },\n medium: {\n fee: `${feeRates.medium || feeRates.standard || '0'} Gwei`,\n estimatedTime: '~3 min',\n },\n fast: {\n fee: `${feeRates.fast || feeRates.high || '0'} Gwei`,\n estimatedTime: '~30 sec',\n },\n };\n } else if (chain === 'bitcoin') {\n return {\n slow: {\n fee: `${feeRates.slow || feeRates.low || '0'} sat/vB`,\n estimatedTime: '~60 min',\n },\n medium: {\n fee: `${feeRates.medium || feeRates.normal || '0'} sat/vB`,\n estimatedTime: '~30 min',\n },\n fast: {\n fee: `${feeRates.fast || feeRates.high || '0'} sat/vB`,\n estimatedTime: '~10 min',\n },\n };\n } else {\n // Generic format for other chains\n return {\n slow: {\n fee: String(feeRates.slow || feeRates.low || '0'),\n estimatedTime: '~10 min',\n },\n medium: {\n fee: String(feeRates.medium || feeRates.standard || '0'),\n estimatedTime: '~3 min',\n },\n fast: {\n fee: String(feeRates.fast || feeRates.high || '0'),\n estimatedTime: '~1 min',\n },\n };\n }\n } catch (error) {\n console.error(`Error estimating fee for ${chain}:`, error);\n // Return default fees on error\n return {\n slow: { fee: '0', estimatedTime: 'Unknown' },\n medium: { fee: '0', estimatedTime: 'Unknown' },\n fast: { fee: '0', estimatedTime: 'Unknown' },\n };\n }\n }\n\n /**\n * Send a transaction\n */\n async send(chain: NetworkType, params: TransactionParams): Promise<TransactionResult> {\n const wallet = await this.getWallet(chain);\n const account = await wallet.getAccount(0);\n\n const timestamp = Date.now();\n\n try {\n // Build and send transaction based on chain\n let txHash: string;\n\n if (params.token) {\n // Token transfer (ERC-20, SPL, TRC-20, etc.)\n txHash = await account.sendToken(params.to, params.amount, params.token, {\n memo: params.memo,\n feePriority: params.feePriority || 'medium',\n });\n } else {\n // Native token transfer\n txHash = await account.send(params.to, params.amount, {\n memo: params.memo,\n feePriority: params.feePriority || 'medium',\n gasLimit: params.gasLimit,\n gasPrice: params.gasPrice,\n });\n }\n\n return {\n hash: txHash,\n network: chain,\n status: 'pending',\n explorerUrl: this.getExplorerUrl(chain, txHash),\n timestamp,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Transaction failed';\n console.error(`Transaction failed on ${chain}:`, error);\n\n return {\n hash: '',\n network: chain,\n status: 'failed',\n error: errorMessage,\n timestamp,\n };\n }\n }\n\n /**\n * Get transaction status\n */\n async getTransactionStatus(chain: NetworkType, txHash: string): Promise<TransactionResult> {\n const wallet = await this.getWallet(chain);\n\n try {\n const tx = await wallet.getTransaction(txHash);\n\n return {\n hash: txHash,\n network: chain,\n status: tx.confirmed ? 'confirmed' : 'pending',\n blockNumber: tx.blockNumber,\n gasUsed: tx.gasUsed?.toString(),\n fee: tx.fee?.toString(),\n explorerUrl: this.getExplorerUrl(chain, txHash),\n timestamp: tx.timestamp || Date.now(),\n };\n } catch (error) {\n console.error(`Error getting transaction status for ${txHash}:`, error);\n return {\n hash: txHash,\n network: chain,\n status: 'pending',\n explorerUrl: this.getExplorerUrl(chain, txHash),\n timestamp: Date.now(),\n };\n }\n }\n\n /**\n * Get transaction history for an address\n */\n async getTransactionHistory(\n chain: NetworkType,\n limit: number = 10\n ): Promise<TransactionHistoryItem[]> {\n const wallet = await this.getWallet(chain);\n const account = await wallet.getAccount(0);\n\n try {\n const history = await account.getTransactions({ limit });\n\n return history.map((tx: any) => ({\n hash: tx.hash || tx.txHash,\n network: chain,\n type: tx.type || (tx.from === account.address ? 'send' : 'receive'),\n from: tx.from,\n to: tx.to,\n amount: tx.amount || tx.value,\n token: tx.token,\n fee: tx.fee?.toString(),\n status: tx.confirmed ? 'confirmed' : 'pending',\n timestamp: tx.timestamp || Date.now(),\n blockNumber: tx.blockNumber,\n }));\n } catch (error) {\n console.error(`Error getting transaction history for ${chain}:`, error);\n return [];\n }\n }\n\n /**\n * Get balance for a specific chain\n */\n async getBalance(chain: NetworkType): Promise<{ balance: string; balanceUsd: number }> {\n const wallet = await this.getWallet(chain);\n const account = await wallet.getAccount(0);\n\n try {\n const balance = await account.getBalance();\n return {\n balance: balance.toString(),\n balanceUsd: 0, // TODO: Implement price fetching\n };\n } catch (error) {\n console.error(`Error getting balance for ${chain}:`, error);\n return { balance: '0', balanceUsd: 0 };\n }\n }\n\n /**\n * Get the current network configuration\n */\n getNetwork(): 'mainnet' | 'testnet' {\n return this.config.network;\n }\n\n /**\n * Clean up and dispose of wallet instances\n */\n dispose(): void {\n for (const wallet of Object.values(this.wallets)) {\n if (wallet && typeof wallet.dispose === 'function') {\n try {\n wallet.dispose();\n } catch {\n // Ignore dispose errors\n }\n }\n }\n this.wallets = {};\n this.seed = null;\n }\n}\n\n// Singleton instance\nlet transactionServiceInstance: TransactionService | null = null;\n\n/**\n * Get or create the Transaction service singleton\n */\nexport function getTransactionService(config?: Partial<TransactionServiceConfig>): TransactionService {\n if (!transactionServiceInstance || (config && config.network !== transactionServiceInstance.getNetwork())) {\n transactionServiceInstance = new TransactionService(config);\n }\n return transactionServiceInstance;\n}\n\n/**\n * Create a new Transaction service instance (non-singleton)\n */\nexport function createTransactionService(config?: Partial<TransactionServiceConfig>): TransactionService {\n return new TransactionService(config);\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/config/contracts.ts","../../src/services/SwapService.ts","../../src/services/WdkApiClient.ts","../../src/services/BrowserAddressDerivation.ts","../../src/services/ZubariWdkService.ts","../../src/services/TransactionService.ts"],"names":["DEFAULT_API_URL","dynamicImport"],"mappings":"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","file":"index.mjs","sourcesContent":["// Contract addresses for Zubari ecosystem\nexport interface ContractAddresses {\n registry: string;\n nft: string;\n marketplace: string;\n tips: string;\n subscriptions: string;\n payouts: string;\n entryPoint: string;\n paymaster: string;\n accountFactory: string;\n usdt: string;\n weth: string;\n}\n\n// Placeholder addresses - will be updated after deployment\nconst ZERO_ADDRESS = '0x0000000000000000000000000000000000000000';\n\nexport const ZUBARI_CONTRACTS: Record<'testnet' | 'mainnet', ContractAddresses> = {\n testnet: {\n // Ethereum Sepolia (11155111) - Deployed 2024-12-09\n registry: '0xEdDf443D48832f23D4A0bED4C4c5eF200B38A7d3',\n nft: '0xdc37e25650D685e4c38124aC314477Ea5f508a9e',\n marketplace: ZERO_ADDRESS, // Not yet deployed\n tips: '0xFDc353edC63Cd3D4bba35bB43861369516a9Dc85',\n subscriptions: '0x8C05F8aD2F295fB7f3596043a7c37C98A5F7fAB8',\n payouts: '0x804Fe503936E8b8d3D5Dbb62AF4fB6Fe7265Fb2c',\n entryPoint: '0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789',\n paymaster: ZERO_ADDRESS, // Not yet deployed\n accountFactory: ZERO_ADDRESS, // Not yet deployed\n usdt: '0xaA8E23Fb1079EA71e0a56F48a2aA51851D8433D0', // USDT on Sepolia\n weth: '0xfFf9976782d46CC05630D1f6eBAb18b2324d6B14',\n },\n mainnet: {\n // Ethereum Mainnet (1)\n registry: ZERO_ADDRESS,\n nft: ZERO_ADDRESS,\n marketplace: ZERO_ADDRESS,\n tips: ZERO_ADDRESS,\n subscriptions: ZERO_ADDRESS,\n payouts: ZERO_ADDRESS,\n entryPoint: '0x5FF137D4b0FDCD49DcA30c7CF57E578a026d2789',\n paymaster: ZERO_ADDRESS,\n accountFactory: ZERO_ADDRESS,\n usdt: '0xdAC17F958D2ee523a2206206994597C13D831ec7', // USDT on Ethereum\n weth: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',\n },\n};\n\n// Platform configuration\nexport const PLATFORM_CONFIG = {\n // Platform fee in basis points (300 = 3%)\n tipFeeBps: 300,\n // Maximum royalty in basis points (1000 = 10%)\n maxRoyaltyBps: 1000,\n // Default slippage tolerance for swaps (50 = 0.5%)\n defaultSlippageBps: 50,\n // Voucher validity in seconds (30 days)\n voucherValiditySecs: 30 * 24 * 60 * 60,\n // Swap deadline in seconds (30 minutes)\n swapDeadlineSecs: 30 * 60,\n} as const;\n\n// EIP-712 Domain for lazy minting\nexport const NFT_VOUCHER_DOMAIN = {\n name: 'ZubariNFT',\n version: '1',\n} as const;\n\nexport const NFT_VOUCHER_TYPES = {\n NFTVoucher: [\n { name: 'tokenId', type: 'bytes32' },\n { name: 'uri', type: 'string' },\n { name: 'creator', type: 'address' },\n { name: 'royaltyBps', type: 'uint256' },\n { name: 'deadline', type: 'uint256' },\n ],\n} as const;\n\nexport function getContractAddresses(network: 'testnet' | 'mainnet'): ContractAddresses {\n return ZUBARI_CONTRACTS[network];\n}\n","import type { SwapQuote, TxResult } from '../types';\nimport { PLATFORM_CONFIG, getContractAddresses } from '../config/contracts';\n\n/**\n * SwapService - DEX integration via Velora\n *\n * Handles token swaps with slippage protection,\n * quote fetching, and earnings conversion.\n */\nexport class SwapService {\n private readonly _chainId: number;\n private readonly isTestnet: boolean;\n\n constructor(chainId: number, isTestnet: boolean = false) {\n this._chainId = chainId;\n this.isTestnet = isTestnet;\n }\n\n /**\n * Get a swap quote\n */\n async getQuote(\n tokenIn: string,\n tokenOut: string,\n amountIn: bigint\n ): Promise<SwapQuote> {\n if (amountIn <= 0n) {\n throw new Error('Amount must be greater than 0');\n }\n\n // Placeholder - will use Velora DEX\n return {\n tokenIn,\n tokenOut,\n amountIn,\n amountOut: BigInt(0),\n priceImpact: 0,\n route: [tokenIn, tokenOut],\n estimatedGas: BigInt(0),\n };\n }\n\n /**\n * Execute a swap with slippage protection\n */\n async executeSwap(\n quote: SwapQuote,\n slippageToleranceBps: number = PLATFORM_CONFIG.defaultSlippageBps\n ): Promise<TxResult> {\n // Calculate minimum output with slippage\n const _minAmountOut =\n quote.amountOut - (quote.amountOut * BigInt(slippageToleranceBps)) / BigInt(10000);\n\n // Calculate deadline\n const _deadline = Math.floor(Date.now() / 1000) + PLATFORM_CONFIG.swapDeadlineSecs;\n\n // Warn if price impact is high\n if (quote.priceImpact > 5) {\n console.warn(`High price impact: ${quote.priceImpact}%`);\n }\n\n // Placeholder - will call swap contract\n return {\n hash: '',\n network: 'ethereum',\n status: 'pending',\n };\n }\n\n /**\n * Convert earnings to USDT, keeping some ETH for gas\n */\n async convertEarningsToStable(\n ethBalance: bigint,\n reserveForGas: bigint = BigInt('10000000000000000') // 0.01 ETH\n ): Promise<TxResult> {\n const amountToSwap = ethBalance - reserveForGas;\n\n if (amountToSwap <= 0n) {\n throw new Error('Insufficient balance after gas reserve');\n }\n\n // Get quote for ETH -> USDT\n const contracts = getContractAddresses(this.isTestnet ? 'testnet' : 'mainnet');\n const quote = await this.getQuote(\n '0x0000000000000000000000000000000000000000', // ETH\n contracts.usdt, // USDT on Ethereum\n amountToSwap\n );\n\n return this.executeSwap(quote);\n }\n\n /**\n * Check if a swap route exists\n */\n async hasRoute(tokenIn: string, tokenOut: string): Promise<boolean> {\n try {\n const quote = await this.getQuote(tokenIn, tokenOut, BigInt(1));\n return quote.amountOut > 0n;\n } catch {\n return false;\n }\n }\n\n /**\n * Get supported tokens for swapping\n */\n async getSupportedTokens(): Promise<string[]> {\n // Placeholder - will query DEX\n return [];\n }\n}\n","/**\n * WDK API Client\n *\n * Client for calling the backend WDK endpoints to derive addresses\n * using Tether WDK (which runs server-side in Node.js).\n */\n\nimport type { NetworkType } from '../types';\n\nexport interface WdkApiConfig {\n baseUrl: string;\n timeout?: number;\n}\n\nexport interface DeriveAddressResponse {\n success: boolean;\n address?: string;\n chain?: string;\n path?: string;\n network?: string;\n error?: string;\n}\n\nexport interface DeriveAllAddressesResponse {\n success: boolean;\n addresses?: {\n ethereum: string | null;\n bitcoin: string | null;\n ton: string | null;\n tron: string | null;\n solana: string | null;\n spark: string | null;\n };\n network?: string;\n error?: string;\n}\n\nexport interface ValidateSeedResponse {\n success: boolean;\n isValid?: boolean;\n wordCount?: number;\n error?: string;\n}\n\nexport interface GenerateSeedResponse {\n success: boolean;\n seed?: string;\n wordCount?: number;\n error?: string;\n}\n\n/**\n * WDK API Client for server-side Tether WDK integration\n */\nexport class WdkApiClient {\n private config: Required<WdkApiConfig>;\n\n constructor(config: WdkApiConfig) {\n this.config = {\n baseUrl: config.baseUrl,\n timeout: config.timeout || 30000,\n };\n }\n\n /**\n * Generate a new BIP-39 seed phrase using Tether WDK\n */\n async generateSeed(): Promise<GenerateSeedResponse> {\n try {\n const response = await fetch(`${this.config.baseUrl}/api/wallets/wdk/generate-seed`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n return await response.json();\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to generate seed',\n };\n }\n }\n\n /**\n * Validate a BIP-39 seed phrase\n */\n async validateSeed(seed: string): Promise<ValidateSeedResponse> {\n try {\n const response = await fetch(`${this.config.baseUrl}/api/wallets/wdk/validate-seed`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ seed }),\n });\n\n return await response.json();\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to validate seed',\n };\n }\n }\n\n /**\n * Derive address for a specific chain using Tether WDK\n */\n async deriveAddress(\n seed: string,\n chain: NetworkType,\n network: 'mainnet' | 'testnet' = 'testnet'\n ): Promise<DeriveAddressResponse> {\n try {\n const response = await fetch(`${this.config.baseUrl}/api/wallets/wdk/derive-address`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ seed, chain, network }),\n });\n\n return await response.json();\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to derive address',\n };\n }\n }\n\n /**\n * Derive addresses for all chains using Tether WDK\n */\n async deriveAllAddresses(\n seed: string,\n network: 'mainnet' | 'testnet' = 'testnet'\n ): Promise<DeriveAllAddressesResponse> {\n try {\n const response = await fetch(`${this.config.baseUrl}/api/wallets/wdk/derive-all`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify({ seed, network }),\n });\n\n return await response.json();\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Failed to derive addresses',\n };\n }\n }\n}\n\n// Default API URL (can be overridden)\n// Uses the Zubari production API which has Tether WDK integrated\nconst DEFAULT_API_URL = process.env.NEXT_PUBLIC_API_URL || 'https://ckgwifsxka.us-east-2.awsapprunner.com';\n\n// Singleton instance\nlet wdkApiClient: WdkApiClient | null = null;\n\n/**\n * Get or create the WDK API client instance\n */\nexport function getWdkApiClient(baseUrl?: string): WdkApiClient {\n if (!wdkApiClient || (baseUrl && wdkApiClient['config'].baseUrl !== baseUrl)) {\n wdkApiClient = new WdkApiClient({\n baseUrl: baseUrl || DEFAULT_API_URL,\n });\n }\n return wdkApiClient;\n}\n","/**\n * Browser-Compatible Address Derivation\n *\n * This module provides multi-chain address derivation that works in browser environments.\n * It uses the @scure libraries which are pure JS and don't require Node.js polyfills.\n *\n * Supported chains:\n * - Ethereum: ethers.js (BIP-44)\n * - Bitcoin: @scure/bip32 + @scure/base (BIP-84 native SegWit)\n * - Solana: ed25519-hd-key + tweetnacl (SLIP-0010)\n * - TON: ed25519 derivation with TON address format\n * - TRON: secp256k1 + base58check\n * - Spark: Bitcoin-based with custom derivation\n */\n\nimport { HDNodeWallet } from 'ethers';\nimport { mnemonicToSeedSync, validateMnemonic, generateMnemonic } from '@scure/bip39';\nimport { wordlist } from '@scure/bip39/wordlists/english';\nimport { HDKey } from '@scure/bip32';\nimport { bech32, base58check } from '@scure/base';\nimport { sha256 } from '@noble/hashes/sha256';\nimport { ripemd160 } from '@noble/hashes/ripemd160';\nimport type { NetworkType } from '../types';\n\nexport interface ChainAddress {\n chain: NetworkType;\n address: string;\n path: string;\n}\n\nexport interface BrowserMultiChainAddresses {\n ethereum: string | null;\n bitcoin: string | null;\n ton: string | null;\n tron: string | null;\n solana: string | null;\n spark: string | null;\n}\n\n// BIP-44/84 derivation paths\nconst DERIVATION_PATHS = {\n ethereum: \"m/44'/60'/0'/0/0\",\n bitcoin_mainnet: \"m/84'/0'/0'/0/0\",\n bitcoin_testnet: \"m/84'/1'/0'/0/0\",\n ton: \"m/44'/607'/0'/0'/0'\",\n tron: \"m/44'/195'/0'/0/0\",\n solana: \"m/44'/501'/0'/0'\",\n spark: \"m/44'/998'/0'/0/0\",\n};\n\n/**\n * Derive Ethereum address from seed phrase\n */\nexport function deriveEthereumAddress(seed: string): string {\n const hdNode = HDNodeWallet.fromPhrase(seed, undefined, DERIVATION_PATHS.ethereum);\n return hdNode.address;\n}\n\n/**\n * Derive Bitcoin address from seed phrase (BIP-84 native SegWit)\n * Uses @scure libraries for browser compatibility\n */\nexport function deriveBitcoinAddress(\n seed: string,\n network: 'mainnet' | 'testnet' = 'testnet'\n): string {\n try {\n // Convert mnemonic to seed using @scure/bip39\n const seedBytes = mnemonicToSeedSync(seed);\n\n // Derive HD key using @scure/bip32\n const hdKey = HDKey.fromMasterSeed(seedBytes);\n const path = network === 'testnet' ? DERIVATION_PATHS.bitcoin_testnet : DERIVATION_PATHS.bitcoin_mainnet;\n const child = hdKey.derive(path);\n\n if (!child.publicKey) {\n throw new Error('Failed to derive public key');\n }\n\n // Create P2WPKH address (native SegWit)\n // 1. Hash160 = RIPEMD160(SHA256(publicKey))\n const pubKeyHash = ripemd160(sha256(child.publicKey));\n\n // 2. Create witness program: version (0x00) + hash160\n // For bech32, we encode: witness version (0) + pubKeyHash as 5-bit words\n const witnessVersion = 0;\n const words = bech32.toWords(pubKeyHash);\n words.unshift(witnessVersion); // Prepend witness version\n\n // 3. Encode with bech32\n const hrp = network === 'testnet' ? 'tb' : 'bc';\n const address = bech32.encode(hrp, words);\n\n return address;\n } catch (error) {\n console.error('Bitcoin address derivation failed:', error);\n throw error;\n }\n}\n\n/**\n * Derive Solana address from seed phrase using SLIP-0010 (ed25519)\n */\nexport async function deriveSolanaAddress(seed: string): Promise<string> {\n try {\n const [ed25519, nacl, bs58Module] = await Promise.all([\n import('ed25519-hd-key'),\n import('tweetnacl'),\n import('bs58'),\n ]);\n\n // bs58 v6 uses default export\n const bs58 = bs58Module.default || bs58Module;\n\n // Use @scure/bip39 for seed generation (browser compatible)\n const seedBytes = mnemonicToSeedSync(seed);\n\n // SLIP-0010 derivation for ed25519\n const derived = ed25519.derivePath(DERIVATION_PATHS.solana, Buffer.from(seedBytes).toString('hex'));\n\n // Create keypair from derived seed\n const keypair = nacl.sign.keyPair.fromSeed(new Uint8Array(derived.key));\n\n // Solana address is the base58-encoded public key (32 bytes)\n return bs58.encode(keypair.publicKey);\n } catch (error) {\n console.error('Solana address derivation failed:', error);\n throw error;\n }\n}\n\n/**\n * Derive TON address from seed phrase\n * Uses proper BIP-44 derivation path m/44'/607'/0'/0'/0'\n */\nexport async function deriveTonAddress(seed: string): Promise<string> {\n try {\n const [ed25519, nacl] = await Promise.all([\n import('ed25519-hd-key'),\n import('tweetnacl'),\n ]);\n\n // Use @scure/bip39 for seed generation (browser compatible)\n const seedBytes = mnemonicToSeedSync(seed);\n\n // Use SLIP-0010 derivation for ed25519 with TON's coin type\n const derived = ed25519.derivePath(DERIVATION_PATHS.ton, Buffer.from(seedBytes).toString('hex'));\n\n // Create keypair\n const keypair = nacl.sign.keyPair.fromSeed(new Uint8Array(derived.key));\n\n // TON address is derived from public key using workchain + hash\n // Standard TON wallet v4r2 uses the public key to derive address\n const publicKey = keypair.publicKey;\n\n // Create TON bounceable address (EQ prefix for workchain 0)\n // Format: 1 byte flags + 1 byte workchain + 32 bytes hash + 2 bytes CRC16\n const workchain = 0;\n const flags = 0x11; // bounceable\n\n // For raw address, we use SHA256 of public key using @noble/hashes\n const hash = sha256(publicKey);\n\n // Build address bytes: flags + workchain + hash\n const addressData = new Uint8Array(34);\n addressData[0] = flags;\n addressData[1] = workchain;\n addressData.set(hash, 2);\n\n // Calculate CRC16\n const crc = crc16(addressData);\n\n // Full address with CRC\n const fullAddress = new Uint8Array(36);\n fullAddress.set(addressData);\n fullAddress[34] = (crc >> 8) & 0xff;\n fullAddress[35] = crc & 0xff;\n\n // Convert to base64url (TON standard format)\n const base64 = btoa(String.fromCharCode(...fullAddress))\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_');\n\n return base64;\n } catch (error) {\n console.error('TON address derivation failed:', error);\n throw error;\n }\n}\n\n/**\n * CRC16-CCITT for TON addresses\n */\nfunction crc16(data: Uint8Array): number {\n let crc = 0;\n for (const byte of data) {\n crc ^= byte << 8;\n for (let i = 0; i < 8; i++) {\n crc = (crc & 0x8000) ? ((crc << 1) ^ 0x1021) : (crc << 1);\n crc &= 0xffff;\n }\n }\n return crc;\n}\n\n/**\n * Derive TRON address from seed phrase\n * TRON uses secp256k1 like Ethereum but with base58check encoding\n * Uses @scure/base for browser compatibility\n */\nexport function deriveTronAddress(seed: string): string {\n try {\n // Derive using TRON's BIP-44 path\n const hdNode = HDNodeWallet.fromPhrase(seed, undefined, DERIVATION_PATHS.tron);\n\n // Get the Ethereum-style address (last 20 bytes of keccak256 of public key)\n // TRON uses same derivation but different encoding\n const ethAddressHex = hdNode.address.slice(2).toLowerCase();\n\n // TRON address: 0x41 prefix + 20 bytes address\n const addressBytes = new Uint8Array(21);\n addressBytes[0] = 0x41; // TRON mainnet prefix\n\n // Copy ETH address bytes\n for (let i = 0; i < 20; i++) {\n addressBytes[i + 1] = parseInt(ethAddressHex.slice(i * 2, i * 2 + 2), 16);\n }\n\n // Base58check encode using @scure/base (uses double SHA256 for checksum)\n const tronBase58check = base58check(sha256);\n return tronBase58check.encode(addressBytes);\n } catch (error) {\n console.error('TRON address derivation failed:', error);\n throw error;\n }\n}\n\n/**\n * Derive Spark address from seed phrase\n * Spark uses its own derivation path and bech32 format\n * Uses @scure libraries for browser compatibility\n */\nexport function deriveSparkAddress(\n seed: string,\n network: 'mainnet' | 'testnet' = 'testnet'\n): string {\n try {\n // Convert mnemonic to seed using @scure/bip39\n const seedBytes = mnemonicToSeedSync(seed);\n\n // Derive HD key using @scure/bip32\n const hdKey = HDKey.fromMasterSeed(seedBytes);\n const child = hdKey.derive(DERIVATION_PATHS.spark);\n\n if (!child.publicKey) {\n throw new Error('Failed to derive public key');\n }\n\n // Create P2WPKH-style address (same as Bitcoin but with Spark HRP)\n // 1. Hash160 = RIPEMD160(SHA256(publicKey))\n const pubKeyHash = ripemd160(sha256(child.publicKey));\n\n // 2. Create witness program with version 0\n const witnessVersion = 0;\n const words = bech32.toWords(pubKeyHash);\n words.unshift(witnessVersion);\n\n // 3. Encode with bech32 using Spark's HRP\n // Note: Spark uses 'sp' for mainnet and 'tsp' for testnet\n const hrp = network === 'testnet' ? 'tsp' : 'sp';\n const address = bech32.encode(hrp, words);\n\n return address;\n } catch (error) {\n console.error('Spark address derivation failed:', error);\n throw error;\n }\n}\n\n/**\n * Derive addresses for all supported chains\n */\nexport async function deriveAllAddresses(\n seed: string,\n network: 'mainnet' | 'testnet' = 'testnet'\n): Promise<BrowserMultiChainAddresses> {\n const addresses: BrowserMultiChainAddresses = {\n ethereum: null,\n bitcoin: null,\n ton: null,\n tron: null,\n solana: null,\n spark: null,\n };\n\n // Derive synchronous chains first (Ethereum, Bitcoin, Spark, TRON)\n try {\n addresses.ethereum = deriveEthereumAddress(seed);\n } catch (e) {\n console.error('ETH derivation failed:', e);\n }\n\n try {\n addresses.bitcoin = deriveBitcoinAddress(seed, network);\n } catch (e) {\n console.error('BTC derivation failed:', e);\n }\n\n try {\n addresses.spark = deriveSparkAddress(seed, network);\n } catch (e) {\n console.error('Spark derivation failed:', e);\n }\n\n try {\n addresses.tron = deriveTronAddress(seed);\n } catch (e) {\n console.error('TRON derivation failed:', e);\n }\n\n // Derive async chains in parallel (Solana, TON use ed25519 which requires async imports)\n const [solResult, tonResult] = await Promise.allSettled([\n deriveSolanaAddress(seed),\n deriveTonAddress(seed),\n ]);\n\n if (solResult.status === 'fulfilled') {\n addresses.solana = solResult.value;\n } else {\n console.error('SOL derivation failed:', solResult.reason);\n }\n\n if (tonResult.status === 'fulfilled') {\n addresses.ton = tonResult.value;\n } else {\n console.error('TON derivation failed:', tonResult.reason);\n }\n\n return addresses;\n}\n\n/**\n * Validate a BIP-39 seed phrase using @scure/bip39\n */\nexport function isValidSeed(seed: string): boolean {\n return validateMnemonic(seed, wordlist);\n}\n\n/**\n * Generate a random BIP-39 seed phrase using @scure/bip39\n */\nexport function generateSeedPhrase(): string {\n return generateMnemonic(wordlist);\n}\n","/**\n * Zubari WDK Service - Unified Multi-Chain Wallet Service\n *\n * This service provides a unified interface for multi-chain wallet operations\n * that works in both browser and Node.js environments.\n *\n * Strategy:\n * - Browser: Uses WdkApiClient to call the backend API (which has Tether WDK)\n * - Node.js: Uses WdkService natively (with Tether WDK modules)\n *\n * The Tether WDK (@tetherto/wdk-*) only works in Node.js environments due to\n * native dependencies (Electrum client, gRPC, etc.). For browser environments,\n * we route all operations through the backend API.\n *\n * @see https://docs.wallet.tether.io/\n */\n\nimport { WdkApiClient, getWdkApiClient } from './WdkApiClient';\nimport * as BrowserDerivation from './BrowserAddressDerivation';\nimport type { NetworkType } from '../types';\n\n// Default API URL for the Zubari backend with Tether WDK\nconst DEFAULT_API_URL = 'https://ckgwifsxka.us-east-2.awsapprunner.com';\n\nexport type SupportedChain = 'ethereum' | 'bitcoin' | 'ton' | 'tron' | 'solana' | 'spark';\n\nexport interface ChainAddress {\n chain: SupportedChain;\n address: string;\n path: string;\n}\n\nexport interface MultiChainAddresses {\n ethereum: string | null;\n bitcoin: string | null;\n ton: string | null;\n tron: string | null;\n solana: string | null;\n spark: string | null;\n}\n\nexport interface ChainBalance {\n chain: SupportedChain;\n address: string;\n balance: string;\n symbol: string;\n}\n\nexport interface FeeRates {\n slow: string;\n normal: string;\n fast: string;\n}\n\nexport interface TransactionResult {\n success: boolean;\n txHash?: string;\n from?: string;\n to?: string;\n amount?: string;\n chain?: string;\n network?: string;\n error?: string;\n}\n\nexport interface ZubariWdkServiceConfig {\n /** Network to use (mainnet or testnet) */\n network: 'mainnet' | 'testnet';\n /** API URL for the Zubari backend (required for browser environments) */\n apiUrl?: string;\n /** Force using API even in Node.js (useful for testing) */\n forceApi?: boolean;\n /** Request timeout in milliseconds */\n timeout?: number;\n}\n\n/**\n * Check if we're running in a browser environment\n */\nfunction isBrowser(): boolean {\n return typeof window !== 'undefined' && typeof window.document !== 'undefined';\n}\n\n/**\n * Dynamic import helper that bypasses bundler analysis\n * This ensures the import is truly runtime and not analyzed at build time\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst dynamicImport = new Function('specifier', 'return import(specifier)') as (\n specifier: string\n) => Promise<any>;\n\n/**\n * Check if native WDK modules are available (Node.js only)\n */\nasync function canUseNativeWdk(): Promise<boolean> {\n // Never use native WDK in browser\n if (isBrowser()) {\n return false;\n }\n\n try {\n // Try to dynamically import WDK to check if it's available\n await dynamicImport('@tetherto/wdk');\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * ZubariWdkService - Unified wallet service for browser and Node.js\n *\n * This service automatically routes operations to:\n * - API backend (browser) - using WdkApiClient\n * - Native WDK (Node.js) - using WdkService\n * - Browser derivation (fallback) - using BrowserAddressDerivation\n */\nexport class ZubariWdkService {\n private config: Required<ZubariWdkServiceConfig>;\n private apiClient: WdkApiClient;\n private nativeWdkService: unknown | null = null;\n private initialized = false;\n private useNativeWdk = false;\n\n constructor(config: Partial<ZubariWdkServiceConfig> = {}) {\n this.config = {\n network: config.network || 'testnet',\n apiUrl: config.apiUrl || process.env.NEXT_PUBLIC_API_URL || DEFAULT_API_URL,\n forceApi: config.forceApi ?? false,\n timeout: config.timeout || 30000,\n };\n\n this.apiClient = getWdkApiClient(this.config.apiUrl);\n }\n\n /**\n * Initialize the service and determine the best strategy\n */\n async initialize(): Promise<void> {\n if (this.initialized) return;\n\n // In browser or if forceApi is set, always use API\n if (isBrowser() || this.config.forceApi) {\n this.useNativeWdk = false;\n this.initialized = true;\n return;\n }\n\n // In Node.js, try to use native WDK\n if (await canUseNativeWdk()) {\n try {\n // Use dynamic import helper to bypass bundler analysis\n // This ensures WdkService is never included in browser bundles\n const WdkServiceModule = await dynamicImport('./WdkService');\n const WdkService = WdkServiceModule.WdkService || WdkServiceModule.default;\n this.nativeWdkService = new WdkService({\n network: this.config.network,\n });\n this.useNativeWdk = true;\n } catch (error) {\n console.warn('Failed to initialize native WDK, falling back to API:', error);\n this.useNativeWdk = false;\n }\n }\n\n this.initialized = true;\n }\n\n /**\n * Get the current execution mode\n */\n getMode(): 'api' | 'native' | 'browser-fallback' {\n if (this.useNativeWdk) return 'native';\n if (isBrowser()) return 'api';\n return 'api';\n }\n\n /**\n * Check if running in browser\n */\n isBrowserEnvironment(): boolean {\n return isBrowser();\n }\n\n /**\n * Generate a new BIP-39 seed phrase (12 words)\n */\n async generateSeed(): Promise<string> {\n await this.initialize();\n\n // Try API first (most reliable, uses real WDK)\n try {\n const response = await this.apiClient.generateSeed();\n if (response.success && response.seed) {\n return response.seed;\n }\n } catch (error) {\n console.warn('API seed generation failed:', error);\n }\n\n // Try native WDK\n if (this.useNativeWdk && this.nativeWdkService) {\n try {\n const wdk = this.nativeWdkService as { generateSeedPhrase: () => Promise<string> };\n return await wdk.generateSeedPhrase();\n } catch (error) {\n console.warn('Native WDK seed generation failed:', error);\n }\n }\n\n // Fallback to browser-compatible generation\n return BrowserDerivation.generateSeedPhrase();\n }\n\n /**\n * Validate a BIP-39 seed phrase\n */\n async validateSeed(seed: string): Promise<boolean> {\n await this.initialize();\n\n // Try API first\n try {\n const response = await this.apiClient.validateSeed(seed);\n if (response.success) {\n return response.isValid ?? false;\n }\n } catch (error) {\n console.warn('API seed validation failed:', error);\n }\n\n // Try native WDK\n if (this.useNativeWdk && this.nativeWdkService) {\n try {\n const wdk = this.nativeWdkService as { isValidSeed: (seed: string) => Promise<boolean> };\n return await wdk.isValidSeed(seed);\n } catch (error) {\n console.warn('Native WDK seed validation failed:', error);\n }\n }\n\n // Fallback to browser-compatible validation\n return BrowserDerivation.isValidSeed(seed);\n }\n\n /**\n * Derive address for a specific chain\n */\n async deriveAddress(seed: string, chain: SupportedChain): Promise<ChainAddress> {\n await this.initialize();\n\n const path = this.getDerivationPath(chain);\n\n // Try API first (uses real WDK on backend)\n try {\n const response = await this.apiClient.deriveAddress(seed, chain as NetworkType, this.config.network);\n if (response.success && response.address) {\n return {\n chain,\n address: response.address,\n path: response.path || path,\n };\n }\n } catch (error) {\n console.warn(`API address derivation failed for ${chain}:`, error);\n }\n\n // Try native WDK (Node.js only)\n if (this.useNativeWdk && this.nativeWdkService) {\n try {\n const wdk = this.nativeWdkService as {\n initialize: (seed: string) => Promise<void>;\n deriveAddress: (chain: SupportedChain) => Promise<ChainAddress>;\n };\n await wdk.initialize(seed);\n return await wdk.deriveAddress(chain);\n } catch (error) {\n console.warn(`Native WDK address derivation failed for ${chain}:`, error);\n }\n }\n\n // Fallback to browser-compatible derivation\n return this.deriveBrowserAddress(seed, chain);\n }\n\n /**\n * Derive addresses for all supported chains\n */\n async deriveAllAddresses(seed: string): Promise<MultiChainAddresses> {\n await this.initialize();\n\n // Try API first (uses real WDK on backend)\n try {\n const response = await this.apiClient.deriveAllAddresses(seed, this.config.network);\n if (response.success && response.addresses) {\n return {\n ethereum: response.addresses.ethereum || null,\n bitcoin: response.addresses.bitcoin || null,\n ton: response.addresses.ton || null,\n tron: response.addresses.tron || null,\n solana: response.addresses.solana || null,\n spark: response.addresses.spark || null,\n };\n }\n } catch (error) {\n console.warn('API address derivation failed:', error);\n }\n\n // Try native WDK (Node.js only)\n if (this.useNativeWdk && this.nativeWdkService) {\n try {\n const wdk = this.nativeWdkService as {\n initialize: (seed: string) => Promise<void>;\n deriveAllAddresses: () => Promise<MultiChainAddresses>;\n };\n await wdk.initialize(seed);\n return await wdk.deriveAllAddresses();\n } catch (error) {\n console.warn('Native WDK multi-chain derivation failed:', error);\n }\n }\n\n // Fallback to browser-compatible derivation\n return this.deriveAllBrowserAddresses(seed);\n }\n\n /**\n * Get balances for all chains\n */\n async getAllBalances(seed: string): Promise<Record<string, ChainBalance | null>> {\n await this.initialize();\n\n // This always uses API as it requires blockchain RPC calls\n try {\n const response = await fetch(`${this.config.apiUrl}/api/wallets/wdk/balances`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ seed, network: this.config.network }),\n });\n\n if (response.ok) {\n const data = await response.json();\n if (data.success) {\n return data.balances;\n }\n }\n } catch (error) {\n console.warn('Failed to fetch balances:', error);\n }\n\n return {};\n }\n\n /**\n * Get fee rates for a chain\n */\n async getFeeRates(seed: string, chain: SupportedChain): Promise<FeeRates> {\n await this.initialize();\n\n try {\n const response = await fetch(`${this.config.apiUrl}/api/wallets/wdk/fee-rates`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ seed, chain, network: this.config.network }),\n });\n\n if (response.ok) {\n const data = await response.json();\n if (data.success && data.feeRates) {\n return data.feeRates;\n }\n }\n } catch (error) {\n console.warn(`Failed to fetch fee rates for ${chain}:`, error);\n }\n\n return { slow: '0', normal: '0', fast: '0' };\n }\n\n /**\n * Estimate transaction fee\n */\n async estimateFee(\n seed: string,\n chain: SupportedChain,\n to: string,\n amount: string\n ): Promise<{ fee: string; symbol: string }> {\n await this.initialize();\n\n try {\n const response = await fetch(`${this.config.apiUrl}/api/wallets/wdk/estimate-fee`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ seed, chain, to, amount, network: this.config.network }),\n });\n\n if (response.ok) {\n const data = await response.json();\n if (data.success) {\n return { fee: data.fee, symbol: data.symbol };\n }\n }\n } catch (error) {\n console.warn(`Failed to estimate fee for ${chain}:`, error);\n }\n\n return { fee: '0', symbol: this.getChainSymbol(chain) };\n }\n\n /**\n * Send a transaction\n */\n async sendTransaction(\n seed: string,\n chain: SupportedChain,\n to: string,\n amount: string\n ): Promise<TransactionResult> {\n await this.initialize();\n\n try {\n const response = await fetch(`${this.config.apiUrl}/api/wallets/wdk/send`, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ seed, chain, to, amount, network: this.config.network }),\n });\n\n if (response.ok) {\n const data = await response.json();\n return {\n success: data.success,\n txHash: data.txHash,\n from: data.from,\n to: data.to,\n amount: data.amount,\n chain: data.chain,\n network: data.network,\n };\n }\n\n const errorData = await response.json().catch(() => ({}));\n return {\n success: false,\n error: errorData.error || `HTTP ${response.status}`,\n };\n } catch (error) {\n return {\n success: false,\n error: error instanceof Error ? error.message : 'Transaction failed',\n };\n }\n }\n\n /**\n * Get the network configuration\n */\n getNetwork(): 'mainnet' | 'testnet' {\n return this.config.network;\n }\n\n /**\n * Get API URL\n */\n getApiUrl(): string {\n return this.config.apiUrl;\n }\n\n // ==========================================\n // Private Helper Methods\n // ==========================================\n\n private getDerivationPath(chain: SupportedChain): string {\n const paths: Record<SupportedChain, string> = {\n bitcoin: this.config.network === 'testnet' ? \"m/84'/1'/0'/0/0\" : \"m/84'/0'/0'/0/0\",\n ethereum: \"m/44'/60'/0'/0/0\",\n ton: \"m/44'/607'/0'/0'/0'\",\n tron: \"m/44'/195'/0'/0/0\",\n solana: \"m/44'/501'/0'/0'\",\n spark: \"m/44'/998'/0'/0/0\",\n };\n return paths[chain];\n }\n\n private getChainSymbol(chain: SupportedChain): string {\n const symbols: Record<SupportedChain, string> = {\n ethereum: 'ETH',\n bitcoin: 'BTC',\n ton: 'TON',\n tron: 'TRX',\n solana: 'SOL',\n spark: 'SAT',\n };\n return symbols[chain];\n }\n\n /**\n * Derive address using browser-compatible libraries\n */\n private async deriveBrowserAddress(seed: string, chain: SupportedChain): Promise<ChainAddress> {\n const path = this.getDerivationPath(chain);\n\n try {\n let address: string;\n\n switch (chain) {\n case 'ethereum':\n address = BrowserDerivation.deriveEthereumAddress(seed);\n break;\n case 'bitcoin':\n address = BrowserDerivation.deriveBitcoinAddress(seed, this.config.network);\n break;\n case 'tron':\n address = BrowserDerivation.deriveTronAddress(seed);\n break;\n case 'spark':\n address = BrowserDerivation.deriveSparkAddress(seed, this.config.network);\n break;\n case 'solana':\n address = await BrowserDerivation.deriveSolanaAddress(seed);\n break;\n case 'ton':\n address = await BrowserDerivation.deriveTonAddress(seed);\n break;\n default:\n throw new Error(`Unsupported chain: ${chain}`);\n }\n\n return { chain, address, path };\n } catch (error) {\n console.error(`Browser derivation failed for ${chain}:`, error);\n throw error;\n }\n }\n\n /**\n * Derive all addresses using browser-compatible libraries\n */\n private async deriveAllBrowserAddresses(seed: string): Promise<MultiChainAddresses> {\n return BrowserDerivation.deriveAllAddresses(seed, this.config.network);\n }\n}\n\n// ==========================================\n// Factory Functions\n// ==========================================\n\nlet defaultService: ZubariWdkService | null = null;\n\n/**\n * Get or create the default ZubariWdkService instance\n */\nexport function getZubariWdkService(config?: Partial<ZubariWdkServiceConfig>): ZubariWdkService {\n if (!defaultService || (config && config.network !== defaultService.getNetwork())) {\n defaultService = new ZubariWdkService(config);\n }\n return defaultService;\n}\n\n/**\n * Create a new ZubariWdkService instance\n */\nexport function createZubariWdkService(config?: Partial<ZubariWdkServiceConfig>): ZubariWdkService {\n return new ZubariWdkService(config);\n}\n\n/**\n * Check if the current environment is a browser\n */\nexport { isBrowser };\n","/**\n * Transaction Service for Zubari SDK\n *\n * Provides multi-chain transaction capabilities using Tether WDK.\n * Supports Ethereum, Bitcoin, Solana, TON, TRON, and Spark (Lightning).\n *\n * @see https://docs.wallet.tether.io/\n */\n\nimport type { NetworkType, TxResult } from '../types';\n\n// Dynamic imports for ESM modules (WDK packages are ESM-only)\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WdkManager: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WalletManagerBtc: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WalletManagerEvm: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WalletManagerSolana: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WalletManagerTon: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WalletManagerTron: any;\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nlet WalletManagerSpark: any;\n\nlet wdkLoaded = false;\nlet wdkLoadError: Error | null = null;\n\n/**\n * CoinGecko IDs for each supported chain\n */\nconst COINGECKO_IDS: Record<NetworkType, string> = {\n ethereum: 'ethereum',\n bitcoin: 'bitcoin',\n ton: 'the-open-network',\n tron: 'tron',\n solana: 'solana',\n spark: 'bitcoin', // Spark uses BTC\n};\n\n/**\n * Price cache to avoid excessive API calls\n */\ninterface PriceCache {\n prices: Record<string, number>;\n timestamp: number;\n}\n\nlet priceCache: PriceCache | null = null;\nconst PRICE_CACHE_TTL = 60000; // 1 minute cache\n\n/**\n * Fetch USD prices for all supported chains from CoinGecko\n */\nasync function fetchPrices(): Promise<Record<string, number>> {\n // Check cache\n if (priceCache && Date.now() - priceCache.timestamp < PRICE_CACHE_TTL) {\n return priceCache.prices;\n }\n\n const ids = Object.values(COINGECKO_IDS).filter((v, i, a) => a.indexOf(v) === i).join(',');\n\n try {\n const response = await fetch(\n `https://api.coingecko.com/api/v3/simple/price?ids=${ids}&vs_currencies=usd`,\n {\n headers: { 'Accept': 'application/json' },\n }\n );\n\n if (response.ok) {\n const data = await response.json();\n const prices: Record<string, number> = {};\n\n for (const [chain, geckoId] of Object.entries(COINGECKO_IDS)) {\n prices[chain] = data[geckoId]?.usd || 0;\n }\n\n // Update cache\n priceCache = { prices, timestamp: Date.now() };\n return prices;\n }\n } catch (error) {\n console.warn('Failed to fetch prices from CoinGecko:', error);\n }\n\n // Return cached prices if available, otherwise empty\n return priceCache?.prices || {};\n}\n\n/**\n * Get USD price for a specific chain\n */\nasync function getPriceForChain(chain: NetworkType): Promise<number> {\n const prices = await fetchPrices();\n return prices[chain] || 0;\n}\n\n/**\n * Dynamic import helper that bypasses TypeScript's CommonJS transformation\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nconst dynamicImport = new Function('specifier', 'return import(specifier)') as (\n specifier: string\n) => Promise<any>;\n\n/**\n * Dynamically load WDK modules (they are ESM-only)\n */\nasync function loadWdkModules(): Promise<void> {\n if (wdkLoaded) return;\n if (wdkLoadError) throw wdkLoadError;\n\n try {\n const [wdk, btc, evm, solana, ton, tron, spark] = await Promise.all([\n dynamicImport('@tetherto/wdk'),\n dynamicImport('@tetherto/wdk-wallet-btc'),\n dynamicImport('@tetherto/wdk-wallet-evm'),\n dynamicImport('@tetherto/wdk-wallet-solana'),\n dynamicImport('@tetherto/wdk-wallet-ton'),\n dynamicImport('@tetherto/wdk-wallet-tron'),\n dynamicImport('@tetherto/wdk-wallet-spark'),\n ]);\n\n WdkManager = wdk.default;\n WalletManagerBtc = btc.default;\n WalletManagerEvm = evm.default;\n WalletManagerSolana = solana.default;\n WalletManagerTon = ton.default;\n WalletManagerTron = tron.default;\n WalletManagerSpark = spark.default;\n wdkLoaded = true;\n } catch (error) {\n wdkLoadError = error instanceof Error ? error : new Error('Failed to load WDK modules');\n console.error('Failed to load WDK modules:', error);\n throw wdkLoadError;\n }\n}\n\n/**\n * Transaction parameters for sending\n */\nexport interface TransactionParams {\n /** Recipient address */\n to: string;\n /** Amount to send (in human-readable format, e.g., \"0.1\") */\n amount: string;\n /** Token address (optional, for ERC-20/SPL tokens) */\n token?: string;\n /** Transaction memo/message (for chains that support it) */\n memo?: string;\n /** Fee priority: 'slow' | 'medium' | 'fast' */\n feePriority?: 'slow' | 'medium' | 'fast';\n /** Custom gas limit (EVM chains) */\n gasLimit?: string;\n /** Custom gas price (EVM chains) */\n gasPrice?: string;\n}\n\n/**\n * Transaction result with detailed information\n */\nexport interface TransactionResult {\n /** Transaction hash */\n hash: string;\n /** Network/chain */\n network: NetworkType;\n /** Transaction status */\n status: 'pending' | 'confirmed' | 'failed';\n /** Block number (when confirmed) */\n blockNumber?: number;\n /** Gas used (EVM chains) */\n gasUsed?: string;\n /** Fee paid */\n fee?: string;\n /** Explorer URL */\n explorerUrl?: string;\n /** Error message if failed */\n error?: string;\n /** Timestamp */\n timestamp: number;\n}\n\n/**\n * Transaction history item\n */\nexport interface TransactionHistoryItem {\n hash: string;\n network: NetworkType;\n type: 'send' | 'receive' | 'swap' | 'contract';\n from: string;\n to: string;\n amount: string;\n token?: string;\n fee?: string;\n status: 'pending' | 'confirmed' | 'failed';\n timestamp: number;\n blockNumber?: number;\n}\n\n/**\n * Fee estimate for a transaction\n */\nexport interface FeeEstimate {\n slow: {\n fee: string;\n estimatedTime: string; // e.g., \"~30 min\"\n };\n medium: {\n fee: string;\n estimatedTime: string; // e.g., \"~5 min\"\n };\n fast: {\n fee: string;\n estimatedTime: string; // e.g., \"~1 min\"\n };\n}\n\n/**\n * Transaction Service configuration\n */\nexport interface TransactionServiceConfig {\n network: 'mainnet' | 'testnet';\n rpcUrls?: Partial<Record<NetworkType, string>>;\n}\n\n// Default RPC URLs\nconst DEFAULT_RPC_URLS = {\n mainnet: {\n ethereum: 'https://eth.llamarpc.com',\n bitcoin: '', // Uses Electrum\n solana: 'https://api.mainnet-beta.solana.com',\n ton: 'https://toncenter.com/api/v2/jsonRPC',\n tron: 'https://api.trongrid.io',\n spark: '', // Uses Spark network\n },\n testnet: {\n ethereum: 'https://ethereum-sepolia-rpc.publicnode.com',\n bitcoin: '', // Uses Electrum testnet\n solana: 'https://api.devnet.solana.com',\n ton: 'https://testnet.toncenter.com/api/v2/jsonRPC',\n tron: 'https://api.shasta.trongrid.io',\n spark: '', // Uses Spark testnet\n },\n};\n\n// Explorer URLs\nconst EXPLORER_URLS = {\n mainnet: {\n ethereum: 'https://etherscan.io/tx/',\n bitcoin: 'https://mempool.space/tx/',\n solana: 'https://solscan.io/tx/',\n ton: 'https://tonscan.org/tx/',\n tron: 'https://tronscan.org/#/transaction/',\n spark: 'https://spark.info/tx/',\n },\n testnet: {\n ethereum: 'https://sepolia.etherscan.io/tx/',\n bitcoin: 'https://mempool.space/testnet/tx/',\n solana: 'https://solscan.io/tx/?cluster=devnet&tx=',\n ton: 'https://testnet.tonscan.org/tx/',\n tron: 'https://shasta.tronscan.org/#/transaction/',\n spark: 'https://testnet.spark.info/tx/',\n },\n};\n\n/**\n * Transaction Service\n *\n * Provides multi-chain transaction capabilities:\n * - Send native tokens (ETH, BTC, SOL, TON, TRX)\n * - Send ERC-20/SPL tokens\n * - Fee estimation\n * - Transaction history\n */\nexport class TransactionService {\n private seed: string | null = null;\n private config: TransactionServiceConfig;\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private wallets: Partial<Record<NetworkType, any>> = {};\n\n constructor(config: Partial<TransactionServiceConfig> = {}) {\n this.config = {\n network: config.network || 'testnet',\n rpcUrls: config.rpcUrls,\n };\n }\n\n /**\n * Ensure WDK modules are loaded\n */\n private async ensureLoaded(): Promise<void> {\n await loadWdkModules();\n }\n\n /**\n * Get RPC URL for a chain\n */\n private getRpcUrl(chain: NetworkType): string {\n const networkUrls = DEFAULT_RPC_URLS[this.config.network];\n\n if (this.config.rpcUrls?.[chain]) {\n return this.config.rpcUrls[chain]!;\n }\n\n return networkUrls[chain as keyof typeof networkUrls] || '';\n }\n\n /**\n * Get explorer URL for a transaction\n */\n getExplorerUrl(chain: NetworkType, txHash: string): string {\n const explorers = EXPLORER_URLS[this.config.network];\n const baseUrl = explorers[chain as keyof typeof explorers] || '';\n return `${baseUrl}${txHash}`;\n }\n\n /**\n * Initialize the service with a seed phrase\n */\n async initialize(seed: string): Promise<void> {\n await this.ensureLoaded();\n\n if (!WdkManager.isValidSeed(seed)) {\n throw new Error('Invalid seed phrase');\n }\n\n this.seed = seed;\n this.wallets = {};\n }\n\n /**\n * Check if service is initialized\n */\n isInitialized(): boolean {\n return this.seed !== null;\n }\n\n /**\n * Get or create wallet instance for a specific chain\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private async getWallet(chain: NetworkType): Promise<any> {\n if (!this.seed) {\n throw new Error('TransactionService not initialized. Call initialize() first.');\n }\n\n // Return cached wallet if exists\n if (this.wallets[chain]) {\n return this.wallets[chain];\n }\n\n const isTestnet = this.config.network === 'testnet';\n\n try {\n switch (chain) {\n case 'ethereum': {\n const rpcUrl = this.getRpcUrl('ethereum');\n const wallet = new WalletManagerEvm(this.seed, { provider: rpcUrl });\n this.wallets[chain] = wallet;\n return wallet;\n }\n\n case 'bitcoin': {\n const wallet = new WalletManagerBtc(this.seed, {\n network: isTestnet ? 'testnet' : 'bitcoin',\n });\n this.wallets[chain] = wallet;\n return wallet;\n }\n\n case 'solana': {\n const rpcUrl = this.getRpcUrl('solana');\n const wallet = new WalletManagerSolana(this.seed, {\n rpcUrl,\n });\n this.wallets[chain] = wallet;\n return wallet;\n }\n\n case 'ton': {\n const url = this.getRpcUrl('ton');\n const wallet = new WalletManagerTon(this.seed, {\n tonClient: { url },\n });\n this.wallets[chain] = wallet;\n return wallet;\n }\n\n case 'tron': {\n const fullHost = this.getRpcUrl('tron');\n const wallet = new WalletManagerTron(this.seed, {\n provider: fullHost,\n });\n this.wallets[chain] = wallet;\n return wallet;\n }\n\n case 'spark': {\n const wallet = new WalletManagerSpark(this.seed, {\n network: isTestnet ? 'TESTNET' : 'MAINNET',\n });\n this.wallets[chain] = wallet;\n return wallet;\n }\n\n default:\n throw new Error(`Unsupported chain: ${chain}`);\n }\n } catch (error) {\n console.error(`Failed to initialize ${chain} wallet:`, error);\n throw error;\n }\n }\n\n /**\n * Estimate transaction fee\n */\n async estimateFee(chain: NetworkType, params: TransactionParams): Promise<FeeEstimate> {\n const wallet = await this.getWallet(chain);\n\n try {\n // Get fee rates from the wallet\n const feeRates = await wallet.getFeeRates();\n\n // Format based on chain type\n if (chain === 'ethereum') {\n return {\n slow: {\n fee: `${feeRates.slow || '0'} Gwei`,\n estimatedTime: '~10 min',\n },\n medium: {\n fee: `${feeRates.medium || feeRates.standard || '0'} Gwei`,\n estimatedTime: '~3 min',\n },\n fast: {\n fee: `${feeRates.fast || feeRates.high || '0'} Gwei`,\n estimatedTime: '~30 sec',\n },\n };\n } else if (chain === 'bitcoin') {\n return {\n slow: {\n fee: `${feeRates.slow || feeRates.low || '0'} sat/vB`,\n estimatedTime: '~60 min',\n },\n medium: {\n fee: `${feeRates.medium || feeRates.normal || '0'} sat/vB`,\n estimatedTime: '~30 min',\n },\n fast: {\n fee: `${feeRates.fast || feeRates.high || '0'} sat/vB`,\n estimatedTime: '~10 min',\n },\n };\n } else {\n // Generic format for other chains\n return {\n slow: {\n fee: String(feeRates.slow || feeRates.low || '0'),\n estimatedTime: '~10 min',\n },\n medium: {\n fee: String(feeRates.medium || feeRates.standard || '0'),\n estimatedTime: '~3 min',\n },\n fast: {\n fee: String(feeRates.fast || feeRates.high || '0'),\n estimatedTime: '~1 min',\n },\n };\n }\n } catch (error) {\n console.error(`Error estimating fee for ${chain}:`, error);\n // Return default fees on error\n return {\n slow: { fee: '0', estimatedTime: 'Unknown' },\n medium: { fee: '0', estimatedTime: 'Unknown' },\n fast: { fee: '0', estimatedTime: 'Unknown' },\n };\n }\n }\n\n /**\n * Send a transaction\n */\n async send(chain: NetworkType, params: TransactionParams): Promise<TransactionResult> {\n const wallet = await this.getWallet(chain);\n const account = await wallet.getAccount(0);\n\n const timestamp = Date.now();\n\n try {\n // Build and send transaction based on chain\n let txHash: string;\n\n if (params.token) {\n // Token transfer (ERC-20, SPL, TRC-20, etc.)\n txHash = await account.sendToken(params.to, params.amount, params.token, {\n memo: params.memo,\n feePriority: params.feePriority || 'medium',\n });\n } else {\n // Native token transfer\n txHash = await account.send(params.to, params.amount, {\n memo: params.memo,\n feePriority: params.feePriority || 'medium',\n gasLimit: params.gasLimit,\n gasPrice: params.gasPrice,\n });\n }\n\n return {\n hash: txHash,\n network: chain,\n status: 'pending',\n explorerUrl: this.getExplorerUrl(chain, txHash),\n timestamp,\n };\n } catch (error) {\n const errorMessage = error instanceof Error ? error.message : 'Transaction failed';\n console.error(`Transaction failed on ${chain}:`, error);\n\n return {\n hash: '',\n network: chain,\n status: 'failed',\n error: errorMessage,\n timestamp,\n };\n }\n }\n\n /**\n * Get transaction status\n */\n async getTransactionStatus(chain: NetworkType, txHash: string): Promise<TransactionResult> {\n const wallet = await this.getWallet(chain);\n\n try {\n const tx = await wallet.getTransaction(txHash);\n\n return {\n hash: txHash,\n network: chain,\n status: tx.confirmed ? 'confirmed' : 'pending',\n blockNumber: tx.blockNumber,\n gasUsed: tx.gasUsed?.toString(),\n fee: tx.fee?.toString(),\n explorerUrl: this.getExplorerUrl(chain, txHash),\n timestamp: tx.timestamp || Date.now(),\n };\n } catch (error) {\n console.error(`Error getting transaction status for ${txHash}:`, error);\n return {\n hash: txHash,\n network: chain,\n status: 'pending',\n explorerUrl: this.getExplorerUrl(chain, txHash),\n timestamp: Date.now(),\n };\n }\n }\n\n /**\n * Get transaction history for an address\n */\n async getTransactionHistory(\n chain: NetworkType,\n limit: number = 10\n ): Promise<TransactionHistoryItem[]> {\n const wallet = await this.getWallet(chain);\n const account = await wallet.getAccount(0);\n\n try {\n const history = await account.getTransactions({ limit });\n\n return history.map((tx: any) => ({\n hash: tx.hash || tx.txHash,\n network: chain,\n type: tx.type || (tx.from === account.address ? 'send' : 'receive'),\n from: tx.from,\n to: tx.to,\n amount: tx.amount || tx.value,\n token: tx.token,\n fee: tx.fee?.toString(),\n status: tx.confirmed ? 'confirmed' : 'pending',\n timestamp: tx.timestamp || Date.now(),\n blockNumber: tx.blockNumber,\n }));\n } catch (error) {\n console.error(`Error getting transaction history for ${chain}:`, error);\n return [];\n }\n }\n\n /**\n * Get balance for a specific chain\n */\n async getBalance(chain: NetworkType): Promise<{ balance: string; balanceUsd: number }> {\n const wallet = await this.getWallet(chain);\n const account = await wallet.getAccount(0);\n\n try {\n const balance = await account.getBalance();\n const balanceStr = balance.toString();\n\n // Fetch USD price for this chain\n const priceUsd = await getPriceForChain(chain);\n const balanceNum = parseFloat(balanceStr) || 0;\n const balanceUsd = balanceNum * priceUsd;\n\n return {\n balance: balanceStr,\n balanceUsd,\n };\n } catch (error) {\n console.error(`Error getting balance for ${chain}:`, error);\n return { balance: '0', balanceUsd: 0 };\n }\n }\n\n /**\n * Get the current network configuration\n */\n getNetwork(): 'mainnet' | 'testnet' {\n return this.config.network;\n }\n\n /**\n * Clean up and dispose of wallet instances\n */\n dispose(): void {\n for (const wallet of Object.values(this.wallets)) {\n if (wallet && typeof wallet.dispose === 'function') {\n try {\n wallet.dispose();\n } catch {\n // Ignore dispose errors\n }\n }\n }\n this.wallets = {};\n this.seed = null;\n }\n}\n\n// Singleton instance\nlet transactionServiceInstance: TransactionService | null = null;\n\n/**\n * Get or create the Transaction service singleton\n */\nexport function getTransactionService(config?: Partial<TransactionServiceConfig>): TransactionService {\n if (!transactionServiceInstance || (config && config.network !== transactionServiceInstance.getNetwork())) {\n transactionServiceInstance = new TransactionService(config);\n }\n return transactionServiceInstance;\n}\n\n/**\n * Create a new Transaction service instance (non-singleton)\n */\nexport function createTransactionService(config?: Partial<TransactionServiceConfig>): TransactionService {\n return new TransactionService(config);\n}\n"]}
|