@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,322 @@
1
+ import {
2
+ BEEF,
3
+ CachedKeyDeriver,
4
+ CreateActionArgs,
5
+ CreateActionOptions,
6
+ CreateActionOutput,
7
+ CreateActionResult,
8
+ KeyDeriver,
9
+ KeyDeriverApi,
10
+ LockingScript,
11
+ P2PKH,
12
+ PrivateKey,
13
+ PublicKey,
14
+ ScriptTemplateUnlock,
15
+ WalletInterface
16
+ } from '@bsv/sdk'
17
+ import { KeyPairAddress, SetupClientWalletArgs, SetupWallet, SetupWalletClient } from './SetupWallet'
18
+ import { StorageIdb } from './storage/StorageIdb'
19
+ import { WalletStorageManager } from './storage/WalletStorageManager'
20
+ import { Services } from './services/Services'
21
+ import { Monitor } from './monitor/Monitor'
22
+ import { PrivilegedKeyManager } from './sdk/PrivilegedKeyManager'
23
+ import { Wallet } from './Wallet'
24
+ import { Chain } from './sdk/types'
25
+ import { randomBytesHex } from './utility/utilityHelpers'
26
+ import { StorageClient } from './storage/remoting/StorageClient'
27
+
28
+ /**
29
+ * The 'Setup` class provides static setup functions to construct BRC-100 compatible
30
+ * wallets in a variety of configurations.
31
+ *
32
+ * It serves as a starting point for experimentation and customization.
33
+ */
34
+ export abstract class SetupClient {
35
+ /**
36
+ * Create a `Wallet`. Storage can optionally be provided or configured later.
37
+ *
38
+ * The following components are configured: KeyDeriver, WalletStorageManager, WalletService, WalletStorage.
39
+ * Optionally, PrivilegedKeyManager is also configured.
40
+ *
41
+ * @publicbody
42
+ */
43
+ static async createWallet(args: SetupClientWalletArgs): Promise<SetupWallet> {
44
+ const chain = args.chain
45
+ const rootKey = PrivateKey.fromHex(args.rootKeyHex)
46
+ const identityKey = rootKey.toPublicKey().toString()
47
+ const keyDeriver = new CachedKeyDeriver(rootKey)
48
+ const storage = new WalletStorageManager(identityKey, args.active, args.backups)
49
+ if (storage.canMakeAvailable()) await storage.makeAvailable()
50
+ const serviceOptions = Services.createDefaultOptions(chain)
51
+ serviceOptions.taalApiKey = args.taalApiKey
52
+ const services = new Services(serviceOptions)
53
+ const monopts = Monitor.createDefaultWalletMonitorOptions(chain, storage, services)
54
+ const monitor = new Monitor(monopts)
55
+ monitor.addDefaultTasks()
56
+ const privilegedKeyManager = args.privilegedKeyGetter
57
+ ? new PrivilegedKeyManager(args.privilegedKeyGetter)
58
+ : undefined
59
+ const wallet = new Wallet({
60
+ chain,
61
+ keyDeriver,
62
+ storage,
63
+ services,
64
+ monitor,
65
+ privilegedKeyManager
66
+ })
67
+ const r: SetupWallet = {
68
+ rootKey,
69
+ identityKey,
70
+ keyDeriver,
71
+ chain,
72
+ storage,
73
+ services,
74
+ monitor,
75
+ wallet
76
+ }
77
+ return r
78
+ }
79
+
80
+ /**
81
+ * Setup a new `Wallet` without requiring a .env file.
82
+ *
83
+ * @param args.chain - 'main' or 'test'
84
+ * @param args.rootKeyHex - Root private key for wallet's key deriver.
85
+ * @param args.storageUrl - Optional. `StorageClient` and `chain` compatible endpoint URL.
86
+ * @param args.privilegedKeyGetter - Optional. Method that will return the privileged `PrivateKey`, on demand.
87
+ */
88
+ static async createWalletClientNoEnv(args: {
89
+ chain: Chain
90
+ rootKeyHex: string
91
+ storageUrl?: string
92
+ privilegedKeyGetter?: () => Promise<PrivateKey>
93
+ }): Promise<Wallet> {
94
+ const chain = args.chain
95
+ const endpointUrl = args.storageUrl || `https://${args.chain !== 'main' ? 'staging-' : ''}storage.babbage.systems`
96
+ const rootKey = PrivateKey.fromHex(args.rootKeyHex)
97
+ const keyDeriver = new CachedKeyDeriver(rootKey)
98
+ const storage = new WalletStorageManager(keyDeriver.identityKey)
99
+ const services = new Services(chain)
100
+ const privilegedKeyManager = args.privilegedKeyGetter
101
+ ? new PrivilegedKeyManager(args.privilegedKeyGetter)
102
+ : undefined
103
+ const wallet = new Wallet({
104
+ chain,
105
+ keyDeriver,
106
+ storage,
107
+ services,
108
+ privilegedKeyManager
109
+ })
110
+ const client = new StorageClient(wallet, endpointUrl)
111
+ await storage.addWalletStorageProvider(client)
112
+ await storage.makeAvailable()
113
+ return wallet
114
+ }
115
+
116
+ /**
117
+ * @publicbody
118
+ */
119
+ static async createWalletClient(args: SetupClientWalletClientArgs): Promise<SetupWalletClient> {
120
+ const wo = await SetupClient.createWallet(args)
121
+
122
+ const endpointUrl = args.endpointUrl || `https://${args.chain !== 'main' ? 'staging-' : ''}storage.babbage.systems`
123
+
124
+ const client = new StorageClient(wo.wallet, endpointUrl)
125
+ await wo.storage.addWalletStorageProvider(client)
126
+ await wo.storage.makeAvailable()
127
+ return {
128
+ ...wo,
129
+ endpointUrl
130
+ }
131
+ }
132
+
133
+ /**
134
+ * @publicbody
135
+ */
136
+ static getKeyPair(priv?: string | PrivateKey): KeyPairAddress {
137
+ if (priv === undefined) priv = PrivateKey.fromRandom()
138
+ else if (typeof priv === 'string') priv = new PrivateKey(priv, 'hex')
139
+
140
+ const pub = PublicKey.fromPrivateKey(priv)
141
+ const address = pub.toAddress()
142
+ return { privateKey: priv, publicKey: pub, address }
143
+ }
144
+
145
+ /**
146
+ * @publicbody
147
+ */
148
+ static getLockP2PKH(address: string): LockingScript {
149
+ const p2pkh = new P2PKH()
150
+ const lock = p2pkh.lock(address)
151
+ return lock
152
+ }
153
+
154
+ /**
155
+ * @publicbody
156
+ */
157
+ static getUnlockP2PKH(priv: PrivateKey, satoshis: number): ScriptTemplateUnlock {
158
+ const p2pkh = new P2PKH()
159
+ const lock = SetupClient.getLockP2PKH(SetupClient.getKeyPair(priv).address)
160
+ // Prepare to pay with SIGHASH_ALL and without ANYONE_CAN_PAY.
161
+ // In otherwords:
162
+ // - all outputs must remain in the current order, amount and locking scripts.
163
+ // - all inputs must remain from the current outpoints and sequence numbers.
164
+ // (unlock scripts are never signed)
165
+ const unlock = p2pkh.unlock(priv, 'all', false, satoshis, lock)
166
+ return unlock
167
+ }
168
+
169
+ /**
170
+ * @publicbody
171
+ */
172
+ static createP2PKHOutputs(
173
+ outputs: {
174
+ address: string
175
+ satoshis: number
176
+ outputDescription?: string
177
+ basket?: string
178
+ tags?: string[]
179
+ }[]
180
+ ): CreateActionOutput[] {
181
+ const os: CreateActionOutput[] = []
182
+ const count = outputs.length
183
+ for (let i = 0; i < count; i++) {
184
+ const o = outputs[i]
185
+ os.push({
186
+ basket: o.basket,
187
+ tags: o.tags,
188
+ satoshis: o.satoshis,
189
+ lockingScript: SetupClient.getLockP2PKH(o.address).toHex(),
190
+ outputDescription: o.outputDescription || `p2pkh ${i}`
191
+ })
192
+ }
193
+ return os
194
+ }
195
+
196
+ /**
197
+ * @publicbody
198
+ */
199
+ static async createP2PKHOutputsAction(
200
+ wallet: WalletInterface,
201
+ outputs: {
202
+ address: string
203
+ satoshis: number
204
+ outputDescription?: string
205
+ basket?: string
206
+ tags?: string[]
207
+ }[],
208
+ options?: CreateActionOptions
209
+ ): Promise<{
210
+ cr: CreateActionResult
211
+ outpoints: string[] | undefined
212
+ }> {
213
+ const os = SetupClient.createP2PKHOutputs(outputs)
214
+
215
+ const createArgs: CreateActionArgs = {
216
+ description: `createP2PKHOutputs`,
217
+ outputs: os,
218
+ options: {
219
+ ...options,
220
+ // Don't randomize so we can simplify outpoint creation
221
+ randomizeOutputs: false
222
+ }
223
+ }
224
+
225
+ const cr = await wallet.createAction(createArgs)
226
+
227
+ let outpoints: string[] | undefined
228
+
229
+ if (cr.txid) {
230
+ outpoints = os.map((o, i) => `${cr.txid}.${i}`)
231
+ }
232
+
233
+ return { cr, outpoints }
234
+ }
235
+
236
+ /**
237
+ * @publicbody
238
+ */
239
+ static async fundWalletFromP2PKHOutpoints(
240
+ wallet: WalletInterface,
241
+ outpoints: string[],
242
+ p2pkhKey: KeyPairAddress,
243
+ inputBEEF?: BEEF
244
+ ) {
245
+ // TODO
246
+ }
247
+
248
+ /**
249
+ * Adds `indexedDB` based storage to a `Wallet` configured by `SetupClient.createWalletOnly`
250
+ *
251
+ * @param args.databaseName Name for this storage. For MySQL, the schema name within the MySQL instance.
252
+ * @param args.chain Which chain this wallet is on: 'main' or 'test'. Defaults to 'test'.
253
+ * @param args.rootKeyHex
254
+ *
255
+ * @publicbody
256
+ */
257
+ static async createWalletIdb(args: SetupWalletIdbArgs): Promise<SetupWalletIdb> {
258
+ const wo = await SetupClient.createWallet(args)
259
+ const activeStorage = await SetupClient.createStorageIdb(args)
260
+ await wo.storage.addWalletStorageProvider(activeStorage)
261
+ const { user, isNew } = await activeStorage.findOrInsertUser(wo.identityKey)
262
+ const userId = user.userId
263
+ const r: SetupWalletIdb = {
264
+ ...wo,
265
+ activeStorage,
266
+ userId
267
+ }
268
+ return r
269
+ }
270
+
271
+ /**
272
+ * @returns {StorageIdb} - `Knex` based storage provider for a wallet. May be used for either active storage or backup storage.
273
+ */
274
+ static async createStorageIdb(args: SetupWalletIdbArgs): Promise<StorageIdb> {
275
+ const storage = new StorageIdb({
276
+ chain: args.chain,
277
+ commissionSatoshis: 0,
278
+ commissionPubKeyHex: undefined,
279
+ feeModel: { model: 'sat/kb', value: 1 }
280
+ })
281
+ await storage.migrate(args.databaseName, randomBytesHex(33))
282
+ await storage.makeAvailable()
283
+ return storage
284
+ }
285
+ }
286
+
287
+ /**
288
+ *
289
+ */
290
+ export interface SetupWalletIdbArgs extends SetupClientWalletArgs {
291
+ databaseName: string
292
+ }
293
+
294
+ /**
295
+ *
296
+ */
297
+ export interface SetupWalletIdb extends SetupWallet {
298
+ activeStorage: StorageIdb
299
+ userId: number
300
+
301
+ rootKey: PrivateKey
302
+ identityKey: string
303
+ keyDeriver: KeyDeriverApi
304
+ chain: Chain
305
+ storage: WalletStorageManager
306
+ services: Services
307
+ monitor: Monitor
308
+ wallet: Wallet
309
+ }
310
+
311
+ /**
312
+ * Extension `SetupWalletClientArgs` of `SetupWalletArgs` is used by `createWalletClient`
313
+ * to construct a `SetupWalletClient`.
314
+ */
315
+ export interface SetupClientWalletClientArgs extends SetupClientWalletArgs {
316
+ /**
317
+ * The endpoint URL of a service hosting the `StorageServer` JSON-RPC service to
318
+ * which a `StorageClient` instance should connect to function as
319
+ * the active storage provider of the newly created wallet.
320
+ */
321
+ endpointUrl?: string
322
+ }
@@ -0,0 +1,108 @@
1
+ import { PrivateKey, KeyDeriver, PublicKey, KeyDeriverApi } from '@bsv/sdk'
2
+ import { Wallet } from './Wallet'
3
+ import { Chain } from './sdk/types'
4
+ import { WalletStorageManager } from './storage/WalletStorageManager'
5
+ import { Services } from './services/Services'
6
+ import { Monitor } from './monitor/Monitor'
7
+ import { WalletStorageProvider } from './sdk/WalletStorage.interfaces'
8
+
9
+ /**
10
+ * When creating a BRC-100 compatible `Wallet`, many components come into play.
11
+ *
12
+ * All of the `createWallet` functions in the `Setup` and `SetupClient` classes return
13
+ * an object with direct access to each component to facilitate experimentation, testing
14
+ * and customization.
15
+ */
16
+
17
+ export interface SetupWallet {
18
+ /**
19
+ * The rootKey of the `KeyDeriver`. The private key from which other keys are derived.
20
+ */
21
+ rootKey: PrivateKey
22
+ /**
23
+ * The pubilc key associated with the `rootKey` which also serves as the wallet's identity.
24
+ */
25
+ identityKey: string
26
+ /**
27
+ * The `KeyDeriver` component used by the wallet for key derivation and cryptographic functions.
28
+ */
29
+ keyDeriver: KeyDeriverApi
30
+ /**
31
+ * The chain ('main' or 'test') which the wallet accesses.
32
+ */
33
+ chain: Chain
34
+ /**
35
+ * The `WalletStorageManager` that manages all the configured storage providers (active and backups)
36
+ * accessed by the wallet.
37
+ */
38
+ storage: WalletStorageManager
39
+ /**
40
+ * The network `Services` component which provides the wallet with access to external services hosted
41
+ * on the public network.
42
+ */
43
+ services: Services
44
+ /**
45
+ * The background task `Monitor` component available to the wallet to offload tasks
46
+ * that speed up wallet operations and maintain data integrity.
47
+ */
48
+ monitor: Monitor
49
+ /**
50
+ * The actual BRC-100 `Wallet` to which all the other properties and components contribute.
51
+ *
52
+ * Note that internally, the wallet is itself linked to all these properties and components.
53
+ * They are included in this interface to facilitate access after wallet construction for
54
+ * experimentation, testing and customization. Any changes made to the configuration of these
55
+ * components after construction may disrupt the normal operation of the wallet.
56
+ */
57
+ wallet: Wallet
58
+ } /**
59
+ * A private key and associated public key and address.
60
+ */
61
+
62
+ export interface KeyPairAddress {
63
+ privateKey: PrivateKey
64
+ publicKey: PublicKey
65
+ address: string
66
+ }
67
+ /**
68
+ * Arguments used by `createWallet` to construct a `SetupWallet`.
69
+ *
70
+ * Extension `SetupWalletClientArgs` used by `createWalletClient` to construct a `SetupWalletClient`.
71
+ *
72
+ * Extension `SetupWalletIdbArgs` used by `createWalletIdb` to construct a `SetupWalletIdb`.
73
+ */
74
+
75
+ export interface SetupClientWalletArgs {
76
+ chain: Chain
77
+ /**
78
+ * The non-privileged private key used to initialize the `KeyDeriver` and determine the `identityKey`.
79
+ */
80
+ rootKeyHex: string
81
+ /**
82
+ * Optional. The privileged private key getter used to initialize the `PrivilegedKeyManager`.
83
+ * Defaults to undefined.
84
+ */
85
+ privilegedKeyGetter?: () => Promise<PrivateKey>
86
+ /**
87
+ * Optional. Active wallet storage. Can be added later.
88
+ */
89
+ active?: WalletStorageProvider
90
+ /**
91
+ * Optional. One or more storage providers managed as backup destinations. Can be added later.
92
+ */
93
+ backups?: WalletStorageProvider[]
94
+
95
+ taalApiKey?: string
96
+ }
97
+
98
+ /**
99
+ * Extension `SetupWalletClient` of `SetupWallet` is returned by `createWalletClient`
100
+ */
101
+ export interface SetupWalletClient extends SetupWallet {
102
+ /**
103
+ * The endpoint URL of the service hosting the `StorageServer` JSON-RPC service to
104
+ * which a `StorageClient` instance is connected to function as
105
+ * the active storage provider of the wallet.
106
+ */
107
+ endpointUrl: string
108
+ }