@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,353 @@
1
+ import { createSyncMap, sdk, SyncMap, TableCertificate, TableCertificateField } from '../../../../../src'
2
+ import { TestUtilsWalletStorage as _tu, TestWalletNoSetup } from '../../../../../test/utils/TestUtilsWalletStorage'
3
+ import { EntityCertificateField } from '../EntityCertificateField'
4
+
5
+ describe('CertificateField class method tests', () => {
6
+ jest.setTimeout(99999999)
7
+
8
+ const env = _tu.getEnv('test')
9
+ const ctxs: TestWalletNoSetup[] = []
10
+ const ctxs2: TestWalletNoSetup[] = []
11
+
12
+ beforeAll(async () => {
13
+ if (env.runMySQL) {
14
+ ctxs.push(await _tu.createLegacyWalletMySQLCopy('CertificateFieldTests'))
15
+ ctxs2.push(await _tu.createLegacyWalletMySQLCopy('CertificateFieldTests2'))
16
+ }
17
+ ctxs.push(await _tu.createLegacyWalletSQLiteCopy('CertificateFieldTests'))
18
+ ctxs2.push(await _tu.createLegacyWalletSQLiteCopy('CertificateFieldTests2'))
19
+ })
20
+
21
+ afterAll(async () => {
22
+ for (const ctx of ctxs) {
23
+ await ctx.storage.destroy()
24
+ }
25
+ for (const ctx of ctxs2) {
26
+ await ctx.storage.destroy()
27
+ }
28
+ })
29
+
30
+ test('0_equals identifies matching CertificateField entities', async () => {
31
+ for (const { activeStorage } of ctxs) {
32
+ // Insert a valid Certificate to satisfy foreign key constraints
33
+ const now = new Date()
34
+ const certificateId = 300 // Ensure this ID is unique in the `certificates` table
35
+ const certificateData: TableCertificate = {
36
+ certificateId,
37
+ created_at: now,
38
+ updated_at: now,
39
+ userId: 1,
40
+ type: Buffer.from('exampleType').toString('base64'), // Base64-encoded string
41
+ serialNumber: Buffer.from('serial123').toString('base64'), // Base64-encoded string
42
+ certifier: '02c123eabcdeff1234567890abcdef1234567890abcdef1234567890abcdef1234', // PubKeyHex
43
+ subject: '02c123eabcdeff1234567890abcdef1234567890abcdef1234567890abcdef5678', // PubKeyHex
44
+ revocationOutpoint: 'abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890:0', // OutpointString
45
+ signature: 'abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890', // HexString
46
+ isDeleted: false
47
+ }
48
+
49
+ await activeStorage.insertCertificate(certificateData)
50
+
51
+ // Insert initial CertificateField record
52
+ const initialData: TableCertificateField = {
53
+ certificateId,
54
+ created_at: now,
55
+ updated_at: now,
56
+ userId: 1,
57
+ fieldName: 'field1',
58
+ fieldValue: 'value1',
59
+ masterKey: 'masterKey1'
60
+ }
61
+ await activeStorage.insertCertificateField(initialData)
62
+
63
+ // Create two CertificateField entities from the same data
64
+ const entity1 = new EntityCertificateField(initialData)
65
+ const entity2 = new EntityCertificateField(initialData)
66
+
67
+ // Create a valid SyncMap
68
+ const syncMap = createSyncMap()
69
+ syncMap.certificate.idMap[certificateId] = certificateId
70
+
71
+ // Test: equals returns true for identical entities without SyncMap
72
+ expect(entity1.equals(entity2.toApi())).toBe(true)
73
+
74
+ // Test: equals returns true for identical entities with SyncMap
75
+ expect(entity1.equals(entity2.toApi(), syncMap)).toBe(true)
76
+ }
77
+ })
78
+
79
+ test('1_equals identifies non-matching CertificateField entities', async () => {
80
+ for (const { activeStorage } of ctxs) {
81
+ // Insert a valid Certificate to satisfy foreign key constraints
82
+ const now = new Date()
83
+ const certificateId1 = 301 // Ensure this ID is unique in the `certificates` table
84
+ const certificateId2 = 302
85
+
86
+ // Adjusted certificate data for uniqueness
87
+ await activeStorage.insertCertificate({
88
+ certificateId: certificateId1,
89
+ created_at: now,
90
+ updated_at: now,
91
+ userId: 1,
92
+ type: Buffer.from('exampleType1').toString('base64'), // Unique Base64-encoded string
93
+ serialNumber: Buffer.from('serial123-1').toString('base64'), // Unique Base64-encoded string
94
+ certifier: '02c123eabcdeff1234567890abcdef1234567890abcdef1234567890abcdef1234', // Same PubKeyHex
95
+ subject: '02c123eabcdeff1234567890abcdef1234567890abcdef1234567890abcdef5678', // Same PubKeyHex
96
+ revocationOutpoint: 'abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890:0', // Same OutpointString
97
+ signature: 'abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890', // Same HexString
98
+ isDeleted: false
99
+ })
100
+
101
+ await activeStorage.insertCertificate({
102
+ certificateId: certificateId2,
103
+ created_at: now,
104
+ updated_at: now,
105
+ userId: 1,
106
+ type: Buffer.from('exampleType2').toString('base64'), // Unique Base64-encoded string
107
+ serialNumber: Buffer.from('serial123-2').toString('base64'), // Unique Base64-encoded string
108
+ certifier: '02c123eabcdeff1234567890abcdef1234567890abcdef1234567890abcdef5678', // Same PubKeyHex
109
+ subject: '02c123eabcdeff1234567890abcdef1234567890abcdef1234567890abcdef5678', // Same PubKeyHex
110
+ revocationOutpoint: 'abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890:1', // Unique OutpointString
111
+ signature: 'abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890', // Same HexString
112
+ isDeleted: false
113
+ })
114
+
115
+ // Insert initial CertificateField record
116
+ const initialData: TableCertificateField = {
117
+ certificateId: certificateId1,
118
+ created_at: now,
119
+ updated_at: now,
120
+ userId: 1,
121
+ fieldName: 'field1',
122
+ fieldValue: 'value1',
123
+ masterKey: 'masterKey1'
124
+ }
125
+ await activeStorage.insertCertificateField(initialData)
126
+
127
+ // Create a CertificateField entity from the initial data
128
+ const entity1 = new EntityCertificateField(initialData)
129
+
130
+ // Create mismatched entities and test each condition
131
+ const mismatchedEntities: Partial<TableCertificateField>[] = [
132
+ { certificateId: certificateId2 }, // Requires valid certificate
133
+ { fieldName: 'field2' },
134
+ { fieldValue: 'value2' },
135
+ { masterKey: 'masterKey2' }
136
+ ]
137
+
138
+ for (const mismatch of mismatchedEntities) {
139
+ const mismatchedEntity = new EntityCertificateField({
140
+ ...initialData,
141
+ ...mismatch
142
+ })
143
+ expect(entity1.equals(mismatchedEntity.toApi())).toBe(false)
144
+
145
+ // Test with SyncMap, where certificateId is resolved
146
+ const syncMap = createSyncMap()
147
+ syncMap.certificate.idMap[certificateId1] = certificateId1
148
+ syncMap.certificate.idMap[certificateId2] = certificateId2
149
+
150
+ expect(entity1.equals(mismatchedEntity.toApi(), syncMap)).toBe(false)
151
+ }
152
+ }
153
+ })
154
+
155
+ test('mergeExisting updates entity and database when ei.updated_at > this.updated_at', async () => {
156
+ for (const { activeStorage } of ctxs) {
157
+ // Insert a valid Certificate to satisfy foreign key constraints
158
+ const now = new Date()
159
+ const certificateId = 400
160
+ await activeStorage.insertCertificate({
161
+ certificateId,
162
+ created_at: now,
163
+ updated_at: now,
164
+ userId: 1,
165
+ type: Buffer.from('exampleTypeMerge').toString('base64'),
166
+ serialNumber: Buffer.from('serialMerge123').toString('base64'),
167
+ certifier: '02c123eabcdeff1234567890abcdef1234567890abcdef1234567890abcdef1234',
168
+ subject: '02c123eabcdeff1234567890abcdef1234567890abcdef1234567890abcdef5678',
169
+ revocationOutpoint: 'abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890:0',
170
+ signature: 'abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890',
171
+ isDeleted: false
172
+ })
173
+
174
+ // Insert the initial CertificateField record
175
+ const initialData: TableCertificateField = {
176
+ certificateId,
177
+ created_at: now,
178
+ updated_at: now,
179
+ userId: 1,
180
+ fieldName: 'field1',
181
+ fieldValue: 'value1',
182
+ masterKey: 'masterKey1'
183
+ }
184
+ await activeStorage.insertCertificateField(initialData)
185
+
186
+ // Create a CertificateField entity from the initial data
187
+ const entity = new EntityCertificateField(initialData)
188
+
189
+ // Simulate the `ei` argument with a later `updated_at`
190
+ const updatedData: TableCertificateField = {
191
+ ...initialData,
192
+ updated_at: new Date(now.getTime() + 1000), // Later timestamp
193
+ fieldValue: 'updatedValue',
194
+ masterKey: 'updatedMasterKey'
195
+ }
196
+
197
+ const syncMap = createSyncMap()
198
+ syncMap.certificate.idMap[certificateId] = certificateId
199
+
200
+ // Call mergeExisting
201
+ const wasMergedRaw = await entity.mergeExisting(
202
+ activeStorage,
203
+ undefined, // `since` is not used in this method
204
+ updatedData,
205
+ syncMap,
206
+ undefined // `trx` is not used
207
+ )
208
+
209
+ const wasMerged = Boolean(wasMergedRaw)
210
+
211
+ // Verify that wasMerged is true
212
+ expect(wasMerged).toBe(true)
213
+
214
+ // Verify that the entity is updated
215
+ expect(entity.fieldValue).toBe('updatedValue')
216
+ expect(entity.masterKey).toBe('updatedMasterKey')
217
+
218
+ // Verify that the database is updated
219
+ const updatedRecord = await activeStorage.findCertificateFields({
220
+ partial: { certificateId, fieldName: 'field1' }
221
+ })
222
+ expect(updatedRecord.length).toBe(1)
223
+ expect(updatedRecord[0]).toBeDefined()
224
+ expect(updatedRecord[0].fieldValue).toBe('updatedValue')
225
+ expect(updatedRecord[0].masterKey).toBe('updatedMasterKey')
226
+ }
227
+ })
228
+
229
+ test('mergeExisting does not update entity when ei.updated_at <= this.updated_at', async () => {
230
+ for (const { activeStorage } of ctxs) {
231
+ // Insert a valid Certificate to satisfy foreign key constraints
232
+ const now = new Date()
233
+ const certificateId = 401
234
+ await activeStorage.insertCertificate({
235
+ certificateId,
236
+ created_at: now,
237
+ updated_at: now,
238
+ userId: 1,
239
+ type: Buffer.from('exampleTypeNoMerge').toString('base64'),
240
+ serialNumber: Buffer.from('serialNoMerge123').toString('base64'),
241
+ certifier: '02c123eabcdeff1234567890abcdef1234567890abcdef1234567890abcdef1234',
242
+ subject: '02c123eabcdeff1234567890abcdef1234567890abcdef1234567890abcdef5678',
243
+ revocationOutpoint: 'abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890:0',
244
+ signature: 'abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890',
245
+ isDeleted: false
246
+ })
247
+
248
+ // Insert the initial CertificateField record
249
+ const initialData: TableCertificateField = {
250
+ certificateId,
251
+ created_at: now,
252
+ updated_at: now,
253
+ userId: 1,
254
+ fieldName: 'field1',
255
+ fieldValue: 'value1',
256
+ masterKey: 'masterKey1'
257
+ }
258
+ await activeStorage.insertCertificateField(initialData)
259
+
260
+ // Create a CertificateField entity from the initial data
261
+ const entity = new EntityCertificateField(initialData)
262
+
263
+ // Simulate the `ei` argument with the same `updated_at`
264
+ const sameUpdatedData: TableCertificateField = {
265
+ ...initialData,
266
+ updated_at: now, // Same timestamp
267
+ fieldValue: 'unchangedValue',
268
+ masterKey: 'unchangedMasterKey'
269
+ }
270
+
271
+ const syncMap = createSyncMap()
272
+ syncMap.certificate.idMap[certificateId] = certificateId
273
+
274
+ // Call mergeExisting
275
+ const wasMergedRaw = await entity.mergeExisting(
276
+ activeStorage,
277
+ undefined, // `since` is not used
278
+ sameUpdatedData,
279
+ syncMap,
280
+ undefined // `trx` is not used
281
+ )
282
+
283
+ const wasMerged = Boolean(wasMergedRaw)
284
+
285
+ // Verify that wasMerged is false
286
+ expect(wasMerged).toBe(false)
287
+
288
+ // Verify that the entity is not updated
289
+ expect(entity.fieldValue).toBe('value1')
290
+ expect(entity.masterKey).toBe('masterKey1')
291
+
292
+ // Verify that the database is not updated
293
+ const unchangedRecord = await activeStorage.findCertificateFields({
294
+ partial: { certificateId, fieldName: 'field1' }
295
+ })
296
+ expect(unchangedRecord.length).toBe(1)
297
+ expect(unchangedRecord[0]).toBeDefined()
298
+ expect(unchangedRecord[0].fieldValue).toBe('value1')
299
+ expect(unchangedRecord[0].masterKey).toBe('masterKey1')
300
+ }
301
+ })
302
+
303
+ test('CertificateField getters and setters', async () => {
304
+ const now = new Date()
305
+
306
+ // Initial data for the test
307
+ const initialData: TableCertificateField = {
308
+ userId: 1,
309
+ certificateId: 500,
310
+ created_at: now,
311
+ updated_at: now,
312
+ fieldName: 'fieldName1',
313
+ fieldValue: 'fieldValue1',
314
+ masterKey: 'masterKey1'
315
+ }
316
+
317
+ // Create a CertificateField entity
318
+ const entity = new EntityCertificateField(initialData)
319
+
320
+ // Validate getters
321
+ expect(entity.userId).toBe(1)
322
+ expect(entity.certificateId).toBe(500)
323
+ expect(entity.created_at).toEqual(now)
324
+ expect(entity.updated_at).toEqual(now)
325
+ expect(entity.fieldName).toBe('fieldName1')
326
+ expect(entity.fieldValue).toBe('fieldValue1')
327
+ expect(entity.masterKey).toBe('masterKey1')
328
+
329
+ // Validate overridden properties
330
+ expect(() => entity.id).toThrowError('entity has no "id" value')
331
+ expect(entity.entityName).toBe('certificateField')
332
+ expect(entity.entityTable).toBe('certificate_fields')
333
+
334
+ // Validate setters
335
+ const newDate = new Date(now.getTime() + 1000)
336
+ entity.userId = 2
337
+ entity.certificateId = 600
338
+ entity.created_at = new Date('2025-01-01')
339
+ entity.updated_at = newDate
340
+ entity.fieldName = 'updatedFieldName'
341
+ entity.fieldValue = 'updatedFieldValue'
342
+ entity.masterKey = 'updatedMasterKey'
343
+
344
+ // Assert the updated values
345
+ expect(entity.userId).toBe(2)
346
+ expect(entity.certificateId).toBe(600)
347
+ expect(entity.created_at).toEqual(new Date('2025-01-01'))
348
+ expect(entity.updated_at).toEqual(newDate)
349
+ expect(entity.fieldName).toBe('updatedFieldName')
350
+ expect(entity.fieldValue).toBe('updatedFieldValue')
351
+ expect(entity.masterKey).toBe('updatedMasterKey')
352
+ })
353
+ })