@bsv/sdk 1.3.12 → 1.3.14
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/package.json +15 -3
- package/dist/cjs/src/auth/Peer.js +83 -57
- package/dist/cjs/src/auth/Peer.js.map +1 -1
- package/dist/cjs/src/auth/SessionManager.js +14 -9
- package/dist/cjs/src/auth/SessionManager.js.map +1 -1
- package/dist/cjs/src/auth/certificates/Certificate.js +16 -10
- package/dist/cjs/src/auth/certificates/Certificate.js.map +1 -1
- package/dist/cjs/src/auth/certificates/MasterCertificate.js +25 -23
- package/dist/cjs/src/auth/certificates/MasterCertificate.js.map +1 -1
- package/dist/cjs/src/auth/certificates/VerifiableCertificate.js +2 -2
- package/dist/cjs/src/auth/certificates/VerifiableCertificate.js.map +1 -1
- package/dist/cjs/src/auth/certificates/__tests/CompletedProtoWallet.js +62 -46
- package/dist/cjs/src/auth/certificates/__tests/CompletedProtoWallet.js.map +1 -1
- package/dist/cjs/src/auth/clients/AuthFetch.js +1 -0
- package/dist/cjs/src/auth/clients/AuthFetch.js.map +1 -1
- package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js +70 -43
- package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js.map +1 -1
- package/dist/cjs/src/auth/utils/createNonce.js +2 -1
- package/dist/cjs/src/auth/utils/createNonce.js.map +1 -1
- package/dist/cjs/src/auth/utils/getVerifiableCertificates.js.map +1 -1
- package/dist/cjs/src/auth/utils/validateCertificates.js +5 -2
- package/dist/cjs/src/auth/utils/validateCertificates.js.map +1 -1
- package/dist/cjs/src/auth/utils/verifyNonce.js +2 -1
- package/dist/cjs/src/auth/utils/verifyNonce.js.map +1 -1
- package/dist/cjs/src/compat/BSM.js +7 -17
- package/dist/cjs/src/compat/BSM.js.map +1 -1
- package/dist/cjs/src/compat/ECIES.js +172 -133
- package/dist/cjs/src/compat/ECIES.js.map +1 -1
- package/dist/cjs/src/compat/HD.js +63 -73
- package/dist/cjs/src/compat/HD.js.map +1 -1
- package/dist/cjs/src/compat/Mnemonic.js +102 -106
- package/dist/cjs/src/compat/Mnemonic.js.map +1 -1
- package/dist/cjs/src/compat/Utxo.js +2 -2
- package/dist/cjs/src/compat/Utxo.js.map +1 -1
- package/dist/cjs/src/compat/index.js +7 -17
- package/dist/cjs/src/compat/index.js.map +1 -1
- package/dist/cjs/src/messages/EncryptedMessage.js +3 -1
- package/dist/cjs/src/messages/EncryptedMessage.js.map +1 -1
- package/dist/cjs/src/messages/SignedMessage.js +1 -0
- package/dist/cjs/src/messages/SignedMessage.js.map +1 -1
- package/dist/cjs/src/messages/index.js +7 -17
- package/dist/cjs/src/messages/index.js.map +1 -1
- package/dist/cjs/src/overlay-tools/LookupResolver.js +54 -35
- package/dist/cjs/src/overlay-tools/LookupResolver.js.map +1 -1
- package/dist/cjs/src/overlay-tools/OverlayAdminTokenTemplate.js +32 -20
- package/dist/cjs/src/overlay-tools/OverlayAdminTokenTemplate.js.map +1 -1
- package/dist/cjs/src/overlay-tools/SHIPBroadcaster.js +40 -28
- package/dist/cjs/src/overlay-tools/SHIPBroadcaster.js.map +1 -1
- package/dist/cjs/src/primitives/AESGCM.js +6 -5
- package/dist/cjs/src/primitives/AESGCM.js.map +1 -1
- package/dist/cjs/src/primitives/BasePoint.js +1 -1
- package/dist/cjs/src/primitives/BasePoint.js.map +1 -1
- package/dist/cjs/src/primitives/BigNumber.js +50 -62
- package/dist/cjs/src/primitives/BigNumber.js.map +1 -1
- package/dist/cjs/src/primitives/Curve.js +46 -22
- package/dist/cjs/src/primitives/Curve.js.map +1 -1
- package/dist/cjs/src/primitives/DRBG.js +2 -8
- package/dist/cjs/src/primitives/DRBG.js.map +1 -1
- package/dist/cjs/src/primitives/ECDSA.js +51 -35
- package/dist/cjs/src/primitives/ECDSA.js.map +1 -1
- package/dist/cjs/src/primitives/Hash.js +191 -216
- package/dist/cjs/src/primitives/Hash.js.map +1 -1
- package/dist/cjs/src/primitives/JacobianPoint.js +19 -5
- package/dist/cjs/src/primitives/JacobianPoint.js.map +1 -1
- package/dist/cjs/src/primitives/K256.js.map +1 -1
- package/dist/cjs/src/primitives/Mersenne.js.map +1 -1
- package/dist/cjs/src/primitives/MontgomoryMethod.js.map +1 -1
- package/dist/cjs/src/primitives/Point.js +117 -88
- package/dist/cjs/src/primitives/Point.js.map +1 -1
- package/dist/cjs/src/primitives/Polynomial.js +4 -2
- package/dist/cjs/src/primitives/Polynomial.js.map +1 -1
- package/dist/cjs/src/primitives/PrivateKey.js +32 -33
- package/dist/cjs/src/primitives/PrivateKey.js.map +1 -1
- package/dist/cjs/src/primitives/PublicKey.js.map +1 -1
- package/dist/cjs/src/primitives/Random.js +6 -5
- package/dist/cjs/src/primitives/Random.js.map +1 -1
- package/dist/cjs/src/primitives/ReductionContext.js +1 -1
- package/dist/cjs/src/primitives/ReductionContext.js.map +1 -1
- package/dist/cjs/src/primitives/Schnorr.js +21 -15
- package/dist/cjs/src/primitives/Schnorr.js.map +1 -1
- package/dist/cjs/src/primitives/Signature.js +8 -7
- package/dist/cjs/src/primitives/Signature.js.map +1 -1
- package/dist/cjs/src/primitives/SymmetricKey.js +13 -13
- package/dist/cjs/src/primitives/SymmetricKey.js.map +1 -1
- package/dist/cjs/src/primitives/TransactionSignature.js +31 -29
- package/dist/cjs/src/primitives/TransactionSignature.js.map +1 -1
- package/dist/cjs/src/primitives/index.js +7 -17
- package/dist/cjs/src/primitives/index.js.map +1 -1
- package/dist/cjs/src/primitives/utils.js +79 -68
- package/dist/cjs/src/primitives/utils.js.map +1 -1
- package/dist/cjs/src/script/OP.js +3 -3
- package/dist/cjs/src/script/OP.js.map +1 -1
- package/dist/cjs/src/script/Script.js +12 -10
- package/dist/cjs/src/script/Script.js.map +1 -1
- package/dist/cjs/src/script/Spend.js +47 -49
- package/dist/cjs/src/script/Spend.js.map +1 -1
- package/dist/cjs/src/script/templates/P2PKH.js +24 -12
- package/dist/cjs/src/script/templates/P2PKH.js.map +1 -1
- package/dist/cjs/src/script/templates/PushDrop.js +28 -23
- package/dist/cjs/src/script/templates/PushDrop.js.map +1 -1
- package/dist/cjs/src/script/templates/RPuzzle.js +10 -6
- package/dist/cjs/src/script/templates/RPuzzle.js.map +1 -1
- package/dist/cjs/src/totp/totp.js +2 -1
- package/dist/cjs/src/totp/totp.js.map +1 -1
- package/dist/cjs/src/transaction/Beef.js +177 -154
- package/dist/cjs/src/transaction/Beef.js.map +1 -1
- package/dist/cjs/src/transaction/BeefParty.js +24 -24
- package/dist/cjs/src/transaction/BeefParty.js.map +1 -1
- package/dist/cjs/src/transaction/BeefTx.js +26 -18
- package/dist/cjs/src/transaction/BeefTx.js.map +1 -1
- package/dist/cjs/src/transaction/Broadcaster.js +3 -2
- package/dist/cjs/src/transaction/Broadcaster.js.map +1 -1
- package/dist/cjs/src/transaction/MerklePath.js +64 -37
- package/dist/cjs/src/transaction/MerklePath.js.map +1 -1
- package/dist/cjs/src/transaction/Transaction.js +111 -137
- package/dist/cjs/src/transaction/Transaction.js.map +1 -1
- package/dist/cjs/src/transaction/broadcasters/ARC.js +25 -16
- package/dist/cjs/src/transaction/broadcasters/ARC.js.map +1 -1
- package/dist/cjs/src/transaction/broadcasters/DefaultBroadcaster.js +2 -1
- package/dist/cjs/src/transaction/broadcasters/DefaultBroadcaster.js.map +1 -1
- package/dist/cjs/src/transaction/broadcasters/WhatsOnChainBroadcaster.js.map +1 -1
- package/dist/cjs/src/transaction/chaintrackers/DefaultChainTracker.js +2 -1
- package/dist/cjs/src/transaction/chaintrackers/DefaultChainTracker.js.map +1 -1
- package/dist/cjs/src/transaction/chaintrackers/WhatsOnChain.js +3 -3
- package/dist/cjs/src/transaction/chaintrackers/WhatsOnChain.js.map +1 -1
- package/dist/cjs/src/transaction/fee-models/SatoshisPerKilobyte.js.map +1 -1
- package/dist/cjs/src/transaction/http/DefaultHttpClient.js +5 -3
- package/dist/cjs/src/transaction/http/DefaultHttpClient.js.map +1 -1
- package/dist/cjs/src/transaction/http/FetchHttpClient.js +5 -2
- package/dist/cjs/src/transaction/http/FetchHttpClient.js.map +1 -1
- package/dist/cjs/src/transaction/http/NodejsHttpClient.js +5 -3
- package/dist/cjs/src/transaction/http/NodejsHttpClient.js.map +1 -1
- package/dist/cjs/src/transaction/http/index.js.map +1 -1
- package/dist/cjs/src/transaction/index.js.map +1 -1
- package/dist/cjs/src/wallet/CachedKeyDeriver.js +91 -66
- package/dist/cjs/src/wallet/CachedKeyDeriver.js.map +1 -1
- package/dist/cjs/src/wallet/KeyDeriver.js +61 -52
- package/dist/cjs/src/wallet/KeyDeriver.js.map +1 -1
- package/dist/cjs/src/wallet/ProtoWallet.js +79 -29
- package/dist/cjs/src/wallet/ProtoWallet.js.map +1 -1
- package/dist/cjs/src/wallet/WalletClient.js +7 -2
- package/dist/cjs/src/wallet/WalletClient.js.map +1 -1
- package/dist/cjs/src/wallet/WalletError.js +2 -2
- package/dist/cjs/src/wallet/WalletError.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/HTTPWalletJSON.js +4 -3
- package/dist/cjs/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/HTTPWalletWire.js +2 -2
- package/dist/cjs/src/wallet/substrates/HTTPWalletWire.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js +1239 -1261
- package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js +102 -43
- package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/XDM.js +8 -3
- package/dist/cjs/src/wallet/substrates/XDM.js.map +1 -1
- package/dist/cjs/src/wallet/substrates/window.CWI.js +28 -28
- package/dist/cjs/src/wallet/substrates/window.CWI.js.map +1 -1
- package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/esm/mod.js +15 -15
- package/dist/esm/src/auth/Peer.js +75 -54
- package/dist/esm/src/auth/Peer.js.map +1 -1
- package/dist/esm/src/auth/SessionManager.js +14 -9
- package/dist/esm/src/auth/SessionManager.js.map +1 -1
- package/dist/esm/src/auth/certificates/Certificate.js +15 -11
- package/dist/esm/src/auth/certificates/Certificate.js.map +1 -1
- package/dist/esm/src/auth/certificates/MasterCertificate.js +25 -23
- package/dist/esm/src/auth/certificates/MasterCertificate.js.map +1 -1
- package/dist/esm/src/auth/certificates/VerifiableCertificate.js +2 -2
- package/dist/esm/src/auth/certificates/VerifiableCertificate.js.map +1 -1
- package/dist/esm/src/auth/certificates/__tests/CompletedProtoWallet.js +64 -47
- package/dist/esm/src/auth/certificates/__tests/CompletedProtoWallet.js.map +1 -1
- package/dist/esm/src/auth/clients/AuthFetch.js +1 -0
- package/dist/esm/src/auth/clients/AuthFetch.js.map +1 -1
- package/dist/esm/src/auth/transports/SimplifiedFetchTransport.js +69 -43
- package/dist/esm/src/auth/transports/SimplifiedFetchTransport.js.map +1 -1
- package/dist/esm/src/auth/utils/createNonce.js.map +1 -1
- package/dist/esm/src/auth/utils/getVerifiableCertificates.js +1 -1
- package/dist/esm/src/auth/utils/getVerifiableCertificates.js.map +1 -1
- package/dist/esm/src/auth/utils/validateCertificates.js +6 -3
- package/dist/esm/src/auth/utils/validateCertificates.js.map +1 -1
- package/dist/esm/src/auth/utils/verifyNonce.js.map +1 -1
- package/dist/esm/src/compat/BSM.js.map +1 -1
- package/dist/esm/src/compat/ECIES.js +165 -116
- package/dist/esm/src/compat/ECIES.js.map +1 -1
- package/dist/esm/src/compat/HD.js +56 -56
- package/dist/esm/src/compat/HD.js.map +1 -1
- package/dist/esm/src/compat/Mnemonic.js +95 -89
- package/dist/esm/src/compat/Mnemonic.js.map +1 -1
- package/dist/esm/src/compat/Utxo.js +1 -1
- package/dist/esm/src/compat/Utxo.js.map +1 -1
- package/dist/esm/src/messages/EncryptedMessage.js +3 -1
- package/dist/esm/src/messages/EncryptedMessage.js.map +1 -1
- package/dist/esm/src/messages/SignedMessage.js +1 -0
- package/dist/esm/src/messages/SignedMessage.js.map +1 -1
- package/dist/esm/src/overlay-tools/LookupResolver.js +53 -35
- package/dist/esm/src/overlay-tools/LookupResolver.js.map +1 -1
- package/dist/esm/src/overlay-tools/OverlayAdminTokenTemplate.js +32 -20
- package/dist/esm/src/overlay-tools/OverlayAdminTokenTemplate.js.map +1 -1
- package/dist/esm/src/overlay-tools/SHIPBroadcaster.js +40 -28
- package/dist/esm/src/overlay-tools/SHIPBroadcaster.js.map +1 -1
- package/dist/esm/src/primitives/AESGCM.js +1 -0
- package/dist/esm/src/primitives/AESGCM.js.map +1 -1
- package/dist/esm/src/primitives/BasePoint.js +1 -1
- package/dist/esm/src/primitives/BasePoint.js.map +1 -1
- package/dist/esm/src/primitives/BigNumber.js +50 -62
- package/dist/esm/src/primitives/BigNumber.js.map +1 -1
- package/dist/esm/src/primitives/Curve.js +45 -22
- package/dist/esm/src/primitives/Curve.js.map +1 -1
- package/dist/esm/src/primitives/DRBG.js +2 -8
- package/dist/esm/src/primitives/DRBG.js.map +1 -1
- package/dist/esm/src/primitives/ECDSA.js +50 -35
- package/dist/esm/src/primitives/ECDSA.js.map +1 -1
- package/dist/esm/src/primitives/Hash.js +188 -213
- package/dist/esm/src/primitives/Hash.js.map +1 -1
- package/dist/esm/src/primitives/JacobianPoint.js +18 -5
- package/dist/esm/src/primitives/JacobianPoint.js.map +1 -1
- package/dist/esm/src/primitives/K256.js.map +1 -1
- package/dist/esm/src/primitives/Mersenne.js.map +1 -1
- package/dist/esm/src/primitives/MontgomoryMethod.js.map +1 -1
- package/dist/esm/src/primitives/Point.js +107 -88
- package/dist/esm/src/primitives/Point.js.map +1 -1
- package/dist/esm/src/primitives/Polynomial.js +4 -2
- package/dist/esm/src/primitives/Polynomial.js.map +1 -1
- package/dist/esm/src/primitives/PrivateKey.js +25 -16
- package/dist/esm/src/primitives/PrivateKey.js.map +1 -1
- package/dist/esm/src/primitives/PublicKey.js.map +1 -1
- package/dist/esm/src/primitives/Random.js +7 -6
- package/dist/esm/src/primitives/Random.js.map +1 -1
- package/dist/esm/src/primitives/ReductionContext.js +1 -1
- package/dist/esm/src/primitives/ReductionContext.js.map +1 -1
- package/dist/esm/src/primitives/Schnorr.js +21 -15
- package/dist/esm/src/primitives/Schnorr.js.map +1 -1
- package/dist/esm/src/primitives/Signature.js +8 -7
- package/dist/esm/src/primitives/Signature.js.map +1 -1
- package/dist/esm/src/primitives/SymmetricKey.js +13 -13
- package/dist/esm/src/primitives/SymmetricKey.js.map +1 -1
- package/dist/esm/src/primitives/TransactionSignature.js +22 -12
- package/dist/esm/src/primitives/TransactionSignature.js.map +1 -1
- package/dist/esm/src/primitives/utils.js +76 -66
- package/dist/esm/src/primitives/utils.js.map +1 -1
- package/dist/esm/src/script/OP.js +3 -3
- package/dist/esm/src/script/OP.js.map +1 -1
- package/dist/esm/src/script/Script.js +12 -10
- package/dist/esm/src/script/Script.js.map +1 -1
- package/dist/esm/src/script/Spend.js +39 -32
- package/dist/esm/src/script/Spend.js.map +1 -1
- package/dist/esm/src/script/templates/P2PKH.js +26 -11
- package/dist/esm/src/script/templates/P2PKH.js.map +1 -1
- package/dist/esm/src/script/templates/PushDrop.js +29 -22
- package/dist/esm/src/script/templates/PushDrop.js.map +1 -1
- package/dist/esm/src/script/templates/RPuzzle.js +11 -6
- package/dist/esm/src/script/templates/RPuzzle.js.map +1 -1
- package/dist/esm/src/totp/totp.js +2 -1
- package/dist/esm/src/totp/totp.js.map +1 -1
- package/dist/esm/src/transaction/Beef.js +176 -154
- package/dist/esm/src/transaction/Beef.js.map +1 -1
- package/dist/esm/src/transaction/BeefParty.js +24 -24
- package/dist/esm/src/transaction/BeefParty.js.map +1 -1
- package/dist/esm/src/transaction/BeefTx.js +26 -18
- package/dist/esm/src/transaction/BeefTx.js.map +1 -1
- package/dist/esm/src/transaction/Broadcaster.js.map +1 -1
- package/dist/esm/src/transaction/MerklePath.js +61 -36
- package/dist/esm/src/transaction/MerklePath.js.map +1 -1
- package/dist/esm/src/transaction/Transaction.js +105 -138
- package/dist/esm/src/transaction/Transaction.js.map +1 -1
- package/dist/esm/src/transaction/broadcasters/ARC.js +25 -16
- package/dist/esm/src/transaction/broadcasters/ARC.js.map +1 -1
- package/dist/esm/src/transaction/broadcasters/DefaultBroadcaster.js.map +1 -1
- package/dist/esm/src/transaction/broadcasters/WhatsOnChainBroadcaster.js.map +1 -1
- package/dist/esm/src/transaction/chaintrackers/WhatsOnChain.js +3 -3
- package/dist/esm/src/transaction/chaintrackers/WhatsOnChain.js.map +1 -1
- package/dist/esm/src/transaction/fee-models/SatoshisPerKilobyte.js.map +1 -1
- package/dist/esm/src/transaction/http/DefaultHttpClient.js +3 -2
- package/dist/esm/src/transaction/http/DefaultHttpClient.js.map +1 -1
- package/dist/esm/src/transaction/http/FetchHttpClient.js +4 -2
- package/dist/esm/src/transaction/http/FetchHttpClient.js.map +1 -1
- package/dist/esm/src/transaction/http/NodejsHttpClient.js +5 -3
- package/dist/esm/src/transaction/http/NodejsHttpClient.js.map +1 -1
- package/dist/esm/src/transaction/http/index.js.map +1 -1
- package/dist/esm/src/transaction/index.js.map +1 -1
- package/dist/esm/src/wallet/CachedKeyDeriver.js +91 -66
- package/dist/esm/src/wallet/CachedKeyDeriver.js.map +1 -1
- package/dist/esm/src/wallet/KeyDeriver.js +60 -52
- package/dist/esm/src/wallet/KeyDeriver.js.map +1 -1
- package/dist/esm/src/wallet/ProtoWallet.js +75 -29
- package/dist/esm/src/wallet/ProtoWallet.js.map +1 -1
- package/dist/esm/src/wallet/WalletClient.js +7 -2
- package/dist/esm/src/wallet/WalletClient.js.map +1 -1
- package/dist/esm/src/wallet/WalletError.js +2 -2
- package/dist/esm/src/wallet/WalletError.js.map +1 -1
- package/dist/esm/src/wallet/substrates/HTTPWalletJSON.js +4 -4
- package/dist/esm/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
- package/dist/esm/src/wallet/substrates/HTTPWalletWire.js +2 -2
- package/dist/esm/src/wallet/substrates/HTTPWalletWire.js.map +1 -1
- package/dist/esm/src/wallet/substrates/WalletWireProcessor.js +1239 -1261
- package/dist/esm/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
- package/dist/esm/src/wallet/substrates/WalletWireTransceiver.js +95 -43
- package/dist/esm/src/wallet/substrates/WalletWireTransceiver.js.map +1 -1
- package/dist/esm/src/wallet/substrates/XDM.js +8 -3
- package/dist/esm/src/wallet/substrates/XDM.js.map +1 -1
- package/dist/esm/src/wallet/substrates/window.CWI.js +28 -28
- package/dist/esm/src/wallet/substrates/window.CWI.js.map +1 -1
- package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
- package/dist/types/mod.d.ts +15 -15
- package/dist/types/src/auth/Peer.d.ts +10 -10
- package/dist/types/src/auth/Peer.d.ts.map +1 -1
- package/dist/types/src/auth/SessionManager.d.ts +4 -4
- package/dist/types/src/auth/SessionManager.d.ts.map +1 -1
- package/dist/types/src/auth/certificates/Certificate.d.ts +6 -6
- package/dist/types/src/auth/certificates/Certificate.d.ts.map +1 -1
- package/dist/types/src/auth/certificates/MasterCertificate.d.ts +5 -5
- package/dist/types/src/auth/certificates/MasterCertificate.d.ts.map +1 -1
- package/dist/types/src/auth/certificates/VerifiableCertificate.d.ts.map +1 -1
- package/dist/types/src/auth/certificates/__tests/CompletedProtoWallet.d.ts +23 -22
- package/dist/types/src/auth/certificates/__tests/CompletedProtoWallet.d.ts.map +1 -1
- package/dist/types/src/auth/clients/AuthFetch.d.ts.map +1 -1
- package/dist/types/src/auth/transports/SimplifiedFetchTransport.d.ts +1 -1
- package/dist/types/src/auth/transports/SimplifiedFetchTransport.d.ts.map +1 -1
- package/dist/types/src/auth/utils/createNonce.d.ts.map +1 -1
- package/dist/types/src/auth/utils/getVerifiableCertificates.d.ts +3 -3
- package/dist/types/src/auth/utils/getVerifiableCertificates.d.ts.map +1 -1
- package/dist/types/src/auth/utils/validateCertificates.d.ts +2 -2
- package/dist/types/src/auth/utils/validateCertificates.d.ts.map +1 -1
- package/dist/types/src/auth/utils/verifyNonce.d.ts +1 -1
- package/dist/types/src/auth/utils/verifyNonce.d.ts.map +1 -1
- package/dist/types/src/compat/BSM.d.ts +1 -1
- package/dist/types/src/compat/BSM.d.ts.map +1 -1
- package/dist/types/src/compat/ECIES.d.ts +36 -36
- package/dist/types/src/compat/ECIES.d.ts.map +1 -1
- package/dist/types/src/compat/HD.d.ts +51 -51
- package/dist/types/src/compat/HD.d.ts.map +1 -1
- package/dist/types/src/compat/Mnemonic.d.ts +79 -79
- package/dist/types/src/compat/Mnemonic.d.ts.map +1 -1
- package/dist/types/src/compat/Utxo.d.ts.map +1 -1
- package/dist/types/src/messages/EncryptedMessage.d.ts.map +1 -1
- package/dist/types/src/messages/SignedMessage.d.ts.map +1 -1
- package/dist/types/src/overlay-tools/LookupResolver.d.ts +9 -9
- package/dist/types/src/overlay-tools/LookupResolver.d.ts.map +1 -1
- package/dist/types/src/overlay-tools/OverlayAdminTokenTemplate.d.ts +17 -17
- package/dist/types/src/overlay-tools/OverlayAdminTokenTemplate.d.ts.map +1 -1
- package/dist/types/src/overlay-tools/SHIPBroadcaster.d.ts +14 -14
- package/dist/types/src/overlay-tools/SHIPBroadcaster.d.ts.map +1 -1
- package/dist/types/src/primitives/AESGCM.d.ts.map +1 -1
- package/dist/types/src/primitives/BasePoint.d.ts +8 -8
- package/dist/types/src/primitives/BasePoint.d.ts.map +1 -1
- package/dist/types/src/primitives/BigNumber.d.ts.map +1 -1
- package/dist/types/src/primitives/Curve.d.ts +14 -7
- package/dist/types/src/primitives/Curve.d.ts.map +1 -1
- package/dist/types/src/primitives/DRBG.d.ts.map +1 -1
- package/dist/types/src/primitives/ECDSA.d.ts +1 -1
- package/dist/types/src/primitives/ECDSA.d.ts.map +1 -1
- package/dist/types/src/primitives/Hash.d.ts +11 -11
- package/dist/types/src/primitives/Hash.d.ts.map +1 -1
- package/dist/types/src/primitives/JacobianPoint.d.ts.map +1 -1
- package/dist/types/src/primitives/Point.d.ts +14 -10
- package/dist/types/src/primitives/Point.d.ts.map +1 -1
- package/dist/types/src/primitives/Polynomial.d.ts.map +1 -1
- package/dist/types/src/primitives/PrivateKey.d.ts +2 -2
- package/dist/types/src/primitives/PrivateKey.d.ts.map +1 -1
- package/dist/types/src/primitives/PublicKey.d.ts.map +1 -1
- package/dist/types/src/primitives/Random.d.ts.map +1 -1
- package/dist/types/src/primitives/Schnorr.d.ts +14 -14
- package/dist/types/src/primitives/Schnorr.d.ts.map +1 -1
- package/dist/types/src/primitives/Signature.d.ts +1 -1
- package/dist/types/src/primitives/Signature.d.ts.map +1 -1
- package/dist/types/src/primitives/SymmetricKey.d.ts +13 -13
- package/dist/types/src/primitives/SymmetricKey.d.ts.map +1 -1
- package/dist/types/src/primitives/TransactionSignature.d.ts +4 -4
- package/dist/types/src/primitives/TransactionSignature.d.ts.map +1 -1
- package/dist/types/src/primitives/utils.d.ts +3 -6
- package/dist/types/src/primitives/utils.d.ts.map +1 -1
- package/dist/types/src/script/Script.d.ts +3 -3
- package/dist/types/src/script/Script.d.ts.map +1 -1
- package/dist/types/src/script/ScriptTemplate.d.ts +2 -2
- package/dist/types/src/script/ScriptTemplate.d.ts.map +1 -1
- package/dist/types/src/script/Spend.d.ts.map +1 -1
- package/dist/types/src/script/templates/P2PKH.d.ts.map +1 -1
- package/dist/types/src/script/templates/PushDrop.d.ts +1 -2
- 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/totp/totp.d.ts.map +1 -1
- package/dist/types/src/transaction/Beef.d.ts +96 -96
- package/dist/types/src/transaction/Beef.d.ts.map +1 -1
- package/dist/types/src/transaction/BeefParty.d.ts +22 -22
- package/dist/types/src/transaction/BeefParty.d.ts.map +1 -1
- package/dist/types/src/transaction/BeefTx.d.ts +5 -5
- package/dist/types/src/transaction/BeefTx.d.ts.map +1 -1
- package/dist/types/src/transaction/Broadcaster.d.ts.map +1 -1
- package/dist/types/src/transaction/ChainTracker.d.ts +2 -2
- package/dist/types/src/transaction/FeeModel.d.ts.map +1 -1
- package/dist/types/src/transaction/MerklePath.d.ts.map +1 -1
- package/dist/types/src/transaction/Transaction.d.ts +4 -12
- package/dist/types/src/transaction/Transaction.d.ts.map +1 -1
- package/dist/types/src/transaction/TransactionOutput.d.ts.map +1 -1
- package/dist/types/src/transaction/broadcasters/ARC.d.ts +1 -1
- package/dist/types/src/transaction/broadcasters/ARC.d.ts.map +1 -1
- package/dist/types/src/transaction/broadcasters/DefaultBroadcaster.d.ts.map +1 -1
- package/dist/types/src/transaction/broadcasters/WhatsOnChainBroadcaster.d.ts.map +1 -1
- package/dist/types/src/transaction/chaintrackers/DefaultChainTracker.d.ts.map +1 -1
- package/dist/types/src/transaction/chaintrackers/WhatsOnChain.d.ts.map +1 -1
- package/dist/types/src/transaction/fee-models/SatoshisPerKilobyte.d.ts.map +1 -1
- package/dist/types/src/transaction/http/DefaultHttpClient.d.ts +1 -1
- package/dist/types/src/transaction/http/DefaultHttpClient.d.ts.map +1 -1
- package/dist/types/src/transaction/http/FetchHttpClient.d.ts +5 -5
- package/dist/types/src/transaction/http/FetchHttpClient.d.ts.map +1 -1
- package/dist/types/src/transaction/http/HttpClient.d.ts +4 -4
- package/dist/types/src/transaction/http/HttpClient.d.ts.map +1 -1
- package/dist/types/src/transaction/http/NodejsHttpClient.d.ts +3 -3
- package/dist/types/src/transaction/http/NodejsHttpClient.d.ts.map +1 -1
- package/dist/types/src/transaction/http/index.d.ts.map +1 -1
- package/dist/types/src/transaction/index.d.ts.map +1 -1
- package/dist/types/src/wallet/CachedKeyDeriver.d.ts +58 -58
- package/dist/types/src/wallet/CachedKeyDeriver.d.ts.map +1 -1
- package/dist/types/src/wallet/KeyDeriver.d.ts +78 -78
- package/dist/types/src/wallet/KeyDeriver.d.ts.map +1 -1
- package/dist/types/src/wallet/ProtoWallet.d.ts +10 -10
- package/dist/types/src/wallet/ProtoWallet.d.ts.map +1 -1
- package/dist/types/src/wallet/Wallet.interfaces.d.ts +151 -152
- package/dist/types/src/wallet/Wallet.interfaces.d.ts.map +1 -1
- package/dist/types/src/wallet/WalletClient.d.ts +5 -5
- package/dist/types/src/wallet/WalletClient.d.ts.map +1 -1
- package/dist/types/src/wallet/substrates/HTTPWalletJSON.d.ts +6 -6
- package/dist/types/src/wallet/substrates/HTTPWalletJSON.d.ts.map +1 -1
- package/dist/types/src/wallet/substrates/HTTPWalletWire.d.ts.map +1 -1
- package/dist/types/src/wallet/substrates/WalletWireProcessor.d.ts.map +1 -1
- package/dist/types/src/wallet/substrates/WalletWireTransceiver.d.ts.map +1 -1
- package/dist/types/src/wallet/substrates/XDM.d.ts +1 -1
- package/dist/types/src/wallet/substrates/XDM.d.ts.map +1 -1
- package/dist/types/src/wallet/substrates/window.CWI.d.ts +6 -6
- 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 +1 -1
- package/docs/auth.md +92 -82
- package/docs/compat.md +24 -24
- package/docs/messages.md +7 -5
- package/docs/overlay-tools.md +21 -21
- package/docs/primitives.md +336 -315
- package/docs/script.md +35 -35
- package/docs/swagger/dist/swagger-initializer.js +7 -7
- package/docs/swagger/dist/swagger-ui-bundle.js +1 -1
- package/docs/swagger/dist/swagger-ui-es-bundle-core.js +2 -2
- package/docs/swagger/dist/swagger-ui-es-bundle.js +1 -1
- package/docs/swagger/dist/swagger-ui-standalone-preset.js +1 -1
- package/docs/swagger/dist/swagger-ui.js +2 -2
- package/docs/totp.md +5 -5
- package/docs/transaction.md +103 -105
- package/docs/wallet-substrates.md +17 -17
- package/docs/wallet.md +202 -204
- package/mod.ts +15 -15
- package/package.json +15 -3
- package/src/auth/Peer.ts +271 -121
- package/src/auth/SessionManager.ts +17 -10
- package/src/auth/__tests/Peer.test.ts +361 -179
- package/src/auth/__tests/SessionManager.test.ts +67 -19
- package/src/auth/__tests/build.test.ts +11 -0
- package/src/auth/certificates/Certificate.ts +27 -14
- package/src/auth/certificates/MasterCertificate.ts +106 -62
- package/src/auth/certificates/VerifiableCertificate.ts +30 -8
- package/src/auth/certificates/__tests/Certificate.test.ts +32 -17
- package/src/auth/certificates/__tests/CompletedProtoWallet.ts +171 -68
- package/src/auth/certificates/__tests/MasterCertificate.test.ts +63 -47
- package/src/auth/certificates/__tests/VerifiableCertificate.test.ts +42 -31
- package/src/auth/certificates/index.ts +1 -1
- package/src/auth/clients/AuthFetch.ts +1 -0
- package/src/auth/clients/index.ts +1 -1
- package/src/auth/transports/SimplifiedFetchTransport.ts +145 -72
- package/src/auth/transports/index.ts +1 -1
- package/src/auth/utils/__tests/cryptononce.test.ts +52 -23
- package/src/auth/utils/__tests/getVerifiableCertificates.test.ts +56 -30
- package/src/auth/utils/__tests/validateCertificates.test.ts +53 -31
- package/src/auth/utils/createNonce.ts +11 -3
- package/src/auth/utils/getVerifiableCertificates.ts +12 -7
- package/src/auth/utils/validateCertificates.ts +57 -39
- package/src/auth/utils/verifyNonce.ts +6 -2
- package/src/compat/BSM.ts +10 -2
- package/src/compat/ECIES.ts +265 -141
- package/src/compat/HD.ts +81 -63
- package/src/compat/Mnemonic.ts +104 -91
- package/src/compat/Utxo.ts +8 -5
- package/src/compat/__tests/BSM.test.ts +42 -16
- package/src/compat/__tests/ECIES.test.ts +117 -52
- package/src/compat/__tests/HD.test.ts +55 -42
- package/src/compat/__tests/Mnemonic.test.ts +11 -12
- package/src/compat/__tests/Mnemonic.vectors.ts +110 -55
- package/src/messages/EncryptedMessage.ts +6 -2
- package/src/messages/SignedMessage.ts +14 -8
- package/src/messages/__tests/EncryptedMessage.test.ts +23 -24
- package/src/messages/__tests/SignedMessage.test.ts +17 -11
- package/src/overlay-tools/LookupResolver.ts +108 -56
- package/src/overlay-tools/OverlayAdminTokenTemplate.ts +52 -23
- package/src/overlay-tools/SHIPBroadcaster.ts +135 -59
- package/src/overlay-tools/__tests/LookupResolver.test.ts +723 -323
- package/src/overlay-tools/__tests/OverlayAdminTokenTemplate.test.ts +50 -22
- package/src/overlay-tools/__tests/SHIPBroadcaster.test.ts +607 -290
- package/src/primitives/AESGCM.ts +2 -0
- package/src/primitives/BasePoint.ts +4 -4
- package/src/primitives/BigNumber.ts +99 -90
- package/src/primitives/Curve.ts +117 -46
- package/src/primitives/DRBG.ts +9 -11
- package/src/primitives/ECDSA.ts +109 -63
- package/src/primitives/Hash.ts +492 -321
- package/src/primitives/JacobianPoint.ts +67 -19
- package/src/primitives/Point.ts +254 -152
- package/src/primitives/Polynomial.ts +8 -3
- package/src/primitives/PrivateKey.ts +41 -17
- package/src/primitives/PublicKey.ts +13 -3
- package/src/primitives/Random.ts +14 -8
- package/src/primitives/ReductionContext.ts +1 -1
- package/src/primitives/Schnorr.ts +40 -18
- package/src/primitives/Signature.ts +26 -16
- package/src/primitives/SymmetricKey.ts +14 -14
- package/src/primitives/TransactionSignature.ts +41 -17
- package/src/primitives/__tests/AESGCM.test.ts +457 -151
- package/src/primitives/__tests/BRC42.private.vectors.ts +30 -15
- package/src/primitives/__tests/BRC42.public.vectors.ts +30 -15
- package/src/primitives/__tests/BigNumber.arithmatic.test.ts +344 -125
- package/src/primitives/__tests/BigNumber.binary.test.ts +148 -67
- package/src/primitives/__tests/BigNumber.constructor.test.ts +65 -25
- package/src/primitives/__tests/BigNumber.dhGroup.test.ts +15 -11
- package/src/primitives/__tests/BigNumber.fixtures.ts +16 -8
- package/src/primitives/__tests/BigNumber.serializers.test.ts +41 -15
- package/src/primitives/__tests/BigNumber.utils.test.ts +132 -42
- package/src/primitives/__tests/Curve.unit.test.ts +75 -53
- package/src/primitives/__tests/DRBG.test.ts +1 -1
- package/src/primitives/__tests/DRBG.vectors.ts +45 -75
- package/src/primitives/__tests/ECDH.test.ts +15 -8
- package/src/primitives/__tests/ECDSA.test.ts +12 -6
- package/src/primitives/__tests/HMAC.test.ts +24 -18
- package/src/primitives/__tests/Hash.test.ts +57 -46
- package/src/primitives/__tests/PBKDF2.vectors.ts +130 -117
- package/src/primitives/__tests/PrivateKey.split.test.ts +33 -11
- package/src/primitives/__tests/PrivateKey.test.ts +11 -10
- package/src/primitives/__tests/PublicKey.test.ts +64 -53
- package/src/primitives/__tests/Random.test.ts +1 -1
- package/src/primitives/__tests/Reader.test.ts +240 -219
- package/src/primitives/__tests/ReductionContext.test.ts +98 -61
- package/src/primitives/__tests/Schnorr.test.ts +249 -237
- package/src/primitives/__tests/SymmetricKey.test.ts +18 -15
- package/src/primitives/__tests/SymmetricKey.vectors.ts +16 -8
- package/src/primitives/__tests/Writer.test.ts +23 -13
- package/src/primitives/__tests/bug-31.test.ts +6 -10
- package/src/primitives/__tests/utils.test.ts +70 -19
- package/src/primitives/utils.ts +103 -79
- package/src/script/Script.ts +18 -12
- package/src/script/ScriptTemplate.ts +3 -5
- package/src/script/Spend.ts +306 -108
- package/src/script/__tests/Script.test.ts +73 -55
- package/src/script/__tests/Spend.test.ts +208 -83
- package/src/script/__tests/SpendComplex.test.ts +19 -13
- package/src/script/__tests/script.invalid.vectors.ts +428 -1796
- package/src/script/__tests/script.valid.vectors.ts +728 -2764
- package/src/script/templates/P2PKH.ts +34 -12
- package/src/script/templates/PushDrop.ts +65 -31
- package/src/script/templates/RPuzzle.ts +29 -8
- package/src/script/templates/__tests/PushDrop.test.ts +146 -41
- package/src/totp/__tests/totp.test.ts +45 -44
- package/src/totp/totp.ts +3 -2
- package/src/transaction/Beef.ts +269 -174
- package/src/transaction/BeefParty.ts +41 -31
- package/src/transaction/BeefTx.ts +36 -26
- package/src/transaction/Broadcaster.ts +10 -6
- package/src/transaction/ChainTracker.ts +2 -2
- package/src/transaction/FeeModel.ts +0 -1
- package/src/transaction/MerklePath.ts +124 -59
- package/src/transaction/Transaction.ts +188 -187
- package/src/transaction/TransactionOutput.ts +0 -1
- package/src/transaction/__tests/Beef.test.ts +390 -287
- package/src/transaction/__tests/MerklePath.test.ts +59 -26
- package/src/transaction/__tests/Transaction.benchmarks.test.ts +231 -201
- package/src/transaction/__tests/Transaction.test.ts +758 -482
- package/src/transaction/__tests/bigtx.vectors.ts +2 -1
- package/src/transaction/__tests/bump.invalid.vectors.ts +24 -6
- package/src/transaction/__tests/bump.valid.vectors.ts +6 -2
- package/src/transaction/__tests/tx.invalid.vectors.ts +881 -185
- package/src/transaction/__tests/tx.valid.vectors.ts +1210 -257
- package/src/transaction/broadcasters/ARC.ts +69 -38
- package/src/transaction/broadcasters/DefaultBroadcaster.ts +9 -3
- package/src/transaction/broadcasters/WhatsOnChainBroadcaster.ts +20 -7
- package/src/transaction/broadcasters/__tests/ARC.test.ts +127 -59
- package/src/transaction/broadcasters/__tests/WhatsOnChainBroadcaster.test.ts +27 -18
- package/src/transaction/chaintrackers/DefaultChainTracker.ts +1 -1
- package/src/transaction/chaintrackers/WhatsOnChain.ts +27 -11
- package/src/transaction/chaintrackers/__tests/WhatsOnChainChainTracker.test.ts +59 -23
- package/src/transaction/fee-models/SatoshisPerKilobyte.ts +9 -5
- package/src/transaction/http/DefaultHttpClient.ts +5 -4
- package/src/transaction/http/FetchHttpClient.ts +18 -9
- package/src/transaction/http/HttpClient.ts +27 -22
- package/src/transaction/http/NodejsHttpClient.ts +23 -9
- package/src/transaction/http/index.ts +5 -1
- package/src/transaction/index.ts +5 -1
- package/src/wallet/CachedKeyDeriver.ts +151 -82
- package/src/wallet/KeyDeriver.ts +186 -105
- package/src/wallet/ProtoWallet.ts +121 -52
- package/src/wallet/Wallet.interfaces.ts +167 -156
- package/src/wallet/WalletClient.ts +314 -59
- package/src/wallet/WalletError.ts +2 -2
- package/src/wallet/__tests/CachedKeyDeriver.test.ts +86 -27
- package/src/wallet/__tests/KeyDeriver.test.ts +136 -33
- package/src/wallet/__tests/ProtoWallet.test.ts +190 -102
- package/src/wallet/substrates/HTTPWalletJSON.ts +250 -67
- package/src/wallet/substrates/HTTPWalletWire.ts +7 -3
- package/src/wallet/substrates/WalletWireCalls.ts +2 -2
- package/src/wallet/substrates/WalletWireProcessor.ts +1412 -1277
- package/src/wallet/substrates/WalletWireTransceiver.ts +713 -138
- package/src/wallet/substrates/XDM.ts +425 -36
- package/src/wallet/substrates/__tests/WalletWire.integration.test.ts +488 -225
- package/src/wallet/substrates/__tests/XDM.test.ts +232 -234
- package/src/wallet/substrates/window.CWI.ts +520 -61
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
BroadcastResponse,
|
|
3
|
+
BroadcastFailure,
|
|
4
|
+
Broadcaster
|
|
5
|
+
} from '../Broadcaster.js'
|
|
2
6
|
import Transaction from '../Transaction.js'
|
|
3
7
|
import { HttpClient, HttpClientRequestOptions } from '../http/HttpClient.js'
|
|
4
8
|
import { defaultHttpClient } from '../http/DefaultHttpClient.js'
|
|
@@ -21,7 +25,7 @@ export interface ArcConfig {
|
|
|
21
25
|
headers?: Record<string, string>
|
|
22
26
|
}
|
|
23
27
|
|
|
24
|
-
function defaultDeploymentId() {
|
|
28
|
+
function defaultDeploymentId(): string {
|
|
25
29
|
return `ts-sdk-${toHex(Random(16))}`
|
|
26
30
|
}
|
|
27
31
|
|
|
@@ -61,7 +65,15 @@ export default class ARC implements Broadcaster {
|
|
|
61
65
|
this.callbackToken = undefined
|
|
62
66
|
this.callbackUrl = undefined
|
|
63
67
|
} else {
|
|
64
|
-
const
|
|
68
|
+
const configObj: ArcConfig = config ?? {}
|
|
69
|
+
const {
|
|
70
|
+
apiKey,
|
|
71
|
+
deploymentId,
|
|
72
|
+
httpClient,
|
|
73
|
+
callbackToken,
|
|
74
|
+
callbackUrl,
|
|
75
|
+
headers
|
|
76
|
+
} = configObj
|
|
65
77
|
this.apiKey = apiKey
|
|
66
78
|
this.httpClient = httpClient ?? defaultHttpClient()
|
|
67
79
|
this.deploymentId = deploymentId ?? defaultDeploymentId()
|
|
@@ -74,25 +86,25 @@ export default class ARC implements Broadcaster {
|
|
|
74
86
|
/**
|
|
75
87
|
* Constructs a dictionary of the default & supplied request headers.
|
|
76
88
|
*/
|
|
77
|
-
private requestHeaders() {
|
|
89
|
+
private requestHeaders(): Record<string, string> {
|
|
78
90
|
const headers: Record<string, string> = {
|
|
79
91
|
'Content-Type': 'application/json',
|
|
80
92
|
'XDeployment-ID': this.deploymentId
|
|
81
93
|
}
|
|
82
94
|
|
|
83
|
-
if (this.apiKey) {
|
|
95
|
+
if (this.apiKey != null && this.apiKey !== '') {
|
|
84
96
|
headers.Authorization = `Bearer ${this.apiKey}`
|
|
85
97
|
}
|
|
86
98
|
|
|
87
|
-
if (this.callbackUrl) {
|
|
99
|
+
if (this.callbackUrl != null && this.callbackUrl !== '') {
|
|
88
100
|
headers['X-CallbackUrl'] = this.callbackUrl
|
|
89
101
|
}
|
|
90
102
|
|
|
91
|
-
if (this.callbackToken) {
|
|
103
|
+
if (this.callbackToken != null && this.callbackToken !== '') {
|
|
92
104
|
headers['X-CallbackToken'] = this.callbackToken
|
|
93
105
|
}
|
|
94
106
|
|
|
95
|
-
if (this.headers) {
|
|
107
|
+
if (this.headers != null) {
|
|
96
108
|
for (const key in this.headers) {
|
|
97
109
|
headers[key] = this.headers[key]
|
|
98
110
|
}
|
|
@@ -107,12 +119,17 @@ export default class ARC implements Broadcaster {
|
|
|
107
119
|
* @param {Transaction} tx - The transaction to be broadcasted.
|
|
108
120
|
* @returns {Promise<BroadcastResponse | BroadcastFailure>} A promise that resolves to either a success or failure response.
|
|
109
121
|
*/
|
|
110
|
-
async broadcast(
|
|
122
|
+
async broadcast(
|
|
123
|
+
tx: Transaction
|
|
124
|
+
): Promise<BroadcastResponse | BroadcastFailure> {
|
|
111
125
|
let rawTx
|
|
112
126
|
try {
|
|
113
127
|
rawTx = tx.toHexEF()
|
|
114
128
|
} catch (error) {
|
|
115
|
-
if (
|
|
129
|
+
if (
|
|
130
|
+
error.message ===
|
|
131
|
+
'All inputs must have source transactions when serializing to EF format'
|
|
132
|
+
) {
|
|
116
133
|
rawTx = tx.toHex()
|
|
117
134
|
} else {
|
|
118
135
|
throw error
|
|
@@ -126,15 +143,18 @@ export default class ARC implements Broadcaster {
|
|
|
126
143
|
}
|
|
127
144
|
|
|
128
145
|
try {
|
|
129
|
-
const response = await this.httpClient.request<ArcResponse>(
|
|
146
|
+
const response = await this.httpClient.request<ArcResponse>(
|
|
147
|
+
`${this.URL}/v1/tx`,
|
|
148
|
+
requestOptions
|
|
149
|
+
)
|
|
130
150
|
if (response.ok) {
|
|
131
151
|
const { txid, extraInfo, txStatus, competingTxs } = response.data
|
|
132
|
-
|
|
152
|
+
const broadcastRes: BroadcastResponse = {
|
|
133
153
|
status: 'success',
|
|
134
154
|
txid,
|
|
135
155
|
message: `${txStatus} ${extraInfo}`
|
|
136
156
|
}
|
|
137
|
-
if (competingTxs) {
|
|
157
|
+
if (competingTxs != null) {
|
|
138
158
|
broadcastRes.competingTxs = competingTxs
|
|
139
159
|
}
|
|
140
160
|
return broadcastRes
|
|
@@ -142,22 +162,29 @@ export default class ARC implements Broadcaster {
|
|
|
142
162
|
const st = typeof response.status
|
|
143
163
|
const r: BroadcastFailure = {
|
|
144
164
|
status: 'error',
|
|
145
|
-
code:
|
|
165
|
+
code:
|
|
166
|
+
st === 'number' || st === 'string'
|
|
167
|
+
? response.status.toString()
|
|
168
|
+
: 'ERR_UNKNOWN',
|
|
146
169
|
description: 'Unknown error'
|
|
147
170
|
}
|
|
148
171
|
let d = response.data
|
|
149
172
|
if (typeof d === 'string') {
|
|
150
173
|
try {
|
|
151
|
-
d = JSON.parse(response.data)
|
|
152
|
-
} catch {
|
|
174
|
+
d = JSON.parse(response.data as string)
|
|
175
|
+
} catch {
|
|
176
|
+
// Intentionally left empty
|
|
177
|
+
}
|
|
153
178
|
}
|
|
154
179
|
if (typeof d === 'object') {
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
180
|
+
if (d !== null) {
|
|
181
|
+
r.more = d
|
|
182
|
+
}
|
|
183
|
+
if ((d != null) && typeof (d as { txid: string }).txid === 'string') {
|
|
184
|
+
r.txid = (d as { txid: string }).txid
|
|
158
185
|
}
|
|
159
|
-
if (typeof d.detail === 'string') {
|
|
160
|
-
r.description = d.detail
|
|
186
|
+
if ((d != null) && 'detail' in d && typeof (d as { detail: string }).detail === 'string') {
|
|
187
|
+
r.description = (d as { detail: string }).detail
|
|
161
188
|
}
|
|
162
189
|
}
|
|
163
190
|
return r
|
|
@@ -166,9 +193,10 @@ export default class ARC implements Broadcaster {
|
|
|
166
193
|
return {
|
|
167
194
|
status: 'error',
|
|
168
195
|
code: '500',
|
|
169
|
-
description:
|
|
170
|
-
|
|
171
|
-
|
|
196
|
+
description:
|
|
197
|
+
typeof error.message === 'string'
|
|
198
|
+
? error.message
|
|
199
|
+
: 'Internal Server Error'
|
|
172
200
|
}
|
|
173
201
|
}
|
|
174
202
|
}
|
|
@@ -180,38 +208,41 @@ export default class ARC implements Broadcaster {
|
|
|
180
208
|
* @param {Transaction[]} txs - Array of transactions to be broadcasted.
|
|
181
209
|
* @returns {Promise<Array<object>>} A promise that resolves to an array of objects.
|
|
182
210
|
*/
|
|
183
|
-
async broadcastMany(txs: Transaction[]): Promise<
|
|
184
|
-
const rawTxs = txs.map(tx => {
|
|
211
|
+
async broadcastMany(txs: Transaction[]): Promise<object[]> {
|
|
212
|
+
const rawTxs = txs.map((tx) => {
|
|
185
213
|
try {
|
|
186
|
-
return { rawTx: tx.toHexEF() }
|
|
214
|
+
return { rawTx: tx.toHexEF() }
|
|
187
215
|
} catch (error) {
|
|
188
|
-
if (
|
|
189
|
-
|
|
216
|
+
if (
|
|
217
|
+
error.message ===
|
|
218
|
+
'All inputs must have source transactions when serializing to EF format'
|
|
219
|
+
) {
|
|
220
|
+
return { rawTx: tx.toHex() }
|
|
190
221
|
}
|
|
191
|
-
throw error
|
|
222
|
+
throw error
|
|
192
223
|
}
|
|
193
|
-
})
|
|
224
|
+
})
|
|
194
225
|
|
|
195
226
|
const requestOptions: HttpClientRequestOptions = {
|
|
196
227
|
method: 'POST',
|
|
197
228
|
headers: this.requestHeaders(),
|
|
198
229
|
data: rawTxs
|
|
199
|
-
}
|
|
230
|
+
}
|
|
200
231
|
|
|
201
232
|
try {
|
|
202
|
-
const response = await this.httpClient.request<
|
|
233
|
+
const response = await this.httpClient.request<object[]>(
|
|
203
234
|
`${this.URL}/v1/txs`,
|
|
204
235
|
requestOptions
|
|
205
|
-
)
|
|
236
|
+
)
|
|
206
237
|
|
|
207
|
-
return response.data
|
|
238
|
+
return response.data as object[]
|
|
208
239
|
} catch (error) {
|
|
209
240
|
const errorResponse: BroadcastFailure = {
|
|
210
241
|
status: 'error',
|
|
211
242
|
code: '500',
|
|
212
|
-
description: error.message
|
|
213
|
-
}
|
|
214
|
-
return txs.map(() => errorResponse)
|
|
243
|
+
description: typeof error.message === 'string' ? error.message : 'Internal Server Error'
|
|
244
|
+
}
|
|
245
|
+
return txs.map(() => errorResponse)
|
|
215
246
|
}
|
|
216
247
|
}
|
|
217
248
|
}
|
|
@@ -1,6 +1,12 @@
|
|
|
1
1
|
import { Broadcaster } from '../Broadcaster.js'
|
|
2
2
|
import ARC, { ArcConfig } from './ARC.js'
|
|
3
3
|
|
|
4
|
-
export function defaultBroadcaster
|
|
5
|
-
|
|
6
|
-
}
|
|
4
|
+
export function defaultBroadcaster(
|
|
5
|
+
isTestnet: boolean = false,
|
|
6
|
+
config: ArcConfig = {}
|
|
7
|
+
): Broadcaster {
|
|
8
|
+
return new ARC(
|
|
9
|
+
isTestnet ? 'https://arc-test.taal.com' : 'https://arc.taal.com',
|
|
10
|
+
config
|
|
11
|
+
)
|
|
12
|
+
}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
BroadcastResponse,
|
|
3
|
+
BroadcastFailure,
|
|
4
|
+
Broadcaster
|
|
5
|
+
} from '../Broadcaster.js'
|
|
2
6
|
import Transaction from '../Transaction.js'
|
|
3
7
|
import { HttpClient } from '../http/HttpClient.js'
|
|
4
8
|
import { defaultHttpClient } from '../http/DefaultHttpClient.js'
|
|
@@ -17,7 +21,10 @@ export default class WhatsOnChainBroadcaster implements Broadcaster {
|
|
|
17
21
|
* @param {'main' | 'test' | 'stn'} network - The BSV network to use when calling the WhatsOnChain API.
|
|
18
22
|
* @param {HttpClient} httpClient - The HTTP client used to make requests to the API.
|
|
19
23
|
*/
|
|
20
|
-
constructor
|
|
24
|
+
constructor(
|
|
25
|
+
network: 'main' | 'test' | 'stn' = 'main',
|
|
26
|
+
httpClient: HttpClient = defaultHttpClient()
|
|
27
|
+
) {
|
|
21
28
|
this.network = network
|
|
22
29
|
this.URL = `https://api.whatsonchain.com/v1/bsv/${network}/tx/raw`
|
|
23
30
|
this.httpClient = httpClient
|
|
@@ -29,7 +36,9 @@ export default class WhatsOnChainBroadcaster implements Broadcaster {
|
|
|
29
36
|
* @param {Transaction} tx - The transaction to be broadcasted.
|
|
30
37
|
* @returns {Promise<BroadcastResponse | BroadcastFailure>} A promise that resolves to either a success or failure response.
|
|
31
38
|
*/
|
|
32
|
-
async broadcast
|
|
39
|
+
async broadcast(
|
|
40
|
+
tx: Transaction
|
|
41
|
+
): Promise<BroadcastResponse | BroadcastFailure> {
|
|
33
42
|
const rawTx = tx.toHex()
|
|
34
43
|
|
|
35
44
|
const requestOptions = {
|
|
@@ -42,7 +51,10 @@ export default class WhatsOnChainBroadcaster implements Broadcaster {
|
|
|
42
51
|
}
|
|
43
52
|
|
|
44
53
|
try {
|
|
45
|
-
const response = await this.httpClient.request<string>(
|
|
54
|
+
const response = await this.httpClient.request<string>(
|
|
55
|
+
this.URL,
|
|
56
|
+
requestOptions
|
|
57
|
+
)
|
|
46
58
|
if (response.ok) {
|
|
47
59
|
const txid = response.data
|
|
48
60
|
return {
|
|
@@ -61,9 +73,10 @@ export default class WhatsOnChainBroadcaster implements Broadcaster {
|
|
|
61
73
|
return {
|
|
62
74
|
status: 'error',
|
|
63
75
|
code: '500',
|
|
64
|
-
description:
|
|
65
|
-
|
|
66
|
-
|
|
76
|
+
description:
|
|
77
|
+
typeof error.message === 'string'
|
|
78
|
+
? error.message
|
|
79
|
+
: 'Internal Server Error'
|
|
67
80
|
}
|
|
68
81
|
}
|
|
69
82
|
}
|
|
@@ -1,18 +1,22 @@
|
|
|
1
|
-
import ARC from '
|
|
2
|
-
import Transaction from '
|
|
3
|
-
import {NodejsHttpClient} from
|
|
4
|
-
import {FetchHttpClient} from
|
|
5
|
-
import {HttpClientRequestOptions} from
|
|
1
|
+
import ARC from '../../../transaction/broadcasters/ARC'
|
|
2
|
+
import Transaction from '../../../transaction/Transaction'
|
|
3
|
+
import { NodejsHttpClient } from '../../../transaction/http/NodejsHttpClient'
|
|
4
|
+
import { FetchHttpClient } from '../../../transaction/http/FetchHttpClient'
|
|
5
|
+
import { HttpClientRequestOptions } from '../../http'
|
|
6
|
+
import { RequestOptions } from 'https'
|
|
6
7
|
|
|
7
8
|
// Mock Transaction
|
|
8
|
-
jest.mock('
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
return
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
9
|
+
jest.mock('../../../transaction/Transaction', () => {
|
|
10
|
+
class MockTransaction {
|
|
11
|
+
toHex (): string {
|
|
12
|
+
return 'mocked_transaction_hex'
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
toHexEF (): string {
|
|
16
|
+
return 'mocked_transaction_hexEF'
|
|
17
|
+
}
|
|
15
18
|
}
|
|
19
|
+
return { __esModule: true, default: MockTransaction }
|
|
16
20
|
})
|
|
17
21
|
|
|
18
22
|
describe('ARC Broadcaster', () => {
|
|
@@ -35,7 +39,7 @@ describe('ARC Broadcaster', () => {
|
|
|
35
39
|
it('should broadcast successfully using window.fetch', async () => {
|
|
36
40
|
// Mocking window.fetch
|
|
37
41
|
const mockFetch = mockedFetch(successResponse)
|
|
38
|
-
global.window = {fetch: mockFetch} as
|
|
42
|
+
global.window = { fetch: mockFetch } as unknown as Window & typeof globalThis
|
|
39
43
|
|
|
40
44
|
const broadcaster = new ARC(URL)
|
|
41
45
|
const response = await broadcaster.broadcast(transaction)
|
|
@@ -51,7 +55,9 @@ describe('ARC Broadcaster', () => {
|
|
|
51
55
|
it('should broadcast successfully using Node.js https', async () => {
|
|
52
56
|
// Mocking Node.js https module
|
|
53
57
|
mockedHttps(successResponse)
|
|
54
|
-
|
|
58
|
+
if ('window' in globalThis) {
|
|
59
|
+
delete (globalThis as { window?: unknown }).window // ✅ Explicit property check
|
|
60
|
+
}
|
|
55
61
|
|
|
56
62
|
const broadcaster = new ARC(URL)
|
|
57
63
|
const response = await broadcaster.broadcast(transaction)
|
|
@@ -64,10 +70,11 @@ describe('ARC Broadcaster', () => {
|
|
|
64
70
|
})
|
|
65
71
|
|
|
66
72
|
it('should broadcast successfully using provided fetch', async () => {
|
|
67
|
-
|
|
68
73
|
const mockFetch = mockedFetch(successResponse)
|
|
69
74
|
|
|
70
|
-
const broadcaster = new ARC(URL, {
|
|
75
|
+
const broadcaster = new ARC(URL, {
|
|
76
|
+
httpClient: new FetchHttpClient(mockFetch)
|
|
77
|
+
})
|
|
71
78
|
const response = await broadcaster.broadcast(transaction)
|
|
72
79
|
|
|
73
80
|
expect(mockFetch).toHaveBeenCalled()
|
|
@@ -79,9 +86,10 @@ describe('ARC Broadcaster', () => {
|
|
|
79
86
|
})
|
|
80
87
|
|
|
81
88
|
it('should broadcast successfully using provided https', async () => {
|
|
82
|
-
|
|
83
89
|
const mockHttps = mockedHttps(successResponse)
|
|
84
|
-
const broadcaster = new ARC(URL, {
|
|
90
|
+
const broadcaster = new ARC(URL, {
|
|
91
|
+
httpClient: new NodejsHttpClient(mockHttps)
|
|
92
|
+
})
|
|
85
93
|
|
|
86
94
|
const response = await broadcaster.broadcast(transaction)
|
|
87
95
|
|
|
@@ -95,63 +103,79 @@ describe('ARC Broadcaster', () => {
|
|
|
95
103
|
it('should send default request headers when broadcasting', async () => {
|
|
96
104
|
const mockFetch = mockedFetch(successResponse)
|
|
97
105
|
|
|
98
|
-
const broadcaster = new ARC(URL, {
|
|
106
|
+
const broadcaster = new ARC(URL, {
|
|
107
|
+
httpClient: new FetchHttpClient(mockFetch)
|
|
108
|
+
})
|
|
99
109
|
await broadcaster.broadcast(transaction)
|
|
100
110
|
|
|
101
|
-
|
|
111
|
+
// Ensure headers exist and cast to the correct type
|
|
112
|
+
const requestOptions = mockFetch.mock.calls[0][1] as HttpClientRequestOptions
|
|
113
|
+
const headers = (requestOptions?.headers ?? {}) // ✅ Proper typing
|
|
102
114
|
|
|
103
115
|
expect(headers['Content-Type']).toEqual('application/json')
|
|
104
116
|
expect(headers['XDeployment-ID']).toBeDefined()
|
|
105
117
|
expect(headers['XDeployment-ID']).toMatch(/ts-sdk-.*/)
|
|
106
|
-
expect(headers
|
|
118
|
+
expect(headers.Authorization).toBeUndefined()
|
|
107
119
|
})
|
|
108
120
|
|
|
109
121
|
it('should send authorization header when api key is provided', async () => {
|
|
110
122
|
const mockFetch = mockedFetch(successResponse)
|
|
111
123
|
const apiKey = 'mainnet_1234567890'
|
|
112
124
|
|
|
113
|
-
const broadcaster = new ARC(URL, {
|
|
125
|
+
const broadcaster = new ARC(URL, {
|
|
126
|
+
apiKey,
|
|
127
|
+
httpClient: new FetchHttpClient(mockFetch)
|
|
128
|
+
})
|
|
114
129
|
await broadcaster.broadcast(transaction)
|
|
115
130
|
|
|
116
|
-
|
|
131
|
+
// Extract and properly type headers
|
|
132
|
+
const requestOptions = mockFetch.mock.calls[0][1] as HttpClientRequestOptions
|
|
133
|
+
const headers = (requestOptions?.headers ?? {}) // ✅ Correct typing
|
|
117
134
|
|
|
118
135
|
expect(headers['XDeployment-ID']).toBeDefined()
|
|
119
136
|
expect(headers['XDeployment-ID']).toMatch(/ts-sdk-.*/)
|
|
120
|
-
expect(headers
|
|
137
|
+
expect(headers.Authorization).toEqual(`Bearer ${apiKey}`) // ✅ Now properly typed
|
|
121
138
|
})
|
|
122
139
|
|
|
123
140
|
it('should handle api key as second argument', async () => {
|
|
124
141
|
const mockFetch = mockedFetch(successResponse)
|
|
125
|
-
global.window = {fetch: mockFetch} as
|
|
142
|
+
global.window = { fetch: mockFetch } as unknown as Window & typeof globalThis
|
|
126
143
|
|
|
127
144
|
const apiKey = 'mainnet_1234567890'
|
|
128
145
|
|
|
129
146
|
const broadcaster = new ARC(URL, apiKey)
|
|
130
147
|
await broadcaster.broadcast(transaction)
|
|
131
148
|
|
|
132
|
-
|
|
149
|
+
// Ensure headers is always defined
|
|
150
|
+
const headers = (mockFetch.mock.calls[0][1] as HttpClientRequestOptions)?.headers ?? {}
|
|
133
151
|
|
|
134
|
-
expect(headers
|
|
152
|
+
expect(headers.Authorization).toEqual(`Bearer ${apiKey}`)
|
|
135
153
|
})
|
|
136
154
|
|
|
137
|
-
|
|
138
155
|
it('should send provided deployment id', async () => {
|
|
139
156
|
const mockFetch = mockedFetch(successResponse)
|
|
140
157
|
const deploymentId = 'custom_deployment_id'
|
|
141
158
|
|
|
142
|
-
const broadcaster = new ARC(URL, {
|
|
159
|
+
const broadcaster = new ARC(URL, {
|
|
160
|
+
deploymentId,
|
|
161
|
+
httpClient: new FetchHttpClient(mockFetch)
|
|
162
|
+
})
|
|
143
163
|
await broadcaster.broadcast(transaction)
|
|
144
164
|
|
|
145
|
-
|
|
165
|
+
// Ensure headers is always defined
|
|
166
|
+
const headers =
|
|
167
|
+
(mockFetch.mock.calls[0]?.[1]?.headers) ?? {}
|
|
146
168
|
|
|
147
169
|
expect(headers['XDeployment-ID']).toEqual(deploymentId)
|
|
148
170
|
})
|
|
149
171
|
|
|
150
172
|
it('should handle network errors', async () => {
|
|
151
173
|
const mockFetch = jest.fn().mockRejectedValue(new Error('Network error'))
|
|
152
|
-
global.window = {fetch: mockFetch} as
|
|
174
|
+
global.window = { fetch: mockFetch } as unknown as Window & typeof globalThis
|
|
153
175
|
|
|
154
|
-
const broadcaster = new ARC(URL, {
|
|
176
|
+
const broadcaster = new ARC(URL, {
|
|
177
|
+
httpClient: new FetchHttpClient(mockFetch)
|
|
178
|
+
})
|
|
155
179
|
const response = await broadcaster.broadcast(transaction)
|
|
156
180
|
|
|
157
181
|
expect(mockFetch).toHaveBeenCalled()
|
|
@@ -164,13 +188,15 @@ describe('ARC Broadcaster', () => {
|
|
|
164
188
|
|
|
165
189
|
it('should handle non-200 responses', async () => {
|
|
166
190
|
const mockFetch = mockedFetch({
|
|
167
|
-
status:
|
|
191
|
+
status: 400,
|
|
168
192
|
data: JSON.stringify({
|
|
169
193
|
detail: 'Bad request'
|
|
170
194
|
})
|
|
171
195
|
})
|
|
172
196
|
|
|
173
|
-
const broadcaster = new ARC(URL, {
|
|
197
|
+
const broadcaster = new ARC(URL, {
|
|
198
|
+
httpClient: new FetchHttpClient(mockFetch)
|
|
199
|
+
})
|
|
174
200
|
const response = await broadcaster.broadcast(transaction)
|
|
175
201
|
|
|
176
202
|
expect(mockFetch).toHaveBeenCalled()
|
|
@@ -185,15 +211,7 @@ describe('ARC Broadcaster', () => {
|
|
|
185
211
|
})
|
|
186
212
|
|
|
187
213
|
it('handles error 460', async () => {
|
|
188
|
-
//
|
|
189
|
-
const apiKey: string = '...'
|
|
190
|
-
if (apiKey !== '...') {
|
|
191
|
-
const URL = 'https://arc.taal.com'
|
|
192
|
-
const arc = new ARC(URL, apiKey)
|
|
193
|
-
const response = await arc.broadcast(transaction)
|
|
194
|
-
expect(response.more).toBeTruthy()
|
|
195
|
-
}
|
|
196
|
-
|
|
214
|
+
// Mock the fetch response to simulate the error 460 response
|
|
197
215
|
const mockFetch = mockedFetch({
|
|
198
216
|
status: 460,
|
|
199
217
|
data: {
|
|
@@ -203,45 +221,94 @@ describe('ARC Broadcaster', () => {
|
|
|
203
221
|
}
|
|
204
222
|
})
|
|
205
223
|
|
|
206
|
-
|
|
224
|
+
// Initialize the ARC broadcaster with the mocked fetch client
|
|
225
|
+
const URL = 'https://arc.taal.com'
|
|
226
|
+
const apiKey = 'mock_api_key' // Example API key
|
|
227
|
+
const broadcaster = new ARC(URL, {
|
|
228
|
+
apiKey,
|
|
229
|
+
httpClient: new FetchHttpClient(mockFetch)
|
|
230
|
+
})
|
|
231
|
+
|
|
232
|
+
// Simulate broadcasting the transaction
|
|
207
233
|
const response = await broadcaster.broadcast(transaction)
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
234
|
+
|
|
235
|
+
// Check if the response is an error as expected
|
|
236
|
+
if (response.status === 'error') {
|
|
237
|
+
// Validate the BroadcastFailure response properties
|
|
238
|
+
expect(response.status).toBe('error')
|
|
239
|
+
expect(response.code).toBe('460')
|
|
240
|
+
expect(response.description).toBe(
|
|
241
|
+
'Transaction is not in extended format, missing input scripts'
|
|
242
|
+
)
|
|
243
|
+
expect(response.txid).toBe(
|
|
244
|
+
'd21633ba23f70118185227be58a63527675641ad37967e2aa461559f577aec43'
|
|
245
|
+
)
|
|
246
|
+
expect(response.more).toBeTruthy() // Validate the presence of additional error details
|
|
247
|
+
} else {
|
|
248
|
+
// Fail the test if the response is not an error
|
|
249
|
+
fail('Expected a BroadcastFailure but got a BroadcastResponse')
|
|
250
|
+
}
|
|
212
251
|
})
|
|
213
252
|
|
|
214
|
-
function mockedFetch(response) {
|
|
253
|
+
function mockedFetch (response: { status: number, data: any }): jest.Mock {
|
|
215
254
|
return jest.fn().mockResolvedValue({
|
|
216
255
|
ok: response.status === 200,
|
|
217
256
|
status: response.status,
|
|
218
257
|
statusText: response.status === 200 ? 'OK' : 'Bad request',
|
|
219
258
|
headers: {
|
|
220
|
-
get(key: string) {
|
|
259
|
+
get: (key: string): string | undefined => {
|
|
221
260
|
if (key === 'Content-Type') {
|
|
222
261
|
return 'application/json; charset=UTF-8'
|
|
223
262
|
}
|
|
263
|
+
return undefined
|
|
224
264
|
}
|
|
225
265
|
},
|
|
226
266
|
json: async () => response.data
|
|
227
|
-
})
|
|
267
|
+
})
|
|
228
268
|
}
|
|
229
269
|
|
|
230
|
-
function mockedHttps(response) {
|
|
270
|
+
function mockedHttps (response: { status: number, data: any }): {
|
|
271
|
+
request: (
|
|
272
|
+
url: string,
|
|
273
|
+
options: RequestOptions,
|
|
274
|
+
callback: (res: {
|
|
275
|
+
statusCode: number
|
|
276
|
+
statusMessage: string
|
|
277
|
+
headers: { 'content-type': string }
|
|
278
|
+
on: (event: string, handler: (chunk?: any) => void) => void
|
|
279
|
+
}) => void
|
|
280
|
+
) => {
|
|
281
|
+
on: jest.Mock
|
|
282
|
+
write: jest.Mock
|
|
283
|
+
end: jest.Mock
|
|
284
|
+
}
|
|
285
|
+
} {
|
|
231
286
|
const https = {
|
|
232
|
-
request: (
|
|
233
|
-
|
|
234
|
-
|
|
287
|
+
request: (
|
|
288
|
+
url: string,
|
|
289
|
+
options: RequestOptions,
|
|
290
|
+
callback: (res: {
|
|
291
|
+
statusCode: number
|
|
292
|
+
statusMessage: string
|
|
293
|
+
headers: { 'content-type': string }
|
|
294
|
+
on: (event: string, handler: (chunk?: any) => void) => void
|
|
295
|
+
}) => void
|
|
296
|
+
) => {
|
|
297
|
+
const mockResponse = {
|
|
235
298
|
statusCode: response.status,
|
|
236
|
-
statusMessage: response.status
|
|
299
|
+
statusMessage: response.status === 200 ? 'OK' : 'Bad request',
|
|
237
300
|
headers: {
|
|
238
301
|
'content-type': 'application/json; charset=UTF-8'
|
|
239
302
|
},
|
|
240
|
-
on
|
|
303
|
+
on (event: string, handler: (chunk?: any) => void) {
|
|
241
304
|
if (event === 'data') handler(JSON.stringify(response.data))
|
|
242
305
|
if (event === 'end') handler()
|
|
243
306
|
}
|
|
244
|
-
}
|
|
307
|
+
}
|
|
308
|
+
|
|
309
|
+
// ✅ Call the callback asynchronously to match Node.js behavior
|
|
310
|
+
process.nextTick(() => callback(mockResponse))
|
|
311
|
+
|
|
245
312
|
return {
|
|
246
313
|
on: jest.fn(),
|
|
247
314
|
write: jest.fn(),
|
|
@@ -249,7 +316,8 @@ describe('ARC Broadcaster', () => {
|
|
|
249
316
|
}
|
|
250
317
|
}
|
|
251
318
|
}
|
|
319
|
+
|
|
252
320
|
jest.mock('https', () => https)
|
|
253
321
|
return https
|
|
254
322
|
}
|
|
255
|
-
})
|
|
323
|
+
})
|