@bsv/sdk 1.6.8 → 1.6.9

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.
Files changed (603) hide show
  1. package/dist/cjs/package.json +4 -4
  2. package/dist/cjs/src/auth/__tests/Peer.test.js +446 -0
  3. package/dist/cjs/src/auth/__tests/Peer.test.js.map +1 -0
  4. package/dist/cjs/src/auth/__tests/SessionManager.test.js +69 -0
  5. package/dist/cjs/src/auth/__tests/SessionManager.test.js.map +1 -0
  6. package/dist/cjs/src/auth/certificates/__tests/Certificate.test.js +182 -0
  7. package/dist/cjs/src/auth/certificates/__tests/Certificate.test.js.map +1 -0
  8. package/dist/cjs/src/auth/certificates/__tests/MasterCertificate.test.js +184 -0
  9. package/dist/cjs/src/auth/certificates/__tests/MasterCertificate.test.js.map +1 -0
  10. package/dist/cjs/src/auth/certificates/__tests/VerifiableCertificate.test.js +75 -0
  11. package/dist/cjs/src/auth/certificates/__tests/VerifiableCertificate.test.js.map +1 -0
  12. package/dist/cjs/src/auth/utils/__tests/cryptononce.test.js +101 -0
  13. package/dist/cjs/src/auth/utils/__tests/cryptononce.test.js.map +1 -0
  14. package/dist/cjs/src/auth/utils/__tests/getVerifiableCertificates.test.js +106 -0
  15. package/dist/cjs/src/auth/utils/__tests/getVerifiableCertificates.test.js.map +1 -0
  16. package/dist/cjs/src/auth/utils/__tests/validateCertificates.test.js +111 -0
  17. package/dist/cjs/src/auth/utils/__tests/validateCertificates.test.js.map +1 -0
  18. package/dist/cjs/src/auth/utils/certificateHelpers.js +51 -0
  19. package/dist/cjs/src/auth/utils/certificateHelpers.js.map +1 -0
  20. package/dist/cjs/src/compat/__tests/BSM.test.js +69 -0
  21. package/dist/cjs/src/compat/__tests/BSM.test.js.map +1 -0
  22. package/dist/cjs/src/compat/__tests/ECIES.test.js +115 -0
  23. package/dist/cjs/src/compat/__tests/ECIES.test.js.map +1 -0
  24. package/dist/cjs/src/compat/__tests/HD.test.js +336 -0
  25. package/dist/cjs/src/compat/__tests/HD.test.js.map +1 -0
  26. package/dist/cjs/src/compat/__tests/Mnemonic.test.js +150 -0
  27. package/dist/cjs/src/compat/__tests/Mnemonic.test.js.map +1 -0
  28. package/dist/cjs/src/compat/__tests/Mnemonic.vectors.js +175 -0
  29. package/dist/cjs/src/compat/__tests/Mnemonic.vectors.js.map +1 -0
  30. package/dist/cjs/src/messages/__tests/EncryptedMessage.test.js +57 -0
  31. package/dist/cjs/src/messages/__tests/EncryptedMessage.test.js.map +1 -0
  32. package/dist/cjs/src/messages/__tests/SignedMessage.test.js +52 -0
  33. package/dist/cjs/src/messages/__tests/SignedMessage.test.js.map +1 -0
  34. package/dist/cjs/src/overlay-tools/__tests/LookupResolver.test.js +1471 -0
  35. package/dist/cjs/src/overlay-tools/__tests/LookupResolver.test.js.map +1 -0
  36. package/dist/cjs/src/overlay-tools/__tests/OverlayAdminTokenTemplate.test.js +78 -0
  37. package/dist/cjs/src/overlay-tools/__tests/OverlayAdminTokenTemplate.test.js.map +1 -0
  38. package/dist/cjs/src/overlay-tools/__tests/SHIPBroadcaster.test.js +933 -0
  39. package/dist/cjs/src/overlay-tools/__tests/SHIPBroadcaster.test.js.map +1 -0
  40. package/dist/cjs/src/primitives/__tests/AESGCM.test.js +248 -0
  41. package/dist/cjs/src/primitives/__tests/AESGCM.test.js.map +1 -0
  42. package/dist/cjs/src/primitives/__tests/BRC42.private.vectors.js +36 -0
  43. package/dist/cjs/src/primitives/__tests/BRC42.private.vectors.js.map +1 -0
  44. package/dist/cjs/src/primitives/__tests/BRC42.public.vectors.js +36 -0
  45. package/dist/cjs/src/primitives/__tests/BRC42.public.vectors.js.map +1 -0
  46. package/dist/cjs/src/primitives/__tests/BigNumber.arithmatic.test.js +501 -0
  47. package/dist/cjs/src/primitives/__tests/BigNumber.arithmatic.test.js.map +1 -0
  48. package/dist/cjs/src/primitives/__tests/BigNumber.binary.test.js +185 -0
  49. package/dist/cjs/src/primitives/__tests/BigNumber.binary.test.js.map +1 -0
  50. package/dist/cjs/src/primitives/__tests/BigNumber.constructor.test.js +149 -0
  51. package/dist/cjs/src/primitives/__tests/BigNumber.constructor.test.js.map +1 -0
  52. package/dist/cjs/src/primitives/__tests/BigNumber.dhGroup.test.js +23 -0
  53. package/dist/cjs/src/primitives/__tests/BigNumber.dhGroup.test.js.map +1 -0
  54. package/dist/cjs/src/primitives/__tests/BigNumber.fixtures.js +268 -0
  55. package/dist/cjs/src/primitives/__tests/BigNumber.fixtures.js.map +1 -0
  56. package/dist/cjs/src/primitives/__tests/BigNumber.serializers.test.js +147 -0
  57. package/dist/cjs/src/primitives/__tests/BigNumber.serializers.test.js.map +1 -0
  58. package/dist/cjs/src/primitives/__tests/BigNumber.utils.test.js +322 -0
  59. package/dist/cjs/src/primitives/__tests/BigNumber.utils.test.js.map +1 -0
  60. package/dist/cjs/src/primitives/__tests/Curve.unit.test.js +145 -0
  61. package/dist/cjs/src/primitives/__tests/Curve.unit.test.js.map +1 -0
  62. package/dist/cjs/src/primitives/__tests/DRBG.test.js +22 -0
  63. package/dist/cjs/src/primitives/__tests/DRBG.test.js.map +1 -0
  64. package/dist/cjs/src/primitives/__tests/DRBG.vectors.js +170 -0
  65. package/dist/cjs/src/primitives/__tests/DRBG.vectors.js.map +1 -0
  66. package/dist/cjs/src/primitives/__tests/ECDH.test.js +34 -0
  67. package/dist/cjs/src/primitives/__tests/ECDH.test.js.map +1 -0
  68. package/dist/cjs/src/primitives/__tests/ECDSA.test.js +89 -0
  69. package/dist/cjs/src/primitives/__tests/ECDSA.test.js.map +1 -0
  70. package/dist/cjs/src/primitives/__tests/HMAC.test.js +60 -0
  71. package/dist/cjs/src/primitives/__tests/HMAC.test.js.map +1 -0
  72. package/dist/cjs/src/primitives/__tests/Hash.test.js +159 -0
  73. package/dist/cjs/src/primitives/__tests/Hash.test.js.map +1 -0
  74. package/dist/cjs/src/primitives/__tests/PBKDF2.vectors.js +122 -0
  75. package/dist/cjs/src/primitives/__tests/PBKDF2.vectors.js.map +1 -0
  76. package/dist/cjs/src/primitives/__tests/PrivateKey.split.test.js +105 -0
  77. package/dist/cjs/src/primitives/__tests/PrivateKey.split.test.js.map +1 -0
  78. package/dist/cjs/src/primitives/__tests/PrivateKey.test.js +90 -0
  79. package/dist/cjs/src/primitives/__tests/PrivateKey.test.js.map +1 -0
  80. package/dist/cjs/src/primitives/__tests/PublicKey.test.js +83 -0
  81. package/dist/cjs/src/primitives/__tests/PublicKey.test.js.map +1 -0
  82. package/dist/cjs/src/primitives/__tests/Random.test.js +19 -0
  83. package/dist/cjs/src/primitives/__tests/Random.test.js.map +1 -0
  84. package/dist/cjs/src/primitives/__tests/Reader.test.js +282 -0
  85. package/dist/cjs/src/primitives/__tests/Reader.test.js.map +1 -0
  86. package/dist/cjs/src/primitives/__tests/ReductionContext.test.js +224 -0
  87. package/dist/cjs/src/primitives/__tests/ReductionContext.test.js.map +1 -0
  88. package/dist/cjs/src/primitives/__tests/Schnorr.test.js +213 -0
  89. package/dist/cjs/src/primitives/__tests/Schnorr.test.js.map +1 -0
  90. package/dist/cjs/src/primitives/__tests/SymmetricKey.test.js +51 -0
  91. package/dist/cjs/src/primitives/__tests/SymmetricKey.test.js.map +1 -0
  92. package/dist/cjs/src/primitives/__tests/SymmetricKey.vectors.js +43 -0
  93. package/dist/cjs/src/primitives/__tests/SymmetricKey.vectors.js.map +1 -0
  94. package/dist/cjs/src/primitives/__tests/Writer.test.js +176 -0
  95. package/dist/cjs/src/primitives/__tests/Writer.test.js.map +1 -0
  96. package/dist/cjs/src/primitives/__tests/bug-31.test.js +32 -0
  97. package/dist/cjs/src/primitives/__tests/bug-31.test.js.map +1 -0
  98. package/dist/cjs/src/primitives/__tests/sighash.vectors.js +3506 -0
  99. package/dist/cjs/src/primitives/__tests/sighash.vectors.js.map +1 -0
  100. package/dist/cjs/src/primitives/__tests/utils.test.js +110 -0
  101. package/dist/cjs/src/primitives/__tests/utils.test.js.map +1 -0
  102. package/dist/cjs/src/script/__tests/Script.test.js +347 -0
  103. package/dist/cjs/src/script/__tests/Script.test.js.map +1 -0
  104. package/dist/cjs/src/script/__tests/Spend.test.js +282 -0
  105. package/dist/cjs/src/script/__tests/Spend.test.js.map +1 -0
  106. package/dist/cjs/src/script/__tests/SpendComplex.test.js +52 -0
  107. package/dist/cjs/src/script/__tests/SpendComplex.test.js.map +1 -0
  108. package/dist/cjs/src/script/__tests/script.invalid.vectors.js +2370 -0
  109. package/dist/cjs/src/script/__tests/script.invalid.vectors.js.map +1 -0
  110. package/dist/cjs/src/script/__tests/script.valid.vectors.js +1181 -0
  111. package/dist/cjs/src/script/__tests/script.valid.vectors.js.map +1 -0
  112. package/dist/cjs/src/script/__tests/spend.valid.vectors.js +2298 -0
  113. package/dist/cjs/src/script/__tests/spend.valid.vectors.js.map +1 -0
  114. package/dist/cjs/src/script/templates/__tests/PushDrop.test.js +161 -0
  115. package/dist/cjs/src/script/templates/__tests/PushDrop.test.js.map +1 -0
  116. package/dist/cjs/src/totp/__tests/totp.test.js +67 -0
  117. package/dist/cjs/src/totp/__tests/totp.test.js.map +1 -0
  118. package/dist/cjs/src/transaction/__tests/Beef.test.js +393 -0
  119. package/dist/cjs/src/transaction/__tests/Beef.test.js.map +1 -0
  120. package/dist/cjs/src/transaction/__tests/MerklePath.test.js +209 -0
  121. package/dist/cjs/src/transaction/__tests/MerklePath.test.js.map +1 -0
  122. package/dist/cjs/src/transaction/__tests/Transaction.benchmarks.test.js +219 -0
  123. package/dist/cjs/src/transaction/__tests/Transaction.benchmarks.test.js.map +1 -0
  124. package/dist/cjs/src/transaction/__tests/Transaction.test.js +1073 -0
  125. package/dist/cjs/src/transaction/__tests/Transaction.test.js.map +1 -0
  126. package/dist/cjs/src/transaction/__tests/bigtx.vectors.js +7 -0
  127. package/dist/cjs/src/transaction/__tests/bigtx.vectors.js.map +1 -0
  128. package/dist/cjs/src/transaction/__tests/bump.invalid.vectors.js +11 -0
  129. package/dist/cjs/src/transaction/__tests/bump.invalid.vectors.js.map +1 -0
  130. package/dist/cjs/src/transaction/__tests/bump.valid.vectors.js +7 -0
  131. package/dist/cjs/src/transaction/__tests/bump.valid.vectors.js.map +1 -0
  132. package/dist/cjs/src/transaction/__tests/tx.invalid.vectors.js +230 -0
  133. package/dist/cjs/src/transaction/__tests/tx.invalid.vectors.js.map +1 -0
  134. package/dist/cjs/src/transaction/__tests/tx.valid.vectors.js +296 -0
  135. package/dist/cjs/src/transaction/__tests/tx.valid.vectors.js.map +1 -0
  136. package/dist/cjs/src/transaction/broadcasters/__tests/ARC.test.js +246 -0
  137. package/dist/cjs/src/transaction/broadcasters/__tests/ARC.test.js.map +1 -0
  138. package/dist/cjs/src/transaction/broadcasters/__tests/WhatsOnChainBroadcaster.test.js +148 -0
  139. package/dist/cjs/src/transaction/broadcasters/__tests/WhatsOnChainBroadcaster.test.js.map +1 -0
  140. package/dist/cjs/src/transaction/chaintrackers/__tests/WhatsOnChainChainTracker.test.js +155 -0
  141. package/dist/cjs/src/transaction/chaintrackers/__tests/WhatsOnChainChainTracker.test.js.map +1 -0
  142. package/dist/cjs/src/wallet/ScriptTemplateSABPPP.js +39 -0
  143. package/dist/cjs/src/wallet/ScriptTemplateSABPPP.js.map +1 -0
  144. package/dist/cjs/src/wallet/WalletSigner.js +260 -0
  145. package/dist/cjs/src/wallet/WalletSigner.js.map +1 -0
  146. package/dist/cjs/src/wallet/__tests/CachedKeyDeriver.test.js +269 -0
  147. package/dist/cjs/src/wallet/__tests/CachedKeyDeriver.test.js.map +1 -0
  148. package/dist/cjs/src/wallet/__tests/KeyDeriver.test.js +114 -0
  149. package/dist/cjs/src/wallet/__tests/KeyDeriver.test.js.map +1 -0
  150. package/dist/cjs/src/wallet/__tests/ProtoWallet.test.js +475 -0
  151. package/dist/cjs/src/wallet/__tests/ProtoWallet.test.js.map +1 -0
  152. package/dist/cjs/src/wallet/createActionSdk.js +230 -0
  153. package/dist/cjs/src/wallet/createActionSdk.js.map +1 -0
  154. package/dist/cjs/src/wallet/sdk/CachedKeyDeriver.js +174 -0
  155. package/dist/cjs/src/wallet/sdk/CachedKeyDeriver.js.map +1 -0
  156. package/dist/cjs/src/wallet/sdk/CertOps.js +181 -0
  157. package/dist/cjs/src/wallet/sdk/CertOps.js.map +1 -0
  158. package/dist/cjs/src/wallet/sdk/Certificate.js +162 -0
  159. package/dist/cjs/src/wallet/sdk/Certificate.js.map +1 -0
  160. package/dist/cjs/src/wallet/sdk/KeyDeriver.js +176 -0
  161. package/dist/cjs/src/wallet/sdk/KeyDeriver.js.map +1 -0
  162. package/dist/cjs/src/wallet/sdk/ProtoWallet.js +75 -0
  163. package/dist/cjs/src/wallet/sdk/ProtoWallet.js.map +1 -0
  164. package/dist/cjs/src/wallet/sdk/StorageSyncReader.js +3 -0
  165. package/dist/cjs/src/wallet/sdk/StorageSyncReader.js.map +1 -0
  166. package/dist/cjs/src/wallet/sdk/WERR_errors.js +107 -0
  167. package/dist/cjs/src/wallet/sdk/WERR_errors.js.map +1 -0
  168. package/dist/cjs/src/wallet/sdk/Wallet.interfaces.js +3 -0
  169. package/dist/cjs/src/wallet/sdk/Wallet.interfaces.js.map +1 -0
  170. package/dist/cjs/src/wallet/sdk/WalletCrypto.js +171 -0
  171. package/dist/cjs/src/wallet/sdk/WalletCrypto.js.map +1 -0
  172. package/dist/cjs/src/wallet/sdk/WalletError.js +103 -0
  173. package/dist/cjs/src/wallet/sdk/WalletError.js.map +1 -0
  174. package/dist/cjs/src/wallet/sdk/WalletServices.interfaces.js +3 -0
  175. package/dist/cjs/src/wallet/sdk/WalletServices.interfaces.js.map +1 -0
  176. package/dist/cjs/src/wallet/sdk/WalletSigner.interfaces.js +3 -0
  177. package/dist/cjs/src/wallet/sdk/WalletSigner.interfaces.js.map +1 -0
  178. package/dist/cjs/src/wallet/sdk/WalletStorage.interfaces.js +3 -0
  179. package/dist/cjs/src/wallet/sdk/WalletStorage.interfaces.js.map +1 -0
  180. package/dist/cjs/src/wallet/sdk/index.js +31 -0
  181. package/dist/cjs/src/wallet/sdk/index.js.map +1 -0
  182. package/dist/cjs/src/wallet/sdk/types.js +11 -0
  183. package/dist/cjs/src/wallet/sdk/types.js.map +1 -0
  184. package/dist/cjs/src/wallet/sdk/validationHelpers.js +601 -0
  185. package/dist/cjs/src/wallet/sdk/validationHelpers.js.map +1 -0
  186. package/dist/cjs/src/wallet/substrates/HTTPWalletJSON.js +11 -3
  187. package/dist/cjs/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
  188. package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js +1 -1
  189. package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
  190. package/dist/cjs/src/wallet/substrates/__tests/WalletWire.integration.test.js +1962 -0
  191. package/dist/cjs/src/wallet/substrates/__tests/WalletWire.integration.test.js.map +1 -0
  192. package/dist/cjs/src/wallet/substrates/__tests/XDM.test.js +579 -0
  193. package/dist/cjs/src/wallet/substrates/__tests/XDM.test.js.map +1 -0
  194. package/dist/cjs/src/wallet/substrates/utils/toOriginHeader.js +21 -0
  195. package/dist/cjs/src/wallet/substrates/utils/toOriginHeader.js.map +1 -0
  196. package/dist/cjs/src/wallet/utilityHelpers.js +305 -0
  197. package/dist/cjs/src/wallet/utilityHelpers.js.map +1 -0
  198. package/dist/cjs/src/wallet/validationHelpers.js +601 -0
  199. package/dist/cjs/src/wallet/validationHelpers.js.map +1 -0
  200. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  201. package/dist/esm/src/auth/__tests/Peer.test.js +448 -0
  202. package/dist/esm/src/auth/__tests/Peer.test.js.map +1 -0
  203. package/dist/esm/src/auth/__tests/SessionManager.test.js +69 -0
  204. package/dist/esm/src/auth/__tests/SessionManager.test.js.map +1 -0
  205. package/dist/esm/src/auth/certificates/__tests/Certificate.test.js +182 -0
  206. package/dist/esm/src/auth/certificates/__tests/Certificate.test.js.map +1 -0
  207. package/dist/esm/src/auth/certificates/__tests/MasterCertificate.test.js +184 -0
  208. package/dist/esm/src/auth/certificates/__tests/MasterCertificate.test.js.map +1 -0
  209. package/dist/esm/src/auth/certificates/__tests/VerifiableCertificate.test.js +75 -0
  210. package/dist/esm/src/auth/certificates/__tests/VerifiableCertificate.test.js.map +1 -0
  211. package/dist/esm/src/auth/utils/__tests/cryptononce.test.js +101 -0
  212. package/dist/esm/src/auth/utils/__tests/cryptononce.test.js.map +1 -0
  213. package/dist/esm/src/auth/utils/__tests/getVerifiableCertificates.test.js +106 -0
  214. package/dist/esm/src/auth/utils/__tests/getVerifiableCertificates.test.js.map +1 -0
  215. package/dist/esm/src/auth/utils/__tests/validateCertificates.test.js +111 -0
  216. package/dist/esm/src/auth/utils/__tests/validateCertificates.test.js.map +1 -0
  217. package/dist/esm/src/auth/utils/certificateHelpers.js +47 -0
  218. package/dist/esm/src/auth/utils/certificateHelpers.js.map +1 -0
  219. package/dist/esm/src/compat/__tests/BSM.test.js +69 -0
  220. package/dist/esm/src/compat/__tests/BSM.test.js.map +1 -0
  221. package/dist/esm/src/compat/__tests/ECIES.test.js +115 -0
  222. package/dist/esm/src/compat/__tests/ECIES.test.js.map +1 -0
  223. package/dist/esm/src/compat/__tests/HD.test.js +336 -0
  224. package/dist/esm/src/compat/__tests/HD.test.js.map +1 -0
  225. package/dist/esm/src/compat/__tests/Mnemonic.test.js +150 -0
  226. package/dist/esm/src/compat/__tests/Mnemonic.test.js.map +1 -0
  227. package/dist/esm/src/compat/__tests/Mnemonic.vectors.js +175 -0
  228. package/dist/esm/src/compat/__tests/Mnemonic.vectors.js.map +1 -0
  229. package/dist/esm/src/messages/__tests/EncryptedMessage.test.js +57 -0
  230. package/dist/esm/src/messages/__tests/EncryptedMessage.test.js.map +1 -0
  231. package/dist/esm/src/messages/__tests/SignedMessage.test.js +52 -0
  232. package/dist/esm/src/messages/__tests/SignedMessage.test.js.map +1 -0
  233. package/dist/esm/src/overlay-tools/__tests/LookupResolver.test.js +1471 -0
  234. package/dist/esm/src/overlay-tools/__tests/LookupResolver.test.js.map +1 -0
  235. package/dist/esm/src/overlay-tools/__tests/OverlayAdminTokenTemplate.test.js +78 -0
  236. package/dist/esm/src/overlay-tools/__tests/OverlayAdminTokenTemplate.test.js.map +1 -0
  237. package/dist/esm/src/overlay-tools/__tests/SHIPBroadcaster.test.js +933 -0
  238. package/dist/esm/src/overlay-tools/__tests/SHIPBroadcaster.test.js.map +1 -0
  239. package/dist/esm/src/primitives/__tests/AESGCM.test.js +248 -0
  240. package/dist/esm/src/primitives/__tests/AESGCM.test.js.map +1 -0
  241. package/dist/esm/src/primitives/__tests/BRC42.private.vectors.js +36 -0
  242. package/dist/esm/src/primitives/__tests/BRC42.private.vectors.js.map +1 -0
  243. package/dist/esm/src/primitives/__tests/BRC42.public.vectors.js +36 -0
  244. package/dist/esm/src/primitives/__tests/BRC42.public.vectors.js.map +1 -0
  245. package/dist/esm/src/primitives/__tests/BigNumber.arithmatic.test.js +501 -0
  246. package/dist/esm/src/primitives/__tests/BigNumber.arithmatic.test.js.map +1 -0
  247. package/dist/esm/src/primitives/__tests/BigNumber.binary.test.js +185 -0
  248. package/dist/esm/src/primitives/__tests/BigNumber.binary.test.js.map +1 -0
  249. package/dist/esm/src/primitives/__tests/BigNumber.constructor.test.js +149 -0
  250. package/dist/esm/src/primitives/__tests/BigNumber.constructor.test.js.map +1 -0
  251. package/dist/esm/src/primitives/__tests/BigNumber.dhGroup.test.js +23 -0
  252. package/dist/esm/src/primitives/__tests/BigNumber.dhGroup.test.js.map +1 -0
  253. package/dist/esm/src/primitives/__tests/BigNumber.fixtures.js +268 -0
  254. package/dist/esm/src/primitives/__tests/BigNumber.fixtures.js.map +1 -0
  255. package/dist/esm/src/primitives/__tests/BigNumber.serializers.test.js +147 -0
  256. package/dist/esm/src/primitives/__tests/BigNumber.serializers.test.js.map +1 -0
  257. package/dist/esm/src/primitives/__tests/BigNumber.utils.test.js +322 -0
  258. package/dist/esm/src/primitives/__tests/BigNumber.utils.test.js.map +1 -0
  259. package/dist/esm/src/primitives/__tests/Curve.unit.test.js +145 -0
  260. package/dist/esm/src/primitives/__tests/Curve.unit.test.js.map +1 -0
  261. package/dist/esm/src/primitives/__tests/DRBG.test.js +22 -0
  262. package/dist/esm/src/primitives/__tests/DRBG.test.js.map +1 -0
  263. package/dist/esm/src/primitives/__tests/DRBG.vectors.js +170 -0
  264. package/dist/esm/src/primitives/__tests/DRBG.vectors.js.map +1 -0
  265. package/dist/esm/src/primitives/__tests/ECDH.test.js +34 -0
  266. package/dist/esm/src/primitives/__tests/ECDH.test.js.map +1 -0
  267. package/dist/esm/src/primitives/__tests/ECDSA.test.js +89 -0
  268. package/dist/esm/src/primitives/__tests/ECDSA.test.js.map +1 -0
  269. package/dist/esm/src/primitives/__tests/HMAC.test.js +60 -0
  270. package/dist/esm/src/primitives/__tests/HMAC.test.js.map +1 -0
  271. package/dist/esm/src/primitives/__tests/Hash.test.js +159 -0
  272. package/dist/esm/src/primitives/__tests/Hash.test.js.map +1 -0
  273. package/dist/esm/src/primitives/__tests/PBKDF2.vectors.js +122 -0
  274. package/dist/esm/src/primitives/__tests/PBKDF2.vectors.js.map +1 -0
  275. package/dist/esm/src/primitives/__tests/PrivateKey.split.test.js +105 -0
  276. package/dist/esm/src/primitives/__tests/PrivateKey.split.test.js.map +1 -0
  277. package/dist/esm/src/primitives/__tests/PrivateKey.test.js +90 -0
  278. package/dist/esm/src/primitives/__tests/PrivateKey.test.js.map +1 -0
  279. package/dist/esm/src/primitives/__tests/PublicKey.test.js +83 -0
  280. package/dist/esm/src/primitives/__tests/PublicKey.test.js.map +1 -0
  281. package/dist/esm/src/primitives/__tests/Random.test.js +19 -0
  282. package/dist/esm/src/primitives/__tests/Random.test.js.map +1 -0
  283. package/dist/esm/src/primitives/__tests/Reader.test.js +282 -0
  284. package/dist/esm/src/primitives/__tests/Reader.test.js.map +1 -0
  285. package/dist/esm/src/primitives/__tests/ReductionContext.test.js +223 -0
  286. package/dist/esm/src/primitives/__tests/ReductionContext.test.js.map +1 -0
  287. package/dist/esm/src/primitives/__tests/Schnorr.test.js +213 -0
  288. package/dist/esm/src/primitives/__tests/Schnorr.test.js.map +1 -0
  289. package/dist/esm/src/primitives/__tests/SymmetricKey.test.js +51 -0
  290. package/dist/esm/src/primitives/__tests/SymmetricKey.test.js.map +1 -0
  291. package/dist/esm/src/primitives/__tests/SymmetricKey.vectors.js +43 -0
  292. package/dist/esm/src/primitives/__tests/SymmetricKey.vectors.js.map +1 -0
  293. package/dist/esm/src/primitives/__tests/Writer.test.js +176 -0
  294. package/dist/esm/src/primitives/__tests/Writer.test.js.map +1 -0
  295. package/dist/esm/src/primitives/__tests/bug-31.test.js +32 -0
  296. package/dist/esm/src/primitives/__tests/bug-31.test.js.map +1 -0
  297. package/dist/esm/src/primitives/__tests/sighash.vectors.js +3506 -0
  298. package/dist/esm/src/primitives/__tests/sighash.vectors.js.map +1 -0
  299. package/dist/esm/src/primitives/__tests/utils.test.js +110 -0
  300. package/dist/esm/src/primitives/__tests/utils.test.js.map +1 -0
  301. package/dist/esm/src/script/__tests/Script.test.js +347 -0
  302. package/dist/esm/src/script/__tests/Script.test.js.map +1 -0
  303. package/dist/esm/src/script/__tests/Spend.test.js +282 -0
  304. package/dist/esm/src/script/__tests/Spend.test.js.map +1 -0
  305. package/dist/esm/src/script/__tests/SpendComplex.test.js +51 -0
  306. package/dist/esm/src/script/__tests/SpendComplex.test.js.map +1 -0
  307. package/dist/esm/src/script/__tests/script.invalid.vectors.js +2370 -0
  308. package/dist/esm/src/script/__tests/script.invalid.vectors.js.map +1 -0
  309. package/dist/esm/src/script/__tests/script.valid.vectors.js +1181 -0
  310. package/dist/esm/src/script/__tests/script.valid.vectors.js.map +1 -0
  311. package/dist/esm/src/script/__tests/spend.valid.vectors.js +2298 -0
  312. package/dist/esm/src/script/__tests/spend.valid.vectors.js.map +1 -0
  313. package/dist/esm/src/script/templates/__tests/PushDrop.test.js +161 -0
  314. package/dist/esm/src/script/templates/__tests/PushDrop.test.js.map +1 -0
  315. package/dist/esm/src/totp/__tests/totp.test.js +67 -0
  316. package/dist/esm/src/totp/__tests/totp.test.js.map +1 -0
  317. package/dist/esm/src/transaction/__tests/Beef.test.js +393 -0
  318. package/dist/esm/src/transaction/__tests/Beef.test.js.map +1 -0
  319. package/dist/esm/src/transaction/__tests/MerklePath.test.js +209 -0
  320. package/dist/esm/src/transaction/__tests/MerklePath.test.js.map +1 -0
  321. package/dist/esm/src/transaction/__tests/Transaction.benchmarks.test.js +219 -0
  322. package/dist/esm/src/transaction/__tests/Transaction.benchmarks.test.js.map +1 -0
  323. package/dist/esm/src/transaction/__tests/Transaction.test.js +1072 -0
  324. package/dist/esm/src/transaction/__tests/Transaction.test.js.map +1 -0
  325. package/dist/esm/src/transaction/__tests/bigtx.vectors.js +7 -0
  326. package/dist/esm/src/transaction/__tests/bigtx.vectors.js.map +1 -0
  327. package/dist/esm/src/transaction/__tests/bump.invalid.vectors.js +11 -0
  328. package/dist/esm/src/transaction/__tests/bump.invalid.vectors.js.map +1 -0
  329. package/dist/esm/src/transaction/__tests/bump.valid.vectors.js +7 -0
  330. package/dist/esm/src/transaction/__tests/bump.valid.vectors.js.map +1 -0
  331. package/dist/esm/src/transaction/__tests/tx.invalid.vectors.js +230 -0
  332. package/dist/esm/src/transaction/__tests/tx.invalid.vectors.js.map +1 -0
  333. package/dist/esm/src/transaction/__tests/tx.valid.vectors.js +296 -0
  334. package/dist/esm/src/transaction/__tests/tx.valid.vectors.js.map +1 -0
  335. package/dist/esm/src/transaction/broadcasters/__tests/ARC.test.js +246 -0
  336. package/dist/esm/src/transaction/broadcasters/__tests/ARC.test.js.map +1 -0
  337. package/dist/esm/src/transaction/broadcasters/__tests/WhatsOnChainBroadcaster.test.js +148 -0
  338. package/dist/esm/src/transaction/broadcasters/__tests/WhatsOnChainBroadcaster.test.js.map +1 -0
  339. package/dist/esm/src/transaction/chaintrackers/__tests/WhatsOnChainChainTracker.test.js +155 -0
  340. package/dist/esm/src/transaction/chaintrackers/__tests/WhatsOnChainChainTracker.test.js.map +1 -0
  341. package/dist/esm/src/wallet/ScriptTemplateSABPPP.js +37 -0
  342. package/dist/esm/src/wallet/ScriptTemplateSABPPP.js.map +1 -0
  343. package/dist/esm/src/wallet/WalletSigner.js +263 -0
  344. package/dist/esm/src/wallet/WalletSigner.js.map +1 -0
  345. package/dist/esm/src/wallet/__tests/CachedKeyDeriver.test.js +269 -0
  346. package/dist/esm/src/wallet/__tests/CachedKeyDeriver.test.js.map +1 -0
  347. package/dist/esm/src/wallet/__tests/KeyDeriver.test.js +113 -0
  348. package/dist/esm/src/wallet/__tests/KeyDeriver.test.js.map +1 -0
  349. package/dist/esm/src/wallet/__tests/ProtoWallet.test.js +475 -0
  350. package/dist/esm/src/wallet/__tests/ProtoWallet.test.js.map +1 -0
  351. package/dist/esm/src/wallet/createActionSdk.js +223 -0
  352. package/dist/esm/src/wallet/createActionSdk.js.map +1 -0
  353. package/dist/esm/src/wallet/sdk/CachedKeyDeriver.js +174 -0
  354. package/dist/esm/src/wallet/sdk/CachedKeyDeriver.js.map +1 -0
  355. package/dist/esm/src/wallet/sdk/CertOps.js +181 -0
  356. package/dist/esm/src/wallet/sdk/CertOps.js.map +1 -0
  357. package/dist/esm/src/wallet/sdk/Certificate.js +186 -0
  358. package/dist/esm/src/wallet/sdk/Certificate.js.map +1 -0
  359. package/dist/esm/src/wallet/sdk/KeyDeriver.js +174 -0
  360. package/dist/esm/src/wallet/sdk/KeyDeriver.js.map +1 -0
  361. package/dist/esm/src/wallet/sdk/ProtoWallet.js +71 -0
  362. package/dist/esm/src/wallet/sdk/ProtoWallet.js.map +1 -0
  363. package/dist/esm/src/wallet/sdk/StorageSyncReader.js +2 -0
  364. package/dist/esm/src/wallet/sdk/StorageSyncReader.js.map +1 -0
  365. package/dist/esm/src/wallet/sdk/WERR_errors.js +99 -0
  366. package/dist/esm/src/wallet/sdk/WERR_errors.js.map +1 -0
  367. package/dist/esm/src/wallet/sdk/Wallet.interfaces.js +2 -0
  368. package/dist/esm/src/wallet/sdk/Wallet.interfaces.js.map +1 -0
  369. package/dist/esm/src/wallet/sdk/WalletCrypto.js +168 -0
  370. package/dist/esm/src/wallet/sdk/WalletCrypto.js.map +1 -0
  371. package/dist/esm/src/wallet/sdk/WalletError.js +100 -0
  372. package/dist/esm/src/wallet/sdk/WalletError.js.map +1 -0
  373. package/dist/esm/src/wallet/sdk/WalletServices.interfaces.js +2 -0
  374. package/dist/esm/src/wallet/sdk/WalletServices.interfaces.js.map +1 -0
  375. package/dist/esm/src/wallet/sdk/WalletSigner.interfaces.js +2 -0
  376. package/dist/esm/src/wallet/sdk/WalletSigner.interfaces.js.map +1 -0
  377. package/dist/esm/src/wallet/sdk/WalletStorage.interfaces.js +2 -0
  378. package/dist/esm/src/wallet/sdk/WalletStorage.interfaces.js.map +1 -0
  379. package/dist/esm/src/wallet/sdk/index.js +15 -0
  380. package/dist/esm/src/wallet/sdk/index.js.map +1 -0
  381. package/dist/esm/src/wallet/sdk/types.js +8 -0
  382. package/dist/esm/src/wallet/sdk/types.js.map +1 -0
  383. package/dist/esm/src/wallet/sdk/validationHelpers.js +566 -0
  384. package/dist/esm/src/wallet/sdk/validationHelpers.js.map +1 -0
  385. package/dist/esm/src/wallet/substrates/HTTPWalletJSON.js +9 -1
  386. package/dist/esm/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
  387. package/dist/esm/src/wallet/substrates/WalletWireProcessor.js +1 -1
  388. package/dist/esm/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
  389. package/dist/esm/src/wallet/substrates/__tests/WalletWire.integration.test.js +1962 -0
  390. package/dist/esm/src/wallet/substrates/__tests/WalletWire.integration.test.js.map +1 -0
  391. package/dist/esm/src/wallet/substrates/__tests/XDM.test.js +579 -0
  392. package/dist/esm/src/wallet/substrates/__tests/XDM.test.js.map +1 -0
  393. package/dist/esm/src/wallet/substrates/utils/toOriginHeader.js +17 -0
  394. package/dist/esm/src/wallet/substrates/utils/toOriginHeader.js.map +1 -0
  395. package/dist/esm/src/wallet/utilityHelpers.js +275 -0
  396. package/dist/esm/src/wallet/utilityHelpers.js.map +1 -0
  397. package/dist/esm/src/wallet/validationHelpers.js +566 -0
  398. package/dist/esm/src/wallet/validationHelpers.js.map +1 -0
  399. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  400. package/dist/types/src/auth/__tests/Peer.test.d.ts +2 -0
  401. package/dist/types/src/auth/__tests/Peer.test.d.ts.map +1 -0
  402. package/dist/types/src/auth/__tests/SessionManager.test.d.ts +2 -0
  403. package/dist/types/src/auth/__tests/SessionManager.test.d.ts.map +1 -0
  404. package/dist/types/src/auth/certificates/__tests/Certificate.test.d.ts +2 -0
  405. package/dist/types/src/auth/certificates/__tests/Certificate.test.d.ts.map +1 -0
  406. package/dist/types/src/auth/certificates/__tests/MasterCertificate.test.d.ts +2 -0
  407. package/dist/types/src/auth/certificates/__tests/MasterCertificate.test.d.ts.map +1 -0
  408. package/dist/types/src/auth/certificates/__tests/VerifiableCertificate.test.d.ts +2 -0
  409. package/dist/types/src/auth/certificates/__tests/VerifiableCertificate.test.d.ts.map +1 -0
  410. package/dist/types/src/auth/utils/__tests/cryptononce.test.d.ts +2 -0
  411. package/dist/types/src/auth/utils/__tests/cryptononce.test.d.ts.map +1 -0
  412. package/dist/types/src/auth/utils/__tests/getVerifiableCertificates.test.d.ts +2 -0
  413. package/dist/types/src/auth/utils/__tests/getVerifiableCertificates.test.d.ts.map +1 -0
  414. package/dist/types/src/auth/utils/__tests/validateCertificates.test.d.ts +2 -0
  415. package/dist/types/src/auth/utils/__tests/validateCertificates.test.d.ts.map +1 -0
  416. package/dist/types/src/auth/utils/certificateHelpers.d.ts +26 -0
  417. package/dist/types/src/auth/utils/certificateHelpers.d.ts.map +1 -0
  418. package/dist/types/src/compat/__tests/BSM.test.d.ts +2 -0
  419. package/dist/types/src/compat/__tests/BSM.test.d.ts.map +1 -0
  420. package/dist/types/src/compat/__tests/ECIES.test.d.ts +2 -0
  421. package/dist/types/src/compat/__tests/ECIES.test.d.ts.map +1 -0
  422. package/dist/types/src/compat/__tests/HD.test.d.ts +2 -0
  423. package/dist/types/src/compat/__tests/HD.test.d.ts.map +1 -0
  424. package/dist/types/src/compat/__tests/Mnemonic.test.d.ts +2 -0
  425. package/dist/types/src/compat/__tests/Mnemonic.test.d.ts.map +1 -0
  426. package/dist/types/src/compat/__tests/Mnemonic.vectors.d.ts +11 -0
  427. package/dist/types/src/compat/__tests/Mnemonic.vectors.d.ts.map +1 -0
  428. package/dist/types/src/messages/__tests/EncryptedMessage.test.d.ts +2 -0
  429. package/dist/types/src/messages/__tests/EncryptedMessage.test.d.ts.map +1 -0
  430. package/dist/types/src/messages/__tests/SignedMessage.test.d.ts +2 -0
  431. package/dist/types/src/messages/__tests/SignedMessage.test.d.ts.map +1 -0
  432. package/dist/types/src/overlay-tools/__tests/LookupResolver.test.d.ts +2 -0
  433. package/dist/types/src/overlay-tools/__tests/LookupResolver.test.d.ts.map +1 -0
  434. package/dist/types/src/overlay-tools/__tests/OverlayAdminTokenTemplate.test.d.ts +2 -0
  435. package/dist/types/src/overlay-tools/__tests/OverlayAdminTokenTemplate.test.d.ts.map +1 -0
  436. package/dist/types/src/overlay-tools/__tests/SHIPBroadcaster.test.d.ts +2 -0
  437. package/dist/types/src/overlay-tools/__tests/SHIPBroadcaster.test.d.ts.map +1 -0
  438. package/dist/types/src/primitives/__tests/AESGCM.test.d.ts +2 -0
  439. package/dist/types/src/primitives/__tests/AESGCM.test.d.ts.map +1 -0
  440. package/dist/types/src/primitives/__tests/BRC42.private.vectors.d.ts +8 -0
  441. package/dist/types/src/primitives/__tests/BRC42.private.vectors.d.ts.map +1 -0
  442. package/dist/types/src/primitives/__tests/BRC42.public.vectors.d.ts +8 -0
  443. package/dist/types/src/primitives/__tests/BRC42.public.vectors.d.ts.map +1 -0
  444. package/dist/types/src/primitives/__tests/BigNumber.arithmatic.test.d.ts +2 -0
  445. package/dist/types/src/primitives/__tests/BigNumber.arithmatic.test.d.ts.map +1 -0
  446. package/dist/types/src/primitives/__tests/BigNumber.binary.test.d.ts +2 -0
  447. package/dist/types/src/primitives/__tests/BigNumber.binary.test.d.ts.map +1 -0
  448. package/dist/types/src/primitives/__tests/BigNumber.constructor.test.d.ts +2 -0
  449. package/dist/types/src/primitives/__tests/BigNumber.constructor.test.d.ts.map +1 -0
  450. package/dist/types/src/primitives/__tests/BigNumber.dhGroup.test.d.ts +2 -0
  451. package/dist/types/src/primitives/__tests/BigNumber.dhGroup.test.d.ts.map +1 -0
  452. package/dist/types/src/primitives/__tests/BigNumber.fixtures.d.ts +15 -0
  453. package/dist/types/src/primitives/__tests/BigNumber.fixtures.d.ts.map +1 -0
  454. package/dist/types/src/primitives/__tests/BigNumber.serializers.test.d.ts +2 -0
  455. package/dist/types/src/primitives/__tests/BigNumber.serializers.test.d.ts.map +1 -0
  456. package/dist/types/src/primitives/__tests/BigNumber.utils.test.d.ts +2 -0
  457. package/dist/types/src/primitives/__tests/BigNumber.utils.test.d.ts.map +1 -0
  458. package/dist/types/src/primitives/__tests/Curve.unit.test.d.ts +2 -0
  459. package/dist/types/src/primitives/__tests/Curve.unit.test.d.ts.map +1 -0
  460. package/dist/types/src/primitives/__tests/DRBG.test.d.ts +2 -0
  461. package/dist/types/src/primitives/__tests/DRBG.test.d.ts.map +1 -0
  462. package/dist/types/src/primitives/__tests/DRBG.vectors.d.ts +10 -0
  463. package/dist/types/src/primitives/__tests/DRBG.vectors.d.ts.map +1 -0
  464. package/dist/types/src/primitives/__tests/ECDH.test.d.ts +2 -0
  465. package/dist/types/src/primitives/__tests/ECDH.test.d.ts.map +1 -0
  466. package/dist/types/src/primitives/__tests/ECDSA.test.d.ts +2 -0
  467. package/dist/types/src/primitives/__tests/ECDSA.test.d.ts.map +1 -0
  468. package/dist/types/src/primitives/__tests/HMAC.test.d.ts +2 -0
  469. package/dist/types/src/primitives/__tests/HMAC.test.d.ts.map +1 -0
  470. package/dist/types/src/primitives/__tests/Hash.test.d.ts +2 -0
  471. package/dist/types/src/primitives/__tests/Hash.test.d.ts.map +1 -0
  472. package/dist/types/src/primitives/__tests/PBKDF2.vectors.d.ts +68 -0
  473. package/dist/types/src/primitives/__tests/PBKDF2.vectors.d.ts.map +1 -0
  474. package/dist/types/src/primitives/__tests/PrivateKey.split.test.d.ts +2 -0
  475. package/dist/types/src/primitives/__tests/PrivateKey.split.test.d.ts.map +1 -0
  476. package/dist/types/src/primitives/__tests/PrivateKey.test.d.ts +2 -0
  477. package/dist/types/src/primitives/__tests/PrivateKey.test.d.ts.map +1 -0
  478. package/dist/types/src/primitives/__tests/PublicKey.test.d.ts +2 -0
  479. package/dist/types/src/primitives/__tests/PublicKey.test.d.ts.map +1 -0
  480. package/dist/types/src/primitives/__tests/Random.test.d.ts +2 -0
  481. package/dist/types/src/primitives/__tests/Random.test.d.ts.map +1 -0
  482. package/dist/types/src/primitives/__tests/Reader.test.d.ts +2 -0
  483. package/dist/types/src/primitives/__tests/Reader.test.d.ts.map +1 -0
  484. package/dist/types/src/primitives/__tests/ReductionContext.test.d.ts +2 -0
  485. package/dist/types/src/primitives/__tests/ReductionContext.test.d.ts.map +1 -0
  486. package/dist/types/src/primitives/__tests/Schnorr.test.d.ts +2 -0
  487. package/dist/types/src/primitives/__tests/Schnorr.test.d.ts.map +1 -0
  488. package/dist/types/src/primitives/__tests/SymmetricKey.test.d.ts +2 -0
  489. package/dist/types/src/primitives/__tests/SymmetricKey.test.d.ts.map +1 -0
  490. package/dist/types/src/primitives/__tests/SymmetricKey.vectors.d.ts +20 -0
  491. package/dist/types/src/primitives/__tests/SymmetricKey.vectors.d.ts.map +1 -0
  492. package/dist/types/src/primitives/__tests/Writer.test.d.ts +2 -0
  493. package/dist/types/src/primitives/__tests/Writer.test.d.ts.map +1 -0
  494. package/dist/types/src/primitives/__tests/bug-31.test.d.ts +2 -0
  495. package/dist/types/src/primitives/__tests/bug-31.test.d.ts.map +1 -0
  496. package/dist/types/src/primitives/__tests/sighash.vectors.d.ts +3 -0
  497. package/dist/types/src/primitives/__tests/sighash.vectors.d.ts.map +1 -0
  498. package/dist/types/src/primitives/__tests/utils.test.d.ts +2 -0
  499. package/dist/types/src/primitives/__tests/utils.test.d.ts.map +1 -0
  500. package/dist/types/src/script/__tests/Script.test.d.ts +2 -0
  501. package/dist/types/src/script/__tests/Script.test.d.ts.map +1 -0
  502. package/dist/types/src/script/__tests/Spend.test.d.ts +2 -0
  503. package/dist/types/src/script/__tests/Spend.test.d.ts.map +1 -0
  504. package/dist/types/src/script/__tests/SpendComplex.test.d.ts +2 -0
  505. package/dist/types/src/script/__tests/SpendComplex.test.d.ts.map +1 -0
  506. package/dist/types/src/script/__tests/script.invalid.vectors.d.ts +3 -0
  507. package/dist/types/src/script/__tests/script.invalid.vectors.d.ts.map +1 -0
  508. package/dist/types/src/script/__tests/script.valid.vectors.d.ts +3 -0
  509. package/dist/types/src/script/__tests/script.valid.vectors.d.ts.map +1 -0
  510. package/dist/types/src/script/__tests/spend.valid.vectors.d.ts +3 -0
  511. package/dist/types/src/script/__tests/spend.valid.vectors.d.ts.map +1 -0
  512. package/dist/types/src/script/templates/__tests/PushDrop.test.d.ts +2 -0
  513. package/dist/types/src/script/templates/__tests/PushDrop.test.d.ts.map +1 -0
  514. package/dist/types/src/totp/__tests/totp.test.d.ts +2 -0
  515. package/dist/types/src/totp/__tests/totp.test.d.ts.map +1 -0
  516. package/dist/types/src/transaction/__tests/Beef.test.d.ts +2 -0
  517. package/dist/types/src/transaction/__tests/Beef.test.d.ts.map +1 -0
  518. package/dist/types/src/transaction/__tests/MerklePath.test.d.ts +2 -0
  519. package/dist/types/src/transaction/__tests/MerklePath.test.d.ts.map +1 -0
  520. package/dist/types/src/transaction/__tests/Transaction.benchmarks.test.d.ts +2 -0
  521. package/dist/types/src/transaction/__tests/Transaction.benchmarks.test.d.ts.map +1 -0
  522. package/dist/types/src/transaction/__tests/Transaction.test.d.ts +2 -0
  523. package/dist/types/src/transaction/__tests/Transaction.test.d.ts.map +1 -0
  524. package/dist/types/src/transaction/__tests/bigtx.vectors.d.ts +6 -0
  525. package/dist/types/src/transaction/__tests/bigtx.vectors.d.ts.map +1 -0
  526. package/dist/types/src/transaction/__tests/bump.invalid.vectors.d.ts +6 -0
  527. package/dist/types/src/transaction/__tests/bump.invalid.vectors.d.ts.map +1 -0
  528. package/dist/types/src/transaction/__tests/bump.valid.vectors.d.ts +5 -0
  529. package/dist/types/src/transaction/__tests/bump.valid.vectors.d.ts.map +1 -0
  530. package/dist/types/src/transaction/__tests/tx.invalid.vectors.d.ts +3 -0
  531. package/dist/types/src/transaction/__tests/tx.invalid.vectors.d.ts.map +1 -0
  532. package/dist/types/src/transaction/__tests/tx.valid.vectors.d.ts +3 -0
  533. package/dist/types/src/transaction/__tests/tx.valid.vectors.d.ts.map +1 -0
  534. package/dist/types/src/transaction/broadcasters/__tests/ARC.test.d.ts +2 -0
  535. package/dist/types/src/transaction/broadcasters/__tests/ARC.test.d.ts.map +1 -0
  536. package/dist/types/src/transaction/broadcasters/__tests/WhatsOnChainBroadcaster.test.d.ts +2 -0
  537. package/dist/types/src/transaction/broadcasters/__tests/WhatsOnChainBroadcaster.test.d.ts.map +1 -0
  538. package/dist/types/src/transaction/chaintrackers/__tests/WhatsOnChainChainTracker.test.d.ts +2 -0
  539. package/dist/types/src/transaction/chaintrackers/__tests/WhatsOnChainChainTracker.test.d.ts.map +1 -0
  540. package/dist/types/src/wallet/ScriptTemplateSABPPP.d.ts +25 -0
  541. package/dist/types/src/wallet/ScriptTemplateSABPPP.d.ts.map +1 -0
  542. package/dist/types/src/wallet/WalletSigner.d.ts +110 -0
  543. package/dist/types/src/wallet/WalletSigner.d.ts.map +1 -0
  544. package/dist/types/src/wallet/__tests/CachedKeyDeriver.test.d.ts +2 -0
  545. package/dist/types/src/wallet/__tests/CachedKeyDeriver.test.d.ts.map +1 -0
  546. package/dist/types/src/wallet/__tests/KeyDeriver.test.d.ts +2 -0
  547. package/dist/types/src/wallet/__tests/KeyDeriver.test.d.ts.map +1 -0
  548. package/dist/types/src/wallet/__tests/ProtoWallet.test.d.ts +2 -0
  549. package/dist/types/src/wallet/__tests/ProtoWallet.test.d.ts.map +1 -0
  550. package/dist/types/src/wallet/createActionSdk.d.ts +8 -0
  551. package/dist/types/src/wallet/createActionSdk.d.ts.map +1 -0
  552. package/dist/types/src/wallet/sdk/CachedKeyDeriver.d.ts +94 -0
  553. package/dist/types/src/wallet/sdk/CachedKeyDeriver.d.ts.map +1 -0
  554. package/dist/types/src/wallet/sdk/CertOps.d.ts +63 -0
  555. package/dist/types/src/wallet/sdk/CertOps.d.ts.map +1 -0
  556. package/dist/types/src/wallet/sdk/Certificate.d.ts +77 -0
  557. package/dist/types/src/wallet/sdk/Certificate.d.ts.map +1 -0
  558. package/dist/types/src/wallet/sdk/KeyDeriver.d.ts +128 -0
  559. package/dist/types/src/wallet/sdk/KeyDeriver.d.ts.map +1 -0
  560. package/dist/types/src/wallet/sdk/ProtoWallet.d.ts +30 -0
  561. package/dist/types/src/wallet/sdk/ProtoWallet.d.ts.map +1 -0
  562. package/dist/types/src/wallet/sdk/StorageSyncReader.d.ts +102 -0
  563. package/dist/types/src/wallet/sdk/StorageSyncReader.d.ts.map +1 -0
  564. package/dist/types/src/wallet/sdk/WERR_errors.d.ts +84 -0
  565. package/dist/types/src/wallet/sdk/WERR_errors.d.ts.map +1 -0
  566. package/dist/types/src/wallet/sdk/Wallet.interfaces.d.ts +1036 -0
  567. package/dist/types/src/wallet/sdk/Wallet.interfaces.d.ts.map +1 -0
  568. package/dist/types/src/wallet/sdk/WalletCrypto.d.ts +31 -0
  569. package/dist/types/src/wallet/sdk/WalletCrypto.d.ts.map +1 -0
  570. package/dist/types/src/wallet/sdk/WalletError.d.ts +46 -0
  571. package/dist/types/src/wallet/sdk/WalletError.d.ts.map +1 -0
  572. package/dist/types/src/wallet/sdk/WalletServices.interfaces.d.ts +293 -0
  573. package/dist/types/src/wallet/sdk/WalletServices.interfaces.d.ts.map +1 -0
  574. package/dist/types/src/wallet/sdk/WalletSigner.interfaces.d.ts +48 -0
  575. package/dist/types/src/wallet/sdk/WalletSigner.interfaces.d.ts.map +1 -0
  576. package/dist/types/src/wallet/sdk/WalletStorage.interfaces.d.ts +296 -0
  577. package/dist/types/src/wallet/sdk/WalletStorage.interfaces.d.ts.map +1 -0
  578. package/dist/types/src/wallet/sdk/index.d.ts +15 -0
  579. package/dist/types/src/wallet/sdk/index.d.ts.map +1 -0
  580. package/dist/types/src/wallet/sdk/types.d.ts +56 -0
  581. package/dist/types/src/wallet/sdk/types.d.ts.map +1 -0
  582. package/dist/types/src/wallet/sdk/validationHelpers.d.ts +301 -0
  583. package/dist/types/src/wallet/sdk/validationHelpers.d.ts.map +1 -0
  584. package/dist/types/src/wallet/substrates/HTTPWalletJSON.d.ts.map +1 -1
  585. package/dist/types/src/wallet/substrates/__tests/WalletWire.integration.test.d.ts +2 -0
  586. package/dist/types/src/wallet/substrates/__tests/WalletWire.integration.test.d.ts.map +1 -0
  587. package/dist/types/src/wallet/substrates/__tests/XDM.test.d.ts +5 -0
  588. package/dist/types/src/wallet/substrates/__tests/XDM.test.d.ts.map +1 -0
  589. package/dist/types/src/wallet/substrates/utils/toOriginHeader.d.ts +2 -0
  590. package/dist/types/src/wallet/substrates/utils/toOriginHeader.d.ts.map +1 -0
  591. package/dist/types/src/wallet/utilityHelpers.d.ts +142 -0
  592. package/dist/types/src/wallet/utilityHelpers.d.ts.map +1 -0
  593. package/dist/types/src/wallet/validationHelpers.d.ts +301 -0
  594. package/dist/types/src/wallet/validationHelpers.d.ts.map +1 -0
  595. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  596. package/dist/umd/bundle.js +1 -1
  597. package/docs/wallet.md +9 -0
  598. package/package.json +4 -4
  599. package/src/transaction/__tests/Transaction.test.ts +1 -1
  600. package/src/wallet/substrates/HTTPWalletJSON.ts +11 -1
  601. package/src/wallet/substrates/WalletWireProcessor.ts +1 -1
  602. package/src/wallet/substrates/__tests/toOriginHeader.test.ts +34 -0
  603. package/src/wallet/substrates/utils/toOriginHeader.ts +15 -0
