@bsv/wallet-toolbox 1.7.1 → 1.7.2

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 (317) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/docs/client.md +489 -1334
  3. package/docs/services.md +5 -5
  4. package/docs/storage.md +64 -61
  5. package/docs/wallet.md +489 -1334
  6. package/mobile/out/src/Wallet.d.ts +21 -4
  7. package/mobile/out/src/Wallet.d.ts.map +1 -1
  8. package/mobile/out/src/Wallet.js +93 -57
  9. package/mobile/out/src/Wallet.js.map +1 -1
  10. package/mobile/out/src/WalletLogger.d.ts +33 -0
  11. package/mobile/out/src/WalletLogger.d.ts.map +1 -0
  12. package/mobile/out/src/WalletLogger.js +157 -0
  13. package/mobile/out/src/WalletLogger.js.map +1 -0
  14. package/mobile/out/src/WalletPermissionsManager.d.ts.map +1 -1
  15. package/mobile/out/src/WalletPermissionsManager.js +1 -2
  16. package/mobile/out/src/WalletPermissionsManager.js.map +1 -1
  17. package/mobile/out/src/sdk/WERR_errors.d.ts.map +1 -1
  18. package/mobile/out/src/sdk/WERR_errors.js.map +1 -1
  19. package/mobile/out/src/sdk/WalletError.d.ts.map +1 -1
  20. package/mobile/out/src/sdk/WalletError.js +0 -2
  21. package/mobile/out/src/sdk/WalletError.js.map +1 -1
  22. package/mobile/out/src/sdk/WalletServices.interfaces.d.ts +3 -3
  23. package/mobile/out/src/sdk/WalletServices.interfaces.d.ts.map +1 -1
  24. package/mobile/out/src/sdk/WalletStorage.interfaces.d.ts +9 -10
  25. package/mobile/out/src/sdk/WalletStorage.interfaces.d.ts.map +1 -1
  26. package/mobile/out/src/sdk/index.d.ts +1 -1
  27. package/mobile/out/src/sdk/index.d.ts.map +1 -1
  28. package/mobile/out/src/sdk/index.js +3 -1
  29. package/mobile/out/src/sdk/index.js.map +1 -1
  30. package/mobile/out/src/services/Services.d.ts +5 -5
  31. package/mobile/out/src/services/Services.d.ts.map +1 -1
  32. package/mobile/out/src/services/Services.js +18 -4
  33. package/mobile/out/src/services/Services.js.map +1 -1
  34. package/mobile/out/src/services/providers/WhatsOnChain.d.ts.map +1 -1
  35. package/mobile/out/src/services/providers/WhatsOnChain.js +1 -2
  36. package/mobile/out/src/services/providers/WhatsOnChain.js.map +1 -1
  37. package/mobile/out/src/services/providers/getBeefForTxid.d.ts.map +1 -1
  38. package/mobile/out/src/services/providers/getBeefForTxid.js.map +1 -1
  39. package/mobile/out/src/signer/methods/acquireDirectCertificate.d.ts +2 -3
  40. package/mobile/out/src/signer/methods/acquireDirectCertificate.d.ts.map +1 -1
  41. package/mobile/out/src/signer/methods/acquireDirectCertificate.js.map +1 -1
  42. package/mobile/out/src/signer/methods/buildSignableTransaction.d.ts +3 -4
  43. package/mobile/out/src/signer/methods/buildSignableTransaction.d.ts.map +1 -1
  44. package/mobile/out/src/signer/methods/buildSignableTransaction.js +1 -2
  45. package/mobile/out/src/signer/methods/buildSignableTransaction.js.map +1 -1
  46. package/mobile/out/src/signer/methods/createAction.d.ts +3 -4
  47. package/mobile/out/src/signer/methods/createAction.d.ts.map +1 -1
  48. package/mobile/out/src/signer/methods/createAction.js +17 -6
  49. package/mobile/out/src/signer/methods/createAction.js.map +1 -1
  50. package/mobile/out/src/signer/methods/internalizeAction.d.ts.map +1 -1
  51. package/mobile/out/src/signer/methods/internalizeAction.js +1 -2
  52. package/mobile/out/src/signer/methods/internalizeAction.js.map +1 -1
  53. package/mobile/out/src/signer/methods/proveCertificate.d.ts +2 -3
  54. package/mobile/out/src/signer/methods/proveCertificate.d.ts.map +1 -1
  55. package/mobile/out/src/signer/methods/proveCertificate.js.map +1 -1
  56. package/mobile/out/src/signer/methods/signAction.d.ts.map +1 -1
  57. package/mobile/out/src/signer/methods/signAction.js +1 -2
  58. package/mobile/out/src/signer/methods/signAction.js.map +1 -1
  59. package/mobile/out/src/storage/StorageIdb.d.ts +3 -4
  60. package/mobile/out/src/storage/StorageIdb.d.ts.map +1 -1
  61. package/mobile/out/src/storage/StorageIdb.js.map +1 -1
  62. package/mobile/out/src/storage/StorageProvider.d.ts +6 -7
  63. package/mobile/out/src/storage/StorageProvider.d.ts.map +1 -1
  64. package/mobile/out/src/storage/StorageProvider.js +5 -6
  65. package/mobile/out/src/storage/StorageProvider.js.map +1 -1
  66. package/mobile/out/src/storage/WalletStorageManager.d.ts +5 -5
  67. package/mobile/out/src/storage/WalletStorageManager.d.ts.map +1 -1
  68. package/mobile/out/src/storage/WalletStorageManager.js +5 -4
  69. package/mobile/out/src/storage/WalletStorageManager.js.map +1 -1
  70. package/mobile/out/src/storage/methods/ListActionsSpecOp.d.ts +2 -2
  71. package/mobile/out/src/storage/methods/ListActionsSpecOp.d.ts.map +1 -1
  72. package/mobile/out/src/storage/methods/ListActionsSpecOp.js.map +1 -1
  73. package/mobile/out/src/storage/methods/ListOutputsSpecOp.d.ts +4 -5
  74. package/mobile/out/src/storage/methods/ListOutputsSpecOp.d.ts.map +1 -1
  75. package/mobile/out/src/storage/methods/ListOutputsSpecOp.js.map +1 -1
  76. package/mobile/out/src/storage/methods/attemptToPostReqsToNetwork.d.ts +2 -2
  77. package/mobile/out/src/storage/methods/attemptToPostReqsToNetwork.d.ts.map +1 -1
  78. package/mobile/out/src/storage/methods/attemptToPostReqsToNetwork.js +11 -7
  79. package/mobile/out/src/storage/methods/attemptToPostReqsToNetwork.js.map +1 -1
  80. package/mobile/out/src/storage/methods/createAction.d.ts +3 -4
  81. package/mobile/out/src/storage/methods/createAction.d.ts.map +1 -1
  82. package/mobile/out/src/storage/methods/createAction.js +18 -5
  83. package/mobile/out/src/storage/methods/createAction.js.map +1 -1
  84. package/mobile/out/src/storage/methods/generateChange.js +10 -10
  85. package/mobile/out/src/storage/methods/generateChange.js.map +1 -1
  86. package/mobile/out/src/storage/methods/internalizeAction.d.ts.map +1 -1
  87. package/mobile/out/src/storage/methods/internalizeAction.js +1 -2
  88. package/mobile/out/src/storage/methods/internalizeAction.js.map +1 -1
  89. package/mobile/out/src/storage/methods/listActionsIdb.d.ts +2 -3
  90. package/mobile/out/src/storage/methods/listActionsIdb.d.ts.map +1 -1
  91. package/mobile/out/src/storage/methods/listActionsIdb.js.map +1 -1
  92. package/mobile/out/src/storage/methods/listCertificates.d.ts +3 -3
  93. package/mobile/out/src/storage/methods/listCertificates.d.ts.map +1 -1
  94. package/mobile/out/src/storage/methods/listCertificates.js.map +1 -1
  95. package/mobile/out/src/storage/methods/listOutputsIdb.d.ts +2 -3
  96. package/mobile/out/src/storage/methods/listOutputsIdb.d.ts.map +1 -1
  97. package/mobile/out/src/storage/methods/listOutputsIdb.js.map +1 -1
  98. package/mobile/out/src/storage/methods/processAction.d.ts +2 -2
  99. package/mobile/out/src/storage/methods/processAction.d.ts.map +1 -1
  100. package/mobile/out/src/storage/methods/processAction.js +15 -10
  101. package/mobile/out/src/storage/methods/processAction.js.map +1 -1
  102. package/mobile/out/src/storage/remoting/StorageClient.d.ts +5 -6
  103. package/mobile/out/src/storage/remoting/StorageClient.d.ts.map +1 -1
  104. package/mobile/out/src/storage/remoting/StorageClient.js +22 -0
  105. package/mobile/out/src/storage/remoting/StorageClient.js.map +1 -1
  106. package/mobile/out/src/storage/remoting/StorageMobile.d.ts +5 -6
  107. package/mobile/out/src/storage/remoting/StorageMobile.d.ts.map +1 -1
  108. package/mobile/out/src/storage/remoting/StorageMobile.js.map +1 -1
  109. package/mobile/package-lock.json +6 -6
  110. package/mobile/package.json +2 -2
  111. package/out/src/Wallet.d.ts +21 -4
  112. package/out/src/Wallet.d.ts.map +1 -1
  113. package/out/src/Wallet.js +93 -57
  114. package/out/src/Wallet.js.map +1 -1
  115. package/out/src/WalletLogger.d.ts +33 -0
  116. package/out/src/WalletLogger.d.ts.map +1 -0
  117. package/out/src/WalletLogger.js +157 -0
  118. package/out/src/WalletLogger.js.map +1 -0
  119. package/out/src/WalletPermissionsManager.d.ts.map +1 -1
  120. package/out/src/WalletPermissionsManager.js +1 -2
  121. package/out/src/WalletPermissionsManager.js.map +1 -1
  122. package/out/src/__tests/WalletPermissionsManager.fixtures.d.ts +1 -0
  123. package/out/src/__tests/WalletPermissionsManager.fixtures.d.ts.map +1 -1
  124. package/out/src/__tests/WalletPermissionsManager.fixtures.js +15 -4
  125. package/out/src/__tests/WalletPermissionsManager.fixtures.js.map +1 -1
  126. package/out/src/__tests/WalletPermissionsManager.proxying.test.js +79 -74
  127. package/out/src/__tests/WalletPermissionsManager.proxying.test.js.map +1 -1
  128. package/out/src/sdk/WERR_errors.d.ts.map +1 -1
  129. package/out/src/sdk/WERR_errors.js.map +1 -1
  130. package/out/src/sdk/WalletError.d.ts.map +1 -1
  131. package/out/src/sdk/WalletError.js +0 -2
  132. package/out/src/sdk/WalletError.js.map +1 -1
  133. package/out/src/sdk/WalletServices.interfaces.d.ts +3 -3
  134. package/out/src/sdk/WalletServices.interfaces.d.ts.map +1 -1
  135. package/out/src/sdk/WalletStorage.interfaces.d.ts +9 -10
  136. package/out/src/sdk/WalletStorage.interfaces.d.ts.map +1 -1
  137. package/out/src/sdk/__test/validationHelpers.test.js +4 -4
  138. package/out/src/sdk/__test/validationHelpers.test.js.map +1 -1
  139. package/out/src/sdk/index.d.ts +1 -1
  140. package/out/src/sdk/index.d.ts.map +1 -1
  141. package/out/src/sdk/index.js +3 -1
  142. package/out/src/sdk/index.js.map +1 -1
  143. package/out/src/services/Services.d.ts +5 -5
  144. package/out/src/services/Services.d.ts.map +1 -1
  145. package/out/src/services/Services.js +18 -4
  146. package/out/src/services/Services.js.map +1 -1
  147. package/out/src/services/providers/WhatsOnChain.d.ts.map +1 -1
  148. package/out/src/services/providers/WhatsOnChain.js +1 -2
  149. package/out/src/services/providers/WhatsOnChain.js.map +1 -1
  150. package/out/src/services/providers/getBeefForTxid.d.ts.map +1 -1
  151. package/out/src/services/providers/getBeefForTxid.js.map +1 -1
  152. package/out/src/signer/methods/acquireDirectCertificate.d.ts +2 -3
  153. package/out/src/signer/methods/acquireDirectCertificate.d.ts.map +1 -1
  154. package/out/src/signer/methods/acquireDirectCertificate.js.map +1 -1
  155. package/out/src/signer/methods/buildSignableTransaction.d.ts +3 -4
  156. package/out/src/signer/methods/buildSignableTransaction.d.ts.map +1 -1
  157. package/out/src/signer/methods/buildSignableTransaction.js +1 -2
  158. package/out/src/signer/methods/buildSignableTransaction.js.map +1 -1
  159. package/out/src/signer/methods/createAction.d.ts +3 -4
  160. package/out/src/signer/methods/createAction.d.ts.map +1 -1
  161. package/out/src/signer/methods/createAction.js +17 -6
  162. package/out/src/signer/methods/createAction.js.map +1 -1
  163. package/out/src/signer/methods/internalizeAction.d.ts.map +1 -1
  164. package/out/src/signer/methods/internalizeAction.js +1 -2
  165. package/out/src/signer/methods/internalizeAction.js.map +1 -1
  166. package/out/src/signer/methods/proveCertificate.d.ts +2 -3
  167. package/out/src/signer/methods/proveCertificate.d.ts.map +1 -1
  168. package/out/src/signer/methods/proveCertificate.js.map +1 -1
  169. package/out/src/signer/methods/signAction.d.ts.map +1 -1
  170. package/out/src/signer/methods/signAction.js +1 -2
  171. package/out/src/signer/methods/signAction.js.map +1 -1
  172. package/out/src/storage/StorageIdb.d.ts +3 -4
  173. package/out/src/storage/StorageIdb.d.ts.map +1 -1
  174. package/out/src/storage/StorageIdb.js.map +1 -1
  175. package/out/src/storage/StorageKnex.d.ts +3 -4
  176. package/out/src/storage/StorageKnex.d.ts.map +1 -1
  177. package/out/src/storage/StorageKnex.js.map +1 -1
  178. package/out/src/storage/StorageProvider.d.ts +6 -7
  179. package/out/src/storage/StorageProvider.d.ts.map +1 -1
  180. package/out/src/storage/StorageProvider.js +5 -6
  181. package/out/src/storage/StorageProvider.js.map +1 -1
  182. package/out/src/storage/WalletStorageManager.d.ts +5 -5
  183. package/out/src/storage/WalletStorageManager.d.ts.map +1 -1
  184. package/out/src/storage/WalletStorageManager.js +5 -4
  185. package/out/src/storage/WalletStorageManager.js.map +1 -1
  186. package/out/src/storage/__test/getBeefForTransaction.test.js.map +1 -1
  187. package/out/src/storage/methods/ListActionsSpecOp.d.ts +2 -2
  188. package/out/src/storage/methods/ListActionsSpecOp.d.ts.map +1 -1
  189. package/out/src/storage/methods/ListActionsSpecOp.js.map +1 -1
  190. package/out/src/storage/methods/ListOutputsSpecOp.d.ts +4 -5
  191. package/out/src/storage/methods/ListOutputsSpecOp.d.ts.map +1 -1
  192. package/out/src/storage/methods/ListOutputsSpecOp.js.map +1 -1
  193. package/out/src/storage/methods/attemptToPostReqsToNetwork.d.ts +2 -2
  194. package/out/src/storage/methods/attemptToPostReqsToNetwork.d.ts.map +1 -1
  195. package/out/src/storage/methods/attemptToPostReqsToNetwork.js +11 -7
  196. package/out/src/storage/methods/attemptToPostReqsToNetwork.js.map +1 -1
  197. package/out/src/storage/methods/createAction.d.ts +3 -4
  198. package/out/src/storage/methods/createAction.d.ts.map +1 -1
  199. package/out/src/storage/methods/createAction.js +18 -5
  200. package/out/src/storage/methods/createAction.js.map +1 -1
  201. package/out/src/storage/methods/generateChange.js +10 -10
  202. package/out/src/storage/methods/generateChange.js.map +1 -1
  203. package/out/src/storage/methods/internalizeAction.d.ts.map +1 -1
  204. package/out/src/storage/methods/internalizeAction.js +1 -2
  205. package/out/src/storage/methods/internalizeAction.js.map +1 -1
  206. package/out/src/storage/methods/listActionsIdb.d.ts +2 -3
  207. package/out/src/storage/methods/listActionsIdb.d.ts.map +1 -1
  208. package/out/src/storage/methods/listActionsIdb.js.map +1 -1
  209. package/out/src/storage/methods/listActionsKnex.d.ts +2 -3
  210. package/out/src/storage/methods/listActionsKnex.d.ts.map +1 -1
  211. package/out/src/storage/methods/listActionsKnex.js.map +1 -1
  212. package/out/src/storage/methods/listCertificates.d.ts +3 -3
  213. package/out/src/storage/methods/listCertificates.d.ts.map +1 -1
  214. package/out/src/storage/methods/listCertificates.js.map +1 -1
  215. package/out/src/storage/methods/listOutputsIdb.d.ts +2 -3
  216. package/out/src/storage/methods/listOutputsIdb.d.ts.map +1 -1
  217. package/out/src/storage/methods/listOutputsIdb.js.map +1 -1
  218. package/out/src/storage/methods/listOutputsKnex.d.ts +2 -3
  219. package/out/src/storage/methods/listOutputsKnex.d.ts.map +1 -1
  220. package/out/src/storage/methods/listOutputsKnex.js.map +1 -1
  221. package/out/src/storage/methods/processAction.d.ts +2 -2
  222. package/out/src/storage/methods/processAction.d.ts.map +1 -1
  223. package/out/src/storage/methods/processAction.js +15 -10
  224. package/out/src/storage/methods/processAction.js.map +1 -1
  225. package/out/src/storage/remoting/StorageClient.d.ts +5 -6
  226. package/out/src/storage/remoting/StorageClient.d.ts.map +1 -1
  227. package/out/src/storage/remoting/StorageClient.js +22 -0
  228. package/out/src/storage/remoting/StorageClient.js.map +1 -1
  229. package/out/src/storage/remoting/StorageMobile.d.ts +5 -6
  230. package/out/src/storage/remoting/StorageMobile.d.ts.map +1 -1
  231. package/out/src/storage/remoting/StorageMobile.js.map +1 -1
  232. package/out/src/storage/remoting/StorageServer.d.ts +5 -0
  233. package/out/src/storage/remoting/StorageServer.d.ts.map +1 -1
  234. package/out/src/storage/remoting/StorageServer.js +38 -5
  235. package/out/src/storage/remoting/StorageServer.js.map +1 -1
  236. package/out/src/storage/remoting/__test/StorageClient.test.d.ts +2 -0
  237. package/out/src/storage/remoting/__test/StorageClient.test.d.ts.map +1 -0
  238. package/out/src/storage/remoting/__test/StorageClient.test.js +98 -0
  239. package/out/src/storage/remoting/__test/StorageClient.test.js.map +1 -0
  240. package/out/src/storage/sync/StorageMySQLDojoReader.d.ts.map +1 -1
  241. package/out/src/storage/sync/StorageMySQLDojoReader.js +1 -2
  242. package/out/src/storage/sync/StorageMySQLDojoReader.js.map +1 -1
  243. package/out/test/Wallet/certificate/listCertificates.test.js.map +1 -1
  244. package/out/test/Wallet/local/localWallet2.man.test.js.map +1 -1
  245. package/out/test/Wallet/signAction/mountaintop.man.test.js +2 -2
  246. package/out/test/Wallet/signAction/mountaintop.man.test.js.map +1 -1
  247. package/out/test/Wallet/support/operations.man.test.js +46 -1
  248. package/out/test/Wallet/support/operations.man.test.js.map +1 -1
  249. package/out/test/Wallet/support/reqErrorReview.2025.05.06.man.test.js.map +1 -1
  250. package/out/test/WalletClient/WERR.man.test.js +1 -1
  251. package/out/test/WalletClient/WERR.man.test.js.map +1 -1
  252. package/out/test/utils/localWalletMethods.d.ts.map +1 -1
  253. package/out/test/utils/localWalletMethods.js +2 -3
  254. package/out/test/utils/localWalletMethods.js.map +1 -1
  255. package/out/test/wallet/action/createAction.test.js +3 -0
  256. package/out/test/wallet/action/createAction.test.js.map +1 -1
  257. package/out/tsconfig.all.tsbuildinfo +1 -1
  258. package/package.json +2 -2
  259. package/src/Wallet.ts +114 -79
  260. package/src/WalletLogger.ts +167 -0
  261. package/src/WalletPermissionsManager.ts +3 -5
  262. package/src/__tests/WalletPermissionsManager.fixtures.ts +14 -1
  263. package/src/__tests/WalletPermissionsManager.proxying.test.ts +89 -85
  264. package/src/sdk/WERR_errors.ts +6 -3
  265. package/src/sdk/WalletError.ts +0 -4
  266. package/src/sdk/WalletServices.interfaces.ts +14 -3
  267. package/src/sdk/WalletStorage.interfaces.ts +11 -16
  268. package/src/sdk/__test/validationHelpers.test.ts +4 -5
  269. package/src/sdk/index.ts +1 -1
  270. package/src/services/Services.ts +23 -5
  271. package/src/services/providers/WhatsOnChain.ts +2 -3
  272. package/src/services/providers/getBeefForTxid.ts +3 -5
  273. package/src/signer/methods/acquireDirectCertificate.ts +2 -3
  274. package/src/signer/methods/buildSignableTransaction.ts +5 -6
  275. package/src/signer/methods/createAction.ts +24 -18
  276. package/src/signer/methods/internalizeAction.ts +4 -5
  277. package/src/signer/methods/proveCertificate.ts +3 -4
  278. package/src/signer/methods/signAction.ts +6 -4
  279. package/src/storage/StorageIdb.ts +3 -4
  280. package/src/storage/StorageKnex.ts +3 -4
  281. package/src/storage/StorageProvider.ts +16 -20
  282. package/src/storage/WalletStorageManager.ts +10 -11
  283. package/src/storage/__test/getBeefForTransaction.test.ts +3 -4
  284. package/src/storage/methods/ListActionsSpecOp.ts +4 -4
  285. package/src/storage/methods/ListOutputsSpecOp.ts +7 -8
  286. package/src/storage/methods/attemptToPostReqsToNetwork.ts +15 -8
  287. package/src/storage/methods/createAction.ts +39 -23
  288. package/src/storage/methods/generateChange.ts +10 -10
  289. package/src/storage/methods/internalizeAction.ts +4 -4
  290. package/src/storage/methods/listActionsIdb.ts +3 -3
  291. package/src/storage/methods/listActionsKnex.ts +3 -3
  292. package/src/storage/methods/listCertificates.ts +7 -6
  293. package/src/storage/methods/listOutputsIdb.ts +2 -3
  294. package/src/storage/methods/listOutputsKnex.ts +2 -3
  295. package/src/storage/methods/processAction.ts +30 -11
  296. package/src/storage/remoting/StorageClient.ts +31 -12
  297. package/src/storage/remoting/StorageMobile.ts +6 -12
  298. package/src/storage/remoting/StorageServer.ts +45 -6
  299. package/src/storage/remoting/__test/StorageClient.test.ts +113 -0
  300. package/src/storage/sync/StorageMySQLDojoReader.ts +2 -3
  301. package/test/Wallet/certificate/listCertificates.test.ts +2 -2
  302. package/test/Wallet/local/localWallet2.man.test.ts +5 -5
  303. package/test/Wallet/signAction/mountaintop.man.test.ts +3 -2
  304. package/test/Wallet/support/operations.man.test.ts +65 -6
  305. package/test/Wallet/support/reqErrorReview.2025.05.06.man.test.ts +2 -14
  306. package/test/WalletClient/WERR.man.test.ts +3 -3
  307. package/test/utils/localWalletMethods.ts +5 -5
  308. package/test/wallet/action/createAction.test.ts +3 -0
  309. package/mobile/out/src/sdk/validationHelpers.d.ts +0 -322
  310. package/mobile/out/src/sdk/validationHelpers.d.ts.map +0 -1
  311. package/mobile/out/src/sdk/validationHelpers.js +0 -691
  312. package/mobile/out/src/sdk/validationHelpers.js.map +0 -1
  313. package/out/src/sdk/validationHelpers.d.ts +0 -322
  314. package/out/src/sdk/validationHelpers.d.ts.map +0 -1
  315. package/out/src/sdk/validationHelpers.js +0 -691
  316. package/out/src/sdk/validationHelpers.js.map +0 -1
  317. package/src/sdk/validationHelpers.ts +0 -1034
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bsv/wallet-toolbox",
3
- "version": "1.7.1",
3
+ "version": "1.7.2",
4
4
  "description": "BRC100 conforming wallet, wallet storage and wallet signer components",
