@bopen-io/wallet-toolbox 1.7.18

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 (390) hide show
  1. package/.claude/settings.local.json +10 -0
  2. package/.env.template +22 -0
  3. package/.github/ISSUE_TEMPLATE/bug_report.md +40 -0
  4. package/.github/ISSUE_TEMPLATE/discussion.md +24 -0
  5. package/.github/pull_request_template.md +22 -0
  6. package/.github/workflows/push.yaml +145 -0
  7. package/.prettierrc +10 -0
  8. package/CHANGELOG.md +280 -0
  9. package/CONTRIBUTING.md +89 -0
  10. package/README.md +43 -0
  11. package/docs/README.md +85 -0
  12. package/docs/client.md +19627 -0
  13. package/docs/monitor.md +953 -0
  14. package/docs/open-rpc/index.html +46 -0
  15. package/docs/services.md +6377 -0
  16. package/docs/setup.md +1268 -0
  17. package/docs/storage.md +5367 -0
  18. package/docs/wallet.md +19626 -0
  19. package/jest.config.ts +25 -0
  20. package/license.md +28 -0
  21. package/out/tsconfig.all.tsbuildinfo +1 -0
  22. package/package.json +63 -0
  23. package/src/CWIStyleWalletManager.ts +1999 -0
  24. package/src/Setup.ts +579 -0
  25. package/src/SetupClient.ts +322 -0
  26. package/src/SetupWallet.ts +108 -0
  27. package/src/SimpleWalletManager.ts +526 -0
  28. package/src/Wallet.ts +1169 -0
  29. package/src/WalletAuthenticationManager.ts +153 -0
  30. package/src/WalletLogger.ts +213 -0
  31. package/src/WalletPermissionsManager.ts +3660 -0
  32. package/src/WalletSettingsManager.ts +114 -0
  33. package/src/__tests/CWIStyleWalletManager.test.d.ts.map +1 -0
  34. package/src/__tests/CWIStyleWalletManager.test.js.map +1 -0
  35. package/src/__tests/CWIStyleWalletManager.test.ts +675 -0
  36. package/src/__tests/WalletPermissionsManager.callbacks.test.ts +323 -0
  37. package/src/__tests/WalletPermissionsManager.checks.test.ts +844 -0
  38. package/src/__tests/WalletPermissionsManager.encryption.test.ts +412 -0
  39. package/src/__tests/WalletPermissionsManager.fixtures.ts +307 -0
  40. package/src/__tests/WalletPermissionsManager.flows.test.ts +462 -0
  41. package/src/__tests/WalletPermissionsManager.initialization.test.ts +300 -0
  42. package/src/__tests/WalletPermissionsManager.pmodules.test.ts +798 -0
  43. package/src/__tests/WalletPermissionsManager.proxying.test.ts +724 -0
  44. package/src/__tests/WalletPermissionsManager.tokens.test.ts +503 -0
  45. package/src/index.all.ts +27 -0
  46. package/src/index.client.ts +25 -0
  47. package/src/index.mobile.ts +21 -0
  48. package/src/index.ts +1 -0
  49. package/src/monitor/Monitor.ts +412 -0
  50. package/src/monitor/MonitorDaemon.ts +188 -0
  51. package/src/monitor/README.md +3 -0
  52. package/src/monitor/__test/MonitorDaemon.man.test.ts +45 -0
  53. package/src/monitor/tasks/TaskCheckForProofs.ts +243 -0
  54. package/src/monitor/tasks/TaskCheckNoSends.ts +73 -0
  55. package/src/monitor/tasks/TaskClock.ts +33 -0
  56. package/src/monitor/tasks/TaskFailAbandoned.ts +54 -0
  57. package/src/monitor/tasks/TaskMonitorCallHistory.ts +26 -0
  58. package/src/monitor/tasks/TaskNewHeader.ts +93 -0
  59. package/src/monitor/tasks/TaskPurge.ts +68 -0
  60. package/src/monitor/tasks/TaskReorg.ts +89 -0
  61. package/src/monitor/tasks/TaskReviewStatus.ts +48 -0
  62. package/src/monitor/tasks/TaskSendWaiting.ts +122 -0
  63. package/src/monitor/tasks/TaskSyncWhenIdle.ts +26 -0
  64. package/src/monitor/tasks/TaskUnFail.ts +151 -0
  65. package/src/monitor/tasks/WalletMonitorTask.ts +47 -0
  66. package/src/sdk/CertOpsWallet.ts +18 -0
  67. package/src/sdk/PrivilegedKeyManager.ts +372 -0
  68. package/src/sdk/README.md +13 -0
  69. package/src/sdk/WERR_errors.ts +234 -0
  70. package/src/sdk/WalletError.ts +170 -0
  71. package/src/sdk/WalletErrorFromJson.ts +80 -0
  72. package/src/sdk/WalletServices.interfaces.ts +700 -0
  73. package/src/sdk/WalletSigner.interfaces.ts +11 -0
  74. package/src/sdk/WalletStorage.interfaces.ts +606 -0
  75. package/src/sdk/__test/CertificateLifeCycle.test.ts +131 -0
  76. package/src/sdk/__test/PrivilegedKeyManager.test.ts +738 -0
  77. package/src/sdk/__test/WalletError.test.ts +318 -0
  78. package/src/sdk/__test/validationHelpers.test.ts +21 -0
  79. package/src/sdk/index.ts +10 -0
  80. package/src/sdk/types.ts +226 -0
  81. package/src/services/README.md +11 -0
  82. package/src/services/ServiceCollection.ts +248 -0
  83. package/src/services/Services.ts +603 -0
  84. package/src/services/__tests/ARC.man.test.ts +123 -0
  85. package/src/services/__tests/ARC.timeout.man.test.ts +79 -0
  86. package/src/services/__tests/ArcGorillaPool.man.test.ts +108 -0
  87. package/src/services/__tests/arcServices.test.ts +8 -0
  88. package/src/services/__tests/bitrails.test.ts +56 -0
  89. package/src/services/__tests/getMerklePath.test.ts +15 -0
  90. package/src/services/__tests/getRawTx.test.ts +13 -0
  91. package/src/services/__tests/postBeef.test.ts +104 -0
  92. package/src/services/__tests/verifyBeef.test.ts +50 -0
  93. package/src/services/chaintracker/BHServiceClient.ts +212 -0
  94. package/src/services/chaintracker/ChaintracksChainTracker.ts +71 -0
  95. package/src/services/chaintracker/__tests/ChaintracksChainTracker.test.ts +33 -0
  96. package/src/services/chaintracker/__tests/ChaintracksServiceClient.test.ts +29 -0
  97. package/src/services/chaintracker/chaintracks/Api/BlockHeaderApi.ts +72 -0
  98. package/src/services/chaintracker/chaintracks/Api/BulkIngestorApi.ts +83 -0
  99. package/src/services/chaintracker/chaintracks/Api/BulkStorageApi.ts +92 -0
  100. package/src/services/chaintracker/chaintracks/Api/ChaintracksApi.ts +64 -0
  101. package/src/services/chaintracker/chaintracks/Api/ChaintracksClientApi.ts +189 -0
  102. package/src/services/chaintracker/chaintracks/Api/ChaintracksFetchApi.ts +18 -0
  103. package/src/services/chaintracker/chaintracks/Api/ChaintracksFsApi.ts +58 -0
  104. package/src/services/chaintracker/chaintracks/Api/ChaintracksStorageApi.ts +386 -0
  105. package/src/services/chaintracker/chaintracks/Api/LiveIngestorApi.ts +25 -0
  106. package/src/services/chaintracker/chaintracks/Chaintracks.ts +609 -0
  107. package/src/services/chaintracker/chaintracks/ChaintracksService.ts +199 -0
  108. package/src/services/chaintracker/chaintracks/ChaintracksServiceClient.ts +154 -0
  109. package/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.ts +176 -0
  110. package/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDN.ts +174 -0
  111. package/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDNBabbage.ts +18 -0
  112. package/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.ts +113 -0
  113. package/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainWs.ts +81 -0
  114. package/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.ts +86 -0
  115. package/src/services/chaintracker/chaintracks/Ingest/LiveIngestorTeranodeP2P.ts +59 -0
  116. package/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainPoll.ts +104 -0
  117. package/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainWs.ts +66 -0
  118. package/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.ts +566 -0
  119. package/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainServices.ts +219 -0
  120. package/src/services/chaintracker/chaintracks/Ingest/__tests/BulkIngestorCDNBabbage.test.ts +54 -0
  121. package/src/services/chaintracker/chaintracks/Ingest/__tests/LiveIngestorWhatsOnChainPoll.test.ts +33 -0
  122. package/src/services/chaintracker/chaintracks/Ingest/__tests/WhatsOnChainServices.test.ts +124 -0
  123. package/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.ts +92 -0
  124. package/src/services/chaintracker/chaintracks/Storage/ChaintracksKnexMigrations.ts +104 -0
  125. package/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.ts +382 -0
  126. package/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.ts +574 -0
  127. package/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageKnex.ts +438 -0
  128. package/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageMemory.ts +29 -0
  129. package/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.ts +304 -0
  130. package/src/services/chaintracker/chaintracks/Storage/__tests/ChaintracksStorageIdb.test.ts +102 -0
  131. package/src/services/chaintracker/chaintracks/Storage/__tests/ChaintracksStorageKnex.test.ts +45 -0
  132. package/src/services/chaintracker/chaintracks/__tests/Chaintracks.test.ts +77 -0
  133. package/src/services/chaintracker/chaintracks/__tests/ChaintracksClientApi.test.ts +192 -0
  134. package/src/services/chaintracker/chaintracks/__tests/LocalCdnServer.ts +75 -0
  135. package/src/services/chaintracker/chaintracks/__tests/createIdbChaintracks.test.ts +62 -0
  136. package/src/services/chaintracker/chaintracks/__tests/data/cdnTest349/mainNetBlockHeaders.json +1 -0
  137. package/src/services/chaintracker/chaintracks/__tests/data/cdnTest349/mainNet_0.headers +0 -0
  138. package/src/services/chaintracker/chaintracks/__tests/data/cdnTest349/mainNet_1.headers +0 -0
  139. package/src/services/chaintracker/chaintracks/__tests/data/cdnTest349/mainNet_2.headers +0 -0
  140. package/src/services/chaintracker/chaintracks/__tests/data/cdnTest349/mainNet_3.headers +0 -0
  141. package/src/services/chaintracker/chaintracks/__tests/data/cdnTest379/mainNetBlockHeaders.json +1 -0
  142. package/src/services/chaintracker/chaintracks/__tests/data/cdnTest379/mainNet_0.headers +0 -0
  143. package/src/services/chaintracker/chaintracks/__tests/data/cdnTest379/mainNet_1.headers +0 -0
  144. package/src/services/chaintracker/chaintracks/__tests/data/cdnTest379/mainNet_2.headers +0 -0
  145. package/src/services/chaintracker/chaintracks/__tests/data/cdnTest379/mainNet_3.headers +0 -0
  146. package/src/services/chaintracker/chaintracks/__tests/data/cdnTest399/mainNetBlockHeaders.json +1 -0
  147. package/src/services/chaintracker/chaintracks/__tests/data/cdnTest399/mainNet_0.headers +0 -0
  148. package/src/services/chaintracker/chaintracks/__tests/data/cdnTest399/mainNet_1.headers +0 -0
  149. package/src/services/chaintracker/chaintracks/__tests/data/cdnTest399/mainNet_2.headers +0 -0
  150. package/src/services/chaintracker/chaintracks/__tests/data/cdnTest399/mainNet_3.headers +0 -0
  151. package/src/services/chaintracker/chaintracks/__tests/data/cdnTest402/mainNetBlockHeaders.json +1 -0
  152. package/src/services/chaintracker/chaintracks/__tests/data/cdnTest402/mainNet_0.headers +0 -0
  153. package/src/services/chaintracker/chaintracks/__tests/data/cdnTest402/mainNet_1.headers +0 -0
  154. package/src/services/chaintracker/chaintracks/__tests/data/cdnTest402/mainNet_2.headers +0 -0
  155. package/src/services/chaintracker/chaintracks/__tests/data/cdnTest402/mainNet_3.headers +0 -0
  156. package/src/services/chaintracker/chaintracks/__tests/data/cdnTest402/mainNet_4.headers +0 -0
  157. package/src/services/chaintracker/chaintracks/__tests/data/cdnTest499/mainNetBlockHeaders.json +1 -0
  158. package/src/services/chaintracker/chaintracks/__tests/data/cdnTest499/mainNet_0.headers +0 -0
  159. package/src/services/chaintracker/chaintracks/__tests/data/cdnTest499/mainNet_1.headers +0 -0
  160. package/src/services/chaintracker/chaintracks/__tests/data/cdnTest499/mainNet_2.headers +0 -0
  161. package/src/services/chaintracker/chaintracks/__tests/data/cdnTest499/mainNet_3.headers +0 -0
  162. package/src/services/chaintracker/chaintracks/__tests/data/cdnTest499/mainNet_4.headers +0 -0
  163. package/src/services/chaintracker/chaintracks/createDefaultIdbChaintracksOptions.ts +92 -0
  164. package/src/services/chaintracker/chaintracks/createDefaultKnexChaintracksOptions.ts +111 -0
  165. package/src/services/chaintracker/chaintracks/createDefaultNoDbChaintracksOptions.ts +91 -0
  166. package/src/services/chaintracker/chaintracks/createIdbChaintracks.ts +60 -0
  167. package/src/services/chaintracker/chaintracks/createKnexChaintracks.ts +65 -0
  168. package/src/services/chaintracker/chaintracks/createNoDbChaintracks.ts +60 -0
  169. package/src/services/chaintracker/chaintracks/index.all.ts +12 -0
  170. package/src/services/chaintracker/chaintracks/index.client.ts +4 -0
  171. package/src/services/chaintracker/chaintracks/index.mobile.ts +37 -0
  172. package/src/services/chaintracker/chaintracks/util/BulkFileDataManager.ts +975 -0
  173. package/src/services/chaintracker/chaintracks/util/BulkFileDataReader.ts +60 -0
  174. package/src/services/chaintracker/chaintracks/util/BulkFilesReader.ts +336 -0
  175. package/src/services/chaintracker/chaintracks/util/BulkHeaderFile.ts +247 -0
  176. package/src/services/chaintracker/chaintracks/util/ChaintracksFetch.ts +69 -0
  177. package/src/services/chaintracker/chaintracks/util/ChaintracksFs.ts +141 -0
  178. package/src/services/chaintracker/chaintracks/util/HeightRange.ts +153 -0
  179. package/src/services/chaintracker/chaintracks/util/SingleWriterMultiReaderLock.ts +76 -0
  180. package/src/services/chaintracker/chaintracks/util/__tests/BulkFileDataManager.test.ts +304 -0
  181. package/src/services/chaintracker/chaintracks/util/__tests/ChaintracksFetch.test.ts +60 -0
  182. package/src/services/chaintracker/chaintracks/util/__tests/HeightRange.test.ts +67 -0
  183. package/src/services/chaintracker/chaintracks/util/__tests/SingleWriterMultiReaderLock.test.ts +49 -0
  184. package/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.ts +573 -0
  185. package/src/services/chaintracker/chaintracks/util/dirtyHashes.ts +29 -0
  186. package/src/services/chaintracker/chaintracks/util/validBulkHeaderFilesByFileHash.ts +432 -0
  187. package/src/services/chaintracker/index.all.ts +4 -0
  188. package/src/services/chaintracker/index.client.ts +4 -0
  189. package/src/services/chaintracker/index.mobile.ts +4 -0
  190. package/src/services/createDefaultWalletServicesOptions.ts +77 -0
  191. package/src/services/index.ts +1 -0
  192. package/src/services/processingErrors/arcSuccessError.json +76 -0
  193. package/src/services/providers/ARC.ts +350 -0
  194. package/src/services/providers/Bitails.ts +256 -0
  195. package/src/services/providers/SdkWhatsOnChain.ts +83 -0
  196. package/src/services/providers/WhatsOnChain.ts +883 -0
  197. package/src/services/providers/__tests/WhatsOnChain.test.ts +242 -0
  198. package/src/services/providers/__tests/exchangeRates.test.ts +18 -0
  199. package/src/services/providers/exchangeRates.ts +265 -0
  200. package/src/services/providers/getBeefForTxid.ts +369 -0
  201. package/src/signer/README.md +5 -0
  202. package/src/signer/WalletSigner.ts +17 -0
  203. package/src/signer/methods/acquireDirectCertificate.ts +52 -0
  204. package/src/signer/methods/buildSignableTransaction.ts +183 -0
  205. package/src/signer/methods/completeSignedTransaction.ts +117 -0
  206. package/src/signer/methods/createAction.ts +172 -0
  207. package/src/signer/methods/internalizeAction.ts +106 -0
  208. package/src/signer/methods/proveCertificate.ts +43 -0
  209. package/src/signer/methods/signAction.ts +54 -0
  210. package/src/storage/README.md +14 -0
  211. package/src/storage/StorageIdb.ts +2304 -0
  212. package/src/storage/StorageKnex.ts +1425 -0
  213. package/src/storage/StorageProvider.ts +810 -0
  214. package/src/storage/StorageReader.ts +194 -0
  215. package/src/storage/StorageReaderWriter.ts +432 -0
  216. package/src/storage/StorageSyncReader.ts +34 -0
  217. package/src/storage/WalletStorageManager.ts +943 -0
  218. package/src/storage/__test/StorageIdb.test.ts +43 -0
  219. package/src/storage/__test/WalletStorageManager.test.ts +275 -0
  220. package/src/storage/__test/adminStats.man.test.ts +89 -0
  221. package/src/storage/__test/getBeefForTransaction.test.ts +385 -0
  222. package/src/storage/index.all.ts +11 -0
  223. package/src/storage/index.client.ts +7 -0
  224. package/src/storage/index.mobile.ts +6 -0
  225. package/src/storage/methods/ListActionsSpecOp.ts +70 -0
  226. package/src/storage/methods/ListOutputsSpecOp.ts +129 -0
  227. package/src/storage/methods/__test/GenerateChange/generateChangeSdk.test.ts +1057 -0
  228. package/src/storage/methods/__test/GenerateChange/randomValsUsed1.ts +20 -0
  229. package/src/storage/methods/__test/offsetKey.test.ts +274 -0
  230. package/src/storage/methods/attemptToPostReqsToNetwork.ts +389 -0
  231. package/src/storage/methods/createAction.ts +947 -0
  232. package/src/storage/methods/generateChange.ts +556 -0
  233. package/src/storage/methods/getBeefForTransaction.ts +139 -0
  234. package/src/storage/methods/getSyncChunk.ts +293 -0
  235. package/src/storage/methods/internalizeAction.ts +562 -0
  236. package/src/storage/methods/listActionsIdb.ts +183 -0
  237. package/src/storage/methods/listActionsKnex.ts +226 -0
  238. package/src/storage/methods/listCertificates.ts +73 -0
  239. package/src/storage/methods/listOutputsIdb.ts +203 -0
  240. package/src/storage/methods/listOutputsKnex.ts +263 -0
  241. package/src/storage/methods/offsetKey.ts +89 -0
  242. package/src/storage/methods/processAction.ts +420 -0
  243. package/src/storage/methods/purgeData.ts +251 -0
  244. package/src/storage/methods/purgeDataIdb.ts +10 -0
  245. package/src/storage/methods/reviewStatus.ts +101 -0
  246. package/src/storage/methods/reviewStatusIdb.ts +43 -0
  247. package/src/storage/methods/utils.Buffer.ts +33 -0
  248. package/src/storage/methods/utils.ts +56 -0
  249. package/src/storage/remoting/StorageClient.ts +567 -0
  250. package/src/storage/remoting/StorageMobile.ts +544 -0
  251. package/src/storage/remoting/StorageServer.ts +291 -0
  252. package/src/storage/remoting/__test/StorageClient.test.ts +113 -0
  253. package/src/storage/schema/KnexMigrations.ts +489 -0
  254. package/src/storage/schema/StorageIdbSchema.ts +150 -0
  255. package/src/storage/schema/entities/EntityBase.ts +210 -0
  256. package/src/storage/schema/entities/EntityCertificate.ts +188 -0
  257. package/src/storage/schema/entities/EntityCertificateField.ts +136 -0
  258. package/src/storage/schema/entities/EntityCommission.ts +148 -0
  259. package/src/storage/schema/entities/EntityOutput.ts +290 -0
  260. package/src/storage/schema/entities/EntityOutputBasket.ts +153 -0
  261. package/src/storage/schema/entities/EntityOutputTag.ts +121 -0
  262. package/src/storage/schema/entities/EntityOutputTagMap.ts +123 -0
  263. package/src/storage/schema/entities/EntityProvenTx.ts +319 -0
  264. package/src/storage/schema/entities/EntityProvenTxReq.ts +580 -0
  265. package/src/storage/schema/entities/EntitySyncState.ts +389 -0
  266. package/src/storage/schema/entities/EntityTransaction.ts +306 -0
  267. package/src/storage/schema/entities/EntityTxLabel.ts +121 -0
  268. package/src/storage/schema/entities/EntityTxLabelMap.ts +123 -0
  269. package/src/storage/schema/entities/EntityUser.ts +112 -0
  270. package/src/storage/schema/entities/MergeEntity.ts +73 -0
  271. package/src/storage/schema/entities/__tests/CertificateFieldTests.test.ts +353 -0
  272. package/src/storage/schema/entities/__tests/CertificateTests.test.ts +354 -0
  273. package/src/storage/schema/entities/__tests/CommissionTests.test.ts +371 -0
  274. package/src/storage/schema/entities/__tests/OutputBasketTests.test.ts +278 -0
  275. package/src/storage/schema/entities/__tests/OutputTagMapTests.test.ts +242 -0
  276. package/src/storage/schema/entities/__tests/OutputTagTests.test.ts +288 -0
  277. package/src/storage/schema/entities/__tests/OutputTests.test.ts +464 -0
  278. package/src/storage/schema/entities/__tests/ProvenTxReqTests.test.ts +340 -0
  279. package/src/storage/schema/entities/__tests/ProvenTxTests.test.ts +504 -0
  280. package/src/storage/schema/entities/__tests/SyncStateTests.test.ts +288 -0
  281. package/src/storage/schema/entities/__tests/TransactionTests.test.ts +604 -0
  282. package/src/storage/schema/entities/__tests/TxLabelMapTests.test.ts +361 -0
  283. package/src/storage/schema/entities/__tests/TxLabelTests.test.ts +198 -0
  284. package/src/storage/schema/entities/__tests/stampLogTests.test.ts +90 -0
  285. package/src/storage/schema/entities/__tests/usersTests.test.ts +340 -0
  286. package/src/storage/schema/entities/index.ts +16 -0
  287. package/src/storage/schema/tables/TableCertificate.ts +21 -0
  288. package/src/storage/schema/tables/TableCertificateField.ts +12 -0
  289. package/src/storage/schema/tables/TableCommission.ts +13 -0
  290. package/src/storage/schema/tables/TableMonitorEvent.ts +9 -0
  291. package/src/storage/schema/tables/TableOutput.ts +64 -0
  292. package/src/storage/schema/tables/TableOutputBasket.ts +12 -0
  293. package/src/storage/schema/tables/TableOutputTag.ts +10 -0
  294. package/src/storage/schema/tables/TableOutputTagMap.ts +9 -0
  295. package/src/storage/schema/tables/TableProvenTx.ts +14 -0
  296. package/src/storage/schema/tables/TableProvenTxReq.ts +65 -0
  297. package/src/storage/schema/tables/TableSettings.ts +17 -0
  298. package/src/storage/schema/tables/TableSyncState.ts +18 -0
  299. package/src/storage/schema/tables/TableTransaction.ts +54 -0
  300. package/src/storage/schema/tables/TableTxLabel.ts +10 -0
  301. package/src/storage/schema/tables/TableTxLabelMap.ts +9 -0
  302. package/src/storage/schema/tables/TableUser.ts +16 -0
  303. package/src/storage/schema/tables/index.ts +16 -0
  304. package/src/storage/sync/StorageMySQLDojoReader.ts +696 -0
  305. package/src/storage/sync/index.ts +1 -0
  306. package/src/utility/Format.ts +133 -0
  307. package/src/utility/README.md +3 -0
  308. package/src/utility/ReaderUint8Array.ts +187 -0
  309. package/src/utility/ScriptTemplateBRC29.ts +73 -0
  310. package/src/utility/__tests/utilityHelpers.noBuffer.test.ts +109 -0
  311. package/src/utility/aggregateResults.ts +68 -0
  312. package/src/utility/identityUtils.ts +159 -0
  313. package/src/utility/index.all.ts +7 -0
  314. package/src/utility/index.client.ts +7 -0
  315. package/src/utility/parseTxScriptOffsets.ts +29 -0
  316. package/src/utility/stampLog.ts +69 -0
  317. package/src/utility/tscProofToMerklePath.ts +48 -0
  318. package/src/utility/utilityHelpers.buffer.ts +34 -0
  319. package/src/utility/utilityHelpers.noBuffer.ts +60 -0
  320. package/src/utility/utilityHelpers.ts +275 -0
  321. package/src/wab-client/WABClient.ts +94 -0
  322. package/src/wab-client/__tests/WABClient.man.test.ts +59 -0
  323. package/src/wab-client/auth-method-interactors/AuthMethodInteractor.ts +47 -0
  324. package/src/wab-client/auth-method-interactors/DevConsoleInteractor.ts +73 -0
  325. package/src/wab-client/auth-method-interactors/PersonaIDInteractor.ts +35 -0
  326. package/src/wab-client/auth-method-interactors/TwilioPhoneInteractor.ts +72 -0
  327. package/syncVersions.js +71 -0
  328. package/test/Wallet/StorageClient/storageClient.man.test.ts +75 -0
  329. package/test/Wallet/action/abortAction.test.ts +47 -0
  330. package/test/Wallet/action/createAction.test.ts +299 -0
  331. package/test/Wallet/action/createAction2.test.ts +1273 -0
  332. package/test/Wallet/action/createActionToGenerateBeefs.man.test.ts +293 -0
  333. package/test/Wallet/action/internalizeAction.a.test.ts +286 -0
  334. package/test/Wallet/action/internalizeAction.test.ts +682 -0
  335. package/test/Wallet/action/relinquishOutput.test.ts +37 -0
  336. package/test/Wallet/certificate/acquireCertificate.test.ts +298 -0
  337. package/test/Wallet/certificate/listCertificates.test.ts +346 -0
  338. package/test/Wallet/construct/Wallet.constructor.test.ts +57 -0
  339. package/test/Wallet/get/getHeaderForHeight.test.ts +82 -0
  340. package/test/Wallet/get/getHeight.test.ts +52 -0
  341. package/test/Wallet/get/getKnownTxids.test.ts +86 -0
  342. package/test/Wallet/get/getNetwork.test.ts +27 -0
  343. package/test/Wallet/get/getVersion.test.ts +27 -0
  344. package/test/Wallet/list/listActions.test.ts +279 -0
  345. package/test/Wallet/list/listActions2.test.ts +1381 -0
  346. package/test/Wallet/list/listCertificates.test.ts +118 -0
  347. package/test/Wallet/list/listOutputs.test.ts +447 -0
  348. package/test/Wallet/live/walletLive.man.test.ts +521 -0
  349. package/test/Wallet/local/localWallet.man.test.ts +93 -0
  350. package/test/Wallet/local/localWallet2.man.test.ts +277 -0
  351. package/test/Wallet/signAction/mountaintop.man.test.ts +130 -0
  352. package/test/Wallet/specOps/specOps.man.test.ts +220 -0
  353. package/test/Wallet/support/janitor.man.test.ts +40 -0
  354. package/test/Wallet/support/operations.man.test.ts +407 -0
  355. package/test/Wallet/support/reqErrorReview.2025.05.06.man.test.ts +347 -0
  356. package/test/Wallet/sync/Wallet.sync.test.ts +215 -0
  357. package/test/Wallet/sync/Wallet.updateWalletLegacyTestData.man.test.ts +203 -0
  358. package/test/Wallet/sync/setActive.test.ts +170 -0
  359. package/test/WalletClient/LocalKVStore.man.test.ts +114 -0
  360. package/test/WalletClient/WERR.man.test.ts +35 -0
  361. package/test/bsv-ts-sdk/LocalKVStore.test.ts +102 -0
  362. package/test/checkDB.ts +57 -0
  363. package/test/checkdb +0 -0
  364. package/test/examples/backup.man.test.ts +59 -0
  365. package/test/examples/pushdrop.test.ts +282 -0
  366. package/test/monitor/Monitor.test.ts +620 -0
  367. package/test/services/Services.test.ts +263 -0
  368. package/test/storage/KnexMigrations.test.ts +86 -0
  369. package/test/storage/StorageMySQLDojoReader.man.test.ts +60 -0
  370. package/test/storage/count.test.ts +177 -0
  371. package/test/storage/find.test.ts +195 -0
  372. package/test/storage/findLegacy.test.ts +67 -0
  373. package/test/storage/idb/allocateChange.test.ts +251 -0
  374. package/test/storage/idb/count.test.ts +158 -0
  375. package/test/storage/idb/find.test.ts +177 -0
  376. package/test/storage/idb/idbSpeed.test.ts +36 -0
  377. package/test/storage/idb/insert.test.ts +268 -0
  378. package/test/storage/idb/transactionAbort.test.ts +108 -0
  379. package/test/storage/idb/update.test.ts +999 -0
  380. package/test/storage/insert.test.ts +278 -0
  381. package/test/storage/update.test.ts +1021 -0
  382. package/test/storage/update2.test.ts +897 -0
  383. package/test/utils/TestUtilsWalletStorage.ts +2526 -0
  384. package/test/utils/localWalletMethods.ts +363 -0
  385. package/test/utils/removeFailedFromDatabase.sql +17 -0
  386. package/ts2md.json +44 -0
  387. package/tsconfig.all.json +31 -0
  388. package/tsconfig.client.json +29 -0
  389. package/tsconfig.json +17 -0
  390. package/tsconfig.mobile.json +28 -0
