@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,369 @@
|
|
|
1
|
+
import { Beef, ListActionsResult, ListOutputsResult, Validation } from '@bsv/sdk'
|
|
2
|
+
import {
|
|
3
|
+
TrxToken,
|
|
4
|
+
PurgeParams,
|
|
5
|
+
PurgeResults,
|
|
6
|
+
ProvenOrRawTx,
|
|
7
|
+
AuthId,
|
|
8
|
+
FindCertificatesArgs,
|
|
9
|
+
FindOutputBasketsArgs,
|
|
10
|
+
FindOutputsArgs,
|
|
11
|
+
FindOutputTagMapsArgs,
|
|
12
|
+
FindProvenTxReqsArgs,
|
|
13
|
+
FindProvenTxsArgs,
|
|
14
|
+
FindTxLabelMapsArgs,
|
|
15
|
+
FindCertificateFieldsArgs,
|
|
16
|
+
FindCommissionsArgs,
|
|
17
|
+
FindMonitorEventsArgs,
|
|
18
|
+
FindOutputTagsArgs,
|
|
19
|
+
FindSyncStatesArgs,
|
|
20
|
+
FindTransactionsArgs,
|
|
21
|
+
FindTxLabelsArgs,
|
|
22
|
+
FindUsersArgs,
|
|
23
|
+
FindForUserSincePagedArgs,
|
|
24
|
+
StorageGetBeefOptions
|
|
25
|
+
} from '../../sdk'
|
|
26
|
+
import {
|
|
27
|
+
TableCertificate,
|
|
28
|
+
TableCertificateField,
|
|
29
|
+
TableCertificateX,
|
|
30
|
+
TableCommission,
|
|
31
|
+
TableMonitorEvent,
|
|
32
|
+
TableOutput,
|
|
33
|
+
TableOutputBasket,
|
|
34
|
+
TableOutputTag,
|
|
35
|
+
TableOutputTagMap,
|
|
36
|
+
TableProvenTx,
|
|
37
|
+
TableProvenTxReq,
|
|
38
|
+
TableSettings,
|
|
39
|
+
TableSyncState,
|
|
40
|
+
TableTransaction,
|
|
41
|
+
TableTxLabel,
|
|
42
|
+
TableTxLabelMap,
|
|
43
|
+
TableUser,
|
|
44
|
+
Services,
|
|
45
|
+
StorageAdminStats
|
|
46
|
+
} from '../../index.client'
|
|
47
|
+
import { StorageProvider } from '../../storage/StorageProvider'
|
|
48
|
+
|
|
49
|
+
export async function getBeefForTxid(services: Services, txid: string): Promise<Beef> {
|
|
50
|
+
const storage = new ServicesOnlyStorageProvider(services)
|
|
51
|
+
const beef = await storage.getBeefForTxid(txid)
|
|
52
|
+
return beef
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* The generalized implementation of getBeefForTransaction uses storage to
|
|
57
|
+
* avoid incurring the cost of redundant block chain data queries.
|
|
58
|
+
*
|
|
59
|
+
* This class makes the generalized implementation of getBeefForTransaction
|
|
60
|
+
* available in situations where there storage is not relevant.
|
|
61
|
+
*/
|
|
62
|
+
class ServicesOnlyStorageProvider extends StorageProvider {
|
|
63
|
+
gbo: StorageGetBeefOptions
|
|
64
|
+
|
|
65
|
+
constructor(services: Services) {
|
|
66
|
+
const o = StorageProvider.createStorageBaseOptions(services.chain)
|
|
67
|
+
super(o)
|
|
68
|
+
this.setServices(services)
|
|
69
|
+
this.gbo = {
|
|
70
|
+
ignoreServices: false,
|
|
71
|
+
ignoreStorage: true,
|
|
72
|
+
ignoreNewProven: true
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
async getBeefForTxid(txid: string): Promise<Beef> {
|
|
77
|
+
const beef = await this.getBeefForTransaction(txid, this.gbo)
|
|
78
|
+
return beef
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
nip = new Error('Method not implemented.')
|
|
82
|
+
override reviewStatus(args: { agedLimit: Date; trx?: TrxToken }): Promise<{ log: string }> {
|
|
83
|
+
throw this.nip
|
|
84
|
+
}
|
|
85
|
+
override purgeData(params: PurgeParams, trx?: TrxToken): Promise<PurgeResults> {
|
|
86
|
+
throw this.nip
|
|
87
|
+
}
|
|
88
|
+
override allocateChangeInput(
|
|
89
|
+
userId: number,
|
|
90
|
+
basketId: number,
|
|
91
|
+
targetSatoshis: number,
|
|
92
|
+
exactSatoshis: number | undefined,
|
|
93
|
+
excludeSending: boolean,
|
|
94
|
+
transactionId: number
|
|
95
|
+
): Promise<TableOutput | undefined> {
|
|
96
|
+
throw this.nip
|
|
97
|
+
}
|
|
98
|
+
override getProvenOrRawTx(txid: string, trx?: TrxToken): Promise<ProvenOrRawTx> {
|
|
99
|
+
throw this.nip
|
|
100
|
+
}
|
|
101
|
+
override getRawTxOfKnownValidTransaction(
|
|
102
|
+
txid?: string,
|
|
103
|
+
offset?: number,
|
|
104
|
+
length?: number,
|
|
105
|
+
trx?: TrxToken
|
|
106
|
+
): Promise<number[] | undefined> {
|
|
107
|
+
throw this.nip
|
|
108
|
+
}
|
|
109
|
+
override getLabelsForTransactionId(transactionId?: number, trx?: TrxToken): Promise<TableTxLabel[]> {
|
|
110
|
+
throw this.nip
|
|
111
|
+
}
|
|
112
|
+
override getTagsForOutputId(outputId: number, trx?: TrxToken): Promise<TableOutputTag[]> {
|
|
113
|
+
throw this.nip
|
|
114
|
+
}
|
|
115
|
+
override listActions(auth: AuthId, args: Validation.ValidListActionsArgs): Promise<ListActionsResult> {
|
|
116
|
+
throw this.nip
|
|
117
|
+
}
|
|
118
|
+
override listOutputs(auth: AuthId, args: Validation.ValidListOutputsArgs): Promise<ListOutputsResult> {
|
|
119
|
+
throw this.nip
|
|
120
|
+
}
|
|
121
|
+
override countChangeInputs(userId: number, basketId: number, excludeSending: boolean): Promise<number> {
|
|
122
|
+
throw this.nip
|
|
123
|
+
}
|
|
124
|
+
override findCertificatesAuth(auth: AuthId, args: FindCertificatesArgs): Promise<TableCertificateX[]> {
|
|
125
|
+
throw this.nip
|
|
126
|
+
}
|
|
127
|
+
override findOutputBasketsAuth(auth: AuthId, args: FindOutputBasketsArgs): Promise<TableOutputBasket[]> {
|
|
128
|
+
throw this.nip
|
|
129
|
+
}
|
|
130
|
+
override findOutputsAuth(auth: AuthId, args: FindOutputsArgs): Promise<TableOutput[]> {
|
|
131
|
+
throw this.nip
|
|
132
|
+
}
|
|
133
|
+
override insertCertificateAuth(auth: AuthId, certificate: TableCertificateX): Promise<number> {
|
|
134
|
+
throw this.nip
|
|
135
|
+
}
|
|
136
|
+
override dropAllData(): Promise<void> {
|
|
137
|
+
throw this.nip
|
|
138
|
+
}
|
|
139
|
+
override migrate(storageName: string, storageIdentityKey: string): Promise<string> {
|
|
140
|
+
throw this.nip
|
|
141
|
+
}
|
|
142
|
+
override findOutputTagMaps(args: FindOutputTagMapsArgs): Promise<TableOutputTagMap[]> {
|
|
143
|
+
throw this.nip
|
|
144
|
+
}
|
|
145
|
+
override findProvenTxReqs(args: FindProvenTxReqsArgs): Promise<TableProvenTxReq[]> {
|
|
146
|
+
throw this.nip
|
|
147
|
+
}
|
|
148
|
+
override findProvenTxs(args: FindProvenTxsArgs): Promise<TableProvenTx[]> {
|
|
149
|
+
throw this.nip
|
|
150
|
+
}
|
|
151
|
+
override findTxLabelMaps(args: FindTxLabelMapsArgs): Promise<TableTxLabelMap[]> {
|
|
152
|
+
throw this.nip
|
|
153
|
+
}
|
|
154
|
+
override countOutputTagMaps(args: FindOutputTagMapsArgs): Promise<number> {
|
|
155
|
+
throw this.nip
|
|
156
|
+
}
|
|
157
|
+
override countProvenTxReqs(args: FindProvenTxReqsArgs): Promise<number> {
|
|
158
|
+
throw this.nip
|
|
159
|
+
}
|
|
160
|
+
override countProvenTxs(args: FindProvenTxsArgs): Promise<number> {
|
|
161
|
+
throw this.nip
|
|
162
|
+
}
|
|
163
|
+
override countTxLabelMaps(args: FindTxLabelMapsArgs): Promise<number> {
|
|
164
|
+
throw this.nip
|
|
165
|
+
}
|
|
166
|
+
override insertCertificate(certificate: TableCertificate, trx?: TrxToken): Promise<number> {
|
|
167
|
+
throw this.nip
|
|
168
|
+
}
|
|
169
|
+
override insertCertificateField(certificateField: TableCertificateField, trx?: TrxToken): Promise<void> {
|
|
170
|
+
throw this.nip
|
|
171
|
+
}
|
|
172
|
+
override insertCommission(commission: TableCommission, trx?: TrxToken): Promise<number> {
|
|
173
|
+
throw this.nip
|
|
174
|
+
}
|
|
175
|
+
override insertMonitorEvent(event: TableMonitorEvent, trx?: TrxToken): Promise<number> {
|
|
176
|
+
throw this.nip
|
|
177
|
+
}
|
|
178
|
+
override insertOutput(output: TableOutput, trx?: TrxToken): Promise<number> {
|
|
179
|
+
throw this.nip
|
|
180
|
+
}
|
|
181
|
+
override insertOutputBasket(basket: TableOutputBasket, trx?: TrxToken): Promise<number> {
|
|
182
|
+
throw this.nip
|
|
183
|
+
}
|
|
184
|
+
override insertOutputTag(tag: TableOutputTag, trx?: TrxToken): Promise<number> {
|
|
185
|
+
throw this.nip
|
|
186
|
+
}
|
|
187
|
+
override insertOutputTagMap(tagMap: TableOutputTagMap, trx?: TrxToken): Promise<void> {
|
|
188
|
+
throw this.nip
|
|
189
|
+
}
|
|
190
|
+
override insertProvenTx(tx: TableProvenTx, trx?: TrxToken): Promise<number> {
|
|
191
|
+
throw this.nip
|
|
192
|
+
}
|
|
193
|
+
override insertProvenTxReq(tx: TableProvenTxReq, trx?: TrxToken): Promise<number> {
|
|
194
|
+
throw this.nip
|
|
195
|
+
}
|
|
196
|
+
override insertSyncState(syncState: TableSyncState, trx?: TrxToken): Promise<number> {
|
|
197
|
+
throw this.nip
|
|
198
|
+
}
|
|
199
|
+
override insertTransaction(tx: TableTransaction, trx?: TrxToken): Promise<number> {
|
|
200
|
+
throw this.nip
|
|
201
|
+
}
|
|
202
|
+
override insertTxLabel(label: TableTxLabel, trx?: TrxToken): Promise<number> {
|
|
203
|
+
throw this.nip
|
|
204
|
+
}
|
|
205
|
+
override insertTxLabelMap(labelMap: TableTxLabelMap, trx?: TrxToken): Promise<void> {
|
|
206
|
+
throw this.nip
|
|
207
|
+
}
|
|
208
|
+
override insertUser(user: TableUser, trx?: TrxToken): Promise<number> {
|
|
209
|
+
throw this.nip
|
|
210
|
+
}
|
|
211
|
+
override updateCertificate(id: number, update: Partial<TableCertificate>, trx?: TrxToken): Promise<number> {
|
|
212
|
+
throw this.nip
|
|
213
|
+
}
|
|
214
|
+
override updateCertificateField(
|
|
215
|
+
certificateId: number,
|
|
216
|
+
fieldName: string,
|
|
217
|
+
update: Partial<TableCertificateField>,
|
|
218
|
+
trx?: TrxToken
|
|
219
|
+
): Promise<number> {
|
|
220
|
+
throw this.nip
|
|
221
|
+
}
|
|
222
|
+
override updateCommission(id: number, update: Partial<TableCommission>, trx?: TrxToken): Promise<number> {
|
|
223
|
+
throw this.nip
|
|
224
|
+
}
|
|
225
|
+
override updateMonitorEvent(id: number, update: Partial<TableMonitorEvent>, trx?: TrxToken): Promise<number> {
|
|
226
|
+
throw this.nip
|
|
227
|
+
}
|
|
228
|
+
override updateOutput(id: number, update: Partial<TableOutput>, trx?: TrxToken): Promise<number> {
|
|
229
|
+
throw this.nip
|
|
230
|
+
}
|
|
231
|
+
override updateOutputBasket(id: number, update: Partial<TableOutputBasket>, trx?: TrxToken): Promise<number> {
|
|
232
|
+
throw this.nip
|
|
233
|
+
}
|
|
234
|
+
override updateOutputTag(id: number, update: Partial<TableOutputTag>, trx?: TrxToken): Promise<number> {
|
|
235
|
+
throw this.nip
|
|
236
|
+
}
|
|
237
|
+
override updateOutputTagMap(
|
|
238
|
+
outputId: number,
|
|
239
|
+
tagId: number,
|
|
240
|
+
update: Partial<TableOutputTagMap>,
|
|
241
|
+
trx?: TrxToken
|
|
242
|
+
): Promise<number> {
|
|
243
|
+
throw this.nip
|
|
244
|
+
}
|
|
245
|
+
override updateProvenTx(id: number, update: Partial<TableProvenTx>, trx?: TrxToken): Promise<number> {
|
|
246
|
+
throw this.nip
|
|
247
|
+
}
|
|
248
|
+
override updateProvenTxReq(
|
|
249
|
+
id: number | number[],
|
|
250
|
+
update: Partial<TableProvenTxReq>,
|
|
251
|
+
trx?: TrxToken
|
|
252
|
+
): Promise<number> {
|
|
253
|
+
throw this.nip
|
|
254
|
+
}
|
|
255
|
+
override updateSyncState(id: number, update: Partial<TableSyncState>, trx?: TrxToken): Promise<number> {
|
|
256
|
+
throw this.nip
|
|
257
|
+
}
|
|
258
|
+
override updateTransaction(
|
|
259
|
+
id: number | number[],
|
|
260
|
+
update: Partial<TableTransaction>,
|
|
261
|
+
trx?: TrxToken
|
|
262
|
+
): Promise<number> {
|
|
263
|
+
throw this.nip
|
|
264
|
+
}
|
|
265
|
+
override updateTxLabel(id: number, update: Partial<TableTxLabel>, trx?: TrxToken): Promise<number> {
|
|
266
|
+
throw this.nip
|
|
267
|
+
}
|
|
268
|
+
override updateTxLabelMap(
|
|
269
|
+
transactionId: number,
|
|
270
|
+
txLabelId: number,
|
|
271
|
+
update: Partial<TableTxLabelMap>,
|
|
272
|
+
trx?: TrxToken
|
|
273
|
+
): Promise<number> {
|
|
274
|
+
throw this.nip
|
|
275
|
+
}
|
|
276
|
+
override updateUser(id: number, update: Partial<TableUser>, trx?: TrxToken): Promise<number> {
|
|
277
|
+
throw this.nip
|
|
278
|
+
}
|
|
279
|
+
override destroy(): Promise<void> {
|
|
280
|
+
throw this.nip
|
|
281
|
+
}
|
|
282
|
+
override transaction<T>(scope: (trx: TrxToken) => Promise<T>, trx?: TrxToken): Promise<T> {
|
|
283
|
+
throw this.nip
|
|
284
|
+
}
|
|
285
|
+
override readSettings(trx?: TrxToken): Promise<TableSettings> {
|
|
286
|
+
throw this.nip
|
|
287
|
+
}
|
|
288
|
+
override findCertificateFields(args: FindCertificateFieldsArgs): Promise<TableCertificateField[]> {
|
|
289
|
+
throw this.nip
|
|
290
|
+
}
|
|
291
|
+
override findCertificates(args: FindCertificatesArgs): Promise<TableCertificateX[]> {
|
|
292
|
+
throw this.nip
|
|
293
|
+
}
|
|
294
|
+
override findCommissions(args: FindCommissionsArgs): Promise<TableCommission[]> {
|
|
295
|
+
throw this.nip
|
|
296
|
+
}
|
|
297
|
+
override findMonitorEvents(args: FindMonitorEventsArgs): Promise<TableMonitorEvent[]> {
|
|
298
|
+
throw this.nip
|
|
299
|
+
}
|
|
300
|
+
override findOutputBaskets(args: FindOutputBasketsArgs): Promise<TableOutputBasket[]> {
|
|
301
|
+
throw this.nip
|
|
302
|
+
}
|
|
303
|
+
override findOutputs(args: FindOutputsArgs): Promise<TableOutput[]> {
|
|
304
|
+
throw this.nip
|
|
305
|
+
}
|
|
306
|
+
override findOutputTags(args: FindOutputTagsArgs): Promise<TableOutputTag[]> {
|
|
307
|
+
throw this.nip
|
|
308
|
+
}
|
|
309
|
+
override findSyncStates(args: FindSyncStatesArgs): Promise<TableSyncState[]> {
|
|
310
|
+
throw this.nip
|
|
311
|
+
}
|
|
312
|
+
override findTransactions(args: FindTransactionsArgs): Promise<TableTransaction[]> {
|
|
313
|
+
throw this.nip
|
|
314
|
+
}
|
|
315
|
+
override findTxLabels(args: FindTxLabelsArgs): Promise<TableTxLabel[]> {
|
|
316
|
+
throw this.nip
|
|
317
|
+
}
|
|
318
|
+
override findUsers(args: FindUsersArgs): Promise<TableUser[]> {
|
|
319
|
+
throw this.nip
|
|
320
|
+
}
|
|
321
|
+
override countCertificateFields(args: FindCertificateFieldsArgs): Promise<number> {
|
|
322
|
+
throw this.nip
|
|
323
|
+
}
|
|
324
|
+
override countCertificates(args: FindCertificatesArgs): Promise<number> {
|
|
325
|
+
throw this.nip
|
|
326
|
+
}
|
|
327
|
+
override countCommissions(args: FindCommissionsArgs): Promise<number> {
|
|
328
|
+
throw this.nip
|
|
329
|
+
}
|
|
330
|
+
override countMonitorEvents(args: FindMonitorEventsArgs): Promise<number> {
|
|
331
|
+
throw this.nip
|
|
332
|
+
}
|
|
333
|
+
override countOutputBaskets(args: FindOutputBasketsArgs): Promise<number> {
|
|
334
|
+
throw this.nip
|
|
335
|
+
}
|
|
336
|
+
override countOutputs(args: FindOutputsArgs): Promise<number> {
|
|
337
|
+
throw this.nip
|
|
338
|
+
}
|
|
339
|
+
override countOutputTags(args: FindOutputTagsArgs): Promise<number> {
|
|
340
|
+
throw this.nip
|
|
341
|
+
}
|
|
342
|
+
override countSyncStates(args: FindSyncStatesArgs): Promise<number> {
|
|
343
|
+
throw this.nip
|
|
344
|
+
}
|
|
345
|
+
override countTransactions(args: FindTransactionsArgs): Promise<number> {
|
|
346
|
+
throw this.nip
|
|
347
|
+
}
|
|
348
|
+
override countTxLabels(args: FindTxLabelsArgs): Promise<number> {
|
|
349
|
+
throw this.nip
|
|
350
|
+
}
|
|
351
|
+
override countUsers(args: FindUsersArgs): Promise<number> {
|
|
352
|
+
throw this.nip
|
|
353
|
+
}
|
|
354
|
+
override getProvenTxsForUser(args: FindForUserSincePagedArgs): Promise<TableProvenTx[]> {
|
|
355
|
+
throw this.nip
|
|
356
|
+
}
|
|
357
|
+
override getProvenTxReqsForUser(args: FindForUserSincePagedArgs): Promise<TableProvenTxReq[]> {
|
|
358
|
+
throw this.nip
|
|
359
|
+
}
|
|
360
|
+
override getTxLabelMapsForUser(args: FindForUserSincePagedArgs): Promise<TableTxLabelMap[]> {
|
|
361
|
+
throw this.nip
|
|
362
|
+
}
|
|
363
|
+
override getOutputTagMapsForUser(args: FindForUserSincePagedArgs): Promise<TableOutputTagMap[]> {
|
|
364
|
+
throw this.nip
|
|
365
|
+
}
|
|
366
|
+
override adminStats(adminIdentityKey: string): Promise<StorageAdminStats> {
|
|
367
|
+
throw this.nip
|
|
368
|
+
}
|
|
369
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { KeyDeriverApi } from '@bsv/sdk'
|
|
2
|
+
import { WalletStorageManager } from '../storage/WalletStorageManager'
|
|
3
|
+
import { Chain } from '../sdk/types'
|
|
4
|
+
|
|
5
|
+
export class WalletSigner {
|
|
6
|
+
isWalletSigner: true = true
|
|
7
|
+
|
|
8
|
+
chain: Chain
|
|
9
|
+
keyDeriver: KeyDeriverApi
|
|
10
|
+
storage: WalletStorageManager
|
|
11
|
+
|
|
12
|
+
constructor(chain: Chain, keyDeriver: KeyDeriverApi, storage: WalletStorageManager) {
|
|
13
|
+
this.chain = chain
|
|
14
|
+
this.keyDeriver = keyDeriver
|
|
15
|
+
this.storage = storage
|
|
16
|
+
}
|
|
17
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import { AcquireCertificateResult, Validation } from '@bsv/sdk'
|
|
2
|
+
import { Wallet } from '../../Wallet'
|
|
3
|
+
import { AuthId } from '../../sdk/WalletStorage.interfaces'
|
|
4
|
+
import { TableCertificateX } from '../../storage/schema/tables/TableCertificate'
|
|
5
|
+
|
|
6
|
+
export async function acquireDirectCertificate(
|
|
7
|
+
wallet: Wallet,
|
|
8
|
+
auth: AuthId,
|
|
9
|
+
vargs: Validation.ValidAcquireDirectCertificateArgs
|
|
10
|
+
): Promise<AcquireCertificateResult> {
|
|
11
|
+
const now = new Date()
|
|
12
|
+
const newCert: TableCertificateX = {
|
|
13
|
+
certificateId: 0, // replaced by storage insert
|
|
14
|
+
created_at: now,
|
|
15
|
+
updated_at: now,
|
|
16
|
+
userId: auth.userId!,
|
|
17
|
+
type: vargs.type,
|
|
18
|
+
subject: vargs.subject,
|
|
19
|
+
verifier: vargs.keyringRevealer === 'certifier' ? vargs.certifier : vargs.keyringRevealer,
|
|
20
|
+
serialNumber: vargs.serialNumber,
|
|
21
|
+
certifier: vargs.certifier,
|
|
22
|
+
revocationOutpoint: vargs.revocationOutpoint,
|
|
23
|
+
signature: vargs.signature,
|
|
24
|
+
fields: [],
|
|
25
|
+
isDeleted: false
|
|
26
|
+
}
|
|
27
|
+
for (const [name, value] of Object.entries(vargs.fields)) {
|
|
28
|
+
newCert.fields?.push({
|
|
29
|
+
certificateId: 0, // replaced by storage insert
|
|
30
|
+
created_at: now,
|
|
31
|
+
updated_at: now,
|
|
32
|
+
userId: auth.userId!,
|
|
33
|
+
fieldName: name,
|
|
34
|
+
fieldValue: value,
|
|
35
|
+
masterKey: vargs.keyringForSubject[name] || ''
|
|
36
|
+
})
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
const count = await wallet.storage.insertCertificate(newCert)
|
|
40
|
+
|
|
41
|
+
const r: AcquireCertificateResult = {
|
|
42
|
+
type: vargs.type,
|
|
43
|
+
subject: vargs.subject,
|
|
44
|
+
serialNumber: vargs.serialNumber,
|
|
45
|
+
certifier: vargs.certifier,
|
|
46
|
+
revocationOutpoint: vargs.revocationOutpoint,
|
|
47
|
+
signature: vargs.signature,
|
|
48
|
+
fields: vargs.fields
|
|
49
|
+
}
|
|
50
|
+
|
|
51
|
+
return r
|
|
52
|
+
}
|
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
import { Beef, Script, Transaction, TransactionInput, TransactionOutput, Validation } from '@bsv/sdk'
|
|
2
|
+
import { Wallet, PendingStorageInput } from '../../Wallet'
|
|
3
|
+
import {
|
|
4
|
+
StorageCreateActionResult,
|
|
5
|
+
StorageCreateTransactionSdkInput,
|
|
6
|
+
StorageCreateTransactionSdkOutput
|
|
7
|
+
} from '../../sdk/WalletStorage.interfaces'
|
|
8
|
+
import { WERR_INVALID_PARAMETER } from '../../sdk/WERR_errors'
|
|
9
|
+
import { asBsvSdkScript, verifyTruthy } from '../../utility/utilityHelpers'
|
|
10
|
+
import { KeyPair } from '../../sdk/types'
|
|
11
|
+
import { ScriptTemplateBRC29 } from '../../utility/ScriptTemplateBRC29'
|
|
12
|
+
|
|
13
|
+
export function buildSignableTransaction(
|
|
14
|
+
dctr: StorageCreateActionResult,
|
|
15
|
+
args: Validation.ValidCreateActionArgs,
|
|
16
|
+
wallet: Wallet
|
|
17
|
+
): {
|
|
18
|
+
tx: Transaction
|
|
19
|
+
amount: number
|
|
20
|
+
pdi: PendingStorageInput[]
|
|
21
|
+
log: string
|
|
22
|
+
} {
|
|
23
|
+
const changeKeys = wallet.getClientChangeKeyPair()
|
|
24
|
+
|
|
25
|
+
const inputBeef = args.inputBEEF ? Beef.fromBinary(args.inputBEEF) : undefined
|
|
26
|
+
|
|
27
|
+
const { inputs: storageInputs, outputs: storageOutputs } = dctr
|
|
28
|
+
|
|
29
|
+
const tx = new Transaction(args.version, [], [], args.lockTime)
|
|
30
|
+
|
|
31
|
+
// The order of outputs in storageOutputs is always:
|
|
32
|
+
// CreateActionArgs.outputs in the original order
|
|
33
|
+
// Commission output
|
|
34
|
+
// Change outputs
|
|
35
|
+
// The Vout values will be randomized if args.options.randomizeOutputs is true. Default is true.
|
|
36
|
+
const voutToIndex = Array<number>(storageOutputs.length)
|
|
37
|
+
for (let vout = 0; vout < storageOutputs.length; vout++) {
|
|
38
|
+
const i = storageOutputs.findIndex(o => o.vout === vout)
|
|
39
|
+
if (i < 0) throw new WERR_INVALID_PARAMETER('output.vout', `sequential. ${vout} is missing`)
|
|
40
|
+
voutToIndex[vout] = i
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
//////////////
|
|
44
|
+
// Add OUTPUTS
|
|
45
|
+
/////////////
|
|
46
|
+
for (let vout = 0; vout < storageOutputs.length; vout++) {
|
|
47
|
+
const i = voutToIndex[vout]
|
|
48
|
+
const out = storageOutputs[i]
|
|
49
|
+
if (vout !== out.vout)
|
|
50
|
+
throw new WERR_INVALID_PARAMETER('output.vout', `equal to array index. ${out.vout} !== ${vout}`)
|
|
51
|
+
|
|
52
|
+
const change = out.providedBy === 'storage' && out.purpose === 'change'
|
|
53
|
+
|
|
54
|
+
const lockingScript = change
|
|
55
|
+
? makeChangeLock(out, dctr, args, changeKeys, wallet)
|
|
56
|
+
: asBsvSdkScript(out.lockingScript)
|
|
57
|
+
|
|
58
|
+
const output: TransactionOutput = {
|
|
59
|
+
satoshis: out.satoshis,
|
|
60
|
+
lockingScript,
|
|
61
|
+
change
|
|
62
|
+
}
|
|
63
|
+
tx.addOutput(output)
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
if (storageOutputs.length === 0) {
|
|
67
|
+
// Add a dummy output to avoid transaction rejection by processors for having no outputs.
|
|
68
|
+
const output: TransactionOutput = {
|
|
69
|
+
satoshis: 0,
|
|
70
|
+
lockingScript: Script.fromASM('OP_FALSE OP_RETURN 42'),
|
|
71
|
+
change: false
|
|
72
|
+
}
|
|
73
|
+
tx.addOutput(output)
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
//////////////
|
|
77
|
+
// Merge and sort INPUTS info by vin order.
|
|
78
|
+
/////////////
|
|
79
|
+
const inputs: {
|
|
80
|
+
argsInput: Validation.ValidCreateActionInput | undefined
|
|
81
|
+
storageInput: StorageCreateTransactionSdkInput
|
|
82
|
+
}[] = []
|
|
83
|
+
for (const storageInput of storageInputs) {
|
|
84
|
+
const argsInput =
|
|
85
|
+
storageInput.vin !== undefined && storageInput.vin < args.inputs.length
|
|
86
|
+
? args.inputs[storageInput.vin]
|
|
87
|
+
: undefined
|
|
88
|
+
inputs.push({ argsInput, storageInput })
|
|
89
|
+
}
|
|
90
|
+
inputs.sort((a, b) =>
|
|
91
|
+
a.storageInput.vin! < b.storageInput.vin! ? -1 : a.storageInput.vin! === b.storageInput.vin! ? 0 : 1
|
|
92
|
+
)
|
|
93
|
+
|
|
94
|
+
const pendingStorageInputs: PendingStorageInput[] = []
|
|
95
|
+
|
|
96
|
+
//////////////
|
|
97
|
+
// Add INPUTS
|
|
98
|
+
/////////////
|
|
99
|
+
let totalChangeInputs = 0
|
|
100
|
+
for (const { storageInput, argsInput } of inputs) {
|
|
101
|
+
// Two types of inputs are handled: user specified wth/without unlockingScript and storage specified using SABPPP template.
|
|
102
|
+
if (argsInput) {
|
|
103
|
+
// Type 1: User supplied input, with or without an explicit unlockingScript.
|
|
104
|
+
// If without, signAction must be used to provide the actual unlockScript.
|
|
105
|
+
const hasUnlock = typeof argsInput.unlockingScript === 'string'
|
|
106
|
+
const unlock = hasUnlock ? asBsvSdkScript(argsInput.unlockingScript!) : new Script()
|
|
107
|
+
const sourceTransaction = args.isSignAction ? inputBeef?.findTxid(argsInput.outpoint.txid)?.tx : undefined
|
|
108
|
+
const inputToAdd: TransactionInput = {
|
|
109
|
+
sourceTXID: argsInput.outpoint.txid,
|
|
110
|
+
sourceOutputIndex: argsInput.outpoint.vout,
|
|
111
|
+
// Include the source transaction for access to the outputs locking script and output satoshis for user side fee calculation.
|
|
112
|
+
// TODO: Make this conditional to improve performance when user can supply locking scripts themselves.
|
|
113
|
+
sourceTransaction,
|
|
114
|
+
unlockingScript: unlock,
|
|
115
|
+
sequence: argsInput.sequenceNumber
|
|
116
|
+
}
|
|
117
|
+
tx.addInput(inputToAdd)
|
|
118
|
+
} else {
|
|
119
|
+
// Type2: SABPPP protocol inputs which are signed using ScriptTemplateBRC29.
|
|
120
|
+
if (storageInput.type !== 'P2PKH')
|
|
121
|
+
throw new WERR_INVALID_PARAMETER(
|
|
122
|
+
'type',
|
|
123
|
+
`vin ${storageInput.vin}, "${storageInput.type}" is not a supported unlocking script type.`
|
|
124
|
+
)
|
|
125
|
+
|
|
126
|
+
pendingStorageInputs.push({
|
|
127
|
+
vin: tx.inputs.length,
|
|
128
|
+
derivationPrefix: verifyTruthy(storageInput.derivationPrefix),
|
|
129
|
+
derivationSuffix: verifyTruthy(storageInput.derivationSuffix),
|
|
130
|
+
unlockerPubKey: storageInput.senderIdentityKey,
|
|
131
|
+
sourceSatoshis: storageInput.sourceSatoshis,
|
|
132
|
+
lockingScript: storageInput.sourceLockingScript
|
|
133
|
+
})
|
|
134
|
+
|
|
135
|
+
const inputToAdd: TransactionInput = {
|
|
136
|
+
sourceTXID: storageInput.sourceTxid,
|
|
137
|
+
sourceOutputIndex: storageInput.sourceVout,
|
|
138
|
+
sourceTransaction: storageInput.sourceTransaction
|
|
139
|
+
? Transaction.fromBinary(storageInput.sourceTransaction)
|
|
140
|
+
: undefined,
|
|
141
|
+
unlockingScript: new Script(),
|
|
142
|
+
sequence: 0xffffffff
|
|
143
|
+
}
|
|
144
|
+
tx.addInput(inputToAdd)
|
|
145
|
+
totalChangeInputs += Validation.validateSatoshis(storageInput.sourceSatoshis, 'storageInput.sourceSatoshis')
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// The amount is the total of non-foreign inputs minus change outputs
|
|
150
|
+
// Note that the amount can be negative when we are redeeming more inputs than we are spending
|
|
151
|
+
const totalChangeOutputs = storageOutputs
|
|
152
|
+
.filter(x => x.purpose === 'change')
|
|
153
|
+
.reduce((acc, el) => acc + el.satoshis, 0)
|
|
154
|
+
const amount = totalChangeInputs - totalChangeOutputs
|
|
155
|
+
|
|
156
|
+
return {
|
|
157
|
+
tx,
|
|
158
|
+
amount,
|
|
159
|
+
pdi: pendingStorageInputs,
|
|
160
|
+
log: ''
|
|
161
|
+
}
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
/**
|
|
165
|
+
* Derive a change output locking script
|
|
166
|
+
*/
|
|
167
|
+
export function makeChangeLock(
|
|
168
|
+
out: StorageCreateTransactionSdkOutput,
|
|
169
|
+
dctr: StorageCreateActionResult,
|
|
170
|
+
args: Validation.ValidCreateActionArgs,
|
|
171
|
+
changeKeys: KeyPair,
|
|
172
|
+
wallet: Wallet
|
|
173
|
+
): Script {
|
|
174
|
+
const derivationPrefix = dctr.derivationPrefix
|
|
175
|
+
const derivationSuffix = verifyTruthy(out.derivationSuffix)
|
|
176
|
+
const sabppp = new ScriptTemplateBRC29({
|
|
177
|
+
derivationPrefix,
|
|
178
|
+
derivationSuffix,
|
|
179
|
+
keyDeriver: wallet.keyDeriver
|
|
180
|
+
})
|
|
181
|
+
const lockingScript = sabppp.lock(changeKeys.privateKey, changeKeys.publicKey)
|
|
182
|
+
return lockingScript
|
|
183
|
+
}
|