@bsv/sdk 2.0.16 → 2.1.1
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/README.md +7 -7
- package/dist/cjs/package.json +14 -13
- package/dist/cjs/src/auth/Peer.js +8 -13
- package/dist/cjs/src/auth/Peer.js.map +1 -1
- package/dist/cjs/src/auth/SessionManager.js +4 -7
- package/dist/cjs/src/auth/SessionManager.js.map +1 -1
- package/dist/cjs/src/auth/certificates/MasterCertificate.js +1 -1
- package/dist/cjs/src/auth/certificates/MasterCertificate.js.map +1 -1
- package/dist/cjs/src/auth/certificates/__tests/CompletedProtoWallet.js +1 -1
- package/dist/cjs/src/auth/certificates/__tests/CompletedProtoWallet.js.map +1 -1
- package/dist/cjs/src/auth/clients/AuthFetch.js +32 -32
- package/dist/cjs/src/auth/clients/AuthFetch.js.map +1 -1
- package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js +4 -4
- package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js.map +1 -1
- package/dist/cjs/src/compat/ECIES.js +29 -34
- package/dist/cjs/src/compat/ECIES.js.map +1 -1
- package/dist/cjs/src/compat/HD.js +9 -4
- package/dist/cjs/src/compat/HD.js.map +1 -1
- package/dist/cjs/src/compat/Mnemonic.js +12 -12
- package/dist/cjs/src/compat/Mnemonic.js.map +1 -1
- package/dist/cjs/src/identity/ContactsManager.js +172 -232
- package/dist/cjs/src/identity/ContactsManager.js.map +1 -1
- package/dist/cjs/src/identity/IdentityClient.js +122 -55
- package/dist/cjs/src/identity/IdentityClient.js.map +1 -1
- package/dist/cjs/src/kvstore/GlobalKVStore.js +30 -31
- package/dist/cjs/src/kvstore/GlobalKVStore.js.map +1 -1
- package/dist/cjs/src/kvstore/LocalKVStore.js +9 -9
- package/dist/cjs/src/kvstore/LocalKVStore.js.map +1 -1
- package/dist/cjs/src/kvstore/kvStoreInterpreter.js +2 -2
- package/dist/cjs/src/kvstore/kvStoreInterpreter.js.map +1 -1
- package/dist/cjs/src/messages/SignedMessage.js +1 -1
- package/dist/cjs/src/messages/SignedMessage.js.map +1 -1
- package/dist/cjs/src/overlay-tools/Historian.js +1 -1
- package/dist/cjs/src/overlay-tools/Historian.js.map +1 -1
- package/dist/cjs/src/overlay-tools/LookupResolver.js +139 -46
- package/dist/cjs/src/overlay-tools/LookupResolver.js.map +1 -1
- package/dist/cjs/src/overlay-tools/SHIPBroadcaster.js +75 -146
- package/dist/cjs/src/overlay-tools/SHIPBroadcaster.js.map +1 -1
- package/dist/cjs/src/primitives/AESGCM.js +2 -2
- package/dist/cjs/src/primitives/AESGCM.js.map +1 -1
- package/dist/cjs/src/primitives/BigNumber.js +164 -148
- package/dist/cjs/src/primitives/BigNumber.js.map +1 -1
- package/dist/cjs/src/primitives/Curve.js +17 -15
- package/dist/cjs/src/primitives/Curve.js.map +1 -1
- package/dist/cjs/src/primitives/ECDSA.js +12 -7
- package/dist/cjs/src/primitives/ECDSA.js.map +1 -1
- package/dist/cjs/src/primitives/Hash.js +140 -56
- package/dist/cjs/src/primitives/Hash.js.map +1 -1
- package/dist/cjs/src/primitives/JacobianPoint.js +8 -8
- package/dist/cjs/src/primitives/JacobianPoint.js.map +1 -1
- package/dist/cjs/src/primitives/K256.js +3 -3
- package/dist/cjs/src/primitives/K256.js.map +1 -1
- package/dist/cjs/src/primitives/Point.js +36 -40
- package/dist/cjs/src/primitives/Point.js.map +1 -1
- package/dist/cjs/src/primitives/PrivateKey.js +4 -4
- package/dist/cjs/src/primitives/PrivateKey.js.map +1 -1
- package/dist/cjs/src/primitives/PublicKey.js +4 -4
- package/dist/cjs/src/primitives/PublicKey.js.map +1 -1
- package/dist/cjs/src/primitives/Random.js +10 -14
- package/dist/cjs/src/primitives/Random.js.map +1 -1
- package/dist/cjs/src/primitives/ReaderUint8Array.js +6 -6
- package/dist/cjs/src/primitives/ReaderUint8Array.js.map +1 -1
- package/dist/cjs/src/primitives/Schnorr.js +2 -2
- package/dist/cjs/src/primitives/Schnorr.js.map +1 -1
- package/dist/cjs/src/primitives/Secp256r1.js +2 -1
- package/dist/cjs/src/primitives/Secp256r1.js.map +1 -1
- package/dist/cjs/src/primitives/Signature.js +8 -8
- package/dist/cjs/src/primitives/Signature.js.map +1 -1
- package/dist/cjs/src/primitives/TransactionSignature.js +20 -21
- package/dist/cjs/src/primitives/TransactionSignature.js.map +1 -1
- package/dist/cjs/src/primitives/utils.js +39 -46
- package/dist/cjs/src/primitives/utils.js.map +1 -1
- package/dist/cjs/src/registry/RegistryClient.js +31 -23
- package/dist/cjs/src/registry/RegistryClient.js.map +1 -1
- package/dist/cjs/src/remittance/RemittanceManager.js +19 -18
- package/dist/cjs/src/remittance/RemittanceManager.js.map +1 -1
- package/dist/cjs/src/remittance/modules/BasicBRC29.js.map +1 -1
- package/dist/cjs/src/script/Script.js +93 -170
- package/dist/cjs/src/script/Script.js.map +1 -1
- package/dist/cjs/src/script/ScriptEvaluationError.js +2 -2
- package/dist/cjs/src/script/ScriptEvaluationError.js.map +1 -1
- package/dist/cjs/src/script/Spend.js +14 -12
- package/dist/cjs/src/script/Spend.js.map +1 -1
- package/dist/cjs/src/script/templates/PushDrop.js +22 -18
- package/dist/cjs/src/script/templates/PushDrop.js.map +1 -1
- package/dist/cjs/src/script/templates/RPuzzle.js +2 -4
- package/dist/cjs/src/script/templates/RPuzzle.js.map +1 -1
- package/dist/cjs/src/storage/StorageDownloader.js +42 -9
- package/dist/cjs/src/storage/StorageDownloader.js.map +1 -1
- package/dist/cjs/src/totp/totp.js +1 -1
- package/dist/cjs/src/totp/totp.js.map +1 -1
- package/dist/cjs/src/transaction/Beef.js +239 -192
- package/dist/cjs/src/transaction/Beef.js.map +1 -1
- package/dist/cjs/src/transaction/BeefConstants.js +19 -0
- package/dist/cjs/src/transaction/BeefConstants.js.map +1 -0
- package/dist/cjs/src/transaction/BeefTx.js +12 -12
- package/dist/cjs/src/transaction/BeefTx.js.map +1 -1
- package/dist/cjs/src/transaction/MerklePath.js +4 -4
- package/dist/cjs/src/transaction/MerklePath.js.map +1 -1
- package/dist/cjs/src/transaction/Transaction.js +49 -52
- package/dist/cjs/src/transaction/Transaction.js.map +1 -1
- package/dist/cjs/src/transaction/fee-models/SatoshisPerKilobyte.js +1 -1
- package/dist/cjs/src/transaction/fee-models/SatoshisPerKilobyte.js.map +1 -1
- package/dist/cjs/src/transaction/http/BinaryFetchClient.js +9 -9
- package/dist/cjs/src/transaction/http/BinaryFetchClient.js.map +1 -1
- package/dist/cjs/src/transaction/http/DefaultHttpClient.js +9 -9
- package/dist/cjs/src/transaction/http/DefaultHttpClient.js.map +1 -1
- package/dist/cjs/src/wallet/CachedKeyDeriver.js +1 -1
- package/dist/cjs/src/wallet/CachedKeyDeriver.js.map +1 -1
- package/dist/cjs/src/wallet/WalletClient.js.map +1 -1
- package/dist/cjs/src/wallet/WalletError.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/HTTPWalletJSON.js +5 -4
- package/dist/cjs/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/ReactNativeWebView.js +9 -9
- package/dist/cjs/src/wallet/substrates/ReactNativeWebView.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js +92 -92
- package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js +387 -711
- package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/XDM.js +4 -4
- package/dist/cjs/src/wallet/substrates/XDM.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/window.CWI.js +2 -2
- package/dist/cjs/src/wallet/substrates/window.CWI.js.map +1 -1
- package/dist/cjs/src/wallet/validationHelpers.js +9 -9
- package/dist/cjs/src/wallet/validationHelpers.js.map +1 -1
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/src/auth/Peer.js +25 -13
- package/dist/esm/src/auth/Peer.js.map +1 -1
- package/dist/esm/src/auth/SessionManager.js +4 -7
- package/dist/esm/src/auth/SessionManager.js.map +1 -1
- package/dist/esm/src/auth/certificates/MasterCertificate.js +1 -1
- package/dist/esm/src/auth/certificates/MasterCertificate.js.map +1 -1
- package/dist/esm/src/auth/certificates/__tests/CompletedProtoWallet.js +1 -1
- package/dist/esm/src/auth/certificates/__tests/CompletedProtoWallet.js.map +1 -1
- package/dist/esm/src/auth/clients/AuthFetch.js +32 -32
- package/dist/esm/src/auth/clients/AuthFetch.js.map +1 -1
- package/dist/esm/src/auth/transports/SimplifiedFetchTransport.js +4 -4
- package/dist/esm/src/auth/transports/SimplifiedFetchTransport.js.map +1 -1
- package/dist/esm/src/compat/ECIES.js +29 -34
- package/dist/esm/src/compat/ECIES.js.map +1 -1
- package/dist/esm/src/compat/HD.js +9 -4
- package/dist/esm/src/compat/HD.js.map +1 -1
- package/dist/esm/src/compat/Mnemonic.js +12 -12
- package/dist/esm/src/compat/Mnemonic.js.map +1 -1
- package/dist/esm/src/identity/ContactsManager.js +172 -232
- package/dist/esm/src/identity/ContactsManager.js.map +1 -1
- package/dist/esm/src/identity/IdentityClient.js +122 -55
- package/dist/esm/src/identity/IdentityClient.js.map +1 -1
- package/dist/esm/src/kvstore/GlobalKVStore.js +30 -31
- package/dist/esm/src/kvstore/GlobalKVStore.js.map +1 -1
- package/dist/esm/src/kvstore/LocalKVStore.js +9 -9
- package/dist/esm/src/kvstore/LocalKVStore.js.map +1 -1
- package/dist/esm/src/kvstore/kvStoreInterpreter.js +2 -2
- package/dist/esm/src/kvstore/kvStoreInterpreter.js.map +1 -1
- package/dist/esm/src/messages/SignedMessage.js +1 -1
- package/dist/esm/src/messages/SignedMessage.js.map +1 -1
- package/dist/esm/src/overlay-tools/Historian.js +1 -1
- package/dist/esm/src/overlay-tools/Historian.js.map +1 -1
- package/dist/esm/src/overlay-tools/LookupResolver.js +139 -46
- package/dist/esm/src/overlay-tools/LookupResolver.js.map +1 -1
- package/dist/esm/src/overlay-tools/SHIPBroadcaster.js +74 -146
- package/dist/esm/src/overlay-tools/SHIPBroadcaster.js.map +1 -1
- package/dist/esm/src/primitives/AESGCM.js +2 -2
- package/dist/esm/src/primitives/AESGCM.js.map +1 -1
- package/dist/esm/src/primitives/BigNumber.js +167 -154
- package/dist/esm/src/primitives/BigNumber.js.map +1 -1
- package/dist/esm/src/primitives/Curve.js +17 -15
- package/dist/esm/src/primitives/Curve.js.map +1 -1
- package/dist/esm/src/primitives/ECDSA.js +12 -7
- package/dist/esm/src/primitives/ECDSA.js.map +1 -1
- package/dist/esm/src/primitives/Hash.js +140 -56
- package/dist/esm/src/primitives/Hash.js.map +1 -1
- package/dist/esm/src/primitives/JacobianPoint.js +8 -8
- package/dist/esm/src/primitives/JacobianPoint.js.map +1 -1
- package/dist/esm/src/primitives/K256.js +3 -3
- package/dist/esm/src/primitives/K256.js.map +1 -1
- package/dist/esm/src/primitives/Point.js +36 -40
- package/dist/esm/src/primitives/Point.js.map +1 -1
- package/dist/esm/src/primitives/PrivateKey.js +4 -4
- package/dist/esm/src/primitives/PrivateKey.js.map +1 -1
- package/dist/esm/src/primitives/PublicKey.js +4 -4
- package/dist/esm/src/primitives/PublicKey.js.map +1 -1
- package/dist/esm/src/primitives/Random.js +10 -14
- package/dist/esm/src/primitives/Random.js.map +1 -1
- package/dist/esm/src/primitives/ReaderUint8Array.js +6 -6
- package/dist/esm/src/primitives/ReaderUint8Array.js.map +1 -1
- package/dist/esm/src/primitives/Schnorr.js +1 -1
- package/dist/esm/src/primitives/Schnorr.js.map +1 -1
- package/dist/esm/src/primitives/Secp256r1.js +2 -1
- package/dist/esm/src/primitives/Secp256r1.js.map +1 -1
- package/dist/esm/src/primitives/Signature.js +8 -8
- package/dist/esm/src/primitives/Signature.js.map +1 -1
- package/dist/esm/src/primitives/TransactionSignature.js +20 -21
- package/dist/esm/src/primitives/TransactionSignature.js.map +1 -1
- package/dist/esm/src/primitives/utils.js +39 -48
- package/dist/esm/src/primitives/utils.js.map +1 -1
- package/dist/esm/src/registry/RegistryClient.js +31 -23
- package/dist/esm/src/registry/RegistryClient.js.map +1 -1
- package/dist/esm/src/remittance/RemittanceManager.js +19 -18
- package/dist/esm/src/remittance/RemittanceManager.js.map +1 -1
- package/dist/esm/src/remittance/modules/BasicBRC29.js.map +1 -1
- package/dist/esm/src/script/Script.js +93 -170
- package/dist/esm/src/script/Script.js.map +1 -1
- package/dist/esm/src/script/ScriptEvaluationError.js +2 -2
- package/dist/esm/src/script/ScriptEvaluationError.js.map +1 -1
- package/dist/esm/src/script/Spend.js +14 -12
- package/dist/esm/src/script/Spend.js.map +1 -1
- package/dist/esm/src/script/templates/PushDrop.js +4 -3
- package/dist/esm/src/script/templates/PushDrop.js.map +1 -1
- package/dist/esm/src/script/templates/RPuzzle.js +2 -4
- package/dist/esm/src/script/templates/RPuzzle.js.map +1 -1
- package/dist/esm/src/storage/StorageDownloader.js +1 -1
- package/dist/esm/src/storage/StorageDownloader.js.map +1 -1
- package/dist/esm/src/totp/totp.js +1 -1
- package/dist/esm/src/totp/totp.js.map +1 -1
- package/dist/esm/src/transaction/Beef.js +229 -186
- package/dist/esm/src/transaction/Beef.js.map +1 -1
- package/dist/esm/src/transaction/BeefConstants.js +16 -0
- package/dist/esm/src/transaction/BeefConstants.js.map +1 -0
- package/dist/esm/src/transaction/BeefTx.js +3 -3
- package/dist/esm/src/transaction/BeefTx.js.map +1 -1
- package/dist/esm/src/transaction/MerklePath.js +4 -4
- package/dist/esm/src/transaction/MerklePath.js.map +1 -1
- package/dist/esm/src/transaction/Transaction.js +49 -52
- package/dist/esm/src/transaction/Transaction.js.map +1 -1
- package/dist/esm/src/transaction/fee-models/SatoshisPerKilobyte.js +1 -1
- package/dist/esm/src/transaction/fee-models/SatoshisPerKilobyte.js.map +1 -1
- package/dist/esm/src/transaction/http/BinaryFetchClient.js +9 -9
- package/dist/esm/src/transaction/http/BinaryFetchClient.js.map +1 -1
- package/dist/esm/src/transaction/http/DefaultHttpClient.js +9 -9
- package/dist/esm/src/transaction/http/DefaultHttpClient.js.map +1 -1
- package/dist/esm/src/wallet/CachedKeyDeriver.js +1 -1
- package/dist/esm/src/wallet/CachedKeyDeriver.js.map +1 -1
- package/dist/esm/src/wallet/WalletClient.js.map +1 -1
- package/dist/esm/src/wallet/WalletError.js.map +1 -1
- package/dist/esm/src/wallet/substrates/HTTPWalletJSON.js +5 -4
- package/dist/esm/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
- package/dist/esm/src/wallet/substrates/ReactNativeWebView.js +9 -9
- package/dist/esm/src/wallet/substrates/ReactNativeWebView.js.map +1 -1
- package/dist/esm/src/wallet/substrates/WalletWireProcessor.js +92 -92
- package/dist/esm/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
- package/dist/esm/src/wallet/substrates/WalletWireTransceiver.js +387 -711
- package/dist/esm/src/wallet/substrates/WalletWireTransceiver.js.map +1 -1
- package/dist/esm/src/wallet/substrates/XDM.js +4 -4
- package/dist/esm/src/wallet/substrates/XDM.js.map +1 -1
- package/dist/esm/src/wallet/substrates/window.CWI.js +2 -2
- package/dist/esm/src/wallet/substrates/window.CWI.js.map +1 -1
- package/dist/esm/src/wallet/validationHelpers.js +9 -9
- package/dist/esm/src/wallet/validationHelpers.js.map +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/types/src/auth/Peer.d.ts +13 -0
- package/dist/types/src/auth/Peer.d.ts.map +1 -1
- package/dist/types/src/auth/SessionManager.d.ts.map +1 -1
- package/dist/types/src/auth/clients/AuthFetch.d.ts.map +1 -1
- package/dist/types/src/compat/ECIES.d.ts.map +1 -1
- package/dist/types/src/compat/HD.d.ts.map +1 -1
- package/dist/types/src/identity/ContactsManager.d.ts +18 -0
- package/dist/types/src/identity/ContactsManager.d.ts.map +1 -1
- package/dist/types/src/identity/IdentityClient.d.ts +47 -8
- package/dist/types/src/identity/IdentityClient.d.ts.map +1 -1
- package/dist/types/src/kvstore/GlobalKVStore.d.ts.map +1 -1
- package/dist/types/src/overlay-tools/LookupResolver.d.ts +59 -1
- package/dist/types/src/overlay-tools/LookupResolver.d.ts.map +1 -1
- package/dist/types/src/overlay-tools/SHIPBroadcaster.d.ts +18 -3
- package/dist/types/src/overlay-tools/SHIPBroadcaster.d.ts.map +1 -1
- package/dist/types/src/primitives/BigNumber.d.ts +13 -3
- package/dist/types/src/primitives/BigNumber.d.ts.map +1 -1
- package/dist/types/src/primitives/Curve.d.ts.map +1 -1
- package/dist/types/src/primitives/ECDSA.d.ts.map +1 -1
- package/dist/types/src/primitives/Hash.d.ts +3 -3
- package/dist/types/src/primitives/Hash.d.ts.map +1 -1
- package/dist/types/src/primitives/JacobianPoint.d.ts +3 -1
- package/dist/types/src/primitives/JacobianPoint.d.ts.map +1 -1
- package/dist/types/src/primitives/Point.d.ts.map +1 -1
- package/dist/types/src/primitives/Random.d.ts +2 -2
- package/dist/types/src/primitives/Random.d.ts.map +1 -1
- package/dist/types/src/primitives/ReaderUint8Array.d.ts.map +1 -1
- package/dist/types/src/primitives/Schnorr.d.ts +2 -1
- package/dist/types/src/primitives/Schnorr.d.ts.map +1 -1
- package/dist/types/src/primitives/Secp256r1.d.ts.map +1 -1
- package/dist/types/src/primitives/utils.d.ts +2 -4
- package/dist/types/src/primitives/utils.d.ts.map +1 -1
- package/dist/types/src/registry/RegistryClient.d.ts.map +1 -1
- package/dist/types/src/remittance/RemittanceManager.d.ts.map +1 -1
- package/dist/types/src/remittance/modules/BasicBRC29.d.ts.map +1 -1
- package/dist/types/src/script/Script.d.ts +15 -8
- package/dist/types/src/script/Script.d.ts.map +1 -1
- package/dist/types/src/script/Spend.d.ts.map +1 -1
- package/dist/types/src/script/templates/PushDrop.d.ts +3 -1
- package/dist/types/src/script/templates/PushDrop.d.ts.map +1 -1
- package/dist/types/src/script/templates/RPuzzle.d.ts.map +1 -1
- package/dist/types/src/transaction/Beef.d.ts +46 -8
- package/dist/types/src/transaction/Beef.d.ts.map +1 -1
- package/dist/types/src/transaction/BeefConstants.d.ts +15 -0
- package/dist/types/src/transaction/BeefConstants.d.ts.map +1 -0
- package/dist/types/src/transaction/Transaction.d.ts.map +1 -1
- package/dist/types/src/wallet/CachedKeyDeriver.d.ts.map +1 -1
- package/dist/types/src/wallet/KeyDeriver.d.ts +1 -1
- package/dist/types/src/wallet/KeyDeriver.d.ts.map +1 -1
- package/dist/types/src/wallet/Wallet.interfaces.d.ts +2 -2
- package/dist/types/src/wallet/Wallet.interfaces.d.ts.map +1 -1
- package/dist/types/src/wallet/WalletClient.d.ts +7 -7
- package/dist/types/src/wallet/WalletClient.d.ts.map +1 -1
- package/dist/types/src/wallet/substrates/HTTPWalletJSON.d.ts +7 -7
- package/dist/types/src/wallet/substrates/HTTPWalletJSON.d.ts.map +1 -1
- package/dist/types/src/wallet/substrates/WalletWireTransceiver.d.ts +36 -7
- package/dist/types/src/wallet/substrates/WalletWireTransceiver.d.ts.map +1 -1
- package/dist/types/src/wallet/substrates/window.CWI.d.ts +8 -8
- package/dist/types/src/wallet/substrates/window.CWI.d.ts.map +1 -1
- package/dist/types/tsconfig.types.tsbuildinfo +1 -1
- package/dist/umd/bundle.js +3 -3
- package/docs/reference/kvstore.md +1 -2
- package/docs/reference/primitives.md +0 -1
- package/docs/reference/script.md +0 -7
- package/docs/reference/transaction.md +2 -2
- package/package.json +29 -28
- package/src/auth/Peer.ts +26 -13
- package/src/auth/SessionManager.ts +4 -7
- package/src/auth/certificates/MasterCertificate.ts +1 -1
- package/src/auth/certificates/__tests/CompletedProtoWallet.ts +1 -1
- package/src/auth/clients/AuthFetch.ts +41 -41
- package/src/auth/transports/SimplifiedFetchTransport.ts +4 -4
- package/src/compat/ECIES.ts +29 -34
- package/src/compat/HD.ts +10 -5
- package/src/compat/Mnemonic.ts +11 -11
- package/src/compat/__tests/HD.test.ts +19 -0
- package/src/identity/ContactsManager.ts +194 -257
- package/src/identity/IdentityClient.ts +155 -66
- package/src/identity/__tests/IdentityClient.test.ts +25 -1
- package/src/kvstore/GlobalKVStore.ts +31 -32
- package/src/kvstore/LocalKVStore.ts +8 -8
- package/src/kvstore/kvStoreInterpreter.ts +2 -2
- package/src/messages/SignedMessage.ts +1 -1
- package/src/overlay-tools/Historian.ts +1 -1
- package/src/overlay-tools/LookupResolver.ts +182 -45
- package/src/overlay-tools/SHIPBroadcaster.ts +92 -168
- package/src/primitives/AESGCM.ts +2 -2
- package/src/primitives/BigNumber.ts +122 -113
- package/src/primitives/Curve.ts +16 -15
- package/src/primitives/ECDSA.ts +10 -8
- package/src/primitives/Hash.ts +152 -53
- package/src/primitives/JacobianPoint.ts +13 -11
- package/src/primitives/K256.ts +3 -3
- package/src/primitives/Point.ts +35 -38
- package/src/primitives/PrivateKey.ts +3 -3
- package/src/primitives/PublicKey.ts +3 -3
- package/src/primitives/Random.ts +11 -14
- package/src/primitives/ReaderUint8Array.ts +7 -7
- package/src/primitives/Schnorr.ts +2 -1
- package/src/primitives/Secp256r1.ts +2 -1
- package/src/primitives/Signature.ts +8 -8
- package/src/primitives/TransactionSignature.ts +16 -16
- package/src/primitives/utils.ts +37 -47
- package/src/registry/RegistryClient.ts +25 -25
- package/src/remittance/RemittanceManager.ts +17 -18
- package/src/remittance/modules/BasicBRC29.ts +2 -5
- package/src/script/Script.ts +114 -170
- package/src/script/ScriptEvaluationError.ts +2 -2
- package/src/script/Spend.ts +14 -15
- package/src/script/templates/PushDrop.ts +5 -3
- package/src/script/templates/RPuzzle.ts +2 -4
- package/src/storage/StorageDownloader.ts +1 -1
- package/src/totp/totp.ts +1 -1
- package/src/transaction/Beef.ts +241 -203
- package/src/transaction/BeefConstants.ts +16 -0
- package/src/transaction/BeefTx.ts +3 -3
- package/src/transaction/MerklePath.ts +4 -4
- package/src/transaction/Transaction.ts +48 -51
- package/src/transaction/fee-models/SatoshisPerKilobyte.ts +1 -1
- package/src/transaction/http/BinaryFetchClient.ts +8 -8
- package/src/transaction/http/DefaultHttpClient.ts +8 -8
- package/src/wallet/CachedKeyDeriver.ts +8 -6
- package/src/wallet/KeyDeriver.ts +1 -1
- package/src/wallet/Wallet.interfaces.ts +2 -4
- package/src/wallet/WalletClient.ts +8 -8
- package/src/wallet/WalletError.ts +1 -1
- package/src/wallet/__tests/WalletClient.substrate.test.ts +10 -6
- package/src/wallet/substrates/HTTPWalletJSON.ts +22 -21
- package/src/wallet/substrates/ReactNativeWebView.ts +9 -9
- package/src/wallet/substrates/WalletWireProcessor.ts +83 -83
- package/src/wallet/substrates/WalletWireTransceiver.ts +528 -938
- package/src/wallet/substrates/XDM.ts +4 -4
- package/src/wallet/substrates/__tests/HTTPWalletJSON.test.ts +38 -25
- package/src/wallet/substrates/__tests/ReactNativeWebView.test.ts +174 -0
- package/src/wallet/substrates/__tests/window.CWI.test.ts +256 -0
- package/src/wallet/substrates/window.CWI.ts +10 -10
- package/src/wallet/validationHelpers.ts +9 -9
- package/docs/swagger/dist/LICENSE +0 -21
- package/docs/swagger/dist/favicon-16x16.png +0 -0
- package/docs/swagger/dist/favicon-32x32.png +0 -0
- package/docs/swagger/dist/index.css +0 -16
- package/docs/swagger/dist/oauth2-redirect.html +0 -79
- package/docs/swagger/dist/swagger-initializer.js +0 -20
- package/docs/swagger/dist/swagger-ui-bundle.js +0 -2
- package/docs/swagger/dist/swagger-ui-bundle.js.map +0 -1
- package/docs/swagger/dist/swagger-ui-es-bundle-core.js +0 -3
- package/docs/swagger/dist/swagger-ui-es-bundle-core.js.map +0 -1
- package/docs/swagger/dist/swagger-ui-es-bundle.js +0 -2
- package/docs/swagger/dist/swagger-ui-es-bundle.js.map +0 -1
- package/docs/swagger/dist/swagger-ui-standalone-preset.js +0 -2
- package/docs/swagger/dist/swagger-ui-standalone-preset.js.map +0 -1
- package/docs/swagger/dist/swagger-ui.css +0 -3
- package/docs/swagger/dist/swagger-ui.css.map +0 -1
- package/docs/swagger/dist/swagger-ui.js +0 -2
- package/docs/swagger/dist/swagger-ui.js.map +0 -1
|
@@ -249,8 +249,7 @@ Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](
|
|
|
249
249
|
### Interface: KVStoreQuery
|
|
250
250
|
|
|
251
251
|
Query parameters for KVStore lookups from overlay services.
|
|
252
|
-
|
|
253
|
-
Pagination and ordering fields only refine selector-based lookups.
|
|
252
|
+
Used when searching for existing key-value pairs in the network.
|
|
254
253
|
|
|
255
254
|
```ts
|
|
256
255
|
export interface KVStoreQuery {
|
|
@@ -4948,7 +4948,6 @@ export default class TransactionSignature extends Signature {
|
|
|
4948
4948
|
static formatBip143(params: TransactionSignatureFormatParams): Uint8Array
|
|
4949
4949
|
static format(params: TransactionSignatureFormatParams): number[]
|
|
4950
4950
|
static formatBytes(params: TransactionSignatureFormatParams): Uint8Array
|
|
4951
|
-
static usesOtdaSingleBug(params: TransactionSignatureFormatParams): boolean
|
|
4952
4951
|
static fromChecksigFormat(buf: number[]): TransactionSignature
|
|
4953
4952
|
constructor(r: BigNumber, s: BigNumber, scope: number)
|
|
4954
4953
|
public hasLowS(): boolean
|
package/docs/reference/script.md
CHANGED
|
@@ -45,7 +45,6 @@ A representation of a chunk of a script, which includes an opcode. For push oper
|
|
|
45
45
|
export default interface ScriptChunk {
|
|
46
46
|
op: number;
|
|
47
47
|
data?: number[];
|
|
48
|
-
invalidLength?: boolean;
|
|
49
48
|
}
|
|
50
49
|
```
|
|
51
50
|
|
|
@@ -805,14 +804,10 @@ export default class Spend {
|
|
|
805
804
|
stack: number[][];
|
|
806
805
|
altStack: number[][];
|
|
807
806
|
ifStack: boolean[];
|
|
808
|
-
elseStack: boolean[];
|
|
809
807
|
memoryLimit: number;
|
|
810
808
|
stackMem: number;
|
|
811
809
|
altStackMem: number;
|
|
812
810
|
isRelaxedOverride: boolean;
|
|
813
|
-
verifyFlags?: Set<string>;
|
|
814
|
-
executedOpCount: number;
|
|
815
|
-
returningFromConditional: boolean;
|
|
816
811
|
constructor(params: {
|
|
817
812
|
sourceTXID: string;
|
|
818
813
|
sourceOutputIndex: number;
|
|
@@ -827,7 +822,6 @@ export default class Spend {
|
|
|
827
822
|
lockTime: number;
|
|
828
823
|
memoryLimit?: number;
|
|
829
824
|
isRelaxed?: boolean;
|
|
830
|
-
verifyFlags?: string | string[];
|
|
831
825
|
})
|
|
832
826
|
reset(): void
|
|
833
827
|
step(): boolean
|
|
@@ -854,7 +848,6 @@ constructor(params: {
|
|
|
854
848
|
lockTime: number;
|
|
855
849
|
memoryLimit?: number;
|
|
856
850
|
isRelaxed?: boolean;
|
|
857
|
-
verifyFlags?: string | string[];
|
|
858
851
|
})
|
|
859
852
|
```
|
|
860
853
|
See also: [LockingScript](./script.md#class-lockingscript), [TransactionInput](./transaction.md#interface-transactioninput), [TransactionOutput](./transaction.md#interface-transactionoutput), [UnlockingScript](./script.md#class-unlockingscript)
|
|
@@ -2455,8 +2455,8 @@ Links: [API](#api), [Interfaces](#interfaces), [Classes](#classes), [Functions](
|
|
|
2455
2455
|
### Function: defaultHttpClient
|
|
2456
2456
|
|
|
2457
2457
|
Returns a default HttpClient implementation based on the environment that it is run on.
|
|
2458
|
-
This method will attempt to use `window.fetch` if available (in browser environments)
|
|
2459
|
-
|
|
2458
|
+
This method will attempt to use `window.fetch` if available (in browser environments).
|
|
2459
|
+
If running in a Node environment, it falls back to using the Node `https` module
|
|
2460
2460
|
|
|
2461
2461
|
```ts
|
|
2462
2462
|
export function defaultHttpClient(): HttpClient
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bsv/sdk",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.1.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "BSV Blockchain Software Development Kit",
|
|
6
6
|
"main": "dist/cjs/mod.js",
|
|
@@ -218,24 +218,10 @@
|
|
|
218
218
|
"import": "./dist/umd/bundle.js"
|
|
219
219
|
}
|
|
220
220
|
},
|
|
221
|
-
"scripts": {
|
|
222
|
-
"test": "npm run build && jest",
|
|
223
|
-
"test:watch": "npm run build && jest --watch",
|
|
224
|
-
"test:coverage": "npm run build && jest --coverage",
|
|
225
|
-
"lint:ci": "ts-standard src/**/*.ts",
|
|
226
|
-
"lint": "ts-standard --fix src/**/*.ts",
|
|
227
|
-
"build": "npm run build:ts && npm run build:umd",
|
|
228
|
-
"build:ts": "tsc -b && tsconfig-to-dual-package tsconfig.cjs.json",
|
|
229
|
-
"build:umd": "rspack --config rspack.config.js",
|
|
230
|
-
"dev": "tsc -b -w",
|
|
231
|
-
"prepublish": "npm run build",
|
|
232
|
-
"doc": "ts2md",
|
|
233
|
-
"docs:serve": "mkdocs serve",
|
|
234
|
-
"docs:build": "mkdocs build"
|
|
235
|
-
},
|
|
236
221
|
"repository": {
|
|
237
222
|
"type": "git",
|
|
238
|
-
"url": "git+https://github.com/bsv-blockchain/ts-
|
|
223
|
+
"url": "git+https://github.com/bsv-blockchain/ts-stack.git",
|
|
224
|
+
"directory": "packages/sdk"
|
|
239
225
|
},
|
|
240
226
|
"keywords": [
|
|
241
227
|
"BSV",
|
|
@@ -247,32 +233,47 @@
|
|
|
247
233
|
"author": "BSV Blockchain Association",
|
|
248
234
|
"license": "SEE LICENSE IN LICENSE.txt",
|
|
249
235
|
"bugs": {
|
|
250
|
-
"url": "https://github.com/bsv-blockchain/ts-
|
|
236
|
+
"url": "https://github.com/bsv-blockchain/ts-stack/issues"
|
|
251
237
|
},
|
|
252
|
-
"homepage": "https://github.com/bsv-blockchain/ts-sdk#readme",
|
|
238
|
+
"homepage": "https://github.com/bsv-blockchain/ts-stack/tree/main/packages/sdk#readme",
|
|
253
239
|
"devDependencies": {
|
|
254
|
-
"@eslint/js": "^
|
|
240
|
+
"@eslint/js": "^9.39.1",
|
|
255
241
|
"@jest/globals": "^30.3.0",
|
|
256
242
|
"@rspack/cli": "^2.0.0",
|
|
257
|
-
"@rspack/core": "^
|
|
243
|
+
"@rspack/core": "^1.6.1",
|
|
258
244
|
"@types/jest": "^30.0.0",
|
|
259
|
-
"@types/node": "^
|
|
260
|
-
"eslint": "^
|
|
261
|
-
"globals": "^
|
|
245
|
+
"@types/node": "^24.10.1",
|
|
246
|
+
"eslint": "^9.39.1",
|
|
247
|
+
"globals": "^16.5.0",
|
|
262
248
|
"jest": "^30.3.0",
|
|
263
249
|
"jest-environment-jsdom": "^30.3.0",
|
|
264
250
|
"ts-jest": "^29.4.9",
|
|
265
|
-
"ts-loader": "^9.5.
|
|
251
|
+
"ts-loader": "^9.5.4",
|
|
266
252
|
"ts-standard": "^12.0.2",
|
|
267
253
|
"ts2md": "^0.2.8",
|
|
268
254
|
"tsconfig-to-dual-package": "^1.2.0",
|
|
269
|
-
"typescript": "^
|
|
270
|
-
"typescript-eslint": "^8.
|
|
255
|
+
"typescript": "^5.9.3",
|
|
256
|
+
"typescript-eslint": "^8.46.4"
|
|
271
257
|
},
|
|
272
258
|
"ts-standard": {
|
|
273
259
|
"project": "tsconfig.eslint.json",
|
|
274
260
|
"ignore": [
|
|
275
261
|
"dist"
|
|
276
262
|
]
|
|
263
|
+
},
|
|
264
|
+
"scripts": {
|
|
265
|
+
"test": "npm run build && jest",
|
|
266
|
+
"test:watch": "npm run build && jest --watch",
|
|
267
|
+
"test:coverage": "npm run build && jest --coverage --watchman=false",
|
|
268
|
+
"lint:ci": "ts-standard src/**/*.ts",
|
|
269
|
+
"lint": "ts-standard --fix src/**/*.ts",
|
|
270
|
+
"build": "npm run build:ts && npm run build:umd",
|
|
271
|
+
"build:ts": "tsc -b && tsconfig-to-dual-package tsconfig.cjs.json",
|
|
272
|
+
"build:umd": "rspack --config rspack.config.js",
|
|
273
|
+
"dev": "tsc -b -w",
|
|
274
|
+
"prepublish": "npm run build",
|
|
275
|
+
"doc": "ts2md",
|
|
276
|
+
"docs:serve": "mkdocs serve",
|
|
277
|
+
"docs:build": "mkdocs build"
|
|
277
278
|
}
|
|
278
|
-
}
|
|
279
|
+
}
|
package/src/auth/Peer.ts
CHANGED
|
@@ -18,7 +18,7 @@ import { OriginatorDomainNameStringUnder250Bytes, WalletInterface } from '../wal
|
|
|
18
18
|
|
|
19
19
|
const AUTH_VERSION = '0.1'
|
|
20
20
|
const BufferCtor =
|
|
21
|
-
typeof globalThis
|
|
21
|
+
typeof globalThis === 'undefined' ? undefined : (globalThis as any).Buffer
|
|
22
22
|
|
|
23
23
|
/**
|
|
24
24
|
* Represents a peer capable of performing mutual authentication.
|
|
@@ -73,6 +73,24 @@ export class Peer {
|
|
|
73
73
|
private readonly originator?: OriginatorDomainNameStringUnder250Bytes
|
|
74
74
|
private identityPublicKey?: string
|
|
75
75
|
|
|
76
|
+
/**
|
|
77
|
+
* Resolves when the transport's `onData` listener has been registered and
|
|
78
|
+
* the peer is ready to send and receive messages. Await this after
|
|
79
|
+
* construction before calling `toPeer` or any other method that requires
|
|
80
|
+
* the transport to be listening.
|
|
81
|
+
*
|
|
82
|
+
* @example
|
|
83
|
+
* const peer = new Peer(wallet, transport)
|
|
84
|
+
* await peer.ready
|
|
85
|
+
* await peer.toPeer(payload)
|
|
86
|
+
*/
|
|
87
|
+
/*
|
|
88
|
+
* Listener must register synchronously so paired-peer mocks/transports see
|
|
89
|
+
* onDataCallback set immediately. The returned Promise resolves once registration
|
|
90
|
+
* is fully acknowledged. A lazy getter pattern would break paired-peer test mocks.
|
|
91
|
+
*/
|
|
92
|
+
readonly ready: Promise<void>
|
|
93
|
+
|
|
76
94
|
/**
|
|
77
95
|
* Creates a new Peer instance
|
|
78
96
|
*
|
|
@@ -81,6 +99,7 @@ export class Peer {
|
|
|
81
99
|
* @param {RequestedCertificateSet} [certificatesToRequest] - Optional set of certificates to request from a peer during the initial handshake.
|
|
82
100
|
* @param {SessionManager} [sessionManager] - Optional SessionManager to be used for managing peer sessions.
|
|
83
101
|
* @param {boolean} [autoPersistLastSession] - Whether to auto-persist the session with the last-interacted-with peer. Defaults to true.
|
|
102
|
+
* @param {OriginatorDomainNameStringUnder250Bytes} [originator] - Optional originator domain name.
|
|
84
103
|
*/
|
|
85
104
|
constructor (
|
|
86
105
|
wallet: WalletInterface,
|
|
@@ -97,11 +116,9 @@ export class Peer {
|
|
|
97
116
|
certifiers: [],
|
|
98
117
|
types: {}
|
|
99
118
|
}
|
|
100
|
-
this.transport.onData(this.handleIncomingMessage.bind(this))
|
|
101
|
-
throw e
|
|
102
|
-
})
|
|
119
|
+
this.ready = this.transport.onData(this.handleIncomingMessage.bind(this)) // NOSONAR(typescript:S7059): listener must register synchronously — see ready field comment
|
|
103
120
|
this.sessionManager =
|
|
104
|
-
sessionManager
|
|
121
|
+
sessionManager ?? new SessionManager()
|
|
105
122
|
if (autoPersistLastSession === false) {
|
|
106
123
|
this.autoPersistLastSession = false
|
|
107
124
|
} else {
|
|
@@ -249,12 +266,12 @@ export class Peer {
|
|
|
249
266
|
}
|
|
250
267
|
|
|
251
268
|
// If that session doesn't exist or isn't authenticated, initiate handshake
|
|
252
|
-
if (
|
|
269
|
+
if (peerSession?.isAuthenticated !== true) {
|
|
253
270
|
// This will create a brand-new session
|
|
254
271
|
const sessionNonce = await this.initiateHandshake(identityKey)
|
|
255
272
|
// Now retrieve it by the sessionNonce
|
|
256
273
|
peerSession = this.sessionManager.getSession(sessionNonce)
|
|
257
|
-
if (
|
|
274
|
+
if (peerSession?.isAuthenticated !== true) {
|
|
258
275
|
throw new Error('Unable to establish mutual authentication with peer!')
|
|
259
276
|
}
|
|
260
277
|
}
|
|
@@ -423,9 +440,7 @@ export class Peer {
|
|
|
423
440
|
if (peerIdentityKey != null) {
|
|
424
441
|
const existingDetails = (error as any).details
|
|
425
442
|
if (existingDetails != null && typeof existingDetails === 'object') {
|
|
426
|
-
|
|
427
|
-
existingDetails.peerIdentityKey = peerIdentityKey
|
|
428
|
-
}
|
|
443
|
+
existingDetails.peerIdentityKey ??= peerIdentityKey
|
|
429
444
|
} else {
|
|
430
445
|
(error as any).details = { peerIdentityKey }
|
|
431
446
|
}
|
|
@@ -548,9 +563,7 @@ export class Peer {
|
|
|
548
563
|
signature
|
|
549
564
|
}
|
|
550
565
|
|
|
551
|
-
|
|
552
|
-
this.lastInteractedWithPeer = message.identityKey
|
|
553
|
-
}
|
|
566
|
+
this.lastInteractedWithPeer ??= message.identityKey
|
|
554
567
|
|
|
555
568
|
await this.transport.send(initialResponseMessage)
|
|
556
569
|
}
|
|
@@ -31,7 +31,7 @@ export class SessionManager {
|
|
|
31
31
|
*/
|
|
32
32
|
addSession (session: PeerSession): void {
|
|
33
33
|
if (typeof session.sessionNonce !== 'string') {
|
|
34
|
-
throw new
|
|
34
|
+
throw new TypeError(
|
|
35
35
|
'Invalid session: sessionNonce is required to add a session.'
|
|
36
36
|
)
|
|
37
37
|
}
|
|
@@ -97,11 +97,8 @@ export class SessionManager {
|
|
|
97
97
|
// We can prefer authenticated sessions
|
|
98
98
|
if (best == null) {
|
|
99
99
|
best = s
|
|
100
|
-
} else {
|
|
101
|
-
|
|
102
|
-
if ((s.lastUpdate ?? 0) > (best.lastUpdate ?? 0)) {
|
|
103
|
-
best = s
|
|
104
|
-
}
|
|
100
|
+
} else if ((s.lastUpdate ?? 0) > (best.lastUpdate ?? 0)) {
|
|
101
|
+
best = s
|
|
105
102
|
}
|
|
106
103
|
}
|
|
107
104
|
// Optionally, you could also filter out isAuthenticated===false if you only want
|
|
@@ -140,6 +137,6 @@ export class SessionManager {
|
|
|
140
137
|
if (direct) return true
|
|
141
138
|
// if not directly a nonce, interpret as identityKey
|
|
142
139
|
const nonces = this.identityKeyToNonces.get(identifier)
|
|
143
|
-
return
|
|
140
|
+
return (nonces != null) && nonces.size > 0
|
|
144
141
|
}
|
|
145
142
|
}
|
|
@@ -157,7 +157,7 @@ export class MasterCertificate extends Certificate {
|
|
|
157
157
|
privilegedReason?: string
|
|
158
158
|
): Promise<Record<CertificateFieldNameUnder50Bytes, string>> {
|
|
159
159
|
if (!Array.isArray(fieldsToReveal)) {
|
|
160
|
-
throw new
|
|
160
|
+
throw new TypeError('fieldsToReveal must be an array of strings')
|
|
161
161
|
}
|
|
162
162
|
const fieldRevelationKeyring = {}
|
|
163
163
|
for (const fieldName of fieldsToReveal) {
|
|
@@ -117,11 +117,13 @@ export class AuthFetch {
|
|
|
117
117
|
|
|
118
118
|
// Create a new transport for this base url if needed
|
|
119
119
|
let peerToUse: AuthPeer
|
|
120
|
-
if (
|
|
120
|
+
if (this.peers[baseURL] === undefined) {
|
|
121
121
|
// Create a peer for the request
|
|
122
122
|
const newTransport = new SimplifiedFetchTransport(baseURL)
|
|
123
|
+
const newPeer = new Peer(this.wallet, newTransport, this.requestedCertificates, this.sessionManager, undefined, this.originator)
|
|
124
|
+
await newPeer.ready
|
|
123
125
|
peerToUse = {
|
|
124
|
-
peer:
|
|
126
|
+
peer: newPeer,
|
|
125
127
|
pendingCertificateRequests: []
|
|
126
128
|
}
|
|
127
129
|
this.peers[baseURL] = peerToUse
|
|
@@ -315,20 +317,20 @@ export class AuthFetch {
|
|
|
315
317
|
const baseURL = parsedUrl.origin
|
|
316
318
|
|
|
317
319
|
let peerToUse: { peer: Peer; identityKey?: string }
|
|
318
|
-
if (
|
|
319
|
-
peerToUse = { peer: this.peers[baseURL].peer }
|
|
320
|
-
} else {
|
|
320
|
+
if (this.peers[baseURL] === undefined) {
|
|
321
321
|
const newTransport = new SimplifiedFetchTransport(baseURL)
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
}
|
|
322
|
+
const newPeer = new Peer(
|
|
323
|
+
this.wallet,
|
|
324
|
+
newTransport,
|
|
325
|
+
this.requestedCertificates,
|
|
326
|
+
this.sessionManager,
|
|
327
|
+
this.originator
|
|
328
|
+
)
|
|
329
|
+
await newPeer.ready
|
|
330
|
+
peerToUse = { peer: newPeer }
|
|
331
331
|
this.peers[baseURL] = peerToUse
|
|
332
|
+
} else {
|
|
333
|
+
peerToUse = { peer: this.peers[baseURL].peer }
|
|
332
334
|
}
|
|
333
335
|
|
|
334
336
|
// Return a promise that resolves when certificates are received
|
|
@@ -451,14 +453,14 @@ export class AuthFetch {
|
|
|
451
453
|
|
|
452
454
|
// nHeaders
|
|
453
455
|
writer.writeVarIntNum(includedHeaders.length)
|
|
454
|
-
for (
|
|
456
|
+
for (const [headerKey, headerValue] of includedHeaders) {
|
|
455
457
|
// headerKeyLength
|
|
456
|
-
const headerKeyAsArray = Utils.toArray(
|
|
458
|
+
const headerKeyAsArray = Utils.toArray(headerKey, 'utf8')
|
|
457
459
|
writer.writeVarIntNum(headerKeyAsArray.length)
|
|
458
460
|
// headerKey
|
|
459
461
|
writer.write(headerKeyAsArray)
|
|
460
462
|
// headerValueLength
|
|
461
|
-
const headerValueAsArray = Utils.toArray(
|
|
463
|
+
const headerValueAsArray = Utils.toArray(headerValue, 'utf8')
|
|
462
464
|
writer.writeVarIntNum(headerValueAsArray.length)
|
|
463
465
|
// headerValue
|
|
464
466
|
writer.write(headerValueAsArray)
|
|
@@ -470,7 +472,7 @@ export class AuthFetch {
|
|
|
470
472
|
if (methodsThatTypicallyHaveBody.includes(method.toUpperCase()) && body === undefined) {
|
|
471
473
|
// Check if content-type is application/json
|
|
472
474
|
const contentTypeHeader = includedHeaders.find(([k]) => k === 'content-type')
|
|
473
|
-
if (contentTypeHeader
|
|
475
|
+
if (contentTypeHeader?.[1].includes('application/json') === true) {
|
|
474
476
|
body = '{}'
|
|
475
477
|
} else {
|
|
476
478
|
body = ''
|
|
@@ -525,14 +527,14 @@ export class AuthFetch {
|
|
|
525
527
|
if (!satoshisRequiredHeader) {
|
|
526
528
|
throw new Error('Missing x-bsv-payment-satoshis-required response header.')
|
|
527
529
|
}
|
|
528
|
-
const satoshisRequired = parseInt(satoshisRequiredHeader)
|
|
529
|
-
if (isNaN(satoshisRequired) || satoshisRequired <= 0) {
|
|
530
|
+
const satoshisRequired = Number.parseInt(satoshisRequiredHeader)
|
|
531
|
+
if (Number.isNaN(satoshisRequired) || satoshisRequired <= 0) {
|
|
530
532
|
throw new Error('Invalid x-bsv-payment-satoshis-required response header value.')
|
|
531
533
|
}
|
|
532
534
|
|
|
533
535
|
const serverIdentityKey = originalResponse.headers.get('x-bsv-auth-identity-key')
|
|
534
536
|
if (typeof serverIdentityKey !== 'string') {
|
|
535
|
-
throw new
|
|
537
|
+
throw new TypeError('Missing x-bsv-auth-identity-key response header.')
|
|
536
538
|
}
|
|
537
539
|
|
|
538
540
|
const derivationPrefix = originalResponse.headers.get('x-bsv-payment-derivation-prefix')
|
|
@@ -541,7 +543,15 @@ export class AuthFetch {
|
|
|
541
543
|
}
|
|
542
544
|
|
|
543
545
|
let paymentContext = config.paymentContext
|
|
544
|
-
if (paymentContext
|
|
546
|
+
if (paymentContext == null) {
|
|
547
|
+
paymentContext = await this.createPaymentContext(
|
|
548
|
+
url,
|
|
549
|
+
config,
|
|
550
|
+
satoshisRequired,
|
|
551
|
+
serverIdentityKey,
|
|
552
|
+
derivationPrefix
|
|
553
|
+
)
|
|
554
|
+
} else {
|
|
545
555
|
const requirementsChanged = !this.isPaymentContextCompatible(
|
|
546
556
|
paymentContext,
|
|
547
557
|
satoshisRequired,
|
|
@@ -558,14 +568,6 @@ export class AuthFetch {
|
|
|
558
568
|
derivationPrefix
|
|
559
569
|
)
|
|
560
570
|
}
|
|
561
|
-
} else {
|
|
562
|
-
paymentContext = await this.createPaymentContext(
|
|
563
|
-
url,
|
|
564
|
-
config,
|
|
565
|
-
satoshisRequired,
|
|
566
|
-
serverIdentityKey,
|
|
567
|
-
derivationPrefix
|
|
568
|
-
)
|
|
569
571
|
}
|
|
570
572
|
|
|
571
573
|
if (paymentContext.attempts >= paymentContext.maxAttempts) {
|
|
@@ -573,7 +575,7 @@ export class AuthFetch {
|
|
|
573
575
|
}
|
|
574
576
|
|
|
575
577
|
const headersWithPayment: Record<string, string> = {
|
|
576
|
-
...
|
|
578
|
+
...config.headers
|
|
577
579
|
}
|
|
578
580
|
headersWithPayment['x-bsv-payment'] = JSON.stringify({
|
|
579
581
|
derivationPrefix: paymentContext.derivationPrefix,
|
|
@@ -692,7 +694,7 @@ export class AuthFetch {
|
|
|
692
694
|
url: string,
|
|
693
695
|
config: SimplifiedFetchRequestOptions
|
|
694
696
|
): PaymentRetryContext['requestSummary'] {
|
|
695
|
-
const headers = { ...
|
|
697
|
+
const headers = { ...config.headers }
|
|
696
698
|
const method = typeof config.method === 'string' ? config.method.toUpperCase() : 'GET'
|
|
697
699
|
const bodySummary = this.describeRequestBodyForLogging(config.body)
|
|
698
700
|
|
|
@@ -727,7 +729,7 @@ export class AuthFetch {
|
|
|
727
729
|
|
|
728
730
|
if (typeof ArrayBuffer !== 'undefined' && ArrayBuffer.isView(body)) {
|
|
729
731
|
return {
|
|
730
|
-
type: body.constructor
|
|
732
|
+
type: body.constructor == null ? 'TypedArray' : body.constructor.name,
|
|
731
733
|
byteLength: body.byteLength
|
|
732
734
|
}
|
|
733
735
|
}
|
|
@@ -754,8 +756,8 @@ export class AuthFetch {
|
|
|
754
756
|
if (typeof serialized === 'string') {
|
|
755
757
|
return { type: 'object', byteLength: Utils.toArray(serialized, 'utf8').length }
|
|
756
758
|
}
|
|
757
|
-
} catch (
|
|
758
|
-
// Ignore JSON serialization issues for logging purposes
|
|
759
|
+
} catch (_jsonSerializationError) {
|
|
760
|
+
// Ignore JSON serialization issues for logging purposes only
|
|
759
761
|
}
|
|
760
762
|
|
|
761
763
|
return { type: typeof body, byteLength: 0 }
|
|
@@ -791,12 +793,10 @@ export class AuthFetch {
|
|
|
791
793
|
console.error(`${prefix} ${message}`, details)
|
|
792
794
|
} else if (level === 'warn') {
|
|
793
795
|
console.warn(`${prefix} ${message}`, details)
|
|
796
|
+
} else if (typeof console.info === 'function') {
|
|
797
|
+
console.info(`${prefix} ${message}`, details)
|
|
794
798
|
} else {
|
|
795
|
-
|
|
796
|
-
console.info(`${prefix} ${message}`, details)
|
|
797
|
-
} else {
|
|
798
|
-
console.log(`${prefix} ${message}`, details)
|
|
799
|
-
}
|
|
799
|
+
console.log(`${prefix} ${message}`, details)
|
|
800
800
|
}
|
|
801
801
|
}
|
|
802
802
|
|
|
@@ -915,7 +915,7 @@ export class AuthFetch {
|
|
|
915
915
|
|
|
916
916
|
// 8. ReadableStream
|
|
917
917
|
if (body instanceof ReadableStream) {
|
|
918
|
-
throw new
|
|
918
|
+
throw new TypeError('ReadableStream cannot be directly converted to number[].')
|
|
919
919
|
}
|
|
920
920
|
|
|
921
921
|
// 9. Fallback
|
|
@@ -24,7 +24,7 @@ export class SimplifiedFetchTransport implements Transport {
|
|
|
24
24
|
*/
|
|
25
25
|
constructor(baseUrl: string, fetchClient = defaultFetch) {
|
|
26
26
|
if (typeof fetchClient !== 'function') {
|
|
27
|
-
throw new
|
|
27
|
+
throw new TypeError(
|
|
28
28
|
'SimplifiedFetchTransport requires a fetch implementation. ' +
|
|
29
29
|
'In environments without fetch, provide a polyfill or custom implementation.'
|
|
30
30
|
)
|
|
@@ -192,14 +192,14 @@ export class SimplifiedFetchTransport implements Transport {
|
|
|
192
192
|
|
|
193
193
|
// nHeaders
|
|
194
194
|
payloadWriter.writeVarIntNum(includedHeaders.length)
|
|
195
|
-
for (
|
|
195
|
+
for (const [headerKey, headerValue] of includedHeaders) {
|
|
196
196
|
// headerKeyLength
|
|
197
|
-
const headerKeyAsArray = Utils.toArray(
|
|
197
|
+
const headerKeyAsArray = Utils.toArray(headerKey, 'utf8')
|
|
198
198
|
payloadWriter.writeVarIntNum(headerKeyAsArray.length)
|
|
199
199
|
// headerKey
|
|
200
200
|
payloadWriter.write(headerKeyAsArray)
|
|
201
201
|
// headerValueLength
|
|
202
|
-
const headerValueAsArray = Utils.toArray(
|
|
202
|
+
const headerValueAsArray = Utils.toArray(headerValue, 'utf8')
|
|
203
203
|
payloadWriter.writeVarIntNum(headerValueAsArray.length)
|
|
204
204
|
// headerValue
|
|
205
205
|
payloadWriter.write(headerValueAsArray)
|