@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,526 @@
1
+ import {
2
+ WalletInterface,
3
+ OriginatorDomainNameStringUnder250Bytes,
4
+ GetPublicKeyArgs,
5
+ GetPublicKeyResult,
6
+ RevealCounterpartyKeyLinkageArgs,
7
+ RevealCounterpartyKeyLinkageResult,
8
+ RevealSpecificKeyLinkageArgs,
9
+ RevealSpecificKeyLinkageResult,
10
+ WalletEncryptArgs,
11
+ WalletEncryptResult,
12
+ WalletDecryptArgs,
13
+ WalletDecryptResult,
14
+ CreateHmacArgs,
15
+ CreateHmacResult,
16
+ VerifyHmacArgs,
17
+ VerifyHmacResult,
18
+ CreateSignatureArgs,
19
+ CreateSignatureResult,
20
+ VerifySignatureArgs,
21
+ VerifySignatureResult,
22
+ CreateActionArgs,
23
+ CreateActionResult,
24
+ SignActionArgs,
25
+ SignActionResult,
26
+ AbortActionArgs,
27
+ AbortActionResult,
28
+ ListActionsArgs,
29
+ ListActionsResult,
30
+ InternalizeActionArgs,
31
+ InternalizeActionResult,
32
+ ListOutputsArgs,
33
+ ListOutputsResult,
34
+ RelinquishOutputArgs,
35
+ RelinquishOutputResult,
36
+ AcquireCertificateArgs,
37
+ AcquireCertificateResult,
38
+ ListCertificatesArgs,
39
+ ListCertificatesResult,
40
+ ProveCertificateArgs,
41
+ ProveCertificateResult,
42
+ RelinquishCertificateArgs,
43
+ RelinquishCertificateResult,
44
+ DiscoverByIdentityKeyArgs,
45
+ DiscoverByAttributesArgs,
46
+ DiscoverCertificatesResult,
47
+ AuthenticatedResult,
48
+ GetHeightResult,
49
+ GetHeaderArgs,
50
+ GetHeaderResult,
51
+ GetNetworkResult,
52
+ GetVersionResult,
53
+ Utils,
54
+ Random,
55
+ SymmetricKey,
56
+ PrivateKey
57
+ } from '@bsv/sdk'
58
+ import { PrivilegedKeyManager } from './sdk/PrivilegedKeyManager'
59
+
60
+ /**
61
+ * SimpleWalletManager is a slimmed-down wallet manager that only requires two things to authenticate:
62
+ * 1. A primary key (32 bytes), which represents the core secret for the wallet.
63
+ * 2. A privileged key manager (an instance of `PrivilegedKeyManager`), responsible for
64
+ * more sensitive operations.
65
+ *
66
+ * Once both pieces are provided (or if a snapshot containing the primary key is loaded,
67
+ * and the privileged key manager is provided separately), the wallet becomes authenticated.
68
+ *
69
+ * After authentication, calls to the standard wallet methods (`createAction`, `signAction`, etc.)
70
+ * are proxied to an underlying `WalletInterface` instance returned by a user-supplied `walletBuilder`.
71
+ *
72
+ * **Important**: This manager does not handle user password flows, recovery, or on-chain
73
+ * token management. It is a straightforward wrapper that ensures the user has provided
74
+ * both their main secret (primary key) and a privileged key manager before allowing usage.
75
+ *
76
+ * It also prevents calls from the special "admin originator" from being used externally.
77
+ * (Any call that tries to use the admin originator as its originator, other than the manager itself,
78
+ * will result in an error, ensuring that only internal operations can use that originator.)
79
+ *
80
+ * The manager can also save and load snapshots of its state. In this simplified version,
81
+ * the snapshot only contains the primary key. If you load a snapshot, you still need to
82
+ * re-provide the privileged key manager to complete authentication.
83
+ */
84
+ export class SimpleWalletManager implements WalletInterface {
85
+ /**
86
+ * Whether the user is currently authenticated (meaning both the primary key
87
+ * and privileged key manager have been provided).
88
+ */
89
+ authenticated: boolean
90
+
91
+ /**
92
+ * The domain name of the administrative originator (wallet operator / vendor, or your own).
93
+ */
94
+ private adminOriginator: OriginatorDomainNameStringUnder250Bytes
95
+
96
+ /**
97
+ * A function that, given the user's primary key and privileged key manager,
98
+ * returns a new `WalletInterface` instance that handles the actual signing,
99
+ * encryption, transaction building, etc.
100
+ */
101
+ private walletBuilder: (primaryKey: number[], privilegedKeyManager: PrivilegedKeyManager) => Promise<WalletInterface>
102
+
103
+ /**
104
+ * The underlying wallet instance that is built once authenticated.
105
+ */
106
+ private underlying?: WalletInterface
107
+
108
+ /**
109
+ * The privileged key manager, responsible for sensitive tasks.
110
+ */
111
+ private underlyingPrivilegedKeyManager?: PrivilegedKeyManager
112
+
113
+ /**
114
+ * The primary key (32 bytes) that unlocks the wallet functionality.
115
+ */
116
+ private primaryKey?: number[]
117
+
118
+ /**
119
+ * Constructs a new `SimpleWalletManager`.
120
+ *
121
+ * @param adminOriginator The domain name of the administrative originator.
122
+ * @param walletBuilder A function that, given a primary key and privileged key manager,
123
+ * returns a fully functional `WalletInterface`.
124
+ * @param stateSnapshot If provided, a previously saved snapshot of the wallet's state.
125
+ * If the snapshot contains a primary key, it will be loaded immediately
126
+ * (though you will still need to provide a privileged key manager to authenticate).
127
+ */
128
+ constructor(
129
+ adminOriginator: OriginatorDomainNameStringUnder250Bytes,
130
+ walletBuilder: (primaryKey: number[], privilegedKeyManager: PrivilegedKeyManager) => Promise<WalletInterface>,
131
+ stateSnapshot?: number[]
132
+ ) {
133
+ this.authenticated = false
134
+ this.adminOriginator = adminOriginator
135
+ this.walletBuilder = walletBuilder
136
+
137
+ if (stateSnapshot) {
138
+ this.loadSnapshot(stateSnapshot)
139
+ }
140
+ }
141
+
142
+ /**
143
+ * Provides the primary key (32 bytes) needed for authentication.
144
+ * If a privileged key manager has already been provided, we attempt to build
145
+ * the underlying wallet. Otherwise, we wait until the manager is also provided.
146
+ *
147
+ * @param key A 32-byte primary key.
148
+ */
149
+ async providePrimaryKey(key: number[]): Promise<void> {
150
+ this.primaryKey = key
151
+ await this.tryBuildUnderlying()
152
+ }
153
+
154
+ /**
155
+ * Provides the privileged key manager needed for sensitive tasks.
156
+ * If a primary key has already been provided (or loaded from a snapshot),
157
+ * we attempt to build the underlying wallet. Otherwise, we wait until the key is provided.
158
+ *
159
+ * @param manager An instance of `PrivilegedKeyManager`.
160
+ */
161
+ async providePrivilegedKeyManager(manager: PrivilegedKeyManager): Promise<void> {
162
+ this.underlyingPrivilegedKeyManager = manager
163
+ await this.tryBuildUnderlying()
164
+ }
165
+
166
+ /**
167
+ * Internal method that checks if we have both the primary key and privileged manager.
168
+ * If so, we build the underlying wallet instance and become authenticated.
169
+ */
170
+ private async tryBuildUnderlying(): Promise<void> {
171
+ if (this.authenticated) {
172
+ throw new Error('The user is already authenticated.')
173
+ }
174
+ if (!this.primaryKey || !this.underlyingPrivilegedKeyManager) {
175
+ return
176
+ }
177
+ // Build the underlying wallet:
178
+ this.underlying = await this.walletBuilder(this.primaryKey, this.underlyingPrivilegedKeyManager)
179
+ this.authenticated = true
180
+ }
181
+
182
+ /**
183
+ * Destroys the underlying wallet, returning to a default (unauthenticated) state.
184
+ *
185
+ * This clears the primary key, the privileged key manager, and the `authenticated` flag.
186
+ */
187
+ destroy(): void {
188
+ this.underlying = undefined
189
+ this.underlyingPrivilegedKeyManager = undefined
190
+ this.authenticated = false
191
+ this.primaryKey = undefined
192
+ }
193
+
194
+ /**
195
+ * Saves the current wallet state (including just the primary key)
196
+ * into an encrypted snapshot. This snapshot can be stored and later
197
+ * passed to `loadSnapshot` to restore the primary key (and partially authenticate).
198
+ *
199
+ * **Note**: The snapshot does NOT include the privileged key manager.
200
+ * You must still provide that separately after loading the snapshot
201
+ * in order to complete authentication.
202
+ *
203
+ * @remarks
204
+ * Storing the snapshot (which contains the primary key) provides a significant
205
+ * portion of the wallet's secret material. It must be protected carefully.
206
+ *
207
+ * @returns A byte array representing the encrypted snapshot.
208
+ * @throws {Error} if no primary key is currently set.
209
+ */
210
+ saveSnapshot(): number[] {
211
+ if (!this.primaryKey) {
212
+ throw new Error('No primary key is set; cannot save snapshot.')
213
+ }
214
+
215
+ // Generate a random snapshot encryption key:
216
+ const snapshotKey = Random(32)
217
+
218
+ // For this simple wallet manager, we only store the primary key.
219
+ const writer = new Utils.Writer()
220
+ // Write a 1-byte version:
221
+ writer.writeUInt8(1)
222
+ // Write a varint length and then the primary key bytes:
223
+ writer.writeVarIntNum(this.primaryKey.length)
224
+ writer.write(this.primaryKey)
225
+
226
+ const snapshotPreimage = writer.toArray()
227
+
228
+ // Encrypt the data with the snapshotKey:
229
+ const encryptedPayload = new SymmetricKey(snapshotKey).encrypt(snapshotPreimage) as number[]
230
+
231
+ // Build the final snapshot: [ snapshotKey (32 bytes) + encryptedPayload ]
232
+ const snapshotWriter = new Utils.Writer()
233
+ snapshotWriter.write(snapshotKey)
234
+ snapshotWriter.write(encryptedPayload)
235
+
236
+ return snapshotWriter.toArray()
237
+ }
238
+
239
+ /**
240
+ * Loads a previously saved state snapshot (produced by `saveSnapshot`).
241
+ * This will restore the primary key but will **not** restore the privileged key manager
242
+ * (that must be provided separately to complete authentication).
243
+ *
244
+ * @param snapshot A byte array that was previously returned by `saveSnapshot`.
245
+ * @throws {Error} If the snapshot format is invalid or decryption fails.
246
+ */
247
+ async loadSnapshot(snapshot: number[]): Promise<void> {
248
+ try {
249
+ const reader = new Utils.Reader(snapshot)
250
+
251
+ // First 32 bytes is the snapshotKey:
252
+ const snapshotKey = reader.read(32)
253
+
254
+ // The rest is the encrypted payload:
255
+ const encryptedPayload = reader.read()
256
+
257
+ // Decrypt the payload with the snapshotKey:
258
+ const decrypted = new SymmetricKey(snapshotKey).decrypt(encryptedPayload) as number[]
259
+
260
+ const payloadReader = new Utils.Reader(decrypted)
261
+
262
+ // Check version:
263
+ const version = payloadReader.readUInt8()
264
+ if (version !== 1) {
265
+ throw new Error(`Unsupported snapshot version: ${version}`)
266
+ }
267
+
268
+ // Read the varint length and the primary key:
269
+ const pkLength = payloadReader.readVarIntNum()
270
+ const pk = payloadReader.read(pkLength)
271
+
272
+ this.primaryKey = pk
273
+
274
+ // Attempt to build the underlying wallet if the privileged manager is already provided:
275
+ await this.tryBuildUnderlying()
276
+ } catch (error) {
277
+ throw new Error(`Failed to load snapshot: ${(error as Error).message}`)
278
+ }
279
+ }
280
+
281
+ /**
282
+ * Returns whether the user is currently authenticated (the wallet has a primary key
283
+ * and a privileged key manager). If not authenticated, an error is thrown.
284
+ *
285
+ * @param _ Not used in this manager.
286
+ * @param originator The originator domain, which must not be the admin originator.
287
+ * @throws If not authenticated, or if the originator is the admin.
288
+ */
289
+ async isAuthenticated(_: {}, originator?: OriginatorDomainNameStringUnder250Bytes): Promise<AuthenticatedResult> {
290
+ this.ensureCanCall(originator)
291
+ return { authenticated: true }
292
+ }
293
+
294
+ /**
295
+ * Blocks until the user is authenticated (by providing primaryKey and privileged manager).
296
+ * If not authenticated yet, it waits until that occurs.
297
+ *
298
+ * @param _ Not used in this manager.
299
+ * @param originator The originator domain, which must not be the admin originator.
300
+ * @throws If the originator is the admin.
301
+ */
302
+ async waitForAuthentication(
303
+ _: {},
304
+ originator?: OriginatorDomainNameStringUnder250Bytes
305
+ ): Promise<AuthenticatedResult> {
306
+ if (originator === this.adminOriginator) {
307
+ throw new Error('External applications cannot use the admin originator.')
308
+ }
309
+ while (!this.authenticated) {
310
+ await new Promise(resolve => setTimeout(resolve, 100))
311
+ }
312
+ return { authenticated: true }
313
+ }
314
+
315
+ async getPublicKey(
316
+ args: GetPublicKeyArgs,
317
+ originator?: OriginatorDomainNameStringUnder250Bytes
318
+ ): Promise<GetPublicKeyResult> {
319
+ this.ensureCanCall(originator)
320
+ return this.underlying!.getPublicKey(args, originator)
321
+ }
322
+
323
+ async revealCounterpartyKeyLinkage(
324
+ args: RevealCounterpartyKeyLinkageArgs,
325
+ originator?: OriginatorDomainNameStringUnder250Bytes
326
+ ): Promise<RevealCounterpartyKeyLinkageResult> {
327
+ this.ensureCanCall(originator)
328
+ return this.underlying!.revealCounterpartyKeyLinkage(args, originator)
329
+ }
330
+
331
+ async revealSpecificKeyLinkage(
332
+ args: RevealSpecificKeyLinkageArgs,
333
+ originator?: OriginatorDomainNameStringUnder250Bytes
334
+ ): Promise<RevealSpecificKeyLinkageResult> {
335
+ this.ensureCanCall(originator)
336
+ return this.underlying!.revealSpecificKeyLinkage(args, originator)
337
+ }
338
+
339
+ async encrypt(
340
+ args: WalletEncryptArgs,
341
+ originator?: OriginatorDomainNameStringUnder250Bytes
342
+ ): Promise<WalletEncryptResult> {
343
+ this.ensureCanCall(originator)
344
+ return this.underlying!.encrypt(args, originator)
345
+ }
346
+
347
+ async decrypt(
348
+ args: WalletDecryptArgs,
349
+ originator?: OriginatorDomainNameStringUnder250Bytes
350
+ ): Promise<WalletDecryptResult> {
351
+ this.ensureCanCall(originator)
352
+ return this.underlying!.decrypt(args, originator)
353
+ }
354
+
355
+ async createHmac(
356
+ args: CreateHmacArgs,
357
+ originator?: OriginatorDomainNameStringUnder250Bytes
358
+ ): Promise<CreateHmacResult> {
359
+ this.ensureCanCall(originator)
360
+ return this.underlying!.createHmac(args, originator)
361
+ }
362
+
363
+ async verifyHmac(
364
+ args: VerifyHmacArgs,
365
+ originator?: OriginatorDomainNameStringUnder250Bytes
366
+ ): Promise<VerifyHmacResult> {
367
+ this.ensureCanCall(originator)
368
+ return this.underlying!.verifyHmac(args, originator)
369
+ }
370
+
371
+ async createSignature(
372
+ args: CreateSignatureArgs,
373
+ originator?: OriginatorDomainNameStringUnder250Bytes
374
+ ): Promise<CreateSignatureResult> {
375
+ this.ensureCanCall(originator)
376
+ return this.underlying!.createSignature(args, originator)
377
+ }
378
+
379
+ async verifySignature(
380
+ args: VerifySignatureArgs,
381
+ originator?: OriginatorDomainNameStringUnder250Bytes
382
+ ): Promise<VerifySignatureResult> {
383
+ this.ensureCanCall(originator)
384
+ return this.underlying!.verifySignature(args, originator)
385
+ }
386
+
387
+ async createAction(
388
+ args: CreateActionArgs,
389
+ originator?: OriginatorDomainNameStringUnder250Bytes
390
+ ): Promise<CreateActionResult> {
391
+ this.ensureCanCall(originator)
392
+ return this.underlying!.createAction(args, originator)
393
+ }
394
+
395
+ async signAction(
396
+ args: SignActionArgs,
397
+ originator?: OriginatorDomainNameStringUnder250Bytes
398
+ ): Promise<SignActionResult> {
399
+ this.ensureCanCall(originator)
400
+ return this.underlying!.signAction(args, originator)
401
+ }
402
+
403
+ async abortAction(
404
+ args: AbortActionArgs,
405
+ originator?: OriginatorDomainNameStringUnder250Bytes
406
+ ): Promise<AbortActionResult> {
407
+ this.ensureCanCall(originator)
408
+ return this.underlying!.abortAction(args, originator)
409
+ }
410
+
411
+ async listActions(
412
+ args: ListActionsArgs,
413
+ originator?: OriginatorDomainNameStringUnder250Bytes
414
+ ): Promise<ListActionsResult> {
415
+ this.ensureCanCall(originator)
416
+ return this.underlying!.listActions(args, originator)
417
+ }
418
+
419
+ async internalizeAction(
420
+ args: InternalizeActionArgs,
421
+ originator?: OriginatorDomainNameStringUnder250Bytes
422
+ ): Promise<InternalizeActionResult> {
423
+ this.ensureCanCall(originator)
424
+ return this.underlying!.internalizeAction(args, originator)
425
+ }
426
+
427
+ async listOutputs(
428
+ args: ListOutputsArgs,
429
+ originator?: OriginatorDomainNameStringUnder250Bytes
430
+ ): Promise<ListOutputsResult> {
431
+ this.ensureCanCall(originator)
432
+ return this.underlying!.listOutputs(args, originator)
433
+ }
434
+
435
+ async relinquishOutput(
436
+ args: RelinquishOutputArgs,
437
+ originator?: OriginatorDomainNameStringUnder250Bytes
438
+ ): Promise<RelinquishOutputResult> {
439
+ this.ensureCanCall(originator)
440
+ return this.underlying!.relinquishOutput(args, originator)
441
+ }
442
+
443
+ async acquireCertificate(
444
+ args: AcquireCertificateArgs,
445
+ originator?: OriginatorDomainNameStringUnder250Bytes
446
+ ): Promise<AcquireCertificateResult> {
447
+ this.ensureCanCall(originator)
448
+ return this.underlying!.acquireCertificate(args, originator)
449
+ }
450
+
451
+ async listCertificates(
452
+ args: ListCertificatesArgs,
453
+ originator?: OriginatorDomainNameStringUnder250Bytes
454
+ ): Promise<ListCertificatesResult> {
455
+ this.ensureCanCall(originator)
456
+ return this.underlying!.listCertificates(args, originator)
457
+ }
458
+
459
+ async proveCertificate(
460
+ args: ProveCertificateArgs,
461
+ originator?: OriginatorDomainNameStringUnder250Bytes
462
+ ): Promise<ProveCertificateResult> {
463
+ this.ensureCanCall(originator)
464
+ return this.underlying!.proveCertificate(args, originator)
465
+ }
466
+
467
+ async relinquishCertificate(
468
+ args: RelinquishCertificateArgs,
469
+ originator?: OriginatorDomainNameStringUnder250Bytes
470
+ ): Promise<RelinquishCertificateResult> {
471
+ this.ensureCanCall(originator)
472
+ return this.underlying!.relinquishCertificate(args, originator)
473
+ }
474
+
475
+ async discoverByIdentityKey(
476
+ args: DiscoverByIdentityKeyArgs,
477
+ originator?: OriginatorDomainNameStringUnder250Bytes
478
+ ): Promise<DiscoverCertificatesResult> {
479
+ this.ensureCanCall(originator)
480
+ return this.underlying!.discoverByIdentityKey(args, originator)
481
+ }
482
+
483
+ async discoverByAttributes(
484
+ args: DiscoverByAttributesArgs,
485
+ originator?: OriginatorDomainNameStringUnder250Bytes
486
+ ): Promise<DiscoverCertificatesResult> {
487
+ this.ensureCanCall(originator)
488
+ return this.underlying!.discoverByAttributes(args, originator)
489
+ }
490
+
491
+ async getHeight(_: {}, originator?: OriginatorDomainNameStringUnder250Bytes): Promise<GetHeightResult> {
492
+ this.ensureCanCall(originator)
493
+ return this.underlying!.getHeight({}, originator)
494
+ }
495
+
496
+ async getHeaderForHeight(
497
+ args: GetHeaderArgs,
498
+ originator?: OriginatorDomainNameStringUnder250Bytes
499
+ ): Promise<GetHeaderResult> {
500
+ this.ensureCanCall(originator)
501
+ return this.underlying!.getHeaderForHeight(args, originator)
502
+ }
503
+
504
+ async getNetwork(_: {}, originator?: OriginatorDomainNameStringUnder250Bytes): Promise<GetNetworkResult> {
505
+ this.ensureCanCall(originator)
506
+ return this.underlying!.getNetwork({}, originator)
507
+ }
508
+
509
+ async getVersion(_: {}, originator?: OriginatorDomainNameStringUnder250Bytes): Promise<GetVersionResult> {
510
+ this.ensureCanCall(originator)
511
+ return this.underlying!.getVersion({}, originator)
512
+ }
513
+
514
+ /**
515
+ * A small helper that throws if the user is not authenticated or if the
516
+ * provided originator is the admin (which is not permitted externally).
517
+ */
518
+ private ensureCanCall(originator?: OriginatorDomainNameStringUnder250Bytes) {
519
+ if (originator === this.adminOriginator) {
520
+ throw new Error('External applications cannot use the admin originator.')
521
+ }
522
+ if (!this.authenticated) {
523
+ throw new Error('User is not authenticated.')
524
+ }
525
+ }
526
+ }