@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,318 @@
1
+ import { WalletError } from '../WalletError'
2
+ import { WalletErrorFromJson } from '../WalletErrorFromJson'
3
+ import {
4
+ WERR_NOT_IMPLEMENTED,
5
+ WERR_INTERNAL,
6
+ WERR_INVALID_PARAMETER,
7
+ WERR_REVIEW_ACTIONS,
8
+ WERR_INSUFFICIENT_FUNDS,
9
+ WERR_BROADCAST_UNAVAILABLE,
10
+ WERR_NETWORK_CHAIN,
11
+ WERR_INVALID_OPERATION,
12
+ WERR_MISSING_PARAMETER,
13
+ WERR_BAD_REQUEST,
14
+ WERR_UNAUTHORIZED,
15
+ WERR_NOT_ACTIVE,
16
+ WERR_INVALID_PUBLIC_KEY
17
+ } from '../WERR_errors'
18
+
19
+ // Mock WalletStorage interface
20
+ const mockWalletStorage = {
21
+ createAction: jest.fn().mockImplementation((args: any) => {
22
+ throw new WERR_REVIEW_ACTIONS(
23
+ [{ txid: 'txid123', status: 'doubleSpend', competingTxs: ['txid456'], competingBeef: [0, 1, 2, 3] }],
24
+ [{ txid: 'txid123', status: 'failed' }],
25
+ 'txid123',
26
+ [5, 6, 7, 8],
27
+ ['00'.repeat(32) + '.0']
28
+ )
29
+ })
30
+ }
31
+
32
+ describe('WalletError tests', () => {
33
+ jest.setTimeout(99999999)
34
+
35
+ test('0 - WERR_REVIEW_ACTIONS from createAction failure', async () => {
36
+ try {
37
+ await mockWalletStorage.createAction({ someArgs: 'test' })
38
+ } catch (err) {
39
+ const werr = WalletError.fromUnknown(err)
40
+ expect(werr.name).toBe('WERR_REVIEW_ACTIONS')
41
+ expect(werr.message).toBe('Undelayed createAction or signAction results require review.')
42
+
43
+ const json = WalletError.unknownToJson(werr)
44
+ const werr2 = WalletErrorFromJson(JSON.parse(json))
45
+ expect(werr2 instanceof WERR_REVIEW_ACTIONS).toBe(true)
46
+ const werr3 = werr2 as WERR_REVIEW_ACTIONS
47
+ expect(werr3.txid).toBe('txid123')
48
+ expect(werr3.reviewActionResults).toEqual([
49
+ { txid: 'txid123', status: 'doubleSpend', competingTxs: ['txid456'], competingBeef: [0, 1, 2, 3] }
50
+ ])
51
+ expect(werr3.sendWithResults).toEqual([{ txid: 'txid123', status: 'failed' }])
52
+ expect(werr3.noSendChange).toEqual(['00'.repeat(32) + '.0'])
53
+ }
54
+ })
55
+
56
+ test('1 - WERR_NOT_IMPLEMENTED basic test', async () => {
57
+ const werr = new WERR_NOT_IMPLEMENTED('Custom not implemented message')
58
+ expect(werr.name).toBe('WERR_NOT_IMPLEMENTED')
59
+ expect(werr.message).toBe('Custom not implemented message')
60
+
61
+ const json = WalletError.unknownToJson(werr)
62
+ const werr2 = WalletErrorFromJson(JSON.parse(json))
63
+ expect(werr2.name).toBe('WERR_NOT_IMPLEMENTED')
64
+ expect(werr2.message).toBe('Custom not implemented message')
65
+ })
66
+
67
+ test('2 - WERR_INTERNAL with default message', async () => {
68
+ const werr = new WERR_INTERNAL()
69
+ expect(werr.name).toBe('WERR_INTERNAL')
70
+ expect(werr.message).toBe('An internal error has occurred.')
71
+
72
+ const json = WalletError.unknownToJson(werr)
73
+ const werr2 = WalletErrorFromJson(JSON.parse(json))
74
+ expect(werr2.name).toBe('WERR_INTERNAL')
75
+ expect(werr2.message).toBe('An internal error has occurred.')
76
+ })
77
+
78
+ test('3 - WERR_INVALID_PARAMETER with custom parameter', async () => {
79
+ const werr = new WERR_INVALID_PARAMETER('amount', 'positive')
80
+ expect(werr.name).toBe('WERR_INVALID_PARAMETER')
81
+ expect(werr.message).toBe('The amount parameter must be positive')
82
+ expect(werr.parameter).toBe('amount')
83
+
84
+ const json = werr.toJson()
85
+ const werr2 = WalletErrorFromJson(JSON.parse(json))
86
+ expect(werr2.name).toBe('WERR_INVALID_PARAMETER')
87
+ expect(werr2.message).toBe('The amount parameter must be positive')
88
+ expect((werr2 as WERR_INVALID_PARAMETER).parameter).toBe('amount')
89
+ })
90
+
91
+ test('4 - WERR_INSUFFICIENT_FUNDS with numeric values', async () => {
92
+ const werr = new WERR_INSUFFICIENT_FUNDS(1000, 500)
93
+ expect(werr.name).toBe('WERR_INSUFFICIENT_FUNDS')
94
+ expect(werr.message).toContain('500 more satoshis are needed')
95
+ expect(werr.message).toContain('for a total of 1000')
96
+ expect(werr.totalSatoshisNeeded).toBe(1000)
97
+ expect(werr.moreSatoshisNeeded).toBe(500)
98
+
99
+ const json = werr.toJson()
100
+ const werr2 = WalletErrorFromJson(JSON.parse(json))
101
+ expect(werr2.name).toBe('WERR_INSUFFICIENT_FUNDS')
102
+ expect((werr2 as WERR_INSUFFICIENT_FUNDS).totalSatoshisNeeded).toBe(1000)
103
+ expect((werr2 as WERR_INSUFFICIENT_FUNDS).moreSatoshisNeeded).toBe(500)
104
+ })
105
+
106
+ test('5 - WERR_BROADCAST_UNAVAILABLE test', async () => {
107
+ const werr = new WERR_BROADCAST_UNAVAILABLE('Network issue')
108
+ expect(werr.name).toBe('WERR_BROADCAST_UNAVAILABLE')
109
+ expect(werr.message).toBe('Unable to broadcast transaction at this time.')
110
+
111
+ const json = WalletError.unknownToJson(werr)
112
+ const werr2 = WalletErrorFromJson(JSON.parse(json))
113
+ expect(werr2.name).toBe('WERR_BROADCAST_UNAVAILABLE')
114
+ expect(werr2.message).toBe('Unable to broadcast transaction at this time.')
115
+ })
116
+
117
+ test('6 - WERR_NETWORK_CHAIN test', async () => {
118
+ const werr = new WERR_NETWORK_CHAIN('Chain mismatch')
119
+ expect(werr.name).toBe('WERR_NETWORK_CHAIN')
120
+ expect(werr.message).toBe('Chain mismatch')
121
+
122
+ const json = WalletError.unknownToJson(werr)
123
+ const werr2 = WalletErrorFromJson(JSON.parse(json))
124
+ expect(werr2.name).toBe('WERR_NETWORK_CHAIN')
125
+ expect(werr2.message).toBe('Chain mismatch')
126
+ })
127
+
128
+ test('7 - WalletError.fromUnknown with plain Error', async () => {
129
+ const err = new Error('Test error')
130
+ const werr = WalletError.fromUnknown(err)
131
+ expect(werr.name).toBe('WERR_UNKNOWN')
132
+ expect(werr.message).toBe('Test error')
133
+ })
134
+
135
+ test('8 - WalletError.unknownToJson with unknown object', async () => {
136
+ const obj = { custom: 'data', code: 404 }
137
+ const json = WalletError.unknownToJson(obj)
138
+ const werr = WalletErrorFromJson(JSON.parse(json))
139
+ expect(werr.name).toBe('WERR_UNKNOWN')
140
+ expect(werr.message).toBe('[object Object]')
141
+ })
142
+
143
+ test('9 - WERR_INVALID_OPERATION basic test', async () => {
144
+ const werr = new WERR_INVALID_OPERATION('Custom invalid operation message')
145
+ expect(werr.name).toBe('WERR_INVALID_OPERATION')
146
+ expect(werr.message).toBe('Custom invalid operation message')
147
+
148
+ const json = WalletError.unknownToJson(werr)
149
+ const werr2 = WalletErrorFromJson(JSON.parse(json))
150
+ expect(werr2.name).toBe('WERR_INVALID_OPERATION')
151
+ expect(werr2.message).toBe('Custom invalid operation message')
152
+ })
153
+
154
+ test('10 - WERR_MISSING_PARAMETER with parameter', async () => {
155
+ const werr = new WERR_MISSING_PARAMETER('requiredField')
156
+ expect(werr.name).toBe('WERR_MISSING_PARAMETER')
157
+ expect(werr.message).toBe('The required requiredField parameter is missing.')
158
+ expect(werr.parameter).toBe('requiredField')
159
+
160
+ const json = werr.toJson()
161
+ const werr2 = WalletErrorFromJson(JSON.parse(json))
162
+ expect(werr2.name).toBe('WERR_MISSING_PARAMETER')
163
+ expect(werr2.message).toBe('The required requiredField parameter is missing.')
164
+ expect((werr2 as WERR_MISSING_PARAMETER).parameter).toBe('requiredField')
165
+ })
166
+
167
+ test('11 - WERR_BAD_REQUEST with custom message', async () => {
168
+ const werr = new WERR_BAD_REQUEST('Invalid request data')
169
+ expect(werr.name).toBe('WERR_BAD_REQUEST')
170
+ expect(werr.message).toBe('Invalid request data')
171
+
172
+ const json = WalletError.unknownToJson(werr)
173
+ const werr2 = WalletErrorFromJson(JSON.parse(json))
174
+ expect(werr2.name).toBe('WERR_BAD_REQUEST')
175
+ expect(werr2.message).toBe('Invalid request data')
176
+ })
177
+
178
+ test('12 - WERR_UNAUTHORIZED with default message', async () => {
179
+ const werr = new WERR_UNAUTHORIZED()
180
+ expect(werr.name).toBe('WERR_UNAUTHORIZED')
181
+ expect(werr.message).toBe('Access is denied due to an authorization error.')
182
+
183
+ const json = WalletError.unknownToJson(werr)
184
+ const werr2 = WalletErrorFromJson(JSON.parse(json))
185
+ expect(werr2.name).toBe('WERR_UNAUTHORIZED')
186
+ expect(werr2.message).toBe('Access is denied due to an authorization error.')
187
+ })
188
+
189
+ test('13 - WERR_NOT_ACTIVE with default message', async () => {
190
+ const werr = new WERR_NOT_ACTIVE()
191
+ expect(werr.name).toBe('WERR_NOT_ACTIVE')
192
+ expect(werr.message).toBe(
193
+ `WalletStorageManager is not accessing user's active storage or there are conflicting active stores configured.`
194
+ )
195
+
196
+ const json = WalletError.unknownToJson(werr)
197
+ const werr2 = WalletErrorFromJson(JSON.parse(json))
198
+ expect(werr2.name).toBe('WERR_NOT_ACTIVE')
199
+ expect(werr2.message).toBe(
200
+ `WalletStorageManager is not accessing user's active storage or there are conflicting active stores configured.`
201
+ )
202
+ })
203
+
204
+ test('14 - WERR_INVALID_PUBLIC_KEY with key and mainnet network', async () => {
205
+ const werr = new WERR_INVALID_PUBLIC_KEY('invalidkey123', 'mainnet')
206
+ expect(werr.name).toBe('WERR_INVALID_PUBLIC_KEY')
207
+ expect(werr.message).toBe('The provided public key "invalidkey123" is invalid or malformed.')
208
+ expect((werr as WERR_INVALID_PUBLIC_KEY).key).toBe('invalidkey123')
209
+
210
+ const json = WalletError.unknownToJson(werr)
211
+ const parsedJson = JSON.parse(json)
212
+ const werr2 = WalletErrorFromJson(parsedJson)
213
+ expect(werr2.name).toBe('WERR_INVALID_PUBLIC_KEY')
214
+ expect(werr2.message).toBe('The provided public key "invalidkey123" is invalid or malformed.')
215
+ expect((werr2 as WERR_INVALID_PUBLIC_KEY).key).toBe('invalidkey123')
216
+ })
217
+
218
+ test('15 - WERR_INVALID_PUBLIC_KEY with key and testnet network', async () => {
219
+ const werr = new WERR_INVALID_PUBLIC_KEY('invalidkey123', 'testnet')
220
+ expect(werr.name).toBe('WERR_INVALID_PUBLIC_KEY')
221
+ expect(werr.message).toBe('The provided public key is invalid or malformed.')
222
+ expect((werr as WERR_INVALID_PUBLIC_KEY).key).toBe('invalidkey123')
223
+
224
+ const json = WalletError.unknownToJson(werr)
225
+ const parsedJson = JSON.parse(json)
226
+ const werr2 = WalletErrorFromJson(parsedJson)
227
+ expect(werr2.name).toBe('WERR_INVALID_PUBLIC_KEY')
228
+ expect(werr2.message).toBe('The provided public key is invalid or malformed.')
229
+ expect((werr2 as WERR_INVALID_PUBLIC_KEY).key).toBe('invalidkey123')
230
+ })
231
+
232
+ test('16 - WalletError basic constructor with details and stack', async () => {
233
+ const customStack = 'custom stack trace'
234
+ const werr = new WalletError('WERR_TEST', 'Test message', customStack, { detail1: 'value1', detail2: 'value2' })
235
+ expect(werr.isError).toBe(true)
236
+ expect(werr.name).toBe('WERR_TEST')
237
+ expect(werr.message).toBe('Test message')
238
+ expect(werr.stack).toBe(customStack)
239
+ expect(werr.details).toEqual({ detail1: 'value1', detail2: 'value2' })
240
+ expect(werr.code).toBe('WERR_TEST')
241
+ expect(werr.description).toBe('Test message')
242
+
243
+ werr.code = 'WERR_NEW_CODE'
244
+ werr.description = 'New description'
245
+ expect(werr.name).toBe('WERR_NEW_CODE')
246
+ expect(werr.message).toBe('New description')
247
+ })
248
+
249
+ test('17 - WalletError.fromUnknown with string', async () => {
250
+ const werr = WalletError.fromUnknown('String error message')
251
+ expect(werr.name).toBe('WERR_UNKNOWN')
252
+ expect(werr.message).toBe('String error message')
253
+ })
254
+
255
+ test('18 - WalletError.fromUnknown with number', async () => {
256
+ const werr = WalletError.fromUnknown(404)
257
+ expect(werr.name).toBe('WERR_UNKNOWN')
258
+ expect(werr.message).toBe('404')
259
+ })
260
+
261
+ test('19 - WalletError.fromUnknown with custom object', async () => {
262
+ const obj = { code: 'ERR_404', message: 'Not found', status: 404 }
263
+ const werr = WalletError.fromUnknown(obj)
264
+ expect(werr.name).toBe('ERR_404')
265
+ expect(werr.message).toBe('Not found')
266
+ })
267
+
268
+ test('20 - WalletError.fromUnknown with nested walletError', async () => {
269
+ const innerErr = new WERR_INTERNAL('Inner error')
270
+ const outerObj = { message: 'Outer error', walletError: innerErr }
271
+ const werr = WalletError.fromUnknown(outerObj)
272
+ expect(werr.name).toBe('WERR_UNKNOWN')
273
+ expect(werr.message).toBe('Outer error')
274
+ expect((werr as any).walletError).toBeInstanceOf(WERR_INTERNAL)
275
+ expect((werr as any).walletError.message).toBe('Inner error')
276
+ })
277
+
278
+ test('21 - WalletError.fromUnknown with SQL details', async () => {
279
+ const err = { name: 'DBError', message: 'Query failed', sql: 'SELECT * FROM table', sqlMessage: 'Syntax error' }
280
+ const werr = WalletError.fromUnknown(err)
281
+ expect(werr.name).toBe('DBError')
282
+ expect(werr.message).toBe('Query failed')
283
+ expect(werr.details).toEqual({ sql: 'SELECT * FROM table', sqlMessage: 'Syntax error' })
284
+ })
285
+
286
+ test('22 - WalletError.unknownToJson with WalletError', async () => {
287
+ const werr = new WalletError('WERR_TEST', 'Test message')
288
+ const json = WalletError.unknownToJson(werr)
289
+ const parsed = JSON.parse(json)
290
+ expect(parsed.name).toBe('WERR_TEST')
291
+ expect(parsed.message).toBe('Test message')
292
+ })
293
+
294
+ test('23 - WalletError.unknownToJson with standard Error', async () => {
295
+ const err = new Error('Standard error')
296
+ const json = WalletError.unknownToJson(err)
297
+ const werr = WalletErrorFromJson(JSON.parse(json))
298
+ expect(werr.name).toBe('Error')
299
+ expect(werr.message).toBe('Standard error')
300
+ })
301
+
302
+ test('24 - WalletError.unknownToJson with string', async () => {
303
+ const json = WalletError.unknownToJson('String error')
304
+ const werr = WalletErrorFromJson(JSON.parse(json))
305
+ expect(werr.name).toBe('WERR_UNKNOWN')
306
+ expect(werr.message).toBe('String error')
307
+ })
308
+
309
+ test('25 - WalletError asStatus method', async () => {
310
+ const werr = new WalletError('WERR_TEST', 'Test description')
311
+ const status = werr.asStatus()
312
+ expect(status).toEqual({
313
+ status: 'error',
314
+ code: 'WERR_TEST',
315
+ description: 'Test description'
316
+ })
317
+ })
318
+ })
@@ -0,0 +1,21 @@
1
+ import { Utils, Validation as V } from '@bsv/sdk'
2
+ describe('validationHelpers tests', () => {
3
+ jest.setTimeout(99999999)
4
+
5
+ test('0 validateBase64String', async () => {
6
+ const validB64 = 'SGVsbG8gV29ybGQh' // "Hello World!"
7
+
8
+ const s = V.validateBase64String(validB64, 'testParam', 1, 20)
9
+ expect(s).toBe(validB64)
10
+
11
+ {
12
+ const invalidB64 = 'SGVsbG8g29ybGQh'
13
+ expect(() => V.validateBase64String(invalidB64, 'testParam', 1, 20)).toThrow()
14
+ }
15
+
16
+ {
17
+ const invalidB64 = 'SGVsbG8gV29ybGQh='
18
+ expect(() => V.validateBase64String(invalidB64, 'testParam', 1, 20)).toThrow()
19
+ }
20
+ })
21
+ })
@@ -0,0 +1,10 @@
1
+ export * from './WalletError'
2
+ export * from './WalletErrorFromJson'
3
+ export * from './WalletSigner.interfaces'
4
+ export * from './WalletStorage.interfaces'
5
+ export * from './WERR_errors'
6
+ export { Validation } from '@bsv/sdk'
7
+ export * from './CertOpsWallet'
8
+ export * from './types'
9
+ export * from './WalletServices.interfaces'
10
+ export * from './PrivilegedKeyManager'
@@ -0,0 +1,226 @@
1
+ import { Transaction, UnlockingScript } from '@bsv/sdk'
2
+
3
+ /**
4
+ * Identifies a unique transaction output by its `txid` and index `vout`
5
+ */
6
+ export interface OutPoint {
7
+ /**
8
+ * Transaction double sha256 hash as big endian hex string
9
+ */
10
+ txid: string
11
+ /**
12
+ * zero based output index within the transaction
13
+ */
14
+ vout: number
15
+ }
16
+
17
+ export type Chain = 'main' | 'test'
18
+
19
+ /**
20
+ * Initial status (attempts === 0):
21
+ *
22
+ * nosend: transaction was marked 'noSend'. It is complete and signed. It may be sent by an external party. Proof should be sought as if 'unmined'. No error if it remains unknown by network.
23
+ *
24
+ * unprocessed: indicates req is about to be posted to network by non-acceptDelayedBroadcast application code, after posting status is normally advanced to 'sending'
25
+ *
26
+ * unsent: rawTx has not yet been sent to the network for processing. req is queued for delayed processing.
27
+ *
28
+ * sending: At least one attempt to send rawTx to transaction processors has occured without confirmation of acceptance.
29
+ *
30
+ * unknown: rawTx status is unknown but is believed to have been previously sent to the network.
31
+ *
32
+ * Attempts > 0 status, processing:
33
+ *
34
+ * unknown: Last status update received did not recognize txid or wasn't understood.
35
+ *
36
+ * nonfinal: rawTx has an un-expired nLockTime and is eligible for continuous updating by new transactions with additional outputs and incrementing sequence numbers.
37
+ *
38
+ * unmined: Last attempt has txid waiting to be mined, possibly just sent without callback
39
+ *
40
+ * callback: Waiting for proof confirmation callback from transaction processor.
41
+ *
42
+ * unconfirmed: Potential proof has not been confirmed by chaintracks
43
+ *
44
+ * Terminal status:
45
+ *
46
+ * doubleSpend: Transaction spends same input as another transaction.
47
+ *
48
+ * invalid: rawTx is structuraly invalid or was rejected by the network. Will never be re-attempted or completed.
49
+ *
50
+ * completed: proven_txs record added, and notifications are complete.
51
+ *
52
+ * unfail: asigned to force review of a currently invalid ProvenTxReq.
53
+ */
54
+ export type ProvenTxReqStatus =
55
+ | 'sending'
56
+ | 'unsent'
57
+ | 'nosend'
58
+ | 'unknown'
59
+ | 'nonfinal'
60
+ | 'unprocessed'
61
+ | 'unmined'
62
+ | 'callback'
63
+ | 'unconfirmed'
64
+ | 'completed'
65
+ | 'invalid'
66
+ | 'doubleSpend'
67
+ | 'unfail'
68
+
69
+ export const ProvenTxReqTerminalStatus: ProvenTxReqStatus[] = ['completed', 'invalid', 'doubleSpend']
70
+
71
+ export const ProvenTxReqNonTerminalStatus: ProvenTxReqStatus[] = [
72
+ 'sending',
73
+ 'unsent',
74
+ 'nosend',
75
+ 'unknown',
76
+ 'nonfinal',
77
+ 'unprocessed',
78
+ 'unmined',
79
+ 'callback',
80
+ 'unconfirmed'
81
+ ]
82
+
83
+ export type TransactionStatus =
84
+ | 'completed'
85
+ | 'failed'
86
+ | 'unprocessed'
87
+ | 'sending'
88
+ | 'unproven'
89
+ | 'unsigned'
90
+ | 'nosend'
91
+ | 'nonfinal'
92
+ | 'unfail'
93
+
94
+ export interface Paged {
95
+ limit: number
96
+ offset?: number
97
+ }
98
+
99
+ export interface KeyPair {
100
+ privateKey: string
101
+ publicKey: string
102
+ }
103
+
104
+ export interface StorageIdentity {
105
+ /**
106
+ * The identity key (public key) assigned to this storage
107
+ */
108
+ storageIdentityKey: string
109
+ /**
110
+ * The human readable name assigned to this storage.
111
+ */
112
+ storageName: string
113
+ }
114
+
115
+ export interface EntityTimeStamp {
116
+ created_at: Date
117
+ updated_at: Date
118
+ }
119
+
120
+ export interface ScriptTemplateUnlock {
121
+ sign: (tx: Transaction, inputIndex: number) => Promise<UnlockingScript>
122
+ estimateLength: (tx: Transaction, inputIndex: number) => Promise<number>
123
+ }
124
+
125
+ export interface WalletBalance {
126
+ total: number
127
+ utxos: { satoshis: number; outpoint: string }[]
128
+ }
129
+
130
+ export type ReqHistoryNote = {
131
+ when?: string
132
+ what: string
133
+ [key: string]: boolean | string | number | undefined
134
+ }
135
+
136
+ /**
137
+ * The transaction status that a client will receive when subscribing to transaction updates in the Monitor.
138
+ */
139
+ export interface ProvenTransactionStatus {
140
+ txid: string
141
+ txIndex: number
142
+ blockHeight: number
143
+ blockHash: string
144
+ merklePath: number[]
145
+ merkleRoot: string
146
+ }
147
+
148
+ /**
149
+ * `listOutputs` special operation basket name value.
150
+ *
151
+ * Returns wallet's current change balance in the `totalOutputs` result property.
152
+ * The `outputs` result property will always be an empty array.
153
+ */
154
+ export const specOpWalletBalance = '893b7646de0e1c9f741bd6e9169b76a8847ae34adef7bef1e6a285371206d2e8'
155
+
156
+ /**
157
+ * `listOutputs` special operation basket name value.
158
+ *
159
+ * Returns currently spendable wallet change outputs that fail to validate as unspent transaction outputs.
160
+ *
161
+ * Optional tag value 'release'. If present, updates invalid change outputs to not spendable.
162
+ *
163
+ * Optional tag value 'all'. If present, processes all spendable true outputs, independent of baskets, but basket must be defined.
164
+ */
165
+ export const specOpInvalidChange = '5a76fd430a311f8bc0553859061710a4475c19fed46e2ff95969aa918e612e57'
166
+
167
+ /**
168
+ * `listOutputs` special operation basket name value.
169
+ *
170
+ * Updates the wallet's automatic change management parameters.
171
+ *
172
+ * Tag at index 0 is the new desired number of spendable change outputs to maintain.
173
+ *
174
+ * Tag at index 1 is the new target for minimum satoshis when creating new change outputs.
175
+ */
176
+ export const specOpSetWalletChangeParams = 'a4979d28ced8581e9c1c92f1001cc7cb3aabf8ea32e10888ad898f0a509a3929'
177
+
178
+ /**
179
+ * @param basket Output basket name value.
180
+ * @returns true iff the `basket` name is a reserved `listOutputs` special operation identifier.
181
+ */
182
+ export function isListOutputsSpecOp(basket: string): boolean {
183
+ return [specOpWalletBalance, specOpInvalidChange, specOpSetWalletChangeParams].indexOf(basket) >= 0
184
+ }
185
+
186
+ /**
187
+ * `listActions` special operation label name value.
188
+ *
189
+ * Processes only actions currently with status 'nosend'
190
+ *
191
+ * Optional label value 'abort'. If present, runs abortAction on all the actions returned.
192
+ */
193
+ export const specOpNoSendActions = 'ac6b20a3bb320adafecd637b25c84b792ad828d3aa510d05dc841481f664277d'
194
+
195
+ /**
196
+ * `listActions` special operation label name value.
197
+ *
198
+ * Processes only actions currently with status 'failed'
199
+ *
200
+ * Optional label value 'unfail'. If present, sets status to 'unfail', which queues them for attempted recovery by the Monitor.
201
+ */
202
+ export const specOpFailedActions = '97d4eb1e49215e3374cc2c1939a7c43a55e95c7427bf2d45ed63e3b4e0c88153'
203
+
204
+ /**
205
+ * @param label Action / Transaction label name value.
206
+ * @returns true iff the `label` name is a reserved `listActions` special operation identifier.
207
+ */
208
+ export function isListActionsSpecOp(label: string): boolean {
209
+ return [specOpNoSendActions, specOpFailedActions].indexOf(label) >= 0
210
+ }
211
+
212
+ /**
213
+ * `createAction` special operation label name value.
214
+ *
215
+ * Causes WERR_REVIEW_ACTIONS throw with dummy properties.
216
+ *
217
+ */
218
+ export const specOpThrowReviewActions = 'a496e747fc3ad5fabdd4ae8f91184e71f87539bd3d962aa2548942faaaf0047a'
219
+
220
+ /**
221
+ * @param label Action / Transaction label name value.
222
+ * @returns true iff the `label` name is a reserved `createAction` special operation identifier.
223
+ */
224
+ export function isCreateActionSpecOp(label: string): boolean {
225
+ return [specOpThrowReviewActions].indexOf(label) >= 0
226
+ }
@@ -0,0 +1,11 @@
1
+ # External Data Services Necessary to Wallet Operations
2
+
3
+ The principal purpsose of these services is to insulate the rest of the code from the APIs of external service providers.
4
+
5
+ These services include:
6
+
7
+ - Posting BEEFs to transaction processors.
8
+ - Maintaining a local trusted block header database and answering merkleproof queries.
9
+ - Obtaining real time exchange rates.
10
+ - Raw transaction lookup by txid.
11
+ - UTXO status verification by lockingScript hash.