@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.
- package/.claude/settings.local.json +10 -0
- package/.env.template +22 -0
- package/.github/ISSUE_TEMPLATE/bug_report.md +40 -0
- package/.github/ISSUE_TEMPLATE/discussion.md +24 -0
- package/.github/pull_request_template.md +22 -0
- package/.github/workflows/push.yaml +145 -0
- package/.prettierrc +10 -0
- package/CHANGELOG.md +280 -0
- package/CONTRIBUTING.md +89 -0
- package/README.md +43 -0
- package/docs/README.md +85 -0
- package/docs/client.md +19627 -0
- package/docs/monitor.md +953 -0
- package/docs/open-rpc/index.html +46 -0
- package/docs/services.md +6377 -0
- package/docs/setup.md +1268 -0
- package/docs/storage.md +5367 -0
- package/docs/wallet.md +19626 -0
- package/jest.config.ts +25 -0
- package/license.md +28 -0
- package/out/tsconfig.all.tsbuildinfo +1 -0
- package/package.json +63 -0
- package/src/CWIStyleWalletManager.ts +1999 -0
- package/src/Setup.ts +579 -0
- package/src/SetupClient.ts +322 -0
- package/src/SetupWallet.ts +108 -0
- package/src/SimpleWalletManager.ts +526 -0
- package/src/Wallet.ts +1169 -0
- package/src/WalletAuthenticationManager.ts +153 -0
- package/src/WalletLogger.ts +213 -0
- package/src/WalletPermissionsManager.ts +3660 -0
- package/src/WalletSettingsManager.ts +114 -0
- package/src/__tests/CWIStyleWalletManager.test.d.ts.map +1 -0
- package/src/__tests/CWIStyleWalletManager.test.js.map +1 -0
- package/src/__tests/CWIStyleWalletManager.test.ts +675 -0
- package/src/__tests/WalletPermissionsManager.callbacks.test.ts +323 -0
- package/src/__tests/WalletPermissionsManager.checks.test.ts +844 -0
- package/src/__tests/WalletPermissionsManager.encryption.test.ts +412 -0
- package/src/__tests/WalletPermissionsManager.fixtures.ts +307 -0
- package/src/__tests/WalletPermissionsManager.flows.test.ts +462 -0
- package/src/__tests/WalletPermissionsManager.initialization.test.ts +300 -0
- package/src/__tests/WalletPermissionsManager.pmodules.test.ts +798 -0
- package/src/__tests/WalletPermissionsManager.proxying.test.ts +724 -0
- package/src/__tests/WalletPermissionsManager.tokens.test.ts +503 -0
- package/src/index.all.ts +27 -0
- package/src/index.client.ts +25 -0
- package/src/index.mobile.ts +21 -0
- package/src/index.ts +1 -0
- package/src/monitor/Monitor.ts +412 -0
- package/src/monitor/MonitorDaemon.ts +188 -0
- package/src/monitor/README.md +3 -0
- package/src/monitor/__test/MonitorDaemon.man.test.ts +45 -0
- package/src/monitor/tasks/TaskCheckForProofs.ts +243 -0
- package/src/monitor/tasks/TaskCheckNoSends.ts +73 -0
- package/src/monitor/tasks/TaskClock.ts +33 -0
- package/src/monitor/tasks/TaskFailAbandoned.ts +54 -0
- package/src/monitor/tasks/TaskMonitorCallHistory.ts +26 -0
- package/src/monitor/tasks/TaskNewHeader.ts +93 -0
- package/src/monitor/tasks/TaskPurge.ts +68 -0
- package/src/monitor/tasks/TaskReorg.ts +89 -0
- package/src/monitor/tasks/TaskReviewStatus.ts +48 -0
- package/src/monitor/tasks/TaskSendWaiting.ts +122 -0
- package/src/monitor/tasks/TaskSyncWhenIdle.ts +26 -0
- package/src/monitor/tasks/TaskUnFail.ts +151 -0
- package/src/monitor/tasks/WalletMonitorTask.ts +47 -0
- package/src/sdk/CertOpsWallet.ts +18 -0
- package/src/sdk/PrivilegedKeyManager.ts +372 -0
- package/src/sdk/README.md +13 -0
- package/src/sdk/WERR_errors.ts +234 -0
- package/src/sdk/WalletError.ts +170 -0
- package/src/sdk/WalletErrorFromJson.ts +80 -0
- package/src/sdk/WalletServices.interfaces.ts +700 -0
- package/src/sdk/WalletSigner.interfaces.ts +11 -0
- package/src/sdk/WalletStorage.interfaces.ts +606 -0
- package/src/sdk/__test/CertificateLifeCycle.test.ts +131 -0
- package/src/sdk/__test/PrivilegedKeyManager.test.ts +738 -0
- package/src/sdk/__test/WalletError.test.ts +318 -0
- package/src/sdk/__test/validationHelpers.test.ts +21 -0
- package/src/sdk/index.ts +10 -0
- package/src/sdk/types.ts +226 -0
- package/src/services/README.md +11 -0
- package/src/services/ServiceCollection.ts +248 -0
- package/src/services/Services.ts +603 -0
- package/src/services/__tests/ARC.man.test.ts +123 -0
- package/src/services/__tests/ARC.timeout.man.test.ts +79 -0
- package/src/services/__tests/ArcGorillaPool.man.test.ts +108 -0
- package/src/services/__tests/arcServices.test.ts +8 -0
- package/src/services/__tests/bitrails.test.ts +56 -0
- package/src/services/__tests/getMerklePath.test.ts +15 -0
- package/src/services/__tests/getRawTx.test.ts +13 -0
- package/src/services/__tests/postBeef.test.ts +104 -0
- package/src/services/__tests/verifyBeef.test.ts +50 -0
- package/src/services/chaintracker/BHServiceClient.ts +212 -0
- package/src/services/chaintracker/ChaintracksChainTracker.ts +71 -0
- package/src/services/chaintracker/__tests/ChaintracksChainTracker.test.ts +33 -0
- package/src/services/chaintracker/__tests/ChaintracksServiceClient.test.ts +29 -0
- package/src/services/chaintracker/chaintracks/Api/BlockHeaderApi.ts +72 -0
- package/src/services/chaintracker/chaintracks/Api/BulkIngestorApi.ts +83 -0
- package/src/services/chaintracker/chaintracks/Api/BulkStorageApi.ts +92 -0
- package/src/services/chaintracker/chaintracks/Api/ChaintracksApi.ts +64 -0
- package/src/services/chaintracker/chaintracks/Api/ChaintracksClientApi.ts +189 -0
- package/src/services/chaintracker/chaintracks/Api/ChaintracksFetchApi.ts +18 -0
- package/src/services/chaintracker/chaintracks/Api/ChaintracksFsApi.ts +58 -0
- package/src/services/chaintracker/chaintracks/Api/ChaintracksStorageApi.ts +386 -0
- package/src/services/chaintracker/chaintracks/Api/LiveIngestorApi.ts +25 -0
- package/src/services/chaintracker/chaintracks/Chaintracks.ts +609 -0
- package/src/services/chaintracker/chaintracks/ChaintracksService.ts +199 -0
- package/src/services/chaintracker/chaintracks/ChaintracksServiceClient.ts +154 -0
- package/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.ts +176 -0
- package/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDN.ts +174 -0
- package/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDNBabbage.ts +18 -0
- package/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.ts +113 -0
- package/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainWs.ts +81 -0
- package/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.ts +86 -0
- package/src/services/chaintracker/chaintracks/Ingest/LiveIngestorTeranodeP2P.ts +59 -0
- package/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainPoll.ts +104 -0
- package/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainWs.ts +66 -0
- package/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.ts +566 -0
- package/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainServices.ts +219 -0
- package/src/services/chaintracker/chaintracks/Ingest/__tests/BulkIngestorCDNBabbage.test.ts +54 -0
- package/src/services/chaintracker/chaintracks/Ingest/__tests/LiveIngestorWhatsOnChainPoll.test.ts +33 -0
- package/src/services/chaintracker/chaintracks/Ingest/__tests/WhatsOnChainServices.test.ts +124 -0
- package/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.ts +92 -0
- package/src/services/chaintracker/chaintracks/Storage/ChaintracksKnexMigrations.ts +104 -0
- package/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.ts +382 -0
- package/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.ts +574 -0
- package/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageKnex.ts +438 -0
- package/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageMemory.ts +29 -0
- package/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.ts +304 -0
- package/src/services/chaintracker/chaintracks/Storage/__tests/ChaintracksStorageIdb.test.ts +102 -0
- package/src/services/chaintracker/chaintracks/Storage/__tests/ChaintracksStorageKnex.test.ts +45 -0
- package/src/services/chaintracker/chaintracks/__tests/Chaintracks.test.ts +77 -0
- package/src/services/chaintracker/chaintracks/__tests/ChaintracksClientApi.test.ts +192 -0
- package/src/services/chaintracker/chaintracks/__tests/LocalCdnServer.ts +75 -0
- package/src/services/chaintracker/chaintracks/__tests/createIdbChaintracks.test.ts +62 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest349/mainNetBlockHeaders.json +1 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest349/mainNet_0.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest349/mainNet_1.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest349/mainNet_2.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest349/mainNet_3.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest379/mainNetBlockHeaders.json +1 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest379/mainNet_0.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest379/mainNet_1.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest379/mainNet_2.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest379/mainNet_3.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest399/mainNetBlockHeaders.json +1 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest399/mainNet_0.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest399/mainNet_1.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest399/mainNet_2.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest399/mainNet_3.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest402/mainNetBlockHeaders.json +1 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest402/mainNet_0.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest402/mainNet_1.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest402/mainNet_2.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest402/mainNet_3.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest402/mainNet_4.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest499/mainNetBlockHeaders.json +1 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest499/mainNet_0.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest499/mainNet_1.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest499/mainNet_2.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest499/mainNet_3.headers +0 -0
- package/src/services/chaintracker/chaintracks/__tests/data/cdnTest499/mainNet_4.headers +0 -0
- package/src/services/chaintracker/chaintracks/createDefaultIdbChaintracksOptions.ts +92 -0
- package/src/services/chaintracker/chaintracks/createDefaultKnexChaintracksOptions.ts +111 -0
- package/src/services/chaintracker/chaintracks/createDefaultNoDbChaintracksOptions.ts +91 -0
- package/src/services/chaintracker/chaintracks/createIdbChaintracks.ts +60 -0
- package/src/services/chaintracker/chaintracks/createKnexChaintracks.ts +65 -0
- package/src/services/chaintracker/chaintracks/createNoDbChaintracks.ts +60 -0
- package/src/services/chaintracker/chaintracks/index.all.ts +12 -0
- package/src/services/chaintracker/chaintracks/index.client.ts +4 -0
- package/src/services/chaintracker/chaintracks/index.mobile.ts +37 -0
- package/src/services/chaintracker/chaintracks/util/BulkFileDataManager.ts +975 -0
- package/src/services/chaintracker/chaintracks/util/BulkFileDataReader.ts +60 -0
- package/src/services/chaintracker/chaintracks/util/BulkFilesReader.ts +336 -0
- package/src/services/chaintracker/chaintracks/util/BulkHeaderFile.ts +247 -0
- package/src/services/chaintracker/chaintracks/util/ChaintracksFetch.ts +69 -0
- package/src/services/chaintracker/chaintracks/util/ChaintracksFs.ts +141 -0
- package/src/services/chaintracker/chaintracks/util/HeightRange.ts +153 -0
- package/src/services/chaintracker/chaintracks/util/SingleWriterMultiReaderLock.ts +76 -0
- package/src/services/chaintracker/chaintracks/util/__tests/BulkFileDataManager.test.ts +304 -0
- package/src/services/chaintracker/chaintracks/util/__tests/ChaintracksFetch.test.ts +60 -0
- package/src/services/chaintracker/chaintracks/util/__tests/HeightRange.test.ts +67 -0
- package/src/services/chaintracker/chaintracks/util/__tests/SingleWriterMultiReaderLock.test.ts +49 -0
- package/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.ts +573 -0
- package/src/services/chaintracker/chaintracks/util/dirtyHashes.ts +29 -0
- package/src/services/chaintracker/chaintracks/util/validBulkHeaderFilesByFileHash.ts +432 -0
- package/src/services/chaintracker/index.all.ts +4 -0
- package/src/services/chaintracker/index.client.ts +4 -0
- package/src/services/chaintracker/index.mobile.ts +4 -0
- package/src/services/createDefaultWalletServicesOptions.ts +77 -0
- package/src/services/index.ts +1 -0
- package/src/services/processingErrors/arcSuccessError.json +76 -0
- package/src/services/providers/ARC.ts +350 -0
- package/src/services/providers/Bitails.ts +256 -0
- package/src/services/providers/SdkWhatsOnChain.ts +83 -0
- package/src/services/providers/WhatsOnChain.ts +883 -0
- package/src/services/providers/__tests/WhatsOnChain.test.ts +242 -0
- package/src/services/providers/__tests/exchangeRates.test.ts +18 -0
- package/src/services/providers/exchangeRates.ts +265 -0
- package/src/services/providers/getBeefForTxid.ts +369 -0
- package/src/signer/README.md +5 -0
- package/src/signer/WalletSigner.ts +17 -0
- package/src/signer/methods/acquireDirectCertificate.ts +52 -0
- package/src/signer/methods/buildSignableTransaction.ts +183 -0
- package/src/signer/methods/completeSignedTransaction.ts +117 -0
- package/src/signer/methods/createAction.ts +172 -0
- package/src/signer/methods/internalizeAction.ts +106 -0
- package/src/signer/methods/proveCertificate.ts +43 -0
- package/src/signer/methods/signAction.ts +54 -0
- package/src/storage/README.md +14 -0
- package/src/storage/StorageIdb.ts +2304 -0
- package/src/storage/StorageKnex.ts +1425 -0
- package/src/storage/StorageProvider.ts +810 -0
- package/src/storage/StorageReader.ts +194 -0
- package/src/storage/StorageReaderWriter.ts +432 -0
- package/src/storage/StorageSyncReader.ts +34 -0
- package/src/storage/WalletStorageManager.ts +943 -0
- package/src/storage/__test/StorageIdb.test.ts +43 -0
- package/src/storage/__test/WalletStorageManager.test.ts +275 -0
- package/src/storage/__test/adminStats.man.test.ts +89 -0
- package/src/storage/__test/getBeefForTransaction.test.ts +385 -0
- package/src/storage/index.all.ts +11 -0
- package/src/storage/index.client.ts +7 -0
- package/src/storage/index.mobile.ts +6 -0
- package/src/storage/methods/ListActionsSpecOp.ts +70 -0
- package/src/storage/methods/ListOutputsSpecOp.ts +129 -0
- package/src/storage/methods/__test/GenerateChange/generateChangeSdk.test.ts +1057 -0
- package/src/storage/methods/__test/GenerateChange/randomValsUsed1.ts +20 -0
- package/src/storage/methods/__test/offsetKey.test.ts +274 -0
- package/src/storage/methods/attemptToPostReqsToNetwork.ts +389 -0
- package/src/storage/methods/createAction.ts +947 -0
- package/src/storage/methods/generateChange.ts +556 -0
- package/src/storage/methods/getBeefForTransaction.ts +139 -0
- package/src/storage/methods/getSyncChunk.ts +293 -0
- package/src/storage/methods/internalizeAction.ts +562 -0
- package/src/storage/methods/listActionsIdb.ts +183 -0
- package/src/storage/methods/listActionsKnex.ts +226 -0
- package/src/storage/methods/listCertificates.ts +73 -0
- package/src/storage/methods/listOutputsIdb.ts +203 -0
- package/src/storage/methods/listOutputsKnex.ts +263 -0
- package/src/storage/methods/offsetKey.ts +89 -0
- package/src/storage/methods/processAction.ts +420 -0
- package/src/storage/methods/purgeData.ts +251 -0
- package/src/storage/methods/purgeDataIdb.ts +10 -0
- package/src/storage/methods/reviewStatus.ts +101 -0
- package/src/storage/methods/reviewStatusIdb.ts +43 -0
- package/src/storage/methods/utils.Buffer.ts +33 -0
- package/src/storage/methods/utils.ts +56 -0
- package/src/storage/remoting/StorageClient.ts +567 -0
- package/src/storage/remoting/StorageMobile.ts +544 -0
- package/src/storage/remoting/StorageServer.ts +291 -0
- package/src/storage/remoting/__test/StorageClient.test.ts +113 -0
- package/src/storage/schema/KnexMigrations.ts +489 -0
- package/src/storage/schema/StorageIdbSchema.ts +150 -0
- package/src/storage/schema/entities/EntityBase.ts +210 -0
- package/src/storage/schema/entities/EntityCertificate.ts +188 -0
- package/src/storage/schema/entities/EntityCertificateField.ts +136 -0
- package/src/storage/schema/entities/EntityCommission.ts +148 -0
- package/src/storage/schema/entities/EntityOutput.ts +290 -0
- package/src/storage/schema/entities/EntityOutputBasket.ts +153 -0
- package/src/storage/schema/entities/EntityOutputTag.ts +121 -0
- package/src/storage/schema/entities/EntityOutputTagMap.ts +123 -0
- package/src/storage/schema/entities/EntityProvenTx.ts +319 -0
- package/src/storage/schema/entities/EntityProvenTxReq.ts +580 -0
- package/src/storage/schema/entities/EntitySyncState.ts +389 -0
- package/src/storage/schema/entities/EntityTransaction.ts +306 -0
- package/src/storage/schema/entities/EntityTxLabel.ts +121 -0
- package/src/storage/schema/entities/EntityTxLabelMap.ts +123 -0
- package/src/storage/schema/entities/EntityUser.ts +112 -0
- package/src/storage/schema/entities/MergeEntity.ts +73 -0
- package/src/storage/schema/entities/__tests/CertificateFieldTests.test.ts +353 -0
- package/src/storage/schema/entities/__tests/CertificateTests.test.ts +354 -0
- package/src/storage/schema/entities/__tests/CommissionTests.test.ts +371 -0
- package/src/storage/schema/entities/__tests/OutputBasketTests.test.ts +278 -0
- package/src/storage/schema/entities/__tests/OutputTagMapTests.test.ts +242 -0
- package/src/storage/schema/entities/__tests/OutputTagTests.test.ts +288 -0
- package/src/storage/schema/entities/__tests/OutputTests.test.ts +464 -0
- package/src/storage/schema/entities/__tests/ProvenTxReqTests.test.ts +340 -0
- package/src/storage/schema/entities/__tests/ProvenTxTests.test.ts +504 -0
- package/src/storage/schema/entities/__tests/SyncStateTests.test.ts +288 -0
- package/src/storage/schema/entities/__tests/TransactionTests.test.ts +604 -0
- package/src/storage/schema/entities/__tests/TxLabelMapTests.test.ts +361 -0
- package/src/storage/schema/entities/__tests/TxLabelTests.test.ts +198 -0
- package/src/storage/schema/entities/__tests/stampLogTests.test.ts +90 -0
- package/src/storage/schema/entities/__tests/usersTests.test.ts +340 -0
- package/src/storage/schema/entities/index.ts +16 -0
- package/src/storage/schema/tables/TableCertificate.ts +21 -0
- package/src/storage/schema/tables/TableCertificateField.ts +12 -0
- package/src/storage/schema/tables/TableCommission.ts +13 -0
- package/src/storage/schema/tables/TableMonitorEvent.ts +9 -0
- package/src/storage/schema/tables/TableOutput.ts +64 -0
- package/src/storage/schema/tables/TableOutputBasket.ts +12 -0
- package/src/storage/schema/tables/TableOutputTag.ts +10 -0
- package/src/storage/schema/tables/TableOutputTagMap.ts +9 -0
- package/src/storage/schema/tables/TableProvenTx.ts +14 -0
- package/src/storage/schema/tables/TableProvenTxReq.ts +65 -0
- package/src/storage/schema/tables/TableSettings.ts +17 -0
- package/src/storage/schema/tables/TableSyncState.ts +18 -0
- package/src/storage/schema/tables/TableTransaction.ts +54 -0
- package/src/storage/schema/tables/TableTxLabel.ts +10 -0
- package/src/storage/schema/tables/TableTxLabelMap.ts +9 -0
- package/src/storage/schema/tables/TableUser.ts +16 -0
- package/src/storage/schema/tables/index.ts +16 -0
- package/src/storage/sync/StorageMySQLDojoReader.ts +696 -0
- package/src/storage/sync/index.ts +1 -0
- package/src/utility/Format.ts +133 -0
- package/src/utility/README.md +3 -0
- package/src/utility/ReaderUint8Array.ts +187 -0
- package/src/utility/ScriptTemplateBRC29.ts +73 -0
- package/src/utility/__tests/utilityHelpers.noBuffer.test.ts +109 -0
- package/src/utility/aggregateResults.ts +68 -0
- package/src/utility/identityUtils.ts +159 -0
- package/src/utility/index.all.ts +7 -0
- package/src/utility/index.client.ts +7 -0
- package/src/utility/parseTxScriptOffsets.ts +29 -0
- package/src/utility/stampLog.ts +69 -0
- package/src/utility/tscProofToMerklePath.ts +48 -0
- package/src/utility/utilityHelpers.buffer.ts +34 -0
- package/src/utility/utilityHelpers.noBuffer.ts +60 -0
- package/src/utility/utilityHelpers.ts +275 -0
- package/src/wab-client/WABClient.ts +94 -0
- package/src/wab-client/__tests/WABClient.man.test.ts +59 -0
- package/src/wab-client/auth-method-interactors/AuthMethodInteractor.ts +47 -0
- package/src/wab-client/auth-method-interactors/DevConsoleInteractor.ts +73 -0
- package/src/wab-client/auth-method-interactors/PersonaIDInteractor.ts +35 -0
- package/src/wab-client/auth-method-interactors/TwilioPhoneInteractor.ts +72 -0
- package/syncVersions.js +71 -0
- package/test/Wallet/StorageClient/storageClient.man.test.ts +75 -0
- package/test/Wallet/action/abortAction.test.ts +47 -0
- package/test/Wallet/action/createAction.test.ts +299 -0
- package/test/Wallet/action/createAction2.test.ts +1273 -0
- package/test/Wallet/action/createActionToGenerateBeefs.man.test.ts +293 -0
- package/test/Wallet/action/internalizeAction.a.test.ts +286 -0
- package/test/Wallet/action/internalizeAction.test.ts +682 -0
- package/test/Wallet/action/relinquishOutput.test.ts +37 -0
- package/test/Wallet/certificate/acquireCertificate.test.ts +298 -0
- package/test/Wallet/certificate/listCertificates.test.ts +346 -0
- package/test/Wallet/construct/Wallet.constructor.test.ts +57 -0
- package/test/Wallet/get/getHeaderForHeight.test.ts +82 -0
- package/test/Wallet/get/getHeight.test.ts +52 -0
- package/test/Wallet/get/getKnownTxids.test.ts +86 -0
- package/test/Wallet/get/getNetwork.test.ts +27 -0
- package/test/Wallet/get/getVersion.test.ts +27 -0
- package/test/Wallet/list/listActions.test.ts +279 -0
- package/test/Wallet/list/listActions2.test.ts +1381 -0
- package/test/Wallet/list/listCertificates.test.ts +118 -0
- package/test/Wallet/list/listOutputs.test.ts +447 -0
- package/test/Wallet/live/walletLive.man.test.ts +521 -0
- package/test/Wallet/local/localWallet.man.test.ts +93 -0
- package/test/Wallet/local/localWallet2.man.test.ts +277 -0
- package/test/Wallet/signAction/mountaintop.man.test.ts +130 -0
- package/test/Wallet/specOps/specOps.man.test.ts +220 -0
- package/test/Wallet/support/janitor.man.test.ts +40 -0
- package/test/Wallet/support/operations.man.test.ts +407 -0
- package/test/Wallet/support/reqErrorReview.2025.05.06.man.test.ts +347 -0
- package/test/Wallet/sync/Wallet.sync.test.ts +215 -0
- package/test/Wallet/sync/Wallet.updateWalletLegacyTestData.man.test.ts +203 -0
- package/test/Wallet/sync/setActive.test.ts +170 -0
- package/test/WalletClient/LocalKVStore.man.test.ts +114 -0
- package/test/WalletClient/WERR.man.test.ts +35 -0
- package/test/bsv-ts-sdk/LocalKVStore.test.ts +102 -0
- package/test/checkDB.ts +57 -0
- package/test/checkdb +0 -0
- package/test/examples/backup.man.test.ts +59 -0
- package/test/examples/pushdrop.test.ts +282 -0
- package/test/monitor/Monitor.test.ts +620 -0
- package/test/services/Services.test.ts +263 -0
- package/test/storage/KnexMigrations.test.ts +86 -0
- package/test/storage/StorageMySQLDojoReader.man.test.ts +60 -0
- package/test/storage/count.test.ts +177 -0
- package/test/storage/find.test.ts +195 -0
- package/test/storage/findLegacy.test.ts +67 -0
- package/test/storage/idb/allocateChange.test.ts +251 -0
- package/test/storage/idb/count.test.ts +158 -0
- package/test/storage/idb/find.test.ts +177 -0
- package/test/storage/idb/idbSpeed.test.ts +36 -0
- package/test/storage/idb/insert.test.ts +268 -0
- package/test/storage/idb/transactionAbort.test.ts +108 -0
- package/test/storage/idb/update.test.ts +999 -0
- package/test/storage/insert.test.ts +278 -0
- package/test/storage/update.test.ts +1021 -0
- package/test/storage/update2.test.ts +897 -0
- package/test/utils/TestUtilsWalletStorage.ts +2526 -0
- package/test/utils/localWalletMethods.ts +363 -0
- package/test/utils/removeFailedFromDatabase.sql +17 -0
- package/ts2md.json +44 -0
- package/tsconfig.all.json +31 -0
- package/tsconfig.client.json +29 -0
- package/tsconfig.json +17 -0
- package/tsconfig.mobile.json +28 -0
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import { Monitor } from '../Monitor'
|
|
2
|
+
import { WalletMonitorTask } from './WalletMonitorTask'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Notify Transaction records of changes in ProvenTxReq records they may have missed.
|
|
6
|
+
*
|
|
7
|
+
* The `notified` property flags reqs that do not need to be checked.
|
|
8
|
+
*
|
|
9
|
+
* Looks for aged Transactions with provenTxId with status != 'completed', sets status to 'completed'.
|
|
10
|
+
*
|
|
11
|
+
* Looks for reqs with 'invalid' status that have corresonding transactions with status other than 'failed'.
|
|
12
|
+
*/
|
|
13
|
+
export class TaskReviewStatus extends WalletMonitorTask {
|
|
14
|
+
static taskName = 'ReviewStatus'
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Set to true to trigger running this task
|
|
18
|
+
*/
|
|
19
|
+
static checkNow = false
|
|
20
|
+
|
|
21
|
+
constructor(
|
|
22
|
+
monitor: Monitor,
|
|
23
|
+
public triggerMsecs = 1000 * 60 * 15,
|
|
24
|
+
public agedMsecs = 1000 * 60 * 5
|
|
25
|
+
) {
|
|
26
|
+
super(monitor, TaskReviewStatus.taskName)
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
trigger(nowMsecsSinceEpoch: number): { run: boolean } {
|
|
30
|
+
return {
|
|
31
|
+
run: this.triggerMsecs > 0 && nowMsecsSinceEpoch - this.lastRunMsecsSinceEpoch > this.triggerMsecs
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
async runTask(): Promise<string> {
|
|
36
|
+
let log = ''
|
|
37
|
+
|
|
38
|
+
const agedLimit = new Date(Date.now() - this.agedMsecs)
|
|
39
|
+
const r = await this.storage.runAsStorageProvider(async sp => {
|
|
40
|
+
const r = await sp.reviewStatus({ agedLimit })
|
|
41
|
+
return r
|
|
42
|
+
})
|
|
43
|
+
|
|
44
|
+
if (r.log.length > 0) log += `${r.log}`
|
|
45
|
+
|
|
46
|
+
return log
|
|
47
|
+
}
|
|
48
|
+
}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { ReviewActionResult, SendWithResult } from '@bsv/sdk'
|
|
2
|
+
import { Monitor } from '../Monitor'
|
|
3
|
+
import { WalletMonitorTask } from './WalletMonitorTask'
|
|
4
|
+
import { attemptToPostReqsToNetwork } from '../../storage/methods/attemptToPostReqsToNetwork'
|
|
5
|
+
import { aggregateActionResults } from '../../utility/aggregateResults'
|
|
6
|
+
import { ProvenTxReqStatus } from '../../sdk/types'
|
|
7
|
+
import { verifyTruthy } from '../../utility/utilityHelpers'
|
|
8
|
+
import { TableProvenTxReq } from '../../storage/schema/tables/TableProvenTxReq'
|
|
9
|
+
import { EntityProvenTxReq } from '../../storage/schema/entities/EntityProvenTxReq'
|
|
10
|
+
|
|
11
|
+
export class TaskSendWaiting extends WalletMonitorTask {
|
|
12
|
+
static taskName = 'SendWaiting'
|
|
13
|
+
|
|
14
|
+
lastSendingRunMsecsSinceEpoch: number | undefined
|
|
15
|
+
includeSending: boolean = true
|
|
16
|
+
|
|
17
|
+
constructor(
|
|
18
|
+
monitor: Monitor,
|
|
19
|
+
public triggerMsecs = Monitor.oneSecond * 8,
|
|
20
|
+
public agedMsecs = Monitor.oneSecond * 7,
|
|
21
|
+
public sendingMsecs = Monitor.oneMinute * 5
|
|
22
|
+
) {
|
|
23
|
+
super(monitor, TaskSendWaiting.taskName)
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
trigger(nowMsecsSinceEpoch: number): { run: boolean } {
|
|
27
|
+
this.includeSending =
|
|
28
|
+
!this.lastSendingRunMsecsSinceEpoch || nowMsecsSinceEpoch > this.lastSendingRunMsecsSinceEpoch + this.sendingMsecs
|
|
29
|
+
if (this.includeSending) this.lastSendingRunMsecsSinceEpoch = nowMsecsSinceEpoch
|
|
30
|
+
return {
|
|
31
|
+
run: nowMsecsSinceEpoch > this.lastRunMsecsSinceEpoch + this.triggerMsecs
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
async runTask(): Promise<string> {
|
|
36
|
+
let log = ''
|
|
37
|
+
const limit = 100
|
|
38
|
+
let offset = 0
|
|
39
|
+
const agedLimit = new Date(Date.now() - this.agedMsecs)
|
|
40
|
+
const status: ProvenTxReqStatus[] = this.includeSending ? ['unsent', 'sending'] : ['unsent']
|
|
41
|
+
for (;;) {
|
|
42
|
+
let reqs = await this.storage.findProvenTxReqs({
|
|
43
|
+
partial: {},
|
|
44
|
+
status,
|
|
45
|
+
paged: { limit, offset }
|
|
46
|
+
})
|
|
47
|
+
const count = reqs.length
|
|
48
|
+
if (reqs.length === 0) break
|
|
49
|
+
log += `${reqs.length} reqs with status ${status.join(' or ')}\n`
|
|
50
|
+
const agedReqs = reqs.filter(req => verifyTruthy(req.updated_at) < agedLimit)
|
|
51
|
+
log += ` Of those reqs, ${agedReqs.length} where last updated before ${agedLimit.toISOString()}.\n`
|
|
52
|
+
log += await this.processUnsent(agedReqs, 2)
|
|
53
|
+
if (count < limit) break
|
|
54
|
+
offset += limit
|
|
55
|
+
}
|
|
56
|
+
return log
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* Process an array of 'unsent' status table.ProvenTxReq
|
|
61
|
+
*
|
|
62
|
+
* Send rawTx to transaction processor(s), requesting proof callbacks when possible.
|
|
63
|
+
*
|
|
64
|
+
* Set status 'invalid' if req is invalid.
|
|
65
|
+
*
|
|
66
|
+
* Set status to 'callback' on successful network submission with callback service.
|
|
67
|
+
*
|
|
68
|
+
* Set status to 'unmined' on successful network submission without callback service.
|
|
69
|
+
*
|
|
70
|
+
* Add mapi responses to database table if received.
|
|
71
|
+
*
|
|
72
|
+
* Increments attempts if sending was attempted.
|
|
73
|
+
*
|
|
74
|
+
* @param reqApis
|
|
75
|
+
*/
|
|
76
|
+
async processUnsent(reqApis: TableProvenTxReq[], indent = 0): Promise<string> {
|
|
77
|
+
let log = ''
|
|
78
|
+
for (let i = 0; i < reqApis.length; i++) {
|
|
79
|
+
const reqApi = reqApis[i]
|
|
80
|
+
log += ' '.repeat(indent)
|
|
81
|
+
log += `${i} reqId=${reqApi.provenTxReqId} attempts=${reqApi.attempts} txid=${reqApi.txid}: \n`
|
|
82
|
+
if (reqApi.status !== 'unsent' && reqApi.status !== 'sending') {
|
|
83
|
+
log += ` status now ${reqApi.status}\n`
|
|
84
|
+
continue
|
|
85
|
+
}
|
|
86
|
+
const req = new EntityProvenTxReq(reqApi)
|
|
87
|
+
const reqs: EntityProvenTxReq[] = []
|
|
88
|
+
if (req.batch) {
|
|
89
|
+
// Make sure wew process entire batch together for efficient beef generation
|
|
90
|
+
const batchReqApis = await this.storage.findProvenTxReqs({
|
|
91
|
+
partial: { batch: req.batch, status: 'unsent' }
|
|
92
|
+
})
|
|
93
|
+
for (const bra of batchReqApis) {
|
|
94
|
+
// Remove any matching batchReqApis from reqApis
|
|
95
|
+
const index = reqApis.findIndex(ra => ra.provenTxReqId === bra.provenTxReqId)
|
|
96
|
+
if (index > -1) reqApis.slice(index, index + 1)
|
|
97
|
+
// And add to reqs being processed now:
|
|
98
|
+
reqs.push(new EntityProvenTxReq(bra))
|
|
99
|
+
}
|
|
100
|
+
} else {
|
|
101
|
+
// Just a single non-batched req...
|
|
102
|
+
reqs.push(req)
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
const r = await this.storage.runAsStorageProvider(async sp => {
|
|
106
|
+
return attemptToPostReqsToNetwork(sp, reqs)
|
|
107
|
+
})
|
|
108
|
+
|
|
109
|
+
if (this.monitor.onTransactionBroadcasted) {
|
|
110
|
+
const rar = await this.storage.runAsStorageProvider(async sp => {
|
|
111
|
+
const ars: SendWithResult[] = [{ txid: req.txid, status: 'sending' }]
|
|
112
|
+
const { rar } = await aggregateActionResults(sp, ars, r)
|
|
113
|
+
return rar
|
|
114
|
+
})
|
|
115
|
+
this.monitor.callOnBroadcastedTransaction(rar[0])
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
log += r.log
|
|
119
|
+
}
|
|
120
|
+
return log
|
|
121
|
+
}
|
|
122
|
+
}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Monitor } from '../Monitor'
|
|
2
|
+
import { WalletMonitorTask } from './WalletMonitorTask'
|
|
3
|
+
|
|
4
|
+
export class TaskSyncWhenIdle extends WalletMonitorTask {
|
|
5
|
+
static taskName = 'SyncWhenIdle'
|
|
6
|
+
|
|
7
|
+
constructor(
|
|
8
|
+
monitor: Monitor,
|
|
9
|
+
public triggerMsecs = 1000 * 60 * 1
|
|
10
|
+
) {
|
|
11
|
+
super(monitor, TaskSyncWhenIdle.taskName)
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
trigger(nowMsecsSinceEpoch: number): { run: boolean } {
|
|
15
|
+
const s = this.storage
|
|
16
|
+
|
|
17
|
+
const run = false
|
|
18
|
+
|
|
19
|
+
return { run }
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
async runTask(): Promise<string> {
|
|
23
|
+
// TODO...
|
|
24
|
+
return ''
|
|
25
|
+
}
|
|
26
|
+
}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import { Transaction, Utils } from '@bsv/sdk'
|
|
2
|
+
import { Monitor } from '../Monitor'
|
|
3
|
+
import { WalletMonitorTask } from './WalletMonitorTask'
|
|
4
|
+
import { TableProvenTxReq } from '../../storage/schema/tables'
|
|
5
|
+
import { EntityProvenTxReq } from '../../storage/schema/entities'
|
|
6
|
+
import { StorageProvider } from '../../index.client'
|
|
7
|
+
|
|
8
|
+
/**
|
|
9
|
+
* Setting provenTxReq status to 'unfail' when 'invalid' will attempt to find a merklePath, and if successful:
|
|
10
|
+
*
|
|
11
|
+
* 1. set the req status to 'unmined'
|
|
12
|
+
* 2. set the referenced txs to 'unproven'
|
|
13
|
+
* 3. determine if any inputs match user's existing outputs and if so update spentBy and spendable of those outputs.
|
|
14
|
+
* 4. set the txs outputs to spendable
|
|
15
|
+
*
|
|
16
|
+
* If it fails (to find a merklePath), returns the req status to 'invalid'.
|
|
17
|
+
*/
|
|
18
|
+
export class TaskUnFail extends WalletMonitorTask {
|
|
19
|
+
static taskName = 'UnFail'
|
|
20
|
+
|
|
21
|
+
/**
|
|
22
|
+
* Set to true to trigger running this task
|
|
23
|
+
*/
|
|
24
|
+
static checkNow = false
|
|
25
|
+
|
|
26
|
+
constructor(
|
|
27
|
+
monitor: Monitor,
|
|
28
|
+
public triggerMsecs = Monitor.oneMinute * 10
|
|
29
|
+
) {
|
|
30
|
+
super(monitor, TaskUnFail.taskName)
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
trigger(nowMsecsSinceEpoch: number): { run: boolean } {
|
|
34
|
+
return {
|
|
35
|
+
run:
|
|
36
|
+
TaskUnFail.checkNow ||
|
|
37
|
+
(this.triggerMsecs > 0 && nowMsecsSinceEpoch - this.lastRunMsecsSinceEpoch > this.triggerMsecs)
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
async runTask(): Promise<string> {
|
|
42
|
+
let log = ''
|
|
43
|
+
TaskUnFail.checkNow = false
|
|
44
|
+
|
|
45
|
+
const limit = 100
|
|
46
|
+
let offset = 0
|
|
47
|
+
for (;;) {
|
|
48
|
+
const reqs = await this.storage.findProvenTxReqs({
|
|
49
|
+
partial: {},
|
|
50
|
+
status: ['unfail'],
|
|
51
|
+
paged: { limit, offset }
|
|
52
|
+
})
|
|
53
|
+
if (reqs.length === 0) break
|
|
54
|
+
log += `${reqs.length} reqs with status 'unfail'\n`
|
|
55
|
+
const r = await this.unfail(reqs, 2)
|
|
56
|
+
log += `${r.log}\n`
|
|
57
|
+
//console.log(log);
|
|
58
|
+
if (reqs.length < limit) break
|
|
59
|
+
offset += limit
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
return log
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
async unfail(reqs: TableProvenTxReq[], indent = 0): Promise<{ log: string }> {
|
|
66
|
+
let log = ''
|
|
67
|
+
for (const reqApi of reqs) {
|
|
68
|
+
const req = new EntityProvenTxReq(reqApi)
|
|
69
|
+
log += ' '.repeat(indent)
|
|
70
|
+
log += `reqId ${reqApi.provenTxReqId} txid ${reqApi.txid}: `
|
|
71
|
+
const r = await this.monitor.services.getMerklePath(req.txid)
|
|
72
|
+
if (r.merklePath) {
|
|
73
|
+
// 1. set the req status to 'unmined'
|
|
74
|
+
req.status = 'unmined'
|
|
75
|
+
req.attempts = 0
|
|
76
|
+
log += `unfailed. status is now 'unmined'\n`
|
|
77
|
+
log += await this.unfailReq(req, indent + 2)
|
|
78
|
+
} else {
|
|
79
|
+
req.status = 'invalid'
|
|
80
|
+
log += `returned to status 'invalid'\n`
|
|
81
|
+
}
|
|
82
|
+
await req.updateStorageDynamicProperties(this.storage)
|
|
83
|
+
}
|
|
84
|
+
return { log }
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
/**
|
|
88
|
+
* 2. set the referenced txs to 'unproven'
|
|
89
|
+
* 3. determine if any inputs match user's existing outputs and if so update spentBy and spendable of those outputs.
|
|
90
|
+
* 4. set the txs outputs to spendable
|
|
91
|
+
*
|
|
92
|
+
* @param req
|
|
93
|
+
* @param indent
|
|
94
|
+
* @returns
|
|
95
|
+
*/
|
|
96
|
+
async unfailReq(req: EntityProvenTxReq, indent: number): Promise<string> {
|
|
97
|
+
let log = ''
|
|
98
|
+
|
|
99
|
+
const storage = this.storage
|
|
100
|
+
const services = this.monitor.services
|
|
101
|
+
|
|
102
|
+
const txIds = req.notify.transactionIds || []
|
|
103
|
+
for (const id of txIds) {
|
|
104
|
+
const bsvtx = Transaction.fromBinary(req.rawTx)
|
|
105
|
+
await this.storage.runAsStorageProvider(async sp => {
|
|
106
|
+
const spk = sp as StorageProvider
|
|
107
|
+
const tx = await sp.findTransactionById(id, undefined, true)
|
|
108
|
+
if (!tx) {
|
|
109
|
+
log += ' '.repeat(indent) + `transaction ${id} was not found\n`
|
|
110
|
+
return
|
|
111
|
+
}
|
|
112
|
+
await sp.updateTransaction(tx.transactionId, { status: 'unproven' })
|
|
113
|
+
tx.status = 'unproven'
|
|
114
|
+
log += ' '.repeat(indent) + `transaction ${id} status is now 'unproven'\n`
|
|
115
|
+
let vin = -1
|
|
116
|
+
for (const bi of bsvtx.inputs) {
|
|
117
|
+
vin++
|
|
118
|
+
const is = await sp.findOutputs({
|
|
119
|
+
partial: { userId: tx.userId, txid: bi.sourceTXID!, vout: bi.sourceOutputIndex }
|
|
120
|
+
})
|
|
121
|
+
if (is.length !== 1) {
|
|
122
|
+
log += ' '.repeat(indent + 2) + `input ${vin} not matched to user's outputs\n`
|
|
123
|
+
} else {
|
|
124
|
+
const oi = is[0]
|
|
125
|
+
log +=
|
|
126
|
+
' '.repeat(indent + 2) +
|
|
127
|
+
`input ${vin} matched to output ${oi.outputId} updated spentBy ${tx.transactionId}\n`
|
|
128
|
+
await sp.updateOutput(oi.outputId, { spendable: false, spentBy: tx.transactionId })
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
const outputs = await sp.findOutputs({ partial: { userId: tx.userId, transactionId: tx.transactionId } })
|
|
132
|
+
for (const o of outputs) {
|
|
133
|
+
await spk.validateOutputScript(o)
|
|
134
|
+
if (!o.lockingScript) {
|
|
135
|
+
log += ' '.repeat(indent + 2) + `output ${o.outputId} does not have a valid locking script\n`
|
|
136
|
+
} else {
|
|
137
|
+
const isUtxo = await services.isUtxo(o)
|
|
138
|
+
if (isUtxo !== o.spendable) {
|
|
139
|
+
log += ' '.repeat(indent + 2) + `output ${o.outputId} set to ${isUtxo ? 'spendable' : 'spent'}\n`
|
|
140
|
+
await sp.updateOutput(o.outputId, { spendable: isUtxo })
|
|
141
|
+
} else {
|
|
142
|
+
log += ' '.repeat(indent + 2) + `output ${o.outputId} unchanged\n`
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
})
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
return log
|
|
150
|
+
}
|
|
151
|
+
}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { MonitorStorage, Monitor } from '../Monitor'
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* A monitor task performs some periodic or state triggered maintenance function
|
|
5
|
+
* on the data managed by a wallet (Bitcoin UTXO manager, aka wallet)
|
|
6
|
+
*
|
|
7
|
+
* The monitor maintains a collection of tasks.
|
|
8
|
+
*
|
|
9
|
+
* It runs each task's non-asynchronous trigger to determine if the runTask method needs to run.
|
|
10
|
+
*
|
|
11
|
+
* Tasks that need to be run are run consecutively by awaiting their async runTask override method.
|
|
12
|
+
*
|
|
13
|
+
* The monitor then waits a fixed interval before repeating...
|
|
14
|
+
*
|
|
15
|
+
* Tasks may use the monitor_events table to persist their execution history.
|
|
16
|
+
* This is done by accessing the wathman.storage object.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
export abstract class WalletMonitorTask {
|
|
20
|
+
/**
|
|
21
|
+
* Set by monitor each time runTask completes
|
|
22
|
+
*/
|
|
23
|
+
lastRunMsecsSinceEpoch = 0
|
|
24
|
+
|
|
25
|
+
storage: MonitorStorage
|
|
26
|
+
|
|
27
|
+
constructor(
|
|
28
|
+
public monitor: Monitor,
|
|
29
|
+
public name: string
|
|
30
|
+
) {
|
|
31
|
+
this.storage = monitor.storage
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Override to handle async task setup configuration.
|
|
36
|
+
*
|
|
37
|
+
* Called before first call to `trigger`
|
|
38
|
+
*/
|
|
39
|
+
async asyncSetup(): Promise<void> {}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Return true if `runTask` needs to be called now.
|
|
43
|
+
*/
|
|
44
|
+
abstract trigger(nowMsecsSinceEpoch: number): { run: boolean }
|
|
45
|
+
|
|
46
|
+
abstract runTask(): Promise<string>
|
|
47
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import {
|
|
2
|
+
GetPublicKeyArgs,
|
|
3
|
+
GetPublicKeyResult,
|
|
4
|
+
OriginatorDomainNameStringUnder250Bytes,
|
|
5
|
+
WalletDecryptArgs,
|
|
6
|
+
WalletDecryptResult,
|
|
7
|
+
WalletEncryptArgs,
|
|
8
|
+
WalletEncryptResult
|
|
9
|
+
} from '@bsv/sdk'
|
|
10
|
+
|
|
11
|
+
export interface CertOpsWallet {
|
|
12
|
+
getPublicKey(
|
|
13
|
+
args: GetPublicKeyArgs,
|
|
14
|
+
originator?: OriginatorDomainNameStringUnder250Bytes
|
|
15
|
+
): Promise<GetPublicKeyResult>
|
|
16
|
+
encrypt(args: WalletEncryptArgs, originator?: OriginatorDomainNameStringUnder250Bytes): Promise<WalletEncryptResult>
|
|
17
|
+
decrypt(args: WalletDecryptArgs, originator?: OriginatorDomainNameStringUnder250Bytes): Promise<WalletDecryptResult>
|
|
18
|
+
}
|