@bsv/sdk 1.3.12 → 1.3.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (607) hide show
  1. package/dist/cjs/package.json +15 -3
  2. package/dist/cjs/src/auth/Peer.js +83 -57
  3. package/dist/cjs/src/auth/Peer.js.map +1 -1
  4. package/dist/cjs/src/auth/SessionManager.js +14 -9
  5. package/dist/cjs/src/auth/SessionManager.js.map +1 -1
  6. package/dist/cjs/src/auth/certificates/Certificate.js +16 -10
  7. package/dist/cjs/src/auth/certificates/Certificate.js.map +1 -1
  8. package/dist/cjs/src/auth/certificates/MasterCertificate.js +25 -23
  9. package/dist/cjs/src/auth/certificates/MasterCertificate.js.map +1 -1
  10. package/dist/cjs/src/auth/certificates/VerifiableCertificate.js +2 -2
  11. package/dist/cjs/src/auth/certificates/VerifiableCertificate.js.map +1 -1
  12. package/dist/cjs/src/auth/certificates/__tests/CompletedProtoWallet.js +62 -46
  13. package/dist/cjs/src/auth/certificates/__tests/CompletedProtoWallet.js.map +1 -1
  14. package/dist/cjs/src/auth/clients/AuthFetch.js +1 -0
  15. package/dist/cjs/src/auth/clients/AuthFetch.js.map +1 -1
  16. package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js +70 -43
  17. package/dist/cjs/src/auth/transports/SimplifiedFetchTransport.js.map +1 -1
  18. package/dist/cjs/src/auth/utils/createNonce.js +2 -1
  19. package/dist/cjs/src/auth/utils/createNonce.js.map +1 -1
  20. package/dist/cjs/src/auth/utils/getVerifiableCertificates.js.map +1 -1
  21. package/dist/cjs/src/auth/utils/validateCertificates.js +5 -2
  22. package/dist/cjs/src/auth/utils/validateCertificates.js.map +1 -1
  23. package/dist/cjs/src/auth/utils/verifyNonce.js +2 -1
  24. package/dist/cjs/src/auth/utils/verifyNonce.js.map +1 -1
  25. package/dist/cjs/src/compat/BSM.js +7 -17
  26. package/dist/cjs/src/compat/BSM.js.map +1 -1
  27. package/dist/cjs/src/compat/ECIES.js +172 -133
  28. package/dist/cjs/src/compat/ECIES.js.map +1 -1
  29. package/dist/cjs/src/compat/HD.js +63 -73
  30. package/dist/cjs/src/compat/HD.js.map +1 -1
  31. package/dist/cjs/src/compat/Mnemonic.js +102 -106
  32. package/dist/cjs/src/compat/Mnemonic.js.map +1 -1
  33. package/dist/cjs/src/compat/Utxo.js +2 -2
  34. package/dist/cjs/src/compat/Utxo.js.map +1 -1
  35. package/dist/cjs/src/compat/index.js +7 -17
  36. package/dist/cjs/src/compat/index.js.map +1 -1
  37. package/dist/cjs/src/messages/EncryptedMessage.js +3 -1
  38. package/dist/cjs/src/messages/EncryptedMessage.js.map +1 -1
  39. package/dist/cjs/src/messages/SignedMessage.js +1 -0
  40. package/dist/cjs/src/messages/SignedMessage.js.map +1 -1
  41. package/dist/cjs/src/messages/index.js +7 -17
  42. package/dist/cjs/src/messages/index.js.map +1 -1
  43. package/dist/cjs/src/overlay-tools/LookupResolver.js +54 -35
  44. package/dist/cjs/src/overlay-tools/LookupResolver.js.map +1 -1
  45. package/dist/cjs/src/overlay-tools/OverlayAdminTokenTemplate.js +32 -20
  46. package/dist/cjs/src/overlay-tools/OverlayAdminTokenTemplate.js.map +1 -1
  47. package/dist/cjs/src/overlay-tools/SHIPBroadcaster.js +40 -28
  48. package/dist/cjs/src/overlay-tools/SHIPBroadcaster.js.map +1 -1
  49. package/dist/cjs/src/primitives/AESGCM.js +6 -5
  50. package/dist/cjs/src/primitives/AESGCM.js.map +1 -1
  51. package/dist/cjs/src/primitives/BasePoint.js +1 -1
  52. package/dist/cjs/src/primitives/BasePoint.js.map +1 -1
  53. package/dist/cjs/src/primitives/BigNumber.js +50 -62
  54. package/dist/cjs/src/primitives/BigNumber.js.map +1 -1
  55. package/dist/cjs/src/primitives/Curve.js +46 -22
  56. package/dist/cjs/src/primitives/Curve.js.map +1 -1
  57. package/dist/cjs/src/primitives/DRBG.js +2 -8
  58. package/dist/cjs/src/primitives/DRBG.js.map +1 -1
  59. package/dist/cjs/src/primitives/ECDSA.js +51 -35
  60. package/dist/cjs/src/primitives/ECDSA.js.map +1 -1
  61. package/dist/cjs/src/primitives/Hash.js +191 -216
  62. package/dist/cjs/src/primitives/Hash.js.map +1 -1
  63. package/dist/cjs/src/primitives/JacobianPoint.js +19 -5
  64. package/dist/cjs/src/primitives/JacobianPoint.js.map +1 -1
  65. package/dist/cjs/src/primitives/K256.js.map +1 -1
  66. package/dist/cjs/src/primitives/Mersenne.js.map +1 -1
  67. package/dist/cjs/src/primitives/MontgomoryMethod.js.map +1 -1
  68. package/dist/cjs/src/primitives/Point.js +117 -88
  69. package/dist/cjs/src/primitives/Point.js.map +1 -1
  70. package/dist/cjs/src/primitives/Polynomial.js +4 -2
  71. package/dist/cjs/src/primitives/Polynomial.js.map +1 -1
  72. package/dist/cjs/src/primitives/PrivateKey.js +32 -33
  73. package/dist/cjs/src/primitives/PrivateKey.js.map +1 -1
  74. package/dist/cjs/src/primitives/PublicKey.js.map +1 -1
  75. package/dist/cjs/src/primitives/Random.js +6 -5
  76. package/dist/cjs/src/primitives/Random.js.map +1 -1
  77. package/dist/cjs/src/primitives/ReductionContext.js +1 -1
  78. package/dist/cjs/src/primitives/ReductionContext.js.map +1 -1
  79. package/dist/cjs/src/primitives/Schnorr.js +21 -15
  80. package/dist/cjs/src/primitives/Schnorr.js.map +1 -1
  81. package/dist/cjs/src/primitives/Signature.js +8 -7
  82. package/dist/cjs/src/primitives/Signature.js.map +1 -1
  83. package/dist/cjs/src/primitives/SymmetricKey.js +13 -13
  84. package/dist/cjs/src/primitives/SymmetricKey.js.map +1 -1
  85. package/dist/cjs/src/primitives/TransactionSignature.js +31 -29
  86. package/dist/cjs/src/primitives/TransactionSignature.js.map +1 -1
  87. package/dist/cjs/src/primitives/index.js +7 -17
  88. package/dist/cjs/src/primitives/index.js.map +1 -1
  89. package/dist/cjs/src/primitives/utils.js +79 -68
  90. package/dist/cjs/src/primitives/utils.js.map +1 -1
  91. package/dist/cjs/src/script/OP.js +3 -3
  92. package/dist/cjs/src/script/OP.js.map +1 -1
  93. package/dist/cjs/src/script/Script.js +12 -10
  94. package/dist/cjs/src/script/Script.js.map +1 -1
  95. package/dist/cjs/src/script/Spend.js +47 -49
  96. package/dist/cjs/src/script/Spend.js.map +1 -1
  97. package/dist/cjs/src/script/templates/P2PKH.js +24 -12
  98. package/dist/cjs/src/script/templates/P2PKH.js.map +1 -1
  99. package/dist/cjs/src/script/templates/PushDrop.js +28 -23
  100. package/dist/cjs/src/script/templates/PushDrop.js.map +1 -1
  101. package/dist/cjs/src/script/templates/RPuzzle.js +10 -6
  102. package/dist/cjs/src/script/templates/RPuzzle.js.map +1 -1
  103. package/dist/cjs/src/totp/totp.js +2 -1
  104. package/dist/cjs/src/totp/totp.js.map +1 -1
  105. package/dist/cjs/src/transaction/Beef.js +177 -154
  106. package/dist/cjs/src/transaction/Beef.js.map +1 -1
  107. package/dist/cjs/src/transaction/BeefParty.js +24 -24
  108. package/dist/cjs/src/transaction/BeefParty.js.map +1 -1
  109. package/dist/cjs/src/transaction/BeefTx.js +26 -18
  110. package/dist/cjs/src/transaction/BeefTx.js.map +1 -1
  111. package/dist/cjs/src/transaction/Broadcaster.js +3 -2
  112. package/dist/cjs/src/transaction/Broadcaster.js.map +1 -1
  113. package/dist/cjs/src/transaction/MerklePath.js +64 -37
  114. package/dist/cjs/src/transaction/MerklePath.js.map +1 -1
  115. package/dist/cjs/src/transaction/Transaction.js +111 -137
  116. package/dist/cjs/src/transaction/Transaction.js.map +1 -1
  117. package/dist/cjs/src/transaction/broadcasters/ARC.js +25 -16
  118. package/dist/cjs/src/transaction/broadcasters/ARC.js.map +1 -1
  119. package/dist/cjs/src/transaction/broadcasters/DefaultBroadcaster.js +2 -1
  120. package/dist/cjs/src/transaction/broadcasters/DefaultBroadcaster.js.map +1 -1
  121. package/dist/cjs/src/transaction/broadcasters/WhatsOnChainBroadcaster.js.map +1 -1
  122. package/dist/cjs/src/transaction/chaintrackers/DefaultChainTracker.js +2 -1
  123. package/dist/cjs/src/transaction/chaintrackers/DefaultChainTracker.js.map +1 -1
  124. package/dist/cjs/src/transaction/chaintrackers/WhatsOnChain.js +3 -3
  125. package/dist/cjs/src/transaction/chaintrackers/WhatsOnChain.js.map +1 -1
  126. package/dist/cjs/src/transaction/fee-models/SatoshisPerKilobyte.js.map +1 -1
  127. package/dist/cjs/src/transaction/http/DefaultHttpClient.js +5 -3
  128. package/dist/cjs/src/transaction/http/DefaultHttpClient.js.map +1 -1
  129. package/dist/cjs/src/transaction/http/FetchHttpClient.js +5 -2
  130. package/dist/cjs/src/transaction/http/FetchHttpClient.js.map +1 -1
  131. package/dist/cjs/src/transaction/http/NodejsHttpClient.js +5 -3
  132. package/dist/cjs/src/transaction/http/NodejsHttpClient.js.map +1 -1
  133. package/dist/cjs/src/transaction/http/index.js.map +1 -1
  134. package/dist/cjs/src/transaction/index.js.map +1 -1
  135. package/dist/cjs/src/wallet/CachedKeyDeriver.js +91 -66
  136. package/dist/cjs/src/wallet/CachedKeyDeriver.js.map +1 -1
  137. package/dist/cjs/src/wallet/KeyDeriver.js +61 -52
  138. package/dist/cjs/src/wallet/KeyDeriver.js.map +1 -1
  139. package/dist/cjs/src/wallet/ProtoWallet.js +79 -29
  140. package/dist/cjs/src/wallet/ProtoWallet.js.map +1 -1
  141. package/dist/cjs/src/wallet/WalletClient.js +7 -2
  142. package/dist/cjs/src/wallet/WalletClient.js.map +1 -1
  143. package/dist/cjs/src/wallet/WalletError.js +2 -2
  144. package/dist/cjs/src/wallet/WalletError.js.map +1 -1
  145. package/dist/cjs/src/wallet/substrates/HTTPWalletJSON.js +4 -3
  146. package/dist/cjs/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
  147. package/dist/cjs/src/wallet/substrates/HTTPWalletWire.js +2 -2
  148. package/dist/cjs/src/wallet/substrates/HTTPWalletWire.js.map +1 -1
  149. package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js +1239 -1261
  150. package/dist/cjs/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
  151. package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js +102 -43
  152. package/dist/cjs/src/wallet/substrates/WalletWireTransceiver.js.map +1 -1
  153. package/dist/cjs/src/wallet/substrates/XDM.js +8 -3
  154. package/dist/cjs/src/wallet/substrates/XDM.js.map +1 -1
  155. package/dist/cjs/src/wallet/substrates/window.CWI.js +28 -28
  156. package/dist/cjs/src/wallet/substrates/window.CWI.js.map +1 -1
  157. package/dist/cjs/tsconfig.cjs.tsbuildinfo +1 -1
  158. package/dist/esm/mod.js +15 -15
  159. package/dist/esm/src/auth/Peer.js +75 -54
  160. package/dist/esm/src/auth/Peer.js.map +1 -1
  161. package/dist/esm/src/auth/SessionManager.js +14 -9
  162. package/dist/esm/src/auth/SessionManager.js.map +1 -1
  163. package/dist/esm/src/auth/certificates/Certificate.js +15 -11
  164. package/dist/esm/src/auth/certificates/Certificate.js.map +1 -1
  165. package/dist/esm/src/auth/certificates/MasterCertificate.js +25 -23
  166. package/dist/esm/src/auth/certificates/MasterCertificate.js.map +1 -1
  167. package/dist/esm/src/auth/certificates/VerifiableCertificate.js +2 -2
  168. package/dist/esm/src/auth/certificates/VerifiableCertificate.js.map +1 -1
  169. package/dist/esm/src/auth/certificates/__tests/CompletedProtoWallet.js +64 -47
  170. package/dist/esm/src/auth/certificates/__tests/CompletedProtoWallet.js.map +1 -1
  171. package/dist/esm/src/auth/clients/AuthFetch.js +1 -0
  172. package/dist/esm/src/auth/clients/AuthFetch.js.map +1 -1
  173. package/dist/esm/src/auth/transports/SimplifiedFetchTransport.js +69 -43
  174. package/dist/esm/src/auth/transports/SimplifiedFetchTransport.js.map +1 -1
  175. package/dist/esm/src/auth/utils/createNonce.js.map +1 -1
  176. package/dist/esm/src/auth/utils/getVerifiableCertificates.js +1 -1
  177. package/dist/esm/src/auth/utils/getVerifiableCertificates.js.map +1 -1
  178. package/dist/esm/src/auth/utils/validateCertificates.js +6 -3
  179. package/dist/esm/src/auth/utils/validateCertificates.js.map +1 -1
  180. package/dist/esm/src/auth/utils/verifyNonce.js.map +1 -1
  181. package/dist/esm/src/compat/BSM.js.map +1 -1
  182. package/dist/esm/src/compat/ECIES.js +165 -116
  183. package/dist/esm/src/compat/ECIES.js.map +1 -1
  184. package/dist/esm/src/compat/HD.js +56 -56
  185. package/dist/esm/src/compat/HD.js.map +1 -1
  186. package/dist/esm/src/compat/Mnemonic.js +95 -89
  187. package/dist/esm/src/compat/Mnemonic.js.map +1 -1
  188. package/dist/esm/src/compat/Utxo.js +1 -1
  189. package/dist/esm/src/compat/Utxo.js.map +1 -1
  190. package/dist/esm/src/messages/EncryptedMessage.js +3 -1
  191. package/dist/esm/src/messages/EncryptedMessage.js.map +1 -1
  192. package/dist/esm/src/messages/SignedMessage.js +1 -0
  193. package/dist/esm/src/messages/SignedMessage.js.map +1 -1
  194. package/dist/esm/src/overlay-tools/LookupResolver.js +53 -35
  195. package/dist/esm/src/overlay-tools/LookupResolver.js.map +1 -1
  196. package/dist/esm/src/overlay-tools/OverlayAdminTokenTemplate.js +32 -20
  197. package/dist/esm/src/overlay-tools/OverlayAdminTokenTemplate.js.map +1 -1
  198. package/dist/esm/src/overlay-tools/SHIPBroadcaster.js +40 -28
  199. package/dist/esm/src/overlay-tools/SHIPBroadcaster.js.map +1 -1
  200. package/dist/esm/src/primitives/AESGCM.js +1 -0
  201. package/dist/esm/src/primitives/AESGCM.js.map +1 -1
  202. package/dist/esm/src/primitives/BasePoint.js +1 -1
  203. package/dist/esm/src/primitives/BasePoint.js.map +1 -1
  204. package/dist/esm/src/primitives/BigNumber.js +50 -62
  205. package/dist/esm/src/primitives/BigNumber.js.map +1 -1
  206. package/dist/esm/src/primitives/Curve.js +45 -22
  207. package/dist/esm/src/primitives/Curve.js.map +1 -1
  208. package/dist/esm/src/primitives/DRBG.js +2 -8
  209. package/dist/esm/src/primitives/DRBG.js.map +1 -1
  210. package/dist/esm/src/primitives/ECDSA.js +50 -35
  211. package/dist/esm/src/primitives/ECDSA.js.map +1 -1
  212. package/dist/esm/src/primitives/Hash.js +188 -213
  213. package/dist/esm/src/primitives/Hash.js.map +1 -1
  214. package/dist/esm/src/primitives/JacobianPoint.js +18 -5
  215. package/dist/esm/src/primitives/JacobianPoint.js.map +1 -1
  216. package/dist/esm/src/primitives/K256.js.map +1 -1
  217. package/dist/esm/src/primitives/Mersenne.js.map +1 -1
  218. package/dist/esm/src/primitives/MontgomoryMethod.js.map +1 -1
  219. package/dist/esm/src/primitives/Point.js +107 -88
  220. package/dist/esm/src/primitives/Point.js.map +1 -1
  221. package/dist/esm/src/primitives/Polynomial.js +4 -2
  222. package/dist/esm/src/primitives/Polynomial.js.map +1 -1
  223. package/dist/esm/src/primitives/PrivateKey.js +25 -16
  224. package/dist/esm/src/primitives/PrivateKey.js.map +1 -1
  225. package/dist/esm/src/primitives/PublicKey.js.map +1 -1
  226. package/dist/esm/src/primitives/Random.js +7 -6
  227. package/dist/esm/src/primitives/Random.js.map +1 -1
  228. package/dist/esm/src/primitives/ReductionContext.js +1 -1
  229. package/dist/esm/src/primitives/ReductionContext.js.map +1 -1
  230. package/dist/esm/src/primitives/Schnorr.js +21 -15
  231. package/dist/esm/src/primitives/Schnorr.js.map +1 -1
  232. package/dist/esm/src/primitives/Signature.js +8 -7
  233. package/dist/esm/src/primitives/Signature.js.map +1 -1
  234. package/dist/esm/src/primitives/SymmetricKey.js +13 -13
  235. package/dist/esm/src/primitives/SymmetricKey.js.map +1 -1
  236. package/dist/esm/src/primitives/TransactionSignature.js +22 -12
  237. package/dist/esm/src/primitives/TransactionSignature.js.map +1 -1
  238. package/dist/esm/src/primitives/utils.js +76 -66
  239. package/dist/esm/src/primitives/utils.js.map +1 -1
  240. package/dist/esm/src/script/OP.js +3 -3
  241. package/dist/esm/src/script/OP.js.map +1 -1
  242. package/dist/esm/src/script/Script.js +12 -10
  243. package/dist/esm/src/script/Script.js.map +1 -1
  244. package/dist/esm/src/script/Spend.js +39 -32
  245. package/dist/esm/src/script/Spend.js.map +1 -1
  246. package/dist/esm/src/script/templates/P2PKH.js +26 -11
  247. package/dist/esm/src/script/templates/P2PKH.js.map +1 -1
  248. package/dist/esm/src/script/templates/PushDrop.js +29 -22
  249. package/dist/esm/src/script/templates/PushDrop.js.map +1 -1
  250. package/dist/esm/src/script/templates/RPuzzle.js +11 -6
  251. package/dist/esm/src/script/templates/RPuzzle.js.map +1 -1
  252. package/dist/esm/src/totp/totp.js +2 -1
  253. package/dist/esm/src/totp/totp.js.map +1 -1
  254. package/dist/esm/src/transaction/Beef.js +176 -154
  255. package/dist/esm/src/transaction/Beef.js.map +1 -1
  256. package/dist/esm/src/transaction/BeefParty.js +24 -24
  257. package/dist/esm/src/transaction/BeefParty.js.map +1 -1
  258. package/dist/esm/src/transaction/BeefTx.js +26 -18
  259. package/dist/esm/src/transaction/BeefTx.js.map +1 -1
  260. package/dist/esm/src/transaction/Broadcaster.js.map +1 -1
  261. package/dist/esm/src/transaction/MerklePath.js +61 -36
  262. package/dist/esm/src/transaction/MerklePath.js.map +1 -1
  263. package/dist/esm/src/transaction/Transaction.js +105 -138
  264. package/dist/esm/src/transaction/Transaction.js.map +1 -1
  265. package/dist/esm/src/transaction/broadcasters/ARC.js +25 -16
  266. package/dist/esm/src/transaction/broadcasters/ARC.js.map +1 -1
  267. package/dist/esm/src/transaction/broadcasters/DefaultBroadcaster.js.map +1 -1
  268. package/dist/esm/src/transaction/broadcasters/WhatsOnChainBroadcaster.js.map +1 -1
  269. package/dist/esm/src/transaction/chaintrackers/WhatsOnChain.js +3 -3
  270. package/dist/esm/src/transaction/chaintrackers/WhatsOnChain.js.map +1 -1
  271. package/dist/esm/src/transaction/fee-models/SatoshisPerKilobyte.js.map +1 -1
  272. package/dist/esm/src/transaction/http/DefaultHttpClient.js +3 -2
  273. package/dist/esm/src/transaction/http/DefaultHttpClient.js.map +1 -1
  274. package/dist/esm/src/transaction/http/FetchHttpClient.js +4 -2
  275. package/dist/esm/src/transaction/http/FetchHttpClient.js.map +1 -1
  276. package/dist/esm/src/transaction/http/NodejsHttpClient.js +5 -3
  277. package/dist/esm/src/transaction/http/NodejsHttpClient.js.map +1 -1
  278. package/dist/esm/src/transaction/http/index.js.map +1 -1
  279. package/dist/esm/src/transaction/index.js.map +1 -1
  280. package/dist/esm/src/wallet/CachedKeyDeriver.js +91 -66
  281. package/dist/esm/src/wallet/CachedKeyDeriver.js.map +1 -1
  282. package/dist/esm/src/wallet/KeyDeriver.js +60 -52
  283. package/dist/esm/src/wallet/KeyDeriver.js.map +1 -1
  284. package/dist/esm/src/wallet/ProtoWallet.js +75 -29
  285. package/dist/esm/src/wallet/ProtoWallet.js.map +1 -1
  286. package/dist/esm/src/wallet/WalletClient.js +7 -2
  287. package/dist/esm/src/wallet/WalletClient.js.map +1 -1
  288. package/dist/esm/src/wallet/WalletError.js +2 -2
  289. package/dist/esm/src/wallet/WalletError.js.map +1 -1
  290. package/dist/esm/src/wallet/substrates/HTTPWalletJSON.js +4 -4
  291. package/dist/esm/src/wallet/substrates/HTTPWalletJSON.js.map +1 -1
  292. package/dist/esm/src/wallet/substrates/HTTPWalletWire.js +2 -2
  293. package/dist/esm/src/wallet/substrates/HTTPWalletWire.js.map +1 -1
  294. package/dist/esm/src/wallet/substrates/WalletWireProcessor.js +1239 -1261
  295. package/dist/esm/src/wallet/substrates/WalletWireProcessor.js.map +1 -1
  296. package/dist/esm/src/wallet/substrates/WalletWireTransceiver.js +95 -43
  297. package/dist/esm/src/wallet/substrates/WalletWireTransceiver.js.map +1 -1
  298. package/dist/esm/src/wallet/substrates/XDM.js +8 -3
  299. package/dist/esm/src/wallet/substrates/XDM.js.map +1 -1
  300. package/dist/esm/src/wallet/substrates/window.CWI.js +28 -28
  301. package/dist/esm/src/wallet/substrates/window.CWI.js.map +1 -1
  302. package/dist/esm/tsconfig.esm.tsbuildinfo +1 -1
  303. package/dist/types/mod.d.ts +15 -15
  304. package/dist/types/src/auth/Peer.d.ts +10 -10
  305. package/dist/types/src/auth/Peer.d.ts.map +1 -1
  306. package/dist/types/src/auth/SessionManager.d.ts +4 -4
  307. package/dist/types/src/auth/SessionManager.d.ts.map +1 -1
  308. package/dist/types/src/auth/certificates/Certificate.d.ts +6 -6
  309. package/dist/types/src/auth/certificates/Certificate.d.ts.map +1 -1
  310. package/dist/types/src/auth/certificates/MasterCertificate.d.ts +5 -5
  311. package/dist/types/src/auth/certificates/MasterCertificate.d.ts.map +1 -1
  312. package/dist/types/src/auth/certificates/VerifiableCertificate.d.ts.map +1 -1
  313. package/dist/types/src/auth/certificates/__tests/CompletedProtoWallet.d.ts +23 -22
  314. package/dist/types/src/auth/certificates/__tests/CompletedProtoWallet.d.ts.map +1 -1
  315. package/dist/types/src/auth/clients/AuthFetch.d.ts.map +1 -1
  316. package/dist/types/src/auth/transports/SimplifiedFetchTransport.d.ts +1 -1
  317. package/dist/types/src/auth/transports/SimplifiedFetchTransport.d.ts.map +1 -1
  318. package/dist/types/src/auth/utils/createNonce.d.ts.map +1 -1
  319. package/dist/types/src/auth/utils/getVerifiableCertificates.d.ts +3 -3
  320. package/dist/types/src/auth/utils/getVerifiableCertificates.d.ts.map +1 -1
  321. package/dist/types/src/auth/utils/validateCertificates.d.ts +2 -2
  322. package/dist/types/src/auth/utils/validateCertificates.d.ts.map +1 -1
  323. package/dist/types/src/auth/utils/verifyNonce.d.ts +1 -1
  324. package/dist/types/src/auth/utils/verifyNonce.d.ts.map +1 -1
  325. package/dist/types/src/compat/BSM.d.ts +1 -1
  326. package/dist/types/src/compat/BSM.d.ts.map +1 -1
  327. package/dist/types/src/compat/ECIES.d.ts +36 -36
  328. package/dist/types/src/compat/ECIES.d.ts.map +1 -1
  329. package/dist/types/src/compat/HD.d.ts +51 -51
  330. package/dist/types/src/compat/HD.d.ts.map +1 -1
  331. package/dist/types/src/compat/Mnemonic.d.ts +79 -79
  332. package/dist/types/src/compat/Mnemonic.d.ts.map +1 -1
  333. package/dist/types/src/compat/Utxo.d.ts.map +1 -1
  334. package/dist/types/src/messages/EncryptedMessage.d.ts.map +1 -1
  335. package/dist/types/src/messages/SignedMessage.d.ts.map +1 -1
  336. package/dist/types/src/overlay-tools/LookupResolver.d.ts +9 -9
  337. package/dist/types/src/overlay-tools/LookupResolver.d.ts.map +1 -1
  338. package/dist/types/src/overlay-tools/OverlayAdminTokenTemplate.d.ts +17 -17
  339. package/dist/types/src/overlay-tools/OverlayAdminTokenTemplate.d.ts.map +1 -1
  340. package/dist/types/src/overlay-tools/SHIPBroadcaster.d.ts +14 -14
  341. package/dist/types/src/overlay-tools/SHIPBroadcaster.d.ts.map +1 -1
  342. package/dist/types/src/primitives/AESGCM.d.ts.map +1 -1
  343. package/dist/types/src/primitives/BasePoint.d.ts +8 -8
  344. package/dist/types/src/primitives/BasePoint.d.ts.map +1 -1
  345. package/dist/types/src/primitives/BigNumber.d.ts.map +1 -1
  346. package/dist/types/src/primitives/Curve.d.ts +14 -7
  347. package/dist/types/src/primitives/Curve.d.ts.map +1 -1
  348. package/dist/types/src/primitives/DRBG.d.ts.map +1 -1
  349. package/dist/types/src/primitives/ECDSA.d.ts +1 -1
  350. package/dist/types/src/primitives/ECDSA.d.ts.map +1 -1
  351. package/dist/types/src/primitives/Hash.d.ts +11 -11
  352. package/dist/types/src/primitives/Hash.d.ts.map +1 -1
  353. package/dist/types/src/primitives/JacobianPoint.d.ts.map +1 -1
  354. package/dist/types/src/primitives/Point.d.ts +14 -10
  355. package/dist/types/src/primitives/Point.d.ts.map +1 -1
  356. package/dist/types/src/primitives/Polynomial.d.ts.map +1 -1
  357. package/dist/types/src/primitives/PrivateKey.d.ts +2 -2
  358. package/dist/types/src/primitives/PrivateKey.d.ts.map +1 -1
  359. package/dist/types/src/primitives/PublicKey.d.ts.map +1 -1
  360. package/dist/types/src/primitives/Random.d.ts.map +1 -1
  361. package/dist/types/src/primitives/Schnorr.d.ts +14 -14
  362. package/dist/types/src/primitives/Schnorr.d.ts.map +1 -1
  363. package/dist/types/src/primitives/Signature.d.ts +1 -1
  364. package/dist/types/src/primitives/Signature.d.ts.map +1 -1
  365. package/dist/types/src/primitives/SymmetricKey.d.ts +13 -13
  366. package/dist/types/src/primitives/SymmetricKey.d.ts.map +1 -1
  367. package/dist/types/src/primitives/TransactionSignature.d.ts +4 -4
  368. package/dist/types/src/primitives/TransactionSignature.d.ts.map +1 -1
  369. package/dist/types/src/primitives/utils.d.ts +3 -6
  370. package/dist/types/src/primitives/utils.d.ts.map +1 -1
  371. package/dist/types/src/script/Script.d.ts +3 -3
  372. package/dist/types/src/script/Script.d.ts.map +1 -1
  373. package/dist/types/src/script/ScriptTemplate.d.ts +2 -2
  374. package/dist/types/src/script/ScriptTemplate.d.ts.map +1 -1
  375. package/dist/types/src/script/Spend.d.ts.map +1 -1
  376. package/dist/types/src/script/templates/P2PKH.d.ts.map +1 -1
  377. package/dist/types/src/script/templates/PushDrop.d.ts +1 -2
  378. package/dist/types/src/script/templates/PushDrop.d.ts.map +1 -1
  379. package/dist/types/src/script/templates/RPuzzle.d.ts.map +1 -1
  380. package/dist/types/src/totp/totp.d.ts.map +1 -1
  381. package/dist/types/src/transaction/Beef.d.ts +96 -96
  382. package/dist/types/src/transaction/Beef.d.ts.map +1 -1
  383. package/dist/types/src/transaction/BeefParty.d.ts +22 -22
  384. package/dist/types/src/transaction/BeefParty.d.ts.map +1 -1
  385. package/dist/types/src/transaction/BeefTx.d.ts +5 -5
  386. package/dist/types/src/transaction/BeefTx.d.ts.map +1 -1
  387. package/dist/types/src/transaction/Broadcaster.d.ts.map +1 -1
  388. package/dist/types/src/transaction/ChainTracker.d.ts +2 -2
  389. package/dist/types/src/transaction/FeeModel.d.ts.map +1 -1
  390. package/dist/types/src/transaction/MerklePath.d.ts.map +1 -1
  391. package/dist/types/src/transaction/Transaction.d.ts +4 -12
  392. package/dist/types/src/transaction/Transaction.d.ts.map +1 -1
  393. package/dist/types/src/transaction/TransactionOutput.d.ts.map +1 -1
  394. package/dist/types/src/transaction/broadcasters/ARC.d.ts +1 -1
  395. package/dist/types/src/transaction/broadcasters/ARC.d.ts.map +1 -1
  396. package/dist/types/src/transaction/broadcasters/DefaultBroadcaster.d.ts.map +1 -1
  397. package/dist/types/src/transaction/broadcasters/WhatsOnChainBroadcaster.d.ts.map +1 -1
  398. package/dist/types/src/transaction/chaintrackers/DefaultChainTracker.d.ts.map +1 -1
  399. package/dist/types/src/transaction/chaintrackers/WhatsOnChain.d.ts.map +1 -1
  400. package/dist/types/src/transaction/fee-models/SatoshisPerKilobyte.d.ts.map +1 -1
  401. package/dist/types/src/transaction/http/DefaultHttpClient.d.ts +1 -1
  402. package/dist/types/src/transaction/http/DefaultHttpClient.d.ts.map +1 -1
  403. package/dist/types/src/transaction/http/FetchHttpClient.d.ts +5 -5
  404. package/dist/types/src/transaction/http/FetchHttpClient.d.ts.map +1 -1
  405. package/dist/types/src/transaction/http/HttpClient.d.ts +4 -4
  406. package/dist/types/src/transaction/http/HttpClient.d.ts.map +1 -1
  407. package/dist/types/src/transaction/http/NodejsHttpClient.d.ts +3 -3
  408. package/dist/types/src/transaction/http/NodejsHttpClient.d.ts.map +1 -1
  409. package/dist/types/src/transaction/http/index.d.ts.map +1 -1
  410. package/dist/types/src/transaction/index.d.ts.map +1 -1
  411. package/dist/types/src/wallet/CachedKeyDeriver.d.ts +58 -58
  412. package/dist/types/src/wallet/CachedKeyDeriver.d.ts.map +1 -1
  413. package/dist/types/src/wallet/KeyDeriver.d.ts +78 -78
  414. package/dist/types/src/wallet/KeyDeriver.d.ts.map +1 -1
  415. package/dist/types/src/wallet/ProtoWallet.d.ts +10 -10
  416. package/dist/types/src/wallet/ProtoWallet.d.ts.map +1 -1
  417. package/dist/types/src/wallet/Wallet.interfaces.d.ts +151 -152
  418. package/dist/types/src/wallet/Wallet.interfaces.d.ts.map +1 -1
  419. package/dist/types/src/wallet/WalletClient.d.ts +5 -5
  420. package/dist/types/src/wallet/WalletClient.d.ts.map +1 -1
  421. package/dist/types/src/wallet/substrates/HTTPWalletJSON.d.ts +6 -6
  422. package/dist/types/src/wallet/substrates/HTTPWalletJSON.d.ts.map +1 -1
  423. package/dist/types/src/wallet/substrates/HTTPWalletWire.d.ts.map +1 -1
  424. package/dist/types/src/wallet/substrates/WalletWireProcessor.d.ts.map +1 -1
  425. package/dist/types/src/wallet/substrates/WalletWireTransceiver.d.ts.map +1 -1
  426. package/dist/types/src/wallet/substrates/XDM.d.ts +1 -1
  427. package/dist/types/src/wallet/substrates/XDM.d.ts.map +1 -1
  428. package/dist/types/src/wallet/substrates/window.CWI.d.ts +6 -6
  429. package/dist/types/src/wallet/substrates/window.CWI.d.ts.map +1 -1
  430. package/dist/types/tsconfig.types.tsbuildinfo +1 -1
  431. package/dist/umd/bundle.js +1 -1
  432. package/docs/auth.md +92 -82
  433. package/docs/compat.md +24 -24
  434. package/docs/messages.md +7 -5
  435. package/docs/overlay-tools.md +21 -21
  436. package/docs/primitives.md +336 -315
  437. package/docs/script.md +35 -35
  438. package/docs/swagger/dist/swagger-initializer.js +7 -7
  439. package/docs/swagger/dist/swagger-ui-bundle.js +1 -1
  440. package/docs/swagger/dist/swagger-ui-es-bundle-core.js +2 -2
  441. package/docs/swagger/dist/swagger-ui-es-bundle.js +1 -1
  442. package/docs/swagger/dist/swagger-ui-standalone-preset.js +1 -1
  443. package/docs/swagger/dist/swagger-ui.js +2 -2
  444. package/docs/totp.md +5 -5
  445. package/docs/transaction.md +103 -105
  446. package/docs/wallet-substrates.md +17 -17
  447. package/docs/wallet.md +202 -204
  448. package/mod.ts +15 -15
  449. package/package.json +15 -3
  450. package/src/auth/Peer.ts +271 -121
  451. package/src/auth/SessionManager.ts +17 -10
  452. package/src/auth/__tests/Peer.test.ts +361 -179
  453. package/src/auth/__tests/SessionManager.test.ts +67 -19
  454. package/src/auth/__tests/build.test.ts +11 -0
  455. package/src/auth/certificates/Certificate.ts +27 -14
  456. package/src/auth/certificates/MasterCertificate.ts +106 -62
  457. package/src/auth/certificates/VerifiableCertificate.ts +30 -8
  458. package/src/auth/certificates/__tests/Certificate.test.ts +32 -17
  459. package/src/auth/certificates/__tests/CompletedProtoWallet.ts +171 -68
  460. package/src/auth/certificates/__tests/MasterCertificate.test.ts +63 -47
  461. package/src/auth/certificates/__tests/VerifiableCertificate.test.ts +42 -31
  462. package/src/auth/certificates/index.ts +1 -1
  463. package/src/auth/clients/AuthFetch.ts +1 -0
  464. package/src/auth/clients/index.ts +1 -1
  465. package/src/auth/transports/SimplifiedFetchTransport.ts +145 -72
  466. package/src/auth/transports/index.ts +1 -1
  467. package/src/auth/utils/__tests/cryptononce.test.ts +52 -23
  468. package/src/auth/utils/__tests/getVerifiableCertificates.test.ts +56 -30
  469. package/src/auth/utils/__tests/validateCertificates.test.ts +53 -31
  470. package/src/auth/utils/createNonce.ts +11 -3
  471. package/src/auth/utils/getVerifiableCertificates.ts +12 -7
  472. package/src/auth/utils/validateCertificates.ts +57 -39
  473. package/src/auth/utils/verifyNonce.ts +6 -2
  474. package/src/compat/BSM.ts +10 -2
  475. package/src/compat/ECIES.ts +265 -141
  476. package/src/compat/HD.ts +81 -63
  477. package/src/compat/Mnemonic.ts +104 -91
  478. package/src/compat/Utxo.ts +8 -5
  479. package/src/compat/__tests/BSM.test.ts +42 -16
  480. package/src/compat/__tests/ECIES.test.ts +117 -52
  481. package/src/compat/__tests/HD.test.ts +55 -42
  482. package/src/compat/__tests/Mnemonic.test.ts +11 -12
  483. package/src/compat/__tests/Mnemonic.vectors.ts +110 -55
  484. package/src/messages/EncryptedMessage.ts +6 -2
  485. package/src/messages/SignedMessage.ts +14 -8
  486. package/src/messages/__tests/EncryptedMessage.test.ts +23 -24
  487. package/src/messages/__tests/SignedMessage.test.ts +17 -11
  488. package/src/overlay-tools/LookupResolver.ts +108 -56
  489. package/src/overlay-tools/OverlayAdminTokenTemplate.ts +52 -23
  490. package/src/overlay-tools/SHIPBroadcaster.ts +135 -59
  491. package/src/overlay-tools/__tests/LookupResolver.test.ts +723 -323
  492. package/src/overlay-tools/__tests/OverlayAdminTokenTemplate.test.ts +50 -22
  493. package/src/overlay-tools/__tests/SHIPBroadcaster.test.ts +607 -290
  494. package/src/primitives/AESGCM.ts +2 -0
  495. package/src/primitives/BasePoint.ts +4 -4
  496. package/src/primitives/BigNumber.ts +99 -90
  497. package/src/primitives/Curve.ts +117 -46
  498. package/src/primitives/DRBG.ts +9 -11
  499. package/src/primitives/ECDSA.ts +109 -63
  500. package/src/primitives/Hash.ts +492 -321
  501. package/src/primitives/JacobianPoint.ts +67 -19
  502. package/src/primitives/Point.ts +254 -152
  503. package/src/primitives/Polynomial.ts +8 -3
  504. package/src/primitives/PrivateKey.ts +41 -17
  505. package/src/primitives/PublicKey.ts +13 -3
  506. package/src/primitives/Random.ts +14 -8
  507. package/src/primitives/ReductionContext.ts +1 -1
  508. package/src/primitives/Schnorr.ts +40 -18
  509. package/src/primitives/Signature.ts +26 -16
  510. package/src/primitives/SymmetricKey.ts +14 -14
  511. package/src/primitives/TransactionSignature.ts +41 -17
  512. package/src/primitives/__tests/AESGCM.test.ts +457 -151
  513. package/src/primitives/__tests/BRC42.private.vectors.ts +30 -15
  514. package/src/primitives/__tests/BRC42.public.vectors.ts +30 -15
  515. package/src/primitives/__tests/BigNumber.arithmatic.test.ts +344 -125
  516. package/src/primitives/__tests/BigNumber.binary.test.ts +148 -67
  517. package/src/primitives/__tests/BigNumber.constructor.test.ts +65 -25
  518. package/src/primitives/__tests/BigNumber.dhGroup.test.ts +15 -11
  519. package/src/primitives/__tests/BigNumber.fixtures.ts +16 -8
  520. package/src/primitives/__tests/BigNumber.serializers.test.ts +41 -15
  521. package/src/primitives/__tests/BigNumber.utils.test.ts +132 -42
  522. package/src/primitives/__tests/Curve.unit.test.ts +75 -53
  523. package/src/primitives/__tests/DRBG.test.ts +1 -1
  524. package/src/primitives/__tests/DRBG.vectors.ts +45 -75
  525. package/src/primitives/__tests/ECDH.test.ts +15 -8
  526. package/src/primitives/__tests/ECDSA.test.ts +12 -6
  527. package/src/primitives/__tests/HMAC.test.ts +24 -18
  528. package/src/primitives/__tests/Hash.test.ts +57 -46
  529. package/src/primitives/__tests/PBKDF2.vectors.ts +130 -117
  530. package/src/primitives/__tests/PrivateKey.split.test.ts +33 -11
  531. package/src/primitives/__tests/PrivateKey.test.ts +11 -10
  532. package/src/primitives/__tests/PublicKey.test.ts +64 -53
  533. package/src/primitives/__tests/Random.test.ts +1 -1
  534. package/src/primitives/__tests/Reader.test.ts +240 -219
  535. package/src/primitives/__tests/ReductionContext.test.ts +98 -61
  536. package/src/primitives/__tests/Schnorr.test.ts +249 -237
  537. package/src/primitives/__tests/SymmetricKey.test.ts +18 -15
  538. package/src/primitives/__tests/SymmetricKey.vectors.ts +16 -8
  539. package/src/primitives/__tests/Writer.test.ts +23 -13
  540. package/src/primitives/__tests/bug-31.test.ts +6 -10
  541. package/src/primitives/__tests/utils.test.ts +70 -19
  542. package/src/primitives/utils.ts +103 -79
  543. package/src/script/Script.ts +18 -12
  544. package/src/script/ScriptTemplate.ts +3 -5
  545. package/src/script/Spend.ts +306 -108
  546. package/src/script/__tests/Script.test.ts +73 -55
  547. package/src/script/__tests/Spend.test.ts +208 -83
  548. package/src/script/__tests/SpendComplex.test.ts +19 -13
  549. package/src/script/__tests/script.invalid.vectors.ts +428 -1796
  550. package/src/script/__tests/script.valid.vectors.ts +728 -2764
  551. package/src/script/templates/P2PKH.ts +34 -12
  552. package/src/script/templates/PushDrop.ts +65 -31
  553. package/src/script/templates/RPuzzle.ts +29 -8
  554. package/src/script/templates/__tests/PushDrop.test.ts +146 -41
  555. package/src/totp/__tests/totp.test.ts +45 -44
  556. package/src/totp/totp.ts +3 -2
  557. package/src/transaction/Beef.ts +269 -174
  558. package/src/transaction/BeefParty.ts +41 -31
  559. package/src/transaction/BeefTx.ts +36 -26
  560. package/src/transaction/Broadcaster.ts +10 -6
  561. package/src/transaction/ChainTracker.ts +2 -2
  562. package/src/transaction/FeeModel.ts +0 -1
  563. package/src/transaction/MerklePath.ts +124 -59
  564. package/src/transaction/Transaction.ts +188 -187
  565. package/src/transaction/TransactionOutput.ts +0 -1
  566. package/src/transaction/__tests/Beef.test.ts +390 -287
  567. package/src/transaction/__tests/MerklePath.test.ts +59 -26
  568. package/src/transaction/__tests/Transaction.benchmarks.test.ts +231 -201
  569. package/src/transaction/__tests/Transaction.test.ts +758 -482
  570. package/src/transaction/__tests/bigtx.vectors.ts +2 -1
  571. package/src/transaction/__tests/bump.invalid.vectors.ts +24 -6
  572. package/src/transaction/__tests/bump.valid.vectors.ts +6 -2
  573. package/src/transaction/__tests/tx.invalid.vectors.ts +881 -185
  574. package/src/transaction/__tests/tx.valid.vectors.ts +1210 -257
  575. package/src/transaction/broadcasters/ARC.ts +69 -38
  576. package/src/transaction/broadcasters/DefaultBroadcaster.ts +9 -3
  577. package/src/transaction/broadcasters/WhatsOnChainBroadcaster.ts +20 -7
  578. package/src/transaction/broadcasters/__tests/ARC.test.ts +127 -59
  579. package/src/transaction/broadcasters/__tests/WhatsOnChainBroadcaster.test.ts +27 -18
  580. package/src/transaction/chaintrackers/DefaultChainTracker.ts +1 -1
  581. package/src/transaction/chaintrackers/WhatsOnChain.ts +27 -11
  582. package/src/transaction/chaintrackers/__tests/WhatsOnChainChainTracker.test.ts +59 -23
  583. package/src/transaction/fee-models/SatoshisPerKilobyte.ts +9 -5
  584. package/src/transaction/http/DefaultHttpClient.ts +5 -4
  585. package/src/transaction/http/FetchHttpClient.ts +18 -9
  586. package/src/transaction/http/HttpClient.ts +27 -22
  587. package/src/transaction/http/NodejsHttpClient.ts +23 -9
  588. package/src/transaction/http/index.ts +5 -1
  589. package/src/transaction/index.ts +5 -1
  590. package/src/wallet/CachedKeyDeriver.ts +151 -82
  591. package/src/wallet/KeyDeriver.ts +186 -105
  592. package/src/wallet/ProtoWallet.ts +121 -52
  593. package/src/wallet/Wallet.interfaces.ts +167 -156
  594. package/src/wallet/WalletClient.ts +314 -59
  595. package/src/wallet/WalletError.ts +2 -2
  596. package/src/wallet/__tests/CachedKeyDeriver.test.ts +86 -27
  597. package/src/wallet/__tests/KeyDeriver.test.ts +136 -33
  598. package/src/wallet/__tests/ProtoWallet.test.ts +190 -102
  599. package/src/wallet/substrates/HTTPWalletJSON.ts +250 -67
  600. package/src/wallet/substrates/HTTPWalletWire.ts +7 -3
  601. package/src/wallet/substrates/WalletWireCalls.ts +2 -2
  602. package/src/wallet/substrates/WalletWireProcessor.ts +1412 -1277
  603. package/src/wallet/substrates/WalletWireTransceiver.ts +713 -138
  604. package/src/wallet/substrates/XDM.ts +425 -36
  605. package/src/wallet/substrates/__tests/WalletWire.integration.test.ts +488 -225
  606. package/src/wallet/substrates/__tests/XDM.test.ts +232 -234
  607. package/src/wallet/substrates/window.CWI.ts +520 -61
