@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,153 @@
|
|
|
1
|
+
import { CWIStyleWalletManager, UMPTokenInteractor, OverlayUMPTokenInteractor } from './CWIStyleWalletManager'
|
|
2
|
+
import { PrivilegedKeyManager } from './sdk/PrivilegedKeyManager'
|
|
3
|
+
import { WalletInterface, Random, Utils, Transaction, RPuzzle, PrivateKey, BigNumber } from '@bsv/sdk'
|
|
4
|
+
import { WABClient } from './wab-client/WABClient'
|
|
5
|
+
import { AuthMethodInteractor } from './wab-client/auth-method-interactors/AuthMethodInteractor'
|
|
6
|
+
|
|
7
|
+
/**
|
|
8
|
+
* WalletAuthenticationManager
|
|
9
|
+
*
|
|
10
|
+
* A wallet manager that integrates
|
|
11
|
+
* with a WABClient for user authentication flows (e.g. Twilio phone).
|
|
12
|
+
*/
|
|
13
|
+
export class WalletAuthenticationManager extends CWIStyleWalletManager {
|
|
14
|
+
private wabClient: WABClient // instance of WABClient
|
|
15
|
+
private authMethod?: AuthMethodInteractor // chosen AuthMethod interactor
|
|
16
|
+
private tempPresentationKey?: string // for temporary persistence between auth steps
|
|
17
|
+
|
|
18
|
+
constructor(
|
|
19
|
+
adminOriginator: string,
|
|
20
|
+
walletBuilder: (primaryKey: number[], privilegedKeyManager: PrivilegedKeyManager) => Promise<WalletInterface>,
|
|
21
|
+
interactor: UMPTokenInteractor = new OverlayUMPTokenInteractor(),
|
|
22
|
+
recoveryKeySaver: (key: number[]) => Promise<true>,
|
|
23
|
+
passwordRetriever: (reason: string, test: (passwordCandidate: string) => boolean) => Promise<string>,
|
|
24
|
+
wabClient: WABClient,
|
|
25
|
+
authMethod?: AuthMethodInteractor,
|
|
26
|
+
stateSnapshot?: number[]
|
|
27
|
+
) {
|
|
28
|
+
super(
|
|
29
|
+
adminOriginator,
|
|
30
|
+
walletBuilder,
|
|
31
|
+
interactor,
|
|
32
|
+
recoveryKeySaver,
|
|
33
|
+
passwordRetriever,
|
|
34
|
+
// Here, we provide a custom new wallet funder that uses the Secret Server
|
|
35
|
+
async (presentationKey: number[], wallet: WalletInterface, adminOriginator: string) => {
|
|
36
|
+
debugger
|
|
37
|
+
const { paymentData } = await this.wabClient.requestFaucet(Utils.toHex(presentationKey))
|
|
38
|
+
if (!paymentData.k || !paymentData.tx) {
|
|
39
|
+
throw new Error('Invalid')
|
|
40
|
+
}
|
|
41
|
+
const tx = Transaction.fromAtomicBEEF(paymentData.tx as number[])
|
|
42
|
+
console.log(paymentData)
|
|
43
|
+
const faucetRedeemTXCreationResult = await wallet.createAction(
|
|
44
|
+
{
|
|
45
|
+
inputBEEF: tx.toBEEF(),
|
|
46
|
+
inputs: [
|
|
47
|
+
{
|
|
48
|
+
outpoint: `${paymentData.txid}.0`,
|
|
49
|
+
unlockingScriptLength: 108,
|
|
50
|
+
inputDescription: 'Fund from faucet'
|
|
51
|
+
}
|
|
52
|
+
],
|
|
53
|
+
description: 'Fund wallet',
|
|
54
|
+
options: {
|
|
55
|
+
acceptDelayedBroadcast: false
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
adminOriginator
|
|
59
|
+
)
|
|
60
|
+
const faucetRedeemTX = Transaction.fromAtomicBEEF(faucetRedeemTXCreationResult.signableTransaction!.tx)
|
|
61
|
+
const faucetRedemptionPuzzle = new RPuzzle()
|
|
62
|
+
const randomRedemptionPrivateKey = PrivateKey.fromRandom()
|
|
63
|
+
const faucetRedeemUnlocker = faucetRedemptionPuzzle.unlock(
|
|
64
|
+
new BigNumber(paymentData.k, 16),
|
|
65
|
+
randomRedemptionPrivateKey
|
|
66
|
+
)
|
|
67
|
+
const faucetRedeemUnlockingScript = await faucetRedeemUnlocker.sign(faucetRedeemTX, 0)
|
|
68
|
+
const signActionResult = await wallet.signAction({
|
|
69
|
+
reference: faucetRedeemTXCreationResult.signableTransaction!.reference,
|
|
70
|
+
spends: {
|
|
71
|
+
0: {
|
|
72
|
+
unlockingScript: faucetRedeemUnlockingScript.toHex()
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
})
|
|
76
|
+
console.log('Sign action result:', signActionResult)
|
|
77
|
+
},
|
|
78
|
+
stateSnapshot
|
|
79
|
+
)
|
|
80
|
+
|
|
81
|
+
this.wabClient = wabClient
|
|
82
|
+
this.authMethod = authMethod
|
|
83
|
+
}
|
|
84
|
+
|
|
85
|
+
/**
|
|
86
|
+
* Sets (or switches) the chosen AuthMethodInteractor at runtime,
|
|
87
|
+
* in case the user changes their mind or picks a new method in the UI.
|
|
88
|
+
*/
|
|
89
|
+
public setAuthMethod(method: AuthMethodInteractor) {
|
|
90
|
+
this.authMethod = method
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
/**
|
|
94
|
+
* Initiate the WAB-based flow, e.g. sending an SMS code or starting an ID check,
|
|
95
|
+
* using the chosen AuthMethodInteractor.
|
|
96
|
+
*/
|
|
97
|
+
public async startAuth(payload: any): Promise<void> {
|
|
98
|
+
if (!this.authMethod) {
|
|
99
|
+
throw new Error('No AuthMethod selected in WalletAuthenticationManager')
|
|
100
|
+
}
|
|
101
|
+
this.tempPresentationKey = this.generateTemporaryPresentationKey()
|
|
102
|
+
|
|
103
|
+
// For example, if this.authMethod is Twilio, `payload` might contain { phoneNumber: "+1..." }
|
|
104
|
+
const startRes = await this.wabClient.startAuthMethod(
|
|
105
|
+
this.authMethod,
|
|
106
|
+
// The user might not have a presentationKey yet, so we generate one locally to pass to the server.
|
|
107
|
+
// If it’s an existing user on the WAB side, the WAB will give us the stored key later.
|
|
108
|
+
// But we do need some placeholder key for the 'startAuth' call:
|
|
109
|
+
this.tempPresentationKey,
|
|
110
|
+
payload
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
if (!startRes.success) {
|
|
114
|
+
throw new Error(startRes.message || 'Failed to start WAB auth method')
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
/**
|
|
119
|
+
* Completes the WAB-based flow, retrieving the final presentationKey from WAB if successful.
|
|
120
|
+
*/
|
|
121
|
+
public async completeAuth(payload: any): Promise<void> {
|
|
122
|
+
if (!this.authMethod || !this.tempPresentationKey) {
|
|
123
|
+
throw new Error('No AuthMethod selected in WalletAuthenticationManager or startAuth has yet to be called.')
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// Unser the temp presentation key early (for security)
|
|
127
|
+
const tempKey = this.tempPresentationKey
|
|
128
|
+
this.tempPresentationKey = undefined
|
|
129
|
+
|
|
130
|
+
const result = await this.wabClient.completeAuthMethod(this.authMethod, tempKey, payload)
|
|
131
|
+
|
|
132
|
+
if (!result.success || !result.presentationKey) {
|
|
133
|
+
throw new Error(result.message || 'Failed to complete WAB auth')
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// We now have the final 256-bit key in hex from the WAB
|
|
137
|
+
const presentationKeyHex = result.presentationKey
|
|
138
|
+
const presentationKeyBytes = Utils.toArray(presentationKeyHex, 'hex')
|
|
139
|
+
|
|
140
|
+
// Provide this presentation key to the underlying CWI logic:
|
|
141
|
+
// This sets 'this.presentationKey' and determines if it's a new or existing user
|
|
142
|
+
// based on whether a UMP token exists on chain. We'll do "presentation-key-and-password"
|
|
143
|
+
// for new user flows, for example, or user might choose "presentation-key-and-recovery-key" if we wanted.
|
|
144
|
+
// Either way, WAB has now done its job and we are off to base-layer CWI logic at this point!
|
|
145
|
+
await this.providePresentationKey(presentationKeyBytes)
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
private generateTemporaryPresentationKey(): string {
|
|
149
|
+
// For the 'startAuth' call, we can generate a random 32 bytes → 64 hex chars.
|
|
150
|
+
const randomBytes = Random(32) // array of length 32
|
|
151
|
+
return Utils.toHex(randomBytes)
|
|
152
|
+
}
|
|
153
|
+
}
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import { Beef, CreateActionArgs, WalletInterface, WalletLoggerInterface, WalletLoggerLog } from '@bsv/sdk'
|
|
2
|
+
import { WalletError } from './sdk/WalletError'
|
|
3
|
+
|
|
4
|
+
export class WalletLogger implements WalletLoggerInterface {
|
|
5
|
+
indent: number = 0
|
|
6
|
+
logs: WalletLoggerLog[] = []
|
|
7
|
+
isOrigin: boolean = true
|
|
8
|
+
isError: boolean = false
|
|
9
|
+
level?: WalletLoggerLevel
|
|
10
|
+
flushFormat?: 'json'
|
|
11
|
+
|
|
12
|
+
constructor(log?: string | WalletLoggerInterface) {
|
|
13
|
+
if (log) {
|
|
14
|
+
const lo = typeof log === 'string' ? JSON.parse(log) : log
|
|
15
|
+
this.indent = lo.indent || 0
|
|
16
|
+
this.logs = lo.logs || []
|
|
17
|
+
this.isOrigin = this.indent === 0
|
|
18
|
+
this.level = lo.level
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
private logAny(message?: any): string {
|
|
23
|
+
if (!message) return ''
|
|
24
|
+
if (typeof message === 'string') return message
|
|
25
|
+
if (typeof message === 'object') return JSON.stringify(message)
|
|
26
|
+
return ''
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
private toAdd(
|
|
30
|
+
isBegin: boolean,
|
|
31
|
+
isEnd: boolean,
|
|
32
|
+
isError: boolean,
|
|
33
|
+
message?: any,
|
|
34
|
+
optionalParams?: any[]
|
|
35
|
+
): WalletLoggerLog {
|
|
36
|
+
let add = ''
|
|
37
|
+
if (message) add += this.logAny(message)
|
|
38
|
+
if (optionalParams) for (const p of optionalParams) add += this.logAny(p)
|
|
39
|
+
let log = {
|
|
40
|
+
when: Date.now(),
|
|
41
|
+
indent: this.indent,
|
|
42
|
+
isBegin,
|
|
43
|
+
isEnd,
|
|
44
|
+
isError,
|
|
45
|
+
log: add
|
|
46
|
+
}
|
|
47
|
+
return log
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
private stampLog(isBegin: boolean, isEnd: boolean, isError: boolean, message?: any, optionalParams?: any[]) {
|
|
51
|
+
const add = this.toAdd(isBegin, isEnd, isError, message, optionalParams)
|
|
52
|
+
this.logs.push(add)
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
group(...label: any[]): void {
|
|
56
|
+
this.stampLog(true, false, false, undefined, label)
|
|
57
|
+
this.indent++
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
groupEnd(): void {
|
|
61
|
+
this.indent--
|
|
62
|
+
if (this.indent < 0) this.indent = 0
|
|
63
|
+
this.stampLog(false, true, false)
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
log(message?: any, ...optionalParams: any[]): void {
|
|
67
|
+
this.stampLog(false, false, false, message, optionalParams)
|
|
68
|
+
}
|
|
69
|
+
error(message?: any, ...optionalParams: any[]): void {
|
|
70
|
+
this.stampLog(false, false, true, message, optionalParams)
|
|
71
|
+
this.isError = true
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
toWalletLoggerJson(): object {
|
|
75
|
+
const json: object = {
|
|
76
|
+
isWalletLoggerJson: true,
|
|
77
|
+
indent: this.indent,
|
|
78
|
+
logs: this.logs,
|
|
79
|
+
isError: this.isError
|
|
80
|
+
}
|
|
81
|
+
return json
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
toLogString(): string {
|
|
85
|
+
let log = ''
|
|
86
|
+
if (this.logs.length > 0) {
|
|
87
|
+
const first = this.logs[0]
|
|
88
|
+
const last = this.logs.slice(-1)[0]
|
|
89
|
+
const msecs = last.when - first.when
|
|
90
|
+
log += ` msecs WalletLogger ${new Date(first.when).toISOString()} logged ${msecs / 1000} seconds\n`
|
|
91
|
+
let prev = first
|
|
92
|
+
const begins: WalletLoggerLog[] = []
|
|
93
|
+
for (const d of this.logs) {
|
|
94
|
+
let df = (d.when - prev.when).toString()
|
|
95
|
+
df = `${' '.repeat(8 - df.length)}${df}`
|
|
96
|
+
const what = d.isBegin ? ' begin' : d.isEnd ? ' end' : d.isError ? ' ERROR' : ''
|
|
97
|
+
if (d.isBegin) begins.push(d)
|
|
98
|
+
let m = d.log
|
|
99
|
+
if (!m && d.isEnd && begins.length > 0) {
|
|
100
|
+
const begin = begins.pop()!
|
|
101
|
+
m = begin.log
|
|
102
|
+
}
|
|
103
|
+
log += `${df}${' '.repeat(d.indent)}${what} ${m}\n`
|
|
104
|
+
prev = d
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
return log
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
flush(): object | undefined {
|
|
111
|
+
if (this.logs.length > 0) {
|
|
112
|
+
const trace = this.toLogString()
|
|
113
|
+
const output = this.isError ? console.error : console.log
|
|
114
|
+
if (this.flushFormat === 'json') {
|
|
115
|
+
const name = this.logs[0].log
|
|
116
|
+
const log = {
|
|
117
|
+
name,
|
|
118
|
+
trace
|
|
119
|
+
}
|
|
120
|
+
output(JSON.stringify(log))
|
|
121
|
+
} else {
|
|
122
|
+
output(trace)
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
const r = this.isOrigin ? undefined : this.toWalletLoggerJson()
|
|
126
|
+
return r
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
merge(log: WalletLoggerInterface): void {
|
|
130
|
+
if (log.logs) {
|
|
131
|
+
this.logs.push(...log.logs)
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
export function logWalletError(eu: unknown, logger?: WalletLoggerInterface, label?: string): void {
|
|
137
|
+
if (!logger) return
|
|
138
|
+
logger.error(label || 'WalletError', WalletError.unknownToJson(eu))
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
export function logCreateActionArgs(args: CreateActionArgs): object {
|
|
142
|
+
const o: any = {
|
|
143
|
+
description: args.description
|
|
144
|
+
}
|
|
145
|
+
if (args.labels) o.labels = args.labels
|
|
146
|
+
if (args.inputBEEF) o.inputBEEF = Beef.fromBinary(args.inputBEEF).toLogString()
|
|
147
|
+
if (args.lockTime !== undefined) o.lockTime = args.lockTime
|
|
148
|
+
if (args.version !== undefined) o.version = args.version
|
|
149
|
+
/*
|
|
150
|
+
if (args.inputs) {
|
|
151
|
+
|
|
152
|
+
}
|
|
153
|
+
if (args.outputs) {
|
|
154
|
+
|
|
155
|
+
}
|
|
156
|
+
options: validateCreateActionOptions(args.options),
|
|
157
|
+
isSendWith: false,
|
|
158
|
+
isDelayed: false,
|
|
159
|
+
isNoSend: false,
|
|
160
|
+
isNewTx: false,
|
|
161
|
+
isRemixChange: false,
|
|
162
|
+
isSignAction: false,
|
|
163
|
+
randomVals: undefined,
|
|
164
|
+
includeAllSourceTransactions: false,
|
|
165
|
+
isTestWerrReviewActions: false
|
|
166
|
+
*/
|
|
167
|
+
return o
|
|
168
|
+
}
|
|
169
|
+
|
|
170
|
+
/**
|
|
171
|
+
* Optional. Logging levels that may influence what is logged.
|
|
172
|
+
*
|
|
173
|
+
* 'error' Only requests resulting in an exception should be logged.
|
|
174
|
+
* 'warn' Also log requests that succeed but with an abnormal condition.
|
|
175
|
+
* 'info' Also log normal successful requests.
|
|
176
|
+
* 'debug' Add input parm and result details where possible.
|
|
177
|
+
* 'trace' Instead of adding debug details, focus on execution path and timing.
|
|
178
|
+
*/
|
|
179
|
+
export type WalletLoggerLevel = 'error' | 'warn' | 'info' | 'debug' | 'trace'
|
|
180
|
+
|
|
181
|
+
/**
|
|
182
|
+
* Constructor properties available to `WalletLogger`
|
|
183
|
+
*/
|
|
184
|
+
export interface WalletLoggerArgs {
|
|
185
|
+
/**
|
|
186
|
+
* Optional. Logging levels that may influence what is logged.
|
|
187
|
+
*
|
|
188
|
+
* 'error' Only requests resulting in an exception should be logged.
|
|
189
|
+
* 'warn' Also log requests that succeed but with an abnormal condition.
|
|
190
|
+
* 'info' Also log normal successful requests.
|
|
191
|
+
* 'debug' Add input parm and result details where possible.
|
|
192
|
+
* 'trace' Instead of adding debug details, focus on execution path and timing.
|
|
193
|
+
*/
|
|
194
|
+
level?: 'error' | 'warn' | 'info' | 'debug' | 'trace'
|
|
195
|
+
|
|
196
|
+
/**
|
|
197
|
+
* Valid if an accumulating logger. Count of `group` calls without matching `groupEnd`.
|
|
198
|
+
*/
|
|
199
|
+
indent?: number
|
|
200
|
+
/**
|
|
201
|
+
* True if this is an accumulating logger and the logger belongs to the object servicing the initial request.
|
|
202
|
+
*/
|
|
203
|
+
isOrigin?: boolean
|
|
204
|
+
/**
|
|
205
|
+
* True if this is an accumulating logger and an error was logged.
|
|
206
|
+
*/
|
|
207
|
+
isError?: boolean
|
|
208
|
+
|
|
209
|
+
/**
|
|
210
|
+
* Optional array of accumulated logged data and errors.
|
|
211
|
+
*/
|
|
212
|
+
logs?: WalletLoggerLog[]
|
|
213
|
+
}
|