5
5
  "main": "./out/src/index.js",
6
6
  "types": "./out/src/index.d.ts",
@@ -33,7 +33,7 @@
33
33
  "dependencies": {
34
34
  "@bsv/auth-express-middleware": "^1.2.3",
35
35
  "@bsv/payment-express-middleware": "^1.2.3",
36
- "@bsv/sdk": "^1.9.3",
36
+ "@bsv/sdk": "^1.9.9",
37
37
  "express": "^4.21.2",
38
38
  "idb": "^8.0.2",
39
39
  "knex": "^3.1.0",
package/src/Wallet.ts CHANGED
@@ -24,7 +24,6 @@ import {
24
24
  GetVersionResult,
25
25
  InternalizeActionArgs,
26
26
  InternalizeActionResult,
27
- KeyDeriver,
28
27
  ListActionsArgs,
29
28
  ListActionsResult,
30
29
  ListCertificatesArgs,
@@ -66,7 +65,10 @@ import {
66
65
  LookupResolver,
67
66
  AtomicBEEF,
68
67
  BEEF,
69
- KeyDeriverApi
68
+ KeyDeriverApi,
69
+ Validation,
70
+ WalletLoggerInterface,
71
+ MakeWalletLogger
70
72
  } from '@bsv/sdk'
71
73
  import { acquireDirectCertificate } from './signer/methods/acquireDirectCertificate'
72
74
  import { proveCertificate } from './signer/methods/proveCertificate'
@@ -96,28 +98,12 @@ import {
96
98
  import { WalletServices } from './sdk/WalletServices.interfaces'
97
99
  import { PrivilegedKeyManager } from './sdk/PrivilegedKeyManager'
98
100
  import { WERR_INTERNAL, WERR_INVALID_PARAMETER, WERR_REVIEW_ACTIONS } from './sdk/WERR_errors'
99
- import {
100
- validateAbortActionArgs,
101
- validateAcquireDirectCertificateArgs,
102
- validateAcquireIssuanceCertificateArgs,
103
- validateCreateActionArgs,
104
- validateDiscoverByAttributesArgs,
105
- validateDiscoverByIdentityKeyArgs,
106
- validateInternalizeActionArgs,
107
- validateListActionsArgs,
108
- validateListCertificatesArgs,
109
- validateListOutputsArgs,
110
- validateOriginator,
111
- validateProveCertificateArgs,
112
- validateRelinquishCertificateArgs,
113
- validateRelinquishOutputArgs,
114
- validateSignActionArgs,
115
- ValidCreateActionArgs,
116
- ValidWalletSignerArgs
117
- } from './sdk/validationHelpers'
118
101
  import { AuthId, StorageCreateActionResult, StorageInternalizeActionResult } from './sdk/WalletStorage.interfaces'
119
102
  import { WalletError } from './sdk/WalletError'
120
103
 
104
+ /**
105
+ * The preferred means of constructing a `Wallet` is with a `WalletArgs` instance.
106
+ */
121
107
  export interface WalletArgs {
122
108
  chain: Chain
123
109
  keyDeriver: KeyDeriverApi
@@ -127,6 +113,16 @@ export interface WalletArgs {
127
113
  privilegedKeyManager?: PrivilegedKeyManager
128
114
  settingsManager?: WalletSettingsManager
129
115
  lookupResolver?: LookupResolver
116
+ /**
117
+ * Optional. Provide a function conforming to the `MakeWalletLogger` type to enable wallet request logging.
118
+ *
119
+ * For simple requests using `Console` may be adequate, initialize with
120
+ * `() => Console`
121
+ *
122
+ * Aggregate tracing and control over capturing all logged output in one place:
123
+ * `(log?: string | WalletLoggerInterface) => new WalletLogger(log)`
124
+ */
125
+ makeLogger?: MakeWalletLogger
130
126
  }
131
127
 
132
128
  function isWalletSigner(args: WalletArgs | WalletSigner): args is WalletSigner {
@@ -174,6 +170,7 @@ export class Wallet implements WalletInterface, ProtoWallet {
174
170
  userParty: string
175
171
  proto: ProtoWallet
176
172
  privilegedKeyManager?: PrivilegedKeyManager
173
+ makeLogger?: MakeWalletLogger
177
174
 
178
175
  pendingSignActions: Record<string, PendingSignAction>
179
176
 
@@ -186,7 +183,8 @@ export class Wallet implements WalletInterface, ProtoWallet {
186
183
  argsOrSigner: WalletArgs | WalletSigner,
187
184
  services?: WalletServices,
188
185
  monitor?: Monitor,
189
- privilegedKeyManager?: PrivilegedKeyManager
186
+ privilegedKeyManager?: PrivilegedKeyManager,
187
+ makeLogger?: MakeWalletLogger
190
188
  ) {
191
189
  const args: WalletArgs = !isWalletSigner(argsOrSigner)
192
190
  ? argsOrSigner
@@ -196,7 +194,8 @@ export class Wallet implements WalletInterface, ProtoWallet {
196
194
  storage: argsOrSigner.storage,
197
195
  services,
198
196
  monitor,
199
- privilegedKeyManager
197
+ privilegedKeyManager,
198
+ makeLogger
200
199
  }
201
200
 
202
201
  if (args.storage._authId.identityKey != args.keyDeriver.identityKey)
@@ -218,6 +217,7 @@ export class Wallet implements WalletInterface, ProtoWallet {
218
217
  this.services = args.services
219
218
  this.monitor = args.monitor
220
219
  this.privilegedKeyManager = args.privilegedKeyManager
220
+ this.makeLogger = args.makeLogger
221
221
 
222
222
  this.identityKey = this.keyDeriver.identityKey
223
223
 
@@ -374,11 +374,12 @@ export class Wallet implements WalletInterface, ProtoWallet {
374
374
  }
375
375
  }
376
376
 
377
- private validateAuthAndArgs<A, T extends ValidWalletSignerArgs>(
377
+ private validateAuthAndArgs<A, T extends Validation.ValidWalletSignerArgs>(
378
378
  args: A,
379
- validate: (args: A) => T
379
+ validate: (args: A, logger?: WalletLoggerInterface) => T,
380
+ logger?: WalletLoggerInterface
380
381
  ): { vargs: T; auth: AuthId } {
381
- const vargs = validate(args)
382
+ const vargs = validate(args, logger)
382
383
  const auth: AuthId = { identityKey: this.identityKey }
383
384
  return { vargs, auth }
384
385
  }
@@ -391,8 +392,8 @@ export class Wallet implements WalletInterface, ProtoWallet {
391
392
  args: ListActionsArgs,
392
393
  originator?: OriginatorDomainNameStringUnder250Bytes
393
394
  ): Promise<ListActionsResult> {
394
- validateOriginator(originator)
395
- const { vargs } = this.validateAuthAndArgs(args, validateListActionsArgs)
395
+ Validation.validateOriginator(originator)
396
+ const { vargs } = this.validateAuthAndArgs(args, Validation.validateListActionsArgs)
396
397
  const r = await this.storage.listActions(vargs)
397
398
  return r
398
399
  }
@@ -405,8 +406,8 @@ export class Wallet implements WalletInterface, ProtoWallet {
405
406
  args: ListOutputsArgs,
406
407
  originator?: OriginatorDomainNameStringUnder250Bytes
407
408
  ): Promise<ListOutputsResult> {
408
- validateOriginator(originator)
409
- const { vargs } = this.validateAuthAndArgs(args, validateListOutputsArgs)
409
+ Validation.validateOriginator(originator)
410
+ const { vargs } = this.validateAuthAndArgs(args, Validation.validateListOutputsArgs)
410
411
  if (this.autoKnownTxids && !vargs.knownTxids) {
411
412
  vargs.knownTxids = this.getKnownTxids()
412
413
  }
@@ -422,8 +423,8 @@ export class Wallet implements WalletInterface, ProtoWallet {
422
423
  args: ListCertificatesArgs,
423
424
  originator?: OriginatorDomainNameStringUnder250Bytes
424
425
  ): Promise<ListCertificatesResult> {
425
- validateOriginator(originator)
426
- const { vargs } = this.validateAuthAndArgs(args, validateListCertificatesArgs)
426
+ Validation.validateOriginator(originator)
427
+ const { vargs } = this.validateAuthAndArgs(args, Validation.validateListCertificatesArgs)
427
428
  const r = await this.storage.listCertificates(vargs)
428
429
  return r
429
430
  }
@@ -436,9 +437,9 @@ export class Wallet implements WalletInterface, ProtoWallet {
436
437
  args: AcquireCertificateArgs,
437
438
  originator?: OriginatorDomainNameStringUnder250Bytes
438
439
  ): Promise<AcquireCertificateResult> {
439
- validateOriginator(originator)
440
+ Validation.validateOriginator(originator)
440
441
  if (args.acquisitionProtocol === 'direct') {
441
- const { auth, vargs } = this.validateAuthAndArgs(args, validateAcquireDirectCertificateArgs)
442
+ const { auth, vargs } = this.validateAuthAndArgs(args, Validation.validateAcquireDirectCertificateArgs)
442
443
  vargs.subject = (
443
444
  await this.getPublicKey({
444
445
  identityKey: true,
@@ -483,7 +484,7 @@ export class Wallet implements WalletInterface, ProtoWallet {
483
484
  }
484
485
 
485
486
  if (args.acquisitionProtocol === 'issuance') {
486
- const { auth, vargs } = this.validateAuthAndArgs(args, validateAcquireIssuanceCertificateArgs)
487
+ const { auth, vargs } = this.validateAuthAndArgs(args, Validation.validateAcquireIssuanceCertificateArgs)
487
488
  // Create a random nonce that the server can verify
488
489
  const clientNonce = await createNonce(this, vargs.certifier)
489
490
  // TODO: Consider adding support to request certificates from a certifier before acquiring a certificate.
@@ -599,8 +600,8 @@ export class Wallet implements WalletInterface, ProtoWallet {
599
600
  args: RelinquishCertificateArgs,
600
601
  originator?: OriginatorDomainNameStringUnder250Bytes
601
602
  ): Promise<RelinquishCertificateResult> {
602
- validateOriginator(originator)
603
- this.validateAuthAndArgs(args, validateRelinquishCertificateArgs)
603
+ Validation.validateOriginator(originator)
604
+ this.validateAuthAndArgs(args, Validation.validateRelinquishCertificateArgs)
604
605
  const r = await this.storage.relinquishCertificate(args)
605
606
  return { relinquished: true }
606
607
  }
@@ -609,8 +610,8 @@ export class Wallet implements WalletInterface, ProtoWallet {
609
610
  args: ProveCertificateArgs,
610
611
  originator?: OriginatorDomainNameStringUnder250Bytes
611
612
  ): Promise<ProveCertificateResult> {
612
- originator = validateOriginator(originator)
613
- const { auth, vargs } = this.validateAuthAndArgs(args, validateProveCertificateArgs)
613
+ originator = Validation.validateOriginator(originator)
614
+ const { auth, vargs } = this.validateAuthAndArgs(args, Validation.validateProveCertificateArgs)
614
615
  const r = await proveCertificate(this, auth, vargs)
615
616
  return r
616
617
  }
@@ -628,8 +629,8 @@ export class Wallet implements WalletInterface, ProtoWallet {
628
629
  args: DiscoverByIdentityKeyArgs,
629
630
  originator?: OriginatorDomainNameStringUnder250Bytes
630
631
  ): Promise<DiscoverCertificatesResult> {
631
- validateOriginator(originator)
632
- this.validateAuthAndArgs(args, validateDiscoverByIdentityKeyArgs)
632
+ Validation.validateOriginator(originator)
633
+ this.validateAuthAndArgs(args, Validation.validateDiscoverByIdentityKeyArgs)
633
634
 
634
635
  const TTL_MS = 2 * 60 * 1000
635
636
  const now = Date.now()
@@ -673,8 +674,8 @@ export class Wallet implements WalletInterface, ProtoWallet {
673
674
  args: DiscoverByAttributesArgs,
674
675
  originator?: OriginatorDomainNameStringUnder250Bytes
675
676
  ): Promise<DiscoverCertificatesResult> {
676
- validateOriginator(originator)
677
- this.validateAuthAndArgs(args, validateDiscoverByAttributesArgs)
677
+ Validation.validateOriginator(originator)
678
+ this.validateAuthAndArgs(args, Validation.validateDiscoverByAttributesArgs)
678
679
 
679
680
  const TTL_MS = 2 * 60 * 1000
680
681
  const now = Date.now()
@@ -752,6 +753,28 @@ export class Wallet implements WalletInterface, ProtoWallet {
752
753
  return this.verifyReturnedTxidOnly(b).toBinary()
753
754
  }
754
755
 
756
+ logMakeLogger(method: string, args: any): WalletLoggerInterface | undefined {
757
+ const logger = this.makeLogger?.(args['log'])
758
+ this.logMethodStart(method, logger)
759
+ return logger
760
+ }
761
+
762
+ logMethodStart(method: string, logger?: WalletLoggerInterface): void {
763
+ logger?.group(`Wallet ${method}`)
764
+ }
765
+
766
+ logResult(r: any, logger?: WalletLoggerInterface): void {
767
+ if (!logger) return
768
+ logger.groupEnd()
769
+ r['log'] = logger.flush?.()
770
+ }
771
+
772
+ logWalletError(eu: unknown, logger?: WalletLoggerInterface): void {
773
+ if (!logger) return
774
+ logger.error('WalletError:', WalletError.unknownToJson(eu))
775
+ logger.flush?.()
776
+ }
777
+
755
778
  //////////////////
756
779
  // Actions
757
780
  //////////////////
@@ -760,41 +783,53 @@ export class Wallet implements WalletInterface, ProtoWallet {
760
783
  args: CreateActionArgs,
761
784
  originator?: OriginatorDomainNameStringUnder250Bytes
762
785
  ): Promise<CreateActionResult> {
763
- validateOriginator(originator)
764
-
765
- if (!args.options) args.options = {}
766
- args.options.trustSelf ||= this.trustSelf
767
- if (this.autoKnownTxids && !args.options.knownTxids) {
768
- args.options.knownTxids = this.getKnownTxids(args.options.knownTxids)
769
- }
786
+ const logger = this.logMakeLogger(`createAction`, args)
787
+ try {
788
+ Validation.validateOriginator(originator)
789
+
790
+ if (!args.options) args.options = {}
791
+ args.options.trustSelf ||= this.trustSelf
792
+ if (this.autoKnownTxids && !args.options.knownTxids) {
793
+ args.options.knownTxids = this.getKnownTxids(args.options.knownTxids)
794
+ }
770
795
 
771
- const { auth, vargs } = this.validateAuthAndArgs(args, validateCreateActionArgs)
796
+ const { auth, vargs } = this.validateAuthAndArgs(args, Validation.validateCreateActionArgs, logger)
797
+ logger?.log('validated args')
772
798
 
773
- vargs.includeAllSourceTransactions = this.includeAllSourceTransactions
774
- if (this.randomVals && this.randomVals.length > 1) {
775
- vargs.randomVals = [...this.randomVals]
776
- }
799
+ vargs.includeAllSourceTransactions = this.includeAllSourceTransactions
800
+ if (this.randomVals && this.randomVals.length > 1) {
801
+ vargs.randomVals = [...this.randomVals]
802
+ }
777
803
 
778
- const r = await createAction(this, auth, vargs)
804
+ const r = await createAction(this, auth, vargs)
805
+ logger?.log('action created')
779
806
 
780
- if (r.tx) {
781
- this.beef.mergeBeefFromParty(this.storageParty, r.tx)
782
- }
807
+ if (r.tx) {
808
+ this.beef.mergeBeefFromParty(this.storageParty, r.tx)
809
+ }
783
810
 
784
- if (r.tx) r.tx = this.verifyReturnedTxidOnlyAtomicBEEF(r.tx, args.options?.knownTxids)
811
+ if (r.tx) {
812
+ r.tx = this.verifyReturnedTxidOnlyAtomicBEEF(r.tx, args.options?.knownTxids)
813
+ logger?.log('verify returned AtomicBEEF')
814
+ }
785
815
 
786
- if (!vargs.isDelayed) throwIfAnyUnsuccessfulCreateActions(r)
816
+ if (!vargs.isDelayed) throwIfAnyUnsuccessfulCreateActions(r)
787
817
 
788
- return r
818
+ this.logResult(r, logger)
819
+ return r
820
+ } catch (eu: unknown) {
821
+ this.logWalletError(eu, logger)
822
+ throw eu
823
+ }
789
824
  }
790
825
 
791
826
  async signAction(
792
827
  args: SignActionArgs,
793
828
  originator?: OriginatorDomainNameStringUnder250Bytes
794
829
  ): Promise<SignActionResult> {
795
- validateOriginator(originator)
830
+ Validation.validateOriginator(originator)
796
831
 
797
- const { auth, vargs } = this.validateAuthAndArgs(args, validateSignActionArgs)
832
+ const { auth, vargs } = this.validateAuthAndArgs(args, Validation.validateSignActionArgs)
798
833
  // createAction options are merged with undefined signAction options before validation...
799
834
  const r = await signAction(this, auth, args)
800
835
 
@@ -810,8 +845,8 @@ export class Wallet implements WalletInterface, ProtoWallet {
810
845
  args: InternalizeActionArgs,
811
846
  originator?: OriginatorDomainNameStringUnder250Bytes
812
847
  ): Promise<InternalizeActionResult> {
813
- validateOriginator(originator)
814
- const { auth, vargs } = this.validateAuthAndArgs(args, validateInternalizeActionArgs)
848
+ Validation.validateOriginator(originator)
849
+ const { auth, vargs } = this.validateAuthAndArgs(args, Validation.validateInternalizeActionArgs)
815
850
 
816
851
  if (vargs.labels.indexOf(specOpThrowReviewActions) >= 0) throwDummyReviewActions()
817
852
 
@@ -826,9 +861,9 @@ export class Wallet implements WalletInterface, ProtoWallet {
826
861
  args: AbortActionArgs,
827
862
  originator?: OriginatorDomainNameStringUnder250Bytes
828
863
  ): Promise<AbortActionResult> {
829
- validateOriginator(originator)
864
+ Validation.validateOriginator(originator)
830
865
 
831
- const { auth } = this.validateAuthAndArgs(args, validateAbortActionArgs)
866
+ const { auth } = this.validateAuthAndArgs(args, Validation.validateAbortActionArgs)
832
867
  const r = await this.storage.abortAction(args)
833
868
  return r
834
869
  }
@@ -837,14 +872,14 @@ export class Wallet implements WalletInterface, ProtoWallet {
837
872
  args: RelinquishOutputArgs,
838
873
  originator?: OriginatorDomainNameStringUnder250Bytes
839
874
  ): Promise<RelinquishOutputResult> {
840
- validateOriginator(originator)
841
- const { vargs } = this.validateAuthAndArgs(args, validateRelinquishOutputArgs)
875
+ Validation.validateOriginator(originator)
876
+ const { vargs } = this.validateAuthAndArgs(args, Validation.validateRelinquishOutputArgs)
842
877
  const r = await this.storage.relinquishOutput(args)
843
878
  return { relinquished: true }
844
879
  }
845
880
 
846
881
  async isAuthenticated(args: {}, originator?: OriginatorDomainNameStringUnder250Bytes): Promise<AuthenticatedResult> {
847
- validateOriginator(originator)
882
+ Validation.validateOriginator(originator)
848
883
  const r: { authenticated: true } = {
849
884
  authenticated: true
850
885
  }
@@ -855,12 +890,12 @@ export class Wallet implements WalletInterface, ProtoWallet {
855
890
  args: {},
856
891
  originator?: OriginatorDomainNameStringUnder250Bytes
857
892
  ): Promise<AuthenticatedResult> {
858
- validateOriginator(originator)
893
+ Validation.validateOriginator(originator)
859
894
  return { authenticated: true }
860
895
  }
861
896
 
862
897
  async getHeight(args: {}, originator?: OriginatorDomainNameStringUnder250Bytes): Promise<GetHeightResult> {
863
- validateOriginator(originator)
898
+ Validation.validateOriginator(originator)
864
899
  const height = await this.getServices().getHeight()
865
900
  return { height }
866
901
  }
@@ -869,18 +904,18 @@ export class Wallet implements WalletInterface, ProtoWallet {
869
904
  args: GetHeaderArgs,
870
905
  originator?: OriginatorDomainNameStringUnder250Bytes
871
906
  ): Promise<GetHeaderResult> {
872
- validateOriginator(originator)
907
+ Validation.validateOriginator(originator)
873
908
  const serializedHeader = await this.getServices().getHeaderForHeight(args.height)
874
909
  return { header: Utils.toHex(serializedHeader) }
875
910
  }
876
911
 
877
912
  async getNetwork(args: {}, originator?: OriginatorDomainNameStringUnder250Bytes): Promise<GetNetworkResult> {
878
- validateOriginator(originator)
913
+ Validation.validateOriginator(originator)
879
914
  return { network: toWalletNetwork(this.chain) }
880
915
  }
881
916
 
882
917
  async getVersion(args: {}, originator?: OriginatorDomainNameStringUnder250Bytes): Promise<GetVersionResult> {
883
- validateOriginator(originator)
918
+ Validation.validateOriginator(originator)
884
919
  return { version: 'wallet-brc100-1.0.0' }
885
920
  }
886
921
 
@@ -1033,7 +1068,7 @@ export class Wallet implements WalletInterface, ProtoWallet {
1033
1068
  * @returns {ListActionsResult} start `listActions` result restricted to 'nosend' (or 'failed' if aborted) actions.
1034
1069
  */
1035
1070
  async listNoSendActions(args: ListActionsArgs, abort = false): Promise<ListActionsResult> {
1036
- const { vargs } = this.validateAuthAndArgs(args, validateListActionsArgs)
1071
+ const { vargs } = this.validateAuthAndArgs(args, Validation.validateListActionsArgs)
1037
1072
  vargs.labels.push(specOpNoSendActions)
1038
1073
  if (abort) vargs.labels.push('abort')
1039
1074
  const r = await this.storage.listActions(vargs)
@@ -1047,7 +1082,7 @@ export class Wallet implements WalletInterface, ProtoWallet {
1047
1082
  * @returns {ListActionsResult} start `listActions` result restricted to 'failed' status actions.
1048
1083
  */
1049
1084
  async listFailedActions(args: ListActionsArgs, unfail = false): Promise<ListActionsResult> {
1050
- const { vargs } = this.validateAuthAndArgs(args, validateListActionsArgs)
1085
+ const { vargs } = this.validateAuthAndArgs(args, Validation.validateListActionsArgs)
1051
1086
  vargs.labels.push(specOpFailedActions)
1052
1087
  if (unfail) vargs.labels.push('unfail')
1053
1088
  const r = await this.storage.listActions(vargs)
@@ -1067,7 +1102,7 @@ export interface PendingStorageInput {
1067
1102
  export interface PendingSignAction {
1068
1103
  reference: string
1069
1104
  dcr: StorageCreateActionResult
1070
- args: ValidCreateActionArgs
1105
+ args: Validation.ValidCreateActionArgs
1071
1106
  tx: BsvTransaction
1072
1107
  amount: number
1073
1108
  pdi: PendingStorageInput[]
@@ -0,0 +1,167 @@
1
+ import { Beef, CreateActionArgs, WalletInterface, WalletLoggerInterface, WalletLoggerLog } from '@bsv/sdk'
2
+ import { WalletError } from './sdk/WalletError'
3
+
4
+ export class WalletLogger implements WalletLoggerInterface {
5
+ indent: number = 0
6
+ logs: WalletLoggerLog[] = []
7
+ isOrigin: boolean = true
8
+ isError: boolean = false
9
+ level?: WalletLoggerLevel
10
+
11
+ constructor(log?: string | WalletLoggerInterface) {
12
+ if (log) {
13
+ const lo = typeof log === 'string' ? JSON.parse(log) : log
14
+ this.indent = lo.indent || 0
15
+ this.logs = lo.logs || []
16
+ this.isOrigin = this.indent === 0
17
+ this.level = lo.level
18
+ }
19
+ }
20
+
21
+ private logAny(message?: any): string {
22
+ if (!message) return ''
23
+ if (typeof message === 'string') return message
24
+ if (typeof message === 'object') return JSON.stringify(message)
25
+ return ''
26
+ }
27
+
28
+ private toAdd(
29
+ isBegin: boolean,
30
+ isEnd: boolean,
31
+ isError: boolean,
32
+ message?: any,
33
+ optionalParams?: any[]
34
+ ): WalletLoggerLog {
35
+ let add = ''
36
+ if (message) add += this.logAny(message)
37
+ if (optionalParams) for (const p of optionalParams) add += this.logAny(p)
38
+ let log = {
39
+ when: Date.now(),
40
+ indent: this.indent,
41
+ isBegin,
42
+ isEnd,
43
+ isError,
44
+ log: add
45
+ }
46
+ return log
47
+ }
48
+
49
+ private stampLog(isBegin: boolean, isEnd: boolean, isError: boolean, message?: any, optionalParams?: any[]) {
50
+ const add = this.toAdd(isBegin, isEnd, isError, message, optionalParams)
51
+ this.logs.push(add)
52
+ }
53
+
54
+ group(...label: any[]): void {
55
+ this.stampLog(true, false, false, undefined, label)
56
+ this.indent++
57
+ }
58
+
59
+ groupEnd(): void {
60
+ this.indent--
61
+ if (this.indent < 0) this.indent = 0
62
+ this.stampLog(false, true, false)
63
+ }
64
+
65
+ log(message?: any, ...optionalParams: any[]): void {
66
+ this.stampLog(false, false, false, message, optionalParams)
67
+ }
68
+ error(message?: any, ...optionalParams: any[]): void {
69
+ this.stampLog(false, false, true, message, optionalParams)
70
+ this.isError = true
71
+ }
72
+
73
+ toWalletLoggerJson(): object {
74
+ const json: object = {
75
+ isWalletLoggerJson: true,
76
+ indent: this.indent,
77
+ logs: this.logs,
78
+ isError: this.isError
79
+ }
80
+ return json
81
+ }
82
+
83
+ toLogString(): string {
84
+ let log = ''
85
+ if (this.logs.length > 0) {
86
+ const first = this.logs[0]
87
+ const last = this.logs.slice(-1)[0]
88
+ const msecs = last.when - first.when
89
+ log += ` msecs WalletLogger ${new Date(first.when).toISOString()} logged ${msecs / 1000} seconds\n`
90
+ let prev = first
91
+ const begins: WalletLoggerLog[] = []
92
+ for (const d of this.logs) {
93
+ let df = (d.when - prev.when).toString()
94
+ df = `${' '.repeat(8 - df.length)}${df}`
95
+ const what = d.isBegin ? ' begin' : d.isEnd ? ' end' : d.isError ? ' ERROR' : ''
96
+ if (d.isBegin) begins.push(d)
97
+ let m = d.log
98
+ if (!m && d.isEnd && begins.length > 0) {
99
+ const begin = begins.pop()!
100
+ m = begin.log
101
+ }
102
+ log += `${df}${' '.repeat(d.indent)}${what} ${m}\n`
103
+ prev = d
104
+ }
105
+ }
106
+ return log
107
+ }
108
+
109
+ flush(): object | undefined {
110
+ const log = this.toLogString()
111
+ if (this.isError) console.error(log)
112
+ else console.log(log)
113
+ const r = this.isOrigin ? undefined : this.toWalletLoggerJson()
114
+ return r
115
+ }
116
+
117
+ merge(log: WalletLoggerInterface): void {
118
+ if (log.logs) {
119
+ this.logs.push(...log.logs)
120
+ }
121
+ }
122
+ }
123
+
124
+ export function logWalletError(eu: unknown, logger?: WalletLoggerInterface, label?: string): void {
125
+ if (!logger) return
126
+ logger.error(label || 'WalletError', WalletError.unknownToJson(eu))
127
+ }
128
+
129
+ export function logCreateActionArgs(args: CreateActionArgs): object {
130
+ const o: any = {
131
+ description: args.description
132
+ }
133
+ if (args.labels) o.labels = args.labels
134
+ if (args.inputBEEF) o.inputBEEF = Beef.fromBinary(args.inputBEEF).toLogString()
135
+ if (args.lockTime !== undefined) o.lockTime = args.lockTime
136
+ if (args.version !== undefined) o.version = args.version
137
+ /*
138
+ if (args.inputs) {
139
+
140
+ }
141
+ if (args.outputs) {
142
+
143
+ }
144
+ options: validateCreateActionOptions(args.options),
145
+ isSendWith: false,
146
+ isDelayed: false,
147
+ isNoSend: false,
148
+ isNewTx: false,
149
+ isRemixChange: false,
150
+ isSignAction: false,
151
+ randomVals: undefined,
152
+ includeAllSourceTransactions: false,
153
+ isTestWerrReviewActions: false
154
+ */
155
+ return o
156
+ }
157
+
158
+ /**
159
+ * Optional. Logging levels that may influence what is logged.
160
+ *
161
+ * 'error' Only requests resulting in an exception should be logged.
162
+ * 'warn' Also log requests that succeed but with an abnormal condition.
163
+ * 'info' Also log normal successful requests.
164
+ * 'debug' Add input parm and result details where possible.
165
+ * 'trace' Instead of adding debug details, focus on execution path and timing.
166
+ */
167
+ export type WalletLoggerLevel = 'error' | 'warn' | 'info' | 'debug' | 'trace'
@@ -7,11 +7,9 @@ import {
7
7
  WalletProtocol,
8
8
  Base64String,
9
9
  PubKeyHex,
10
- SecurityLevels,
11
- CreateActionInput,
12
- Beef
10
+ Beef,
11
+ Validation
13
12
  } from '@bsv/sdk'
14
- import { validateCreateActionArgs } from './sdk'
15
13
 
16
14
  ////// TODO: ADD SUPPORT FOR ADMIN COUNTERPARTIES BASED ON WALLET STORAGE
17
15
  ////// PROHIBITION OF SPECIAL OPERATIONS IS ALSO CRITICAL.
@@ -2648,7 +2646,7 @@ export class WalletPermissionsManager implements WalletInterface {
2648
2646
  * - If the user originally wanted signAndProcess (the default when undefined), we forcibly set it to false earlier, so check if we should now finalize it.
2649
2647
  * - If the transaction still needs more signatures, we must return the signableTransaction.
2650
2648
  */
2651
- const vargs = validateCreateActionArgs(args)
2649
+ const vargs = Validation.validateCreateActionArgs(args)
2652
2650
  if (vargs.isSignAction) {
2653
2651
  return createResult
2654
2652
  }
@@ -1,3 +1,6 @@
1
+
2
+ const { Validation } = jest.requireActual('@bsv/sdk');
3
+
1
4
  /**
2
5
  * A permissions manager testing mock/stub file for:
3
6
  * 1) The `@bsv/sdk` library: Transaction, LockingScript, PushDrop, Utils, Random, etc.
@@ -166,6 +169,15 @@ export const MockUtils = {
166
169
  return btoa(binaryStr)
167
170
  }
168
171
  }
172
+ /*
173
+ export const MockValidation = {
174
+ validateCreateActionArgs: (args: object) => {
175
+ return {
176
+ isSignAction: false
177
+ }
178
+ }
179
+ }
180
+ */
169
181
 
170
182
  /**
171
183
  * Mocks for Random
@@ -183,7 +195,8 @@ export const MockedBSV_SDK = {
183
195
  PushDrop: MockPushDrop,
184
196
  Utils: MockUtils,
185
197
  Random: MockRandom,
186
- Certificate: null
198
+ Certificate: null,
199
+ Validation: Validation
187
200
  }
188
201
 
189
202
  /* ---------------------------------------------------------------------------