@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,323 @@
|
|
|
1
|
+
import { mockUnderlyingWallet, MockedBSV_SDK } from './WalletPermissionsManager.fixtures'
|
|
2
|
+
import { WalletPermissionsManager } from '../WalletPermissionsManager'
|
|
3
|
+
|
|
4
|
+
import { jest } from '@jest/globals'
|
|
5
|
+
|
|
6
|
+
// Mock the @bsv/sdk module with our fixture/mocks:
|
|
7
|
+
jest.mock('@bsv/sdk', () => MockedBSV_SDK)
|
|
8
|
+
|
|
9
|
+
describe('WalletPermissionsManager - Callbacks & Event Handling', () => {
|
|
10
|
+
let underlying: ReturnType<typeof mockUnderlyingWallet>
|
|
11
|
+
let manager: WalletPermissionsManager
|
|
12
|
+
|
|
13
|
+
beforeEach(() => {
|
|
14
|
+
underlying = mockUnderlyingWallet()
|
|
15
|
+
// Use default config so that protocol permissions are enforced for testing requests
|
|
16
|
+
manager = new WalletPermissionsManager(underlying, 'admin.domain.com')
|
|
17
|
+
})
|
|
18
|
+
|
|
19
|
+
afterEach(() => {
|
|
20
|
+
jest.clearAllMocks()
|
|
21
|
+
})
|
|
22
|
+
|
|
23
|
+
// -------------------------------------------------------------------------
|
|
24
|
+
// 1) Unit Tests: Callback Registration & Unregistration
|
|
25
|
+
// -------------------------------------------------------------------------
|
|
26
|
+
|
|
27
|
+
it('bindCallback() should register multiple callbacks for the same event, which are called in sequence', async () => {
|
|
28
|
+
const cb1 = jest.fn(() => {})
|
|
29
|
+
const cb2 = jest.fn(() => {})
|
|
30
|
+
|
|
31
|
+
// Bind both to "onProtocolPermissionRequested"
|
|
32
|
+
manager.bindCallback('onProtocolPermissionRequested', cb1)
|
|
33
|
+
manager.bindCallback('onProtocolPermissionRequested', cb2)
|
|
34
|
+
|
|
35
|
+
// Manually trigger the event (private method usage) for direct testing:
|
|
36
|
+
// We'll mimic the manager calling "this.callEvent('onProtocolPermissionRequested', params)"
|
|
37
|
+
// by just calling it ourselves. This is a "unit-level" approach.
|
|
38
|
+
const fakeParam = { type: 'protocol', requestID: 'req-xyz' }
|
|
39
|
+
await (manager as any).callEvent('onProtocolPermissionRequested', fakeParam)
|
|
40
|
+
|
|
41
|
+
// Both callbacks should have been called in sequence with the same param
|
|
42
|
+
expect(cb1).toHaveBeenCalledTimes(1)
|
|
43
|
+
expect(cb2).toHaveBeenCalledTimes(1)
|
|
44
|
+
expect(cb1).toHaveBeenCalledWith(fakeParam)
|
|
45
|
+
expect(cb2).toHaveBeenCalledWith(fakeParam)
|
|
46
|
+
|
|
47
|
+
// Confirm order
|
|
48
|
+
expect(cb1.mock.invocationCallOrder[0]).toBeLessThan(cb2.mock.invocationCallOrder[0])
|
|
49
|
+
})
|
|
50
|
+
|
|
51
|
+
it('unbindCallback() by numeric ID should prevent the callback from being called again', async () => {
|
|
52
|
+
const cb1 = jest.fn(() => {})
|
|
53
|
+
const cb2 = jest.fn(() => {})
|
|
54
|
+
|
|
55
|
+
// We get numeric IDs when binding
|
|
56
|
+
const id1 = manager.bindCallback('onProtocolPermissionRequested', cb1)
|
|
57
|
+
manager.bindCallback('onProtocolPermissionRequested', cb2)
|
|
58
|
+
|
|
59
|
+
// Fire once (both should be called)
|
|
60
|
+
const param1 = { requestID: 'req-test-1' }
|
|
61
|
+
await (manager as any).callEvent('onProtocolPermissionRequested', param1)
|
|
62
|
+
|
|
63
|
+
expect(cb1).toHaveBeenCalledTimes(1)
|
|
64
|
+
expect(cb2).toHaveBeenCalledTimes(1)
|
|
65
|
+
|
|
66
|
+
// Unbind cb1 by numeric ID
|
|
67
|
+
manager.unbindCallback('onProtocolPermissionRequested', id1)
|
|
68
|
+
|
|
69
|
+
// Fire again
|
|
70
|
+
const param2 = { requestID: 'req-test-2' }
|
|
71
|
+
await (manager as any).callEvent('onProtocolPermissionRequested', param2)
|
|
72
|
+
|
|
73
|
+
// cb1 should NOT receive the second event
|
|
74
|
+
expect(cb1).toHaveBeenCalledTimes(1)
|
|
75
|
+
// cb2 should still receive it
|
|
76
|
+
expect(cb2).toHaveBeenCalledTimes(2)
|
|
77
|
+
})
|
|
78
|
+
|
|
79
|
+
it('unbindCallback() by function reference should remove the callback', async () => {
|
|
80
|
+
const cb1 = jest.fn(() => {})
|
|
81
|
+
const cb2 = jest.fn(() => {})
|
|
82
|
+
const cb3 = jest.fn(() => {})
|
|
83
|
+
|
|
84
|
+
manager.bindCallback('onProtocolPermissionRequested', cb1)
|
|
85
|
+
manager.bindCallback('onProtocolPermissionRequested', cb2)
|
|
86
|
+
manager.bindCallback('onProtocolPermissionRequested', cb3)
|
|
87
|
+
|
|
88
|
+
// Fire once
|
|
89
|
+
const param1 = { requestID: 'req-first-fire' }
|
|
90
|
+
await (manager as any).callEvent('onProtocolPermissionRequested', param1)
|
|
91
|
+
|
|
92
|
+
expect(cb1).toHaveBeenCalledTimes(1)
|
|
93
|
+
expect(cb2).toHaveBeenCalledTimes(1)
|
|
94
|
+
expect(cb3).toHaveBeenCalledTimes(1)
|
|
95
|
+
|
|
96
|
+
// Unbind cb2 by function reference
|
|
97
|
+
manager.unbindCallback('onProtocolPermissionRequested', cb2)
|
|
98
|
+
|
|
99
|
+
// Fire again
|
|
100
|
+
const param2 = { requestID: 'req-second-fire' }
|
|
101
|
+
await (manager as any).callEvent('onProtocolPermissionRequested', param2)
|
|
102
|
+
|
|
103
|
+
// cb2 should no longer be called
|
|
104
|
+
expect(cb1).toHaveBeenCalledTimes(2)
|
|
105
|
+
expect(cb2).toHaveBeenCalledTimes(1)
|
|
106
|
+
expect(cb3).toHaveBeenCalledTimes(2)
|
|
107
|
+
})
|
|
108
|
+
|
|
109
|
+
it('a failing callback (throwing an error) does not block subsequent callbacks', async () => {
|
|
110
|
+
const goodCb = jest.fn(() => {})
|
|
111
|
+
const badCb = jest.fn().mockImplementation(() => {
|
|
112
|
+
throw new Error('Intentional error')
|
|
113
|
+
})
|
|
114
|
+
const finalCb = jest.fn(() => {})
|
|
115
|
+
|
|
116
|
+
manager.bindCallback('onProtocolPermissionRequested', goodCb)
|
|
117
|
+
manager.bindCallback('onProtocolPermissionRequested', badCb as any)
|
|
118
|
+
manager.bindCallback('onProtocolPermissionRequested', finalCb)
|
|
119
|
+
|
|
120
|
+
const param = { requestID: 'req-err-test' }
|
|
121
|
+
// callEvent should swallow the error from badCb and continue
|
|
122
|
+
await (manager as any).callEvent('onProtocolPermissionRequested', param)
|
|
123
|
+
|
|
124
|
+
// All callbacks are invoked once
|
|
125
|
+
expect(goodCb).toHaveBeenCalledTimes(1)
|
|
126
|
+
expect(badCb).toHaveBeenCalledTimes(1)
|
|
127
|
+
expect(finalCb).toHaveBeenCalledTimes(1)
|
|
128
|
+
})
|
|
129
|
+
|
|
130
|
+
// -------------------------------------------------------------------------
|
|
131
|
+
// 2) Integration Tests: Real permission request flow
|
|
132
|
+
// -------------------------------------------------------------------------
|
|
133
|
+
|
|
134
|
+
it('should trigger onProtocolPermissionRequested with correct params when a non-admin domain requests a protocol operation', async () => {
|
|
135
|
+
const requestedCb = jest.fn(() => {})
|
|
136
|
+
|
|
137
|
+
// We bind to onProtocolPermissionRequested
|
|
138
|
+
manager.bindCallback('onProtocolPermissionRequested', requestedCb)
|
|
139
|
+
|
|
140
|
+
// Attempt an operation that requires protocol permission:
|
|
141
|
+
// e.g., createSignature with level=1 protocol
|
|
142
|
+
const signPromise = manager.createSignature(
|
|
143
|
+
{
|
|
144
|
+
protocolID: [1, 'some-protocol'],
|
|
145
|
+
keyID: '1',
|
|
146
|
+
data: [0x01, 0x02],
|
|
147
|
+
privileged: false
|
|
148
|
+
},
|
|
149
|
+
'non-admin.example.com'
|
|
150
|
+
)
|
|
151
|
+
|
|
152
|
+
// Wait a tick so the request can be queued
|
|
153
|
+
await new Promise(r => setTimeout(r, 10))
|
|
154
|
+
|
|
155
|
+
// We expect onProtocolPermissionRequested to have been fired once
|
|
156
|
+
expect(requestedCb).toHaveBeenCalledTimes(1)
|
|
157
|
+
|
|
158
|
+
// The callback param should include fields from the `PermissionRequest`
|
|
159
|
+
const callArg = (requestedCb.mock as any).calls[0][0]
|
|
160
|
+
expect(callArg.type).toBe('protocol')
|
|
161
|
+
expect(callArg.originator).toBe('non-admin.example.com')
|
|
162
|
+
expect(callArg.requestID).toMatch(/^proto:non-admin.example.com:false/) // The manager auto-generates an ID
|
|
163
|
+
|
|
164
|
+
// The original sign call is still pending (since we haven't granted or denied).
|
|
165
|
+
// We'll deny it for cleanup:
|
|
166
|
+
manager.denyPermission(callArg.requestID)
|
|
167
|
+
|
|
168
|
+
await expect(signPromise).rejects.toThrow(/Permission denied/)
|
|
169
|
+
})
|
|
170
|
+
|
|
171
|
+
it('should resolve the original caller promise when requests are granted', async () => {
|
|
172
|
+
const requestedCb = jest.fn(() => {})
|
|
173
|
+
manager.bindCallback('onProtocolPermissionRequested', requestedCb)
|
|
174
|
+
|
|
175
|
+
// Start an operation that requires permission
|
|
176
|
+
const signPromise = manager.createSignature(
|
|
177
|
+
{
|
|
178
|
+
protocolID: [1, 'testproto'],
|
|
179
|
+
keyID: '1',
|
|
180
|
+
data: [0xaa],
|
|
181
|
+
privileged: false
|
|
182
|
+
},
|
|
183
|
+
'nonadmin.com'
|
|
184
|
+
)
|
|
185
|
+
|
|
186
|
+
// Wait for request to appear
|
|
187
|
+
await new Promise(r => setTimeout(r, 10))
|
|
188
|
+
expect(requestedCb).toHaveBeenCalledTimes(1)
|
|
189
|
+
|
|
190
|
+
// Extract the requestID from the callback
|
|
191
|
+
const requestID = (requestedCb.mock as any).calls[0][0].requestID
|
|
192
|
+
|
|
193
|
+
// Now grant the request
|
|
194
|
+
const grantParams = {
|
|
195
|
+
requestID,
|
|
196
|
+
expiry: 123456789,
|
|
197
|
+
ephemeral: true
|
|
198
|
+
}
|
|
199
|
+
await manager.grantPermission(grantParams)
|
|
200
|
+
|
|
201
|
+
// The signPromise should now resolve (meaning the original createSignature call finishes successfully).
|
|
202
|
+
await expect(signPromise).resolves.toBeDefined()
|
|
203
|
+
})
|
|
204
|
+
|
|
205
|
+
it('should reject the original caller promise when permission is denied', async () => {
|
|
206
|
+
const requestedCb = jest.fn(() => {})
|
|
207
|
+
|
|
208
|
+
manager.bindCallback('onProtocolPermissionRequested', requestedCb)
|
|
209
|
+
// Start an operation that requires protocol permission
|
|
210
|
+
const encryptPromise = manager.encrypt(
|
|
211
|
+
{
|
|
212
|
+
protocolID: [1, 'secretproto'],
|
|
213
|
+
keyID: 'session',
|
|
214
|
+
plaintext: [0xff, 0xff],
|
|
215
|
+
privileged: false
|
|
216
|
+
},
|
|
217
|
+
'unauthorized-domain.com'
|
|
218
|
+
)
|
|
219
|
+
|
|
220
|
+
// Wait to ensure request is triggered
|
|
221
|
+
await new Promise(r => setTimeout(r, 10))
|
|
222
|
+
expect(requestedCb).toHaveBeenCalledTimes(1)
|
|
223
|
+
|
|
224
|
+
const requestID = (requestedCb.mock as any).calls[0][0].requestID
|
|
225
|
+
|
|
226
|
+
// Deny the request
|
|
227
|
+
manager.denyPermission(requestID)
|
|
228
|
+
|
|
229
|
+
// The original encryptPromise should reject
|
|
230
|
+
await expect(encryptPromise).rejects.toThrow(/Permission denied/i)
|
|
231
|
+
})
|
|
232
|
+
|
|
233
|
+
it('multiple pending requests for the same resource should trigger only one onXxxRequested callback', async () => {
|
|
234
|
+
const requestedCb = jest.fn(() => {})
|
|
235
|
+
manager.bindCallback('onProtocolPermissionRequested', requestedCb)
|
|
236
|
+
|
|
237
|
+
// We'll do two calls that require the SAME resource:
|
|
238
|
+
// same originator, same protocolID, same privileged=false, same counterparty
|
|
239
|
+
|
|
240
|
+
const call1 = manager.createSignature(
|
|
241
|
+
{
|
|
242
|
+
protocolID: [1, 'parallel-test'],
|
|
243
|
+
data: [0x01],
|
|
244
|
+
keyID: '1',
|
|
245
|
+
privileged: false
|
|
246
|
+
},
|
|
247
|
+
'parallel-user.com'
|
|
248
|
+
)
|
|
249
|
+
const call2 = manager.createSignature(
|
|
250
|
+
{
|
|
251
|
+
protocolID: [1, 'parallel-test'],
|
|
252
|
+
data: [0x02],
|
|
253
|
+
keyID: '1',
|
|
254
|
+
privileged: false
|
|
255
|
+
},
|
|
256
|
+
'parallel-user.com'
|
|
257
|
+
)
|
|
258
|
+
|
|
259
|
+
// Wait for the manager to handle them
|
|
260
|
+
await new Promise(r => setTimeout(r, 10))
|
|
261
|
+
|
|
262
|
+
// Because the resource is identical, only ONE request event should be triggered
|
|
263
|
+
expect(requestedCb).toHaveBeenCalledTimes(1)
|
|
264
|
+
|
|
265
|
+
// We'll grant the request once
|
|
266
|
+
await manager.grantPermission({
|
|
267
|
+
requestID: (requestedCb.mock as any).calls[0][0].requestID,
|
|
268
|
+
ephemeral: true
|
|
269
|
+
})
|
|
270
|
+
|
|
271
|
+
// Both calls should now resolve
|
|
272
|
+
await expect(call1).resolves.toBeDefined()
|
|
273
|
+
await expect(call2).resolves.toBeDefined()
|
|
274
|
+
})
|
|
275
|
+
|
|
276
|
+
it('multiple pending requests for different resources should trigger separate onXxxRequested callbacks', async () => {
|
|
277
|
+
const requestedCb = jest.fn(() => {})
|
|
278
|
+
manager.bindCallback('onProtocolPermissionRequested', requestedCb)
|
|
279
|
+
|
|
280
|
+
// We'll do two calls that require DIFFERENT resources:
|
|
281
|
+
// call1 -> protocolID=[1, 'resourceA']
|
|
282
|
+
// call2 -> protocolID=[1, 'resourceB']
|
|
283
|
+
|
|
284
|
+
const call1 = manager.createSignature(
|
|
285
|
+
{
|
|
286
|
+
protocolID: [1, 'resourceA'],
|
|
287
|
+
data: [0xaa],
|
|
288
|
+
keyID: '1',
|
|
289
|
+
privileged: false
|
|
290
|
+
},
|
|
291
|
+
'user.com'
|
|
292
|
+
)
|
|
293
|
+
|
|
294
|
+
const call2 = manager.createSignature(
|
|
295
|
+
{
|
|
296
|
+
protocolID: [1, 'resourceB'],
|
|
297
|
+
data: [0xbb],
|
|
298
|
+
keyID: '1',
|
|
299
|
+
privileged: false
|
|
300
|
+
},
|
|
301
|
+
'user.com'
|
|
302
|
+
)
|
|
303
|
+
|
|
304
|
+
// Wait for them to be triggered
|
|
305
|
+
await new Promise(r => setTimeout(r, 10))
|
|
306
|
+
|
|
307
|
+
// We expect 2 distinct request events
|
|
308
|
+
expect(requestedCb).toHaveBeenCalledTimes(2)
|
|
309
|
+
|
|
310
|
+
// Each request has a distinct resource
|
|
311
|
+
const firstID = (requestedCb.mock as any).calls[0][0].requestID
|
|
312
|
+
const secondID = (requestedCb.mock as any).calls[1][0].requestID
|
|
313
|
+
expect(firstID).not.toBe(secondID)
|
|
314
|
+
|
|
315
|
+
// We'll grant the first, deny the second
|
|
316
|
+
manager.grantPermission({ requestID: firstID, ephemeral: true })
|
|
317
|
+
manager.denyPermission(secondID)
|
|
318
|
+
|
|
319
|
+
// call1 resolves, call2 rejects
|
|
320
|
+
await expect(call1).resolves.toBeDefined()
|
|
321
|
+
await expect(call2).rejects.toThrow(/Permission denied/)
|
|
322
|
+
})
|
|
323
|
+
})
|