@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
@@ -1,25 +1,25 @@
1
- import { Wallet } from '../../../../dist/cjs/src/wallet/Wallet.interfaces.js'
2
- import { getVerifiableCertificates } from '../../../../dist/cjs/src/auth/utils/getVerifiableCertificates'
3
- import { RequestedCertificateSet } from '../../../../dist/cjs/src/auth/types.js'
4
- import { VerifiableCertificate } from '../../../../dist/cjs/src/auth/certificates/VerifiableCertificate.js'
1
+ import { WalletInterface } from '../../../wallet/Wallet.interfaces'
2
+ import { getVerifiableCertificates } from '../../../auth/utils/getVerifiableCertificates'
3
+ import { RequestedCertificateSet } from '../../../auth/types'
4
+ import { VerifiableCertificate } from '../../../auth/certificates/VerifiableCertificate'
5
5
 
6
6
  describe('getVerifiableCertificates', () => {
7
- let mockWallet: Wallet
7
+ let mockWallet: WalletInterface
8
8
  let requestedCertificates: RequestedCertificateSet
9
9
  let verifierIdentityKey: string
10
10
 
11
11
  beforeEach(() => {
12
12
  mockWallet = {
13
13
  listCertificates: jest.fn(),
14
- proveCertificate: jest.fn(),
15
- } as unknown as Wallet
14
+ proveCertificate: jest.fn()
15
+ } as unknown as WalletInterface
16
16
 
17
17
  requestedCertificates = {
18
18
  certifiers: ['certifier1', 'certifier2'],
19
19
  types: {
20
20
  certType1: ['field1', 'field2'],
21
- certType2: ['field3'],
22
- },
21
+ certType2: ['field3']
22
+ }
23
23
  }
24
24
 
25
25
  verifierIdentityKey = 'verifier_public_key'
@@ -33,7 +33,7 @@ describe('getVerifiableCertificates', () => {
33
33
  certifier: 'certifier1',
34
34
  revocationOutpoint: 'outpoint1',
35
35
  fields: { field1: 'encryptedData1', field2: 'encryptedData2' },
36
- signature: 'signature1',
36
+ signature: 'signature1'
37
37
  };
38
38
 
39
39
  (mockWallet.listCertificates as jest.Mock).mockResolvedValue({
@@ -43,17 +43,21 @@ describe('getVerifiableCertificates', () => {
43
43
  keyringForVerifier: { field1: 'key1', field2: 'key2' }
44
44
  })
45
45
 
46
- const result = await getVerifiableCertificates(mockWallet, requestedCertificates, verifierIdentityKey)
46
+ const result = await getVerifiableCertificates(
47
+ mockWallet,
48
+ requestedCertificates,
49
+ verifierIdentityKey
50
+ )
47
51
 
48
52
  expect(mockWallet.listCertificates).toHaveBeenCalledWith({
49
53
  certifiers: requestedCertificates.certifiers,
50
- types: Object.keys(requestedCertificates.types),
54
+ types: Object.keys(requestedCertificates.types)
51
55
  })
52
56
 
53
57
  expect(mockWallet.proveCertificate).toHaveBeenCalledWith({
54
58
  certificate: mockCertificate,
55
59
  fieldsToReveal: requestedCertificates.types[mockCertificate.type],
56
- verifier: verifierIdentityKey,
60
+ verifier: verifierIdentityKey
57
61
  })
58
62
 
59
63
  expect(result).toHaveLength(1)
@@ -70,11 +74,16 @@ describe('getVerifiableCertificates', () => {
70
74
  })
71
75
  })
72
76
 
73
-
74
77
  it('returns an empty array when no matching certificates are found', async () => {
75
- (mockWallet.listCertificates as jest.Mock).mockResolvedValue({ certificates: [] })
78
+ (mockWallet.listCertificates as jest.Mock).mockResolvedValue({
79
+ certificates: []
80
+ })
76
81
 
77
- const result = await getVerifiableCertificates(mockWallet, requestedCertificates, verifierIdentityKey)
82
+ const result = await getVerifiableCertificates(
83
+ mockWallet,
84
+ requestedCertificates,
85
+ verifierIdentityKey
86
+ )
78
87
 
79
88
  expect(result).toEqual([])
80
89
  expect(mockWallet.listCertificates).toHaveBeenCalled()
@@ -82,11 +91,17 @@ describe('getVerifiableCertificates', () => {
82
91
  })
83
92
 
84
93
  it('propagates errors from listCertificates', async () => {
85
- (mockWallet.listCertificates as jest.Mock).mockRejectedValue(new Error('listCertificates failed'))
86
-
87
- await expect(getVerifiableCertificates(mockWallet, requestedCertificates, verifierIdentityKey)).rejects.toThrow(
88
- 'listCertificates failed'
94
+ (mockWallet.listCertificates as jest.Mock).mockRejectedValue(
95
+ new Error('listCertificates failed')
89
96
  )
97
+
98
+ await expect(
99
+ getVerifiableCertificates(
100
+ mockWallet,
101
+ requestedCertificates,
102
+ verifierIdentityKey
103
+ )
104
+ ).rejects.toThrow('listCertificates failed')
90
105
  })
91
106
 
92
107
  it('propagates errors from proveCertificate', async () => {
@@ -97,30 +112,41 @@ describe('getVerifiableCertificates', () => {
97
112
  certifier: 'certifier1',
98
113
  revocationOutpoint: 'outpoint1',
99
114
  fields: { field1: 'encryptedData1', field2: 'encryptedData2' },
100
- signature: 'signature1',
115
+ signature: 'signature1'
101
116
  };
102
117
 
103
118
  (mockWallet.listCertificates as jest.Mock).mockResolvedValue({
104
- certificates: [mockCertificate],
119
+ certificates: [mockCertificate]
105
120
  });
106
- (mockWallet.proveCertificate as jest.Mock).mockRejectedValue(new Error('proveCertificate failed'))
107
-
108
- await expect(getVerifiableCertificates(mockWallet, requestedCertificates, verifierIdentityKey)).rejects.toThrow(
109
- 'proveCertificate failed'
121
+ (mockWallet.proveCertificate as jest.Mock).mockRejectedValue(
122
+ new Error('proveCertificate failed')
110
123
  )
124
+
125
+ await expect(
126
+ getVerifiableCertificates(
127
+ mockWallet,
128
+ requestedCertificates,
129
+ verifierIdentityKey
130
+ )
131
+ ).rejects.toThrow('proveCertificate failed')
111
132
  })
112
133
 
113
134
  it('handles empty requested certificates gracefully', async () => {
114
135
  requestedCertificates = { certifiers: [], types: {} };
136
+ (mockWallet.listCertificates as jest.Mock).mockResolvedValue({
137
+ certificates: []
138
+ })
115
139
 
116
- (mockWallet.listCertificates as jest.Mock).mockResolvedValue({ certificates: [] })
117
-
118
- const result = await getVerifiableCertificates(mockWallet, requestedCertificates, verifierIdentityKey)
140
+ const result = await getVerifiableCertificates(
141
+ mockWallet,
142
+ requestedCertificates,
143
+ verifierIdentityKey
144
+ )
119
145
 
120
146
  expect(result).toEqual([])
121
147
  expect(mockWallet.listCertificates).toHaveBeenCalledWith({
122
148
  certifiers: [],
123
- types: [],
149
+ types: []
124
150
  })
125
151
  })
126
152
  })
@@ -1,13 +1,25 @@
1
- import { validateCertificates } from '../../../../dist/cjs/src/auth/utils/validateCertificates.js'
2
- import { VerifiableCertificate } from '../../../../dist/cjs/src/auth/certificates/VerifiableCertificate.js'
3
- import { ProtoWallet } from '../../../../dist/cjs/src/wallet/index.js'
4
- import { PrivateKey } from '../../../../dist/cjs/src/primitives/index.js'
5
-
6
- let mockVerify = jest.fn(() => Promise.resolve(true))
7
- let mockDecryptFields = jest.fn(() => Promise.resolve({ field1: 'decryptedValue1' }))
8
- const mockInstances = []
9
-
10
- jest.mock('../../../../dist/cjs/src/auth/certificates/VerifiableCertificate.js', () => {
1
+ import { validateCertificates } from '../../../auth/utils/validateCertificates'
2
+ import { VerifiableCertificate } from '../../../auth/certificates/VerifiableCertificate'
3
+ import { ProtoWallet } from '../../../wallet/index'
4
+ import { PrivateKey } from '../../../primitives/index'
5
+
6
+ let mockVerify = jest.fn(async () => await Promise.resolve(true))
7
+ let mockDecryptFields = jest.fn(
8
+ async () => await Promise.resolve({ field1: 'decryptedValue1' })
9
+ )
10
+ const mockInstances: Array<{
11
+ type: string
12
+ serialNumber: string
13
+ subject: string
14
+ certifier: string
15
+ revocationOutpoint: string
16
+ fields: Record<string, string>
17
+ decryptedFields: Record<string, unknown>
18
+ verify: jest.Mock<Promise<boolean>>
19
+ decryptFields: jest.Mock<Promise<Record<string, string>>> // ✅ Explicit return type
20
+ }> = []
21
+
22
+ jest.mock('../../../auth/certificates/VerifiableCertificate', () => {
11
23
  return {
12
24
  VerifiableCertificate: jest.fn().mockImplementation(() => {
13
25
  const instance = {
@@ -19,11 +31,11 @@ jest.mock('../../../../dist/cjs/src/auth/certificates/VerifiableCertificate.js',
19
31
  fields: { field1: 'encryptedData1' },
20
32
  decryptedFields: {},
21
33
  verify: mockVerify,
22
- decryptFields: mockDecryptFields,
34
+ decryptFields: mockDecryptFields
23
35
  }
24
36
  mockInstances.push(instance)
25
37
  return instance
26
- }),
38
+ })
27
39
  }
28
40
  })
29
41
 
@@ -36,8 +48,10 @@ describe('validateCertificates', () => {
36
48
  mockInstances.length = 0 // Clear tracked instances
37
49
 
38
50
  // Reset state
39
- mockVerify = jest.fn(() => Promise.resolve(true))
40
- mockDecryptFields = jest.fn(() => Promise.resolve({ field1: 'decryptedValue1' }))
51
+ mockVerify = jest.fn(async () => await Promise.resolve(true))
52
+ mockDecryptFields = jest.fn(
53
+ async () => await Promise.resolve({ field1: 'decryptedValue1' })
54
+ )
41
55
 
42
56
  verifierWallet = new ProtoWallet(new PrivateKey(1))
43
57
  message = {
@@ -50,16 +64,20 @@ describe('validateCertificates', () => {
50
64
  certifier: 'valid_certifier',
51
65
  revocationOutpoint: 'outpoint',
52
66
  fields: { field1: 'encryptedData1' },
53
- decryptedFields: {},
54
- },
55
- ],
67
+ decryptedFields: {}
68
+ }
69
+ ]
56
70
  }
57
71
  })
58
72
 
59
73
  it('completes without errors for valid input', async () => {
60
- await expect(validateCertificates(verifierWallet, message)).resolves.not.toThrow()
74
+ await expect(
75
+ validateCertificates(verifierWallet, message)
76
+ ).resolves.not.toThrow()
61
77
 
62
- expect(VerifiableCertificate).toHaveBeenCalledTimes(message.certificates.length)
78
+ expect(VerifiableCertificate).toHaveBeenCalledTimes(
79
+ message.certificates.length
80
+ )
63
81
  expect(mockVerify).toHaveBeenCalledTimes(message.certificates.length)
64
82
  expect(mockDecryptFields).toHaveBeenCalledWith(verifierWallet)
65
83
  })
@@ -68,7 +86,7 @@ describe('validateCertificates', () => {
68
86
  message.identityKey = 'different_subject'
69
87
 
70
88
  await expect(validateCertificates(verifierWallet, message)).rejects.toThrow(
71
- `The subject of one of your certificates ("valid_subject") is not the same as the request sender ("different_subject").`
89
+ 'The subject of one of your certificates ("valid_subject") is not the same as the request sender ("different_subject").'
72
90
  )
73
91
  })
74
92
 
@@ -76,38 +94,38 @@ describe('validateCertificates', () => {
76
94
  mockVerify.mockResolvedValueOnce(false)
77
95
 
78
96
  await expect(validateCertificates(verifierWallet, message)).rejects.toThrow(
79
- `The signature for the certificate with serial number valid_serial is invalid!`
97
+ 'The signature for the certificate with serial number valid_serial is invalid!'
80
98
  )
81
99
  })
82
100
 
83
101
  it('throws an error for unrequested certifier', async () => {
84
102
  const certificatesRequested = {
85
103
  certifiers: ['another_certifier'],
86
- types: { requested_type: ['field1'] },
104
+ types: { requested_type: ['field1'] }
87
105
  }
88
106
 
89
107
  await expect(
90
108
  validateCertificates(verifierWallet, message, certificatesRequested)
91
109
  ).rejects.toThrow(
92
- `Certificate with serial number valid_serial has an unrequested certifier: valid_certifier`
110
+ 'Certificate with serial number valid_serial has an unrequested certifier: valid_certifier'
93
111
  )
94
112
  })
95
113
 
96
114
  it('throws an error for unrequested certificate type', async () => {
97
115
  const certificatesRequested = {
98
116
  certifiers: ['valid_certifier'],
99
- types: { another_type: ['field1'] },
117
+ types: { another_type: ['field1'] }
100
118
  }
101
119
 
102
120
  await expect(
103
121
  validateCertificates(verifierWallet, message, certificatesRequested)
104
- ).rejects.toThrow(
105
- `Certificate with type requested_type was not requested`
106
- )
122
+ ).rejects.toThrow('Certificate with type requested_type was not requested')
107
123
  })
108
124
 
109
125
  it('decrypts fields without throwing errors', async () => {
110
- await expect(validateCertificates(verifierWallet, message)).resolves.not.toThrow()
126
+ await expect(
127
+ validateCertificates(verifierWallet, message)
128
+ ).resolves.not.toThrow()
111
129
  for (const instance of mockInstances) {
112
130
  expect(instance.decryptFields).toHaveBeenCalledWith(verifierWallet)
113
131
  }
@@ -115,7 +133,9 @@ describe('validateCertificates', () => {
115
133
 
116
134
  it('throws an error if a field decryption fails', async () => {
117
135
  mockDecryptFields.mockRejectedValue(new Error('Decryption failed'))
118
- await expect(validateCertificates(verifierWallet, message)).rejects.toThrow('Decryption failed')
136
+ await expect(validateCertificates(verifierWallet, message)).rejects.toThrow(
137
+ 'Decryption failed'
138
+ )
119
139
  })
120
140
 
121
141
  it('handles multiple certificates properly', async () => {
@@ -126,12 +146,14 @@ describe('validateCertificates', () => {
126
146
  certifier: 'valid_certifier',
127
147
  revocationOutpoint: 'outpoint',
128
148
  fields: { field1: 'encryptedData1' },
129
- decryptedFields: {},
149
+ decryptedFields: {}
130
150
  }
131
151
 
132
152
  message.certificates.push(anotherCertificate)
133
153
 
134
- await expect(validateCertificates(verifierWallet, message)).resolves.not.toThrow()
154
+ await expect(
155
+ validateCertificates(verifierWallet, message)
156
+ ).resolves.not.toThrow()
135
157
 
136
158
  expect(VerifiableCertificate).toHaveBeenCalledTimes(2)
137
159
  expect(mockVerify).toHaveBeenCalledTimes(2)
@@ -1,4 +1,9 @@
1
- import { Utils, Random, WalletInterface, WalletCounterparty } from '../../../mod.js'
1
+ import {
2
+ Utils,
3
+ Random,
4
+ WalletInterface,
5
+ WalletCounterparty
6
+ } from '../../../mod.js'
2
7
 
3
8
  /**
4
9
  * Creates a nonce derived from a wallet
@@ -6,7 +11,10 @@ import { Utils, Random, WalletInterface, WalletCounterparty } from '../../../mod
6
11
  * @param counterparty - The counterparty to the nonce creation. Defaults to 'self'.
7
12
  * @returns A random nonce derived with a wallet
8
13
  */
9
- export async function createNonce(wallet: WalletInterface, counterparty: WalletCounterparty = 'self'): Promise<string> {
14
+ export async function createNonce(
15
+ wallet: WalletInterface,
16
+ counterparty: WalletCounterparty = 'self'
17
+ ): Promise<string> {
10
18
  // Generate 16 random bytes for the first half of the data
11
19
  const firstHalf = Random(16)
12
20
  // Create an sha256 HMAC
@@ -19,4 +27,4 @@ export async function createNonce(wallet: WalletInterface, counterparty: WalletC
19
27
  // Concatenate firstHalf and secondHalf as the nonce bytes
20
28
  const nonceBytes = [...firstHalf, ...hmac]
21
29
  return Utils.toBase64(nonceBytes)
22
- }
30
+ }
@@ -1,6 +1,6 @@
1
- import { VerifiableCertificate } from "../certificates/VerifiableCertificate.js"
2
- import { WalletInterface } from "../../../mod.js"
3
- import { RequestedCertificateSet } from "../types.js"
1
+ import { VerifiableCertificate } from '../certificates/VerifiableCertificate.js'
2
+ import { WalletInterface } from '../../../mod.js'
3
+ import { RequestedCertificateSet } from '../types.js'
4
4
 
5
5
  /**
6
6
  * Retrieves an array of verifiable certificates based on the request.
@@ -10,7 +10,11 @@ import { RequestedCertificateSet } from "../types.js"
10
10
  * @param {string} verifierIdentityKey - The public key of the verifier requesting the certificates.
11
11
  * @returns {Promise<VerifiableCertificate[]>} An array of verifiable certificates.
12
12
  */
13
- export const getVerifiableCertificates = async (wallet: WalletInterface, requestedCertificates: RequestedCertificateSet, verifierIdentityKey: string): Promise<VerifiableCertificate[]> => {
13
+ export const getVerifiableCertificates = async (
14
+ wallet: WalletInterface,
15
+ requestedCertificates: RequestedCertificateSet,
16
+ verifierIdentityKey: string
17
+ ): Promise<VerifiableCertificate[]> => {
14
18
  // Find matching certificates we have
15
19
  // Note: This may return multiple certificates that match the correct type.
16
20
  const matchingCertificates = await wallet.listCertificates({
@@ -20,7 +24,7 @@ export const getVerifiableCertificates = async (wallet: WalletInterface, request
20
24
 
21
25
  // For each certificate requested, create a verifiable cert with selectively revealed fields
22
26
  return await Promise.all(
23
- matchingCertificates.certificates.map(async certificate => {
27
+ matchingCertificates.certificates.map(async (certificate) => {
24
28
  const { keyringForVerifier } = await wallet.proveCertificate({
25
29
  certificate,
26
30
  fieldsToReveal: requestedCertificates.types[certificate.type],
@@ -36,5 +40,6 @@ export const getVerifiableCertificates = async (wallet: WalletInterface, request
36
40
  keyringForVerifier,
37
41
  certificate.signature
38
42
  )
39
- }))
40
- }
43
+ })
44
+ )
45
+ }
@@ -1,6 +1,6 @@
1
- import { WalletInterface } from "../../wallet/index.js"
2
- import { AuthMessage, RequestedCertificateSet } from "../types.js"
3
- import { VerifiableCertificate } from "../certificates/VerifiableCertificate.js"
1
+ import { WalletInterface } from '../../wallet/index.js'
2
+ import { AuthMessage, RequestedCertificateSet } from '../types.js'
3
+ import { VerifiableCertificate } from '../certificates/VerifiableCertificate.js'
4
4
 
5
5
  /**
6
6
  * Validates and processes the certificates received from a peer.
@@ -10,45 +10,63 @@ import { VerifiableCertificate } from "../certificates/VerifiableCertificate.js"
10
10
  * @returns {Promise<void>}
11
11
  * @throws Will throw an error if certificate validation or field decryption fails.
12
12
  */
13
- export const validateCertificates = async (verifierWallet: WalletInterface, message: AuthMessage, certificatesRequested?: RequestedCertificateSet): Promise<void> => {
14
- await Promise.all(message.certificates.map(async (incomingCert: VerifiableCertificate) => {
15
- if (incomingCert.subject !== message.identityKey) {
16
- throw new Error(`The subject of one of your certificates ("${incomingCert.subject}") is not the same as the request sender ("${message.identityKey}").`)
17
- }
13
+ export const validateCertificates = async (
14
+ verifierWallet: WalletInterface,
15
+ message: AuthMessage,
16
+ certificatesRequested?: RequestedCertificateSet
17
+ ): Promise<void> => {
18
+ if ((message.certificates == null) || message.certificates.length === 0) {
19
+ throw new Error('No certificates were provided in the AuthMessage.')
20
+ }
18
21
 
19
- // Verify Certificate structure and signature
20
- const certToVerify = new VerifiableCertificate(
21
- incomingCert.type,
22
- incomingCert.serialNumber,
23
- incomingCert.subject,
24
- incomingCert.certifier,
25
- incomingCert.revocationOutpoint,
26
- incomingCert.fields,
27
- incomingCert.keyring,
28
- incomingCert.signature
29
- )
30
- const isValidCert = await certToVerify.verify()
31
- if (!isValidCert) {
32
- throw new Error(`The signature for the certificate with serial number ${certToVerify.serialNumber} is invalid!`)
33
- }
34
-
35
- // Check if the certificate matches requested certifiers, types, and fields
36
- if (certificatesRequested) {
37
- const { certifiers, types } = certificatesRequested
22
+ await Promise.all(
23
+ message.certificates.map(async (incomingCert: VerifiableCertificate) => {
24
+ if (incomingCert.subject !== message.identityKey) {
25
+ throw new Error(
26
+ `The subject of one of your certificates ("${incomingCert.subject}") is not the same as the request sender ("${message.identityKey}").`
27
+ )
28
+ }
38
29
 
39
- // Check certifier matches
40
- if (!certifiers.includes(certToVerify.certifier)) {
41
- throw new Error(`Certificate with serial number ${certToVerify.serialNumber} has an unrequested certifier: ${certToVerify.certifier}`)
30
+ // Verify Certificate structure and signature
31
+ const certToVerify = new VerifiableCertificate(
32
+ incomingCert.type,
33
+ incomingCert.serialNumber,
34
+ incomingCert.subject,
35
+ incomingCert.certifier,
36
+ incomingCert.revocationOutpoint,
37
+ incomingCert.fields,
38
+ incomingCert.keyring,
39
+ incomingCert.signature
40
+ )
41
+ const isValidCert = await certToVerify.verify()
42
+ if (!isValidCert) {
43
+ throw new Error(
44
+ `The signature for the certificate with serial number ${certToVerify.serialNumber} is invalid!`
45
+ )
42
46
  }
43
47
 
44
- // Check type and fields match requested
45
- const requestedFields = types[certToVerify.type]
46
- if (!requestedFields) {
47
- throw new Error(`Certificate with type ${certToVerify.type} was not requested`)
48
+ // Check if the certificate matches requested certifiers, types, and fields
49
+ if (certificatesRequested != null) {
50
+ const { certifiers, types } = certificatesRequested
51
+
52
+ // Check certifier matches
53
+ if (!certifiers.includes(certToVerify.certifier)) {
54
+ throw new Error(
55
+ `Certificate with serial number ${certToVerify.serialNumber} has an unrequested certifier: ${certToVerify.certifier}`
56
+ )
57
+ }
58
+
59
+ // Check type and fields match requested
60
+ const requestedFields = types[certToVerify.type]
61
+ if (requestedFields == null) { // ✅ Explicitly check for null or undefined
62
+ throw new Error(
63
+ `Certificate with type ${certToVerify.type} was not requested`
64
+ )
65
+ }
48
66
  }
49
- }
50
67
 
51
- // Attempt to decrypt fields
52
- await certToVerify.decryptFields(verifierWallet)
53
- }))
54
- }
68
+ // Attempt to decrypt fields
69
+ await certToVerify.decryptFields(verifierWallet)
70
+ })
71
+ )
72
+ }
@@ -1,4 +1,4 @@
1
- import { Utils, WalletCounterparty, WalletInterface } from '../../../mod.js'
1
+ import { Utils, WalletInterface, WalletCounterparty } from '../../../mod.js'
2
2
 
3
3
  /**
4
4
  * Verifies a nonce derived from a wallet
@@ -7,7 +7,11 @@ import { Utils, WalletCounterparty, WalletInterface } from '../../../mod.js'
7
7
  * @param counterparty - The counterparty to the nonce creation. Defaults to 'self'.
8
8
  * @returns The status of the validation
9
9
  */
10
- export async function verifyNonce(nonce: string, wallet: WalletInterface, counterparty: WalletCounterparty = 'self'): Promise<boolean> {
10
+ export async function verifyNonce(
11
+ nonce: string,
12
+ wallet: WalletInterface,
13
+ counterparty: WalletCounterparty = 'self'
14
+ ): Promise<boolean> {
11
15
  // Convert nonce from base64 string to Uint8Array
12
16
  const buffer = Utils.toArray(nonce, 'base64')
13
17
 
package/src/compat/BSM.ts CHANGED
@@ -33,7 +33,11 @@ export const magicHash = (messageBuf: number[]): number[] => {
33
33
  * @param mode The mode of operation. When "base64", the BSM format signature is returned. When "raw", a Signature object is returned. Default: "base64".
34
34
  * @returns The signature object when in raw mode, or the BSM base64 string when in base64 mode.
35
35
  */
36
- export const sign = (message: number[], privateKey: PrivateKey, mode: 'raw' | 'base64' = 'base64'): Signature | string => {
36
+ export const sign = (
37
+ message: number[],
38
+ privateKey: PrivateKey,
39
+ mode: 'raw' | 'base64' = 'base64'
40
+ ): Signature | string => {
37
41
  const hashBuf = magicHash(message)
38
42
  const sig = ECDSA.sign(new BigNumber(hashBuf), privateKey, true)
39
43
  if (mode === 'raw') {
@@ -52,7 +56,11 @@ export const sign = (message: number[], privateKey: PrivateKey, mode: 'raw' | 'b
52
56
  * @param pubKey The public key for verification.
53
57
  * @returns True if the signature is valid, false otherwise.
54
58
  */
55
- export const verify = (message: number[], sig: Signature, pubKey: PublicKey): boolean => {
59
+ export const verify = (
60
+ message: number[],
61
+ sig: Signature,
62
+ pubKey: PublicKey
63
+ ): boolean => {
56
64
  const hashBuf = magicHash(message)
57
65
  return ECDSA.verify(new BigNumber(hashBuf), sig, pubKey)
58
66
  }