@tcswap/wallet-keystore 4.1.15

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/index.cjs ADDED
@@ -0,0 +1,4 @@
1
+ var H=Object.create;var{getPrototypeOf:_,defineProperty:s,getOwnPropertyNames:p,getOwnPropertyDescriptor:v}=Object,P=Object.prototype.hasOwnProperty;var A=(n,l,t)=>{t=n!=null?H(_(n)):{};let a=l||!n||!n.__esModule?s(t,"default",{value:n,enumerable:!0}):t;for(let T of p(n))if(!P.call(a,T))s(a,T,{get:()=>n[T],enumerable:!0});return a},f=new WeakMap,x=(n)=>{var l=f.get(n),t;if(l)return l;if(l=s({},"__esModule",{value:!0}),n&&typeof n==="object"||typeof n==="function")p(n).map((a)=>!P.call(l,a)&&s(l,a,{get:()=>n[a],enumerable:!(t=v(n,a))||t.enumerable}));return f.set(n,l),l};var X=(n,l)=>{for(var t in l)s(n,t,{get:l[t],enumerable:!0,configurable:!0,set:(a)=>l[t]=()=>a})};var j={};X(j,{validatePhrase:()=>O,keystoreWallet:()=>F,generatePhrase:()=>w,encryptToKeyStore:()=>R,decryptFromKeystore:()=>g,createKeystoreWallet:()=>N,KEYSTORE_SUPPORTED_CHAINS:()=>Y});module.exports=x(j);var o=require("@tcswap/helpers"),S=require("@tcswap/wallet-core");var e=require("node:crypto"),m=require("@scure/bip39"),E=require("@scure/bip39/wordlists/english.js");async function K(n){let l=await import("blakejs"),{blake2bFinal:t,blake2bInit:a,blake2bUpdate:T}=l?.default||l,r=n instanceof Buffer?n:Buffer.from(n,"hex"),u=a(32);return T(u,r),Array.from(t(u)).map((C)=>C<16?`0${C.toString(16)}`:C.toString(16)).join("")}async function R(n,l){let a=e.randomBytes(16),T=e.randomBytes(32),r={c:262144,dklen:32,prf:"hmac-sha256",salt:T.toString("hex")},u=e.pbkdf2Sync(l,T,r.c,r.dklen,"sha256"),C=e.createCipheriv("aes-128-ctr",u.subarray(0,16),a),c=Buffer.concat([C.update(Buffer.from(n,"utf8")),C.final()]),i=Buffer.concat([u.subarray(16,32),Buffer.from(c)]),h=await K(i);return{crypto:{cipher:"aes-128-ctr",cipherparams:{iv:a.toString("hex")},ciphertext:c.toString("hex"),kdf:"pbkdf2",kdfparams:r,mac:h},meta:"xchain-keystore",version:1}}function w(n=12){return m.generateMnemonic(E.wordlist,n===12?128:256)}function O(n){return m.validateMnemonic(n,E.wordlist)}async function g(n,l){let{USwapError:t}=await import("@tcswap/helpers");switch(n.version){case 1:{let a=n.crypto.kdfparams,T=Buffer.from(a.salt,"hex"),r=e.pbkdf2Sync(l,T,a.c,a.dklen,"sha256"),u=Buffer.from(n.crypto.ciphertext,"hex"),C=Buffer.concat([r.subarray(16,32),u]);if(await K(C)!==n.crypto.mac)throw new t("wallet_keystore_invalid_password");let i=e.createDecipheriv(n.crypto.cipher,r.subarray(0,16),Buffer.from(n.crypto.cipherparams.iv,"hex"));return Buffer.concat([i.update(u),i.final()]).toString("utf8")}default:throw new t("wallet_keystore_unsupported_version")}}var F=S.createWallet({connect:({addChain:n})=>async function(t,a,T){let r=await N({chains:t,derivationPathMapOrIndex:T,phrase:a});for(let u of Object.values(r))n({...u,chain:u.chain,walletType:o.WalletOption.KEYSTORE});return!0},name:"connectKeystore",supportedChains:[...o.EVMChains,...o.UTXOChains,...o.CosmosChains.filter((n)=>n!==o.Chain.Harbor),...o.SubstrateChains,o.Chain.Cardano,o.Chain.Polkadot,o.Chain.Chainflip,o.Chain.Ripple,o.Chain.Solana,o.Chain.Sui,o.Chain.Ton,o.Chain.Tron,o.Chain.Near],walletType:o.WalletOption.KEYSTORE}),Y=S.getWalletSupportedChains(F);async function N({chains:n,phrase:l,derivationPathMapOrIndex:t}){let a=o.filterSupportedChains({chains:n,supportedChains:Y,walletType:o.WalletOption.KEYSTORE});return(await Promise.all(a.map(async(r)=>{let{getToolbox:u}=await import("@tcswap/toolboxes"),C=typeof t==="number"?t:0,c=t&&typeof t==="object"?t[r]:void 0,i=o.NetworkDerivationPath[r].slice(0,r===o.Chain.Solana?4:5),h=c||o.updateDerivationPath(i,{index:C}),W=await u(r,{derivationPath:h,phrase:l}),y=await W.getAddress()||"";return{...W,address:y,chain:r}}))).reduce((r,u)=>{return r[u.chain]=u,r},{})}
2
+
3
+ //# debugId=9B5BED4A73F0141D64756E2164756E21
4
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1,11 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/index.ts", "../src/helpers.ts"],
4
+ "sourcesContent": [
5
+ "import {\n Chain,\n CosmosChains,\n type DerivationPathArray,\n EVMChains,\n filterSupportedChains,\n NetworkDerivationPath,\n SubstrateChains,\n UTXOChains,\n updateDerivationPath,\n WalletOption,\n} from \"@tcswap/helpers\";\nimport type { FullWallet } from \"@tcswap/toolboxes\";\nimport { createWallet, getWalletSupportedChains } from \"@tcswap/wallet-core\";\n\nexport {\n decryptFromKeystore,\n encryptToKeyStore,\n generatePhrase,\n type Keystore,\n validatePhrase,\n} from \"./helpers\";\n\nexport const keystoreWallet = createWallet({\n connect: ({ addChain }) =>\n async function connectKeystore(\n chains: Chain[],\n phrase: string,\n derivationPathMapOrIndex?: { [chain in Chain]?: DerivationPathArray } | number,\n ) {\n const wallets = await createKeystoreWallet({ chains, derivationPathMapOrIndex, phrase });\n\n for (const wallet of Object.values(wallets)) {\n addChain({ ...wallet, chain: wallet.chain, walletType: WalletOption.KEYSTORE });\n }\n\n return true;\n },\n name: \"connectKeystore\",\n supportedChains: [\n ...EVMChains,\n ...UTXOChains,\n ...CosmosChains.filter((chain) => chain !== Chain.Harbor),\n ...SubstrateChains,\n Chain.Cardano,\n Chain.Polkadot,\n Chain.Chainflip,\n Chain.Ripple,\n Chain.Solana,\n Chain.Sui,\n Chain.Ton,\n Chain.Tron,\n Chain.Near,\n ],\n walletType: WalletOption.KEYSTORE,\n});\n\nexport const KEYSTORE_SUPPORTED_CHAINS = getWalletSupportedChains(keystoreWallet);\n\nexport async function createKeystoreWallet<T extends Chain[]>({\n chains,\n phrase,\n derivationPathMapOrIndex,\n}: {\n chains: T;\n phrase: string;\n derivationPathMapOrIndex?: { [chain in Chain]?: DerivationPathArray } | number;\n}) {\n const filteredChains = filterSupportedChains({\n chains,\n supportedChains: KEYSTORE_SUPPORTED_CHAINS,\n walletType: WalletOption.KEYSTORE,\n });\n\n const wallets = await Promise.all(\n filteredChains.map(async (chain) => {\n const { getToolbox } = await import(\"@tcswap/toolboxes\");\n\n const derivationPathIndex = typeof derivationPathMapOrIndex === \"number\" ? derivationPathMapOrIndex : 0;\n const derivationPathFromMap =\n derivationPathMapOrIndex && typeof derivationPathMapOrIndex === \"object\"\n ? derivationPathMapOrIndex[chain]\n : undefined;\n\n const derivationArrayToUpdate = NetworkDerivationPath[chain].slice(\n 0,\n chain === Chain.Solana ? 4 : 5,\n ) as DerivationPathArray;\n\n const derivationPath: DerivationPathArray =\n derivationPathFromMap || updateDerivationPath(derivationArrayToUpdate, { index: derivationPathIndex });\n\n const toolbox = await getToolbox(chain, { derivationPath, phrase });\n const address = (await toolbox.getAddress()) || \"\";\n const wallet = { ...toolbox, address, chain };\n\n return wallet;\n }),\n );\n\n return wallets.reduce(\n (acc, wallet) => {\n acc[wallet.chain as T[number]] = wallet as FullWallet[T[number]];\n return acc;\n },\n {} as { [key in T[number]]: FullWallet[key] },\n );\n}\n",
6
+ "/**\n * Modifications © 2025 Horizontal Systems.\n */\n\nimport { createCipheriv, createDecipheriv, pbkdf2Sync, randomBytes } from \"node:crypto\";\nimport { generateMnemonic, validateMnemonic } from \"@scure/bip39\";\nimport { wordlist } from \"@scure/bip39/wordlists/english.js\";\n\nexport type Keystore = {\n version: number;\n meta: string;\n crypto: {\n cipher: string;\n cipherparams: { iv: string };\n ciphertext: string;\n kdf: string;\n kdfparams: { prf: string; dklen: number; salt: string; c: number };\n mac: string;\n };\n};\n\nasync function blake256(initData: Buffer | string) {\n const blakeModule = await import(\"blakejs\");\n const { blake2bFinal, blake2bInit, blake2bUpdate } = blakeModule?.default || blakeModule;\n const data = initData instanceof Buffer ? initData : Buffer.from(initData as string, \"hex\");\n\n const context = blake2bInit(32);\n blake2bUpdate(context, data);\n\n return Array.from(blake2bFinal(context))\n .map((byte) => (byte < 0x10 ? `0${byte.toString(16)}` : byte.toString(16)))\n .join(\"\");\n}\n\nexport async function encryptToKeyStore(phrase: string, password: string) {\n const cipher = \"aes-128-ctr\";\n const iv = randomBytes(16);\n const salt = randomBytes(32);\n const kdfParams = { c: 262144, dklen: 32, prf: \"hmac-sha256\", salt: salt.toString(\"hex\") };\n\n const derivedKey = pbkdf2Sync(password, salt, kdfParams.c, kdfParams.dklen, \"sha256\");\n const cipherIV = createCipheriv(cipher, derivedKey.subarray(0, 16), iv);\n const ciphertext = Buffer.concat([cipherIV.update(Buffer.from(phrase, \"utf8\")), cipherIV.final()]);\n const initData = Buffer.concat([derivedKey.subarray(16, 32), Buffer.from(ciphertext)]);\n const mac = await blake256(initData);\n\n return {\n crypto: {\n cipher,\n cipherparams: { iv: iv.toString(\"hex\") },\n ciphertext: ciphertext.toString(\"hex\"),\n kdf: \"pbkdf2\",\n kdfparams: kdfParams,\n mac,\n },\n meta: \"xchain-keystore\",\n version: 1,\n };\n}\n\nexport function generatePhrase(size: 12 | 24 = 12) {\n return generateMnemonic(wordlist, size === 12 ? 128 : 256);\n}\n\nexport function validatePhrase(phrase: string) {\n return validateMnemonic(phrase, wordlist);\n}\n\nexport async function decryptFromKeystore(keystore: Keystore, password: string) {\n const { USwapError } = await import(\"@tcswap/helpers\");\n\n switch (keystore.version) {\n case 1: {\n const kdfParams = keystore.crypto.kdfparams;\n const salt = Buffer.from(kdfParams.salt, \"hex\");\n const derivedKey = pbkdf2Sync(password, salt, kdfParams.c, kdfParams.dklen, \"sha256\");\n\n const ciphertext = Buffer.from(keystore.crypto.ciphertext, \"hex\");\n const initData = Buffer.concat([derivedKey.subarray(16, 32), ciphertext]);\n const mac = await blake256(initData);\n\n if (mac !== keystore.crypto.mac) {\n throw new USwapError(\"wallet_keystore_invalid_password\");\n }\n\n const decipher = createDecipheriv(\n keystore.crypto.cipher,\n derivedKey.subarray(0, 16),\n Buffer.from(keystore.crypto.cipherparams.iv, \"hex\"),\n );\n\n const phrase = Buffer.concat([decipher.update(ciphertext), decipher.final()]);\n return phrase.toString(\"utf8\");\n }\n\n default:\n throw new USwapError(\"wallet_keystore_unsupported_version\");\n }\n}\n"
7
+ ],
8
+ "mappings": "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",
9
+ "debugId": "9B5BED4A73F0141D64756E2164756E21",
10
+ "names": []
11
+ }
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ var K=Object.create;var{getPrototypeOf:R,defineProperty:A,getOwnPropertyNames:w}=Object;var O=Object.prototype.hasOwnProperty;var s=(n,r,o)=>{o=n!=null?K(R(n)):{};let l=r||!n||!n.__esModule?A(o,"default",{value:n,enumerable:!0}):o;for(let u of w(n))if(!O.call(l,u))A(l,u,{get:()=>n[u],enumerable:!0});return l};var h=((n)=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(n,{get:(r,o)=>(typeof require<"u"?require:r)[o]}):n)(function(n){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+n+'" is not supported')});import{Chain as T,CosmosChains as x,EVMChains as X,filterSupportedChains as j,NetworkDerivationPath as q,SubstrateChains as G,UTXOChains as J,updateDerivationPath as L,WalletOption as m}from"@tcswap/helpers";import{createWallet as Q,getWalletSupportedChains as U}from"@tcswap/wallet-core";import{createCipheriv as g,createDecipheriv as F,pbkdf2Sync as W,randomBytes as E}from"node:crypto";import{generateMnemonic as Y,validateMnemonic as N}from"@scure/bip39";import{wordlist as f}from"@scure/bip39/wordlists/english.js";async function p(n){let r=await import("blakejs"),{blake2bFinal:o,blake2bInit:l,blake2bUpdate:u}=r?.default||r,t=n instanceof Buffer?n:Buffer.from(n,"hex"),a=l(32);return u(a,t),Array.from(o(a)).map((C)=>C<16?`0${C.toString(16)}`:C.toString(16)).join("")}async function y(n,r){let l=E(16),u=E(32),t={c:262144,dklen:32,prf:"hmac-sha256",salt:u.toString("hex")},a=W(r,u,t.c,t.dklen,"sha256"),C=g("aes-128-ctr",a.subarray(0,16),l),i=Buffer.concat([C.update(Buffer.from(n,"utf8")),C.final()]),e=Buffer.concat([a.subarray(16,32),Buffer.from(i)]),c=await p(e);return{crypto:{cipher:"aes-128-ctr",cipherparams:{iv:l.toString("hex")},ciphertext:i.toString("hex"),kdf:"pbkdf2",kdfparams:t,mac:c},meta:"xchain-keystore",version:1}}function H(n=12){return Y(f,n===12?128:256)}function _(n){return N(n,f)}async function v(n,r){let{USwapError:o}=await import("@tcswap/helpers");switch(n.version){case 1:{let l=n.crypto.kdfparams,u=Buffer.from(l.salt,"hex"),t=W(r,u,l.c,l.dklen,"sha256"),a=Buffer.from(n.crypto.ciphertext,"hex"),C=Buffer.concat([t.subarray(16,32),a]);if(await p(C)!==n.crypto.mac)throw new o("wallet_keystore_invalid_password");let e=F(n.crypto.cipher,t.subarray(0,16),Buffer.from(n.crypto.cipherparams.iv,"hex"));return Buffer.concat([e.update(a),e.final()]).toString("utf8")}default:throw new o("wallet_keystore_unsupported_version")}}var Z=Q({connect:({addChain:n})=>async function(o,l,u){let t=await D({chains:o,derivationPathMapOrIndex:u,phrase:l});for(let a of Object.values(t))n({...a,chain:a.chain,walletType:m.KEYSTORE});return!0},name:"connectKeystore",supportedChains:[...X,...J,...x.filter((n)=>n!==T.Harbor),...G,T.Cardano,T.Polkadot,T.Chainflip,T.Ripple,T.Solana,T.Sui,T.Ton,T.Tron,T.Near],walletType:m.KEYSTORE}),$=U(Z);async function D({chains:n,phrase:r,derivationPathMapOrIndex:o}){let l=j({chains:n,supportedChains:$,walletType:m.KEYSTORE});return(await Promise.all(l.map(async(t)=>{let{getToolbox:a}=await import("@tcswap/toolboxes"),C=typeof o==="number"?o:0,i=o&&typeof o==="object"?o[t]:void 0,e=q[t].slice(0,t===T.Solana?4:5),c=i||L(e,{index:C}),S=await a(t,{derivationPath:c,phrase:r}),P=await S.getAddress()||"";return{...S,address:P,chain:t}}))).reduce((t,a)=>{return t[a.chain]=a,t},{})}export{_ as validatePhrase,Z as keystoreWallet,H as generatePhrase,y as encryptToKeyStore,v as decryptFromKeystore,D as createKeystoreWallet,$ as KEYSTORE_SUPPORTED_CHAINS};
2
+
3
+ //# debugId=B992E9E25B39295264756E2164756E21
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,11 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/index.ts", "../src/helpers.ts"],
4
+ "sourcesContent": [
5
+ "import {\n Chain,\n CosmosChains,\n type DerivationPathArray,\n EVMChains,\n filterSupportedChains,\n NetworkDerivationPath,\n SubstrateChains,\n UTXOChains,\n updateDerivationPath,\n WalletOption,\n} from \"@tcswap/helpers\";\nimport type { FullWallet } from \"@tcswap/toolboxes\";\nimport { createWallet, getWalletSupportedChains } from \"@tcswap/wallet-core\";\n\nexport {\n decryptFromKeystore,\n encryptToKeyStore,\n generatePhrase,\n type Keystore,\n validatePhrase,\n} from \"./helpers\";\n\nexport const keystoreWallet = createWallet({\n connect: ({ addChain }) =>\n async function connectKeystore(\n chains: Chain[],\n phrase: string,\n derivationPathMapOrIndex?: { [chain in Chain]?: DerivationPathArray } | number,\n ) {\n const wallets = await createKeystoreWallet({ chains, derivationPathMapOrIndex, phrase });\n\n for (const wallet of Object.values(wallets)) {\n addChain({ ...wallet, chain: wallet.chain, walletType: WalletOption.KEYSTORE });\n }\n\n return true;\n },\n name: \"connectKeystore\",\n supportedChains: [\n ...EVMChains,\n ...UTXOChains,\n ...CosmosChains.filter((chain) => chain !== Chain.Harbor),\n ...SubstrateChains,\n Chain.Cardano,\n Chain.Polkadot,\n Chain.Chainflip,\n Chain.Ripple,\n Chain.Solana,\n Chain.Sui,\n Chain.Ton,\n Chain.Tron,\n Chain.Near,\n ],\n walletType: WalletOption.KEYSTORE,\n});\n\nexport const KEYSTORE_SUPPORTED_CHAINS = getWalletSupportedChains(keystoreWallet);\n\nexport async function createKeystoreWallet<T extends Chain[]>({\n chains,\n phrase,\n derivationPathMapOrIndex,\n}: {\n chains: T;\n phrase: string;\n derivationPathMapOrIndex?: { [chain in Chain]?: DerivationPathArray } | number;\n}) {\n const filteredChains = filterSupportedChains({\n chains,\n supportedChains: KEYSTORE_SUPPORTED_CHAINS,\n walletType: WalletOption.KEYSTORE,\n });\n\n const wallets = await Promise.all(\n filteredChains.map(async (chain) => {\n const { getToolbox } = await import(\"@tcswap/toolboxes\");\n\n const derivationPathIndex = typeof derivationPathMapOrIndex === \"number\" ? derivationPathMapOrIndex : 0;\n const derivationPathFromMap =\n derivationPathMapOrIndex && typeof derivationPathMapOrIndex === \"object\"\n ? derivationPathMapOrIndex[chain]\n : undefined;\n\n const derivationArrayToUpdate = NetworkDerivationPath[chain].slice(\n 0,\n chain === Chain.Solana ? 4 : 5,\n ) as DerivationPathArray;\n\n const derivationPath: DerivationPathArray =\n derivationPathFromMap || updateDerivationPath(derivationArrayToUpdate, { index: derivationPathIndex });\n\n const toolbox = await getToolbox(chain, { derivationPath, phrase });\n const address = (await toolbox.getAddress()) || \"\";\n const wallet = { ...toolbox, address, chain };\n\n return wallet;\n }),\n );\n\n return wallets.reduce(\n (acc, wallet) => {\n acc[wallet.chain as T[number]] = wallet as FullWallet[T[number]];\n return acc;\n },\n {} as { [key in T[number]]: FullWallet[key] },\n );\n}\n",
6
+ "/**\n * Modifications © 2025 Horizontal Systems.\n */\n\nimport { createCipheriv, createDecipheriv, pbkdf2Sync, randomBytes } from \"node:crypto\";\nimport { generateMnemonic, validateMnemonic } from \"@scure/bip39\";\nimport { wordlist } from \"@scure/bip39/wordlists/english.js\";\n\nexport type Keystore = {\n version: number;\n meta: string;\n crypto: {\n cipher: string;\n cipherparams: { iv: string };\n ciphertext: string;\n kdf: string;\n kdfparams: { prf: string; dklen: number; salt: string; c: number };\n mac: string;\n };\n};\n\nasync function blake256(initData: Buffer | string) {\n const blakeModule = await import(\"blakejs\");\n const { blake2bFinal, blake2bInit, blake2bUpdate } = blakeModule?.default || blakeModule;\n const data = initData instanceof Buffer ? initData : Buffer.from(initData as string, \"hex\");\n\n const context = blake2bInit(32);\n blake2bUpdate(context, data);\n\n return Array.from(blake2bFinal(context))\n .map((byte) => (byte < 0x10 ? `0${byte.toString(16)}` : byte.toString(16)))\n .join(\"\");\n}\n\nexport async function encryptToKeyStore(phrase: string, password: string) {\n const cipher = \"aes-128-ctr\";\n const iv = randomBytes(16);\n const salt = randomBytes(32);\n const kdfParams = { c: 262144, dklen: 32, prf: \"hmac-sha256\", salt: salt.toString(\"hex\") };\n\n const derivedKey = pbkdf2Sync(password, salt, kdfParams.c, kdfParams.dklen, \"sha256\");\n const cipherIV = createCipheriv(cipher, derivedKey.subarray(0, 16), iv);\n const ciphertext = Buffer.concat([cipherIV.update(Buffer.from(phrase, \"utf8\")), cipherIV.final()]);\n const initData = Buffer.concat([derivedKey.subarray(16, 32), Buffer.from(ciphertext)]);\n const mac = await blake256(initData);\n\n return {\n crypto: {\n cipher,\n cipherparams: { iv: iv.toString(\"hex\") },\n ciphertext: ciphertext.toString(\"hex\"),\n kdf: \"pbkdf2\",\n kdfparams: kdfParams,\n mac,\n },\n meta: \"xchain-keystore\",\n version: 1,\n };\n}\n\nexport function generatePhrase(size: 12 | 24 = 12) {\n return generateMnemonic(wordlist, size === 12 ? 128 : 256);\n}\n\nexport function validatePhrase(phrase: string) {\n return validateMnemonic(phrase, wordlist);\n}\n\nexport async function decryptFromKeystore(keystore: Keystore, password: string) {\n const { USwapError } = await import(\"@tcswap/helpers\");\n\n switch (keystore.version) {\n case 1: {\n const kdfParams = keystore.crypto.kdfparams;\n const salt = Buffer.from(kdfParams.salt, \"hex\");\n const derivedKey = pbkdf2Sync(password, salt, kdfParams.c, kdfParams.dklen, \"sha256\");\n\n const ciphertext = Buffer.from(keystore.crypto.ciphertext, \"hex\");\n const initData = Buffer.concat([derivedKey.subarray(16, 32), ciphertext]);\n const mac = await blake256(initData);\n\n if (mac !== keystore.crypto.mac) {\n throw new USwapError(\"wallet_keystore_invalid_password\");\n }\n\n const decipher = createDecipheriv(\n keystore.crypto.cipher,\n derivedKey.subarray(0, 16),\n Buffer.from(keystore.crypto.cipherparams.iv, \"hex\"),\n );\n\n const phrase = Buffer.concat([decipher.update(ciphertext), decipher.final()]);\n return phrase.toString(\"utf8\");\n }\n\n default:\n throw new USwapError(\"wallet_keystore_unsupported_version\");\n }\n}\n"
7
+ ],
8
+ "mappings": "kjBAAA,gBACE,kBACA,eAEA,2BACA,2BACA,qBACA,gBACA,0BACA,kBACA,wBAGF,uBAAS,8BAAc,4BCTvB,yBAAS,sBAAgB,gBAAkB,iBAAY,oBACvD,2BAAS,sBAAkB,qBAC3B,mBAAS,0CAeT,eAAe,CAAQ,CAAC,EAA2B,CACjD,IAAM,EAAc,KAAa,oBACzB,eAAc,cAAa,iBAAkB,GAAa,SAAW,EACvE,EAAO,aAAoB,OAAS,EAAW,OAAO,KAAK,EAAoB,KAAK,EAEpF,EAAU,EAAY,EAAE,EAG9B,OAFA,EAAc,EAAS,CAAI,EAEpB,MAAM,KAAK,EAAa,CAAO,CAAC,EACpC,IAAI,CAAC,IAAU,EAAO,GAAO,IAAI,EAAK,SAAS,EAAE,IAAM,EAAK,SAAS,EAAE,CAAE,EACzE,KAAK,EAAE,EAGZ,eAAsB,CAAiB,CAAC,EAAgB,EAAkB,CAExE,IAAM,EAAK,EAAY,EAAE,EACnB,EAAO,EAAY,EAAE,EACrB,EAAY,CAAE,EAAG,OAAQ,MAAO,GAAI,IAAK,cAAe,KAAM,EAAK,SAAS,KAAK,CAAE,EAEnF,EAAa,EAAW,EAAU,EAAM,EAAU,EAAG,EAAU,MAAO,QAAQ,EAC9E,EAAW,EANF,cAMyB,EAAW,SAAS,EAAG,EAAE,EAAG,CAAE,EAChE,EAAa,OAAO,OAAO,CAAC,EAAS,OAAO,OAAO,KAAK,EAAQ,MAAM,CAAC,EAAG,EAAS,MAAM,CAAC,CAAC,EAC3F,EAAW,OAAO,OAAO,CAAC,EAAW,SAAS,GAAI,EAAE,EAAG,OAAO,KAAK,CAAU,CAAC,CAAC,EAC/E,EAAM,MAAM,EAAS,CAAQ,EAEnC,MAAO,CACL,OAAQ,CACN,OAbW,cAcX,aAAc,CAAE,GAAI,EAAG,SAAS,KAAK,CAAE,EACvC,WAAY,EAAW,SAAS,KAAK,EACrC,IAAK,SACL,UAAW,EACX,KACF,EACA,KAAM,kBACN,QAAS,CACX,EAGK,SAAS,CAAc,CAAC,EAAgB,GAAI,CACjD,OAAO,EAAiB,EAAU,IAAS,GAAK,IAAM,GAAG,EAGpD,SAAS,CAAc,CAAC,EAAgB,CAC7C,OAAO,EAAiB,EAAQ,CAAQ,EAG1C,eAAsB,CAAmB,CAAC,EAAoB,EAAkB,CAC9E,IAAQ,cAAe,KAAa,2BAEpC,OAAQ,EAAS,aACV,GAAG,CACN,IAAM,EAAY,EAAS,OAAO,UAC5B,EAAO,OAAO,KAAK,EAAU,KAAM,KAAK,EACxC,EAAa,EAAW,EAAU,EAAM,EAAU,EAAG,EAAU,MAAO,QAAQ,EAE9E,EAAa,OAAO,KAAK,EAAS,OAAO,WAAY,KAAK,EAC1D,EAAW,OAAO,OAAO,CAAC,EAAW,SAAS,GAAI,EAAE,EAAG,CAAU,CAAC,EAGxE,GAFY,MAAM,EAAS,CAAQ,IAEvB,EAAS,OAAO,IAC1B,MAAM,IAAI,EAAW,kCAAkC,EAGzD,IAAM,EAAW,EACf,EAAS,OAAO,OAChB,EAAW,SAAS,EAAG,EAAE,EACzB,OAAO,KAAK,EAAS,OAAO,aAAa,GAAI,KAAK,CACpD,EAGA,OADe,OAAO,OAAO,CAAC,EAAS,OAAO,CAAU,EAAG,EAAS,MAAM,CAAC,CAAC,EAC9D,SAAS,MAAM,CAC/B,SAGE,MAAM,IAAI,EAAW,qCAAqC,GDzEzD,IAAM,EAAiB,EAAa,CACzC,QAAS,EAAG,cACV,cAA8B,CAC5B,EACA,EACA,EACA,CACA,IAAM,EAAU,MAAM,EAAqB,CAAE,SAAQ,2BAA0B,QAAO,CAAC,EAEvF,QAAW,KAAU,OAAO,OAAO,CAAO,EACxC,EAAS,IAAK,EAAQ,MAAO,EAAO,MAAO,WAAY,EAAa,QAAS,CAAC,EAGhF,MAAO,IAEX,KAAM,kBACN,gBAAiB,CACf,GAAG,EACH,GAAG,EACH,GAAG,EAAa,OAAO,CAAC,IAAU,IAAU,EAAM,MAAM,EACxD,GAAG,EACH,EAAM,QACN,EAAM,SACN,EAAM,UACN,EAAM,OACN,EAAM,OACN,EAAM,IACN,EAAM,IACN,EAAM,KACN,EAAM,IACR,EACA,WAAY,EAAa,QAC3B,CAAC,EAEY,EAA4B,EAAyB,CAAc,EAEhF,eAAsB,CAAuC,EAC3D,SACA,SACA,4BAKC,CACD,IAAM,EAAiB,EAAsB,CAC3C,SACA,gBAAiB,EACjB,WAAY,EAAa,QAC3B,CAAC,EA4BD,OA1BgB,MAAM,QAAQ,IAC5B,EAAe,IAAI,MAAO,IAAU,CAClC,IAAQ,cAAe,KAAa,6BAE9B,EAAsB,OAAO,IAA6B,SAAW,EAA2B,EAChG,EACJ,GAA4B,OAAO,IAA6B,SAC5D,EAAyB,GACzB,OAEA,EAA0B,EAAsB,GAAO,MAC3D,EACA,IAAU,EAAM,OAAS,EAAI,CAC/B,EAEM,EACJ,GAAyB,EAAqB,EAAyB,CAAE,MAAO,CAAoB,CAAC,EAEjG,EAAU,MAAM,EAAW,EAAO,CAAE,iBAAgB,QAAO,CAAC,EAC5D,EAAW,MAAM,EAAQ,WAAW,GAAM,GAGhD,MAFe,IAAK,EAAS,UAAS,OAAM,EAG7C,CACH,GAEe,OACb,CAAC,EAAK,IAAW,CAEf,OADA,EAAI,EAAO,OAAsB,EAC1B,GAET,CAAC,CACH",
9
+ "debugId": "B992E9E25B39295264756E2164756E21",
10
+ "names": []
11
+ }
@@ -0,0 +1,45 @@
1
+ /**
2
+ * Modifications © 2025 Horizontal Systems.
3
+ */
4
+ export type Keystore = {
5
+ version: number;
6
+ meta: string;
7
+ crypto: {
8
+ cipher: string;
9
+ cipherparams: {
10
+ iv: string;
11
+ };
12
+ ciphertext: string;
13
+ kdf: string;
14
+ kdfparams: {
15
+ prf: string;
16
+ dklen: number;
17
+ salt: string;
18
+ c: number;
19
+ };
20
+ mac: string;
21
+ };
22
+ };
23
+ export declare function encryptToKeyStore(phrase: string, password: string): Promise<{
24
+ crypto: {
25
+ cipher: string;
26
+ cipherparams: {
27
+ iv: string;
28
+ };
29
+ ciphertext: string;
30
+ kdf: string;
31
+ kdfparams: {
32
+ c: number;
33
+ dklen: number;
34
+ prf: string;
35
+ salt: string;
36
+ };
37
+ mac: string;
38
+ };
39
+ meta: string;
40
+ version: number;
41
+ }>;
42
+ export declare function generatePhrase(size?: 12 | 24): string;
43
+ export declare function validatePhrase(phrase: string): boolean;
44
+ export declare function decryptFromKeystore(keystore: Keystore, password: string): Promise<string>;
45
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/helpers.ts"],"names":[],"mappings":"AAAA;;GAEG;AAMH,MAAM,MAAM,QAAQ,GAAG;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE;QACN,MAAM,EAAE,MAAM,CAAC;QACf,YAAY,EAAE;YAAE,EAAE,EAAE,MAAM,CAAA;SAAE,CAAC;QAC7B,UAAU,EAAE,MAAM,CAAC;QACnB,GAAG,EAAE,MAAM,CAAC;QACZ,SAAS,EAAE;YAAE,GAAG,EAAE,MAAM,CAAC;YAAC,KAAK,EAAE,MAAM,CAAC;YAAC,IAAI,EAAE,MAAM,CAAC;YAAC,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QACnE,GAAG,EAAE,MAAM,CAAC;KACb,CAAC;CACH,CAAC;AAeF,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM;;;;;;;;;;;;;;;;;;GAwBvE;AAED,wBAAgB,cAAc,CAAC,IAAI,GAAE,EAAE,GAAG,EAAO,UAEhD;AAED,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,WAE5C;AAED,wBAAsB,mBAAmB,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,mBA8B7E"}
@@ -0,0 +1,63 @@
1
+ import { Chain, type DerivationPathArray } from "@tcswap/helpers";
2
+ import type { FullWallet } from "@tcswap/toolboxes";
3
+ export { decryptFromKeystore, encryptToKeyStore, generatePhrase, type Keystore, validatePhrase, } from "./helpers";
4
+ export declare const keystoreWallet: {
5
+ connectKeystore: {
6
+ connectWallet: (connectParams: {
7
+ addChain: import("@tcswap/helpers").AddChainType;
8
+ }) => (chains: Chain[], phrase: string, derivationPathMapOrIndex?: number | {
9
+ ARB?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined;
10
+ AURORA?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined;
11
+ AVAX?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined;
12
+ BASE?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined;
13
+ BERA?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined;
14
+ BSC?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined;
15
+ BTC?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined;
16
+ BCH?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined;
17
+ BOTANIX?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined;
18
+ ADA?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined;
19
+ FLIP?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined;
20
+ CORE?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined;
21
+ CORN?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined;
22
+ GAIA?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined;
23
+ CRO?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined;
24
+ DASH?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined;
25
+ DOGE?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined;
26
+ ETH?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined;
27
+ GNO?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined;
28
+ HARBOR?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined;
29
+ HYPEREVM?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined;
30
+ KUJI?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined;
31
+ LTC?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined;
32
+ MAYA?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined;
33
+ MEGAETH?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined;
34
+ MONAD?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined;
35
+ NEAR?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined;
36
+ NOBLE?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined;
37
+ OP?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined;
38
+ DOT?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined;
39
+ POL?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined;
40
+ XRD?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined;
41
+ XRP?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined;
42
+ SOL?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined;
43
+ SONIC?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined;
44
+ SUI?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined;
45
+ THOR?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined;
46
+ TON?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined;
47
+ TRON?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined;
48
+ UNI?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined;
49
+ XLAYER?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined;
50
+ ZEC?: [44, 118, 0, 0, 0] | [44, 931, 0, 0, 0] | [number, number, number, number, number] | [44, 397, 0, 0, 0] | [0, 0, 0, 0, 0] | [44, 144, 0, 0, 0] | [44, 501, 0, 0, 0] | [44, 607, 0, 0, 0] | [44, 195, 0, 0, 0] | [44, 784, 0, 0, 0] | [1852, 1815, 0, 0, 0] | [number, number, number, number, (number | undefined)?] | [44, 145, 0, 0, 0] | [84, 2, 0, 0, 0] | [44, 3, 0, 0, 0] | [44, 5, 0, 0, 0] | [44, 133, 0, 0, 0] | undefined;
51
+ } | undefined) => Promise<boolean>;
52
+ supportedChains: (Chain.Arbitrum | Chain.Aurora | Chain.Avalanche | Chain.Base | Chain.Berachain | Chain.BinanceSmartChain | Chain.Bitcoin | Chain.BitcoinCash | Chain.Botanix | Chain.Cardano | Chain.Chainflip | Chain.Core | Chain.Corn | Chain.Cosmos | Chain.Cronos | Chain.Dash | Chain.Dogecoin | Chain.Ethereum | Chain.Gnosis | Chain.Hyperevm | Chain.Kujira | Chain.Litecoin | Chain.Maya | Chain.Monad | Chain.Near | Chain.Noble | Chain.Optimism | Chain.Polkadot | Chain.Polygon | Chain.Ripple | Chain.Solana | Chain.Sonic | Chain.Sui | Chain.THORChain | Chain.Ton | Chain.Tron | Chain.Unichain | Chain.XLayer | Chain.Zcash)[];
53
+ };
54
+ };
55
+ export declare const KEYSTORE_SUPPORTED_CHAINS: (Chain.Arbitrum | Chain.Aurora | Chain.Avalanche | Chain.Base | Chain.Berachain | Chain.BinanceSmartChain | Chain.Bitcoin | Chain.BitcoinCash | Chain.Botanix | Chain.Cardano | Chain.Chainflip | Chain.Core | Chain.Corn | Chain.Cosmos | Chain.Cronos | Chain.Dash | Chain.Dogecoin | Chain.Ethereum | Chain.Gnosis | Chain.Hyperevm | Chain.Kujira | Chain.Litecoin | Chain.Maya | Chain.Monad | Chain.Near | Chain.Noble | Chain.Optimism | Chain.Polkadot | Chain.Polygon | Chain.Ripple | Chain.Solana | Chain.Sonic | Chain.Sui | Chain.THORChain | Chain.Ton | Chain.Tron | Chain.Unichain | Chain.XLayer | Chain.Zcash)[];
56
+ export declare function createKeystoreWallet<T extends Chain[]>({ chains, phrase, derivationPathMapOrIndex, }: {
57
+ chains: T;
58
+ phrase: string;
59
+ derivationPathMapOrIndex?: {
60
+ [chain in Chain]?: DerivationPathArray;
61
+ } | number;
62
+ }): Promise<{ [key in T[number]]: FullWallet[key]; }>;
63
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EAEL,KAAK,mBAAmB,EAQzB,MAAM,iBAAiB,CAAC;AACzB,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,EACL,mBAAmB,EACnB,iBAAiB,EACjB,cAAc,EACd,KAAK,QAAQ,EACb,cAAc,GACf,MAAM,WAAW,CAAC;AAEnB,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCzB,CAAC;AAEH,eAAO,MAAM,yBAAyB,omBAA2C,CAAC;AAElF,wBAAsB,oBAAoB,CAAC,CAAC,SAAS,KAAK,EAAE,EAAE,EAC5D,MAAM,EACN,MAAM,EACN,wBAAwB,GACzB,EAAE;IACD,MAAM,EAAE,CAAC,CAAC;IACV,MAAM,EAAE,MAAM,CAAC;IACf,wBAAwB,CAAC,EAAE;SAAG,KAAK,IAAI,KAAK,CAAC,CAAC,EAAE,mBAAmB;KAAE,GAAG,MAAM,CAAC;CAChF,cAsCY,GAAG,oCAEf"}
package/package.json ADDED
@@ -0,0 +1,39 @@
1
+ {
2
+ "author": "swapkit-oss",
3
+ "dependencies": {
4
+ "@scure/bip39": "2.0.1",
5
+ "@tcswap/helpers": "4.5.15",
6
+ "@tcswap/toolboxes": "4.3.15",
7
+ "@tcswap/wallet-core": "4.0.59",
8
+ "blakejs": "1.2.1"
9
+ },
10
+ "description": "USwap - Wallet Keystore",
11
+ "exports": {
12
+ ".": {
13
+ "bun": "./src/index.ts",
14
+ "import": "./dist/index.js",
15
+ "require": "./dist/index.cjs",
16
+ "types": "./dist/types/index.d.ts"
17
+ }
18
+ },
19
+ "files": ["dist/", "src/"],
20
+ "homepage": "https://github.com/thorchain/TCSwap",
21
+ "license": "Apache-2.0",
22
+ "name": "@tcswap/wallet-keystore",
23
+ "repository": {
24
+ "directory": "packages/wallet-keystore",
25
+ "type": "git",
26
+ "url": "git+https://github.com/thorchain/TCSwap.git"
27
+ },
28
+ "scripts": {
29
+ "build": "bun run ./build.ts",
30
+ "build:clean": "rm -rf dist && bun run ./build.ts",
31
+ "clean": "rm -rf dist node_modules *.tsbuildinfo",
32
+ "test": "echo 'bun test'",
33
+ "test:ci": "echo 'bun test --coverage'",
34
+ "type-check": "bun tsc --noEmit",
35
+ "type-check:go": "tsgo"
36
+ },
37
+ "type": "module",
38
+ "version": "4.1.15"
39
+ }
package/src/helpers.ts ADDED
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Modifications © 2025 Horizontal Systems.
3
+ */
4
+
5
+ import { createCipheriv, createDecipheriv, pbkdf2Sync, randomBytes } from "node:crypto";
6
+ import { generateMnemonic, validateMnemonic } from "@scure/bip39";
7
+ import { wordlist } from "@scure/bip39/wordlists/english.js";
8
+
9
+ export type Keystore = {
10
+ version: number;
11
+ meta: string;
12
+ crypto: {
13
+ cipher: string;
14
+ cipherparams: { iv: string };
15
+ ciphertext: string;
16
+ kdf: string;
17
+ kdfparams: { prf: string; dklen: number; salt: string; c: number };
18
+ mac: string;
19
+ };
20
+ };
21
+
22
+ async function blake256(initData: Buffer | string) {
23
+ const blakeModule = await import("blakejs");
24
+ const { blake2bFinal, blake2bInit, blake2bUpdate } = blakeModule?.default || blakeModule;
25
+ const data = initData instanceof Buffer ? initData : Buffer.from(initData as string, "hex");
26
+
27
+ const context = blake2bInit(32);
28
+ blake2bUpdate(context, data);
29
+
30
+ return Array.from(blake2bFinal(context))
31
+ .map((byte) => (byte < 0x10 ? `0${byte.toString(16)}` : byte.toString(16)))
32
+ .join("");
33
+ }
34
+
35
+ export async function encryptToKeyStore(phrase: string, password: string) {
36
+ const cipher = "aes-128-ctr";
37
+ const iv = randomBytes(16);
38
+ const salt = randomBytes(32);
39
+ const kdfParams = { c: 262144, dklen: 32, prf: "hmac-sha256", salt: salt.toString("hex") };
40
+
41
+ const derivedKey = pbkdf2Sync(password, salt, kdfParams.c, kdfParams.dklen, "sha256");
42
+ const cipherIV = createCipheriv(cipher, derivedKey.subarray(0, 16), iv);
43
+ const ciphertext = Buffer.concat([cipherIV.update(Buffer.from(phrase, "utf8")), cipherIV.final()]);
44
+ const initData = Buffer.concat([derivedKey.subarray(16, 32), Buffer.from(ciphertext)]);
45
+ const mac = await blake256(initData);
46
+
47
+ return {
48
+ crypto: {
49
+ cipher,
50
+ cipherparams: { iv: iv.toString("hex") },
51
+ ciphertext: ciphertext.toString("hex"),
52
+ kdf: "pbkdf2",
53
+ kdfparams: kdfParams,
54
+ mac,
55
+ },
56
+ meta: "xchain-keystore",
57
+ version: 1,
58
+ };
59
+ }
60
+
61
+ export function generatePhrase(size: 12 | 24 = 12) {
62
+ return generateMnemonic(wordlist, size === 12 ? 128 : 256);
63
+ }
64
+
65
+ export function validatePhrase(phrase: string) {
66
+ return validateMnemonic(phrase, wordlist);
67
+ }
68
+
69
+ export async function decryptFromKeystore(keystore: Keystore, password: string) {
70
+ const { USwapError } = await import("@tcswap/helpers");
71
+
72
+ switch (keystore.version) {
73
+ case 1: {
74
+ const kdfParams = keystore.crypto.kdfparams;
75
+ const salt = Buffer.from(kdfParams.salt, "hex");
76
+ const derivedKey = pbkdf2Sync(password, salt, kdfParams.c, kdfParams.dklen, "sha256");
77
+
78
+ const ciphertext = Buffer.from(keystore.crypto.ciphertext, "hex");
79
+ const initData = Buffer.concat([derivedKey.subarray(16, 32), ciphertext]);
80
+ const mac = await blake256(initData);
81
+
82
+ if (mac !== keystore.crypto.mac) {
83
+ throw new USwapError("wallet_keystore_invalid_password");
84
+ }
85
+
86
+ const decipher = createDecipheriv(
87
+ keystore.crypto.cipher,
88
+ derivedKey.subarray(0, 16),
89
+ Buffer.from(keystore.crypto.cipherparams.iv, "hex"),
90
+ );
91
+
92
+ const phrase = Buffer.concat([decipher.update(ciphertext), decipher.final()]);
93
+ return phrase.toString("utf8");
94
+ }
95
+
96
+ default:
97
+ throw new USwapError("wallet_keystore_unsupported_version");
98
+ }
99
+ }
package/src/index.ts ADDED
@@ -0,0 +1,108 @@
1
+ import {
2
+ Chain,
3
+ CosmosChains,
4
+ type DerivationPathArray,
5
+ EVMChains,
6
+ filterSupportedChains,
7
+ NetworkDerivationPath,
8
+ SubstrateChains,
9
+ UTXOChains,
10
+ updateDerivationPath,
11
+ WalletOption,
12
+ } from "@tcswap/helpers";
13
+ import type { FullWallet } from "@tcswap/toolboxes";
14
+ import { createWallet, getWalletSupportedChains } from "@tcswap/wallet-core";
15
+
16
+ export {
17
+ decryptFromKeystore,
18
+ encryptToKeyStore,
19
+ generatePhrase,
20
+ type Keystore,
21
+ validatePhrase,
22
+ } from "./helpers";
23
+
24
+ export const keystoreWallet = createWallet({
25
+ connect: ({ addChain }) =>
26
+ async function connectKeystore(
27
+ chains: Chain[],
28
+ phrase: string,
29
+ derivationPathMapOrIndex?: { [chain in Chain]?: DerivationPathArray } | number,
30
+ ) {
31
+ const wallets = await createKeystoreWallet({ chains, derivationPathMapOrIndex, phrase });
32
+
33
+ for (const wallet of Object.values(wallets)) {
34
+ addChain({ ...wallet, chain: wallet.chain, walletType: WalletOption.KEYSTORE });
35
+ }
36
+
37
+ return true;
38
+ },
39
+ name: "connectKeystore",
40
+ supportedChains: [
41
+ ...EVMChains,
42
+ ...UTXOChains,
43
+ ...CosmosChains.filter((chain) => chain !== Chain.Harbor),
44
+ ...SubstrateChains,
45
+ Chain.Cardano,
46
+ Chain.Polkadot,
47
+ Chain.Chainflip,
48
+ Chain.Ripple,
49
+ Chain.Solana,
50
+ Chain.Sui,
51
+ Chain.Ton,
52
+ Chain.Tron,
53
+ Chain.Near,
54
+ ],
55
+ walletType: WalletOption.KEYSTORE,
56
+ });
57
+
58
+ export const KEYSTORE_SUPPORTED_CHAINS = getWalletSupportedChains(keystoreWallet);
59
+
60
+ export async function createKeystoreWallet<T extends Chain[]>({
61
+ chains,
62
+ phrase,
63
+ derivationPathMapOrIndex,
64
+ }: {
65
+ chains: T;
66
+ phrase: string;
67
+ derivationPathMapOrIndex?: { [chain in Chain]?: DerivationPathArray } | number;
68
+ }) {
69
+ const filteredChains = filterSupportedChains({
70
+ chains,
71
+ supportedChains: KEYSTORE_SUPPORTED_CHAINS,
72
+ walletType: WalletOption.KEYSTORE,
73
+ });
74
+
75
+ const wallets = await Promise.all(
76
+ filteredChains.map(async (chain) => {
77
+ const { getToolbox } = await import("@tcswap/toolboxes");
78
+
79
+ const derivationPathIndex = typeof derivationPathMapOrIndex === "number" ? derivationPathMapOrIndex : 0;
80
+ const derivationPathFromMap =
81
+ derivationPathMapOrIndex && typeof derivationPathMapOrIndex === "object"
82
+ ? derivationPathMapOrIndex[chain]
83
+ : undefined;
84
+
85
+ const derivationArrayToUpdate = NetworkDerivationPath[chain].slice(
86
+ 0,
87
+ chain === Chain.Solana ? 4 : 5,
88
+ ) as DerivationPathArray;
89
+
90
+ const derivationPath: DerivationPathArray =
91
+ derivationPathFromMap || updateDerivationPath(derivationArrayToUpdate, { index: derivationPathIndex });
92
+
93
+ const toolbox = await getToolbox(chain, { derivationPath, phrase });
94
+ const address = (await toolbox.getAddress()) || "";
95
+ const wallet = { ...toolbox, address, chain };
96
+
97
+ return wallet;
98
+ }),
99
+ );
100
+
101
+ return wallets.reduce(
102
+ (acc, wallet) => {
103
+ acc[wallet.chain as T[number]] = wallet as FullWallet[T[number]];
104
+ return acc;
105
+ },
106
+ {} as { [key in T[number]]: FullWallet[key] },
107
+ );
108
+ }