@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,300 @@
|
|
|
1
|
+
import { mockUnderlyingWallet, MockedBSV_SDK } from './WalletPermissionsManager.fixtures'
|
|
2
|
+
import { WalletPermissionsManager, PermissionsManagerConfig } from '../WalletPermissionsManager'
|
|
3
|
+
|
|
4
|
+
jest.mock('@bsv/sdk', () => MockedBSV_SDK)
|
|
5
|
+
|
|
6
|
+
describe('WalletPermissionsManager - Initialization & Configuration', () => {
|
|
7
|
+
let underlying: jest.Mocked<any>
|
|
8
|
+
|
|
9
|
+
beforeEach(() => {
|
|
10
|
+
// Create a fresh underlying mock wallet before each test
|
|
11
|
+
underlying = mockUnderlyingWallet()
|
|
12
|
+
})
|
|
13
|
+
|
|
14
|
+
afterEach(() => {
|
|
15
|
+
jest.clearAllMocks()
|
|
16
|
+
})
|
|
17
|
+
|
|
18
|
+
it('should initialize with default config if none is provided', () => {
|
|
19
|
+
const manager = new WalletPermissionsManager(underlying, 'admin.domain.com')
|
|
20
|
+
|
|
21
|
+
// The manager internally defaults all config flags to true.
|
|
22
|
+
const internalConfig = (manager as any).config as PermissionsManagerConfig
|
|
23
|
+
|
|
24
|
+
expect(internalConfig.seekProtocolPermissionsForSigning).toBe(true)
|
|
25
|
+
expect(internalConfig.seekProtocolPermissionsForEncrypting).toBe(true)
|
|
26
|
+
expect(internalConfig.seekPermissionsForIdentityKeyRevelation).toBe(true)
|
|
27
|
+
expect(internalConfig.encryptWalletMetadata).toBe(true)
|
|
28
|
+
|
|
29
|
+
// The manager should store the admin originator
|
|
30
|
+
const admin = (manager as any).adminOriginator
|
|
31
|
+
expect(admin).toBe('admin.domain.com')
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
it('should initialize with partial config overrides, merging with defaults', () => {
|
|
35
|
+
const partialConfig: PermissionsManagerConfig = {
|
|
36
|
+
seekProtocolPermissionsForSigning: false,
|
|
37
|
+
encryptWalletMetadata: false
|
|
38
|
+
// The rest remain default = true
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const manager = new WalletPermissionsManager(underlying, 'admin.domain.com', partialConfig)
|
|
42
|
+
const internalConfig = (manager as any).config
|
|
43
|
+
|
|
44
|
+
// Overridden to false
|
|
45
|
+
expect(internalConfig.seekProtocolPermissionsForSigning).toBe(false)
|
|
46
|
+
expect(internalConfig.encryptWalletMetadata).toBe(false)
|
|
47
|
+
|
|
48
|
+
// Remaining defaults still true
|
|
49
|
+
expect(internalConfig.seekBasketInsertionPermissions).toBe(true)
|
|
50
|
+
expect(internalConfig.seekSpendingPermissions).toBe(true)
|
|
51
|
+
})
|
|
52
|
+
|
|
53
|
+
it('should initialize with all config flags set to false', () => {
|
|
54
|
+
const allFalse: PermissionsManagerConfig = {
|
|
55
|
+
seekProtocolPermissionsForSigning: false,
|
|
56
|
+
seekProtocolPermissionsForEncrypting: false,
|
|
57
|
+
seekProtocolPermissionsForHMAC: false,
|
|
58
|
+
seekPermissionsForKeyLinkageRevelation: false,
|
|
59
|
+
seekPermissionsForPublicKeyRevelation: false,
|
|
60
|
+
seekPermissionsForIdentityKeyRevelation: false,
|
|
61
|
+
seekPermissionsForIdentityResolution: false,
|
|
62
|
+
seekBasketInsertionPermissions: false,
|
|
63
|
+
seekBasketRemovalPermissions: false,
|
|
64
|
+
seekBasketListingPermissions: false,
|
|
65
|
+
seekPermissionWhenApplyingActionLabels: false,
|
|
66
|
+
seekPermissionWhenListingActionsByLabel: false,
|
|
67
|
+
seekCertificateDisclosurePermissions: false,
|
|
68
|
+
seekCertificateAcquisitionPermissions: false,
|
|
69
|
+
seekCertificateRelinquishmentPermissions: false,
|
|
70
|
+
seekCertificateListingPermissions: false,
|
|
71
|
+
encryptWalletMetadata: false,
|
|
72
|
+
seekSpendingPermissions: false,
|
|
73
|
+
differentiatePrivilegedOperations: false
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
const manager = new WalletPermissionsManager(underlying, 'admin.domain.com', allFalse)
|
|
77
|
+
const internalConfig = (manager as any).config
|
|
78
|
+
|
|
79
|
+
for (const [k, v] of Object.entries(allFalse)) {
|
|
80
|
+
expect(internalConfig[k]).toBe(v)
|
|
81
|
+
}
|
|
82
|
+
})
|
|
83
|
+
|
|
84
|
+
it('should consider calls from the adminOriginator as admin, bypassing checks', async () => {
|
|
85
|
+
const manager = new WalletPermissionsManager(underlying, 'admin.domain.com')
|
|
86
|
+
|
|
87
|
+
// If we call a method that normally triggers permission checks (like createAction with a basket),
|
|
88
|
+
// but pass in originator="admin.domain.com", we expect NO permission prompt or error.
|
|
89
|
+
// We'll do a minimal createAction call.
|
|
90
|
+
const result = await manager.createAction(
|
|
91
|
+
{
|
|
92
|
+
description: 'Insertion to user basket',
|
|
93
|
+
outputs: [
|
|
94
|
+
{
|
|
95
|
+
lockingScript: 'abcd',
|
|
96
|
+
satoshis: 1000,
|
|
97
|
+
outputDescription: 'some out desc',
|
|
98
|
+
basket: 'some-user-basket'
|
|
99
|
+
}
|
|
100
|
+
]
|
|
101
|
+
},
|
|
102
|
+
'admin.domain.com'
|
|
103
|
+
)
|
|
104
|
+
|
|
105
|
+
// If the manager truly bypassed checks for the admin, it won't queue a request
|
|
106
|
+
// nor throw an error. The call should just succeed.
|
|
107
|
+
expect(result).toBeDefined()
|
|
108
|
+
|
|
109
|
+
// Confirm the underlying createAction was actually called
|
|
110
|
+
expect(underlying.createAction).toHaveBeenCalledTimes(1)
|
|
111
|
+
|
|
112
|
+
// activeRequests map should be empty
|
|
113
|
+
const activeRequests = (manager as any).activeRequests as Map<string, any[]>
|
|
114
|
+
expect(activeRequests.size).toBe(0)
|
|
115
|
+
})
|
|
116
|
+
|
|
117
|
+
it('should skip protocol permission checks for signing if seekProtocolPermissionsForSigning=false', async () => {
|
|
118
|
+
const manager = new WalletPermissionsManager(underlying, 'admin.domain.com', {
|
|
119
|
+
seekProtocolPermissionsForSigning: false
|
|
120
|
+
})
|
|
121
|
+
|
|
122
|
+
// Non-admin origin attempts "createSignature" with a protocolID
|
|
123
|
+
// Normally, if config was true, we'd expect a request for permission.
|
|
124
|
+
// But here we expect it to skip and proceed.
|
|
125
|
+
await expect(
|
|
126
|
+
manager.createSignature(
|
|
127
|
+
{
|
|
128
|
+
protocolID: [1, 'some-protocol'],
|
|
129
|
+
privileged: false,
|
|
130
|
+
data: [0x01, 0x02],
|
|
131
|
+
keyID: '1'
|
|
132
|
+
},
|
|
133
|
+
'app.nonadmin.com'
|
|
134
|
+
)
|
|
135
|
+
).resolves.not.toThrow()
|
|
136
|
+
|
|
137
|
+
// underlying createSignature is invoked
|
|
138
|
+
expect(underlying.createSignature).toHaveBeenCalledTimes(1)
|
|
139
|
+
|
|
140
|
+
// The manager’s internal request queue should remain empty
|
|
141
|
+
const activeRequests = (manager as any).activeRequests as Map<string, any[]>
|
|
142
|
+
expect(activeRequests.size).toBe(0)
|
|
143
|
+
})
|
|
144
|
+
|
|
145
|
+
it('should enforce protocol permission checks for signing if seekProtocolPermissionsForSigning=true', async () => {
|
|
146
|
+
// By default, or explicitly set to true, the manager enforces permission checks
|
|
147
|
+
const manager = new WalletPermissionsManager(underlying, 'admin.domain.com', {
|
|
148
|
+
seekProtocolPermissionsForSigning: true
|
|
149
|
+
})
|
|
150
|
+
|
|
151
|
+
// Non-admin origin tries createSignature -> must prompt for protocol permission
|
|
152
|
+
const createSigPromise = manager.createSignature(
|
|
153
|
+
{
|
|
154
|
+
protocolID: [1, 'test-protocol'],
|
|
155
|
+
keyID: '1',
|
|
156
|
+
data: [0x10, 0x20],
|
|
157
|
+
privileged: false
|
|
158
|
+
},
|
|
159
|
+
'nonadmin.com'
|
|
160
|
+
)
|
|
161
|
+
|
|
162
|
+
// The manager triggers a request. Let's see if the request queue has an entry:
|
|
163
|
+
const activeRequests = (manager as any).activeRequests as Map<string, any>
|
|
164
|
+
// We may not see an entry synchronously because `ensureProtocolPermission()` is async,
|
|
165
|
+
// but once the promise gets to that stage, it populates the queue.
|
|
166
|
+
|
|
167
|
+
// Wait a short tick to let the async code run
|
|
168
|
+
await new Promise(res => setTimeout(res, 10))
|
|
169
|
+
expect(activeRequests.size).toBeGreaterThan(0)
|
|
170
|
+
|
|
171
|
+
// We'll forcibly deny the request so the test can conclude:
|
|
172
|
+
const firstRequestKey = Array.from(activeRequests.keys())[0]
|
|
173
|
+
const firstRequestQueue = activeRequests.get(firstRequestKey)
|
|
174
|
+
if (firstRequestQueue && firstRequestQueue.pending.length > 0) {
|
|
175
|
+
manager.denyPermission(firstRequestKey)
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
// The promise eventually rejects with "Permission denied."
|
|
179
|
+
await expect(createSigPromise).rejects.toThrow(/Permission denied/)
|
|
180
|
+
})
|
|
181
|
+
|
|
182
|
+
it('should skip basket insertion permission checks if seekBasketInsertionPermissions=false', async () => {
|
|
183
|
+
const manager = new WalletPermissionsManager(underlying, 'admin.domain.com', {
|
|
184
|
+
seekBasketInsertionPermissions: false
|
|
185
|
+
})
|
|
186
|
+
// Spending authorization is still required, grant it.
|
|
187
|
+
manager.bindCallback(
|
|
188
|
+
'onSpendingAuthorizationRequested',
|
|
189
|
+
jest.fn(x => {
|
|
190
|
+
manager.grantPermission({ requestID: x.requestID, ephemeral: true })
|
|
191
|
+
}) as any
|
|
192
|
+
)
|
|
193
|
+
|
|
194
|
+
// Non-admin origin tries to createAction specifying a basket
|
|
195
|
+
await expect(
|
|
196
|
+
manager.createAction(
|
|
197
|
+
{
|
|
198
|
+
description: 'Insert to user basket',
|
|
199
|
+
outputs: [
|
|
200
|
+
{
|
|
201
|
+
lockingScript: '1234',
|
|
202
|
+
satoshis: 888,
|
|
203
|
+
basket: 'somebasket',
|
|
204
|
+
outputDescription: 'some out desc'
|
|
205
|
+
}
|
|
206
|
+
]
|
|
207
|
+
},
|
|
208
|
+
'some-user.com'
|
|
209
|
+
)
|
|
210
|
+
).resolves.not.toThrow()
|
|
211
|
+
|
|
212
|
+
// Because insertion checks are disabled, no permission request should be queued
|
|
213
|
+
const activeRequests = (manager as any).activeRequests as Map<string, any>
|
|
214
|
+
expect(activeRequests.size).toBe(0)
|
|
215
|
+
})
|
|
216
|
+
|
|
217
|
+
it('should skip all permission checks if all relevant config flags are false (except admin-only baskets, etc.)', async () => {
|
|
218
|
+
const manager = new WalletPermissionsManager(underlying, 'admin.domain.com', {
|
|
219
|
+
// Only turning off relevant categories, i.e. we might set all false except we keep
|
|
220
|
+
// differentiatePrivilegedOperations at default just to verify. Or set it to false as well.
|
|
221
|
+
seekProtocolPermissionsForSigning: false,
|
|
222
|
+
seekProtocolPermissionsForEncrypting: false,
|
|
223
|
+
seekProtocolPermissionsForHMAC: false,
|
|
224
|
+
seekPermissionsForKeyLinkageRevelation: false,
|
|
225
|
+
seekPermissionsForPublicKeyRevelation: false,
|
|
226
|
+
seekPermissionsForIdentityKeyRevelation: false,
|
|
227
|
+
seekPermissionsForIdentityResolution: false,
|
|
228
|
+
seekBasketInsertionPermissions: false,
|
|
229
|
+
seekBasketRemovalPermissions: false,
|
|
230
|
+
seekBasketListingPermissions: false,
|
|
231
|
+
seekPermissionWhenApplyingActionLabels: false,
|
|
232
|
+
seekPermissionWhenListingActionsByLabel: false,
|
|
233
|
+
seekCertificateDisclosurePermissions: false,
|
|
234
|
+
seekCertificateAcquisitionPermissions: false,
|
|
235
|
+
seekCertificateRelinquishmentPermissions: false,
|
|
236
|
+
seekCertificateListingPermissions: false,
|
|
237
|
+
encryptWalletMetadata: false,
|
|
238
|
+
seekSpendingPermissions: false,
|
|
239
|
+
differentiatePrivilegedOperations: false
|
|
240
|
+
})
|
|
241
|
+
|
|
242
|
+
// We'll do a few calls that would normally require checks:
|
|
243
|
+
|
|
244
|
+
// 1) createSignature from non-admin
|
|
245
|
+
await expect(
|
|
246
|
+
manager.createSignature({ protocolID: [1, 'some-protocol'], data: [0x01], keyID: '1' }, 'nonadmin.com')
|
|
247
|
+
).resolves.not.toThrow()
|
|
248
|
+
|
|
249
|
+
// 2) createAction to insert in a basket
|
|
250
|
+
await expect(
|
|
251
|
+
manager.createAction(
|
|
252
|
+
{
|
|
253
|
+
description: 'Inserting stuff',
|
|
254
|
+
outputs: [
|
|
255
|
+
{
|
|
256
|
+
lockingScript: '012345',
|
|
257
|
+
satoshis: 1,
|
|
258
|
+
basket: 'user-basket',
|
|
259
|
+
outputDescription: 'some out desc'
|
|
260
|
+
}
|
|
261
|
+
]
|
|
262
|
+
},
|
|
263
|
+
'nonadmin.com'
|
|
264
|
+
)
|
|
265
|
+
).resolves.not.toThrow()
|
|
266
|
+
|
|
267
|
+
// 3) Acquire certificate
|
|
268
|
+
await expect(
|
|
269
|
+
manager.acquireCertificate(
|
|
270
|
+
{
|
|
271
|
+
type: 'base64-cert-type',
|
|
272
|
+
certifier: '02abc...',
|
|
273
|
+
acquisitionProtocol: 'direct',
|
|
274
|
+
fields: { name: 'Bob' }
|
|
275
|
+
},
|
|
276
|
+
'nonadmin.com'
|
|
277
|
+
)
|
|
278
|
+
).resolves.not.toThrow()
|
|
279
|
+
|
|
280
|
+
// Confirm no queued requests
|
|
281
|
+
const activeRequests = (manager as any).activeRequests as Map<string, any[]>
|
|
282
|
+
expect(activeRequests.size).toBe(0)
|
|
283
|
+
})
|
|
284
|
+
|
|
285
|
+
it('should block usage of an admin-only protocol name if not called by admin', async () => {
|
|
286
|
+
const manager = new WalletPermissionsManager(underlying, 'admin.domain.com')
|
|
287
|
+
// A protocol name that starts with "admin"
|
|
288
|
+
await expect(
|
|
289
|
+
manager.createSignature(
|
|
290
|
+
{
|
|
291
|
+
protocolID: [1, 'admin super-secret-protocol'],
|
|
292
|
+
data: [1, 2, 3],
|
|
293
|
+
keyID: '1',
|
|
294
|
+
privileged: false
|
|
295
|
+
},
|
|
296
|
+
'nonadmin.com'
|
|
297
|
+
)
|
|
298
|
+
).rejects.toThrow(/admin-only/i)
|
|
299
|
+
})
|
|
300
|
+
})
|