@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
package/src/Setup.ts ADDED
@@ -0,0 +1,579 @@
1
+ import { Knex, knex as makeKnex } from 'knex'
2
+ import { KeyPairAddress, SetupWallet, SetupWalletClient } from './SetupWallet'
3
+ import {
4
+ BEEF,
5
+ CachedKeyDeriver,
6
+ CreateActionArgs,
7
+ CreateActionOptions,
8
+ CreateActionOutput,
9
+ CreateActionResult,
10
+ KeyDeriver,
11
+ KeyDeriverApi,
12
+ LockingScript,
13
+ P2PKH,
14
+ PrivateKey,
15
+ PublicKey,
16
+ ScriptTemplateUnlock,
17
+ WalletInterface
18
+ } from '@bsv/sdk'
19
+ import { Chain } from './sdk/types'
20
+ import { verifyTruthy } from './utility/utilityHelpers'
21
+ import { WERR_INVALID_OPERATION } from './sdk/WERR_errors'
22
+ import { WalletStorageManager } from './storage/WalletStorageManager'
23
+ import { Services } from './services/Services'
24
+ import { Monitor } from './monitor/Monitor'
25
+ import { PrivilegedKeyManager } from './sdk/PrivilegedKeyManager'
26
+ import { Wallet } from './Wallet'
27
+ import { StorageClient } from './storage/remoting/StorageClient'
28
+ import { StorageKnex } from './storage/StorageKnex'
29
+ import { WalletStorageProvider } from './sdk/WalletStorage.interfaces'
30
+
31
+ // To rely on your own headers service, uncomment the following line:
32
+ // import { BHServiceClient } from './services/chaintracker'
33
+
34
+ import * as dotenv from 'dotenv'
35
+ dotenv.config()
36
+
37
+ /**
38
+ * The 'Setup` class provides static setup functions to construct BRC-100 compatible
39
+ * wallets in a variety of configurations.
40
+ *
41
+ * It serves as a starting point for experimentation and customization.
42
+ */
43
+ export abstract class Setup {
44
+ /**
45
+ * @param chain
46
+ * @returns true if .env is not valid for chain
47
+ */
48
+ static noEnv(chain: Chain): boolean {
49
+ try {
50
+ Setup.getEnv(chain)
51
+ return false
52
+ } catch {
53
+ return true
54
+ }
55
+ }
56
+
57
+ /**
58
+ * Creates content for .env file with some private keys, identity keys, sample API keys, and sample MySQL connection string.
59
+ *
60
+ * Two new, random private keys are generated each time, with their associated public identity keys.
61
+ *
62
+ * Loading secrets from a .env file is intended only for experimentation and getting started.
63
+ * Private keys should never be included directly in your source code.
64
+ *
65
+ * @publicbody
66
+ */
67
+ static makeEnv(): string {
68
+ const testPrivKey1 = PrivateKey.fromRandom()
69
+ const testIdentityKey1 = testPrivKey1.toPublicKey().toString()
70
+ const testPrivKey2 = PrivateKey.fromRandom()
71
+ const testIdentityKey2 = testPrivKey2.toPublicKey().toString()
72
+ const mainPrivKey1 = PrivateKey.fromRandom()
73
+ const mainIdentityKey1 = mainPrivKey1.toPublicKey().toString()
74
+ const mainPrivKey2 = PrivateKey.fromRandom()
75
+ const mainIdentityKey2 = mainPrivKey2.toPublicKey().toString()
76
+
77
+ const log = `
78
+ # .env file template for working with wallet-toolbox Setup functions.
79
+ MY_TEST_IDENTITY = '${testIdentityKey1}'
80
+ MY_TEST_IDENTITY2 = '${testIdentityKey2}'
81
+ MY_MAIN_IDENTITY = '${mainIdentityKey1}'
82
+ MY_MAIN_IDENTITY2 = '${mainIdentityKey2}'
83
+ MAIN_TAAL_API_KEY='mainnet_9596de07e92300c6287e4393594ae39c'
84
+ TEST_TAAL_API_KEY='testnet_0e6cf72133b43ea2d7861da2a38684e3'
85
+ MYSQL_CONNECTION='{"port":3306,"host":"127.0.0.1","user":"root","password":"your_password","database":"your_database", "timezone": "Z"}'
86
+ DEV_KEYS = '{
87
+ "${testIdentityKey1}": "${testPrivKey1.toString()}",
88
+ "${testIdentityKey2}": "${testPrivKey2.toString()}",
89
+ "${mainIdentityKey1}": "${mainPrivKey1.toString()}",
90
+ "${mainIdentityKey2}": "${mainPrivKey2.toString()}"
91
+ }'
92
+ `
93
+ console.log(log)
94
+
95
+ return log
96
+ }
97
+
98
+ /**
99
+ * Reads a .env file of the format created by `makeEnv`.
100
+ *
101
+ * Returns values for designated `chain`.
102
+ *
103
+ * Access private keys through the `devKeys` object: `devKeys[identityKey]`
104
+ *
105
+ * @param chain Which chain to use: 'test' or 'main'
106
+ * @returns {SetupEnv} with configuration environment secrets used by `Setup` functions.
107
+ *
108
+ * @publicbody
109
+ */
110
+ static getEnv(chain: Chain): SetupEnv {
111
+ // Identity keys of the lead maintainer of this repo...
112
+ const identityKey = chain === 'main' ? process.env.MY_MAIN_IDENTITY : process.env.MY_TEST_IDENTITY
113
+ const identityKey2 = chain === 'main' ? process.env.MY_MAIN_IDENTITY2 : process.env.MY_TEST_IDENTITY2
114
+ const filePath = chain === 'main' ? process.env.MY_MAIN_FILEPATH : process.env.MY_TEST_FILEPATH
115
+ const DEV_KEYS = process.env.DEV_KEYS || '{}'
116
+ const mySQLConnection = process.env.MYSQL_CONNECTION || '{}'
117
+ const taalApiKey = verifyTruthy(
118
+ chain === 'main' ? process.env.MAIN_TAAL_API_KEY : process.env.TEST_TAAL_API_KEY,
119
+ `.env value for '${chain.toUpperCase()}_TAAL_API_KEY' is required.`
120
+ )
121
+
122
+ if (!identityKey || !identityKey2) throw new WERR_INVALID_OPERATION('.env is not a valid SetupEnv configuration.')
123
+
124
+ return {
125
+ chain,
126
+ identityKey,
127
+ identityKey2,
128
+ filePath,
129
+ taalApiKey,
130
+ devKeys: JSON.parse(DEV_KEYS) as Record<string, string>,
131
+ mySQLConnection
132
+ }
133
+ }
134
+
135
+ /**
136
+ * Create a `Wallet`. Storage can optionally be provided or configured later.
137
+ *
138
+ * The following components are configured: KeyDeriver, WalletStorageManager, WalletService, WalletStorage.
139
+ * Optionally, PrivilegedKeyManager is also configured.
140
+ *
141
+ * @publicbody
142
+ */
143
+ static async createWallet(args: SetupWalletArgs): Promise<SetupWallet> {
144
+ const chain = args.env.chain
145
+ args.rootKeyHex ||= args.env.devKeys[args.env.identityKey]
146
+ const rootKey = PrivateKey.fromHex(args.rootKeyHex)
147
+ const identityKey = rootKey.toPublicKey().toString()
148
+ const keyDeriver = new CachedKeyDeriver(rootKey)
149
+ const storage = new WalletStorageManager(identityKey, args.active, args.backups)
150
+ if (storage.canMakeAvailable()) await storage.makeAvailable()
151
+ const serviceOptions = Services.createDefaultOptions(chain)
152
+ serviceOptions.taalApiKey = args.env.taalApiKey
153
+
154
+ // To rely on your own headers service, uncomment the following line, updating the url and apiKey to your own values.
155
+ // serviceOptions.chaintracks = new BHServiceClient('main', 'https://headers.spv.money', 'fC42F069YJs30FaWBAgikfDFEfIW1j4q')
156
+
157
+ const services = new Services(serviceOptions)
158
+ const monopts = Monitor.createDefaultWalletMonitorOptions(chain, storage, services)
159
+ const monitor = new Monitor(monopts)
160
+ monitor.addDefaultTasks()
161
+ const privilegedKeyManager = args.privilegedKeyGetter
162
+ ? new PrivilegedKeyManager(args.privilegedKeyGetter)
163
+ : undefined
164
+ const wallet = new Wallet({
165
+ chain,
166
+ keyDeriver,
167
+ storage,
168
+ services,
169
+ monitor,
170
+ privilegedKeyManager
171
+ })
172
+ const r: SetupWallet = {
173
+ rootKey,
174
+ identityKey,
175
+ keyDeriver,
176
+ chain,
177
+ storage,
178
+ services,
179
+ monitor,
180
+ wallet
181
+ }
182
+ return r
183
+ }
184
+
185
+ /**
186
+ * Setup a new `Wallet` without requiring a .env file.
187
+ *
188
+ * @param args.chain - 'main' or 'test'
189
+ * @param args.rootKeyHex - Root private key for wallet's key deriver.
190
+ * @param args.storageUrl - Optional. `StorageClient` and `chain` compatible endpoint URL.
191
+ * @param args.privilegedKeyGetter - Optional. Method that will return the privileged `PrivateKey`, on demand.
192
+ */
193
+ static async createWalletClientNoEnv(args: {
194
+ chain: Chain
195
+ rootKeyHex: string
196
+ storageUrl?: string
197
+ privilegedKeyGetter?: () => Promise<PrivateKey>
198
+ }): Promise<Wallet> {
199
+ const chain = args.chain
200
+ const endpointUrl = args.storageUrl || `https://${args.chain !== 'main' ? 'staging-' : ''}storage.babbage.systems`
201
+ const rootKey = PrivateKey.fromHex(args.rootKeyHex)
202
+ const keyDeriver = new CachedKeyDeriver(rootKey)
203
+ const storage = new WalletStorageManager(keyDeriver.identityKey)
204
+ const services = new Services(chain)
205
+ const privilegedKeyManager = args.privilegedKeyGetter
206
+ ? new PrivilegedKeyManager(args.privilegedKeyGetter)
207
+ : undefined
208
+ const wallet = new Wallet({
209
+ chain,
210
+ keyDeriver,
211
+ storage,
212
+ services,
213
+ privilegedKeyManager
214
+ })
215
+ const client = new StorageClient(wallet, endpointUrl)
216
+ await storage.addWalletStorageProvider(client)
217
+ await storage.makeAvailable()
218
+ return wallet
219
+ }
220
+
221
+ /**
222
+ * @publicbody
223
+ */
224
+ static async createWalletClient(args: SetupWalletClientArgs): Promise<SetupWalletClient> {
225
+ const wo = await Setup.createWallet(args)
226
+
227
+ const endpointUrl =
228
+ args.endpointUrl || `https://${args.env.chain !== 'main' ? 'staging-' : ''}storage.babbage.systems`
229
+
230
+ const client = new StorageClient(wo.wallet, endpointUrl)
231
+ await wo.storage.addWalletStorageProvider(client)
232
+ await wo.storage.makeAvailable()
233
+ return {
234
+ ...wo,
235
+ endpointUrl
236
+ }
237
+ }
238
+
239
+ /**
240
+ * @publicbody
241
+ */
242
+ static getKeyPair(priv?: string | PrivateKey): KeyPairAddress {
243
+ if (priv === undefined) priv = PrivateKey.fromRandom()
244
+ else if (typeof priv === 'string') priv = new PrivateKey(priv, 'hex')
245
+
246
+ const pub = PublicKey.fromPrivateKey(priv)
247
+ const address = pub.toAddress()
248
+ return { privateKey: priv, publicKey: pub, address }
249
+ }
250
+
251
+ /**
252
+ * @publicbody
253
+ */
254
+ static getLockP2PKH(address: string): LockingScript {
255
+ const p2pkh = new P2PKH()
256
+ const lock = p2pkh.lock(address)
257
+ return lock
258
+ }
259
+
260
+ /**
261
+ * @publicbody
262
+ */
263
+ static getUnlockP2PKH(priv: PrivateKey, satoshis: number): ScriptTemplateUnlock {
264
+ const p2pkh = new P2PKH()
265
+ const lock = Setup.getLockP2PKH(Setup.getKeyPair(priv).address)
266
+ // Prepare to pay with SIGHASH_ALL and without ANYONE_CAN_PAY.
267
+ // In otherwords:
268
+ // - all outputs must remain in the current order, amount and locking scripts.
269
+ // - all inputs must remain from the current outpoints and sequence numbers.
270
+ // (unlock scripts are never signed)
271
+ const unlock = p2pkh.unlock(priv, 'all', false, satoshis, lock)
272
+ return unlock
273
+ }
274
+
275
+ /**
276
+ * @publicbody
277
+ */
278
+ static createP2PKHOutputs(
279
+ outputs: {
280
+ address: string
281
+ satoshis: number
282
+ outputDescription?: string
283
+ basket?: string
284
+ tags?: string[]
285
+ }[]
286
+ ): CreateActionOutput[] {
287
+ const os: CreateActionOutput[] = []
288
+ const count = outputs.length
289
+ for (let i = 0; i < count; i++) {
290
+ const o = outputs[i]
291
+ os.push({
292
+ basket: o.basket,
293
+ tags: o.tags,
294
+ satoshis: o.satoshis,
295
+ lockingScript: Setup.getLockP2PKH(o.address).toHex(),
296
+ outputDescription: o.outputDescription || `p2pkh ${i}`
297
+ })
298
+ }
299
+ return os
300
+ }
301
+
302
+ /**
303
+ * @publicbody
304
+ */
305
+ static async createP2PKHOutputsAction(
306
+ wallet: WalletInterface,
307
+ outputs: {
308
+ address: string
309
+ satoshis: number
310
+ outputDescription?: string
311
+ basket?: string
312
+ tags?: string[]
313
+ }[],
314
+ options?: CreateActionOptions
315
+ ): Promise<{
316
+ cr: CreateActionResult
317
+ outpoints: string[] | undefined
318
+ }> {
319
+ const os = Setup.createP2PKHOutputs(outputs)
320
+
321
+ const createArgs: CreateActionArgs = {
322
+ description: `createP2PKHOutputs`,
323
+ outputs: os,
324
+ options: {
325
+ ...options,
326
+ // Don't randomize so we can simplify outpoint creation
327
+ randomizeOutputs: false
328
+ }
329
+ }
330
+
331
+ const cr = await wallet.createAction(createArgs)
332
+
333
+ let outpoints: string[] | undefined
334
+
335
+ if (cr.txid) {
336
+ outpoints = os.map((o, i) => `${cr.txid}.${i}`)
337
+ }
338
+
339
+ return { cr, outpoints }
340
+ }
341
+
342
+ /**
343
+ * @publicbody
344
+ */
345
+ static async fundWalletFromP2PKHOutpoints(
346
+ wallet: WalletInterface,
347
+ outpoints: string[],
348
+ p2pkhKey: KeyPairAddress,
349
+ inputBEEF?: BEEF
350
+ ) {
351
+ // TODO
352
+ }
353
+ /**
354
+ * Adds `Knex` based storage to a `Wallet` configured by `Setup.createWalletOnly`
355
+ *
356
+ * @param args.knex `Knex` object configured for either MySQL or SQLite database access.
357
+ * Schema will be created and migrated as needed.
358
+ * For MySQL, a schema corresponding to databaseName must exist with full access permissions.
359
+ * @param args.databaseName Name for this storage. For MySQL, the schema name within the MySQL instance.
360
+ * @param args.chain Which chain this wallet is on: 'main' or 'test'. Defaults to 'test'.
361
+ * @param args.rootKeyHex
362
+ *
363
+ * @publicbody
364
+ */
365
+ static async createWalletKnex(args: SetupWalletKnexArgs): Promise<SetupWalletKnex> {
366
+ const wo = await Setup.createWallet(args)
367
+ const activeStorage = await Setup.createStorageKnex(args)
368
+ await wo.storage.addWalletStorageProvider(activeStorage)
369
+ const { user, isNew } = await activeStorage.findOrInsertUser(wo.identityKey)
370
+ const userId = user.userId
371
+ const r: SetupWalletKnex = {
372
+ ...wo,
373
+ activeStorage,
374
+ userId
375
+ }
376
+ return r
377
+ }
378
+
379
+ /**
380
+ * @returns {StorageKnex} - `Knex` based storage provider for a wallet. May be used for either active storage or backup storage.
381
+ */
382
+ static async createStorageKnex(args: SetupWalletKnexArgs): Promise<StorageKnex> {
383
+ // Create a temporary wallet setup to consistently resolve optional args.
384
+ const wo = await Setup.createWallet(args)
385
+ const storage = new StorageKnex({
386
+ chain: wo.chain,
387
+ knex: args.knex,
388
+ commissionSatoshis: 0,
389
+ commissionPubKeyHex: undefined,
390
+ feeModel: { model: 'sat/kb', value: 1 }
391
+ })
392
+ await storage.migrate(args.databaseName, randomBytesHex(33))
393
+ await storage.makeAvailable()
394
+ await wo.wallet.destroy()
395
+ return storage
396
+ }
397
+
398
+ /**
399
+ * @publicbody
400
+ */
401
+ static createSQLiteKnex(filename: string): Knex {
402
+ const config: Knex.Config = {
403
+ client: 'sqlite3',
404
+ connection: { filename },
405
+ useNullAsDefault: true
406
+ }
407
+ const knex = makeKnex(config)
408
+ return knex
409
+ }
410
+
411
+ /**
412
+ * @publicbody
413
+ */
414
+ static createMySQLKnex(connection: string, database?: string): Knex {
415
+ const c: Knex.MySql2ConnectionConfig = JSON.parse(connection)
416
+ if (database) {
417
+ c.database = database
418
+ }
419
+ const config: Knex.Config = {
420
+ client: 'mysql2',
421
+ connection: c,
422
+ useNullAsDefault: true,
423
+ pool: { min: 0, max: 7, idleTimeoutMillis: 15000 }
424
+ }
425
+ const knex = makeKnex(config)
426
+ return knex
427
+ }
428
+
429
+ /**
430
+ * @publicbody
431
+ */
432
+ static async createWalletMySQL(args: SetupWalletMySQLArgs): Promise<SetupWalletKnex> {
433
+ return await this.createWalletKnex({
434
+ ...args,
435
+ knex: Setup.createMySQLKnex(args.env.mySQLConnection, args.databaseName)
436
+ })
437
+ }
438
+
439
+ /**
440
+ * @publicbody
441
+ */
442
+ static async createWalletSQLite(args: SetupWalletSQLiteArgs): Promise<SetupWalletKnex> {
443
+ return await this.createWalletKnex({
444
+ ...args,
445
+ knex: Setup.createSQLiteKnex(args.filePath)
446
+ })
447
+ }
448
+ }
449
+
450
+ /**
451
+ * Arguments used by `createWallet` to construct a `SetupWallet`.
452
+ *
453
+ * Extension `SetupWalletClientArgs` used by `createWalletClient` to construct a `SetupWalletClient`.
454
+ *
455
+ * Extension `SetupWalletKnexArgs` used by `createWalletKnex` to construct a `SetupWalletKnex`.
456
+ *
457
+ * Extension `SetupWalletMySQLArgs` used by `createWalletMySQL` to construct a `SetupWalletKnex`.
458
+ *
459
+ * Extension `SetupWalletSQLiteArgs` used by `createWalletSQLite` to construct a `SetupWalletKnex`.
460
+ */
461
+ export interface SetupWalletArgs {
462
+ /**
463
+ * Configuration "secrets" typically obtained by `Setup.makeEnv` and `Setup.getEnv` functions.
464
+ */
465
+ env: SetupEnv
466
+ /**
467
+ * Optional. The non-privileged private key used to initialize the `KeyDeriver` and determine the `identityKey`.
468
+ * Defaults to `env.devKeys[env.identityKey]
469
+ */
470
+ rootKeyHex?: string
471
+ /**
472
+ * Optional. The privileged private key getter used to initialize the `PrivilegedKeyManager`.
473
+ * Defaults to undefined.
474
+ */
475
+ privilegedKeyGetter?: () => Promise<PrivateKey>
476
+ /**
477
+ * Optional. Active wallet storage. Can be added later.
478
+ */
479
+ active?: WalletStorageProvider
480
+ /**
481
+ * Optional. One or more storage providers managed as backup destinations. Can be added later.
482
+ */
483
+ backups?: WalletStorageProvider[]
484
+ }
485
+
486
+ /**
487
+ *
488
+ */
489
+ export interface SetupWalletKnexArgs extends SetupWalletArgs {
490
+ knex: Knex<any, any[]>
491
+ databaseName: string
492
+ }
493
+
494
+ /**
495
+ *
496
+ */
497
+ export interface SetupWalletMySQLArgs extends SetupWalletArgs {
498
+ databaseName: string
499
+ }
500
+
501
+ /**
502
+ *
503
+ */
504
+ export interface SetupWalletSQLiteArgs extends SetupWalletArgs {
505
+ filePath: string
506
+ databaseName: string
507
+ }
508
+
509
+ /**
510
+ *
511
+ */
512
+ export interface SetupWalletKnex extends SetupWallet {
513
+ activeStorage: StorageKnex
514
+ userId: number
515
+
516
+ rootKey: PrivateKey
517
+ identityKey: string
518
+ keyDeriver: KeyDeriverApi
519
+ chain: Chain
520
+ storage: WalletStorageManager
521
+ services: Services
522
+ monitor: Monitor
523
+ wallet: Wallet
524
+ }
525
+
526
+ /**
527
+ * `SetupEnv` provides a starting point for managing secrets that
528
+ * must not appear in source code.
529
+ *
530
+ * The `makeEnv` and `getEnv` functions of the `Setup` and `SetupClient` classes
531
+ * provide an easy way to create and import these secrets and related properties.
532
+ */
533
+ export interface SetupEnv {
534
+ /**
535
+ * The chan being accessed: 'main' for mainnet, 'test' for 'testnet'.
536
+ */
537
+ chain: Chain
538
+ /**
539
+ * The user's primary identity key (public key).
540
+ */
541
+ identityKey: string
542
+ /**
543
+ * A secondary identity key (public key), used to test exchanges with other users.
544
+ */
545
+ identityKey2: string
546
+ /**
547
+ * Filepath to sqlite file to be used for identityKey wallet.
548
+ */
549
+ filePath: string | undefined
550
+ /**
551
+ * A vaild TAAL API key for use by `Services`
552
+ */
553
+ taalApiKey: string
554
+ /**
555
+ * A map of public keys (identity keys, hex strings) to private keys (hex strings).
556
+ */
557
+ devKeys: Record<string, string>
558
+ /**
559
+ * A MySQL connection string including user and password properties.
560
+ * Must be valid to make use of MySQL `Setup` class support.
561
+ */
562
+ mySQLConnection: string
563
+ }
564
+
565
+ /**
566
+ * Extension `SetupWalletClientArgs` of `SetupWalletArgs` is used by `createWalletClient`
567
+ * to construct a `SetupWalletClient`.
568
+ */
569
+ export interface SetupWalletClientArgs extends SetupWalletArgs {
570
+ /**
571
+ * The endpoint URL of a service hosting the `StorageServer` JSON-RPC service to
572
+ * which a `StorageClient` instance should connect to function as
573
+ * the active storage provider of the newly created wallet.
574
+ */
575
+ endpointUrl?: string
576
+ }
577
+ function randomBytesHex(arg0: number): string {
578
+ throw new Error('Function not implemented.')
579
+ }