package/src/auth/Peer.ts CHANGED
@@ -1,6 +1,16 @@
1
1
  import { SessionManager } from './SessionManager.js'
2
- import { createNonce, verifyNonce, getVerifiableCertificates, validateCertificates } from './utils/index.js'
3
- import { AuthMessage, PeerSession, RequestedCertificateSet, Transport } from './types.js'
2
+ import {
3
+ createNonce,
4
+ verifyNonce,
5
+ getVerifiableCertificates,
6
+ validateCertificates
7
+ } from './utils/index.js'
8
+ import {
9
+ AuthMessage,
10
+ PeerSession,
11
+ RequestedCertificateSet,
12
+ Transport
13
+ } from './types.js'
4
14
  import { VerifiableCertificate } from './certificates/VerifiableCertificate.js'
5
15
  import { Random, Utils, WalletInterface } from '../../mod.js'
6
16
 
@@ -16,10 +26,28 @@ export class Peer {
16
26
  private readonly transport: Transport
17
27
  private readonly wallet: WalletInterface
18
28
  certificatesToRequest: RequestedCertificateSet
19
- private readonly onGeneralMessageReceivedCallbacks: Map<number, (senderPublicKey: string, payload: number[]) => void> = new Map()
20
- private readonly onCertificatesReceivedCallbacks: Map<number, (senderPublicKey: string, certs: VerifiableCertificate[]) => void> = new Map()
21
- private readonly onCertificateRequestReceivedCallbacks: Map<number, (senderPublicKey: string, requestedCertificates: RequestedCertificateSet) => void> = new Map()
22
- private readonly onInitialResponseReceivedCallbacks: Map<number, ({ callback: (sessionNonce: string) => void, sessionNonce: string })> = new Map()
29
+ private readonly onGeneralMessageReceivedCallbacks: Map<
30
+ number,
31
+ (senderPublicKey: string, payload: number[]) => void
32
+ > = new Map()
33
+
34
+ private readonly onCertificatesReceivedCallbacks: Map<
35
+ number,
36
+ (senderPublicKey: string, certs: VerifiableCertificate[]) => void
37
+ > = new Map()
38
+
39
+ private readonly onCertificateRequestReceivedCallbacks: Map<
40
+ number,
41
+ (
42
+ senderPublicKey: string,
43
+ requestedCertificates: RequestedCertificateSet
44
+ ) => void
45
+ > = new Map()
46
+
47
+ private readonly onInitialResponseReceivedCallbacks: Map<
48
+ number,
49
+ { callback: (sessionNonce: string) => void, sessionNonce: string }
50
+ > = new Map()
23
51
 
24
52
  // Single shared counter for all callback types
25
53
  private callbackIdCounter: number = 0
@@ -48,10 +76,13 @@ export class Peer {
48
76
  ) {
49
77
  this.wallet = wallet
50
78
  this.transport = transport
51
- this.certificatesToRequest = certificatesToRequest ?? { certifiers: [], types: {} }
52
- this.transport.onData(this.handleIncomingMessage.bind(this))
53
- this.sessionManager = sessionManager || new SessionManager()
54
- if (!autoPersistLastSession) {
79
+ this.certificatesToRequest = certificatesToRequest ?? {
80
+ certifiers: [],
81
+ types: {}
82
+ }
83
+ this.transport.onData(this.handleIncomingMessage.bind(this)).catch(console.error)
84
+ this.sessionManager = sessionManager != null ? sessionManager : new SessionManager()
85
+ if (autoPersistLastSession === false) {
55
86
  this.autoPersistLastSession = false
56
87
  } else {
57
88
  this.autoPersistLastSession = true
@@ -66,25 +97,38 @@ export class Peer {
66
97
  * @returns {Promise<void>}
67
98
  * @throws Will throw an error if the message fails to send.
68
99
  */
69
- async toPeer (message: number[], identityKey?: string, maxWaitTime?: number): Promise<void> {
70
- if (this.autoPersistLastSession && this.lastInteractedWithPeer && typeof identityKey !== 'string') {
100
+ async toPeer (
101
+ message: number[],
102
+ identityKey?: string,
103
+ maxWaitTime?: number
104
+ ): Promise<void> {
105
+ if (
106
+ this.autoPersistLastSession &&
107
+ this.lastInteractedWithPeer !== undefined &&
108
+ this.lastInteractedWithPeer !== null &&
109
+ typeof identityKey !== 'string'
110
+ ) {
71
111
  identityKey = this.lastInteractedWithPeer
72
112
  }
73
- const peerSession = await this.getAuthenticatedSession(identityKey, maxWaitTime)
113
+ const peerSession = await this.getAuthenticatedSession(
114
+ identityKey,
115
+ maxWaitTime
116
+ )
74
117
 
75
118
  // Prepare the general message
76
119
  const requestNonce = Utils.toBase64(Random(32))
77
120
  const { signature } = await this.wallet.createSignature({
78
121
  data: message,
79
122
  protocolID: [2, 'auth message signature'],
80
- keyID: `${requestNonce} ${peerSession.peerNonce}`,
123
+ keyID: `${requestNonce} ${peerSession.peerNonce ?? ''}`,
81
124
  counterparty: peerSession.peerIdentityKey
82
125
  })
83
126
 
84
127
  const generalMessage: AuthMessage = {
85
128
  version: AUTH_VERSION,
86
129
  messageType: 'general',
87
- identityKey: (await this.wallet.getPublicKey({ identityKey: true })).publicKey,
130
+ identityKey: (await this.wallet.getPublicKey({ identityKey: true }))
131
+ .publicKey,
88
132
  nonce: requestNonce,
89
133
  yourNonce: peerSession.peerNonce,
90
134
  payload: message,
@@ -94,39 +138,49 @@ export class Peer {
94
138
  try {
95
139
  await this.transport.send(generalMessage)
96
140
  } catch (error) {
97
- const e = new Error(`Failed to send message to peer ${peerSession.peerIdentityKey}: ${error.message}`)
141
+ const e = new Error(
142
+ `Failed to send message to peer ${peerSession.peerIdentityKey ?? 'unknown'}: ${String(error.message)}`
143
+ )
98
144
  e.stack = error.stack
99
145
  throw e
100
146
  }
101
147
  }
102
148
 
103
149
  /**
104
- * Sends a request for certificates to a peer.
105
- * This method allows a peer to dynamically request specific certificates after
106
- * an initial handshake or message has been exchanged.
107
- *
108
- * @param {RequestedCertificateSet} certificatesToRequest - Specifies the certifiers and types of certificates required from the peer.
109
- * @param {string} [identityKey] - The identity public key of the peer. If not provided, the current session identity is used.
110
- * @param {number} [maxWaitTime=10000] - Maximum time in milliseconds to wait for the peer session to be authenticated.
111
- * @returns {Promise<void>} Resolves if the certificate request message is successfully sent.
112
- * @throws Will throw an error if the peer session is not authenticated or if sending the request fails.
113
- */
114
- async requestCertificates (certificatesToRequest: RequestedCertificateSet, identityKey?: string, maxWaitTime = 10000): Promise<void> {
115
- const peerSession = await this.getAuthenticatedSession(identityKey, maxWaitTime)
150
+ * Sends a request for certificates to a peer.
151
+ * This method allows a peer to dynamically request specific certificates after
152
+ * an initial handshake or message has been exchanged.
153
+ *
154
+ * @param {RequestedCertificateSet} certificatesToRequest - Specifies the certifiers and types of certificates required from the peer.
155
+ * @param {string} [identityKey] - The identity public key of the peer. If not provided, the current session identity is used.
156
+ * @param {number} [maxWaitTime=10000] - Maximum time in milliseconds to wait for the peer session to be authenticated.
157
+ * @returns {Promise<void>} Resolves if the certificate request message is successfully sent.
158
+ * @throws Will throw an error if the peer session is not authenticated or if sending the request fails.
159
+ */
160
+ async requestCertificates (
161
+ certificatesToRequest: RequestedCertificateSet,
162
+ identityKey?: string,
163
+ maxWaitTime = 10000
164
+ ): Promise<void> {
165
+ const peerSession = await this.getAuthenticatedSession(
166
+ identityKey,
167
+ maxWaitTime
168
+ )
116
169
 
117
170
  // Prepare the general message
118
171
  const requestNonce = Utils.toBase64(Random(32))
119
172
  const { signature } = await this.wallet.createSignature({
120
173
  data: Utils.toArray(JSON.stringify(certificatesToRequest), 'utf8'),
121
174
  protocolID: [2, 'auth message signature'],
122
- keyID: `${requestNonce} ${peerSession.peerNonce}`,
175
+ keyID: `${requestNonce} ${peerSession.peerNonce ?? ''}`,
123
176
  counterparty: peerSession.peerIdentityKey
124
177
  })
125
178
 
126
179
  const certRequestMessage: AuthMessage = {
127
180
  version: AUTH_VERSION,
128
181
  messageType: 'certificateRequest',
129
- identityKey: (await this.wallet.getPublicKey({ identityKey: true })).publicKey,
182
+ identityKey: (await this.wallet.getPublicKey({ identityKey: true }))
183
+ .publicKey,
130
184
  nonce: requestNonce,
131
185
  initialNonce: peerSession.sessionNonce,
132
186
  yourNonce: peerSession.peerNonce,
@@ -136,8 +190,10 @@ export class Peer {
136
190
 
137
191
  try {
138
192
  await this.transport.send(certRequestMessage)
139
- } catch (error) {
140
- throw new Error(`Failed to send certificate request message to peer ${peerSession.peerIdentityKey}: ${error.message}`)
193
+ } catch (error: any) {
194
+ throw new Error(
195
+ `Failed to send certificate request message to peer ${peerSession.peerIdentityKey ?? 'unknown'}: ${String(error.message)}`
196
+ )
141
197
  }
142
198
  }
143
199
 
@@ -152,16 +208,24 @@ export class Peer {
152
208
  * @returns {Promise<PeerSession>} - A promise that resolves with an authenticated `PeerSession`.
153
209
  * @throws {Error} - Throws an error if the transport is not connected or if the handshake fails.
154
210
  */
155
- async getAuthenticatedSession (identityKey?: string, maxWaitTime?: number): Promise<PeerSession> {
156
- if (!this.transport) {
211
+ async getAuthenticatedSession (
212
+ identityKey?: string,
213
+ maxWaitTime?: number
214
+ ): Promise<PeerSession> {
215
+ if (this.transport === undefined) {
157
216
  throw new Error('Peer transport is not connected!')
158
217
  }
159
218
 
160
- let peerSession = identityKey ? this.sessionManager.getSession(identityKey) : undefined
161
- if (!peerSession || !peerSession.isAuthenticated) {
162
- const sessionNonce = await this.initiateHandshake(identityKey, maxWaitTime)
163
- peerSession = this.sessionManager.getSession(identityKey || sessionNonce)
164
- if (!peerSession.isAuthenticated) {
219
+ let peerSession = identityKey !== undefined && identityKey !== ''
220
+ ? this.sessionManager.getSession(identityKey)
221
+ : undefined
222
+ if (peerSession === undefined || !peerSession?.isAuthenticated) {
223
+ const sessionNonce = await this.initiateHandshake(
224
+ identityKey,
225
+ maxWaitTime
226
+ )
227
+ peerSession = this.sessionManager.getSession(identityKey !== undefined && identityKey !== '' ? identityKey : sessionNonce)
228
+ if (peerSession === undefined || !peerSession.isAuthenticated) {
165
229
  throw new Error('Unable to establish mutual authentication with peer!')
166
230
  }
167
231
  }
@@ -175,7 +239,9 @@ export class Peer {
175
239
  * @param {(senderPublicKey: string, payload: number[]) => void} callback - The function to call when a general message is received.
176
240
  * @returns {number} The ID of the callback listener.
177
241
  */
178
- listenForGeneralMessages (callback: (senderPublicKey: string, payload: number[]) => void): number {
242
+ listenForGeneralMessages (
243
+ callback: (senderPublicKey: string, payload: number[]) => void
244
+ ): number {
179
245
  const callbackID = this.callbackIdCounter++
180
246
  this.onGeneralMessageReceivedCallbacks.set(callbackID, callback)
181
247
  return callbackID
@@ -196,7 +262,9 @@ export class Peer {
196
262
  * @param {(certs: VerifiableCertificate[]) => void} callback - The function to call when certificates are received.
197
263
  * @returns {number} The ID of the callback listener.
198
264
  */
199
- listenForCertificatesReceived (callback: (senderPublicKey: string, certs: VerifiableCertificate[]) => void): number {
265
+ listenForCertificatesReceived (
266
+ callback: (senderPublicKey: string, certs: VerifiableCertificate[]) => void
267
+ ): number {
200
268
  const callbackID = this.callbackIdCounter++
201
269
  this.onCertificatesReceivedCallbacks.set(callbackID, callback)
202
270
  return callbackID
@@ -217,7 +285,12 @@ export class Peer {
217
285
  * @param {(requestedCertificates: RequestedCertificateSet) => void} callback - The function to call when a certificate request is received
218
286
  * @returns {number} The ID of the callback listener.
219
287
  */
220
- listenForCertificatesRequested (callback: (senderPublicKey: string, requestedCertificates: RequestedCertificateSet) => void): number {
288
+ listenForCertificatesRequested (
289
+ callback: (
290
+ senderPublicKey: string,
291
+ requestedCertificates: RequestedCertificateSet
292
+ ) => void
293
+ ): number {
221
294
  const callbackID = this.callbackIdCounter++
222
295
  this.onCertificateRequestReceivedCallbacks.set(callbackID, callback)
223
296
  return callbackID
@@ -239,7 +312,10 @@ export class Peer {
239
312
  * @param {string} [identityKey] - The identity public key of the peer.
240
313
  * @returns {Promise<string>} A promise that resolves to the session nonce.
241
314
  */
242
- private async initiateHandshake (identityKey?: string, maxWaitTime = 10000): Promise<string> {
315
+ private async initiateHandshake (
316
+ identityKey?: string,
317
+ maxWaitTime = 10000
318
+ ): Promise<string> {
243
319
  const sessionNonce = await createNonce(this.wallet) // Initial request nonce
244
320
  this.sessionManager.addSession({
245
321
  isAuthenticated: false,
@@ -250,7 +326,8 @@ export class Peer {
250
326
  const initialRequest: AuthMessage = {
251
327
  version: AUTH_VERSION,
252
328
  messageType: 'initialRequest',
253
- identityKey: (await this.wallet.getPublicKey({ identityKey: true })).publicKey,
329
+ identityKey: (await this.wallet.getPublicKey({ identityKey: true }))
330
+ .publicKey,
254
331
  initialNonce: sessionNonce,
255
332
  requestedCertificates: this.certificatesToRequest
256
333
  }
@@ -265,13 +342,19 @@ export class Peer {
265
342
  * @param {string} sessionNonce - The session nonce created in the initial request.
266
343
  * @returns {Promise<string>} A promise that resolves with the session nonce when the initial response is received.
267
344
  */
268
- private async waitForInitialResponse (sessionNonce: string, maxWaitTime = 10000): Promise<string> {
345
+ private async waitForInitialResponse (
346
+ sessionNonce: string,
347
+ maxWaitTime = 10000
348
+ ): Promise<string> {
269
349
  return await new Promise((resolve, reject) => {
270
- const callbackID = this.listenForInitialResponse(sessionNonce, (sessionNonce) => {
271
- clearTimeout(timeoutHandle)
272
- this.stopListeningForInitialResponses(callbackID)
273
- resolve(sessionNonce)
274
- })
350
+ const callbackID = this.listenForInitialResponse(
351
+ sessionNonce,
352
+ sessionNonce => {
353
+ clearTimeout(timeoutHandle)
354
+ this.stopListeningForInitialResponses(callbackID)
355
+ resolve(sessionNonce)
356
+ }
357
+ )
275
358
 
276
359
  const timeoutHandle = setTimeout(() => {
277
360
  this.stopListeningForInitialResponses(callbackID)
@@ -288,9 +371,15 @@ export class Peer {
288
371
  * @param {(sessionNonce: string) => void} callback - The callback to invoke when the initial response is received.
289
372
  * @returns {number} The ID of the callback listener.
290
373
  */
291
- private listenForInitialResponse (sessionNonce: string, callback: (sessionNonce: string) => void) {
374
+ private listenForInitialResponse (
375
+ sessionNonce: string,
376
+ callback: (sessionNonce: string) => void
377
+ ): number {
292
378
  const callbackID = this.callbackIdCounter++
293
- this.onInitialResponseReceivedCallbacks.set(callbackID, { callback, sessionNonce })
379
+ this.onInitialResponseReceivedCallbacks.set(callbackID, {
380
+ callback,
381
+ sessionNonce
382
+ })
294
383
  return callbackID
295
384
  }
296
385
 
@@ -300,7 +389,7 @@ export class Peer {
300
389
  * @private
301
390
  * @param {number} callbackID - The ID of the callback to remove.
302
391
  */
303
- private stopListeningForInitialResponses (callbackID: number) {
392
+ private stopListeningForInitialResponses (callbackID: number): void {
304
393
  this.onInitialResponseReceivedCallbacks.delete(callbackID)
305
394
  }
306
395
 
@@ -311,8 +400,10 @@ export class Peer {
311
400
  * @returns {Promise<void>}
312
401
  */
313
402
  private async handleIncomingMessage (message: AuthMessage): Promise<void> {
314
- if (!message.version || message.version !== AUTH_VERSION) {
315
- console.error(`Invalid message auth version! Received: ${message.version}, expected: ${AUTH_VERSION}`)
403
+ if (message.version === undefined || message.version === '' || message.version !== AUTH_VERSION) {
404
+ console.error(
405
+ `Invalid message auth version! Received: ${message.version}, expected: ${AUTH_VERSION}`
406
+ )
316
407
  return
317
408
  }
318
409
 
@@ -333,7 +424,9 @@ export class Peer {
333
424
  await this.processGeneralMessage(message)
334
425
  break
335
426
  default:
336
- console.error(`Unknown message type of ${message.messageType} from ${message.identityKey}`)
427
+ console.error(
428
+ `Unknown message type of ${String(message.messageType)} from ${String(message.identityKey)}`
429
+ )
337
430
  }
338
431
  }
339
432
 
@@ -343,8 +436,8 @@ export class Peer {
343
436
  * @param {AuthMessage} message - The incoming initial request message.
344
437
  * @returns {Promise<void>}
345
438
  */
346
- async processInitialRequest (message: AuthMessage) {
347
- if (!message.identityKey || !message.initialNonce) {
439
+ async processInitialRequest (message: AuthMessage): Promise<void> {
440
+ if (message.identityKey === undefined || message.identityKey === '' || message.initialNonce === undefined || message.initialNonce === '') {
348
441
  throw new Error('Missing required fields in initialResponse message.')
349
442
  }
350
443
 
@@ -359,15 +452,19 @@ export class Peer {
359
452
 
360
453
  // Handle initial certificate requests
361
454
  let certificatesToInclude
362
- if (message.requestedCertificates?.certifiers?.length > 0) {
455
+ if (message.requestedCertificates !== undefined && Array.isArray(message.requestedCertificates?.certifiers) && message.requestedCertificates?.certifiers?.length > 0) {
363
456
  if (this.onCertificateRequestReceivedCallbacks.size > 0) {
364
457
  // The application wants to handle certificate requests
365
458
  this.onCertificateRequestReceivedCallbacks.forEach(callback => {
366
- callback(message.identityKey, message.requestedCertificates)
459
+ callback(message.identityKey, message.requestedCertificates as RequestedCertificateSet)
367
460
  })
368
461
  } else {
369
462
  // Attempt to find exact matching certificates to return automatically to save round trips
370
- certificatesToInclude = await getVerifiableCertificates(this.wallet, message.requestedCertificates, message.identityKey)
463
+ certificatesToInclude = await getVerifiableCertificates(
464
+ this.wallet,
465
+ message.requestedCertificates,
466
+ message.identityKey
467
+ )
371
468
  }
372
469
  }
373
470
 
@@ -382,7 +479,8 @@ export class Peer {
382
479
  const initialResponseMessage: AuthMessage = {
383
480
  version: AUTH_VERSION,
384
481
  messageType: 'initialResponse',
385
- identityKey: (await this.wallet.getPublicKey({ identityKey: true })).publicKey,
482
+ identityKey: (await this.wallet.getPublicKey({ identityKey: true }))
483
+ .publicKey,
386
484
  initialNonce: sessionNonce,
387
485
  yourNonce: message.initialNonce,
388
486
  certificates: certificatesToInclude,
@@ -391,7 +489,7 @@ export class Peer {
391
489
  }
392
490
 
393
491
  // For security, only set the last-interacted-with peer here if this is the first peer we've interacted with.
394
- if (!this.lastInteractedWithPeer) {
492
+ if (this.lastInteractedWithPeer === undefined || this.lastInteractedWithPeer === null) {
395
493
  this.lastInteractedWithPeer = message.identityKey
396
494
  }
397
495
 
@@ -406,27 +504,34 @@ export class Peer {
406
504
  * @returns {Promise<void>}
407
505
  * @throws Will throw an error if nonce verification or signature verification fails.
408
506
  */
409
- private async processInitialResponse (message: AuthMessage) {
410
- const validNonce = await verifyNonce(message.yourNonce, this.wallet)
507
+ private async processInitialResponse (message: AuthMessage): Promise<void> {
508
+ const validNonce = await verifyNonce(message.yourNonce as string, this.wallet)
411
509
  if (!validNonce) {
412
- throw new Error(`Initial response nonce verification failed from peer: ${message.identityKey}`)
510
+ throw new Error(
511
+ `Initial response nonce verification failed from peer: ${message.identityKey}`
512
+ )
413
513
  }
414
514
 
415
- const peerSession = this.sessionManager.getSession(message.yourNonce)
416
- if (!peerSession) {
515
+ const peerSession = this.sessionManager.getSession(message.yourNonce as string)
516
+ if (peerSession === null || peerSession === undefined) {
417
517
  throw new Error(`Peer session not found for peer: ${message.identityKey}`)
418
518
  }
419
519
 
420
520
  // Validate message signature
421
521
  const { valid } = await this.wallet.verifySignature({
422
- data: Utils.toArray(peerSession.sessionNonce + message.initialNonce, 'base64'),
423
- signature: message.signature,
522
+ data: Utils.toArray(
523
+ (peerSession.sessionNonce ?? '') + (message.initialNonce ?? ''),
524
+ 'base64'
525
+ ),
526
+ signature: message.signature as number[],
424
527
  protocolID: [2, 'auth message signature'],
425
- keyID: `${peerSession.sessionNonce} ${message.initialNonce}`,
528
+ keyID: `${peerSession.sessionNonce ?? ''} ${message.initialNonce ?? ''}`,
426
529
  counterparty: message.identityKey
427
530
  })
428
531
  if (!valid) {
429
- throw new Error(`Unable to verify initial response signature for peer: ${message.identityKey}`)
532
+ throw new Error(
533
+ `Unable to verify initial response signature for peer: ${message.identityKey}`
534
+ )
430
535
  }
431
536
 
432
537
  // After signature and nonce verification is complete, the peer is considered authenticated
@@ -439,33 +544,50 @@ export class Peer {
439
544
  this.sessionManager.updateSession(peerSession)
440
545
 
441
546
  // Process certificates received
442
- if (this.certificatesToRequest?.certifiers?.length && message.certificates?.length) {
443
- await validateCertificates(this.wallet, message, this.certificatesToRequest)
444
-
445
- this.onCertificatesReceivedCallbacks.forEach(callback =>
446
- callback(message.identityKey, message.certificates)
547
+ if (
548
+ (this.certificatesToRequest?.certifiers?.length ?? 0) > 0 &&
549
+ (message.certificates !== null && message.certificates !== undefined && message.certificates.length > 0)
550
+ ) {
551
+ await validateCertificates(
552
+ this.wallet,
553
+ message,
554
+ this.certificatesToRequest
447
555
  )
556
+
557
+ const messageCertificates = message.certificates
558
+ if (message.certificates !== undefined) {
559
+ this.onCertificatesReceivedCallbacks.forEach(callback =>
560
+ callback(message.identityKey, messageCertificates)
561
+ )
562
+ }
448
563
  }
449
564
 
450
565
  this.lastInteractedWithPeer = message.identityKey
451
566
 
452
- this.onInitialResponseReceivedCallbacks.forEach((entry) => {
453
- if (entry && entry.sessionNonce === peerSession.sessionNonce) {
567
+ this.onInitialResponseReceivedCallbacks.forEach(entry => {
568
+ if (entry?.sessionNonce === peerSession.sessionNonce) {
454
569
  entry.callback(peerSession.sessionNonce)
455
570
  }
456
571
  })
457
572
 
458
573
  // Check if the peer requested certificates from us
459
- if (message.requestedCertificates?.certifiers?.length > 0) {
574
+ if (message.requestedCertificates !== undefined && Array.isArray(message.requestedCertificates?.certifiers) && message.requestedCertificates?.certifiers?.length > 0) {
460
575
  if (this.onCertificateRequestReceivedCallbacks.size > 0) {
461
576
  // Application wants to handle certificate requests
462
577
  this.onCertificateRequestReceivedCallbacks.forEach(callback => {
463
- callback(message.identityKey, message.requestedCertificates)
578
+ callback(message.identityKey, message.requestedCertificates as RequestedCertificateSet)
464
579
  })
465
580
  } else {
466
581
  // Attempt to find exact matching certificates to respond automatically and save round trips
467
- const verifiableCertificates = await getVerifiableCertificates(this.wallet, message.requestedCertificates, message.identityKey)
468
- await this.sendCertificateResponse(message.identityKey, verifiableCertificates)
582
+ const verifiableCertificates = await getVerifiableCertificates(
583
+ this.wallet,
584
+ message.requestedCertificates,
585
+ message.identityKey
586
+ )
587
+ await this.sendCertificateResponse(
588
+ message.identityKey,
589
+ verifiableCertificates
590
+ )
469
591
  }
470
592
  }
471
593
  }
@@ -478,35 +600,49 @@ export class Peer {
478
600
  * @param {AuthMessage} message - The certificate request message received from the peer.
479
601
  * @throws {Error} Throws an error if nonce verification fails, or the message signature is invalid.
480
602
  */
481
- private async processCertificateRequest (message: AuthMessage) {
482
- const validNonce = await verifyNonce(message.yourNonce, this.wallet)
603
+ private async processCertificateRequest (message: AuthMessage): Promise<void> {
604
+ const validNonce = await verifyNonce(message.yourNonce as string, this.wallet)
483
605
  if (!validNonce) {
484
- throw new Error(`Unable to verify nonce for certificate request message from: ${message.identityKey}`)
606
+ throw new Error(
607
+ `Unable to verify nonce for certificate request message from: ${message.identityKey}`
608
+ )
485
609
  }
486
- const peerSession = this.sessionManager.getSession(message.yourNonce)
610
+ const peerSession = this.sessionManager.getSession(message.yourNonce as string)
487
611
 
488
612
  const { valid } = await this.wallet.verifySignature({
489
- data: Utils.toArray(JSON.stringify(message.requestedCertificates), 'utf8'),
490
- signature: message.signature,
613
+ data: Utils.toArray(
614
+ JSON.stringify(message.requestedCertificates),
615
+ 'utf8'
616
+ ),
617
+ signature: message.signature as number[],
491
618
  protocolID: [2, 'auth message signature'],
492
- keyID: `${message.nonce} ${peerSession.sessionNonce}`,
493
- counterparty: peerSession.peerIdentityKey
619
+ keyID: `${message.nonce ?? ''} ${peerSession?.sessionNonce ?? ''}`,
620
+ counterparty: peerSession?.peerIdentityKey
494
621
  })
495
622
 
496
623
  if (!valid) {
497
- throw new Error(`Invalid signature in certificate request message from ${peerSession.peerIdentityKey}`)
624
+ throw new Error(
625
+ `Invalid signature in certificate request message from ${peerSession?.peerIdentityKey ?? 'unknown'}`
626
+ )
498
627
  }
499
628
 
500
- if (message.requestedCertificates?.certifiers?.length > 0) {
629
+ if (message.requestedCertificates !== undefined && Array.isArray(message.requestedCertificates?.certifiers) && message.requestedCertificates?.certifiers?.length > 0) {
501
630
  if (this.onCertificateRequestReceivedCallbacks.size > 0) {
502
631
  // Application wants to handle certificate requests
503
632
  this.onCertificateRequestReceivedCallbacks.forEach(callback => {
504
- callback(message.identityKey, message.requestedCertificates)
633
+ callback(message.identityKey, message.requestedCertificates as RequestedCertificateSet)
505
634
  })
506
635
  } else {
507
636
  // Attempt to find exact matching certificates to respond automatically and save round trips
508
- const verifiableCertificates = await getVerifiableCertificates(this.wallet, message.requestedCertificates, message.identityKey)
509
- await this.sendCertificateResponse(message.identityKey, verifiableCertificates)
637
+ const verifiableCertificates = await getVerifiableCertificates(
638
+ this.wallet,
639
+ message.requestedCertificates,
640
+ message.identityKey
641
+ )
642
+ await this.sendCertificateResponse(
643
+ message.identityKey,
644
+ verifiableCertificates
645
+ )
510
646
  }
511
647
  }
512
648
  }
@@ -523,20 +659,21 @@ export class Peer {
523
659
  async sendCertificateResponse (
524
660
  verifierIdentityKey: string,
525
661
  certificates: VerifiableCertificate[]
526
- ) {
662
+ ): Promise<void> {
527
663
  const peerSession = await this.getAuthenticatedSession(verifierIdentityKey)
528
664
  const requestNonce = Utils.toBase64(Random(32))
529
665
  const { signature } = await this.wallet.createSignature({
530
666
  data: Utils.toArray(JSON.stringify(certificates), 'utf8'),
531
667
  protocolID: [2, 'auth message signature'],
532
- keyID: `${requestNonce} ${peerSession.peerNonce}`,
668
+ keyID: `${requestNonce} ${peerSession.peerNonce ?? ''}`,
533
669
  counterparty: peerSession.peerIdentityKey
534
670
  })
535
671
 
536
672
  const certificateResponse: AuthMessage = {
537
673
  version: AUTH_VERSION,
538
674
  messageType: 'certificateResponse',
539
- identityKey: (await this.wallet.getPublicKey({ identityKey: true })).publicKey,
675
+ identityKey: (await this.wallet.getPublicKey({ identityKey: true }))
676
+ .publicKey,
540
677
  nonce: requestNonce,
541
678
  initialNonce: peerSession.sessionNonce,
542
679
  yourNonce: peerSession.peerNonce,
@@ -546,8 +683,11 @@ export class Peer {
546
683
 
547
684
  try {
548
685
  await this.transport.send(certificateResponse)
549
- } catch (error) {
550
- throw new Error(`Failed to send certificate response message to peer ${peerSession.peerIdentityKey}: ${error.message}`)
686
+ } catch (error: any) {
687
+ const errorMessage = error instanceof Error ? error.message : String(error)
688
+ throw new Error(
689
+ `Failed to send certificate response message to peer ${peerSession.peerIdentityKey ?? 'unknown'}: ${errorMessage}`
690
+ )
551
691
  }
552
692
  }
553
693
 
@@ -559,33 +699,39 @@ export class Peer {
559
699
  * @returns {Promise<void>}
560
700
  * @throws Will throw an error if nonce verification or signature verification fails.
561
701
  */
562
- private async processCertificateResponse (
563
- message: AuthMessage
564
- ) {
565
- const validNonce = await verifyNonce(message.yourNonce, this.wallet)
702
+ private async processCertificateResponse (message: AuthMessage): Promise<void> {
703
+ const validNonce = await verifyNonce(message.yourNonce as string, this.wallet)
566
704
  if (!validNonce) {
567
- throw new Error(`Unable to verify nonce for certificate response from: ${message.identityKey}!`)
705
+ throw new Error(
706
+ `Unable to verify nonce for certificate response from: ${message.identityKey}!`
707
+ )
568
708
  }
569
- const peerSession = this.sessionManager.getSession(message.yourNonce)
709
+ const peerSession = this.sessionManager.getSession(message.yourNonce as string)
570
710
 
571
711
  // Validate message signature
572
712
  const { valid } = await this.wallet.verifySignature({
573
713
  data: Utils.toArray(JSON.stringify(message.certificates), 'utf8'),
574
- signature: message.signature,
714
+ signature: message.signature as number[],
575
715
  protocolID: [2, 'auth message signature'],
576
- keyID: `${message.nonce} ${peerSession.sessionNonce}`,
716
+ keyID: `${message.nonce ?? ''} ${peerSession?.sessionNonce ?? ''}`,
577
717
  counterparty: message.identityKey
578
718
  })
579
719
 
580
720
  if (!valid) {
581
- throw new Error(`Unable to verify certificate response signature for peer: ${message.identityKey}`)
721
+ throw new Error(
722
+ `Unable to verify certificate response signature for peer: ${message.identityKey}`
723
+ )
582
724
  }
583
725
 
584
726
  // Process and verify any certificates received
585
- await validateCertificates(this.wallet, message, message.requestedCertificates)
727
+ await validateCertificates(
728
+ this.wallet,
729
+ message,
730
+ message.requestedCertificates
731
+ )
586
732
 
587
733
  this.onCertificatesReceivedCallbacks.forEach(callback => {
588
- callback(message.identityKey, message.certificates)
734
+ callback(message.identityKey, message.certificates as VerifiableCertificate[])
589
735
  })
590
736
  }
591
737
 
@@ -597,29 +743,33 @@ export class Peer {
597
743
  * @returns {Promise<void>}
598
744
  * @throws Will throw an error if nonce verification or signature verification fails.
599
745
  */
600
- private async processGeneralMessage (message: AuthMessage) {
601
- const validNonce = await verifyNonce(message.yourNonce, this.wallet)
746
+ private async processGeneralMessage (message: AuthMessage): Promise<void> {
747
+ const validNonce = await verifyNonce(message.yourNonce as string, this.wallet)
602
748
  if (!validNonce) {
603
- throw new Error(`Unable to verify nonce for general message from: ${message.identityKey}`)
749
+ throw new Error(
750
+ `Unable to verify nonce for general message from: ${message.identityKey}`
751
+ )
604
752
  }
605
- const peerSession = this.sessionManager.getSession(message.yourNonce)
753
+ const peerSession = this.sessionManager.getSession(message.yourNonce as string)
606
754
 
607
755
  const { valid } = await this.wallet.verifySignature({
608
756
  data: message.payload,
609
- signature: message.signature,
757
+ signature: message.signature as number[],
610
758
  protocolID: [2, 'auth message signature'],
611
- keyID: `${message.nonce} ${peerSession.sessionNonce}`,
612
- counterparty: peerSession.peerIdentityKey
759
+ keyID: `${message.nonce ?? ''} ${peerSession?.sessionNonce ?? ''}`,
760
+ counterparty: peerSession?.peerIdentityKey
613
761
  })
614
762
 
615
763
  if (!valid) {
616
- throw new Error(`Invalid signature in generalMessage from ${peerSession.peerIdentityKey}`)
764
+ throw new Error(
765
+ `Invalid signature in generalMessage from ${peerSession?.peerIdentityKey ?? 'unknown'}`
766
+ )
617
767
  }
618
768
 
619
769
  this.lastInteractedWithPeer = message.identityKey
620
770
 
621
771
  this.onGeneralMessageReceivedCallbacks.forEach(callback => {
622
- callback(message.identityKey, message.payload)
772
+ callback(message.identityKey, message.payload as number[])
623
773
  })
624
774
  }
625
775
  }