@@ -0,0 +1,385 @@
1
+ import { Beef, ListActionsResult, ListOutputsResult, Utils, Validation } from '@bsv/sdk'
2
+ import { StorageAdminStats, StorageProvider } from '../StorageProvider'
3
+ import { Chain } from '../../sdk/types'
4
+ import { Services } from '../../services/Services'
5
+ import {
6
+ TableCertificate,
7
+ TableCertificateField,
8
+ TableCertificateX,
9
+ TableCommission,
10
+ TableMonitorEvent,
11
+ TableOutput,
12
+ TableOutputBasket,
13
+ TableOutputTag,
14
+ TableOutputTagMap,
15
+ TableProvenTx,
16
+ TableProvenTxReq,
17
+ TableSettings,
18
+ TableSyncState,
19
+ TableTransaction,
20
+ TableTxLabel,
21
+ TableTxLabelMap,
22
+ TableUser
23
+ } from '../schema/tables'
24
+ import {
25
+ AuthId,
26
+ FindCertificateFieldsArgs,
27
+ FindCertificatesArgs,
28
+ FindCommissionsArgs,
29
+ FindForUserSincePagedArgs,
30
+ FindMonitorEventsArgs,
31
+ FindOutputBasketsArgs,
32
+ FindOutputsArgs,
33
+ FindOutputTagMapsArgs,
34
+ FindOutputTagsArgs,
35
+ FindProvenTxReqsArgs,
36
+ FindProvenTxsArgs,
37
+ FindSyncStatesArgs,
38
+ FindTransactionsArgs,
39
+ FindTxLabelMapsArgs,
40
+ FindTxLabelsArgs,
41
+ FindUsersArgs,
42
+ ProvenOrRawTx,
43
+ PurgeParams,
44
+ PurgeResults,
45
+ StorageGetBeefOptions,
46
+ TrxToken
47
+ } from '../../sdk/WalletStorage.interfaces'
48
+
49
+ describe('getBeefForTransaction tests', () => {
50
+ jest.setTimeout(99999999)
51
+
52
+ test('0 ProtoStorage.getBeefForTxid', async () => {
53
+ const ps = new ProtoStorage('main')
54
+ const beef = await ps.getBeefForTxid('794f836052ad73732a550c38bea3697a722c6a1e54bcbe63735ba79e0d23f623')
55
+ expect(beef.bumps.length > 0)
56
+ {
57
+ const beef = await ps.getBeefForTxid('53023657e79f446ca457040a0ab3b903000d7281a091397c7853f021726a560e')
58
+ expect(beef.bumps.length > 0)
59
+ }
60
+ })
61
+
62
+ test.skip('1 obtain atomic beef hex for txid', async () => {
63
+ const ps = new ProtoStorage('main')
64
+ const txid = '4cefbe79926d6ef2cc727d8faccac186d9bb141f170411dd75bc6329f428f5a4'
65
+ const beef = await ps.getBeefForTxid(txid)
66
+ expect(beef.bumps.length > 0)
67
+ console.log(beef.toLogString())
68
+ const hex = Utils.toHex(beef.toBinaryAtomic(txid))
69
+ console.log(hex)
70
+ })
71
+ })
72
+
73
+ class ProtoStorage extends StorageProvider {
74
+ gbo: StorageGetBeefOptions
75
+ whatsOnChainApiKey?: string
76
+
77
+ constructor(chain: Chain) {
78
+ const o = StorageProvider.createStorageBaseOptions(chain)
79
+ super(o)
80
+ const so = Services.createDefaultOptions(chain)
81
+ // so.whatsOnChainApiKey = 'my_api_key'
82
+ const s = new Services(so)
83
+ this.setServices(s)
84
+ this.gbo = {
85
+ ignoreNewProven: true,
86
+ ignoreServices: false,
87
+ ignoreStorage: true
88
+ }
89
+ this.maxRecursionDepth = 2
90
+ }
91
+
92
+ async getBeefForTxid(txid: string): Promise<Beef> {
93
+ const beef = this.getBeefForTransaction(txid, this.gbo)
94
+ return beef
95
+ }
96
+
97
+ nip = new Error('Method not implemented.')
98
+ override reviewStatus(args: { agedLimit: Date; trx?: TrxToken }): Promise<{ log: string }> {
99
+ throw this.nip
100
+ }
101
+ override purgeData(params: PurgeParams, trx?: TrxToken): Promise<PurgeResults> {
102
+ throw this.nip
103
+ }
104
+ override allocateChangeInput(
105
+ userId: number,
106
+ basketId: number,
107
+ targetSatoshis: number,
108
+ exactSatoshis: number | undefined,
109
+ excludeSending: boolean,
110
+ transactionId: number
111
+ ): Promise<TableOutput | undefined> {
112
+ throw this.nip
113
+ }
114
+ override getProvenOrRawTx(txid: string, trx?: TrxToken): Promise<ProvenOrRawTx> {
115
+ throw this.nip
116
+ }
117
+ override getRawTxOfKnownValidTransaction(
118
+ txid?: string,
119
+ offset?: number,
120
+ length?: number,
121
+ trx?: TrxToken
122
+ ): Promise<number[] | undefined> {
123
+ throw this.nip
124
+ }
125
+ override getLabelsForTransactionId(transactionId?: number, trx?: TrxToken): Promise<TableTxLabel[]> {
126
+ throw this.nip
127
+ }
128
+ override getTagsForOutputId(outputId: number, trx?: TrxToken): Promise<TableOutputTag[]> {
129
+ throw this.nip
130
+ }
131
+ override listActions(auth: AuthId, args: Validation.ValidListActionsArgs): Promise<ListActionsResult> {
132
+ throw this.nip
133
+ }
134
+ override listOutputs(auth: AuthId, args: Validation.ValidListOutputsArgs): Promise<ListOutputsResult> {
135
+ throw this.nip
136
+ }
137
+ override countChangeInputs(userId: number, basketId: number, excludeSending: boolean): Promise<number> {
138
+ throw this.nip
139
+ }
140
+ override findCertificatesAuth(auth: AuthId, args: FindCertificatesArgs): Promise<TableCertificateX[]> {
141
+ throw this.nip
142
+ }
143
+ override findOutputBasketsAuth(auth: AuthId, args: FindOutputBasketsArgs): Promise<TableOutputBasket[]> {
144
+ throw this.nip
145
+ }
146
+ override findOutputsAuth(auth: AuthId, args: FindOutputsArgs): Promise<TableOutput[]> {
147
+ throw this.nip
148
+ }
149
+ override insertCertificateAuth(auth: AuthId, certificate: TableCertificateX): Promise<number> {
150
+ throw this.nip
151
+ }
152
+ override dropAllData(): Promise<void> {
153
+ throw this.nip
154
+ }
155
+ override migrate(storageName: string, storageIdentityKey: string): Promise<string> {
156
+ throw this.nip
157
+ }
158
+ override findOutputTagMaps(args: FindOutputTagMapsArgs): Promise<TableOutputTagMap[]> {
159
+ throw this.nip
160
+ }
161
+ override findProvenTxReqs(args: FindProvenTxReqsArgs): Promise<TableProvenTxReq[]> {
162
+ throw this.nip
163
+ }
164
+ override findProvenTxs(args: FindProvenTxsArgs): Promise<TableProvenTx[]> {
165
+ throw this.nip
166
+ }
167
+ override findTxLabelMaps(args: FindTxLabelMapsArgs): Promise<TableTxLabelMap[]> {
168
+ throw this.nip
169
+ }
170
+ override countOutputTagMaps(args: FindOutputTagMapsArgs): Promise<number> {
171
+ throw this.nip
172
+ }
173
+ override countProvenTxReqs(args: FindProvenTxReqsArgs): Promise<number> {
174
+ throw this.nip
175
+ }
176
+ override countProvenTxs(args: FindProvenTxsArgs): Promise<number> {
177
+ throw this.nip
178
+ }
179
+ override countTxLabelMaps(args: FindTxLabelMapsArgs): Promise<number> {
180
+ throw this.nip
181
+ }
182
+ override insertCertificate(certificate: TableCertificate, trx?: TrxToken): Promise<number> {
183
+ throw this.nip
184
+ }
185
+ override insertCertificateField(certificateField: TableCertificateField, trx?: TrxToken): Promise<void> {
186
+ throw this.nip
187
+ }
188
+ override insertCommission(commission: TableCommission, trx?: TrxToken): Promise<number> {
189
+ throw this.nip
190
+ }
191
+ override insertMonitorEvent(event: TableMonitorEvent, trx?: TrxToken): Promise<number> {
192
+ throw this.nip
193
+ }
194
+ override insertOutput(output: TableOutput, trx?: TrxToken): Promise<number> {
195
+ throw this.nip
196
+ }
197
+ override insertOutputBasket(basket: TableOutputBasket, trx?: TrxToken): Promise<number> {
198
+ throw this.nip
199
+ }
200
+ override insertOutputTag(tag: TableOutputTag, trx?: TrxToken): Promise<number> {
201
+ throw this.nip
202
+ }
203
+ override insertOutputTagMap(tagMap: TableOutputTagMap, trx?: TrxToken): Promise<void> {
204
+ throw this.nip
205
+ }
206
+ override insertProvenTx(tx: TableProvenTx, trx?: TrxToken): Promise<number> {
207
+ throw this.nip
208
+ }
209
+ override insertProvenTxReq(tx: TableProvenTxReq, trx?: TrxToken): Promise<number> {
210
+ throw this.nip
211
+ }
212
+ override insertSyncState(syncState: TableSyncState, trx?: TrxToken): Promise<number> {
213
+ throw this.nip
214
+ }
215
+ override insertTransaction(tx: TableTransaction, trx?: TrxToken): Promise<number> {
216
+ throw this.nip
217
+ }
218
+ override insertTxLabel(label: TableTxLabel, trx?: TrxToken): Promise<number> {
219
+ throw this.nip
220
+ }
221
+ override insertTxLabelMap(labelMap: TableTxLabelMap, trx?: TrxToken): Promise<void> {
222
+ throw this.nip
223
+ }
224
+ override insertUser(user: TableUser, trx?: TrxToken): Promise<number> {
225
+ throw this.nip
226
+ }
227
+ override updateCertificate(id: number, update: Partial<TableCertificate>, trx?: TrxToken): Promise<number> {
228
+ throw this.nip
229
+ }
230
+ override updateCertificateField(
231
+ certificateId: number,
232
+ fieldName: string,
233
+ update: Partial<TableCertificateField>,
234
+ trx?: TrxToken
235
+ ): Promise<number> {
236
+ throw this.nip
237
+ }
238
+ override updateCommission(id: number, update: Partial<TableCommission>, trx?: TrxToken): Promise<number> {
239
+ throw this.nip
240
+ }
241
+ override updateMonitorEvent(id: number, update: Partial<TableMonitorEvent>, trx?: TrxToken): Promise<number> {
242
+ throw this.nip
243
+ }
244
+ override updateOutput(id: number, update: Partial<TableOutput>, trx?: TrxToken): Promise<number> {
245
+ throw this.nip
246
+ }
247
+ override updateOutputBasket(id: number, update: Partial<TableOutputBasket>, trx?: TrxToken): Promise<number> {
248
+ throw this.nip
249
+ }
250
+ override updateOutputTag(id: number, update: Partial<TableOutputTag>, trx?: TrxToken): Promise<number> {
251
+ throw this.nip
252
+ }
253
+ override updateOutputTagMap(
254
+ outputId: number,
255
+ tagId: number,
256
+ update: Partial<TableOutputTagMap>,
257
+ trx?: TrxToken
258
+ ): Promise<number> {
259
+ throw this.nip
260
+ }
261
+ override updateProvenTx(id: number, update: Partial<TableProvenTx>, trx?: TrxToken): Promise<number> {
262
+ throw this.nip
263
+ }
264
+ override updateProvenTxReq(
265
+ id: number | number[],
266
+ update: Partial<TableProvenTxReq>,
267
+ trx?: TrxToken
268
+ ): Promise<number> {
269
+ throw this.nip
270
+ }
271
+ override updateSyncState(id: number, update: Partial<TableSyncState>, trx?: TrxToken): Promise<number> {
272
+ throw this.nip
273
+ }
274
+ override updateTransaction(
275
+ id: number | number[],
276
+ update: Partial<TableTransaction>,
277
+ trx?: TrxToken
278
+ ): Promise<number> {
279
+ throw this.nip
280
+ }
281
+ override updateTxLabel(id: number, update: Partial<TableTxLabel>, trx?: TrxToken): Promise<number> {
282
+ throw this.nip
283
+ }
284
+ override updateTxLabelMap(
285
+ transactionId: number,
286
+ txLabelId: number,
287
+ update: Partial<TableTxLabelMap>,
288
+ trx?: TrxToken
289
+ ): Promise<number> {
290
+ throw this.nip
291
+ }
292
+ override updateUser(id: number, update: Partial<TableUser>, trx?: TrxToken): Promise<number> {
293
+ throw this.nip
294
+ }
295
+ override destroy(): Promise<void> {
296
+ throw this.nip
297
+ }
298
+ override transaction<T>(scope: (trx: TrxToken) => Promise<T>, trx?: TrxToken): Promise<T> {
299
+ throw this.nip
300
+ }
301
+ override readSettings(trx?: TrxToken): Promise<TableSettings> {
302
+ throw this.nip
303
+ }
304
+ override findCertificateFields(args: FindCertificateFieldsArgs): Promise<TableCertificateField[]> {
305
+ throw this.nip
306
+ }
307
+ override findCertificates(args: FindCertificatesArgs): Promise<TableCertificateX[]> {
308
+ throw this.nip
309
+ }
310
+ override findCommissions(args: FindCommissionsArgs): Promise<TableCommission[]> {
311
+ throw this.nip
312
+ }
313
+ override findMonitorEvents(args: FindMonitorEventsArgs): Promise<TableMonitorEvent[]> {
314
+ throw this.nip
315
+ }
316
+ override findOutputBaskets(args: FindOutputBasketsArgs): Promise<TableOutputBasket[]> {
317
+ throw this.nip
318
+ }
319
+ override findOutputs(args: FindOutputsArgs): Promise<TableOutput[]> {
320
+ throw this.nip
321
+ }
322
+ override findOutputTags(args: FindOutputTagsArgs): Promise<TableOutputTag[]> {
323
+ throw this.nip
324
+ }
325
+ override findSyncStates(args: FindSyncStatesArgs): Promise<TableSyncState[]> {
326
+ throw this.nip
327
+ }
328
+ override findTransactions(args: FindTransactionsArgs): Promise<TableTransaction[]> {
329
+ throw this.nip
330
+ }
331
+ override findTxLabels(args: FindTxLabelsArgs): Promise<TableTxLabel[]> {
332
+ throw this.nip
333
+ }
334
+ override findUsers(args: FindUsersArgs): Promise<TableUser[]> {
335
+ throw this.nip
336
+ }
337
+ override countCertificateFields(args: FindCertificateFieldsArgs): Promise<number> {
338
+ throw this.nip
339
+ }
340
+ override countCertificates(args: FindCertificatesArgs): Promise<number> {
341
+ throw this.nip
342
+ }
343
+ override countCommissions(args: FindCommissionsArgs): Promise<number> {
344
+ throw this.nip
345
+ }
346
+ override countMonitorEvents(args: FindMonitorEventsArgs): Promise<number> {
347
+ throw this.nip
348
+ }
349
+ override countOutputBaskets(args: FindOutputBasketsArgs): Promise<number> {
350
+ throw this.nip
351
+ }
352
+ override countOutputs(args: FindOutputsArgs): Promise<number> {
353
+ throw this.nip
354
+ }
355
+ override countOutputTags(args: FindOutputTagsArgs): Promise<number> {
356
+ throw this.nip
357
+ }
358
+ override countSyncStates(args: FindSyncStatesArgs): Promise<number> {
359
+ throw this.nip
360
+ }
361
+ override countTransactions(args: FindTransactionsArgs): Promise<number> {
362
+ throw this.nip
363
+ }
364
+ override countTxLabels(args: FindTxLabelsArgs): Promise<number> {
365
+ throw this.nip
366
+ }
367
+ override countUsers(args: FindUsersArgs): Promise<number> {
368
+ throw this.nip
369
+ }
370
+ override getProvenTxsForUser(args: FindForUserSincePagedArgs): Promise<TableProvenTx[]> {
371
+ throw this.nip
372
+ }
373
+ override getProvenTxReqsForUser(args: FindForUserSincePagedArgs): Promise<TableProvenTxReq[]> {
374
+ throw this.nip
375
+ }
376
+ override getTxLabelMapsForUser(args: FindForUserSincePagedArgs): Promise<TableTxLabelMap[]> {
377
+ throw this.nip
378
+ }
379
+ override getOutputTagMapsForUser(args: FindForUserSincePagedArgs): Promise<TableOutputTagMap[]> {
380
+ throw this.nip
381
+ }
382
+ override adminStats(adminIdentityKey: string): Promise<StorageAdminStats> {
383
+ throw this.nip
384
+ }
385
+ }
@@ -0,0 +1,11 @@
1
+ export * from './WalletStorageManager'
2
+ export * from './StorageProvider'
3
+ export * from './StorageSyncReader'
4
+ export * from './remoting/StorageClient'
5
+ export * from './remoting/StorageServer'
6
+ export * from './schema/KnexMigrations'
7
+ export * from './StorageKnex'
8
+ export * from './StorageIdb'
9
+ export * from './schema/tables/index'
10
+ export * from './schema/entities/index'
11
+ export * as sync from './sync'
@@ -0,0 +1,7 @@
1
+ export * from './WalletStorageManager'
2
+ export * from './StorageIdb'
3
+ export * from './StorageProvider'
4
+ export * from './StorageSyncReader'
5
+ export * from './schema/tables/index'
6
+ export * from './schema/entities/index'
7
+ export * from './remoting/StorageClient'
@@ -0,0 +1,6 @@
1
+ export * from './WalletStorageManager'
2
+ export * from './StorageProvider'
3
+ export * from './StorageSyncReader'
4
+ export * from './schema/tables/index'
5
+ export * from './schema/entities/index'
6
+ export * from './remoting/StorageMobile'
@@ -0,0 +1,70 @@
1
+ import { Validation } from '@bsv/sdk'
2
+ import { specOpFailedActions, specOpNoSendActions, TransactionStatus } from '../../sdk/types'
3
+ import { AuthId } from '../../sdk/WalletStorage.interfaces'
4
+ import { TableTransaction } from '../schema/tables/TableTransaction'
5
+ import { StorageProvider } from '../StorageProvider'
6
+
7
+ export interface ListActionsSpecOp {
8
+ name: string
9
+ /**
10
+ * undefined to intercept no labels from vargs,
11
+ * empty array to intercept all labels,
12
+ * or an explicit array of labels to intercept.
13
+ */
14
+ labelsToIntercept?: string[]
15
+ setStatusFilter?: () => TransactionStatus[]
16
+ postProcess?: (
17
+ s: StorageProvider,
18
+ auth: AuthId,
19
+ vargs: Validation.ValidListActionsArgs,
20
+ specOpLabels: string[],
21
+ txs: Partial<TableTransaction>[]
22
+ ) => Promise<void>
23
+ }
24
+
25
+ export const getLabelToSpecOp: () => Record<string, ListActionsSpecOp> = () => {
26
+ return {
27
+ [specOpNoSendActions]: {
28
+ name: 'noSendActions',
29
+ labelsToIntercept: ['abort'],
30
+ setStatusFilter: () => ['nosend'],
31
+ postProcess: async (
32
+ s: StorageProvider,
33
+ auth: AuthId,
34
+ vargs: Validation.ValidListActionsArgs,
35
+ specOpLabels: string[],
36
+ txs: Partial<TableTransaction>[]
37
+ ): Promise<void> => {
38
+ if (specOpLabels.indexOf('abort') >= 0) {
39
+ for (const tx of txs) {
40
+ if (tx.status === 'nosend') {
41
+ await s.abortAction(auth, { reference: tx.reference! })
42
+ tx.status = 'failed'
43
+ }
44
+ }
45
+ }
46
+ }
47
+ },
48
+ [specOpFailedActions]: {
49
+ name: 'failedActions',
50
+ labelsToIntercept: ['unfail'],
51
+ setStatusFilter: () => ['failed'],
52
+ postProcess: async (
53
+ s: StorageProvider,
54
+ auth: AuthId,
55
+ vargs: Validation.ValidListActionsArgs,
56
+ specOpLabels: string[],
57
+ txs: Partial<TableTransaction>[]
58
+ ): Promise<void> => {
59
+ if (specOpLabels.indexOf('unfail') >= 0) {
60
+ for (const tx of txs) {
61
+ if (tx.status === 'failed') {
62
+ await s.updateTransaction(tx.transactionId!, { status: 'unfail' })
63
+ // wallet wire does not support 'unfail' status, return as 'failed'.
64
+ }
65
+ }
66
+ }
67
+ }
68
+ }
69
+ }
70
+ }
@@ -0,0 +1,129 @@
1
+ import { ListOutputsResult, Validation } from '@bsv/sdk'
2
+ import { StorageProvider } from '../StorageProvider'
3
+ import { AuthId } from '../../sdk/WalletStorage.interfaces'
4
+ import { TableOutput } from '../schema/tables/TableOutput'
5
+ import { specOpInvalidChange, specOpSetWalletChangeParams, specOpWalletBalance } from '../../sdk/types'
6
+ import { verifyId, verifyInteger, verifyOne } from '../../utility/utilityHelpers'
7
+ import { WERR_INVALID_PARAMETER } from '../../sdk/WERR_errors'
8
+
9
+ export interface ListOutputsSpecOp {
10
+ name: string
11
+ useBasket?: string
12
+ ignoreLimit?: boolean
13
+ includeOutputScripts?: boolean
14
+ includeSpent?: boolean
15
+ resultFromTags?: (
16
+ s: StorageProvider,
17
+ auth: AuthId,
18
+ vargs: Validation.ValidListOutputsArgs,
19
+ specOpTags: string[]
20
+ ) => Promise<ListOutputsResult>
21
+ resultFromOutputs?: (
22
+ s: StorageProvider,
23
+ auth: AuthId,
24
+ vargs: Validation.ValidListOutputsArgs,
25
+ specOpTags: string[],
26
+ outputs: TableOutput[]
27
+ ) => Promise<ListOutputsResult>
28
+ filterOutputs?: (
29
+ s: StorageProvider,
30
+ auth: AuthId,
31
+ vargs: Validation.ValidListOutputsArgs,
32
+ specOpTags: string[],
33
+ outputs: TableOutput[]
34
+ ) => Promise<TableOutput[]>
35
+ /**
36
+ * undefined to intercept no tags from vargs,
37
+ * empty array to intercept all tags,
38
+ * or an explicit array of tags to intercept.
39
+ */
40
+ tagsToIntercept?: string[]
41
+ /**
42
+ * How many positional tags to intercept.
43
+ */
44
+ tagsParamsCount?: number
45
+ }
46
+
47
+ export const getBasketToSpecOp: () => Record<string, ListOutputsSpecOp> = () => {
48
+ return {
49
+ [specOpWalletBalance]: {
50
+ name: 'totalOutputsIsWalletBalance',
51
+ useBasket: 'default',
52
+ ignoreLimit: true,
53
+ resultFromOutputs: async (
54
+ s: StorageProvider,
55
+ auth: AuthId,
56
+ vargs: Validation.ValidListOutputsArgs,
57
+ specOpTags: string[],
58
+ outputs: TableOutput[]
59
+ ): Promise<ListOutputsResult> => {
60
+ let totalOutputs = 0
61
+ for (const o of outputs) totalOutputs += o.satoshis
62
+ return { totalOutputs, outputs: [] }
63
+ }
64
+ },
65
+ [specOpInvalidChange]: {
66
+ name: 'invalidChangeOutputs',
67
+ useBasket: 'default',
68
+ ignoreLimit: true,
69
+ includeOutputScripts: true,
70
+ includeSpent: false,
71
+ tagsToIntercept: ['release', 'all'],
72
+ filterOutputs: async (
73
+ s: StorageProvider,
74
+ auth: AuthId,
75
+ vargs: Validation.ValidListOutputsArgs,
76
+ specOpTags: string[],
77
+ outputs: TableOutput[]
78
+ ): Promise<TableOutput[]> => {
79
+ const filteredOutputs: TableOutput[] = []
80
+ const services = s.getServices()
81
+ for (const o of outputs) {
82
+ if (!o.basketId) continue // only care about outputs assigned to baskets.
83
+ await s.validateOutputScript(o)
84
+ let ok: boolean | undefined = false
85
+ if (o.lockingScript && o.lockingScript.length > 0) {
86
+ ok = await services.isUtxo(o)
87
+ } else {
88
+ ok = undefined
89
+ }
90
+ if (ok === false) {
91
+ filteredOutputs.push(o)
92
+ }
93
+ }
94
+ if (specOpTags.indexOf('release') >= 0) {
95
+ for (const o of filteredOutputs) {
96
+ await s.updateOutput(o.outputId, { spendable: false })
97
+ o.spendable = false
98
+ }
99
+ }
100
+ return filteredOutputs
101
+ }
102
+ },
103
+ [specOpSetWalletChangeParams]: {
104
+ name: 'setWalletChangeParams',
105
+ tagsParamsCount: 2,
106
+ resultFromTags: async (
107
+ s: StorageProvider,
108
+ auth: AuthId,
109
+ vargs: Validation.ValidListOutputsArgs,
110
+ specOpTags: string[]
111
+ ): Promise<ListOutputsResult> => {
112
+ if (specOpTags.length !== 2)
113
+ throw new WERR_INVALID_PARAMETER('numberOfDesiredUTXOs and minimumDesiredUTXOValue', 'valid')
114
+ const numberOfDesiredUTXOs: number = verifyInteger(Number(specOpTags[0]))
115
+ const minimumDesiredUTXOValue: number = verifyInteger(Number(specOpTags[1]))
116
+ const basket = verifyOne(
117
+ await s.findOutputBaskets({
118
+ partial: { userId: verifyId(auth.userId), name: 'default' }
119
+ })
120
+ )
121
+ await s.updateOutputBasket(basket.basketId, {
122
+ numberOfDesiredUTXOs,
123
+ minimumDesiredUTXOValue
124
+ })
125
+ return { totalOutputs: 0, outputs: [] }
126
+ }
127
+ }
128
+ }
129
+ }