@aeternity/aepp-sdk 10.0.0 → 12.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/README.md +15 -14
- package/dist/aepp-sdk.browser-script.js +1 -1
- package/dist/aepp-sdk.browser-script.js.LICENSE.txt +13 -40
- package/dist/aepp-sdk.browser-script.js.map +1 -1
- package/dist/aepp-sdk.browser.js +1 -1
- package/dist/aepp-sdk.browser.js.map +1 -1
- package/dist/aepp-sdk.js +1 -1
- package/dist/aepp-sdk.js.map +1 -1
- package/es/AeSdk.d.ts +37 -0
- package/es/AeSdk.mjs +81 -0
- package/es/AeSdk.mjs.map +1 -0
- package/es/AeSdkAepp.d.ts +69 -0
- package/es/AeSdkAepp.mjs +175 -0
- package/es/AeSdkAepp.mjs.map +1 -0
- package/es/AeSdkBase.d.ts +212 -0
- package/es/AeSdkBase.mjs +310 -0
- package/es/AeSdkBase.mjs.map +1 -0
- package/es/AeSdkWallet.d.ts +103 -0
- package/es/AeSdkWallet.mjs +322 -0
- package/es/AeSdkWallet.mjs.map +1 -0
- package/es/Node.d.ts +44 -0
- package/es/Node.mjs +141 -0
- package/es/Node.mjs.map +1 -0
- package/es/account/Base.d.ts +65 -0
- package/es/account/Base.mjs +123 -0
- package/es/account/Base.mjs.map +1 -0
- package/es/account/Memory.d.ts +25 -0
- package/es/account/Memory.mjs +81 -0
- package/es/account/Memory.mjs.map +1 -0
- package/es/account/Rpc.d.ts +27 -0
- package/es/account/Rpc.mjs +79 -0
- package/es/account/Rpc.mjs.map +1 -0
- package/es/aens.d.ts +209 -0
- package/es/aens.mjs +332 -0
- package/es/aens.mjs.map +1 -0
- package/es/aepp-wallet-communication/connection/Browser.d.ts +32 -0
- package/es/aepp-wallet-communication/connection/Browser.mjs +70 -0
- package/es/aepp-wallet-communication/connection/Browser.mjs.map +1 -0
- package/es/aepp-wallet-communication/connection/BrowserRuntime.d.ts +17 -0
- package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs +57 -0
- package/es/aepp-wallet-communication/connection/BrowserRuntime.mjs.map +1 -0
- package/es/aepp-wallet-communication/connection/BrowserWindowMessage.d.ts +35 -0
- package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs +142 -0
- package/es/aepp-wallet-communication/connection/BrowserWindowMessage.mjs.map +1 -0
- package/es/aepp-wallet-communication/connection-proxy.d.ts +10 -0
- package/{src/utils/crypto-ts.ts → es/aepp-wallet-communication/connection-proxy.mjs} +15 -11
- package/es/aepp-wallet-communication/connection-proxy.mjs.map +1 -0
- package/es/aepp-wallet-communication/rpc/RpcClient.d.ts +33 -0
- package/es/aepp-wallet-communication/rpc/RpcClient.mjs +169 -0
- package/es/aepp-wallet-communication/rpc/RpcClient.mjs.map +1 -0
- package/es/aepp-wallet-communication/rpc/types.d.ts +77 -0
- package/es/aepp-wallet-communication/rpc/types.mjs +3 -0
- package/es/aepp-wallet-communication/rpc/types.mjs.map +1 -0
- package/es/aepp-wallet-communication/schema.d.ts +118 -0
- package/es/aepp-wallet-communication/schema.mjs +214 -0
- package/es/aepp-wallet-communication/schema.mjs.map +1 -0
- package/es/aepp-wallet-communication/wallet-detector.d.ts +24 -0
- package/es/aepp-wallet-communication/wallet-detector.mjs +63 -0
- package/es/aepp-wallet-communication/wallet-detector.mjs.map +1 -0
- package/es/apis/compiler/compiler.d.ts +92 -0
- package/es/apis/compiler/compiler.mjs +576 -0
- package/es/apis/compiler/compiler.mjs.map +1 -0
- package/es/apis/compiler/index.d.ts +2 -0
- package/es/apis/compiler/index.mjs +3 -0
- package/es/apis/compiler/index.mjs.map +1 -0
- package/es/apis/compiler/models/index.d.ts +248 -0
- package/es/apis/compiler/models/index.mjs +48 -0
- package/es/apis/compiler/models/index.mjs.map +1 -0
- package/es/apis/compiler/models/mappers.d.ts +23 -0
- package/es/apis/compiler/models/mappers.mjs +585 -0
- package/es/apis/compiler/models/mappers.mjs.map +1 -0
- package/es/apis/compiler/models/parameters.d.ts +13 -0
- package/es/apis/compiler/models/parameters.mjs +71 -0
- package/es/apis/compiler/models/parameters.mjs.map +1 -0
- package/es/apis/node/index.d.ts +2 -0
- package/es/apis/node/index.mjs +3 -0
- package/es/apis/node/index.mjs.map +1 -0
- package/es/apis/node/models/index.d.ts +1061 -0
- package/es/apis/node/models/index.mjs +2 -0
- package/es/apis/node/models/index.mjs.map +1 -0
- package/es/apis/node/models/mappers.d.ts +95 -0
- package/es/apis/node/models/mappers.mjs +4164 -0
- package/es/apis/node/models/mappers.mjs.map +1 -0
- package/es/apis/node/models/parameters.d.ts +17 -0
- package/es/apis/node/models/parameters.mjs +165 -0
- package/es/apis/node/models/parameters.mjs.map +1 -0
- package/es/apis/node/node.d.ts +215 -0
- package/es/apis/node/node.mjs +1165 -0
- package/es/apis/node/node.mjs.map +1 -0
- package/es/chain.d.ts +220 -0
- package/es/chain.mjs +524 -0
- package/es/chain.mjs.map +1 -0
- package/es/channel/handlers.d.ts +34 -0
- package/es/channel/{handlers.js → handlers.mjs} +163 -130
- package/es/channel/handlers.mjs.map +1 -0
- package/es/channel/index.d.ts +634 -0
- package/es/channel/index.mjs +978 -0
- package/es/channel/index.mjs.map +1 -0
- package/es/channel/internal.d.ts +100 -0
- package/es/channel/internal.mjs +328 -0
- package/es/channel/internal.mjs.map +1 -0
- package/es/contract/Compiler.d.ts +17 -0
- package/es/contract/Compiler.mjs +67 -0
- package/es/contract/Compiler.mjs.map +1 -0
- package/es/contract/aci.d.ts +125 -0
- package/es/contract/aci.mjs +496 -0
- package/es/contract/aci.mjs.map +1 -0
- package/es/contract/ga.d.ts +68 -0
- package/es/contract/ga.mjs +190 -0
- package/es/contract/ga.mjs.map +1 -0
- package/es/contract/methods.d.ts +68 -0
- package/es/contract/methods.mjs +101 -0
- package/es/contract/methods.mjs.map +1 -0
- package/es/index.d.ts +32 -0
- package/es/index.mjs +49 -0
- package/es/index.mjs.map +1 -0
- package/es/oracle.d.ts +154 -0
- package/es/oracle.mjs +288 -0
- package/es/oracle.mjs.map +1 -0
- package/es/spend.d.ts +61 -0
- package/es/spend.mjs +122 -0
- package/es/spend.mjs.map +1 -0
- package/es/tx/builder/constants.d.ts +41 -0
- package/es/tx/builder/constants.mjs +100 -0
- package/es/tx/builder/constants.mjs.map +1 -0
- package/es/tx/builder/field-types.d.ts +62 -0
- package/es/tx/builder/field-types.mjs +126 -0
- package/es/tx/builder/field-types.mjs.map +1 -0
- package/es/tx/builder/helpers.d.ts +131 -0
- package/es/tx/builder/helpers.mjs +223 -0
- package/es/tx/builder/helpers.mjs.map +1 -0
- package/es/tx/builder/index.d.ts +75 -0
- package/es/tx/builder/index.mjs +424 -0
- package/es/tx/builder/index.mjs.map +1 -0
- package/es/tx/builder/schema.d.ts +350 -0
- package/es/tx/builder/schema.mjs +320 -0
- package/es/tx/builder/schema.mjs.map +1 -0
- package/es/tx/index.d.ts +63 -0
- package/es/tx/index.mjs +209 -0
- package/es/tx/index.mjs.map +1 -0
- package/es/tx/min-fee.d.ts +20 -0
- package/es/tx/min-fee.mjs +148 -0
- package/es/tx/min-fee.mjs.map +1 -0
- package/es/tx/validator.d.ts +19 -0
- package/es/tx/validator.mjs +240 -0
- package/es/tx/validator.mjs.map +1 -0
- package/es/typings/@aeternity__argon2-browser/index.d.mjs +2 -0
- package/es/typings/@aeternity__argon2-browser/index.d.mjs.map +1 -0
- package/es/typings/@aeternity__uuid/index.d.mjs +2 -0
- package/es/typings/@aeternity__uuid/index.d.mjs.map +1 -0
- package/es/typings/bip32-path/index.d.mjs +2 -0
- package/es/typings/bip32-path/index.d.mjs.map +1 -0
- package/es/typings/blakejs/index.d.mjs +2 -0
- package/es/typings/blakejs/index.d.mjs.map +1 -0
- package/es/typings/tweetnacl-auth/index.d.mjs +2 -0
- package/es/typings/tweetnacl-auth/index.d.mjs.map +1 -0
- package/es/utils/amount-formatter.d.ts +42 -0
- package/es/utils/{amount-formatter.js → amount-formatter.mjs} +38 -44
- package/es/utils/amount-formatter.mjs.map +1 -0
- package/es/utils/autorest.d.ts +6 -0
- package/es/utils/autorest.mjs +97 -0
- package/es/utils/autorest.mjs.map +1 -0
- package/es/utils/bignumber.d.ts +13 -0
- package/es/utils/bignumber.mjs +23 -0
- package/es/utils/bignumber.mjs.map +1 -0
- package/es/{bytes.d.ts → utils/bytes.d.ts} +10 -13
- package/es/utils/{bytes.js → bytes.mjs} +26 -22
- package/es/utils/bytes.mjs.map +1 -0
- package/es/utils/crypto.d.ts +103 -0
- package/es/utils/crypto.mjs +221 -0
- package/es/utils/crypto.mjs.map +1 -0
- package/es/utils/encoder.d.ts +26 -0
- package/es/utils/encoder.mjs +102 -0
- package/es/utils/encoder.mjs.map +1 -0
- package/es/utils/errors.d.ts +481 -0
- package/es/utils/errors.mjs +882 -0
- package/es/utils/errors.mjs.map +1 -0
- package/es/utils/hd-wallet.d.ts +34 -0
- package/es/utils/hd-wallet.mjs +122 -0
- package/es/utils/hd-wallet.mjs.map +1 -0
- package/es/utils/json-big.d.ts +5 -0
- package/es/utils/json-big.mjs +41 -0
- package/es/utils/json-big.mjs.map +1 -0
- package/es/utils/keystore.d.ts +51 -0
- package/es/utils/keystore.mjs +145 -0
- package/es/utils/keystore.mjs.map +1 -0
- package/es/{mptree.d.ts → utils/mptree.d.ts} +5 -8
- package/es/utils/{mptree.js → mptree.mjs} +33 -25
- package/es/utils/mptree.mjs.map +1 -0
- package/es/utils/other.d.ts +14 -0
- package/es/utils/other.mjs +28 -0
- package/es/utils/other.mjs.map +1 -0
- package/es/{semver-satisfies.d.ts → utils/semver-satisfies.d.ts} +0 -0
- package/es/utils/{semver-satisfies.js → semver-satisfies.mjs} +1 -1
- package/es/utils/semver-satisfies.mjs.map +1 -0
- package/es/utils/string.d.ts +24 -0
- package/es/utils/{string.js → string.mjs} +9 -11
- package/es/utils/string.mjs.map +1 -0
- package/package.json +67 -64
- package/src/AeSdk.ts +65 -0
- package/src/AeSdkAepp.ts +167 -0
- package/src/AeSdkBase.ts +320 -0
- package/src/AeSdkWallet.ts +332 -0
- package/src/Node.ts +167 -0
- package/src/account/Base.ts +114 -0
- package/src/account/Memory.ts +83 -0
- package/src/account/Rpc.ts +67 -0
- package/src/aens.ts +391 -0
- package/src/aepp-wallet-communication/connection/Browser.ts +68 -0
- package/src/aepp-wallet-communication/connection/BrowserRuntime.ts +58 -0
- package/src/aepp-wallet-communication/connection/BrowserWindowMessage.ts +111 -0
- package/{es/utils/crypto-ts.js → src/aepp-wallet-communication/connection-proxy.ts} +16 -9
- package/src/aepp-wallet-communication/rpc/RpcClient.ts +137 -0
- package/src/aepp-wallet-communication/rpc/types.ts +66 -0
- package/src/aepp-wallet-communication/schema.ts +181 -0
- package/src/aepp-wallet-communication/wallet-detector.ts +71 -0
- package/src/apis/compiler/code-model-v4.yaml +2649 -0
- package/src/apis/compiler/compiler.ts +585 -0
- package/src/apis/compiler/index.ts +2 -0
- package/src/apis/compiler/models/index.ts +301 -0
- package/src/apis/compiler/models/mappers.ts +583 -0
- package/src/apis/compiler/models/parameters.ts +93 -0
- package/src/apis/node/code-model-v4.yaml +10046 -0
- package/src/apis/node/index.ts +2 -0
- package/src/apis/node/models/index.ts +1253 -0
- package/src/apis/node/models/mappers.ts +4278 -0
- package/src/apis/node/models/parameters.ts +188 -0
- package/src/apis/node/node.ts +1299 -0
- package/src/chain.ts +444 -0
- package/src/channel/{handlers.js → handlers.ts} +238 -143
- package/src/channel/index.ts +991 -0
- package/src/channel/internal.ts +345 -0
- package/src/contract/Compiler.ts +66 -0
- package/src/contract/aci.ts +529 -0
- package/src/contract/ga.ts +178 -0
- package/src/contract/methods.ts +118 -0
- package/src/index.ts +51 -0
- package/src/oracle.ts +342 -0
- package/src/spend.ts +152 -0
- package/src/tx/builder/constants.ts +96 -0
- package/src/tx/builder/field-types.ts +111 -0
- package/src/tx/builder/helpers.ts +253 -0
- package/src/tx/builder/index.ts +394 -0
- package/src/tx/builder/schema.ts +771 -0
- package/src/tx/index.ts +199 -0
- package/src/tx/min-fee.ts +136 -0
- package/src/tx/validator.ts +226 -0
- package/src/typings/@aeternity__argon2-browser/index.d.ts +3 -0
- package/src/typings/@aeternity__uuid/index.d.ts +3 -0
- package/src/typings/bip32-path/index.d.ts +33 -0
- package/src/typings/tweetnacl-auth/index.d.ts +14 -0
- package/src/utils/amount-formatter.ts +29 -41
- package/src/utils/autorest.ts +90 -0
- package/src/utils/bignumber.ts +9 -19
- package/src/utils/bytes.ts +15 -16
- package/src/utils/crypto.ts +217 -0
- package/src/utils/encoder.ts +98 -0
- package/src/utils/errors.ts +817 -0
- package/src/utils/hd-wallet.ts +134 -0
- package/src/utils/json-big.ts +26 -0
- package/src/utils/keystore.ts +179 -0
- package/src/utils/mptree.ts +26 -20
- package/src/utils/other.ts +28 -43
- package/src/utils/string.ts +8 -10
- package/CHANGELOG.md +0 -1603
- package/es/account/base.js +0 -169
- package/es/account/base.js.map +0 -1
- package/es/account/memory.js +0 -84
- package/es/account/memory.js.map +0 -1
- package/es/account/multiple.js +0 -178
- package/es/account/multiple.js.map +0 -1
- package/es/ae/aens.js +0 -408
- package/es/ae/aens.js.map +0 -1
- package/es/ae/aepp.js +0 -45
- package/es/ae/aepp.js.map +0 -1
- package/es/ae/contract.js +0 -312
- package/es/ae/contract.js.map +0 -1
- package/es/ae/index.js +0 -206
- package/es/ae/index.js.map +0 -1
- package/es/ae/oracle.js +0 -322
- package/es/ae/oracle.js.map +0 -1
- package/es/ae/universal.js +0 -45
- package/es/ae/universal.js.map +0 -1
- package/es/ae/wallet.js +0 -50
- package/es/ae/wallet.js.map +0 -1
- package/es/amount-formatter.d.ts +0 -58
- package/es/bignumber.d.ts +0 -24
- package/es/chain/index.js +0 -256
- package/es/chain/index.js.map +0 -1
- package/es/chain/node.js +0 -394
- package/es/chain/node.js.map +0 -1
- package/es/channel/handlers.js.map +0 -1
- package/es/channel/index.js +0 -980
- package/es/channel/index.js.map +0 -1
- package/es/channel/internal.js +0 -266
- package/es/channel/internal.js.map +0 -1
- package/es/contract/aci/helpers.js +0 -298
- package/es/contract/aci/helpers.js.map +0 -1
- package/es/contract/aci/index.js +0 -361
- package/es/contract/aci/index.js.map +0 -1
- package/es/contract/aci/transformation.js +0 -66
- package/es/contract/aci/transformation.js.map +0 -1
- package/es/contract/compiler.js +0 -244
- package/es/contract/compiler.js.map +0 -1
- package/es/contract/ga/helpers.js +0 -22
- package/es/contract/ga/helpers.js.map +0 -1
- package/es/contract/ga/index.js +0 -170
- package/es/contract/ga/index.js.map +0 -1
- package/es/contract/index.js +0 -162
- package/es/contract/index.js.map +0 -1
- package/es/crypto-ts.d.ts +0 -9
- package/es/index.js +0 -57
- package/es/index.js.map +0 -1
- package/es/node-pool/index.js +0 -187
- package/es/node-pool/index.js.map +0 -1
- package/es/node.js +0 -132
- package/es/node.js.map +0 -1
- package/es/other.d.ts +0 -31
- package/es/string.d.ts +0 -26
- package/es/tx/builder/helpers.js +0 -305
- package/es/tx/builder/helpers.js.map +0 -1
- package/es/tx/builder/index.js +0 -595
- package/es/tx/builder/index.js.map +0 -1
- package/es/tx/builder/schema.js +0 -814
- package/es/tx/builder/schema.js.map +0 -1
- package/es/tx/index.js +0 -300
- package/es/tx/index.js.map +0 -1
- package/es/tx/tx-object.js +0 -276
- package/es/tx/tx-object.js.map +0 -1
- package/es/tx/tx.js +0 -937
- package/es/tx/tx.js.map +0 -1
- package/es/tx/validator.js +0 -208
- package/es/tx/validator.js.map +0 -1
- package/es/typings/blakejs/index.d.js +0 -2
- package/es/typings/blakejs/index.d.js.map +0 -1
- package/es/utils/aepp-wallet-communication/connection/browser-runtime.js +0 -131
- package/es/utils/aepp-wallet-communication/connection/browser-runtime.js.map +0 -1
- package/es/utils/aepp-wallet-communication/connection/browser-window-message.js +0 -184
- package/es/utils/aepp-wallet-communication/connection/browser-window-message.js.map +0 -1
- package/es/utils/aepp-wallet-communication/connection/index.js +0 -84
- package/es/utils/aepp-wallet-communication/connection/index.js.map +0 -1
- package/es/utils/aepp-wallet-communication/content-script-bridge.js +0 -97
- package/es/utils/aepp-wallet-communication/content-script-bridge.js.map +0 -1
- package/es/utils/aepp-wallet-communication/helpers.js +0 -103
- package/es/utils/aepp-wallet-communication/helpers.js.map +0 -1
- package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.js +0 -329
- package/es/utils/aepp-wallet-communication/rpc/aepp-rpc.js.map +0 -1
- package/es/utils/aepp-wallet-communication/rpc/rpc-client.js +0 -270
- package/es/utils/aepp-wallet-communication/rpc/rpc-client.js.map +0 -1
- package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.js +0 -533
- package/es/utils/aepp-wallet-communication/rpc/wallet-rpc.js.map +0 -1
- package/es/utils/aepp-wallet-communication/schema.js +0 -107
- package/es/utils/aepp-wallet-communication/schema.js.map +0 -1
- package/es/utils/aepp-wallet-communication/wallet-detector.js +0 -109
- package/es/utils/aepp-wallet-communication/wallet-detector.js.map +0 -1
- package/es/utils/amount-formatter.js.map +0 -1
- package/es/utils/async-init.js +0 -67
- package/es/utils/async-init.js.map +0 -1
- package/es/utils/bignumber.js +0 -28
- package/es/utils/bignumber.js.map +0 -1
- package/es/utils/bytes.js.map +0 -1
- package/es/utils/crypto-ts.js.map +0 -1
- package/es/utils/crypto.js +0 -304
- package/es/utils/crypto.js.map +0 -1
- package/es/utils/hd-wallet.js +0 -112
- package/es/utils/hd-wallet.js.map +0 -1
- package/es/utils/json-big.js +0 -45
- package/es/utils/json-big.js.map +0 -1
- package/es/utils/keystore.js +0 -228
- package/es/utils/keystore.js.map +0 -1
- package/es/utils/mptree.js.map +0 -1
- package/es/utils/other.js +0 -43
- package/es/utils/other.js.map +0 -1
- package/es/utils/semver-satisfies.js.map +0 -1
- package/es/utils/string.js.map +0 -1
- package/es/utils/swagger.js +0 -132
- package/es/utils/swagger.js.map +0 -1
- package/src/account/base.js +0 -153
- package/src/account/memory.js +0 -78
- package/src/account/multiple.js +0 -154
- package/src/ae/aens.js +0 -366
- package/src/ae/aepp.js +0 -45
- package/src/ae/contract.js +0 -285
- package/src/ae/index.js +0 -167
- package/src/ae/oracle.js +0 -296
- package/src/ae/universal.js +0 -47
- package/src/ae/wallet.js +0 -50
- package/src/chain/index.js +0 -250
- package/src/chain/node.js +0 -293
- package/src/channel/index.js +0 -898
- package/src/channel/internal.js +0 -231
- package/src/contract/aci/index.js +0 -317
- package/src/contract/aci/transformation.js +0 -72
- package/src/contract/compiler.js +0 -195
- package/src/contract/ga/helpers.js +0 -17
- package/src/contract/ga/index.js +0 -147
- package/src/contract/index.js +0 -163
- package/src/index.js +0 -90
- package/src/node-pool/index.js +0 -171
- package/src/node.js +0 -118
- package/src/tx/builder/helpers.js +0 -325
- package/src/tx/builder/index.js +0 -460
- package/src/tx/builder/schema.js +0 -1211
- package/src/tx/index.js +0 -301
- package/src/tx/tx-object.js +0 -186
- package/src/tx/tx.js +0 -622
- package/src/tx/validator.js +0 -161
- package/src/utils/aepp-wallet-communication/connection/browser-runtime.js +0 -114
- package/src/utils/aepp-wallet-communication/connection/browser-window-message.js +0 -161
- package/src/utils/aepp-wallet-communication/connection/index.js +0 -85
- package/src/utils/aepp-wallet-communication/content-script-bridge.js +0 -85
- package/src/utils/aepp-wallet-communication/helpers.js +0 -70
- package/src/utils/aepp-wallet-communication/rpc/aepp-rpc.js +0 -268
- package/src/utils/aepp-wallet-communication/rpc/rpc-client.js +0 -223
- package/src/utils/aepp-wallet-communication/rpc/wallet-rpc.js +0 -390
- package/src/utils/aepp-wallet-communication/schema.js +0 -108
- package/src/utils/aepp-wallet-communication/wallet-detector.js +0 -91
- package/src/utils/async-init.js +0 -41
- package/src/utils/crypto.js +0 -312
- package/src/utils/hd-wallet.js +0 -115
- package/src/utils/json-big.js +0 -26
- package/src/utils/keystore.js +0 -223
- package/src/utils/swagger.js +0 -133
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import nacl from 'tweetnacl'
|
|
2
|
+
import { full as hmac } from 'tweetnacl-auth'
|
|
3
|
+
import { fromString } from 'bip32-path'
|
|
4
|
+
import { decryptKey, encryptKey } from './crypto'
|
|
5
|
+
import { encode } from './encoder'
|
|
6
|
+
import { CryptographyError } from './errors'
|
|
7
|
+
import { bytesToHex } from './bytes'
|
|
8
|
+
import { concatBuffers } from './other'
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @category exception
|
|
12
|
+
*/
|
|
13
|
+
export class DerivationError extends CryptographyError {
|
|
14
|
+
constructor (message: string) {
|
|
15
|
+
super(message)
|
|
16
|
+
this.name = 'DerivationError'
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
const ED25519_CURVE = Buffer.from('ed25519 seed')
|
|
21
|
+
const HARDENED_OFFSET = 0x80000000
|
|
22
|
+
|
|
23
|
+
interface KeyTreeNode {
|
|
24
|
+
secretKey: Uint8Array
|
|
25
|
+
chainCode: Uint8Array
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
interface HDWallet {
|
|
29
|
+
secretKey: string
|
|
30
|
+
chainCode: string
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
interface Account {
|
|
34
|
+
secretKey: string
|
|
35
|
+
publicKey: string
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
type Dec<N extends number> = [-1, 0, 1, 2, 3, 4][N]
|
|
39
|
+
type Bip32PathT<MaxLen extends number, H extends 'H' | 'h' | '\''> = MaxLen extends -1
|
|
40
|
+
? `${number}${H}`
|
|
41
|
+
: Bip32PathT<Dec<MaxLen>, H> | `${Bip32PathT<Dec<MaxLen>, H>}/${number}${H}`
|
|
42
|
+
type Bip32Path<MaxLen extends number> =
|
|
43
|
+
'' | Bip32PathT<MaxLen, 'H'> | Bip32PathT<MaxLen, 'h'> | Bip32PathT<MaxLen, '\''>
|
|
44
|
+
|
|
45
|
+
export function derivePathFromKey (path: Bip32Path<5>, key: KeyTreeNode): KeyTreeNode {
|
|
46
|
+
const segments = path === '' ? [] : fromString(path).toPathArray()
|
|
47
|
+
segments.forEach((segment, i) => {
|
|
48
|
+
if (segment < HARDENED_OFFSET) {
|
|
49
|
+
throw new DerivationError(`Segment #${i + 1} is not hardened`)
|
|
50
|
+
}
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
return segments.reduce((parentKey, segment) => deriveChild(parentKey, segment), key)
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
export function derivePathFromSeed (path: 'm' | `m/${Bip32Path<5>}`, seed: Uint8Array): KeyTreeNode {
|
|
57
|
+
if (!['m', 'm/'].includes(path.slice(0, 2))) {
|
|
58
|
+
throw new DerivationError('Root element is required')
|
|
59
|
+
}
|
|
60
|
+
const masterKey = getMasterKeyFromSeed(seed)
|
|
61
|
+
return derivePathFromKey(path.slice(2) as Bip32Path<5>, masterKey)
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
function formatAccount (keys: nacl.SignKeyPair): Account {
|
|
65
|
+
const { secretKey, publicKey } = keys
|
|
66
|
+
return {
|
|
67
|
+
secretKey: bytesToHex(secretKey),
|
|
68
|
+
publicKey: encode(publicKey, 'ak')
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
export function getKeyPair (secretKey: Uint8Array): nacl.SignKeyPair {
|
|
73
|
+
return nacl.sign.keyPair.fromSeed(secretKey)
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
export function getMasterKeyFromSeed (seed: Uint8Array): KeyTreeNode {
|
|
77
|
+
const I = hmac(seed, ED25519_CURVE)
|
|
78
|
+
const IL = I.slice(0, 32)
|
|
79
|
+
const IR = I.slice(32)
|
|
80
|
+
return {
|
|
81
|
+
secretKey: IL,
|
|
82
|
+
chainCode: IR
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
|
|
86
|
+
export function deriveChild ({ secretKey, chainCode }: KeyTreeNode, index: number): KeyTreeNode {
|
|
87
|
+
if (index < HARDENED_OFFSET) {
|
|
88
|
+
throw new DerivationError(`Segment ${index} is not hardened`)
|
|
89
|
+
}
|
|
90
|
+
const indexBuffer = Buffer.allocUnsafe(4)
|
|
91
|
+
indexBuffer.writeUInt32BE(index, 0)
|
|
92
|
+
|
|
93
|
+
const data = concatBuffers([Buffer.alloc(1, 0), secretKey, indexBuffer])
|
|
94
|
+
|
|
95
|
+
const I = hmac(data, chainCode)
|
|
96
|
+
const IL = I.slice(0, 32)
|
|
97
|
+
const IR = I.slice(32)
|
|
98
|
+
return {
|
|
99
|
+
secretKey: IL,
|
|
100
|
+
chainCode: IR
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
export function generateSaveHDWalletFromSeed (seed: Uint8Array, password: string): HDWallet {
|
|
105
|
+
const walletKey = derivePathFromSeed('m/44h/457h', seed)
|
|
106
|
+
return {
|
|
107
|
+
secretKey: bytesToHex(encryptKey(password, walletKey.secretKey)),
|
|
108
|
+
chainCode: bytesToHex(encryptKey(password, walletKey.chainCode))
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
|
|
112
|
+
export function getSaveHDWalletAccounts (
|
|
113
|
+
saveHDWallet: HDWallet, password: string, accountCount: number
|
|
114
|
+
): Account[] {
|
|
115
|
+
const walletKey = {
|
|
116
|
+
secretKey: decryptKey(password, Buffer.from(saveHDWallet.secretKey, 'hex')),
|
|
117
|
+
chainCode: decryptKey(password, Buffer.from(saveHDWallet.chainCode, 'hex'))
|
|
118
|
+
}
|
|
119
|
+
return (new Array(accountCount)).fill(undefined)
|
|
120
|
+
.map((_, idx) =>
|
|
121
|
+
formatAccount(getKeyPair(derivePathFromKey(`${idx}h/0h/0h`, walletKey).secretKey)))
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
export const getHdWalletAccountFromSeed = (
|
|
125
|
+
seed: Uint8Array, accountIdx: number
|
|
126
|
+
): Account & { idx: number } => {
|
|
127
|
+
const walletKey = derivePathFromSeed('m/44h/457h', seed)
|
|
128
|
+
const derived = derivePathFromKey(`${accountIdx}h/0h/0h`, walletKey)
|
|
129
|
+
const keyPair = getKeyPair(derived.secretKey)
|
|
130
|
+
return {
|
|
131
|
+
...formatAccount(keyPair),
|
|
132
|
+
idx: accountIdx
|
|
133
|
+
}
|
|
134
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import JsonBig from 'json-bigint'
|
|
2
|
+
import BigNumber from 'bignumber.js'
|
|
3
|
+
import { mapObject } from './other'
|
|
4
|
+
|
|
5
|
+
const jsonBig = JsonBig({ storeAsString: true })
|
|
6
|
+
|
|
7
|
+
const convertValuesToBigNumbers = (value: any): any => {
|
|
8
|
+
if (typeof value === 'object' && value !== null && value.constructor === Object) {
|
|
9
|
+
return mapObject(value, ([key, value]) => [key, convertValuesToBigNumbers(value)])
|
|
10
|
+
}
|
|
11
|
+
if (Array.isArray(value)) {
|
|
12
|
+
return value.map(item => convertValuesToBigNumbers(item))
|
|
13
|
+
}
|
|
14
|
+
if (typeof value === 'string' && new BigNumber(value).toString(10) === value) {
|
|
15
|
+
const bn = new BigNumber(value)
|
|
16
|
+
bn.toJSON = () => bn.toString(10)
|
|
17
|
+
return bn
|
|
18
|
+
}
|
|
19
|
+
return value
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export default {
|
|
23
|
+
stringify: (...args: Parameters<typeof JsonBig['stringify']>): string =>
|
|
24
|
+
jsonBig.stringify(convertValuesToBigNumbers(args[0]), ...args.slice(1)),
|
|
25
|
+
parse: jsonBig.parse
|
|
26
|
+
}
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
import nacl from 'tweetnacl'
|
|
2
|
+
import { v4 as uuid } from '@aeternity/uuid'
|
|
3
|
+
import { ArgonType, hash } from '@aeternity/argon2-browser/dist/argon2-bundled.min.js'
|
|
4
|
+
import { getAddressFromPriv } from './crypto'
|
|
5
|
+
import { bytesToHex, hexToBytes } from './bytes'
|
|
6
|
+
import { InvalidPasswordError } from './errors'
|
|
7
|
+
|
|
8
|
+
const DERIVED_KEY_FUNCTIONS = {
|
|
9
|
+
async argon2id (
|
|
10
|
+
pass: string | Uint8Array,
|
|
11
|
+
salt: string | Uint8Array,
|
|
12
|
+
params: Partial<Keystore['crypto']['kdf_params']>
|
|
13
|
+
): Promise<Uint8Array> {
|
|
14
|
+
const { memlimit_kib: mem, opslimit: time } = params
|
|
15
|
+
|
|
16
|
+
return (await hash({
|
|
17
|
+
hashLen: 32,
|
|
18
|
+
pass,
|
|
19
|
+
salt,
|
|
20
|
+
time,
|
|
21
|
+
mem,
|
|
22
|
+
type: ArgonType.Argon2id
|
|
23
|
+
})).hash
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const CRYPTO_FUNCTIONS = {
|
|
28
|
+
'xsalsa20-poly1305': {
|
|
29
|
+
encrypt: nacl.secretbox,
|
|
30
|
+
decrypt (...args: Parameters<typeof nacl.secretbox.open>): Uint8Array {
|
|
31
|
+
const res = nacl.secretbox.open(...args)
|
|
32
|
+
if (res == null) throw new InvalidPasswordError()
|
|
33
|
+
return res
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
export interface Keystore {
|
|
39
|
+
name: string
|
|
40
|
+
version: 1
|
|
41
|
+
public_key: string
|
|
42
|
+
id: string
|
|
43
|
+
crypto: {
|
|
44
|
+
secret_type: 'ed25519'
|
|
45
|
+
symmetric_alg: keyof typeof CRYPTO_FUNCTIONS
|
|
46
|
+
ciphertext: string
|
|
47
|
+
cipher_params: {
|
|
48
|
+
nonce: string
|
|
49
|
+
}
|
|
50
|
+
kdf: keyof typeof DERIVED_KEY_FUNCTIONS
|
|
51
|
+
kdf_params: {
|
|
52
|
+
memlimit_kib: number
|
|
53
|
+
opslimit: number
|
|
54
|
+
parallelism: number
|
|
55
|
+
salt: string
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
const CRYPTO_DEFAULTS = {
|
|
61
|
+
secret_type: 'ed25519',
|
|
62
|
+
symmetric_alg: 'xsalsa20-poly1305',
|
|
63
|
+
kdf: 'argon2id',
|
|
64
|
+
kdf_params: {
|
|
65
|
+
memlimit_kib: 65536,
|
|
66
|
+
opslimit: 3,
|
|
67
|
+
parallelism: 1
|
|
68
|
+
}
|
|
69
|
+
} as const
|
|
70
|
+
|
|
71
|
+
/**
|
|
72
|
+
* Symmetric private key encryption using secret (derived) key.
|
|
73
|
+
* @param plaintext - Data to be encrypted.
|
|
74
|
+
* @param key - Secret key.
|
|
75
|
+
* @param nonce - Randomly generated nonce.
|
|
76
|
+
* @param algo - Encryption algorithm.
|
|
77
|
+
* @returns Encrypted data.
|
|
78
|
+
*/
|
|
79
|
+
function encrypt (
|
|
80
|
+
plaintext: Uint8Array,
|
|
81
|
+
key: Uint8Array,
|
|
82
|
+
nonce: Uint8Array,
|
|
83
|
+
algo: keyof typeof CRYPTO_FUNCTIONS = CRYPTO_DEFAULTS.symmetric_alg
|
|
84
|
+
): Uint8Array {
|
|
85
|
+
return CRYPTO_FUNCTIONS[algo].encrypt(plaintext, nonce, key)
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
/**
|
|
89
|
+
* Symmetric private key decryption using secret (derived) key.
|
|
90
|
+
* @param ciphertext - Data to be decrypted.
|
|
91
|
+
* @param key - Secret key.
|
|
92
|
+
* @param nonce - Nonce from key-object.
|
|
93
|
+
* @param algo - Encryption algorithm.
|
|
94
|
+
* @returns Decrypted data.
|
|
95
|
+
*/
|
|
96
|
+
function decrypt (
|
|
97
|
+
ciphertext: Uint8Array,
|
|
98
|
+
key: Uint8Array,
|
|
99
|
+
nonce: Uint8Array,
|
|
100
|
+
algo: keyof typeof CRYPTO_FUNCTIONS = CRYPTO_DEFAULTS.symmetric_alg
|
|
101
|
+
): Uint8Array {
|
|
102
|
+
return CRYPTO_FUNCTIONS[algo].decrypt(ciphertext, nonce, key)
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Derive secret key from password with key derivation function.
|
|
107
|
+
* @param password - User-supplied password.
|
|
108
|
+
* @param nonce - Randomly generated nonce.
|
|
109
|
+
* @param kdf - Key derivation function.
|
|
110
|
+
* @param kdfParams - KDF parameters.
|
|
111
|
+
* @returns Secret key derived from password.
|
|
112
|
+
*/
|
|
113
|
+
async function deriveKey (
|
|
114
|
+
password: string | Uint8Array,
|
|
115
|
+
nonce: string | Uint8Array,
|
|
116
|
+
kdf: Keystore['crypto']['kdf'],
|
|
117
|
+
kdfParams: Omit<Keystore['crypto']['kdf_params'], 'salt'>
|
|
118
|
+
): Promise<Uint8Array> {
|
|
119
|
+
return await DERIVED_KEY_FUNCTIONS[kdf](password, nonce, kdfParams)
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
/**
|
|
123
|
+
* Recover plaintext private key from secret-storage key object.
|
|
124
|
+
* @param password - Keystore object password.
|
|
125
|
+
* @param keystore - Keystore object.
|
|
126
|
+
* @returns Plaintext private key.
|
|
127
|
+
*/
|
|
128
|
+
export async function recover (
|
|
129
|
+
password: string | Uint8Array, { crypto }: Keystore
|
|
130
|
+
): Promise<string> {
|
|
131
|
+
const salt = hexToBytes(crypto.kdf_params.salt)
|
|
132
|
+
return bytesToHex(decrypt(
|
|
133
|
+
hexToBytes(crypto.ciphertext),
|
|
134
|
+
await deriveKey(password, salt, crypto.kdf, crypto.kdf_params),
|
|
135
|
+
hexToBytes(crypto.cipher_params.nonce),
|
|
136
|
+
crypto.symmetric_alg
|
|
137
|
+
))
|
|
138
|
+
}
|
|
139
|
+
|
|
140
|
+
/**
|
|
141
|
+
* Export private key to keystore secret-storage format.
|
|
142
|
+
* @param name - Key name.
|
|
143
|
+
* @param password - User-supplied password.
|
|
144
|
+
* @param privateKey - Private key as hex-string or a Buffer.
|
|
145
|
+
* @param nonce - Randomly generated 24byte nonce.
|
|
146
|
+
* @param salt - Randomly generated 16byte salt.
|
|
147
|
+
* @param options - Encryption parameters.
|
|
148
|
+
* @param options.kdf - Key derivation function.
|
|
149
|
+
* @param options.kdf_params - KDF parameters.
|
|
150
|
+
*/
|
|
151
|
+
export async function dump (
|
|
152
|
+
name: string,
|
|
153
|
+
password: string | Uint8Array,
|
|
154
|
+
privateKey: string | Uint8Array,
|
|
155
|
+
nonce: Uint8Array = nacl.randomBytes(24),
|
|
156
|
+
salt: Uint8Array = nacl.randomBytes(16),
|
|
157
|
+
options?: Partial<Keystore['crypto']>
|
|
158
|
+
): Promise<Keystore> {
|
|
159
|
+
const opt = { ...CRYPTO_DEFAULTS, ...options }
|
|
160
|
+
const derivedKey = await deriveKey(password, salt, opt.kdf, opt.kdf_params)
|
|
161
|
+
const payload = typeof privateKey === 'string' ? hexToBytes(privateKey) : privateKey
|
|
162
|
+
return {
|
|
163
|
+
name,
|
|
164
|
+
version: 1,
|
|
165
|
+
public_key: getAddressFromPriv(payload),
|
|
166
|
+
id: uuid(),
|
|
167
|
+
crypto: {
|
|
168
|
+
secret_type: opt.secret_type,
|
|
169
|
+
symmetric_alg: opt.symmetric_alg,
|
|
170
|
+
ciphertext: bytesToHex(encrypt(payload, derivedKey, nonce, opt.symmetric_alg)),
|
|
171
|
+
cipher_params: { nonce: bytesToHex(nonce) },
|
|
172
|
+
kdf: opt.kdf,
|
|
173
|
+
kdf_params: {
|
|
174
|
+
...opt.kdf_params,
|
|
175
|
+
salt: bytesToHex(salt)
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
}
|
package/src/utils/mptree.ts
CHANGED
|
@@ -17,7 +17,13 @@
|
|
|
17
17
|
|
|
18
18
|
import { encode as rlpEncode } from 'rlp'
|
|
19
19
|
import type { Input } from 'rlp'
|
|
20
|
-
import { hash } from './crypto
|
|
20
|
+
import { hash } from './crypto'
|
|
21
|
+
import {
|
|
22
|
+
MerkleTreeHashMismatchError,
|
|
23
|
+
MissingNodeInTreeError,
|
|
24
|
+
UnknownPathNibbleError,
|
|
25
|
+
UnknownNodeLengthError
|
|
26
|
+
} from './errors'
|
|
21
27
|
|
|
22
28
|
enum NodeType {
|
|
23
29
|
Branch,
|
|
@@ -37,9 +43,8 @@ export default class MPTree {
|
|
|
37
43
|
|
|
38
44
|
/**
|
|
39
45
|
* Deserialize Merkle Patricia Tree
|
|
40
|
-
* @
|
|
41
|
-
* @
|
|
42
|
-
* @return {MPTree} Merkle Patricia Tree
|
|
46
|
+
* @param binary - Binary
|
|
47
|
+
* @returns Merkle Patricia Tree
|
|
43
48
|
*/
|
|
44
49
|
constructor (binary: MPTreeBinary) {
|
|
45
50
|
this.rootHash = binary[0].toString('hex')
|
|
@@ -47,9 +52,9 @@ export default class MPTree {
|
|
|
47
52
|
binary[1].map((node) => [node[0].toString('hex'), node[1]])
|
|
48
53
|
)
|
|
49
54
|
|
|
50
|
-
if (this.nodes[this.rootHash] === undefined) throw new
|
|
55
|
+
if (this.nodes[this.rootHash] === undefined) throw new MissingNodeInTreeError('Can\'t find a node by root hash')
|
|
51
56
|
Object.entries(this.nodes).forEach(([key, node]) => {
|
|
52
|
-
if (MPTree.nodeHash(node) !== key) throw new
|
|
57
|
+
if (MPTree.nodeHash(node) !== key) throw new MerkleTreeHashMismatchError()
|
|
53
58
|
const { type, payload } = MPTree.parseNode(node)
|
|
54
59
|
switch (type) {
|
|
55
60
|
case NodeType.Branch:
|
|
@@ -58,13 +63,13 @@ export default class MPTree {
|
|
|
58
63
|
.filter(n => n.length)
|
|
59
64
|
.forEach((n) => {
|
|
60
65
|
if (this.nodes[n.toString('hex')] === undefined) {
|
|
61
|
-
throw new
|
|
66
|
+
throw new MissingNodeInTreeError('Can\'t find a node by hash in branch node')
|
|
62
67
|
}
|
|
63
68
|
})
|
|
64
69
|
break
|
|
65
70
|
case NodeType.Extension:
|
|
66
71
|
if (this.nodes[payload[0].toString('hex')] === undefined) {
|
|
67
|
-
throw new
|
|
72
|
+
throw new MissingNodeInTreeError('Can\'t find a node by hash in extension node')
|
|
68
73
|
}
|
|
69
74
|
}
|
|
70
75
|
})
|
|
@@ -74,27 +79,29 @@ export default class MPTree {
|
|
|
74
79
|
return this.rootHash === tree.rootHash
|
|
75
80
|
}
|
|
76
81
|
|
|
77
|
-
private static parseNode (node: Buffer[]): {
|
|
82
|
+
private static parseNode (node: Buffer[]): {
|
|
83
|
+
type: NodeType
|
|
84
|
+
payload: Buffer[]
|
|
85
|
+
path: string | null
|
|
86
|
+
} {
|
|
78
87
|
switch (node.length) {
|
|
79
88
|
case 17:
|
|
80
89
|
return { type: NodeType.Branch, payload: node, path: null }
|
|
81
90
|
case 2: {
|
|
82
|
-
const
|
|
83
|
-
|
|
84
|
-
if (nibble > 3) throw new Error(`Unknown path nibble: ${nibble}`)
|
|
91
|
+
const nibble = node[0][0] >> 4
|
|
92
|
+
if (nibble > 3) throw new UnknownPathNibbleError(nibble)
|
|
85
93
|
const type = nibble <= 1 ? NodeType.Extension : NodeType.Leaf
|
|
86
94
|
const slice = [0, 2].includes(nibble) ? 2 : 1
|
|
87
|
-
return { type, payload: [node[1]], path:
|
|
95
|
+
return { type, payload: [node[1]], path: node[0].toString('hex').slice(slice) }
|
|
88
96
|
}
|
|
89
97
|
default:
|
|
90
|
-
throw new
|
|
98
|
+
throw new UnknownNodeLengthError(node.length)
|
|
91
99
|
}
|
|
92
100
|
}
|
|
93
101
|
|
|
94
102
|
/**
|
|
95
103
|
* Serialize Merkle Patricia Tree
|
|
96
|
-
* @
|
|
97
|
-
* @return {Array} Binary
|
|
104
|
+
* @returns Binary
|
|
98
105
|
*/
|
|
99
106
|
serialize (): MPTreeBinary {
|
|
100
107
|
return [
|
|
@@ -108,9 +115,8 @@ export default class MPTree {
|
|
|
108
115
|
|
|
109
116
|
/**
|
|
110
117
|
* Retrieve value from Merkle Patricia Tree
|
|
111
|
-
* @
|
|
112
|
-
* @
|
|
113
|
-
* @return {Buffer} Value associated to the specified key
|
|
118
|
+
* @param key - The key of the element to retrieve
|
|
119
|
+
* @returns Value associated to the specified key
|
|
114
120
|
*/
|
|
115
121
|
get (key: string): Buffer | undefined {
|
|
116
122
|
let searchFrom = this.rootHash
|
|
@@ -119,7 +125,7 @@ export default class MPTree {
|
|
|
119
125
|
switch (type) {
|
|
120
126
|
case NodeType.Branch:
|
|
121
127
|
if (key.length === 0) return payload[16]
|
|
122
|
-
searchFrom = payload[
|
|
128
|
+
searchFrom = payload[+`0x${key[0]}`].toString('hex')
|
|
123
129
|
key = key.substr(1)
|
|
124
130
|
break
|
|
125
131
|
case NodeType.Extension:
|
package/src/utils/other.ts
CHANGED
|
@@ -1,51 +1,36 @@
|
|
|
1
|
-
import { snakeToPascal, pascalToSnake } from './string'
|
|
2
|
-
|
|
3
1
|
export const pause = async (duration: number): Promise<void> =>
|
|
4
2
|
await new Promise(resolve => setTimeout(resolve, duration))
|
|
5
3
|
|
|
6
|
-
export const mapObject = (
|
|
7
|
-
object:
|
|
8
|
-
fn: (
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
object: object,
|
|
13
|
-
fn: (value: [string, any], index: number, array: Array<[string, any]>) => boolean
|
|
14
|
-
): object => Object.fromEntries(Object.entries(object).filter(fn))
|
|
4
|
+
export const mapObject = <InputV, OutputV>(
|
|
5
|
+
object: { [k: string]: InputV },
|
|
6
|
+
fn: (
|
|
7
|
+
value: [string, InputV], index: number, array: Array<[string, InputV]>
|
|
8
|
+
) => [number | string, OutputV]
|
|
9
|
+
): { [k: string]: OutputV } => Object.fromEntries(Object.entries(object).map(fn))
|
|
15
10
|
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
export const traverseKeys = (fn: Function, object: any): any => {
|
|
26
|
-
if (typeof object !== 'object' || object === null) return object
|
|
27
|
-
if (Array.isArray(object)) return object.map(i => traverseKeys(fn, i))
|
|
28
|
-
return mapObject(object, ([key, value]: [string, any]) => [
|
|
29
|
-
fn(key), traverseKeys(fn, value)
|
|
30
|
-
])
|
|
31
|
-
}
|
|
11
|
+
// remove after dropping webpack4 support
|
|
12
|
+
const isWebpack4Buffer = (() => {
|
|
13
|
+
try {
|
|
14
|
+
Buffer.concat([Uint8Array.from([])])
|
|
15
|
+
return false
|
|
16
|
+
} catch (error) {
|
|
17
|
+
return true
|
|
18
|
+
}
|
|
19
|
+
})()
|
|
32
20
|
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
* @param {Object} object - Object to traverse
|
|
38
|
-
* @return {Object} Transformed object
|
|
39
|
-
* @see pascalToSnake
|
|
40
|
-
*/
|
|
41
|
-
export const snakizeKeys = traverseKeys.bind(null, pascalToSnake)
|
|
21
|
+
export const concatBuffers = isWebpack4Buffer
|
|
22
|
+
? (list: readonly Uint8Array[], totalLength?: number): Buffer =>
|
|
23
|
+
Buffer.concat(list.map(el => Buffer.from(el)), totalLength)
|
|
24
|
+
: Buffer.concat
|
|
42
25
|
|
|
43
26
|
/**
|
|
44
|
-
*
|
|
45
|
-
* @
|
|
46
|
-
* @
|
|
47
|
-
* @param {Object} object - Object to traverse
|
|
48
|
-
* @return {Object} Transformed object
|
|
49
|
-
* @see snakeToPascal
|
|
27
|
+
* Object key type guard
|
|
28
|
+
* @param key - Object key
|
|
29
|
+
* @param object - object
|
|
50
30
|
*/
|
|
51
|
-
export
|
|
31
|
+
export function isKeyOfObject<T> (
|
|
32
|
+
key: string | number | symbol,
|
|
33
|
+
object: T
|
|
34
|
+
): key is keyof T {
|
|
35
|
+
return key in object
|
|
36
|
+
}
|
package/src/utils/string.ts
CHANGED
|
@@ -17,9 +17,8 @@
|
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
19
|
* Convert string from snake_case to PascalCase
|
|
20
|
-
* @
|
|
21
|
-
* @
|
|
22
|
-
* @return {String} Converted string
|
|
20
|
+
* @param s - String to convert
|
|
21
|
+
* @returns Converted string
|
|
23
22
|
*/
|
|
24
23
|
export function snakeToPascal (s: string): string {
|
|
25
24
|
return s.replace(/_./g, match => match[1].toUpperCase())
|
|
@@ -27,9 +26,8 @@ export function snakeToPascal (s: string): string {
|
|
|
27
26
|
|
|
28
27
|
/**
|
|
29
28
|
* Convert string from PascalCase to snake_case
|
|
30
|
-
* @
|
|
31
|
-
* @
|
|
32
|
-
* @return {String} Converted string
|
|
29
|
+
* @param s - String to convert
|
|
30
|
+
* @returns Converted string
|
|
33
31
|
*/
|
|
34
32
|
export function pascalToSnake (s: string): string {
|
|
35
33
|
return s.replace(/[A-Z]/g, match => `_${match.toLowerCase()}`)
|
|
@@ -37,8 +35,8 @@ export function pascalToSnake (s: string): string {
|
|
|
37
35
|
|
|
38
36
|
/**
|
|
39
37
|
* Check whether a string is valid hex.
|
|
40
|
-
* @param
|
|
41
|
-
* @
|
|
38
|
+
* @param str - String to validate.
|
|
39
|
+
* @returns True if the string is valid hex, false otherwise.
|
|
42
40
|
*/
|
|
43
41
|
export function isHex (str: string): boolean {
|
|
44
42
|
return str.length % 2 === 0 && /^[0-9a-f]+$/i.test(str)
|
|
@@ -46,8 +44,8 @@ export function isHex (str: string): boolean {
|
|
|
46
44
|
|
|
47
45
|
/**
|
|
48
46
|
* Check whether a string is valid base-64.
|
|
49
|
-
* @param
|
|
50
|
-
* @
|
|
47
|
+
* @param str - String to validate.
|
|
48
|
+
* @returns True if the string is valid base-64, false otherwise.
|
|
51
49
|
*/
|
|
52
50
|
export function isBase64 (str: string): boolean {
|
|
53
51
|
if (str.length % 4 > 0 || /[^0-9a-z+/=]/i.test(str)) return false
|