{"_id":"@asichain/asi-wallet-sdk","_rev":"9-35e6cca3a9261d1ac53965c51b18f04c","name":"@asichain/asi-wallet-sdk","dist-tags":{"latest":"2.0.0"},"versions":{"0.1.0":{"name":"@asichain/asi-wallet-sdk","version":"0.1.0","license":"Apache-2.0","_id":"@asichain/asi-wallet-sdk@0.1.0","maintainers":[{"name":"asichain-admin","email":"npm.asichain@singularitynet.io"},{"name":"andrew_serbin_snet","email":"andrew.serbin@singularitynet.io"}],"dist":{"shasum":"aa732155b33835202e7f8aef68c9fa0e658ecad3","tarball":"https://registry.npmjs.org/@asichain/asi-wallet-sdk/-/asi-wallet-sdk-0.1.0.tgz","fileCount":43,"integrity":"sha512-/KSpTTk7G58XFJJ8abghEs8HynnZ7OAkNCXTH3nDMErG0Hja6A866bf3WjfdArZDAz4mMKb+ZxrZRCU0A7DoAQ==","signatures":[{"sig":"MEQCIDMJZ+OJTdxFQwv6RD37IuhD2PgRuCjO8A2VrJwcQz6tAiA7EboJeKGnNkEi46S4mJ0xZ1uwa+TLVIxCNTZ1tuNDYA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":139892},"main":"dist/index.cjs.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.cjs.js"}},"gitHead":"1df60e861c4b11e6ab61954d5159a5a730c06e11","scripts":{"dev":"tsc -p tsconfig.build.json --emitDeclarationOnly && rollup -c -w","build":"tsc -p tsconfig.build.json --emitDeclarationOnly && rollup -c","security:gate":"npm run build && npm run test:security && npm run check:secret-logs && npm audit --omit=dev","test:security":"node scripts/security/run-security-tests.mjs","check:secret-logs":"node scripts/security/check-secret-logs.mjs"},"_npmUser":{"name":"andrew_serbin_snet","email":"andrew.serbin@singularitynet.io"},"_npmVersion":"10.8.2","description":"ASI Wallet SDK","directories":{},"sideEffects":false,"_nodeVersion":"20.19.4","dependencies":{"bs58":"^6.0.0","axios":"^1.13.2","bip32":"^4.0.0","bip39":"^3.1.0","buffer":"^6.0.3","blakejs":"^1.2.1","js-sha3":"^0.9.3","@noble/hashes":"^1.6.0","tiny-secp256k1":"^2.2.4","@noble/secp256k1":"^1.7.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","tslib":"^2.8.1","rollup":"^3.27.0","typescript":"^5.9.3","@types/node":"^25.4.0","rollup-plugin-dts":"^6.3.0","@rollup/plugin-alias":"^5.0.0","@rollup/plugin-terser":"^0.1.0","@rollup/plugin-commonjs":"^25.0.0","@rollup/plugin-typescript":"^11.1.0","@rollup/plugin-node-resolve":"^15.0.1"},"_npmOperationalInternal":{"tmp":"tmp/asi-wallet-sdk_0.1.0_1774961068382_0.914225639388266","host":"s3://npm-registry-packages-npm-production"}},"0.1.1":{"name":"@asichain/asi-wallet-sdk","version":"0.1.1","license":"Apache-2.0","_id":"@asichain/asi-wallet-sdk@0.1.1","maintainers":[{"name":"asichain-admin","email":"npm.asichain@singularitynet.io"},{"name":"andrew_serbin_snet","email":"andrew.serbin@singularitynet.io"}],"dist":{"shasum":"0650b690cd163ab57536044dfb4b25c62cd7f25a","tarball":"https://registry.npmjs.org/@asichain/asi-wallet-sdk/-/asi-wallet-sdk-0.1.1.tgz","fileCount":43,"integrity":"sha512-s6InIPLxBU5ai2ukFxB9J+sd6ZPAJQNt3nNWFWXw4mPSY0FUZWg9GYIaZOWBFeQCZOpEZ3SDsahDevzXY5FZTQ==","signatures":[{"sig":"MEUCIBvP/UAedlOz1oOHgmsC9MuKKOSEYpdbgnsB0a/pxbgzAiEAoPQvQOQH6XrP1yNj/IRijmn5NFmgDV4arPiphUYEtU8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":139922},"main":"dist/index.cjs.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.cjs.js"}},"gitHead":"30b778272e47c573dde5fc2e6192c069fffc63f4","scripts":{"dev":"tsc -p tsconfig.build.json --emitDeclarationOnly && rollup -c -w","build":"tsc -p tsconfig.build.json --emitDeclarationOnly && rollup -c","security:gate":"npm run build && npm run test:security && npm run check:secret-logs && npm audit --omit=dev","test:security":"node scripts/security/run-security-tests.mjs","check:secret-logs":"node scripts/security/check-secret-logs.mjs"},"_npmUser":{"name":"andrew_serbin_snet","email":"andrew.serbin@singularitynet.io"},"_npmVersion":"10.8.2","description":"ASI Wallet SDK","directories":{},"sideEffects":false,"_nodeVersion":"20.19.4","dependencies":{"bs58":"^6.0.0","axios":"^1.13.2","bip32":"^4.0.0","bip39":"^3.1.0","buffer":"^6.0.3","blakejs":"^1.2.1","js-sha3":"^0.9.3","@noble/hashes":"^1.6.0","tiny-secp256k1":"^2.2.4","@noble/secp256k1":"^1.7.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","tslib":"^2.8.1","rollup":"^3.27.0","typescript":"^5.9.3","@types/node":"^25.4.0","rollup-plugin-dts":"^6.3.0","@rollup/plugin-alias":"^5.0.0","@rollup/plugin-terser":"^0.1.0","@rollup/plugin-commonjs":"^25.0.0","@rollup/plugin-typescript":"^11.1.0","@rollup/plugin-node-resolve":"^15.0.1"},"_npmOperationalInternal":{"tmp":"tmp/asi-wallet-sdk_0.1.1_1774964475194_0.3637409828448719","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@asichain/asi-wallet-sdk","version":"0.1.2","license":"Apache-2.0","_id":"@asichain/asi-wallet-sdk@0.1.2","maintainers":[{"name":"asichain-admin","email":"npm.asichain@singularitynet.io"},{"name":"andrew_serbin_snet","email":"andrew.serbin@singularitynet.io"}],"homepage":"https://github.com/asi-alliance/asi-chain-wallet-sdk#readme","bugs":{"url":"https://github.com/asi-alliance/asi-chain-wallet-sdk/issues"},"dist":{"shasum":"7f809ad23c13f28db8faf6b2c8ba6f6677cf8ebf","tarball":"https://registry.npmjs.org/@asichain/asi-wallet-sdk/-/asi-wallet-sdk-0.1.2.tgz","fileCount":43,"integrity":"sha512-rIf7DC9Cdug0KDEyg66DF/XxIQ1ws+C/FBxksuAuCByx1gPcghK7OKjsfc4HcwfpChOdiQGaeKVcpUTWjPyPhA==","signatures":[{"sig":"MEUCIAvT1+Sh6/RodwRzH4+1hYMijFwPs+2+WvxT+g/xID5GAiEA+N7M/1mXiFd7m6xAiG91v5pU1TRGZYB+RclzV4J98ik=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":139980},"main":"dist/index.cjs.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.cjs.js"}},"gitHead":"61ffc38703cc1ef42c5b36414e785148498c5063","scripts":{"dev":"tsc -p tsconfig.build.json --emitDeclarationOnly && rollup -c -w","build":"tsc -p tsconfig.build.json --emitDeclarationOnly && rollup -c","security:gate":"npm run build && npm run test:security && npm run check:secret-logs && npm audit --omit=dev","test:security":"node scripts/security/run-security-tests.mjs","check:secret-logs":"node scripts/security/check-secret-logs.mjs"},"_npmUser":{"name":"andrew_serbin_snet","email":"andrew.serbin@singularitynet.io"},"repository":{"url":"git+https://github.com/asi-alliance/asi-chain-wallet-sdk.git","type":"git"},"_npmVersion":"10.8.2","description":"ASI Wallet SDK","directories":{},"sideEffects":false,"_nodeVersion":"20.19.4","dependencies":{"bs58":"^6.0.0","axios":"^1.13.2","bip32":"^4.0.0","bip39":"^3.1.0","buffer":"^6.0.3","blakejs":"^1.2.1","js-sha3":"^0.9.3","@noble/hashes":"^1.6.0","tiny-secp256k1":"^2.2.4","@noble/secp256k1":"^1.7.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","tslib":"^2.8.1","rollup":"^3.27.0","typescript":"^5.9.3","@types/node":"^25.4.0","rollup-plugin-dts":"^6.3.0","@rollup/plugin-alias":"^5.0.0","@rollup/plugin-terser":"^0.1.0","@rollup/plugin-commonjs":"^25.0.0","@rollup/plugin-typescript":"^11.1.0","@rollup/plugin-node-resolve":"^15.0.1"},"_npmOperationalInternal":{"tmp":"tmp/asi-wallet-sdk_0.1.2_1775038768274_0.8664040858184963","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@asichain/asi-wallet-sdk","version":"0.1.3","license":"Apache-2.0","_id":"@asichain/asi-wallet-sdk@0.1.3","maintainers":[{"name":"asichain-admin","email":"npm.asichain@singularitynet.io"},{"name":"andrew_serbin_snet","email":"andrew.serbin@singularitynet.io"}],"homepage":"https://github.com/asi-alliance/asi-chain-wallet-sdk#readme","bugs":{"url":"https://github.com/asi-alliance/asi-chain-wallet-sdk/issues"},"dist":{"shasum":"e284e2d3b086306f83c70417a5f9646b8fb5d431","tarball":"https://registry.npmjs.org/@asichain/asi-wallet-sdk/-/asi-wallet-sdk-0.1.3.tgz","fileCount":46,"integrity":"sha512-XEeQc1YVophNywYywGZOl4VonkGvAi/EbfQqwsTH5OmnwjL+2WoP4hskN33CCZ9nWcI4WFD41hFOpIJ9rFEgeg==","signatures":[{"sig":"MEUCIQCYFl95TKuXjGMr5cGD6J5btLluJ7hNAv57Ju98iZL+AQIgLnMlB8QYKiG8QgU1PQwLKhU0fvrwL68wTONnxZADnGE=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":263322},"main":"dist/index.cjs.js","type":"module","types":"dist/index.d.ts","module":"dist/index.esm.js","exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.cjs.js"}},"gitHead":"696a47523fc821a517da55fac85f5e5643793aa1","scripts":{"dev":"tsc -p tsconfig.build.json --emitDeclarationOnly && rollup -c -w","build":"tsc -p tsconfig.build.json --emitDeclarationOnly && rollup -c","security:gate":"npm run build && npm run test:security && npm run check:secret-logs && npm audit --omit=dev","test:security":"node scripts/security/run-security-tests.mjs","check:secret-logs":"node scripts/security/check-secret-logs.mjs"},"_npmUser":{"name":"andrew_serbin_snet","email":"andrew.serbin@singularitynet.io"},"repository":{"url":"git+https://github.com/asi-alliance/asi-chain-wallet-sdk.git","type":"git"},"_npmVersion":"10.8.2","description":"ASI Wallet SDK","directories":{},"sideEffects":false,"_nodeVersion":"20.19.4","dependencies":{"bs58":"^6.0.0","axios":"^1.13.2","bip32":"^4.0.0","bip39":"^3.1.0","buffer":"^6.0.3","blakejs":"^1.2.1","js-sha3":"^0.9.3","@noble/hashes":"^1.6.0","tiny-secp256k1":"^2.2.4","@noble/secp256k1":"^1.7.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","tslib":"^2.8.1","rollup":"^3.27.0","typescript":"^5.9.3","@types/node":"^25.4.0","rollup-plugin-dts":"^6.3.0","@rollup/plugin-alias":"^5.0.0","@rollup/plugin-terser":"^0.1.0","@rollup/plugin-commonjs":"^25.0.0","@rollup/plugin-typescript":"^11.1.0","@rollup/plugin-node-resolve":"^15.0.1"},"_npmOperationalInternal":{"tmp":"tmp/asi-wallet-sdk_0.1.3_1775136425203_0.20944230212805026","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@asichain/asi-wallet-sdk","version":"0.1.4","license":"Apache-2.0","_id":"@asichain/asi-wallet-sdk@0.1.4","maintainers":[{"name":"asichain-admin","email":"npm.asichain@singularitynet.io"},{"name":"andrew_serbin_snet","email":"andrew.serbin@singularitynet.io"}],"homepage":"https://github.com/asi-alliance/asi-chain-wallet-sdk#readme","bugs":{"url":"https://github.com/asi-alliance/asi-chain-wallet-sdk/issues"},"dist":{"shasum":"33195a064902635450065111e256f787f18547db","tarball":"https://registry.npmjs.org/@asichain/asi-wallet-sdk/-/asi-wallet-sdk-0.1.4.tgz","fileCount":8,"integrity":"sha512-k692Kr4QbOizacHt1p+m1VAldTaBYicp2bi+S5cc362Mvh7uQ/m5e/oVghJ0DIN6KyYCHEWKyyLicJjLSLDpSg==","signatures":[{"sig":"MEYCIQCot1gpzjduxQxX+jD6YpQt8DsIxkil6yu8db5TkDKBawIhALFR/9VV/Bu7cCjyqIiOgg+avNwwyeT1mWVEZdRrRQvN","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":240332},"main":"dist/index.esm.js","type":"module","types":"dist/index.d.ts","exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.cjs"}},"gitHead":"a114630ed8dd7f5568621804c1e3e3104a03414d","scripts":{"dev":"tsc -p tsconfig.build.json && rollup -c -w","build":"tsc -p tsconfig.build.json && rollup -c","security:gate":"npm run build && npm run test:security && npm run check:secret-logs && npm audit --omit=dev","test:security":"node scripts/security/run-security-tests.mjs","check:secret-logs":"node scripts/security/check-secret-logs.mjs"},"_npmUser":{"name":"andrew_serbin_snet","email":"andrew.serbin@singularitynet.io"},"repository":{"url":"git+https://github.com/asi-alliance/asi-chain-wallet-sdk.git","type":"git"},"_npmVersion":"10.8.2","description":"ASI Wallet SDK","directories":{},"sideEffects":false,"_nodeVersion":"20.19.4","dependencies":{"bs58":"^6.0.0","axios":"^1.13.2","bip32":"^4.0.0","bip39":"^3.1.0","buffer":"^6.0.3","blakejs":"^1.2.1","js-sha3":"^0.9.3","@noble/hashes":"^1.6.0","tiny-secp256k1":"^2.2.4","@noble/secp256k1":"^1.7.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","tslib":"^2.8.1","rollup":"^3.27.0","typescript":"^5.9.3","@types/node":"^25.4.0","rollup-plugin-dts":"^6.3.0","@rollup/plugin-alias":"^5.0.0","@rollup/plugin-terser":"^0.1.0","@rollup/plugin-commonjs":"^25.0.0","@rollup/plugin-typescript":"^11.1.0","@rollup/plugin-node-resolve":"^15.0.1"},"_npmOperationalInternal":{"tmp":"tmp/asi-wallet-sdk_0.1.4_1775643081404_0.09926232319709238","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@asichain/asi-wallet-sdk","version":"0.1.5","license":"Apache-2.0","_id":"@asichain/asi-wallet-sdk@0.1.5","maintainers":[{"name":"asichain-admin","email":"npm.asichain@singularitynet.io"},{"name":"andrew_serbin_snet","email":"andrew.serbin@singularitynet.io"}],"homepage":"https://github.com/asi-alliance/asi-chain-wallet-sdk#readme","bugs":{"url":"https://github.com/asi-alliance/asi-chain-wallet-sdk/issues"},"dist":{"shasum":"c19fe5411b602cfd8258d474a645f53575e8d58d","tarball":"https://registry.npmjs.org/@asichain/asi-wallet-sdk/-/asi-wallet-sdk-0.1.5.tgz","fileCount":8,"integrity":"sha512-yObx3YRZYnygrtm5rSgLpd9mjWiaPqX+q32hLMoMIINQNLmB7oJ/9vQjWmBK1EsJE9dxWZIJRnT5hUIjrcWSOA==","signatures":[{"sig":"MEYCIQCUfLxO7LVoOx1bjyckz0+YsbWV9kMkjfWhVd9jL89BXgIhAKxiGp9RZ/ke8ldAWLHnk75wqEG/OWUNoYi5K9Sx4MtH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":354778},"main":"dist/index.esm.js","type":"module","types":"dist/index.d.ts","exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.cjs"}},"gitHead":"7cb8332b0387c5c05b5f374806e6f3b172dad7ba","scripts":{"dev":"tsc -p tsconfig.build.json && rollup -c -w","build":"tsc -p tsconfig.build.json && rollup -c","security:gate":"npm run build && npm run test:security && npm run check:secret-logs && npm audit --omit=dev","test:security":"node scripts/security/run-security-tests.mjs","check:secret-logs":"node scripts/security/check-secret-logs.mjs"},"_npmUser":{"name":"andrew_serbin_snet","email":"andrew.serbin@singularitynet.io"},"repository":{"url":"git+https://github.com/asi-alliance/asi-chain-wallet-sdk.git","type":"git"},"_npmVersion":"10.8.2","description":"ASI Wallet SDK","directories":{},"sideEffects":false,"_nodeVersion":"20.19.4","dependencies":{"bs58":"^6.0.0","axios":"^1.13.2","bip32":"^4.0.0","bip39":"^3.1.0","buffer":"^6.0.3","blakejs":"^1.2.1","js-sha3":"^0.9.3","@noble/hashes":"^1.6.0","@noble/secp256k1":"^1.7.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","tslib":"^2.8.1","rollup":"^3.27.0","typescript":"^5.9.3","@types/node":"^25.4.0","rollup-plugin-dts":"^6.3.0","@rollup/plugin-alias":"^5.0.0","@rollup/plugin-terser":"^0.1.0","@rollup/plugin-commonjs":"^25.0.0","@rollup/plugin-typescript":"^11.1.0","@rollup/plugin-node-resolve":"^15.0.1"},"_npmOperationalInternal":{"tmp":"tmp/asi-wallet-sdk_0.1.5_1775728673158_0.8294958453645567","host":"s3://npm-registry-packages-npm-production"}},"0.1.6":{"name":"@asichain/asi-wallet-sdk","version":"0.1.6","license":"Apache-2.0","_id":"@asichain/asi-wallet-sdk@0.1.6","maintainers":[{"name":"asichain-admin","email":"npm.asichain@singularitynet.io"},{"name":"andrew_serbin_snet","email":"andrew.serbin@singularitynet.io"}],"homepage":"https://github.com/asi-alliance/asi-chain-wallet-sdk#readme","bugs":{"url":"https://github.com/asi-alliance/asi-chain-wallet-sdk/issues"},"dist":{"shasum":"49944b40aa05cf63367255c76c95db1526a40909","tarball":"https://registry.npmjs.org/@asichain/asi-wallet-sdk/-/asi-wallet-sdk-0.1.6.tgz","fileCount":8,"integrity":"sha512-rt+dposDo5e4jj9KB2gh186IpSVGQFfg1eumhCsUClaTsWiwUR7HdDAVwnDC+EJ1H+XP4scHlTiYUCPzfYUcrg==","signatures":[{"sig":"MEUCIBz+X7t7zAS+xNcVXXDEPEM5qeFKVxVpo9hnoitiMn+/AiEAjq6I5knvjrFmJj2r/SdzrMGcCwAgTtbfSmpKv4ZTph0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":355012},"main":"dist/index.esm.js","type":"module","types":"dist/index.d.ts","exports":{".":{"import":"./dist/index.esm.js","require":"./dist/index.cjs"}},"gitHead":"7310383af2edcd8c63730c31bd9fca2a8c3b4eed","scripts":{"dev":"tsc -p tsconfig.build.json && rollup -c -w","build":"tsc -p tsconfig.build.json && rollup -c","security:gate":"npm run build && npm run test:security && npm run check:secret-logs && npm audit --omit=dev","test:security":"node scripts/security/run-security-tests.mjs","check:secret-logs":"node scripts/security/check-secret-logs.mjs"},"_npmUser":{"name":"andrew_serbin_snet","email":"andrew.serbin@singularitynet.io"},"repository":{"url":"git+https://github.com/asi-alliance/asi-chain-wallet-sdk.git","type":"git"},"_npmVersion":"10.8.2","description":"ASI Wallet SDK","directories":{},"sideEffects":false,"_nodeVersion":"20.19.4","dependencies":{"bs58":"^6.0.0","axios":"^1.13.2","bip32":"^4.0.0","bip39":"^3.1.0","buffer":"^6.0.3","blakejs":"^1.2.1","js-sha3":"^0.9.3","@noble/hashes":"^1.6.0","@noble/secp256k1":"^1.7.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","tslib":"^2.8.1","rollup":"^3.27.0","typescript":"^5.9.3","@types/node":"^25.4.0","rollup-plugin-dts":"^6.3.0","@rollup/plugin-alias":"^5.0.0","@rollup/plugin-terser":"^0.1.0","@rollup/plugin-commonjs":"^25.0.0","@rollup/plugin-typescript":"^11.1.0","@rollup/plugin-node-resolve":"^15.0.1"},"_npmOperationalInternal":{"tmp":"tmp/asi-wallet-sdk_0.1.6_1775736914477_0.7835708289282581","host":"s3://npm-registry-packages-npm-production"}},"1.0.0":{"name":"@asichain/asi-wallet-sdk","version":"1.0.0","license":"Apache-2.0","_id":"@asichain/asi-wallet-sdk@1.0.0","maintainers":[{"name":"asichain-admin","email":"npm.asichain@singularitynet.io"},{"name":"andrew_serbin_snet","email":"andrew.serbin@singularitynet.io"},{"name":"ivanribin","email":"ivan.rybin@singularitynet.io"}],"homepage":"https://github.com/asi-alliance/asi-chain-wallet-sdk#readme","bugs":{"url":"https://github.com/asi-alliance/asi-chain-wallet-sdk/issues"},"dist":{"shasum":"02ea67f75e80a4754248ccb022915258f119c1d4","tarball":"https://registry.npmjs.org/@asichain/asi-wallet-sdk/-/asi-wallet-sdk-1.0.0.tgz","fileCount":8,"integrity":"sha512-9HfGe0Ms2rHIv0yHSG+qpRDoMt5fnyJfN88IZj1/tiEJbfXiytB23qb1PSu0sZkbO+6Oz1/JHt83DCJf2Wka0Q==","signatures":[{"sig":"MEQCIFcnWHM4vwG2rsWpDfPLW2BjsNcnmmim8AFpd+2aeNH8AiBYv82Qmb+RZfpBZAfASoZI11WXmDmLfsLkTMHn/7Fa/g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":520295},"main":"dist/index.esm.js","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","require":"./dist/index.cjs"}},"gitHead":"f66db6976baa00acf4eec613c1fb773804788115","scripts":{"dev":"tsc -p tsconfig.build.json && rollup -c -w","build":"tsc -p tsconfig.build.json && rollup -c","test:unit":"node scripts/security/run-unit-tests.mjs","security:gate":"npm run build && npm run test:security && npm run check:secret-logs && npm audit --omit=dev","test:security":"node scripts/security/run-security-tests.mjs","check:secret-logs":"node scripts/security/check-secret-logs.mjs"},"_npmUser":{"name":"ivanribin","email":"ivan.rybin@singularitynet.io"},"repository":{"url":"git+https://github.com/asi-alliance/asi-chain-wallet-sdk.git","type":"git"},"_npmVersion":"10.9.4","description":"ASI Wallet SDK","directories":{},"sideEffects":false,"_nodeVersion":"22.22.1","dependencies":{"bs58":"^6.0.0","axios":"^1.13.2","bip32":"^4.0.0","bip39":"^3.1.0","buffer":"^6.0.3","blakejs":"^1.2.1","js-sha3":"^0.9.3","node-persist":"^4.0.4","@noble/hashes":"^1.6.0","@noble/secp256k1":"^1.7.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","tslib":"^2.8.1","dotenv":"^17.4.2","rollup":"^3.27.0","typescript":"^5.9.3","@types/node":"^25.4.0","fake-indexeddb":"^6.2.5","rollup-plugin-dts":"^6.3.0","@types/node-persist":"^3.1.8","@rollup/plugin-alias":"^5.0.0","@rollup/plugin-terser":"^0.1.0","@rollup/plugin-commonjs":"^25.0.0","@rollup/plugin-typescript":"^11.1.0","@rollup/plugin-node-resolve":"^15.0.1"},"_npmOperationalInternal":{"tmp":"tmp/asi-wallet-sdk_1.0.0_1784731497262_0.1325232087657171","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"_id":"@asichain/asi-wallet-sdk@2.0.0","bugs":{"url":"https://github.com/asi-alliance/asi-chain-wallet-sdk/issues"},"dist":{"shasum":"a616034ebd27bd1df9277071c2d097330dd52d62","tarball":"https://registry.npmjs.org/@asichain/asi-wallet-sdk/-/asi-wallet-sdk-2.0.0.tgz","fileCount":8,"integrity":"sha512-86v32m8KpsZfh4C80x/lTW584syVKOcMIBaC3uC5KPPElaHheWwrR+d1kLP0JWqgX780kCsX4L1yMbe51NAcxA==","signatures":[{"sig":"MEUCIFW33XuLOfKdYZyUHe22xuk2i1RQvmFtyVQ22Ut9mzCdAiEAl79D920m1+mQntJK9Izqr8nlaRe6zUzOJHaj/NV+bAc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIFTYlDdkZIprsIgSCCVtAbQi+NIR4GQHtzJHQqkTUyYJAiEAuMupBbGPvlpPImODOOS7afgDgE8oWPNev64DCwlGcos="}],"unpackedSize":925880},"main":"dist/index.esm.js","name":"@asichain/asi-wallet-sdk","type":"module","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.esm.js","require":"./dist/index.cjs"}},"gitHead":"24ddfb4f8318e996d2fa57efbfd659b06287ee65","license":"Apache-2.0","scripts":{"dev":"tsc -p tsconfig.build.json && rollup -c -w","gate":"npm run build && npm run test:unit && npm run test:security && npm run check:secret-logs && npm audit --omit=dev","build":"tsc -p tsconfig.build.json && rollup -c","test:unit":"node scripts/security/run-unit-tests.mjs","test:security":"node scripts/security/run-security-tests.mjs","check:secret-logs":"node scripts/security/check-secret-logs.mjs"},"version":"2.0.0","_npmUser":{"name":"ivanribin","email":"ivan.rybin@singularitynet.io"},"homepage":"https://github.com/asi-alliance/asi-chain-wallet-sdk#readme","repository":{"url":"git+https://github.com/asi-alliance/asi-chain-wallet-sdk.git","type":"git"},"_npmVersion":"10.9.4","description":"ASI Wallet SDK","directories":{},"maintainers":[{"name":"asichain-admin","email":"npm.asichain@singularitynet.io"},{"name":"andrew_serbin_snet","email":"andrew.serbin@singularitynet.io"},{"name":"ivanribin","email":"ivan.rybin@singularitynet.io"}],"sideEffects":false,"_nodeVersion":"22.22.1","dependencies":{"bs58":"^6.0.0","axios":"^1.13.2","bip32":"^4.0.0","bip39":"^3.1.0","buffer":"^6.0.3","blakejs":"^1.2.1","js-sha3":"^0.9.3","node-persist":"^4.0.4","@noble/hashes":"^1.6.0","@noble/secp256k1":"^1.7.0"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.20.6","tslib":"^2.8.1","dotenv":"^17.4.2","rollup":"^3.27.0","typescript":"^5.9.3","@types/node":"^25.4.0","fake-indexeddb":"^6.2.5","rollup-plugin-dts":"^6.3.0","@types/node-persist":"^3.1.8","@rollup/plugin-alias":"^5.0.0","@rollup/plugin-terser":"^0.1.0","@rollup/plugin-commonjs":"^25.0.0","@rollup/plugin-typescript":"^11.1.0","@rollup/plugin-node-resolve":"^15.0.1"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/asi-wallet-sdk_2.0.0_1790870460756_0.7245244918600029"}}},"time":{"created":"2026-03-31T12:44:28.234Z","modified":"2026-10-01T16:01:01.062Z","0.1.0":"2026-03-31T12:44:28.530Z","0.1.1":"2026-03-31T13:41:15.346Z","0.1.2":"2026-04-01T10:19:28.425Z","0.1.3":"2026-04-02T13:27:05.408Z","0.1.4":"2026-04-08T10:11:21.643Z","0.1.5":"2026-04-09T09:57:53.328Z","0.1.6":"2026-04-09T12:15:14.635Z","1.0.0":"2026-07-22T14:44:57.512Z","2.0.0":"2026-10-01T16:01:00.862Z"},"bugs":{"url":"https://github.com/asi-alliance/asi-chain-wallet-sdk/issues"},"license":"Apache-2.0","homepage":"https://github.com/asi-alliance/asi-chain-wallet-sdk#readme","repository":{"url":"git+https://github.com/asi-alliance/asi-chain-wallet-sdk.git","type":"git"},"description":"ASI Wallet SDK","maintainers":[{"name":"asichain-admin","email":"npm.asichain@singularitynet.io"},{"name":"andrew_serbin_snet","email":"andrew.serbin@singularitynet.io"},{"name":"ivanribin","email":"ivan.rybin@singularitynet.io"}],"readme":"<div align=\"center\">\n\n# ASI Chain: Wallet SDK\n\n[![Status](https://img.shields.io/badge/Status-BETA-FFA500?style=for-the-badge)](https://github.com/asi-alliance/asi-chain-wallet-sdk)\n[![License](https://img.shields.io/badge/License-Apache_2.0-green?style=for-the-badge)](LICENSE)\n[![Docs](https://img.shields.io/badge/Docs-Available-C4F0C1?style=for-the-badge)](https://docs.asichain.io)\n</br>\n![npm](https://img.shields.io/npm/v/@asichain/asi-wallet-sdk?label=asi-wallet-sdk&color=blue)\n\n<h3>TypeScript SDK for wallet management and blockchain interaction on ASI Chain</h3>\n\nPart of the [**Artificial Superintelligence Alliance**](https://superintelligence.io) ecosystem\n\n_Uniting Fetch.ai, SingularityNET, and CUDOS_\n\n</div>\n\n---\n\n## Table of Contents\n\n1. [Overview](#overview)\n2. [Key Features](#key-features)\n3. [Installation](#installation)\n4. [Quick Start](#quick-start)\n5. [Architecture](#architecture)\n6. [Project Structure](#project-structure)\n7. [Documentation](#documentation)\n8. [Security](#security)\n9. [Development](#development)\n10. [License](#license)\n\n---\n\n## Overview\n\nASI Chain Wallet SDK is a modular TypeScript library designed to simplify wallet integration and key management for [ASI Chain](https://github.com/asi-alliance/asi-chain) applications. It is organized around a high-level [`Client`](docs/DOMAINS.md) facade that manages multi-account HD wallets, secure encrypted storage, multi-network access, and reservation-aware transfers, while keeping secret material behind a strict signing boundary.\n\n---\n\n## Key Features\n\n- **Client Facade** - Single entry point for wallet lifecycle, networks, balances, and transfers via [Client](docs/DOMAINS.md)\n- **Multi-Account HD Wallets** - Private-key and BIP-39/BIP-44 HD wallets with on-demand account derivation via [Wallet](docs/DOMAINS.md) and [Account](docs/DOMAINS.md)\n- **Separate Open and Unlocked States** - Wallets are loaded into memory independently of the signing session that holds the decrypted secret, via [Client](docs/DOMAINS.md#open-vs-unlocked) and [SigningSession](docs/DOMAINS.md)\n- **Event Subscriptions** - Typed, isolated listeners attachable at any time through `client.getEventBus()` via [ClientEventBus](docs/SERVICES.md)\n- **Duplicate Protection** - Wallets and accounts are matched on non-reversible key fingerprints, so re-importing the same secret is refused even while everything is locked, via [KeyFingerprintService](docs/SERVICES.md)\n- **Encrypted Wallet Keyfiles** - Password-protected export and import of a whole wallet, with a preview that reports which accounts are new before anything is written, via [Client](docs/DOMAINS.md#keyfile-export--import)\n- **Versioned Storage with Migrations** - Persisted data carries a schema version; incompatible or interrupted state is refused up front instead of being silently rewritten, via [StorageMigrationRunner](docs/SERVICES.md)\n- **Secure Key Handling** - PBKDF2 + AES-GCM encryption with key zeroization and a no-raw-export signing boundary via [CryptoService](docs/SERVICES.md) and [Signer](docs/DOMAINS.md)\n- **Cross-Environment Storage** - IndexedDB (browser) and node-persist (Node.js) behind a shared table abstraction via [storage layer](docs/DOMAINS.md)\n- **Pending-Transaction Reservations** - Persistent, reservation-aware available balance with deploy-status polling via [ReservationAdapter](docs/DOMAINS.md)\n- **External Reservation Management** - Deploys submitted outside the SDK can lock funds too: reservations can be added, updated, and removed directly, with validation and concurrency guards, via [Client](docs/DOMAINS.md#external-reservations)\n- **Detached Deploy Signing** - `signDeploy` builds and signs a deploy and returns the signed envelope for callers that submit it themselves, via [Client](docs/DOMAINS.md)\n- **Explicit Account Targeting** - No active-account state: every call names its wallet and account, so concurrent operations on one wallet cannot sign for the wrong account, via [Client](docs/DOMAINS.md#no-active-account)\n- **Typed Failures** - Decryption, storage, and node errors carry a machine-readable code and structured fields instead of an assembled message string, via [CustomError](docs/DOMAINS.md#customerror-srcdomainscustomerrorindexts)\n- **Multi-Network Access** - Runtime network switching over validator, read-only, and GraphQL indexer clients via [ApiClientManager](docs/DOMAINS.md)\n- **Per-Network Node Profiles** - Legacy Scala and new Rust f1r3node request contracts behind one interface via [NodeApiAdapter](docs/DOMAINS.md)\n- **Transaction History** - Indexed transfer history through a GraphQL anti-corruption layer via [AccountDataService](docs/SERVICES.md)\n\n---\n\n## Installation\n\n```bash\nnpm install @asichain/asi-wallet-sdk\n```\n\n---\n\n## Quick Start\n\n### Create the Client\n\nThe [`Client`](docs/DOMAINS.md) is the single entry point. Provide a per-network\nconfiguration and (optionally) a default network.\n\n```typescript\nimport {\n    Client,\n    NodeApiProfile,\n    type TNetworksConfig,\n} from \"@asichain/asi-wallet-sdk\";\n\nconst networksConfig: TNetworksConfig = {\n    DevNet: {\n        ValidatorURL: \"http://validator-node:40403\",\n        ReadOnlyURL: \"http://observer-node:40403\",\n        IndexerURL: \"http://indexer-node:8080\",\n        nodeApiProfile: NodeApiProfile.SCALA,\n    },\n    Dev: {\n        ValidatorURL: \"\",\n        ReadOnlyURL: \"\",\n        IndexerURL: \"\",\n        nodeApiProfile: NodeApiProfile.RUST,\n    },\n    MainNet: {\n        ValidatorURL: \"\",\n        ReadOnlyURL: \"\",\n        IndexerURL: \"\",\n        nodeApiProfile: NodeApiProfile.SCALA,\n    },\n    TestNet: {\n        ValidatorURL: \"\",\n        ReadOnlyURL: \"\",\n        IndexerURL: \"\",\n        nodeApiProfile: NodeApiProfile.SCALA,\n    },\n};\n\nconst client = await Client.create({\n    networksConfig,\n    defaultNetwork: \"DevNet\",\n});\n```\n\n`Client.create` also brings storage up to date. Persisted data carries a schema\nversion, and startup refuses to touch anything it cannot safely handle: data\nwritten by a newer SDK build, a malformed migration chain, or a migration that a\nprevious run left unfinished. Those rejections are `StorageSchemaError`s carrying\nan `isStorageIntact` flag, which tells you whether the data on disk is still\nreadable (update the SDK) or needs restoring from an export.\n\n`nodeApiProfile` is required on every network. It selects which f1r3node\nimplementation the SDK talks to — `SCALA` for the legacy node, `RUST` for the new\none — and that choice drives the HTTP request shape, the endpoint a given call\ntargets, and which Rholang vault contract the built-in terms address. There is no\ndefault: an omitted or unknown profile throws at `Client.create`, because guessing\nit would silently send legacy-shaped requests to a new node. Custom networks added\nat runtime through `client.addNetwork` must supply it too.\n\n### Create Wallets\n\n```typescript\nimport { MnemonicStrength } from \"@asichain/asi-wallet-sdk\";\n\n// HD (mnemonic) wallet\nconst mnemonic = client.generateMnemonic(MnemonicStrength.TWELVE_WORDS);\nconst hdWallet = await client.createHDWallet(\n    { mnemonic, accountName: \"Account 1\" },\n    \"wallet-password\",\n);\n\n// Private-key wallet\nconst privateKey = client.generatePrivateKey();\nconst pkWallet = await client.createPrivateKeyWallet(\n    { privateKey, accountName: \"Imported\" },\n    \"wallet-password\",\n);\n\n// Derive another account on the HD wallet\nconst { account } = await client.deriveAccount(\n    hdWallet.getId(),\n    \"Account 2\",\n    \"wallet-password\",\n);\nconsole.log(\"New address:\", account.getAddress());\n```\n\nSee [Client](docs/DOMAINS.md), [Wallet](docs/DOMAINS.md), and [Account](docs/DOMAINS.md) for the full API reference.\n\nCreating a wallet whose secret is already stored throws `DuplicateWalletError`,\nand one whose key already belongs to a stored account throws\n`DuplicateAccountError`. Both carry the ids of the existing owner, and both work\nwhile every wallet is closed, because the match runs on a key fingerprint rather\nthan on decrypted material.\n\n### Open, Unlock, and Close Wallets\n\nA wallet being **open** (present in memory) and a wallet being **unlocked** (able\nto sign without a password) are two different states.\n\n```typescript\n// Load a stored wallet into memory. With the default session policy it comes\n// back already unlocked.\nconst wallet = await client.openWallet(signerId, \"wallet-password\");\n\nclient.isWalletOpen(wallet.getId()); // true\nclient.isWalletUnlocked(wallet.getId()); // true\n\n// End the signing session, keep the wallet open\nclient.lockWallet(wallet.getId());\n\n// Start a new session on the wallet that is already open\nawait client.unlockWallet(wallet.getId(), \"wallet-password\");\n\n// Drop it from memory; storage is untouched\nclient.closeWallet(wallet.getId());\n\n// Delete it from storage for good\nawait client.removeWallet(wallet.getId());\n```\n\nSessions are fixed-duration: they auto-lock `autoLockMs` after unlock (15 min by\ndefault) and are not extended by activity. Signing after expiry without a\npassword throws `WalletLockedError` with an HTTP-style status `403`, so a UI can\ntreat it like an expired token and re-prompt. See\n[Open vs unlocked](docs/DOMAINS.md#open-vs-unlocked).\n\n### Export and Import a Wallet Keyfile\n\nA wallet keyfile is the password-protected backup of a whole wallet: its secret\nplus its account list, both encrypted.\n\n```typescript\n// Export (returns an object; serialize it however you like)\nconst keyfile = await client.exportWalletKeyfile(wallet.getId(), \"wallet-password\");\n\n// Import: look before you write\nconst preview = await client.previewWalletKeyfileImport(keyfile, \"wallet-password\");\n\nif (preview.existingSignerId) {\n    // The secret is already stored - add only the accounts that are new\n    const newIndexes = preview.accounts\n        .filter((account) => account.status === \"new\")\n        .map((account) => account.index!);\n\n    await client.importKeyfileAccounts(keyfile, \"wallet-password\", {\n        accountIndexes: newIndexes,\n    });\n} else {\n    // Unknown secret - create the wallet\n    await client.importWalletKeyfile(keyfile, \"wallet-password\");\n}\n```\n\n`previewWalletKeyfileImport` writes nothing. It decrypts the keyfile, derives\nevery account it declares, and reports each one as `\"new\"` or\n`\"already-imported\"`, so a UI can show what an import would actually do and let\nthe user choose. `source` accepts either the object or its JSON string.\n\nNote that `getExportedAccountData` is a different thing: a public, passwordless\ndescriptor of one account (name, address, index). It carries no key material and\ncannot restore anything. See [keyfile export & import](docs/DOMAINS.md#keyfile-export--import).\n\n### Subscribe to Events\n\n`client.getEventBus()` returns a typed `on` / `off` source. Unlike the\nconstructor-time `eventDispatcher`, subscriptions can be added and removed at any\npoint in the client's life, and `on` hands back its own unsubscribe.\n\n```typescript\nimport { ClientEvent } from \"@asichain/asi-wallet-sdk\";\n\nconst unsubscribe = client\n    .getEventBus()\n    .on(ClientEvent.WALLETS_CHANGED, (wallets) => {\n        render(wallets);\n    });\n\n// later\nunsubscribe();\n```\n\nListeners are isolated: one that throws or rejects never breaks the emit loop or\nthe SDK operation behind it. Route those failures somewhere visible with the\n`onListenerError` option on `Client.create`.\n\n### Check Balance and Transfer\n\n```typescript\n// The SDK keeps no active account: every call names its target account\nconst [account] = hdWallet.getAccounts();\n\n// Total and reservation-aware available balance\nconst balance = await client.getBalance(account.getAddress());\nconst available = await client.getAvailableBalance(\n    hdWallet.getId(),\n    account.getId(),\n);\nconsole.log(\"Balance:\", client.toDisplayAmount(balance));\n\n// Transfer tokens (amount in atomic units)\nconst reserved = await client.transfer(\n    {\n        walletId: hdWallet.getId(),\n        accountId: account.getId(),\n        to: recipientAddress,\n        amount: client.toAtomicAmount(\"10\"), // 10 ASI\n    },\n    \"wallet-password\",\n);\nconsole.log(\"Deploy id:\", reserved.deployId);\n\n// Follow the deploy until the node confirms it\nconst unsubscribe = reserved.subscribe({\n    onStatus: (status) => console.log(\"Status:\", status.status),\n    onConfirmed: () => console.log(\"Confirmed\"),\n});\n```\n\nA balance read that cannot be trusted now throws `BalanceUnavailableError`\n(status `502`) carrying the address and a reason, instead of resolving to `0n`.\nA node that is unreachable, a vault that reports an error, and an account with no\nfunds are three different outcomes, so handle the error rather than reading a\nfalsy balance as \"empty\".\n\nSee [Client](docs/DOMAINS.md) for the full API reference. For amount conversions, see [functions utilities](docs/UTILS.md).\n\n### Reserve Funds for a Deploy You Submit Yourself\n\n`transfer` and `deploy` reserve funds on their own. When the deploy is submitted\noutside the SDK — a hardware signer, a relayer, another app on the same vault —\nthe reservation can be created directly so the available balance and the pending\nhistory stay correct.\n\n```typescript\nconst request = {\n    walletId: hdWallet.getId(),\n    accountId: account.getId(),\n    kind: \"transfer\" as const,\n    deployId, // the deploy you submitted yourself\n    to: recipientAddress,\n    amount: client.toAtomicAmount(\"10\"),\n    gasCost: client.toAtomicAmount(\"0.1\"),\n    pendingAmount: client.toAtomicAmount(\"10.1\"), // must cover amount + gasCost\n};\n\nconst reservation = await client.addTransactionReservation(\n    request,\n    \"wallet-password\",\n);\n\n// Correct it while it is still pending, keeping the same reservation id\nawait client.updateTransactionReservation(reservation.id, {\n    ...request,\n    amount: client.toAtomicAmount(\"12\"),\n    pendingAmount: client.toAtomicAmount(\"12.1\"),\n});\n\n// Or release the funds early\nawait client.removeTransactionReservation(hdWallet.getId(), reservation.id);\n```\n\n`pendingAmount` is the total to lock and must cover `amount + gasCost`; a\nreservation that does not is rejected rather than under-locking the balance. The\nwhole available balance may be reserved. A reservation still expires on its own\nafter `RESERVATION_EXPIRATION_TIME` and is released when the deploy is confirmed,\nso these calls are a correction channel, not a lifecycle to manage by hand.\n\nConcurrent actions on the same account, deploy, or reservation are refused with\n`ReservationActionInProgressError` (status `409`) rather than interleaved. See\n[External reservations](docs/DOMAINS.md#external-reservations).\n\n### Sign a Deploy Without Submitting It\n\nWhen the submission is yours but the signature is not, `signDeploy` stops after\nsigning and hands back the signed envelope. Nothing is sent to the node and no\nreservation is created, so pair it with `addTransactionReservation` to lock the\nfunds locally.\n\n```typescript\nconst signed = await client.signDeploy(\n    {\n        walletId: hdWallet.getId(),\n        accountId: account.getId(),\n        term: rholangTerm,\n        phloLimit: 500_000, // optional, defaults from config\n        phloPrice: 1, // optional, defaults from config\n        shardId: \"root\", // optional, defaults to \"root\"\n    },\n    \"wallet-password\", // omit while a signing session is active\n);\n\n// { data, deployer, signature, sigAlgorithm } - submit it yourself\nawait submitToNode(signed);\n```\n\n`validAfterBlockNumber` and `timestamp` are filled in by the SDK from the current\nchain head, so the call still needs the network. The payload is validated before\nanything is signed: a blank term, a non-positive or unsafe `phloLimit` /\n`phloPrice`, or a blank `shardId` are rejected.\n\n---\n\n## Architecture\n\n### SDK Components\n\n```\n┌──────────────────────────────────────────────────────────────────┐\n│                        Application                               │\n└──────────────────────────────────────────────────────────────────┘\n                               │\n                               ▼\n┌─────────────────────────────────────────────────────────────────────┐\n│                     ASI Wallet SDK                                  │\n│                                                                     │\n│  ┌───────────────────────────────────────────────────────────────┐  │\n│  │                    Client (facade)                            │  │\n│  │  Wallet & account lifecycle • networks • balances • transfers │  │\n│  └───────────────────────────────────────────────────────────────┘  │\n│                                                                     │\n│  ┌───────────────────────────────────────────────────────────────┐  │\n│  │                      Domains                                  │  │\n│  │  • Wallet / Account    - Multi-account HD & PK wallets        │  │\n│  │  • Signer (HD / PK)    - No-raw-export signing boundary       │  │\n│  │  • SigningSession      - Fixed-window in-memory secret        │  │\n│  │  • LifecycleGuard      - Invalidate + drain in-flight work    │  │\n│  │  • Asset               - Token representation                 │  │\n│  │  • ReservationAdapter  - Pending-transaction reservations     │  │\n│  │  • ApiClientManager    - Per-network transport clients        │  │\n│  │  • ApiServiceRegistry  - Service composition root             │  │\n│  │  • Storage repositories- Signers / Accounts / Reservations    │  │\n│  └───────────────────────────────────────────────────────────────┘  │\n│                                                                     │\n│  ┌───────────────────────────────────────────────────────────────┐  │\n│  │                  Services / Managers                          │  │\n│  │  • WalletManager / AccountManager - In-memory ownership       │  │\n│  │  • StorageManager      - Persistence orchestration            │  │\n│  │  • ClientEventBus      - Typed client event subscriptions     │  │\n│  │  • WalletOperationGuard- Duplicate & concurrency guards       │  │\n│  │  • ReservationOperationGuard - Per-network reservation locks  │  │\n│  │  • StorageBootstrap / StorageMigrationRunner (schema)         │  │\n│  │  • ExportKeyfileService / ImportKeyfileService                │  │\n│  │  • DeployService / BlockService / AccountDataService          │  │\n│  │  • AssetsService / TransactionService / DeployStatusPoller    │  │\n│  │  • CryptoService / KeysManager / KeyDerivation / Mnemonic     │  │\n│  │  • KeyFingerprintService - Non-reversible key identity        │  │\n│  └───────────────────────────────────────────────────────────────┘  │\n│                                                                     │\n│  ┌───────────────────────────────────────────────────────────────┐  │\n│  │                    Storage backends                           │  │\n│  │  • BrowserStorage (IndexedDB) • NodeStorage (node-persist)    │  │\n│  │    selected automatically by environment                      │  │\n│  └───────────────────────────────────────────────────────────────┘  │\n│                                                                     │\n│  ┌───────────────────────────────────────────────────────────────┐  │\n│  │                    Utils / Config                             │  │\n│  │  • codec / constants / validators / functions / polyfills     │  │\n│  │  • decorators / guards / fabrics                              │  │\n│  └───────────────────────────────────────────────────────────────┘  │\n└─────────────────────────────────────────────────────────────────────┘\n                               │\n                               ▼\n┌─────────────────────────────────────────────────────────────────────┐\n│                    ASI Chain Network                                │\n│                                                                     │\n│  ┌──────────────┐  ┌──────────────┐  ┌──────────────┐               │\n│  │  Validator   │  │  Observer    │  │  Indexer     │               │\n│  │    Node      │  │    Node      │  │  (GraphQL)   │               │\n│  │  (Deploys)   │  │  (Queries)   │  │  (History)   │               │\n│  └──────────────┘  └──────────────┘  └──────────────┘               │\n└─────────────────────────────────────────────────────────────────────┘\n```\n\n### Cryptographic Flow\n\n- **Key Generation**: secp256k1 elliptic curve keypairs via [KeysManager](docs/SERVICES.md)\n- **Address Derivation**: keccak256 hash → blake2b checksum → Base58 encoding with [chain prefix](src/utils/constants)\n- **Encryption**: PBKDF2 (100,000 iterations) → AES-GCM via [CryptoService](docs/SERVICES.md)\n- **Mnemonic**: BIP-39 standard (12/24 words) via [MnemonicService](docs/SERVICES.md)\n- **Derivation Path**: BIP-44 via [KeyDerivationService](docs/SERVICES.md)\n\n---\n\n## Project Structure\n\n```\nasi-chain-wallet-sdk/\n├── src/                        # SDK source code\n│   ├── config/                # Runtime defaults and constants\n│   ├── domains/               # Domain models & transport (→ docs/DOMAINS.md)\n│   ├── services/              # Managers & business logic (→ docs/SERVICES.md)\n│   ├── fabrics/               # Factories: signer, storage, client, reservations (→ docs/UTILS.md)\n│   ├── utils/                 # Utilities & guards (→ docs/UTILS.md)\n│   └── index.ts              # Main export\n│\n├── playground/                # React demo app (→ docs/PLAYGROUND.md)\n│   ├── src/\n│   │   ├── sdk-react-kit/    # SDK ↔ React integration layer (hooks, context)\n│   │   ├── components/       # UI components\n│   │   ├── pages/            # WalletsPage, TxHistoryPage\n│   │   └── router/           # Client-side routing\n│   └── package.json\n│\n├── docs/                      # API reference\n│   ├── DOMAINS.md            # Domain models & transport\n│   ├── SERVICES.md           # Managers & services\n│   ├── UTILS.md              # Utilities & config\n│   └── PLAYGROUND.md         # Playground components\n│\n├── package.json              # SDK dependencies\n├── tsconfig.build.json       # TypeScript config\n└── README.md                 # This file\n```\n\n---\n\n## Documentation\n\n### SDK Reference\n\n| Document                                 | Description                                                                                                                                        |\n| ---------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------- |\n| [docs/DOMAINS.md](docs/DOMAINS.md)       | Domain models & transport (`Client`, `Wallet`, `Account`, `Signer`, `ReservationAdapter`, `ApiClientManager`, `NodeApiAdapter`, storage repositories, and types) |\n| [docs/SERVICES.md](docs/SERVICES.md)     | Managers & services (`WalletManager`, `AccountManager`, `StorageManager`, `DeployService`, `AssetsService`, `TransactionService`, `CryptoService`) |\n| [docs/UTILS.md](docs/UTILS.md)           | Utilities & config (`codec`, `constants`, `validators`, `functions`, `guards`, `decorators`, `fabrics`, `polyfills`)                               |\n| [docs/PLAYGROUND.md](docs/PLAYGROUND.md) | Playground components, the `sdk-react-kit` integration layer, and usage examples                                                                   |\n\n### Related Resources\n\n| Resource                | Link                                                                                             |\n| ----------------------- | ------------------------------------------------------------------------------------------------ |\n| ASI Chain Documentation | https://docs.asichain.io                                                                         |\n| ASI Chain Node          | [github.com/asi-alliance/asi-chain](https://github.com/asi-alliance/asi-chain)                   |\n| ASI Chain Wallet        | [github.com/asi-alliance/asi-chain-wallet](https://github.com/asi-alliance/asi-chain-wallet)     |\n| ASI Chain Explorer      | [github.com/asi-alliance/asi-chain-explorer](https://github.com/asi-alliance/asi-chain-explorer) |\n| ASI Chain Faucet        | [github.com/asi-alliance/asi-chain-faucet](https://github.com/asi-alliance/asi-chain-faucet)     |\n\n---\n\n## Security\n\n| Document                                         | Description                                                                |\n| ------------------------------------------------ | -------------------------------------------------------------------------- |\n| [SECURITY.md](SECURITY.md)                       | Vulnerability reporting policy, disclosure process, and supported versions |\n| [THREAT_MODEL.md](THREAT_MODEL.md)               | Threat assumptions, trust boundaries, adversary model, and mitigations     |\n| [SECURITY_INVARIANTS.md](SECURITY_INVARIANTS.md) | Non-negotiable key/storage/signing/documentation security guarantees       |\n| [CRYPTO_PROFILE.md](CRYPTO_PROFILE.md)           | Versioned crypto parameters, key-handling profile, and migration notes     |\n\n---\n\n## Development\n\n### Prerequisites\n\n- Node.js 18.x or higher\n- npm 9.x or higher\n\n### Setup\n\n```bash\n# Install SDK dependencies\nnpm install\n\n# Build the SDK\nnpm run build\n\n# Watch mode for development\nnpm run dev\n\n# Run the release gate locally: build, unit tests, security tests,\n# secret-log scan, and a production-dependency audit\nnpm run gate\n```\n\nThe gate was `npm run security:gate` and covered security checks only; it now\nalso runs `npm run test:unit`, so the same command CI runs is the one that has to\npass locally. The GitHub workflow is `.github/workflows/gate.yml`.\n\n### Playground\n\nThe [playground](playground) provides a React-based demo application for testing SDK functionality:\n\n```bash\ncd playground\nnpm install\n\n# Create .env file with per-network endpoints, e.g.:\n# VITE_DEFAULT_NETWORK=DevNet\n# VITE_DEVNET_VALIDATOR_URL=...\n# VITE_DEVNET_READONLY_URL=...\n# VITE_DEVNET_INDEXER_URL=...\n\nnpm run dev\n```\n\nPlayground available at `http://localhost:5173`. See [docs/PLAYGROUND.md](docs/PLAYGROUND.md) for component details.\n\n### Dependencies\n\n**SDK** ([package.json](package.json)):\n\n| Package                                                          | Version | Purpose                                   |\n| ---------------------------------------------------------------- | ------- | ----------------------------------------- |\n| [axios](https://github.com/axios/axios)                          | 1.13.2  | HTTP client for node communication        |\n| [bip32](https://github.com/bitcoinjs/bip32)                      | 4.0.0   | BIP-32 hierarchical deterministic wallets |\n| [bip39](https://github.com/bitcoinjs/bip39)                      | 3.1.0   | BIP-39 mnemonic generation                |\n| [blakejs](https://github.com/dcposch/blakejs)                    | 1.2.1   | BLAKE2b hashing for addresses             |\n| [bs58](https://github.com/cryptocoinjs/bs58)                     | 6.0.0   | Base58 encoding                           |\n| [@noble/hashes](https://github.com/paulmillr/noble-hashes)       | 1.6.0   | Cryptographic hash helpers                |\n| [@noble/secp256k1](https://github.com/paulmillr/noble-secp256k1) | 1.7.0   | secp256k1 key generation and signing      |\n| [js-sha3](https://github.com/nicknisi/js-sha3)                   | 0.9.3   | keccak256 hashing                         |\n| [node-persist](https://github.com/simonlast/node-persist)        | 4.0.4   | Node.js storage backend                   |\n| [buffer](https://github.com/feross/buffer)                       | 6.0.3   | Browser Buffer compatibility              |\n\n**Playground** ([playground/package.json](playground/package.json)):\n\n| Package                    | Version | Purpose                   |\n| -------------------------- | ------- | ------------------------- |\n| [react](https://react.dev) | 18.2.0  | UI framework              |\n| [vite](https://vite.dev)   | 7.2.6   | Build tool and dev server |\n\n---\n\n## License\n\nThis project is licensed under the Apache 2.0 License. See [LICENSE](LICENSE) file for details.\n\n---\n\nASI Alliance founding members: Fetch.ai, SingularityNET, and CUDOS\n","readmeFilename":"README.md"}