@@ -0,0 +1,1962 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ const CompletedProtoWallet_1 = require("../../../auth/certificates/__tests/CompletedProtoWallet");
7
+ const index_1 = require("../../../primitives/index");
8
+ const WalletWireTransceiver_1 = __importDefault(require("../../../wallet/substrates/WalletWireTransceiver"));
9
+ const WalletWireProcessor_1 = __importDefault(require("../../../wallet/substrates/WalletWireProcessor"));
10
+ const sampleData = [3, 1, 4, 1, 5, 9];
11
+ describe('WalletWire Integration Tests', () => {
12
+ /**
13
+ * This is a copy of the test suite for CompletedProtoWallet, but instead of using a CompletedProtoWallet directly, we're using it over the WalletWire.
14
+ * This serves as an imperfect but still useful way to ensure that the WalletWire doesn't contain serialization or deserialization issues.
15
+ */
16
+ describe('ProtoWallet Over Wallet Wire', () => {
17
+ it('Throws when functions are not supported', async () => {
18
+ const wallet = new WalletWireTransceiver_1.default(new WalletWireProcessor_1.default(new CompletedProtoWallet_1.CompletedProtoWallet('anyone')));
19
+ await expect(() => {
20
+ return wallet.createAction();
21
+ }).rejects.toThrow();
22
+ await expect(() => {
23
+ return wallet.abortAction();
24
+ }).rejects.toThrow();
25
+ await expect(() => {
26
+ return wallet.signAction();
27
+ }).rejects.toThrow();
28
+ await expect(() => {
29
+ return wallet.listOutputs();
30
+ }).rejects.toThrow();
31
+ await expect(() => {
32
+ return wallet.relinquishOutput();
33
+ }).rejects.toThrow();
34
+ await expect(() => {
35
+ return wallet.listActions();
36
+ }).rejects.toThrow();
37
+ await expect(() => {
38
+ return wallet.internalizeAction();
39
+ }).rejects.toThrow();
40
+ await expect(() => {
41
+ return wallet.acquireCertificate();
42
+ }).rejects.toThrow();
43
+ await expect(() => {
44
+ return wallet.proveCertificate();
45
+ }).rejects.toThrow();
46
+ await expect(() => {
47
+ return wallet.listCertificates();
48
+ }).rejects.toThrow();
49
+ await expect(() => {
50
+ return wallet.relinquishCertificate();
51
+ }).rejects.toThrow();
52
+ await expect(() => {
53
+ return wallet.getHeight();
54
+ }).rejects.toThrow();
55
+ await expect(() => {
56
+ return wallet.getHeaderForHeight();
57
+ }).rejects.toThrow();
58
+ // TODO: Remove these two from the throw list once they are implemented.
59
+ await expect(() => {
60
+ return wallet.discoverByIdentityKey();
61
+ }).rejects.toThrow();
62
+ await expect(() => {
63
+ return wallet.discoverByAttributes();
64
+ }).rejects.toThrow();
65
+ });
66
+ it('Validates the BRC-3 compliance vector', async () => {
67
+ const wallet = new WalletWireTransceiver_1.default(new WalletWireProcessor_1.default(new CompletedProtoWallet_1.CompletedProtoWallet('anyone')));
68
+ const { valid } = await wallet.verifySignature({
69
+ data: index_1.Utils.toArray('BRC-3 Compliance Validated!', 'utf8'),
70
+ signature: [
71
+ 48, 68, 2, 32, 43, 34, 58, 156, 219, 32, 50, 70, 29, 240, 155, 137,
72
+ 88, 60, 200, 95, 243, 198, 201, 21, 56, 82, 141, 112, 69, 196, 170,
73
+ 73, 156, 6, 44, 48, 2, 32, 118, 125, 254, 201, 44, 87, 177, 170, 93,
74
+ 11, 193, 134, 18, 70, 9, 31, 234, 27, 170, 177, 54, 96, 181, 140, 166,
75
+ 196, 144, 14, 230, 118, 106, 105
76
+ ],
77
+ protocolID: [2, 'BRC3 Test'],
78
+ keyID: '42',
79
+ counterparty: '0294c479f762f6baa97fbcd4393564c1d7bd8336ebd15928135bbcf575cd1a71a1'
80
+ });
81
+ expect(valid).toBe(true);
82
+ });
83
+ it('Validates the BRC-2 HMAC compliance vector', async () => {
84
+ const wallet = new WalletWireTransceiver_1.default(new WalletWireProcessor_1.default(new CompletedProtoWallet_1.CompletedProtoWallet(new index_1.PrivateKey('6a2991c9de20e38b31d7ea147bf55f5039e4bbc073160f5e0d541d1f17e321b8', 'hex'))));
85
+ const { valid } = await wallet.verifyHmac({
86
+ data: index_1.Utils.toArray('BRC-2 HMAC Compliance Validated!', 'utf8'),
87
+ hmac: [
88
+ 81, 240, 18, 153, 163, 45, 174, 85, 9, 246, 142, 125, 209, 133, 82,
89
+ 76, 254, 103, 46, 182, 86, 59, 219, 61, 126, 30, 176, 232, 233, 100,
90
+ 234, 14
91
+ ],
92
+ protocolID: [2, 'BRC2 Test'],
93
+ keyID: '42',
94
+ counterparty: '0294c479f762f6baa97fbcd4393564c1d7bd8336ebd15928135bbcf575cd1a71a1'
95
+ });
96
+ expect(valid).toBe(true);
97
+ });
98
+ it('Validates the BRC-2 Encryption compliance vector', async () => {
99
+ const wallet = new WalletWireTransceiver_1.default(new WalletWireProcessor_1.default(new CompletedProtoWallet_1.CompletedProtoWallet(new index_1.PrivateKey('6a2991c9de20e38b31d7ea147bf55f5039e4bbc073160f5e0d541d1f17e321b8', 'hex'))));
100
+ const { plaintext } = await wallet.decrypt({
101
+ ciphertext: [
102
+ 252, 203, 216, 184, 29, 161, 223, 212, 16, 193, 94, 99, 31, 140, 99,
103
+ 43, 61, 236, 184, 67, 54, 105, 199, 47, 11, 19, 184, 127, 2, 165, 125,
104
+ 9, 188, 195, 196, 39, 120, 130, 213, 95, 186, 89, 64, 28, 1, 80, 20,
105
+ 213, 159, 133, 98, 253, 128, 105, 113, 247, 197, 152, 236, 64, 166,
106
+ 207, 113, 134, 65, 38, 58, 24, 127, 145, 140, 206, 47, 70, 146, 84,
107
+ 186, 72, 95, 35, 154, 112, 178, 55, 72, 124
108
+ ],
109
+ protocolID: [2, 'BRC2 Test'],
110
+ keyID: '42',
111
+ counterparty: '0294c479f762f6baa97fbcd4393564c1d7bd8336ebd15928135bbcf575cd1a71a1'
112
+ });
113
+ expect(index_1.Utils.toUTF8(plaintext)).toEqual('BRC-2 Encryption Compliance Validated!');
114
+ });
115
+ it('Encrypts messages decryptable by the counterparty', async () => {
116
+ const userKey = index_1.PrivateKey.fromRandom();
117
+ const counterpartyKey = index_1.PrivateKey.fromRandom();
118
+ const user = new WalletWireTransceiver_1.default(new WalletWireProcessor_1.default(new CompletedProtoWallet_1.CompletedProtoWallet(userKey)));
119
+ const counterparty = new WalletWireTransceiver_1.default(new WalletWireProcessor_1.default(new CompletedProtoWallet_1.CompletedProtoWallet(counterpartyKey)));
120
+ const { ciphertext } = await user.encrypt({
121
+ plaintext: sampleData,
122
+ protocolID: [2, 'tests'],
123
+ keyID: '4',
124
+ counterparty: counterpartyKey.toPublicKey().toString()
125
+ });
126
+ const { plaintext } = await counterparty.decrypt({
127
+ ciphertext,
128
+ protocolID: [2, 'tests'],
129
+ keyID: '4',
130
+ counterparty: userKey.toPublicKey().toString()
131
+ });
132
+ expect(plaintext).toEqual(sampleData);
133
+ expect(ciphertext).not.toEqual(plaintext);
134
+ });
135
+ it('Fails to decryupt messages for the wrong protocol, key, and counterparty', async () => {
136
+ const userKey = index_1.PrivateKey.fromRandom();
137
+ const counterpartyKey = index_1.PrivateKey.fromRandom();
138
+ const user = new WalletWireTransceiver_1.default(new WalletWireProcessor_1.default(new CompletedProtoWallet_1.CompletedProtoWallet(userKey)));
139
+ const counterparty = new WalletWireTransceiver_1.default(new WalletWireProcessor_1.default(new CompletedProtoWallet_1.CompletedProtoWallet(counterpartyKey)));
140
+ const { ciphertext } = await user.encrypt({
141
+ plaintext: sampleData,
142
+ protocolID: [2, 'tests'],
143
+ keyID: '4',
144
+ counterparty: counterpartyKey.toPublicKey().toString()
145
+ });
146
+ await expect(async () => await counterparty.decrypt({
147
+ ciphertext,
148
+ protocolID: [1, 'tests'],
149
+ keyID: '4',
150
+ counterparty: userKey.toPublicKey().toString()
151
+ })).rejects.toThrow();
152
+ await expect(async () => await counterparty.decrypt({
153
+ ciphertext,
154
+ protocolID: [2, 'tests'],
155
+ keyID: '5',
156
+ counterparty: userKey.toPublicKey().toString()
157
+ })).rejects.toThrow();
158
+ await expect(async () => await counterparty.decrypt({
159
+ ciphertext,
160
+ protocolID: [2, 'tests'],
161
+ keyID: '4',
162
+ counterparty: counterpartyKey.toPublicKey().toString()
163
+ })).rejects.toThrow();
164
+ });
165
+ it('Correctly derives keys for a counterparty', async () => {
166
+ const userKey = index_1.PrivateKey.fromRandom();
167
+ const counterpartyKey = index_1.PrivateKey.fromRandom();
168
+ const user = new WalletWireTransceiver_1.default(new WalletWireProcessor_1.default(new CompletedProtoWallet_1.CompletedProtoWallet(userKey)));
169
+ const counterparty = new WalletWireTransceiver_1.default(new WalletWireProcessor_1.default(new CompletedProtoWallet_1.CompletedProtoWallet(counterpartyKey)));
170
+ const { publicKey: identityKey } = await user.getPublicKey({
171
+ identityKey: true
172
+ });
173
+ expect(identityKey).toEqual(userKey.toPublicKey().toString());
174
+ const { publicKey: derivedForCounterparty } = await user.getPublicKey({
175
+ protocolID: [2, 'tests'],
176
+ keyID: '4',
177
+ counterparty: counterpartyKey.toPublicKey().toString()
178
+ });
179
+ const { publicKey: derivedByCounterparty } = await counterparty.getPublicKey({
180
+ protocolID: [2, 'tests'],
181
+ keyID: '4',
182
+ counterparty: userKey.toPublicKey().toString(),
183
+ forSelf: true
184
+ });
185
+ expect(derivedForCounterparty).toEqual(derivedByCounterparty);
186
+ });
187
+ it('Signs messages verifiable by the counterparty', async () => {
188
+ const userKey = index_1.PrivateKey.fromRandom();
189
+ const counterpartyKey = index_1.PrivateKey.fromRandom();
190
+ const user = new WalletWireTransceiver_1.default(new WalletWireProcessor_1.default(new CompletedProtoWallet_1.CompletedProtoWallet(userKey)));
191
+ const counterparty = new WalletWireTransceiver_1.default(new WalletWireProcessor_1.default(new CompletedProtoWallet_1.CompletedProtoWallet(counterpartyKey)));
192
+ const { signature } = await user.createSignature({
193
+ data: sampleData,
194
+ protocolID: [2, 'tests'],
195
+ keyID: '4',
196
+ counterparty: counterpartyKey.toPublicKey().toString()
197
+ });
198
+ const { valid } = await counterparty.verifySignature({
199
+ signature,
200
+ data: sampleData,
201
+ protocolID: [2, 'tests'],
202
+ keyID: '4',
203
+ counterparty: userKey.toPublicKey().toString()
204
+ });
205
+ expect(valid).toEqual(true);
206
+ expect(signature.length).not.toEqual(0);
207
+ });
208
+ it('Directly signs hash of message verifiable by the counterparty', async () => {
209
+ const userKey = index_1.PrivateKey.fromRandom();
210
+ const counterpartyKey = index_1.PrivateKey.fromRandom();
211
+ const user = new WalletWireTransceiver_1.default(new WalletWireProcessor_1.default(new CompletedProtoWallet_1.CompletedProtoWallet(userKey)));
212
+ const counterparty = new WalletWireTransceiver_1.default(new WalletWireProcessor_1.default(new CompletedProtoWallet_1.CompletedProtoWallet(counterpartyKey)));
213
+ const { signature } = await user.createSignature({
214
+ hashToDirectlySign: index_1.Hash.sha256(sampleData),
215
+ protocolID: [2, 'tests'],
216
+ keyID: '4',
217
+ counterparty: counterpartyKey.toPublicKey().toString()
218
+ });
219
+ const { valid } = await counterparty.verifySignature({
220
+ signature,
221
+ data: sampleData,
222
+ protocolID: [2, 'tests'],
223
+ keyID: '4',
224
+ counterparty: userKey.toPublicKey().toString()
225
+ });
226
+ expect(valid).toEqual(true);
227
+ const { valid: hashValid } = await counterparty.verifySignature({
228
+ signature,
229
+ hashToDirectlyVerify: index_1.Hash.sha256(sampleData),
230
+ protocolID: [2, 'tests'],
231
+ keyID: '4',
232
+ counterparty: userKey.toPublicKey().toString()
233
+ });
234
+ expect(hashValid).toEqual(true);
235
+ expect(signature.length).not.toEqual(0);
236
+ });
237
+ it('Fails to verify signature for the wrong data, protocol, key, and counterparty', async () => {
238
+ const userKey = index_1.PrivateKey.fromRandom();
239
+ const counterpartyKey = index_1.PrivateKey.fromRandom();
240
+ const user = new WalletWireTransceiver_1.default(new WalletWireProcessor_1.default(new CompletedProtoWallet_1.CompletedProtoWallet(userKey)));
241
+ const counterparty = new WalletWireTransceiver_1.default(new WalletWireProcessor_1.default(new CompletedProtoWallet_1.CompletedProtoWallet(counterpartyKey)));
242
+ const { signature } = await user.createSignature({
243
+ data: sampleData,
244
+ protocolID: [2, 'tests'],
245
+ keyID: '4',
246
+ counterparty: counterpartyKey.toPublicKey().toString()
247
+ });
248
+ await expect(async () => await counterparty.verifySignature({
249
+ signature,
250
+ data: [0, ...sampleData],
251
+ protocolID: [2, 'tests'],
252
+ keyID: '4',
253
+ counterparty: userKey.toPublicKey().toString()
254
+ })).rejects.toThrow();
255
+ await expect(async () => await counterparty.verifySignature({
256
+ signature,
257
+ data: sampleData,
258
+ protocolID: [2, 'wrong'],
259
+ keyID: '4',
260
+ counterparty: userKey.toPublicKey().toString()
261
+ })).rejects.toThrow();
262
+ await expect(async () => await counterparty.verifySignature({
263
+ signature,
264
+ data: sampleData,
265
+ protocolID: [2, 'tests'],
266
+ keyID: '2',
267
+ counterparty: userKey.toPublicKey().toString()
268
+ })).rejects.toThrow();
269
+ await expect(async () => await counterparty.verifySignature({
270
+ signature,
271
+ data: sampleData,
272
+ protocolID: [2, 'tests'],
273
+ keyID: '4',
274
+ counterparty: counterpartyKey.toPublicKey().toString()
275
+ })).rejects.toThrow();
276
+ });
277
+ it('Computes HMAC over messages verifiable by the counterparty', async () => {
278
+ const userKey = index_1.PrivateKey.fromRandom();
279
+ const counterpartyKey = index_1.PrivateKey.fromRandom();
280
+ const user = new WalletWireTransceiver_1.default(new WalletWireProcessor_1.default(new CompletedProtoWallet_1.CompletedProtoWallet(userKey)));
281
+ const counterparty = new WalletWireTransceiver_1.default(new WalletWireProcessor_1.default(new CompletedProtoWallet_1.CompletedProtoWallet(counterpartyKey)));
282
+ const { hmac } = await user.createHmac({
283
+ data: sampleData,
284
+ protocolID: [2, 'tests'],
285
+ keyID: '4',
286
+ counterparty: counterpartyKey.toPublicKey().toString()
287
+ });
288
+ const { valid } = await counterparty.verifyHmac({
289
+ hmac,
290
+ data: sampleData,
291
+ protocolID: [2, 'tests'],
292
+ keyID: '4',
293
+ counterparty: userKey.toPublicKey().toString()
294
+ });
295
+ expect(valid).toEqual(true);
296
+ expect(hmac.length).toEqual(32);
297
+ });
298
+ it('Fails to verify HMAC for the wrong data, protocol, key, and counterparty', async () => {
299
+ const userKey = index_1.PrivateKey.fromRandom();
300
+ const counterpartyKey = index_1.PrivateKey.fromRandom();
301
+ const user = new WalletWireTransceiver_1.default(new WalletWireProcessor_1.default(new CompletedProtoWallet_1.CompletedProtoWallet(userKey)));
302
+ const counterparty = new WalletWireTransceiver_1.default(new WalletWireProcessor_1.default(new CompletedProtoWallet_1.CompletedProtoWallet(counterpartyKey)));
303
+ const { hmac } = await user.createHmac({
304
+ data: sampleData,
305
+ protocolID: [2, 'tests'],
306
+ keyID: '4',
307
+ counterparty: counterpartyKey.toPublicKey().toString()
308
+ });
309
+ await expect(async () => await counterparty.verifyHmac({
310
+ hmac,
311
+ data: [0, ...sampleData],
312
+ protocolID: [2, 'tests'],
313
+ keyID: '4',
314
+ counterparty: userKey.toPublicKey().toString()
315
+ })).rejects.toThrow();
316
+ await expect(async () => await counterparty.verifyHmac({
317
+ hmac,
318
+ data: sampleData,
319
+ protocolID: [2, 'wrong'],
320
+ keyID: '4',
321
+ counterparty: userKey.toPublicKey().toString()
322
+ })).rejects.toThrow();
323
+ await expect(async () => await counterparty.verifyHmac({
324
+ hmac,
325
+ data: sampleData,
326
+ protocolID: [2, 'tests'],
327
+ keyID: '2',
328
+ counterparty: userKey.toPublicKey().toString()
329
+ })).rejects.toThrow();
330
+ await expect(async () => await counterparty.verifyHmac({
331
+ hmac,
332
+ data: sampleData,
333
+ protocolID: [2, 'tests'],
334
+ keyID: '4',
335
+ counterparty: counterpartyKey.toPublicKey().toString()
336
+ })).rejects.toThrow();
337
+ });
338
+ it('Uses anyone for creating signatures and self for other operations if no counterparty is provided', async () => {
339
+ const userKey = index_1.PrivateKey.fromRandom();
340
+ const user = new WalletWireTransceiver_1.default(new WalletWireProcessor_1.default(new CompletedProtoWallet_1.CompletedProtoWallet(userKey)));
341
+ const { hmac } = await user.createHmac({
342
+ data: sampleData,
343
+ protocolID: [2, 'tests'],
344
+ keyID: '4'
345
+ });
346
+ const { valid: hmacValid } = await user.verifyHmac({
347
+ hmac,
348
+ data: sampleData,
349
+ protocolID: [2, 'tests'],
350
+ keyID: '4'
351
+ });
352
+ expect(hmacValid).toEqual(true);
353
+ const { valid: explicitSelfHmacValid } = await user.verifyHmac({
354
+ hmac,
355
+ data: sampleData,
356
+ protocolID: [2, 'tests'],
357
+ keyID: '4',
358
+ counterparty: 'self'
359
+ });
360
+ expect(explicitSelfHmacValid).toEqual(true);
361
+ expect(hmac.length).toEqual(32);
362
+ const { signature: anyoneSig } = await user.createSignature({
363
+ data: sampleData,
364
+ protocolID: [2, 'tests'],
365
+ keyID: '4'
366
+ // counterparty=anyone is implicit for creating signatures
367
+ });
368
+ const anyone = new WalletWireTransceiver_1.default(new WalletWireProcessor_1.default(new CompletedProtoWallet_1.CompletedProtoWallet('anyone')));
369
+ const { valid: anyoneSigValid } = await anyone.verifySignature({
370
+ signature: anyoneSig,
371
+ data: sampleData,
372
+ protocolID: [2, 'tests'],
373
+ keyID: '4',
374
+ counterparty: userKey.toPublicKey().toString()
375
+ });
376
+ expect(anyoneSigValid).toEqual(true);
377
+ const { signature: selfSig } = await user.createSignature({
378
+ data: sampleData,
379
+ protocolID: [2, 'tests'],
380
+ keyID: '4',
381
+ counterparty: 'self'
382
+ });
383
+ const { valid: selfSigValid } = await user.verifySignature({
384
+ signature: selfSig,
385
+ data: sampleData,
386
+ protocolID: [2, 'tests'],
387
+ keyID: '4'
388
+ // Self is implicit when verifying signatures
389
+ });
390
+ expect(selfSigValid).toEqual(true);
391
+ const { valid: explicitSelfSigValid } = await user.verifySignature({
392
+ signature: selfSig,
393
+ data: sampleData,
394
+ protocolID: [2, 'tests'],
395
+ keyID: '4',
396
+ counterparty: 'self'
397
+ });
398
+ expect(explicitSelfSigValid).toEqual(true);
399
+ const { publicKey } = await user.getPublicKey({
400
+ protocolID: [2, 'tests'],
401
+ keyID: '4'
402
+ });
403
+ const { publicKey: explicitSelfPublicKey } = await user.getPublicKey({
404
+ protocolID: [2, 'tests'],
405
+ keyID: '4',
406
+ counterparty: 'self'
407
+ });
408
+ expect(publicKey).toEqual(explicitSelfPublicKey);
409
+ const { ciphertext } = await user.encrypt({
410
+ plaintext: sampleData,
411
+ protocolID: [2, 'tests'],
412
+ keyID: '4'
413
+ });
414
+ const { plaintext } = await user.decrypt({
415
+ ciphertext,
416
+ protocolID: [2, 'tests'],
417
+ keyID: '4'
418
+ });
419
+ const { plaintext: explicitSelfPlaintext } = await user.decrypt({
420
+ ciphertext,
421
+ protocolID: [2, 'tests'],
422
+ keyID: '4',
423
+ counterparty: 'self'
424
+ });
425
+ expect(plaintext).toEqual(explicitSelfPlaintext);
426
+ expect(plaintext).toEqual(sampleData);
427
+ });
428
+ it('Validates the revealCounterpartyKeyLinkage function', async () => {
429
+ // Initialize keys
430
+ const proverKey = index_1.PrivateKey.fromRandom();
431
+ const counterpartyKey = index_1.PrivateKey.fromRandom();
432
+ const verifierKey = index_1.PrivateKey.fromRandom();
433
+ // Initialize wallets
434
+ const proverWallet = new WalletWireTransceiver_1.default(new WalletWireProcessor_1.default(new CompletedProtoWallet_1.CompletedProtoWallet(proverKey)));
435
+ const verifierWallet = new WalletWireTransceiver_1.default(new WalletWireProcessor_1.default(new CompletedProtoWallet_1.CompletedProtoWallet(verifierKey)));
436
+ // Prover reveals counterparty key linkage
437
+ const revelation = await proverWallet.revealCounterpartyKeyLinkage({
438
+ counterparty: counterpartyKey.toPublicKey().toString(),
439
+ verifier: verifierKey.toPublicKey().toString()
440
+ });
441
+ // Verifier decrypts the encrypted linkage
442
+ const { plaintext: linkage } = await verifierWallet.decrypt({
443
+ ciphertext: revelation.encryptedLinkage,
444
+ protocolID: [2, 'counterparty linkage revelation'],
445
+ keyID: revelation.revelationTime,
446
+ counterparty: proverKey.toPublicKey().toString()
447
+ });
448
+ // Compute expected linkage
449
+ const expectedLinkage = proverKey
450
+ .deriveSharedSecret(counterpartyKey.toPublicKey())
451
+ .encode(true);
452
+ // Compare linkage and expectedLinkage
453
+ expect(linkage).toEqual(expectedLinkage);
454
+ });
455
+ it('Validates the revealSpecificKeyLinkage function', async () => {
456
+ // Initialize keys
457
+ const proverKey = index_1.PrivateKey.fromRandom();
458
+ const counterpartyKey = index_1.PrivateKey.fromRandom();
459
+ const verifierKey = index_1.PrivateKey.fromRandom();
460
+ // Initialize wallets
461
+ const proverWallet = new WalletWireTransceiver_1.default(new WalletWireProcessor_1.default(new CompletedProtoWallet_1.CompletedProtoWallet(proverKey)));
462
+ const verifierWallet = new WalletWireTransceiver_1.default(new WalletWireProcessor_1.default(new CompletedProtoWallet_1.CompletedProtoWallet(verifierKey)));
463
+ const protocolID = [0, 'tests'];
464
+ const keyID = 'test key id';
465
+ // Prover reveals specific key linkage
466
+ const revelation = await proverWallet.revealSpecificKeyLinkage({
467
+ counterparty: counterpartyKey.toPublicKey().toString(),
468
+ verifier: verifierKey.toPublicKey().toString(),
469
+ protocolID,
470
+ keyID
471
+ });
472
+ expect(revelation.encryptedLinkageProof).toBeDefined();
473
+ expect(revelation.proofType).toBeDefined();
474
+ // Verifier decrypts the encrypted linkage
475
+ const { plaintext: linkage } = await verifierWallet.decrypt({
476
+ ciphertext: revelation.encryptedLinkage,
477
+ protocolID: [
478
+ 2,
479
+ `specific linkage revelation ${protocolID[0]} ${protocolID[1]}`
480
+ ],
481
+ keyID,
482
+ counterparty: proverKey.toPublicKey().toString()
483
+ });
484
+ // Compute expected linkage
485
+ const sharedSecret = proverKey
486
+ .deriveSharedSecret(counterpartyKey.toPublicKey())
487
+ .encode(true);
488
+ // Function to compute the invoice number
489
+ const computeInvoiceNumber = function (protocolID, keyID) {
490
+ const securityLevel = protocolID[0];
491
+ if (!Number.isInteger(securityLevel) ||
492
+ securityLevel < 0 ||
493
+ securityLevel > 2) {
494
+ throw new Error('Protocol security level must be 0, 1, or 2');
495
+ }
496
+ const protocolName = protocolID[1].toLowerCase().trim();
497
+ if (keyID.length > 800) {
498
+ throw new Error('Key IDs must be 800 characters or less');
499
+ }
500
+ if (keyID.length < 1) {
501
+ throw new Error('Key IDs must be 1 character or more');
502
+ }
503
+ if (protocolName.length > 400) {
504
+ throw new Error('Protocol names must be 400 characters or less');
505
+ }
506
+ if (protocolName.length < 5) {
507
+ throw new Error('Protocol names must be 5 characters or more');
508
+ }
509
+ if (protocolName.includes(' ')) {
510
+ throw new Error('Protocol names cannot contain multiple consecutive spaces (" ")');
511
+ }
512
+ if (!/^[a-z0-9 ]+$/g.test(protocolName)) {
513
+ throw new Error('Protocol names can only contain letters, numbers and spaces');
514
+ }
515
+ if (protocolName.endsWith(' protocol')) {
516
+ throw new Error('No need to end your protocol name with " protocol"');
517
+ }
518
+ return `${securityLevel}-${protocolName}-${keyID}`;
519
+ };
520
+ const invoiceNumber = computeInvoiceNumber(protocolID, keyID);
521
+ const invoiceNumberBin = index_1.Utils.toArray(invoiceNumber, 'utf8');
522
+ // Compute expected linkage
523
+ const expectedLinkage = index_1.Hash.sha256hmac(sharedSecret, invoiceNumberBin);
524
+ // Compare linkage and expectedLinkage
525
+ expect(linkage).toEqual(expectedLinkage);
526
+ });
527
+ });
528
+ // Helper function to create a test wallet wire setup
529
+ const createTestWalletWire = (wallet) => {
530
+ const processor = new WalletWireProcessor_1.default(wallet);
531
+ const transceiver = new WalletWireTransceiver_1.default(processor);
532
+ return transceiver;
533
+ };
534
+ // Mock implementation for methods not supported by CompletedProtoWallet
535
+ const mockUnsupportedMethods = (methods) => {
536
+ return {
537
+ ...methods
538
+ };
539
+ };
540
+ describe('createAction', () => {
541
+ it('should create an action with valid inputs', async () => {
542
+ // Mock the createAction method
543
+ const createActionMock = jest.fn().mockResolvedValue({
544
+ txid: 'deadbeef20248806deadbeef20248806deadbeef20248806deadbeef20248806',
545
+ tx: [1, 2, 3, 4]
546
+ });
547
+ const wallet = createTestWalletWire(mockUnsupportedMethods({
548
+ createAction: createActionMock
549
+ }));
550
+ const args = {
551
+ description: 'Test action description',
552
+ outputs: [
553
+ {
554
+ lockingScript: '00', // Sample locking script
555
+ satoshis: 1000,
556
+ outputDescription: 'Test output',
557
+ basket: 'test-basket',
558
+ customInstructions: 'Test instructions',
559
+ tags: ['test-tag']
560
+ }
561
+ ],
562
+ labels: ['test-label']
563
+ };
564
+ const result = await wallet.createAction(args);
565
+ expect(result).toHaveProperty('txid');
566
+ expect(result).toHaveProperty('tx');
567
+ expect(result.tx).toBeInstanceOf(Array);
568
+ expect(createActionMock).toHaveBeenCalledWith(args, '');
569
+ });
570
+ it('should create an action with minimal inputs (only description)', async () => {
571
+ // Mock the createAction method
572
+ const createActionMock = jest.fn().mockResolvedValue({
573
+ txid: 'deadbeef20248806deadbeef20248806deadbeef20248806deadbeef20248806'
574
+ });
575
+ const wallet = createTestWalletWire(mockUnsupportedMethods({
576
+ createAction: createActionMock
577
+ }));
578
+ const args = {
579
+ description: 'Minimal action description'
580
+ };
581
+ const result = await wallet.createAction(args);
582
+ expect(result).toHaveProperty('txid');
583
+ expect(result).not.toHaveProperty('tx');
584
+ expect(result).not.toHaveProperty('noSendChange');
585
+ expect(result).not.toHaveProperty('sendWithResults');
586
+ expect(result).not.toHaveProperty('signableTransaction');
587
+ expect(createActionMock).toHaveBeenCalledWith(args, '');
588
+ });
589
+ it('should create an action and return only txid when returnTXIDOnly is true', async () => {
590
+ // Mock the createAction method
591
+ const createActionMock = jest.fn().mockResolvedValue({
592
+ txid: 'deadbeef20248806deadbeef20248806deadbeef20248806deadbeef20248806'
593
+ });
594
+ const wallet = createTestWalletWire(mockUnsupportedMethods({
595
+ createAction: createActionMock
596
+ }));
597
+ const args = {
598
+ description: 'Test action with returnTXIDOnly',
599
+ options: {
600
+ returnTXIDOnly: true
601
+ }
602
+ };
603
+ const result = await wallet.createAction(args);
604
+ expect(result).toHaveProperty('txid');
605
+ expect(result).not.toHaveProperty('tx');
606
+ expect(result).not.toHaveProperty('noSendChange');
607
+ expect(result).not.toHaveProperty('sendWithResults');
608
+ expect(result).not.toHaveProperty('signableTransaction');
609
+ expect(createActionMock).toHaveBeenCalledWith(args, '');
610
+ });
611
+ it('should create an action and return a signableTransaction when noSend is true', async () => {
612
+ // Mock the createAction method
613
+ const createActionMock = jest.fn().mockResolvedValue({
614
+ signableTransaction: {
615
+ tx: [0x01],
616
+ reference: index_1.Utils.toBase64([0x01])
617
+ }
618
+ });
619
+ const wallet = createTestWalletWire(mockUnsupportedMethods({
620
+ createAction: createActionMock
621
+ }));
622
+ const args = {
623
+ description: 'Test action with noSend',
624
+ options: {
625
+ noSend: true
626
+ }
627
+ };
628
+ const result = await wallet.createAction(args);
629
+ expect(result).toHaveProperty('signableTransaction');
630
+ expect(result.signableTransaction).toHaveProperty('tx');
631
+ expect(result.signableTransaction).toHaveProperty('reference');
632
+ expect(result).not.toHaveProperty('txid');
633
+ expect(result).not.toHaveProperty('tx');
634
+ expect(createActionMock).toHaveBeenCalledWith(args, '');
635
+ });
636
+ it('should create an action with all options set and handle all return values', async () => {
637
+ // Mock the createAction method
638
+ const createActionMock = jest.fn().mockResolvedValue({
639
+ txid: 'deadbeef20248806deadbeef20248806deadbeef20248806deadbeef20248806',
640
+ tx: [1, 2, 3, 4],
641
+ noSendChange: [
642
+ 'deadbeef20248806deadbeef20248806deadbeef20248806deadbeef20248806.0'
643
+ ],
644
+ sendWithResults: [
645
+ {
646
+ txid: 'deadbeef20248806deadbeef20248806deadbeef20248806deadbeef20248806',
647
+ status: 'sending'
648
+ }
649
+ ],
650
+ signableTransaction: {
651
+ tx: [0x01],
652
+ reference: index_1.Utils.toBase64([0x01])
653
+ }
654
+ });
655
+ const wallet = createTestWalletWire(mockUnsupportedMethods({
656
+ createAction: createActionMock
657
+ }));
658
+ const args = {
659
+ description: 'Test action with all options',
660
+ inputs: [],
661
+ inputBEEF: [1, 2, 3, 4],
662
+ outputs: [
663
+ {
664
+ lockingScript: '016a',
665
+ satoshis: 1,
666
+ outputDescription: 'This is a test.'
667
+ }
668
+ ],
669
+ lockTime: 0,
670
+ version: 1,
671
+ labels: ['label1', 'label2'],
672
+ options: {
673
+ signAndProcess: false,
674
+ acceptDelayedBroadcast: false,
675
+ trustSelf: 'known',
676
+ knownTxids: [
677
+ 'deadbeef20248806deadbeef20248806deadbeef20248806deadbeef20248806'
678
+ ],
679
+ returnTXIDOnly: false,
680
+ noSend: true,
681
+ noSendChange: [
682
+ 'deadbeef20248806deadbeef20248806deadbeef20248806deadbeef20248806.0'
683
+ ],
684
+ sendWith: [
685
+ 'deadbeef20248806deadbeef20248806deadbeef20248806deadbeef20248806'
686
+ ],
687
+ randomizeOutputs: false
688
+ }
689
+ };
690
+ const result = await wallet.createAction(args);
691
+ expect(result).toHaveProperty('txid');
692
+ expect(result).toHaveProperty('tx');
693
+ expect(result).toHaveProperty('noSendChange');
694
+ expect(result).toHaveProperty('sendWithResults');
695
+ expect(result).toHaveProperty('signableTransaction');
696
+ expect(createActionMock).toHaveBeenCalledWith(args, '');
697
+ });
698
+ it('should throw an error with invalid inputs', async () => {
699
+ // Mock the createAction method to throw an error
700
+ const createActionMock = jest
701
+ .fn()
702
+ .mockRejectedValue(new Error('Invalid inputs'));
703
+ const wallet = createTestWalletWire(mockUnsupportedMethods({
704
+ createAction: createActionMock
705
+ }));
706
+ const args = {
707
+ description: '' // Invalid description (too short)
708
+ };
709
+ await expect(wallet.createAction(args)).rejects.toThrow('Invalid inputs');
710
+ expect(createActionMock).toHaveBeenCalledWith(args, '');
711
+ });
712
+ });
713
+ describe('signAction', () => {
714
+ it('should sign an action with valid inputs', async () => {
715
+ // Mock the signAction method
716
+ const signActionMock = jest.fn().mockResolvedValue({
717
+ txid: 'deadbeef20248806deadbeef20248806deadbeef20248806deadbeef20248806',
718
+ tx: [1, 2, 3, 4]
719
+ });
720
+ const wallet = createTestWalletWire(mockUnsupportedMethods({
721
+ signAction: signActionMock
722
+ }));
723
+ const spends = {
724
+ 0: {
725
+ unlockingScript: '00' // Sample unlocking script
726
+ }
727
+ };
728
+ const reference = index_1.Utils.toBase64([1, 2, 3]);
729
+ const args = { spends, reference };
730
+ const result = await wallet.signAction(args);
731
+ expect(result).toHaveProperty('txid');
732
+ expect(result).toHaveProperty('tx');
733
+ expect(result.tx).toBeInstanceOf(Array);
734
+ expect(signActionMock).toHaveBeenCalledWith(args, '');
735
+ });
736
+ it('should throw an error with invalid inputs', async () => {
737
+ // Mock the signAction method to throw an error
738
+ const signActionMock = jest
739
+ .fn()
740
+ .mockRejectedValue(new Error('Invalid inputs'));
741
+ const wallet = createTestWalletWire(mockUnsupportedMethods({
742
+ signAction: signActionMock
743
+ }));
744
+ const spends = {};
745
+ const reference = '';
746
+ const args = { spends, reference };
747
+ await expect(wallet.signAction(args)).rejects.toThrow('Invalid inputs');
748
+ expect(signActionMock).toHaveBeenCalledWith(args, '');
749
+ });
750
+ });
751
+ describe('abortAction', () => {
752
+ it('should abort an action with valid reference', async () => {
753
+ // Mock the abortAction method
754
+ const abortActionMock = jest.fn().mockResolvedValue({ aborted: true });
755
+ const wallet = createTestWalletWire(mockUnsupportedMethods({
756
+ abortAction: abortActionMock
757
+ }));
758
+ const reference = index_1.Utils.toBase64([1, 2, 3]);
759
+ const args = { reference };
760
+ const result = await wallet.abortAction(args);
761
+ expect(result).toEqual({ aborted: true });
762
+ expect(abortActionMock).toHaveBeenCalledWith(args, '');
763
+ });
764
+ it('should throw an error with invalid reference', async () => {
765
+ // Mock the abortAction method to throw an error
766
+ const abortActionMock = jest
767
+ .fn()
768
+ .mockRejectedValue(new Error('Invalid reference'));
769
+ const wallet = createTestWalletWire(mockUnsupportedMethods({
770
+ abortAction: abortActionMock
771
+ }));
772
+ const reference = '';
773
+ const args = { reference };
774
+ await expect(wallet.abortAction(args)).rejects.toThrow('Invalid reference');
775
+ expect(abortActionMock).toHaveBeenCalledWith(args, '');
776
+ });
777
+ });
778
+ describe('listActions', () => {
779
+ it('should list actions with valid inputs', async () => {
780
+ // Mock the listActions method
781
+ const listActionsMock = jest.fn().mockResolvedValue({
782
+ totalActions: 1,
783
+ actions: [
784
+ {
785
+ txid: 'deadbeef20248806deadbeef20248806deadbeef20248806deadbeef20248806',
786
+ satoshis: 1000,
787
+ status: 'completed',
788
+ isOutgoing: true,
789
+ description: 'Test action',
790
+ labels: ['test-label'],
791
+ version: 1,
792
+ lockTime: 0
793
+ }
794
+ ]
795
+ });
796
+ const wallet = createTestWalletWire(mockUnsupportedMethods({
797
+ listActions: listActionsMock
798
+ }));
799
+ const args = {
800
+ labels: ['test-label'],
801
+ includeLabels: true,
802
+ limit: 10,
803
+ offset: 0
804
+ };
805
+ const result = await wallet.listActions(args);
806
+ expect(result).toHaveProperty('totalActions');
807
+ expect(result).toHaveProperty('actions');
808
+ expect(Array.isArray(result.actions)).toBe(true);
809
+ expect(listActionsMock).toHaveBeenCalledWith(args, '');
810
+ });
811
+ it('should list actions with empty labels array', async () => {
812
+ // Mock the listActions method
813
+ const listActionsMock = jest.fn().mockResolvedValue({
814
+ totalActions: 0,
815
+ actions: []
816
+ });
817
+ const wallet = createTestWalletWire(mockUnsupportedMethods({
818
+ listActions: listActionsMock
819
+ }));
820
+ const args = {
821
+ labels: [],
822
+ includeLabels: true,
823
+ limit: 10,
824
+ offset: 0
825
+ };
826
+ const result = await wallet.listActions(args);
827
+ expect(result).toHaveProperty('totalActions');
828
+ expect(result.totalActions).toBe(0);
829
+ expect(result.actions).toEqual([]);
830
+ expect(listActionsMock).toHaveBeenCalledWith(args, '');
831
+ });
832
+ it('should throw an error with invalid inputs', async () => {
833
+ // Mock the listActions method to throw an error
834
+ const listActionsMock = jest
835
+ .fn()
836
+ .mockRejectedValue(new Error('Invalid inputs'));
837
+ const wallet = createTestWalletWire(mockUnsupportedMethods({
838
+ listActions: listActionsMock
839
+ }));
840
+ const args = {
841
+ labels: []
842
+ };
843
+ await expect(wallet.listActions(args)).rejects.toThrow('Invalid inputs');
844
+ expect(listActionsMock).toHaveBeenCalledWith(args, '');
845
+ });
846
+ });
847
+ describe('internalizeAction', () => {
848
+ it('should internalize an action with valid inputs', async () => {
849
+ // Mock the internalizeAction method
850
+ const internalizeActionMock = jest
851
+ .fn()
852
+ .mockResolvedValue({ accepted: true });
853
+ const wallet = createTestWalletWire(mockUnsupportedMethods({
854
+ internalizeAction: internalizeActionMock
855
+ }));
856
+ const args = {
857
+ tx: [0x00], // Sample transaction byte array
858
+ outputs: [
859
+ {
860
+ outputIndex: 0,
861
+ protocol: 'wallet payment',
862
+ paymentRemittance: {
863
+ derivationPrefix: index_1.Utils.toBase64([1, 2, 3]),
864
+ derivationSuffix: index_1.Utils.toBase64([4, 5, 6]),
865
+ senderIdentityKey: '02' + '1'.repeat(64)
866
+ }
867
+ }
868
+ ],
869
+ description: 'Test internalize action',
870
+ labels: ['test-label']
871
+ };
872
+ const result = await wallet.internalizeAction(args);
873
+ expect(result).toEqual({ accepted: true });
874
+ expect(internalizeActionMock).toHaveBeenCalledWith(args, '');
875
+ });
876
+ it('should throw an error with invalid inputs', async () => {
877
+ // Mock the internalizeAction method to throw an error
878
+ const internalizeActionMock = jest
879
+ .fn()
880
+ .mockRejectedValue(new Error('Invalid inputs'));
881
+ const wallet = createTestWalletWire(mockUnsupportedMethods({
882
+ internalizeAction: internalizeActionMock
883
+ }));
884
+ const args = {
885
+ tx: [], // Empty transaction array
886
+ outputs: [],
887
+ description: 'Test internalize action'
888
+ };
889
+ await expect(wallet.internalizeAction(args)).rejects.toThrow('Invalid inputs');
890
+ expect(internalizeActionMock).toHaveBeenCalledWith(args, '');
891
+ });
892
+ it('should internalize an action with "basket insertion" protocol', async () => {
893
+ // Mock the internalizeAction method
894
+ const internalizeActionMock = jest
895
+ .fn()
896
+ .mockResolvedValue({ accepted: true });
897
+ const wallet = createTestWalletWire(mockUnsupportedMethods({
898
+ internalizeAction: internalizeActionMock
899
+ }));
900
+ const args = {
901
+ tx: [0x00], // Sample transaction byte array
902
+ outputs: [
903
+ {
904
+ outputIndex: 0,
905
+ protocol: 'basket insertion',
906
+ insertionRemittance: {
907
+ basket: 'test-basket',
908
+ customInstructions: 'Test instructions',
909
+ tags: ['test-tag1', 'test-tag2']
910
+ }
911
+ }
912
+ ],
913
+ description: 'Test internalize action with basket insertion',
914
+ labels: ['test-label']
915
+ };
916
+ const result = await wallet.internalizeAction(args);
917
+ expect(result).toEqual({ accepted: true });
918
+ expect(internalizeActionMock).toHaveBeenCalledWith(args, '');
919
+ });
920
+ });
921
+ describe('listOutputs', () => {
922
+ it('should list outputs with valid inputs', async () => {
923
+ // Mock the listOutputs method
924
+ const listOutputsMock = jest.fn().mockResolvedValue({
925
+ totalOutputs: 1,
926
+ outputs: [
927
+ {
928
+ outpoint: 'deadbeef20248806deadbeef20248806deadbeef20248806deadbeef20248806.0',
929
+ satoshis: 1000,
930
+ lockingScript: '00',
931
+ spendable: true,
932
+ customInstructions: 'Test instructions',
933
+ tags: ['test-tag'],
934
+ labels: ['test-label']
935
+ }
936
+ ]
937
+ });
938
+ const wallet = createTestWalletWire(mockUnsupportedMethods({
939
+ listOutputs: listOutputsMock
940
+ }));
941
+ const args = {
942
+ basket: 'test-basket',
943
+ includeLabels: true,
944
+ limit: 10,
945
+ offset: 0
946
+ };
947
+ const result = await wallet.listOutputs(args);
948
+ expect(result).toHaveProperty('totalOutputs');
949
+ expect(result).toHaveProperty('outputs');
950
+ expect(Array.isArray(result.outputs)).toBe(true);
951
+ expect(listOutputsMock).toHaveBeenCalledWith(args, '');
952
+ });
953
+ it('should throw an error with invalid inputs', async () => {
954
+ // Mock the listOutputs method to throw an error
955
+ const listOutputsMock = jest
956
+ .fn()
957
+ .mockRejectedValue(new Error('Invalid inputs'));
958
+ const wallet = createTestWalletWire(mockUnsupportedMethods({
959
+ listOutputs: listOutputsMock
960
+ }));
961
+ const args = {
962
+ basket: ''
963
+ };
964
+ await expect(wallet.listOutputs(args)).rejects.toThrow('Invalid inputs');
965
+ expect(listOutputsMock).toHaveBeenCalledWith(args, '');
966
+ });
967
+ it('should list outputs without specifying optional parameters', async () => {
968
+ // Mock the listOutputs method
969
+ const listOutputsMock = jest.fn().mockResolvedValue({
970
+ totalOutputs: 1,
971
+ BEEF: [1, 2, 3, 4],
972
+ outputs: [
973
+ {
974
+ outpoint: 'deadbeef20248806deadbeef20248806deadbeef20248806deadbeef20248806.0',
975
+ satoshis: 1000,
976
+ spendable: true
977
+ }
978
+ ]
979
+ });
980
+ const wallet = createTestWalletWire(mockUnsupportedMethods({
981
+ listOutputs: listOutputsMock
982
+ }));
983
+ const args = {
984
+ basket: 'test-basket'
985
+ // Optional parameters are not specified
986
+ };
987
+ const result = await wallet.listOutputs(args);
988
+ expect(result).toHaveProperty('totalOutputs');
989
+ expect(result).toHaveProperty('outputs');
990
+ expect(result).toHaveProperty('BEEF');
991
+ expect(result.outputs[0]).toHaveProperty('outpoint');
992
+ expect(result.outputs[0]).toHaveProperty('satoshis');
993
+ expect(result.outputs[0]).toHaveProperty('spendable');
994
+ expect(result.outputs[0]).not.toHaveProperty('lockingScript');
995
+ expect(result.outputs[0]).not.toHaveProperty('customInstructions');
996
+ expect(result.outputs[0]).not.toHaveProperty('tags');
997
+ expect(result.outputs[0]).not.toHaveProperty('labels');
998
+ expect(listOutputsMock).toHaveBeenCalledWith(args, '');
999
+ });
1000
+ });
1001
+ describe('getPublicKey', () => {
1002
+ it('should get the identity public key', async () => {
1003
+ const wallet = createTestWalletWire(new CompletedProtoWallet_1.CompletedProtoWallet(index_1.PrivateKey.fromRandom()));
1004
+ const result = await wallet.getPublicKey({ identityKey: true });
1005
+ expect(result).toHaveProperty('publicKey');
1006
+ expect(typeof result.publicKey).toBe('string');
1007
+ expect(result.publicKey.length).toBe(66); // Compressed public key hex length
1008
+ });
1009
+ it('should get a derived public key with valid inputs', async () => {
1010
+ const userKey = index_1.PrivateKey.fromRandom();
1011
+ const counterpartyKey = index_1.PrivateKey.fromRandom();
1012
+ const wallet = createTestWalletWire(new CompletedProtoWallet_1.CompletedProtoWallet(userKey));
1013
+ const args = {
1014
+ protocolID: [2, 'tests'],
1015
+ keyID: 'test-key-id',
1016
+ counterparty: counterpartyKey.toPublicKey().toString()
1017
+ };
1018
+ const result = await wallet.getPublicKey(args);
1019
+ expect(result).toHaveProperty('publicKey');
1020
+ expect(typeof result.publicKey).toBe('string');
1021
+ expect(result.publicKey.length).toBe(66);
1022
+ });
1023
+ it('should get the public key with counterparty "anyone"', async () => {
1024
+ const wallet = createTestWalletWire(new CompletedProtoWallet_1.CompletedProtoWallet(index_1.PrivateKey.fromRandom()));
1025
+ const args = {
1026
+ protocolID: [1, 'testprotocol'],
1027
+ keyID: 'testkeyid',
1028
+ counterparty: 'anyone'
1029
+ };
1030
+ const result = await wallet.getPublicKey(args);
1031
+ expect(result).toHaveProperty('publicKey');
1032
+ expect(typeof result.publicKey).toBe('string');
1033
+ expect(result.publicKey.length).toBe(66); // Compressed public key hex length
1034
+ });
1035
+ it('should get the public key with missing optional parameters', async () => {
1036
+ const wallet = createTestWalletWire(new CompletedProtoWallet_1.CompletedProtoWallet(index_1.PrivateKey.fromRandom()));
1037
+ const args = {
1038
+ protocolID: [0, 'minimalprotocol'],
1039
+ keyID: 'minimalkeyid'
1040
+ // Missing counterparty, should default to 'self' or 'anyone' based on context
1041
+ };
1042
+ const result = await wallet.getPublicKey(args);
1043
+ expect(result).toHaveProperty('publicKey');
1044
+ expect(typeof result.publicKey).toBe('string');
1045
+ expect(result.publicKey.length).toBe(66);
1046
+ });
1047
+ });
1048
+ describe('encrypt and decrypt', () => {
1049
+ it('should encrypt and decrypt data correctly', async () => {
1050
+ const userKey = index_1.PrivateKey.fromRandom();
1051
+ const counterpartyKey = index_1.PrivateKey.fromRandom();
1052
+ const userWallet = createTestWalletWire(new CompletedProtoWallet_1.CompletedProtoWallet(userKey));
1053
+ const counterpartyWallet = createTestWalletWire(new CompletedProtoWallet_1.CompletedProtoWallet(counterpartyKey));
1054
+ const plaintext = sampleData;
1055
+ const encryptArgs = {
1056
+ plaintext,
1057
+ protocolID: [2, 'tests'],
1058
+ keyID: 'test-key-id',
1059
+ counterparty: counterpartyKey.toPublicKey().toString()
1060
+ };
1061
+ const encryptResult = await userWallet.encrypt(encryptArgs);
1062
+ expect(encryptResult).toHaveProperty('ciphertext');
1063
+ expect(encryptResult.ciphertext).not.toEqual(plaintext);
1064
+ const decryptArgs = {
1065
+ ciphertext: encryptResult.ciphertext,
1066
+ protocolID: [2, 'tests'],
1067
+ keyID: 'test-key-id',
1068
+ counterparty: userKey.toPublicKey().toString()
1069
+ };
1070
+ const decryptResult = await counterpartyWallet.decrypt(decryptArgs);
1071
+ expect(decryptResult).toHaveProperty('plaintext');
1072
+ expect(decryptResult.plaintext).toEqual(plaintext);
1073
+ });
1074
+ it('should throw an error for invalid decryption inputs', async () => {
1075
+ const userKey = index_1.PrivateKey.fromRandom();
1076
+ const counterpartyKey = index_1.PrivateKey.fromRandom();
1077
+ const counterpartyWallet = createTestWalletWire(new CompletedProtoWallet_1.CompletedProtoWallet(counterpartyKey));
1078
+ const decryptArgs = {
1079
+ ciphertext: [0x00],
1080
+ protocolID: [2, 'tests'],
1081
+ keyID: 'test-key-id',
1082
+ counterparty: userKey.toPublicKey().toString()
1083
+ };
1084
+ await expect(counterpartyWallet.decrypt(decryptArgs)).rejects.toThrow();
1085
+ });
1086
+ });
1087
+ describe('createHmac and verifyHmac', () => {
1088
+ it('should create and verify HMAC correctly', async () => {
1089
+ const userKey = index_1.PrivateKey.fromRandom();
1090
+ const counterpartyKey = index_1.PrivateKey.fromRandom();
1091
+ const userWallet = createTestWalletWire(new CompletedProtoWallet_1.CompletedProtoWallet(userKey));
1092
+ const counterpartyWallet = createTestWalletWire(new CompletedProtoWallet_1.CompletedProtoWallet(counterpartyKey));
1093
+ const data = sampleData;
1094
+ const createHmacArgs = {
1095
+ data,
1096
+ protocolID: [2, 'tests'],
1097
+ keyID: 'test-key-id',
1098
+ counterparty: counterpartyKey.toPublicKey().toString()
1099
+ };
1100
+ const createHmacResult = await userWallet.createHmac(createHmacArgs);
1101
+ expect(createHmacResult).toHaveProperty('hmac');
1102
+ expect(createHmacResult.hmac.length).toBe(32);
1103
+ const verifyHmacArgs = {
1104
+ data,
1105
+ hmac: createHmacResult.hmac,
1106
+ protocolID: [2, 'tests'],
1107
+ keyID: 'test-key-id',
1108
+ counterparty: userKey.toPublicKey().toString()
1109
+ };
1110
+ const verifyHmacResult = await counterpartyWallet.verifyHmac(verifyHmacArgs);
1111
+ expect(verifyHmacResult).toEqual({ valid: true });
1112
+ });
1113
+ it('should throw an error for invalid HMAC verification', async () => {
1114
+ const userKey = index_1.PrivateKey.fromRandom();
1115
+ const counterpartyWallet = createTestWalletWire(new CompletedProtoWallet_1.CompletedProtoWallet(index_1.PrivateKey.fromRandom()));
1116
+ const verifyHmacArgs = {
1117
+ data: sampleData,
1118
+ hmac: [0x00],
1119
+ protocolID: [2, 'tests'],
1120
+ keyID: 'test-key-id',
1121
+ counterparty: userKey.toPublicKey().toString()
1122
+ };
1123
+ await expect(counterpartyWallet.verifyHmac(verifyHmacArgs)).rejects.toThrow();
1124
+ });
1125
+ });
1126
+ describe('createSignature and verifySignature', () => {
1127
+ it('should create and verify signature correctly', async () => {
1128
+ const userKey = index_1.PrivateKey.fromRandom();
1129
+ const counterpartyKey = index_1.PrivateKey.fromRandom();
1130
+ const userWallet = createTestWalletWire(new CompletedProtoWallet_1.CompletedProtoWallet(userKey));
1131
+ const counterpartyWallet = createTestWalletWire(new CompletedProtoWallet_1.CompletedProtoWallet(counterpartyKey));
1132
+ const data = sampleData;
1133
+ const createSignatureArgs = {
1134
+ data,
1135
+ protocolID: [2, 'tests'],
1136
+ keyID: 'test-key-id',
1137
+ counterparty: counterpartyKey.toPublicKey().toString()
1138
+ };
1139
+ const createSignatureResult = await userWallet.createSignature(createSignatureArgs);
1140
+ expect(createSignatureResult).toHaveProperty('signature');
1141
+ expect(createSignatureResult.signature.length).toBeGreaterThan(0);
1142
+ const verifySignatureArgs = {
1143
+ data,
1144
+ signature: createSignatureResult.signature,
1145
+ protocolID: [2, 'tests'],
1146
+ keyID: 'test-key-id',
1147
+ counterparty: userKey.toPublicKey().toString()
1148
+ };
1149
+ const verifySignatureResult = await counterpartyWallet.verifySignature(verifySignatureArgs);
1150
+ expect(verifySignatureResult).toEqual({ valid: true });
1151
+ });
1152
+ it('should throw an error for invalid signature verification', async () => {
1153
+ const userKey = index_1.PrivateKey.fromRandom();
1154
+ const counterpartyWallet = createTestWalletWire(new CompletedProtoWallet_1.CompletedProtoWallet(index_1.PrivateKey.fromRandom()));
1155
+ const verifySignatureArgs = {
1156
+ data: sampleData,
1157
+ signature: [0x00],
1158
+ protocolID: [2, 'tests'],
1159
+ keyID: 'test-key-id',
1160
+ counterparty: userKey.toPublicKey().toString()
1161
+ };
1162
+ await expect(counterpartyWallet.verifySignature(verifySignatureArgs)).rejects.toThrow();
1163
+ });
1164
+ });
1165
+ describe('revealCounterpartyKeyLinkage', () => {
1166
+ it('should reveal counterparty key linkage correctly', async () => {
1167
+ const proverKey = index_1.PrivateKey.fromRandom();
1168
+ const counterpartyKey = index_1.PrivateKey.fromRandom();
1169
+ const verifierKey = index_1.PrivateKey.fromRandom();
1170
+ const proverWallet = createTestWalletWire(new CompletedProtoWallet_1.CompletedProtoWallet(proverKey));
1171
+ const verifierWallet = createTestWalletWire(new CompletedProtoWallet_1.CompletedProtoWallet(verifierKey));
1172
+ const args = {
1173
+ counterparty: counterpartyKey.toPublicKey().toString(),
1174
+ verifier: verifierKey.toPublicKey().toString()
1175
+ };
1176
+ const revelation = await proverWallet.revealCounterpartyKeyLinkage(args);
1177
+ expect(revelation.encryptedLinkageProof).toBeDefined();
1178
+ const decryptArgs = {
1179
+ ciphertext: revelation.encryptedLinkage,
1180
+ protocolID: [2, 'counterparty linkage revelation'],
1181
+ keyID: revelation.revelationTime,
1182
+ counterparty: proverKey.toPublicKey().toString()
1183
+ };
1184
+ const decryptedResult = await verifierWallet.decrypt(decryptArgs);
1185
+ const expectedLinkage = proverKey
1186
+ .deriveSharedSecret(counterpartyKey.toPublicKey())
1187
+ .encode(true);
1188
+ expect(decryptedResult.plaintext).toEqual(expectedLinkage);
1189
+ });
1190
+ });
1191
+ describe('acquireCertificate', () => {
1192
+ it('should acquire a certificate with valid inputs', async () => {
1193
+ // Mock the acquireCertificate method
1194
+ const acquireCertificateMock = jest.fn().mockResolvedValue({
1195
+ type: index_1.Utils.toBase64(new Array(32).fill(1)),
1196
+ subject: '02' + 'a'.repeat(64),
1197
+ serialNumber: index_1.Utils.toBase64(new Array(32).fill(2)),
1198
+ certifier: '02' + 'b'.repeat(64),
1199
+ revocationOutpoint: 'deadbeef20248806deadbeef20248806deadbeef20248806deadbeef20248806.0',
1200
+ signature: '3045022100e4d03d959697ed191f9ef7ae7deacd3118b8693d18da0fd76e4ad92664ce05cf02200d753951e766cbf2d2b306e08921c06341d2de67ab75389bf84caf954ee40e88',
1201
+ fields: {
1202
+ field1: 'value1',
1203
+ field2: 'value2'
1204
+ }
1205
+ });
1206
+ const wallet = createTestWalletWire(mockUnsupportedMethods({
1207
+ acquireCertificate: acquireCertificateMock
1208
+ }));
1209
+ const args = {
1210
+ type: index_1.Utils.toBase64(new Array(32).fill(1)),
1211
+ certifier: '02' + 'b'.repeat(64),
1212
+ acquisitionProtocol: 'direct',
1213
+ fields: {
1214
+ field1: 'value1',
1215
+ field2: 'value2'
1216
+ },
1217
+ serialNumber: index_1.Utils.toBase64(new Array(32).fill(2)),
1218
+ revocationOutpoint: 'deadbeef20248806deadbeef20248806deadbeef20248806deadbeef20248806.0',
1219
+ signature: '3045022100e4d03d959697ed191f9ef7ae7deacd3118b8693d18da0fd76e4ad92664ce05cf02200d753951e766cbf2d2b306e08921c06341d2de67ab75389bf84caf954ee40e88',
1220
+ keyringRevealer: 'certifier',
1221
+ keyringForSubject: {}
1222
+ };
1223
+ const result = await wallet.acquireCertificate(args);
1224
+ expect(result).toHaveProperty('type');
1225
+ expect(result).toHaveProperty('subject');
1226
+ expect(result).toHaveProperty('serialNumber');
1227
+ expect(result).toHaveProperty('certifier');
1228
+ expect(result).toHaveProperty('revocationOutpoint');
1229
+ expect(result).toHaveProperty('signature');
1230
+ expect(result).toHaveProperty('fields');
1231
+ expect(acquireCertificateMock).toHaveBeenCalledWith(args, '');
1232
+ });
1233
+ it('should acquire a certificate using acquisitionProtocol "direct" with keyringRevealer as "certifier"', async () => {
1234
+ // Mock the acquireCertificate method
1235
+ const acquireCertificateMock = jest.fn().mockResolvedValue({
1236
+ type: index_1.Utils.toBase64(new Array(32).fill(1)),
1237
+ subject: '02' + 'a'.repeat(64),
1238
+ serialNumber: index_1.Utils.toBase64(new Array(32).fill(2)),
1239
+ certifier: '02' + 'b'.repeat(64),
1240
+ revocationOutpoint: 'deadbeef20248806deadbeef20248806deadbeef20248806deadbeef20248806.0',
1241
+ signature: '3045022100e4d03d959697ed191f9ef7ae7deacd3118b8693d18da0fd76e4ad92664ce05cf02200d753951e766cbf2d2b306e08921c06341d2de67ab75389bf84caf954ee40e88',
1242
+ fields: {
1243
+ field1: 'value1',
1244
+ field2: 'value2'
1245
+ }
1246
+ });
1247
+ const wallet = createTestWalletWire(mockUnsupportedMethods({
1248
+ acquireCertificate: acquireCertificateMock
1249
+ }));
1250
+ const args = {
1251
+ type: index_1.Utils.toBase64(new Array(32).fill(1)),
1252
+ certifier: '02' + 'b'.repeat(64),
1253
+ acquisitionProtocol: 'direct',
1254
+ fields: {
1255
+ field1: 'value1',
1256
+ field2: 'value2'
1257
+ },
1258
+ serialNumber: index_1.Utils.toBase64(new Array(32).fill(2)),
1259
+ revocationOutpoint: 'deadbeef20248806deadbeef20248806deadbeef20248806deadbeef20248806.0',
1260
+ signature: '3045022100e4d03d959697ed191f9ef7ae7deacd3118b8693d18da0fd76e4ad92664ce05cf02200d753951e766cbf2d2b306e08921c06341d2de67ab75389bf84caf954ee40e88',
1261
+ keyringRevealer: 'certifier',
1262
+ keyringForSubject: {
1263
+ field1: index_1.Utils.toBase64([0x01, 0x02, 0x03]),
1264
+ field2: index_1.Utils.toBase64([0x04, 0x05, 0x06])
1265
+ }
1266
+ };
1267
+ const result = await wallet.acquireCertificate(args);
1268
+ expect(result).toHaveProperty('type');
1269
+ expect(result).toHaveProperty('subject');
1270
+ expect(result).toHaveProperty('serialNumber');
1271
+ expect(result).toHaveProperty('certifier');
1272
+ expect(result).toHaveProperty('revocationOutpoint');
1273
+ expect(result).toHaveProperty('signature');
1274
+ expect(result).toHaveProperty('fields');
1275
+ expect(acquireCertificateMock).toHaveBeenCalledWith(args, '');
1276
+ });
1277
+ it('should acquire a certificate using acquisitionProtocol "direct" with keyringRevealer as PubKeyHex', async () => {
1278
+ // Mock the acquireCertificate method
1279
+ const acquireCertificateMock = jest.fn().mockResolvedValue({
1280
+ type: index_1.Utils.toBase64(new Array(32).fill(1)),
1281
+ subject: '02' + 'a'.repeat(64),
1282
+ serialNumber: index_1.Utils.toBase64(new Array(32).fill(2)),
1283
+ certifier: '02' + 'b'.repeat(64),
1284
+ revocationOutpoint: 'deadbeef20248806deadbeef20248806deadbeef20248806deadbeef20248806.0',
1285
+ signature: '3045022100e4d03d959697ed191f9ef7ae7deacd3118b8693d18da0fd76e4ad92664ce05cf02200d753951e766cbf2d2b306e08921c06341d2de67ab75389bf84caf954ee40e88',
1286
+ fields: {
1287
+ field1: 'value1',
1288
+ field2: 'value2'
1289
+ }
1290
+ });
1291
+ const keyringRevealerPubKey = '02' + 'c'.repeat(64);
1292
+ const wallet = createTestWalletWire(mockUnsupportedMethods({
1293
+ acquireCertificate: acquireCertificateMock
1294
+ }));
1295
+ const args = {
1296
+ type: index_1.Utils.toBase64(new Array(32).fill(1)),
1297
+ certifier: '02' + 'b'.repeat(64),
1298
+ acquisitionProtocol: 'direct',
1299
+ fields: {
1300
+ field1: 'value1',
1301
+ field2: 'value2'
1302
+ },
1303
+ serialNumber: index_1.Utils.toBase64(new Array(32).fill(2)),
1304
+ revocationOutpoint: 'deadbeef20248806deadbeef20248806deadbeef20248806deadbeef20248806.0',
1305
+ signature: '3045022100e4d03d959697ed191f9ef7ae7deacd3118b8693d18da0fd76e4ad92664ce05cf02200d753951e766cbf2d2b306e08921c06341d2de67ab75389bf84caf954ee40e88',
1306
+ keyringRevealer: keyringRevealerPubKey,
1307
+ keyringForSubject: {
1308
+ field1: index_1.Utils.toBase64([0x01, 0x02, 0x03]),
1309
+ field2: index_1.Utils.toBase64([0x04, 0x05, 0x06])
1310
+ }
1311
+ };
1312
+ const result = await wallet.acquireCertificate(args);
1313
+ expect(result).toHaveProperty('type');
1314
+ expect(result).toHaveProperty('subject');
1315
+ expect(result).toHaveProperty('serialNumber');
1316
+ expect(result).toHaveProperty('certifier');
1317
+ expect(result).toHaveProperty('revocationOutpoint');
1318
+ expect(result).toHaveProperty('signature');
1319
+ expect(result).toHaveProperty('fields');
1320
+ expect(acquireCertificateMock).toHaveBeenCalledWith(args, '');
1321
+ });
1322
+ it('should acquire a certificate using acquisitionProtocol "issuance"', async () => {
1323
+ // Mock the acquireCertificate method
1324
+ const acquireCertificateMock = jest.fn().mockResolvedValue({
1325
+ type: index_1.Utils.toBase64(new Array(32).fill(1)),
1326
+ subject: '02' + 'd'.repeat(64),
1327
+ serialNumber: index_1.Utils.toBase64(new Array(32).fill(2)),
1328
+ certifier: '02' + 'b'.repeat(64),
1329
+ revocationOutpoint: 'cafebabedeadbeefcafebabedeadbeefdeadbeefdeadbeefdeadbeefdeadbeef.1',
1330
+ signature: '3045022100e4d03d959697ed191f9ef7ae7deacd3118b8693d18da0fd76e4ad92664ce05cf02200d753951e766cbf2d2b306e08921c06341d2de67ab75389bf84caf954ee40e88',
1331
+ fields: {
1332
+ field3: 'value3',
1333
+ field4: 'value4'
1334
+ }
1335
+ });
1336
+ const wallet = createTestWalletWire(mockUnsupportedMethods({
1337
+ acquireCertificate: acquireCertificateMock
1338
+ }));
1339
+ const args = {
1340
+ type: index_1.Utils.toBase64(new Array(32).fill(1)),
1341
+ certifier: '02' + 'b'.repeat(64),
1342
+ acquisitionProtocol: 'issuance',
1343
+ fields: {
1344
+ field3: 'value3',
1345
+ field4: 'value4'
1346
+ },
1347
+ certifierUrl: 'https://certifier.example.com/api/issue'
1348
+ };
1349
+ const result = await wallet.acquireCertificate(args);
1350
+ expect(result).toHaveProperty('type');
1351
+ expect(result).toHaveProperty('subject');
1352
+ expect(result).toHaveProperty('serialNumber');
1353
+ expect(result).toHaveProperty('certifier');
1354
+ expect(result).toHaveProperty('revocationOutpoint');
1355
+ expect(result).toHaveProperty('signature');
1356
+ expect(result).toHaveProperty('fields');
1357
+ expect(acquireCertificateMock).toHaveBeenCalledWith(args, '');
1358
+ });
1359
+ it('should handle optional keyringForSubject being empty in "direct" protocol', async () => {
1360
+ // Mock the acquireCertificate method
1361
+ const acquireCertificateMock = jest.fn().mockResolvedValue({
1362
+ type: index_1.Utils.toBase64(new Array(32).fill(1)),
1363
+ subject: '02' + 'e'.repeat(64),
1364
+ serialNumber: index_1.Utils.toBase64(new Array(32).fill(2)),
1365
+ certifier: '02' + 'b'.repeat(64),
1366
+ revocationOutpoint: 'beadbeadbeadbeadbeadbeadbeadbeadbeadbeadbeadbeadbeadbeadbeadbead.2',
1367
+ signature: '3045022100e4d03d959697ed191f9ef7ae7deacd3118b8693d18da0fd76e4ad92664ce05cf02200d753951e766cbf2d2b306e08921c06341d2de67ab75389bf84caf954ee40e88',
1368
+ fields: {
1369
+ field5: 'value5'
1370
+ }
1371
+ });
1372
+ const wallet = createTestWalletWire(mockUnsupportedMethods({
1373
+ acquireCertificate: acquireCertificateMock
1374
+ }));
1375
+ const args = {
1376
+ type: index_1.Utils.toBase64(new Array(32).fill(1)),
1377
+ certifier: '02' + 'b'.repeat(64),
1378
+ acquisitionProtocol: 'direct',
1379
+ fields: {
1380
+ field5: 'value5'
1381
+ },
1382
+ serialNumber: index_1.Utils.toBase64(new Array(32).fill(2)),
1383
+ revocationOutpoint: 'beadbeadbeadbeadbeadbeadbeadbeadbeadbeadbeadbeadbeadbeadbeadbead.2',
1384
+ signature: '3045022100e4d03d959697ed191f9ef7ae7deacd3118b8693d18da0fd76e4ad92664ce05cf02200d753951e766cbf2d2b306e08921c06341d2de67ab75389bf84caf954ee40e88',
1385
+ keyringRevealer: 'certifier',
1386
+ keyringForSubject: {} // Empty keyring
1387
+ };
1388
+ const result = await wallet.acquireCertificate(args);
1389
+ expect(result).toHaveProperty('type');
1390
+ expect(result).toHaveProperty('subject');
1391
+ expect(result).toHaveProperty('serialNumber');
1392
+ expect(result).toHaveProperty('certifier');
1393
+ expect(result).toHaveProperty('revocationOutpoint');
1394
+ expect(result).toHaveProperty('signature');
1395
+ expect(result).toHaveProperty('fields');
1396
+ expect(result.fields).toEqual({ field5: 'value5' });
1397
+ expect(acquireCertificateMock).toHaveBeenCalledWith(args, '');
1398
+ });
1399
+ });
1400
+ describe('listCertificates', () => {
1401
+ it('should list certificates with valid inputs', async () => {
1402
+ // Mock the listCertificates method
1403
+ const listCertificatesMock = jest.fn().mockResolvedValue({
1404
+ totalCertificates: 1,
1405
+ certificates: [
1406
+ {
1407
+ type: index_1.Utils.toBase64(new Array(32).fill(1)),
1408
+ subject: '02' + 'a'.repeat(64),
1409
+ serialNumber: index_1.Utils.toBase64(new Array(32).fill(2)),
1410
+ certifier: '02' + 'b'.repeat(64),
1411
+ revocationOutpoint: 'deadbeef20248806deadbeef20248806deadbeef20248806deadbeef20248806.0',
1412
+ signature: '3045022100e4d03d959697ed191f9ef7ae7deacd3118b8693d18da0fd76e4ad92664ce05cf02200d753951e766cbf2d2b306e08921c06341d2de67ab75389bf84caf954ee40e88',
1413
+ fields: {
1414
+ field1: 'value1',
1415
+ field2: 'value2'
1416
+ }
1417
+ }
1418
+ ]
1419
+ });
1420
+ const wallet = createTestWalletWire(mockUnsupportedMethods({
1421
+ listCertificates: listCertificatesMock
1422
+ }));
1423
+ const args = {
1424
+ certifiers: ['02' + 'b'.repeat(64)],
1425
+ types: [index_1.Utils.toBase64(new Array(32).fill(1))],
1426
+ limit: 10,
1427
+ offset: 0
1428
+ };
1429
+ const result = await wallet.listCertificates(args);
1430
+ expect(result).toHaveProperty('totalCertificates');
1431
+ expect(result).toHaveProperty('certificates');
1432
+ expect(Array.isArray(result.certificates)).toBe(true);
1433
+ expect(listCertificatesMock).toHaveBeenCalledWith(args, '');
1434
+ });
1435
+ it('should list certificates with multiple fields in each certificate', async () => {
1436
+ // Mock the listCertificates method
1437
+ const listCertificatesMock = jest.fn().mockResolvedValue({
1438
+ totalCertificates: 2,
1439
+ certificates: [
1440
+ {
1441
+ type: index_1.Utils.toBase64(new Array(32).fill(1)),
1442
+ subject: '02' + 'a'.repeat(64),
1443
+ serialNumber: index_1.Utils.toBase64(new Array(32).fill(2)),
1444
+ certifier: '02' + 'b'.repeat(64),
1445
+ revocationOutpoint: 'deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef.0',
1446
+ signature: '3045022100e4d03d959697ed191f9ef7ae7deacd3118b8693d18da0fd76e4ad92664ce05cf02200d753951e766cbf2d2b306e08921c06341d2de67ab75389bf84caf954ee40e88',
1447
+ fields: {
1448
+ field1: 'value1',
1449
+ field2: 'value2'
1450
+ }
1451
+ },
1452
+ {
1453
+ type: index_1.Utils.toBase64(new Array(32).fill(1)),
1454
+ subject: '02' + 'c'.repeat(64),
1455
+ serialNumber: index_1.Utils.toBase64(new Array(32).fill(2)),
1456
+ certifier: '02' + 'b'.repeat(64),
1457
+ revocationOutpoint: 'cafebabecafebabecafebabecafebabecafebabecafebabecafebabecafebabe.1',
1458
+ signature: '3045022100e4d03d959697ed191f9ef7ae7deacd3118b8693d18da0fd76e4ad92664ce05cf02200d753951e766cbf2d2b306e08921c06341d2de67ab75389bf84caf954ee40e88',
1459
+ fields: {
1460
+ field3: 'value3',
1461
+ field4: 'value4',
1462
+ field5: 'value5'
1463
+ }
1464
+ }
1465
+ ]
1466
+ });
1467
+ const wallet = createTestWalletWire(mockUnsupportedMethods({
1468
+ listCertificates: listCertificatesMock
1469
+ }));
1470
+ const args = {
1471
+ certifiers: ['02' + 'b'.repeat(64)],
1472
+ types: [
1473
+ index_1.Utils.toBase64(new Array(32).fill(1)),
1474
+ index_1.Utils.toBase64(new Array(32).fill(2))
1475
+ ],
1476
+ limit: 10,
1477
+ offset: 0
1478
+ };
1479
+ const result = await wallet.listCertificates(args);
1480
+ expect(result).toHaveProperty('totalCertificates', 2);
1481
+ expect(result.certificates.length).toBe(2);
1482
+ expect(result.certificates[0].fields).toEqual({
1483
+ field1: 'value1',
1484
+ field2: 'value2'
1485
+ });
1486
+ expect(result.certificates[1].fields).toEqual({
1487
+ field3: 'value3',
1488
+ field4: 'value4',
1489
+ field5: 'value5'
1490
+ });
1491
+ expect(listCertificatesMock).toHaveBeenCalledWith(args, '');
1492
+ });
1493
+ it('should list certificates when privileged is true', async () => {
1494
+ // Mock the listCertificates method
1495
+ const listCertificatesMock = jest.fn().mockResolvedValue({
1496
+ totalCertificates: 1,
1497
+ certificates: [
1498
+ {
1499
+ type: index_1.Utils.toBase64(new Array(32).fill(1)),
1500
+ subject: '02' + 'd'.repeat(64),
1501
+ serialNumber: index_1.Utils.toBase64(new Array(32).fill(2)),
1502
+ certifier: '02' + 'e'.repeat(64),
1503
+ revocationOutpoint: 'cafecafecafecafecafecafecafecafecafecafecafecafecafecafecafecafe.2',
1504
+ signature: '3045022100e4d03d959697ed191f9ef7ae7deacd3118b8693d18da0fd76e4ad92664ce05cf02200d753951e766cbf2d2b306e08921c06341d2de67ab75389bf84caf954ee40e88',
1505
+ fields: {
1506
+ field6: 'value6'
1507
+ }
1508
+ }
1509
+ ]
1510
+ });
1511
+ const wallet = createTestWalletWire(mockUnsupportedMethods({
1512
+ listCertificates: listCertificatesMock
1513
+ }));
1514
+ const args = {
1515
+ certifiers: ['02' + 'e'.repeat(64)],
1516
+ types: [index_1.Utils.toBase64(new Array(32).fill(1))],
1517
+ limit: 10,
1518
+ offset: 0,
1519
+ privileged: true,
1520
+ privilegedReason: 'Testing privileged access'
1521
+ };
1522
+ const result = await wallet.listCertificates(args);
1523
+ expect(result).toHaveProperty('totalCertificates', 1);
1524
+ expect(result.certificates[0].fields).toEqual({ field6: 'value6' });
1525
+ expect(listCertificatesMock).toHaveBeenCalledWith(args, '');
1526
+ });
1527
+ });
1528
+ describe('proveCertificate', () => {
1529
+ it('should prove a certificate with valid inputs', async () => {
1530
+ // Mock the proveCertificate method
1531
+ const proveCertificateMock = jest.fn().mockResolvedValue({
1532
+ keyringForVerifier: {
1533
+ field1: index_1.Utils.toBase64([0x01, 0x02, 0x03]),
1534
+ field2: index_1.Utils.toBase64([0x04, 0x05, 0x06])
1535
+ }
1536
+ });
1537
+ const wallet = createTestWalletWire(mockUnsupportedMethods({
1538
+ proveCertificate: proveCertificateMock
1539
+ }));
1540
+ const args = {
1541
+ certificate: {
1542
+ type: index_1.Utils.toBase64(new Array(32).fill(1)),
1543
+ subject: '02' + 'a'.repeat(64),
1544
+ serialNumber: index_1.Utils.toBase64(new Array(32).fill(2)),
1545
+ certifier: '02' + 'b'.repeat(64),
1546
+ revocationOutpoint: 'deadbeef20248806deadbeef20248806deadbeef20248806deadbeef20248806.0',
1547
+ signature: '3045022100e4d03d959697ed191f9ef7ae7deacd3118b8693d18da0fd76e4ad92664ce05cf02200d753951e766cbf2d2b306e08921c06341d2de67ab75389bf84caf954ee40e88',
1548
+ fields: {
1549
+ field1: 'value1',
1550
+ field2: 'value2'
1551
+ }
1552
+ },
1553
+ fieldsToReveal: ['field1'],
1554
+ verifier: '02' + 'c'.repeat(64)
1555
+ };
1556
+ const result = await wallet.proveCertificate(args);
1557
+ expect(result).toHaveProperty('keyringForVerifier');
1558
+ expect(proveCertificateMock).toHaveBeenCalledWith(args, '');
1559
+ });
1560
+ it('should prove a certificate revealing multiple fields', async () => {
1561
+ // Mock the proveCertificate method
1562
+ const proveCertificateMock = jest.fn().mockResolvedValue({
1563
+ keyringForVerifier: {
1564
+ field1: index_1.Utils.toBase64([0x01, 0x02, 0x03]),
1565
+ field2: index_1.Utils.toBase64([0x04, 0x05, 0x06])
1566
+ }
1567
+ });
1568
+ const wallet = createTestWalletWire(mockUnsupportedMethods({
1569
+ proveCertificate: proveCertificateMock
1570
+ }));
1571
+ const args = {
1572
+ certificate: {
1573
+ type: index_1.Utils.toBase64(new Array(32).fill(1)),
1574
+ subject: '02' + 'a'.repeat(64),
1575
+ serialNumber: index_1.Utils.toBase64(new Array(32).fill(2)),
1576
+ certifier: '02' + 'b'.repeat(64),
1577
+ revocationOutpoint: 'deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef.0',
1578
+ signature: '3045022100e4d03d959697ed191f9ef7ae7deacd3118b8693d18da0fd76e4ad92664ce05cf02200d753951e766cbf2d2b306e08921c06341d2de67ab75389bf84caf954ee40e88',
1579
+ fields: {
1580
+ field1: 'value1',
1581
+ field2: 'value2',
1582
+ field3: 'value3'
1583
+ }
1584
+ },
1585
+ fieldsToReveal: ['field1', 'field2'],
1586
+ verifier: '02' + 'f'.repeat(64)
1587
+ };
1588
+ const result = await wallet.proveCertificate(args);
1589
+ expect(result).toHaveProperty('keyringForVerifier');
1590
+ expect(Object.keys(result.keyringForVerifier)).toEqual([
1591
+ 'field1',
1592
+ 'field2'
1593
+ ]);
1594
+ expect(proveCertificateMock).toHaveBeenCalledWith(args, '');
1595
+ });
1596
+ it('should handle empty fieldsToReveal array (no fields revealed)', async () => {
1597
+ // Mock the proveCertificate method
1598
+ const proveCertificateMock = jest.fn().mockResolvedValue({
1599
+ keyringForVerifier: {}
1600
+ });
1601
+ const wallet = createTestWalletWire(mockUnsupportedMethods({
1602
+ proveCertificate: proveCertificateMock
1603
+ }));
1604
+ const args = {
1605
+ certificate: {
1606
+ type: index_1.Utils.toBase64(new Array(32).fill(1)),
1607
+ subject: '02' + 'a'.repeat(64),
1608
+ serialNumber: index_1.Utils.toBase64(new Array(32).fill(2)),
1609
+ certifier: '02' + 'b'.repeat(64),
1610
+ revocationOutpoint: 'cafebabecafebabecafebabecafebabecafebabecafebabecafebabecafebabe.1',
1611
+ signature: '3045022100e4d03d959697ed191f9ef7ae7deacd3118b8693d18da0fd76e4ad92664ce05cf02200d753951e766cbf2d2b306e08921c06341d2de67ab75389bf84caf954ee40e88',
1612
+ fields: {
1613
+ field4: 'value4',
1614
+ field5: 'value5'
1615
+ }
1616
+ },
1617
+ fieldsToReveal: [],
1618
+ verifier: '02' + 'f'.repeat(64)
1619
+ };
1620
+ const result = await wallet.proveCertificate(args);
1621
+ expect(result).toHaveProperty('keyringForVerifier');
1622
+ expect(Object.keys(result.keyringForVerifier).length).toBe(0);
1623
+ expect(proveCertificateMock).toHaveBeenCalledWith(args, '');
1624
+ });
1625
+ });
1626
+ describe('relinquishCertificate', () => {
1627
+ it('should relinquish a certificate with valid inputs', async () => {
1628
+ // Mock the relinquishCertificate method
1629
+ const relinquishCertificateMock = jest
1630
+ .fn()
1631
+ .mockResolvedValue({ relinquished: true });
1632
+ const wallet = createTestWalletWire(mockUnsupportedMethods({
1633
+ relinquishCertificate: relinquishCertificateMock
1634
+ }));
1635
+ const args = {
1636
+ type: index_1.Utils.toBase64(new Array(32).fill(1)),
1637
+ serialNumber: index_1.Utils.toBase64(new Array(32).fill(2)),
1638
+ certifier: '02' + 'b'.repeat(64)
1639
+ };
1640
+ const result = await wallet.relinquishCertificate(args);
1641
+ expect(result).toEqual({ relinquished: true });
1642
+ expect(relinquishCertificateMock).toHaveBeenCalledWith(args, '');
1643
+ });
1644
+ });
1645
+ describe('getHeight and getHeaderForHeight', () => {
1646
+ it('should get the current blockchain height', async () => {
1647
+ // Mock the getHeight method
1648
+ const getHeightMock = jest.fn().mockResolvedValue({ height: 680000 });
1649
+ const wallet = createTestWalletWire(mockUnsupportedMethods({
1650
+ getHeight: getHeightMock
1651
+ }));
1652
+ const result = await wallet.getHeight({});
1653
+ expect(result).toHaveProperty('height');
1654
+ expect(typeof result.height).toBe('number');
1655
+ expect(result.height).toBeGreaterThan(0);
1656
+ expect(getHeightMock).toHaveBeenCalledWith({}, '');
1657
+ });
1658
+ it('should throw an error when getHeight fails', async () => {
1659
+ // Mock the getHeight method to throw an error
1660
+ const getHeightMock = jest
1661
+ .fn()
1662
+ .mockRejectedValue(new Error('Failed to get height'));
1663
+ const wallet = createTestWalletWire(mockUnsupportedMethods({
1664
+ getHeight: getHeightMock
1665
+ }));
1666
+ await expect(wallet.getHeight({})).rejects.toThrow('Failed to get height');
1667
+ expect(getHeightMock).toHaveBeenCalledWith({}, '');
1668
+ });
1669
+ it('should get the header for a given height', async () => {
1670
+ // Mock the getHeaderForHeight method
1671
+ const getHeaderForHeightMock = jest.fn().mockResolvedValue({
1672
+ header: '00' + 'ff'.repeat(79)
1673
+ });
1674
+ const wallet = createTestWalletWire(mockUnsupportedMethods({
1675
+ getHeaderForHeight: getHeaderForHeightMock
1676
+ }));
1677
+ const args = { height: 680000 };
1678
+ const result = await wallet.getHeaderForHeight(args);
1679
+ expect(result).toHaveProperty('header');
1680
+ expect(typeof result.header).toBe('string');
1681
+ expect(result.header.length).toBe(80 * 2); // 80 bytes in hex
1682
+ expect(getHeaderForHeightMock).toHaveBeenCalledWith(args, '');
1683
+ });
1684
+ it('should throw an error when getHeaderForHeight fails', async () => {
1685
+ // Mock the getHeaderForHeight method to throw an error
1686
+ const getHeaderForHeightMock = jest
1687
+ .fn()
1688
+ .mockRejectedValue(new Error('Failed to get header'));
1689
+ const wallet = createTestWalletWire(mockUnsupportedMethods({
1690
+ getHeaderForHeight: getHeaderForHeightMock
1691
+ }));
1692
+ const args = { height: -1 }; // Invalid height
1693
+ await expect(wallet.getHeaderForHeight(args)).rejects.toThrow('Failed to get header');
1694
+ expect(getHeaderForHeightMock).toHaveBeenCalledWith(args, '');
1695
+ });
1696
+ });
1697
+ describe('discoverByIdentityKey', () => {
1698
+ it('should discover certificates by identity key with valid inputs', async () => {
1699
+ // Mock the discoverByIdentityKey method
1700
+ const discoverByIdentityKeyMock = jest.fn().mockResolvedValue({
1701
+ totalCertificates: 1,
1702
+ certificates: [
1703
+ {
1704
+ type: index_1.Utils.toBase64(new Array(32).fill(1)),
1705
+ subject: '02' + 'a'.repeat(64),
1706
+ serialNumber: index_1.Utils.toBase64(new Array(32).fill(2)),
1707
+ certifier: '02' + 'b'.repeat(64),
1708
+ revocationOutpoint: 'deadbeef20248806deadbeef20248806deadbeef20248806deadbeef20248806.0',
1709
+ signature: '3045022100e4d03d959697ed191f9ef7ae7deacd3118b8693d18da0fd76e4ad92664ce05cf02200d753951e766cbf2d2b306e08921c06341d2de67ab75389bf84caf954ee40e88',
1710
+ fields: {},
1711
+ certifierInfo: {
1712
+ name: 'Test Certifier',
1713
+ iconUrl: 'https://example.com/icon.png',
1714
+ description: 'Test description',
1715
+ trust: 5
1716
+ },
1717
+ publiclyRevealedKeyring: {},
1718
+ decryptedFields: {}
1719
+ }
1720
+ ]
1721
+ });
1722
+ const wallet = createTestWalletWire(mockUnsupportedMethods({
1723
+ discoverByIdentityKey: discoverByIdentityKeyMock
1724
+ }));
1725
+ const args = {
1726
+ identityKey: '02' + 'a'.repeat(64),
1727
+ limit: 10,
1728
+ offset: 0
1729
+ };
1730
+ const result = await wallet.discoverByIdentityKey(args);
1731
+ expect(result).toHaveProperty('totalCertificates');
1732
+ expect(result).toHaveProperty('certificates');
1733
+ expect(Array.isArray(result.certificates)).toBe(true);
1734
+ expect(discoverByIdentityKeyMock).toHaveBeenCalledWith(args, '');
1735
+ });
1736
+ it('should discover certificates with empty decryptedFields and publiclyRevealedKeyring', async () => {
1737
+ // Mock the discoverByIdentityKey method
1738
+ const discoverByIdentityKeyMock = jest.fn().mockResolvedValue({
1739
+ totalCertificates: 1,
1740
+ certificates: [
1741
+ {
1742
+ type: index_1.Utils.toBase64(new Array(32).fill(1)),
1743
+ subject: '02' + 'a'.repeat(64),
1744
+ serialNumber: index_1.Utils.toBase64(new Array(32).fill(2)),
1745
+ certifier: '02' + 'b'.repeat(64),
1746
+ revocationOutpoint: 'deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef.0',
1747
+ signature: '3045022100e4d03d959697ed191f9ef7ae7deacd3118b8693d18da0fd76e4ad92664ce05cf02200d753951e766cbf2d2b306e08921c06341d2de67ab75389bf84caf954ee40e88',
1748
+ fields: {},
1749
+ certifierInfo: {
1750
+ name: 'Test Certifier',
1751
+ iconUrl: 'https://example.com/icon.png',
1752
+ description: 'Test description',
1753
+ trust: 5
1754
+ },
1755
+ publiclyRevealedKeyring: {},
1756
+ decryptedFields: {}
1757
+ }
1758
+ ]
1759
+ });
1760
+ const wallet = createTestWalletWire(mockUnsupportedMethods({
1761
+ discoverByIdentityKey: discoverByIdentityKeyMock
1762
+ }));
1763
+ const args = {
1764
+ identityKey: '02' + 'a'.repeat(64),
1765
+ limit: 10,
1766
+ offset: 0
1767
+ };
1768
+ const result = await wallet.discoverByIdentityKey(args);
1769
+ expect(result).toHaveProperty('totalCertificates');
1770
+ expect(result.certificates.length).toBe(1);
1771
+ expect(result.certificates[0].publiclyRevealedKeyring).toEqual({});
1772
+ expect(result.certificates[0].decryptedFields).toEqual({});
1773
+ expect(discoverByIdentityKeyMock).toHaveBeenCalledWith(args, '');
1774
+ });
1775
+ it('should discover multiple certificates with varying fields', async () => {
1776
+ // Mock the discoverByIdentityKey method
1777
+ const discoverByIdentityKeyMock = jest.fn().mockResolvedValue({
1778
+ totalCertificates: 2,
1779
+ certificates: [
1780
+ {
1781
+ type: index_1.Utils.toBase64(new Array(32).fill(1)),
1782
+ subject: '02' + 'a'.repeat(64),
1783
+ serialNumber: index_1.Utils.toBase64(new Array(32).fill(2)),
1784
+ certifier: '02' + 'b'.repeat(64),
1785
+ revocationOutpoint: 'deadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeefdeadbeef.0',
1786
+ signature: '3045022100e4d03d959697ed191f9ef7ae7deacd3118b8693d18da0fd76e4ad92664ce05cf02200d753951e766cbf2d2b306e08921c06341d2de67ab75389bf84caf954ee40e88',
1787
+ fields: {},
1788
+ certifierInfo: {
1789
+ name: 'Certifier One',
1790
+ iconUrl: 'https://example.com/icon1.png',
1791
+ description: 'First certifier',
1792
+ trust: 5
1793
+ },
1794
+ publiclyRevealedKeyring: {
1795
+ field1: index_1.Utils.toBase64([0x01])
1796
+ },
1797
+ decryptedFields: {
1798
+ fieldA: 'decryptedValueA'
1799
+ }
1800
+ },
1801
+ {
1802
+ type: index_1.Utils.toBase64(new Array(32).fill(1)),
1803
+ subject: '02' + 'a'.repeat(64),
1804
+ serialNumber: index_1.Utils.toBase64(new Array(32).fill(2)),
1805
+ certifier: '02' + 'c'.repeat(64),
1806
+ revocationOutpoint: 'cafebabecafebabecafebabecafebabecafebabecafebabecafebabecafebabe.1',
1807
+ signature: '3045022100e4d03d959697ed191f9ef7ae7deacd3118b8693d18da0fd76e4ad92664ce05cf02200d753951e766cbf2d2b306e08921c06341d2de67ab75389bf84caf954ee40e88',
1808
+ fields: {},
1809
+ certifierInfo: {
1810
+ name: 'Certifier Two',
1811
+ iconUrl: 'https://example.com/icon2.png',
1812
+ description: 'Second certifier',
1813
+ trust: 7
1814
+ },
1815
+ publiclyRevealedKeyring: {},
1816
+ decryptedFields: {
1817
+ fieldB: 'decryptedValueB',
1818
+ fieldC: 'decryptedValueC'
1819
+ }
1820
+ }
1821
+ ]
1822
+ });
1823
+ const wallet = createTestWalletWire(mockUnsupportedMethods({
1824
+ discoverByIdentityKey: discoverByIdentityKeyMock
1825
+ }));
1826
+ const args = {
1827
+ identityKey: '02' + 'a'.repeat(64),
1828
+ limit: 10,
1829
+ offset: 0
1830
+ };
1831
+ const result = await wallet.discoverByIdentityKey(args);
1832
+ expect(result).toHaveProperty('totalCertificates', 2);
1833
+ expect(result.certificates.length).toBe(2);
1834
+ expect(result.certificates[0].certifierInfo.name).toBe('Certifier One');
1835
+ expect(result.certificates[1].certifierInfo.name).toBe('Certifier Two');
1836
+ expect(discoverByIdentityKeyMock).toHaveBeenCalledWith(args, '');
1837
+ });
1838
+ });
1839
+ describe('discoverByAttributes', () => {
1840
+ it('should discover certificates by attributes with valid inputs', async () => {
1841
+ // Mock the discoverByAttributes method
1842
+ const discoverByAttributesMock = jest.fn().mockResolvedValue({
1843
+ totalCertificates: 1,
1844
+ certificates: [
1845
+ {
1846
+ type: index_1.Utils.toBase64(new Array(32).fill(1)),
1847
+ subject: '02' + 'a'.repeat(64),
1848
+ serialNumber: index_1.Utils.toBase64(new Array(32).fill(2)),
1849
+ certifier: '02' + 'b'.repeat(64),
1850
+ revocationOutpoint: 'deadbeef20248806deadbeef20248806deadbeef20248806deadbeef20248806.0',
1851
+ signature: '3045022100e4d03d959697ed191f9ef7ae7deacd3118b8693d18da0fd76e4ad92664ce05cf02200d753951e766cbf2d2b306e08921c06341d2de67ab75389bf84caf954ee40e88',
1852
+ fields: {},
1853
+ certifierInfo: {
1854
+ name: 'Test Certifier',
1855
+ iconUrl: 'https://example.com/icon.png',
1856
+ description: 'Test description',
1857
+ trust: 5
1858
+ },
1859
+ publiclyRevealedKeyring: {},
1860
+ decryptedFields: {}
1861
+ }
1862
+ ]
1863
+ });
1864
+ const wallet = createTestWalletWire(mockUnsupportedMethods({
1865
+ discoverByAttributes: discoverByAttributesMock
1866
+ }));
1867
+ const args = {
1868
+ attributes: {
1869
+ field1: 'value1'
1870
+ },
1871
+ limit: 10,
1872
+ offset: 0
1873
+ };
1874
+ const result = await wallet.discoverByAttributes(args);
1875
+ expect(result).toHaveProperty('totalCertificates');
1876
+ expect(result).toHaveProperty('certificates');
1877
+ expect(Array.isArray(result.certificates)).toBe(true);
1878
+ expect(discoverByAttributesMock).toHaveBeenCalledWith(args, '');
1879
+ });
1880
+ it('should throw an error with invalid inputs', async () => {
1881
+ // Mock the discoverByAttributes method to throw an error
1882
+ const discoverByAttributesMock = jest
1883
+ .fn()
1884
+ .mockRejectedValue(new Error('Invalid inputs'));
1885
+ const wallet = createTestWalletWire(mockUnsupportedMethods({
1886
+ discoverByAttributes: discoverByAttributesMock
1887
+ }));
1888
+ const args = {
1889
+ attributes: {}
1890
+ };
1891
+ await expect(wallet.discoverByAttributes(args)).rejects.toThrow('Invalid inputs');
1892
+ expect(discoverByAttributesMock).toHaveBeenCalledWith(args, '');
1893
+ });
1894
+ it('should discover certificates matching provided attributes', async () => {
1895
+ // Mock the discoverByAttributes method
1896
+ const discoverByAttributesMock = jest.fn().mockResolvedValue({
1897
+ totalCertificates: 1,
1898
+ certificates: [
1899
+ {
1900
+ type: index_1.Utils.toBase64(new Array(32).fill(1)),
1901
+ subject: '02' + 'd'.repeat(64),
1902
+ serialNumber: index_1.Utils.toBase64(new Array(32).fill(2)),
1903
+ certifier: '02' + 'e'.repeat(64),
1904
+ revocationOutpoint: 'beadbeadbeadbeadbeadbeadbeadbeadbeadbeadbeadbeadbeadbeadbeadbead.2',
1905
+ signature: '3045022100e4d03d959697ed191f9ef7ae7deacd3118b8693d18da0fd76e4ad92664ce05cf02200d753951e766cbf2d2b306e08921c06341d2de67ab75389bf84caf954ee40e88',
1906
+ fields: {},
1907
+ certifierInfo: {
1908
+ name: 'Certifier Three',
1909
+ iconUrl: 'https://example.com/icon3.png',
1910
+ description: 'Third certifier',
1911
+ trust: 8
1912
+ },
1913
+ publiclyRevealedKeyring: {
1914
+ fieldX: index_1.Utils.toBase64([0x0a, 0x0b])
1915
+ },
1916
+ decryptedFields: {
1917
+ fieldY: 'decryptedValueY'
1918
+ }
1919
+ }
1920
+ ]
1921
+ });
1922
+ const wallet = createTestWalletWire(mockUnsupportedMethods({
1923
+ discoverByAttributes: discoverByAttributesMock
1924
+ }));
1925
+ const args = {
1926
+ attributes: {
1927
+ fieldY: 'decryptedValueY'
1928
+ },
1929
+ limit: 5,
1930
+ offset: 0
1931
+ };
1932
+ const result = await wallet.discoverByAttributes(args);
1933
+ expect(result).toHaveProperty('totalCertificates', 1);
1934
+ expect(result.certificates.length).toBe(1);
1935
+ expect(result.certificates[0].certifierInfo.name).toBe('Certifier Three');
1936
+ expect(result.certificates[0].decryptedFields.fieldY).toBe('decryptedValueY');
1937
+ expect(discoverByAttributesMock).toHaveBeenCalledWith(args, '');
1938
+ });
1939
+ it('should return empty certificates array when no matches found', async () => {
1940
+ // Mock the discoverByAttributes method
1941
+ const discoverByAttributesMock = jest.fn().mockResolvedValue({
1942
+ totalCertificates: 0,
1943
+ certificates: []
1944
+ });
1945
+ const wallet = createTestWalletWire(mockUnsupportedMethods({
1946
+ discoverByAttributes: discoverByAttributesMock
1947
+ }));
1948
+ const args = {
1949
+ attributes: {
1950
+ nonExistentField: 'noValue'
1951
+ },
1952
+ limit: 5,
1953
+ offset: 0
1954
+ };
1955
+ const result = await wallet.discoverByAttributes(args);
1956
+ expect(result).toHaveProperty('totalCertificates', 0);
1957
+ expect(result.certificates.length).toBe(0);
1958
+ expect(discoverByAttributesMock).toHaveBeenCalledWith(args, '');
1959
+ });
1960
+ });
1961
+ });
1962
+ //# sourceMappingURL=WalletWire.integration.test.js.map