@bsv/wallet-toolbox 2.13.0 → 2.13.2
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/CHANGELOG.md +283 -1
- package/README.md +403 -5
- package/docs/README.md +8 -1
- package/docs/client.md +13057 -4632
- package/docs/identity-verification.md +196 -0
- package/docs/monitor.md +505 -190
- package/docs/services.md +4013 -1153
- package/docs/setup.md +98 -58
- package/docs/storage.md +5780 -1609
- package/docs/wallet.md +10155 -10871
- package/out/src/CWIStyleWalletManager.d.ts +6 -8
- package/out/src/CWIStyleWalletManager.d.ts.map +1 -1
- package/out/src/CWIStyleWalletManager.js +170 -125
- package/out/src/CWIStyleWalletManager.js.map +1 -1
- package/out/src/Setup.d.ts +2 -0
- package/out/src/Setup.d.ts.map +1 -1
- package/out/src/Setup.js +3 -2
- package/out/src/Setup.js.map +1 -1
- package/out/src/ShamirWalletManager.d.ts.map +1 -1
- package/out/src/ShamirWalletManager.js +34 -19
- package/out/src/ShamirWalletManager.js.map +1 -1
- package/out/src/SimpleWalletManager.d.ts.map +1 -1
- package/out/src/SimpleWalletManager.js +7 -6
- package/out/src/SimpleWalletManager.js.map +1 -1
- package/out/src/Wallet.d.ts +50 -11
- package/out/src/Wallet.d.ts.map +1 -1
- package/out/src/Wallet.js +183 -107
- package/out/src/Wallet.js.map +1 -1
- package/out/src/WalletAuthenticationManager.d.ts.map +1 -1
- package/out/src/WalletAuthenticationManager.js +282 -26
- package/out/src/WalletAuthenticationManager.js.map +1 -1
- package/out/src/WalletLogger.js +1 -1
- package/out/src/WalletLogger.js.map +1 -1
- package/out/src/WalletPermissionsManager.d.ts +30 -17
- package/out/src/WalletPermissionsManager.d.ts.map +1 -1
- package/out/src/WalletPermissionsManager.js +540 -312
- package/out/src/WalletPermissionsManager.js.map +1 -1
- package/out/src/WalletSettingsManager.d.ts +3 -2
- package/out/src/WalletSettingsManager.d.ts.map +1 -1
- package/out/src/WalletSettingsManager.js +141 -6
- package/out/src/WalletSettingsManager.js.map +1 -1
- package/out/src/entropy/EntropyCollector.d.ts.map +1 -1
- package/out/src/entropy/EntropyCollector.js +3 -2
- package/out/src/entropy/EntropyCollector.js.map +1 -1
- package/out/src/fundWalletP2PKH.d.ts.map +1 -1
- package/out/src/fundWalletP2PKH.js +143 -44
- package/out/src/fundWalletP2PKH.js.map +1 -1
- package/out/src/mockchain/MockChainTracker.d.ts.map +1 -1
- package/out/src/mockchain/MockChainTracker.js +5 -5
- package/out/src/mockchain/MockChainTracker.js.map +1 -1
- package/out/src/mockchain/MockServices.d.ts.map +1 -1
- package/out/src/mockchain/MockServices.js +32 -8
- package/out/src/mockchain/MockServices.js.map +1 -1
- package/out/src/monitor/Monitor.d.ts +17 -0
- package/out/src/monitor/Monitor.d.ts.map +1 -1
- package/out/src/monitor/Monitor.js +206 -42
- package/out/src/monitor/Monitor.js.map +1 -1
- package/out/src/monitor/MonitorDaemon.d.ts.map +1 -1
- package/out/src/monitor/MonitorDaemon.js +64 -16
- package/out/src/monitor/MonitorDaemon.js.map +1 -1
- package/out/src/monitor/monitorValidation.d.ts +12 -0
- package/out/src/monitor/monitorValidation.d.ts.map +1 -0
- package/out/src/monitor/monitorValidation.js +133 -0
- package/out/src/monitor/monitorValidation.js.map +1 -0
- package/out/src/monitor/tasks/TaskArcSSE.d.ts +2 -0
- package/out/src/monitor/tasks/TaskArcSSE.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskArcSSE.js +28 -12
- package/out/src/monitor/tasks/TaskArcSSE.js.map +1 -1
- package/out/src/monitor/tasks/TaskCheckForProofs.d.ts +5 -0
- package/out/src/monitor/tasks/TaskCheckForProofs.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskCheckForProofs.js +29 -24
- package/out/src/monitor/tasks/TaskCheckForProofs.js.map +1 -1
- package/out/src/monitor/tasks/TaskCheckNoSends.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskCheckNoSends.js +11 -3
- package/out/src/monitor/tasks/TaskCheckNoSends.js.map +1 -1
- package/out/src/monitor/tasks/TaskFailAbandoned.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskFailAbandoned.js +9 -4
- package/out/src/monitor/tasks/TaskFailAbandoned.js.map +1 -1
- package/out/src/monitor/tasks/TaskNewHeader.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskNewHeader.js +3 -1
- package/out/src/monitor/tasks/TaskNewHeader.js.map +1 -1
- package/out/src/monitor/tasks/TaskReconcilePendingTransactions.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskReconcilePendingTransactions.js +9 -3
- package/out/src/monitor/tasks/TaskReconcilePendingTransactions.js.map +1 -1
- package/out/src/monitor/tasks/TaskReorg.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskReorg.js +4 -4
- package/out/src/monitor/tasks/TaskReorg.js.map +1 -1
- package/out/src/monitor/tasks/TaskReviewDoubleSpends.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskReviewDoubleSpends.js +17 -7
- package/out/src/monitor/tasks/TaskReviewDoubleSpends.js.map +1 -1
- package/out/src/monitor/tasks/TaskReviewProvenTxs.d.ts +18 -1
- package/out/src/monitor/tasks/TaskReviewProvenTxs.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskReviewProvenTxs.js +99 -21
- package/out/src/monitor/tasks/TaskReviewProvenTxs.js.map +1 -1
- package/out/src/monitor/tasks/TaskReviewUtxos.d.ts +4 -4
- package/out/src/monitor/tasks/TaskReviewUtxos.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskReviewUtxos.js +41 -13
- package/out/src/monitor/tasks/TaskReviewUtxos.js.map +1 -1
- package/out/src/monitor/tasks/TaskSendWaiting.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskSendWaiting.js +52 -11
- package/out/src/monitor/tasks/TaskSendWaiting.js.map +1 -1
- package/out/src/monitor/tasks/TaskUnFail.d.ts +1 -0
- package/out/src/monitor/tasks/TaskUnFail.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskUnFail.js +26 -8
- package/out/src/monitor/tasks/TaskUnFail.js.map +1 -1
- package/out/src/sdk/PrivilegedKeyManager.d.ts.map +1 -1
- package/out/src/sdk/PrivilegedKeyManager.js +3 -2
- package/out/src/sdk/PrivilegedKeyManager.js.map +1 -1
- package/out/src/sdk/WalletErrorFromJson.d.ts.map +1 -1
- package/out/src/sdk/WalletErrorFromJson.js +112 -2
- package/out/src/sdk/WalletErrorFromJson.js.map +1 -1
- package/out/src/sdk/WalletServices.interfaces.d.ts +17 -1
- package/out/src/sdk/WalletServices.interfaces.d.ts.map +1 -1
- package/out/src/services/Services.d.ts +4 -0
- package/out/src/services/Services.d.ts.map +1 -1
- package/out/src/services/Services.js +260 -117
- package/out/src/services/Services.js.map +1 -1
- package/out/src/services/chaintracker/BHServiceClient.d.ts +21 -4
- package/out/src/services/chaintracker/BHServiceClient.d.ts.map +1 -1
- package/out/src/services/chaintracker/BHServiceClient.js +267 -66
- package/out/src/services/chaintracker/BHServiceClient.js.map +1 -1
- package/out/src/services/chaintracker/ChaintracksChainTracker.d.ts +25 -3
- package/out/src/services/chaintracker/ChaintracksChainTracker.d.ts.map +1 -1
- package/out/src/services/chaintracker/ChaintracksChainTracker.js +188 -53
- package/out/src/services/chaintracker/ChaintracksChainTracker.js.map +1 -1
- package/out/src/services/chaintracker/LocalChainTracker.d.ts +26 -0
- package/out/src/services/chaintracker/LocalChainTracker.d.ts.map +1 -1
- package/out/src/services/chaintracker/LocalChainTracker.js +180 -10
- package/out/src/services/chaintracker/LocalChainTracker.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Api/BlockHeaderApi.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Api/BlockHeaderApi.js +59 -7
- package/out/src/services/chaintracker/chaintracks/Api/BlockHeaderApi.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Api/ChaintracksApi.d.ts +6 -0
- package/out/src/services/chaintracker/chaintracks/Api/ChaintracksApi.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Api/ChaintracksClientApi.d.ts +7 -0
- package/out/src/services/chaintracker/chaintracks/Api/ChaintracksClientApi.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Api/ChaintracksFetchApi.d.ts +2 -0
- package/out/src/services/chaintracker/chaintracks/Api/ChaintracksFetchApi.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Api/ChaintracksStorageApi.d.ts +9 -0
- package/out/src/services/chaintracker/chaintracks/Api/ChaintracksStorageApi.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Chaintracks.d.ts +19 -0
- package/out/src/services/chaintracker/chaintracks/Chaintracks.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Chaintracks.js +237 -61
- package/out/src/services/chaintracker/chaintracks/Chaintracks.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/ChaintracksService.d.ts +16 -0
- package/out/src/services/chaintracker/chaintracks/ChaintracksService.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/ChaintracksService.js +150 -26
- package/out/src/services/chaintracker/chaintracks/ChaintracksService.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/ChaintracksServiceClient.d.ts +30 -1
- package/out/src/services/chaintracker/chaintracks/ChaintracksServiceClient.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/ChaintracksServiceClient.js +346 -30
- package/out/src/services/chaintracker/chaintracks/ChaintracksServiceClient.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/GoChaintracksServiceClient.d.ts +32 -1
- package/out/src/services/chaintracker/chaintracks/GoChaintracksServiceClient.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/GoChaintracksServiceClient.js +375 -43
- package/out/src/services/chaintracker/chaintracks/GoChaintracksServiceClient.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.js +28 -3
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorBase.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDN.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDN.js +33 -9
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDN.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDNBabbage.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorCDNBabbage.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorChaintracks.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorChaintracks.js +4 -2
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorChaintracks.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.d.ts +2 -0
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.js +17 -4
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainCdn.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainWs.d.ts +2 -0
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainWs.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainWs.js +40 -20
- package/out/src/services/chaintracker/chaintracks/Ingest/BulkIngestorWhatsOnChainWs.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.js +14 -0
- package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorBase.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorChaintracksSSE.d.ts +6 -0
- package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorChaintracksSSE.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorChaintracksSSE.js +56 -9
- package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorChaintracksSSE.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorTeranodeP2P.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorTeranodeP2P.js +6 -3
- package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorTeranodeP2P.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainPoll.d.ts +4 -0
- package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainPoll.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainPoll.js +27 -9
- package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainPoll.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainWs.d.ts +8 -0
- package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainWs.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainWs.js +49 -5
- package/out/src/services/chaintracker/chaintracks/Ingest/LiveIngestorWhatsOnChainWs.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.d.ts +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.js +90 -21
- package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainIngestorWs.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainServices.d.ts +3 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainServices.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainServices.js +185 -38
- package/out/src/services/chaintracker/chaintracks/Ingest/WhatsOnChainServices.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.js +59 -6
- package/out/src/services/chaintracker/chaintracks/Storage/BulkStorageBase.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksKnexMigrations.d.ts +2 -0
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksKnexMigrations.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksKnexMigrations.js +89 -39
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksKnexMigrations.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.d.ts +10 -0
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.js +225 -24
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageBase.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.d.ts +2 -1
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.js +265 -96
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageIdb.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageKnex.d.ts +3 -0
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageKnex.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageKnex.js +225 -86
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageKnex.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.d.ts +3 -0
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.js +121 -35
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageNoDb.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/configureChaintracksIngestors.js +2 -2
- package/out/src/services/chaintracker/chaintracks/configureChaintracksIngestors.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/createDefaultIdbChaintracksOptions.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/createDefaultIdbChaintracksOptions.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/createDefaultKnexChaintracksOptions.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/createDefaultKnexChaintracksOptions.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/createDefaultNoDbChaintracksOptions.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/createDefaultNoDbChaintracksOptions.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/createIdbChaintracks.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/createIdbChaintracks.js +1 -7
- package/out/src/services/chaintracker/chaintracks/createIdbChaintracks.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/createKnexChaintracks.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/createKnexChaintracks.js +1 -7
- package/out/src/services/chaintracker/chaintracks/createKnexChaintracks.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/createNoDbChaintracks.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/createNoDbChaintracks.js +1 -7
- package/out/src/services/chaintracker/chaintracks/createNoDbChaintracks.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/BulkFileDataCacheFs.d.ts +18 -0
- package/out/src/services/chaintracker/chaintracks/util/BulkFileDataCacheFs.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/BulkFileDataCacheFs.js +204 -14
- package/out/src/services/chaintracker/chaintracks/util/BulkFileDataCacheFs.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.d.ts +6 -1
- package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.js +486 -82
- package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/BulkFileDataReader.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/BulkFileDataReader.js +17 -1
- package/out/src/services/chaintracker/chaintracks/util/BulkFileDataReader.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/BulkFileDataValidator.worker.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/BulkFileDataValidator.worker.js +12 -2
- package/out/src/services/chaintracker/chaintracks/util/BulkFileDataValidator.worker.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/BulkFilesReader.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/BulkFilesReader.js +99 -30
- package/out/src/services/chaintracker/chaintracks/util/BulkFilesReader.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.d.ts +1 -0
- package/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.js +23 -15
- package/out/src/services/chaintracker/chaintracks/util/BulkHeaderFile.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/ChaintracksFetch.d.ts +7 -0
- package/out/src/services/chaintracker/chaintracks/util/ChaintracksFetch.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/ChaintracksFetch.js +90 -24
- package/out/src/services/chaintracker/chaintracks/util/ChaintracksFetch.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/ChaintracksFs.d.ts +2 -1
- package/out/src/services/chaintracker/chaintracks/util/ChaintracksFs.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/ChaintracksFs.js +57 -11
- package/out/src/services/chaintracker/chaintracks/util/ChaintracksFs.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/DurableFileBulkFileDownloadBudget.d.ts +9 -0
- package/out/src/services/chaintracker/chaintracks/util/DurableFileBulkFileDownloadBudget.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/DurableFileBulkFileDownloadBudget.js +100 -14
- package/out/src/services/chaintracker/chaintracks/util/DurableFileBulkFileDownloadBudget.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/HeightRange.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/HeightRange.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/InlineBulkFileDataValidator.d.ts +2 -0
- package/out/src/services/chaintracker/chaintracks/util/InlineBulkFileDataValidator.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/InlineBulkFileDataValidator.js +104 -8
- package/out/src/services/chaintracker/chaintracks/util/InlineBulkFileDataValidator.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/NodeBulkFileDataValidator.d.ts +1 -0
- package/out/src/services/chaintracker/chaintracks/util/NodeBulkFileDataValidator.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/NodeBulkFileDataValidator.js +79 -15
- package/out/src/services/chaintracker/chaintracks/util/NodeBulkFileDataValidator.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/SingleWriterMultiReaderLock.d.ts +3 -0
- package/out/src/services/chaintracker/chaintracks/util/SingleWriterMultiReaderLock.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/SingleWriterMultiReaderLock.js +15 -0
- package/out/src/services/chaintracker/chaintracks/util/SingleWriterMultiReaderLock.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.d.ts +6 -1
- package/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.js +311 -93
- package/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/safeDiagnostic.d.ts +4 -0
- package/out/src/services/chaintracker/chaintracks/util/safeDiagnostic.d.ts.map +1 -0
- package/out/src/services/chaintracker/chaintracks/util/safeDiagnostic.js +33 -0
- package/out/src/services/chaintracker/chaintracks/util/safeDiagnostic.js.map +1 -0
- package/out/src/services/chaintracker/chaintracks/util/validBulkHeaderFilesByFileHash.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/validBulkHeaderFilesByFileHash.js.map +1 -1
- package/out/src/services/classifyOutputUtxo.d.ts.map +1 -1
- package/out/src/services/classifyOutputUtxo.js +19 -10
- package/out/src/services/classifyOutputUtxo.js.map +1 -1
- package/out/src/services/fiatRateValidation.d.ts +12 -0
- package/out/src/services/fiatRateValidation.d.ts.map +1 -0
- package/out/src/services/fiatRateValidation.js +138 -0
- package/out/src/services/fiatRateValidation.js.map +1 -0
- package/out/src/services/getCanonicalMerklePath.d.ts +15 -0
- package/out/src/services/getCanonicalMerklePath.d.ts.map +1 -0
- package/out/src/services/getCanonicalMerklePath.js +90 -0
- package/out/src/services/getCanonicalMerklePath.js.map +1 -0
- package/out/src/services/providers/ARC.d.ts +3 -16
- package/out/src/services/providers/ARC.d.ts.map +1 -1
- package/out/src/services/providers/ARC.js +36 -37
- package/out/src/services/providers/ARC.js.map +1 -1
- package/out/src/services/providers/ArcSSEClient.d.ts +25 -19
- package/out/src/services/providers/ArcSSEClient.d.ts.map +1 -1
- package/out/src/services/providers/ArcSSEClient.js +352 -85
- package/out/src/services/providers/ArcSSEClient.js.map +1 -1
- package/out/src/services/providers/Arcade.d.ts +1 -0
- package/out/src/services/providers/Arcade.d.ts.map +1 -1
- package/out/src/services/providers/Arcade.js +56 -41
- package/out/src/services/providers/Arcade.js.map +1 -1
- package/out/src/services/providers/Bitails.d.ts +3 -0
- package/out/src/services/providers/Bitails.d.ts.map +1 -1
- package/out/src/services/providers/Bitails.js +79 -12
- package/out/src/services/providers/Bitails.js.map +1 -1
- package/out/src/services/providers/SdkWhatsOnChain.d.ts +8 -2
- package/out/src/services/providers/SdkWhatsOnChain.d.ts.map +1 -1
- package/out/src/services/providers/SdkWhatsOnChain.js +83 -10
- package/out/src/services/providers/SdkWhatsOnChain.js.map +1 -1
- package/out/src/services/providers/WhatsOnChain.d.ts +3 -0
- package/out/src/services/providers/WhatsOnChain.d.ts.map +1 -1
- package/out/src/services/providers/WhatsOnChain.js +221 -69
- package/out/src/services/providers/WhatsOnChain.js.map +1 -1
- package/out/src/services/providers/arcProviderConfig.d.ts +27 -0
- package/out/src/services/providers/arcProviderConfig.d.ts.map +1 -0
- package/out/src/services/providers/arcProviderConfig.js +83 -0
- package/out/src/services/providers/arcProviderConfig.js.map +1 -0
- package/out/src/services/providers/arcTxDataValidation.d.ts +4 -0
- package/out/src/services/providers/arcTxDataValidation.d.ts.map +1 -0
- package/out/src/services/providers/arcTxDataValidation.js +92 -0
- package/out/src/services/providers/arcTxDataValidation.js.map +1 -0
- package/out/src/services/providers/exchangeRates.d.ts +3 -3
- package/out/src/services/providers/exchangeRates.d.ts.map +1 -1
- package/out/src/services/providers/exchangeRates.js +153 -226
- package/out/src/services/providers/exchangeRates.js.map +1 -1
- package/out/src/services/providers/getBeefForTxid.d.ts.map +1 -1
- package/out/src/services/providers/getBeefForTxid.js.map +1 -1
- package/out/src/services/providers/whatsOnChainHelpers.d.ts +2 -2
- package/out/src/services/providers/whatsOnChainHelpers.d.ts.map +1 -1
- package/out/src/services/providers/whatsOnChainHelpers.js +11 -8
- package/out/src/services/providers/whatsOnChainHelpers.js.map +1 -1
- package/out/src/services/validateMerklePathResult.d.ts +30 -0
- package/out/src/services/validateMerklePathResult.d.ts.map +1 -0
- package/out/src/services/validateMerklePathResult.js +272 -0
- package/out/src/services/validateMerklePathResult.js.map +1 -0
- package/out/src/services/validatePostBeefResult.d.ts +17 -0
- package/out/src/services/validatePostBeefResult.d.ts.map +1 -0
- package/out/src/services/validatePostBeefResult.js +334 -0
- package/out/src/services/validatePostBeefResult.js.map +1 -0
- package/out/src/services/validateRawTxResult.d.ts +6 -0
- package/out/src/services/validateRawTxResult.d.ts.map +1 -0
- package/out/src/services/validateRawTxResult.js +77 -0
- package/out/src/services/validateRawTxResult.js.map +1 -0
- package/out/src/services/validateScriptHashHistoryResult.d.ts +5 -0
- package/out/src/services/validateScriptHashHistoryResult.d.ts.map +1 -0
- package/out/src/services/validateScriptHashHistoryResult.js +99 -0
- package/out/src/services/validateScriptHashHistoryResult.js.map +1 -0
- package/out/src/services/validateStatusForTxidsResult.d.ts +8 -0
- package/out/src/services/validateStatusForTxidsResult.d.ts.map +1 -0
- package/out/src/services/validateStatusForTxidsResult.js +181 -0
- package/out/src/services/validateStatusForTxidsResult.js.map +1 -0
- package/out/src/services/validateUtxoStatusResult.d.ts +6 -0
- package/out/src/services/validateUtxoStatusResult.d.ts.map +1 -0
- package/out/src/services/validateUtxoStatusResult.js +126 -0
- package/out/src/services/validateUtxoStatusResult.js.map +1 -0
- package/out/src/signer/actionBatch/ActionBatchPlanner.d.ts +3 -2
- package/out/src/signer/actionBatch/ActionBatchPlanner.d.ts.map +1 -1
- package/out/src/signer/actionBatch/ActionBatchPlanner.js +4 -3
- package/out/src/signer/actionBatch/ActionBatchPlanner.js.map +1 -1
- package/out/src/signer/actionBatch/ActionBatchWorkspace.d.ts +6 -5
- package/out/src/signer/actionBatch/ActionBatchWorkspace.d.ts.map +1 -1
- package/out/src/signer/actionBatch/ActionBatchWorkspace.js +70 -76
- package/out/src/signer/actionBatch/ActionBatchWorkspace.js.map +1 -1
- package/out/src/signer/actionBatch/actionBatchBootstrap.d.ts +2 -2
- package/out/src/signer/actionBatch/actionBatchBootstrap.d.ts.map +1 -1
- package/out/src/signer/actionBatch/actionBatchBootstrap.js +3 -3
- package/out/src/signer/actionBatch/actionBatchBootstrap.js.map +1 -1
- package/out/src/signer/methods/acquireDirectCertificate.d.ts +3 -2
- package/out/src/signer/methods/acquireDirectCertificate.d.ts.map +1 -1
- package/out/src/signer/methods/acquireDirectCertificate.js.map +1 -1
- package/out/src/signer/methods/buildSignableTransaction.d.ts +6 -5
- package/out/src/signer/methods/buildSignableTransaction.d.ts.map +1 -1
- package/out/src/signer/methods/buildSignableTransaction.js +6 -11
- package/out/src/signer/methods/buildSignableTransaction.js.map +1 -1
- package/out/src/signer/methods/createAction.d.ts +4 -3
- package/out/src/signer/methods/createAction.d.ts.map +1 -1
- package/out/src/signer/methods/createAction.js +4 -2
- package/out/src/signer/methods/createAction.js.map +1 -1
- package/out/src/signer/methods/createNoSendExpiryAction.d.ts +3 -3
- package/out/src/signer/methods/createNoSendExpiryAction.d.ts.map +1 -1
- package/out/src/signer/methods/createNoSendExpiryAction.js +9 -4
- package/out/src/signer/methods/createNoSendExpiryAction.js.map +1 -1
- package/out/src/signer/methods/internalizeAction.d.ts.map +1 -1
- package/out/src/signer/methods/internalizeAction.js +2 -2
- package/out/src/signer/methods/internalizeAction.js.map +1 -1
- package/out/src/signer/methods/proveCertificate.d.ts +3 -2
- package/out/src/signer/methods/proveCertificate.d.ts.map +1 -1
- package/out/src/signer/methods/proveCertificate.js.map +1 -1
- package/out/src/signer/methods/signAction.d.ts.map +1 -1
- package/out/src/signer/methods/signAction.js +3 -2
- package/out/src/signer/methods/signAction.js.map +1 -1
- package/out/src/signer/methods/verifyUnlockScripts.d.ts.map +1 -1
- package/out/src/signer/methods/verifyUnlockScripts.js +12 -17
- package/out/src/signer/methods/verifyUnlockScripts.js.map +1 -1
- package/out/src/storage/StorageIdb.d.ts +5 -3
- package/out/src/storage/StorageIdb.d.ts.map +1 -1
- package/out/src/storage/StorageIdb.js +15 -20
- package/out/src/storage/StorageIdb.js.map +1 -1
- package/out/src/storage/StorageKnex.d.ts +5 -3
- package/out/src/storage/StorageKnex.d.ts.map +1 -1
- package/out/src/storage/StorageKnex.js +143 -93
- package/out/src/storage/StorageKnex.js.map +1 -1
- package/out/src/storage/StorageProvider.d.ts +19 -9
- package/out/src/storage/StorageProvider.d.ts.map +1 -1
- package/out/src/storage/StorageProvider.js +229 -145
- package/out/src/storage/StorageProvider.js.map +1 -1
- package/out/src/storage/StorageReader.d.ts +1 -1
- package/out/src/storage/StorageReader.d.ts.map +1 -1
- package/out/src/storage/StorageReader.js +9 -42
- package/out/src/storage/StorageReader.js.map +1 -1
- package/out/src/storage/StorageReaderWriter.d.ts +1 -0
- package/out/src/storage/StorageReaderWriter.d.ts.map +1 -1
- package/out/src/storage/StorageReaderWriter.js +37 -36
- package/out/src/storage/StorageReaderWriter.js.map +1 -1
- package/out/src/storage/StorageSyncReader.d.ts +1 -1
- package/out/src/storage/StorageSyncReader.d.ts.map +1 -1
- package/out/src/storage/StorageSyncReader.js +3 -36
- package/out/src/storage/StorageSyncReader.js.map +1 -1
- package/out/src/storage/WalletStorageManager.d.ts +8 -7
- package/out/src/storage/WalletStorageManager.d.ts.map +1 -1
- package/out/src/storage/WalletStorageManager.js +38 -65
- package/out/src/storage/WalletStorageManager.js.map +1 -1
- package/out/src/storage/adminServer/adminServer.d.ts +1 -1
- package/out/src/storage/adminServer/adminServer.d.ts.map +1 -1
- package/out/src/storage/adminServer/adminServer.js +16 -44
- package/out/src/storage/adminServer/adminServer.js.map +1 -1
- package/out/src/storage/methods/ListActionsSpecOp.d.ts +2 -2
- package/out/src/storage/methods/ListActionsSpecOp.d.ts.map +1 -1
- package/out/src/storage/methods/ListActionsSpecOp.js.map +1 -1
- package/out/src/storage/methods/ListOutputsSpecOp.d.ts +7 -4
- package/out/src/storage/methods/ListOutputsSpecOp.d.ts.map +1 -1
- package/out/src/storage/methods/ListOutputsSpecOp.js +1 -0
- package/out/src/storage/methods/ListOutputsSpecOp.js.map +1 -1
- package/out/src/storage/methods/actionBatch.d.ts.map +1 -1
- package/out/src/storage/methods/actionBatch.js +3 -2
- package/out/src/storage/methods/actionBatch.js.map +1 -1
- package/out/src/storage/methods/actionBatchBlobs.d.ts +2 -0
- package/out/src/storage/methods/actionBatchBlobs.d.ts.map +1 -1
- package/out/src/storage/methods/actionBatchBlobs.js +40 -22
- package/out/src/storage/methods/actionBatchBlobs.js.map +1 -1
- package/out/src/storage/methods/actionBatchValidation.d.ts.map +1 -1
- package/out/src/storage/methods/actionBatchValidation.js +22 -30
- package/out/src/storage/methods/actionBatchValidation.js.map +1 -1
- package/out/src/storage/methods/attemptToPostReqsToNetwork.d.ts +7 -2
- package/out/src/storage/methods/attemptToPostReqsToNetwork.d.ts.map +1 -1
- package/out/src/storage/methods/attemptToPostReqsToNetwork.js +57 -44
- package/out/src/storage/methods/attemptToPostReqsToNetwork.js.map +1 -1
- package/out/src/storage/methods/createAction.d.ts +7 -6
- package/out/src/storage/methods/createAction.d.ts.map +1 -1
- package/out/src/storage/methods/createAction.js +7 -5
- package/out/src/storage/methods/createAction.js.map +1 -1
- package/out/src/storage/methods/generateChange.d.ts.map +1 -1
- package/out/src/storage/methods/generateChange.js +12 -11
- package/out/src/storage/methods/generateChange.js.map +1 -1
- package/out/src/storage/methods/getBeefForTransaction.js +5 -7
- package/out/src/storage/methods/getBeefForTransaction.js.map +1 -1
- package/out/src/storage/methods/internalizeAction.d.ts +3 -3
- package/out/src/storage/methods/internalizeAction.d.ts.map +1 -1
- package/out/src/storage/methods/internalizeAction.js +134 -129
- package/out/src/storage/methods/internalizeAction.js.map +1 -1
- package/out/src/storage/methods/listActionsIdb.d.ts +3 -2
- package/out/src/storage/methods/listActionsIdb.d.ts.map +1 -1
- package/out/src/storage/methods/listActionsIdb.js +2 -2
- package/out/src/storage/methods/listActionsIdb.js.map +1 -1
- package/out/src/storage/methods/listActionsKnex.d.ts +3 -2
- package/out/src/storage/methods/listActionsKnex.d.ts.map +1 -1
- package/out/src/storage/methods/listActionsKnex.js +10 -9
- package/out/src/storage/methods/listActionsKnex.js.map +1 -1
- package/out/src/storage/methods/listCertificates.d.ts +3 -2
- package/out/src/storage/methods/listCertificates.d.ts.map +1 -1
- package/out/src/storage/methods/listCertificates.js.map +1 -1
- package/out/src/storage/methods/listOutputsIdb.d.ts +3 -2
- package/out/src/storage/methods/listOutputsIdb.d.ts.map +1 -1
- package/out/src/storage/methods/listOutputsIdb.js +11 -11
- package/out/src/storage/methods/listOutputsIdb.js.map +1 -1
- package/out/src/storage/methods/listOutputsKnex.d.ts +3 -2
- package/out/src/storage/methods/listOutputsKnex.d.ts.map +1 -1
- package/out/src/storage/methods/listOutputsKnex.js +15 -23
- package/out/src/storage/methods/listOutputsKnex.js.map +1 -1
- package/out/src/storage/methods/noSendExpiry.d.ts +3 -3
- package/out/src/storage/methods/noSendExpiry.d.ts.map +1 -1
- package/out/src/storage/methods/noSendExpiry.js +10 -8
- package/out/src/storage/methods/noSendExpiry.js.map +1 -1
- package/out/src/storage/methods/preparedBeef.d.ts.map +1 -1
- package/out/src/storage/methods/preparedBeef.js +13 -14
- package/out/src/storage/methods/preparedBeef.js.map +1 -1
- package/out/src/storage/methods/processAction.d.ts.map +1 -1
- package/out/src/storage/methods/processAction.js +37 -6
- package/out/src/storage/methods/processAction.js.map +1 -1
- package/out/src/storage/methods/reconcileFailedTransactionInputs.d.ts +1 -1
- package/out/src/storage/methods/reconcileFailedTransactionInputs.d.ts.map +1 -1
- package/out/src/storage/methods/reconcileFailedTransactionInputs.js.map +1 -1
- package/out/src/storage/methods/reviewStatusIdb.d.ts +1 -1
- package/out/src/storage/methods/reviewStatusIdb.d.ts.map +1 -1
- package/out/src/storage/methods/reviewStatusIdb.js.map +1 -1
- package/out/src/storage/methods/reviewUtxoOutputs.d.ts +1 -0
- package/out/src/storage/methods/reviewUtxoOutputs.d.ts.map +1 -1
- package/out/src/storage/methods/reviewUtxoOutputs.js +51 -4
- package/out/src/storage/methods/reviewUtxoOutputs.js.map +1 -1
- package/out/src/storage/methods/validateSyncProof.d.ts.map +1 -1
- package/out/src/storage/methods/validateSyncProof.js +3 -3
- package/out/src/storage/methods/validateSyncProof.js.map +1 -1
- package/out/src/storage/portable/index.d.ts.map +1 -1
- package/out/src/storage/portable/index.js +21 -13
- package/out/src/storage/portable/index.js.map +1 -1
- package/out/src/storage/remoting/BinaryJson.d.ts +11 -0
- package/out/src/storage/remoting/BinaryJson.d.ts.map +1 -1
- package/out/src/storage/remoting/BinaryJson.js +37 -0
- package/out/src/storage/remoting/BinaryJson.js.map +1 -1
- package/out/src/storage/remoting/KnexSessionManager.d.ts +26 -2
- package/out/src/storage/remoting/KnexSessionManager.d.ts.map +1 -1
- package/out/src/storage/remoting/KnexSessionManager.js +222 -30
- package/out/src/storage/remoting/KnexSessionManager.js.map +1 -1
- package/out/src/storage/remoting/KnexSyncTransferStore.d.ts.map +1 -1
- package/out/src/storage/remoting/KnexSyncTransferStore.js +3 -4
- package/out/src/storage/remoting/KnexSyncTransferStore.js.map +1 -1
- package/out/src/storage/remoting/StorageClient.d.ts +6 -1
- package/out/src/storage/remoting/StorageClient.d.ts.map +1 -1
- package/out/src/storage/remoting/StorageClient.js +63 -6
- package/out/src/storage/remoting/StorageClient.js.map +1 -1
- package/out/src/storage/remoting/StorageClientBase.d.ts +23 -6
- package/out/src/storage/remoting/StorageClientBase.d.ts.map +1 -1
- package/out/src/storage/remoting/StorageClientBase.js +148 -19
- package/out/src/storage/remoting/StorageClientBase.js.map +1 -1
- package/out/src/storage/remoting/StorageMobile.d.ts +5 -0
- package/out/src/storage/remoting/StorageMobile.d.ts.map +1 -1
- package/out/src/storage/remoting/StorageMobile.js +11 -9
- package/out/src/storage/remoting/StorageMobile.js.map +1 -1
- package/out/src/storage/remoting/StorageServer.d.ts +5 -1
- package/out/src/storage/remoting/StorageServer.d.ts.map +1 -1
- package/out/src/storage/remoting/StorageServer.js +95 -19
- package/out/src/storage/remoting/StorageServer.js.map +1 -1
- package/out/src/storage/remoting/SyncTransfer.d.ts.map +1 -1
- package/out/src/storage/remoting/SyncTransfer.js +3 -2
- package/out/src/storage/remoting/SyncTransfer.js.map +1 -1
- package/out/src/storage/schema/KnexMigrations.d.ts +1 -0
- package/out/src/storage/schema/KnexMigrations.d.ts.map +1 -1
- package/out/src/storage/schema/KnexMigrations.js +28 -6
- package/out/src/storage/schema/KnexMigrations.js.map +1 -1
- package/out/src/storage/schema/entities/EntityOutput.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntityOutput.js +11 -4
- package/out/src/storage/schema/entities/EntityOutput.js.map +1 -1
- package/out/src/storage/schema/entities/EntityProvenTx.d.ts +2 -1
- package/out/src/storage/schema/entities/EntityProvenTx.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntityProvenTx.js +93 -39
- package/out/src/storage/schema/entities/EntityProvenTx.js.map +1 -1
- package/out/src/storage/schema/entities/EntityProvenTxReq.js +1 -1
- package/out/src/storage/schema/entities/EntityProvenTxReq.js.map +1 -1
- package/out/src/storage/schema/entities/EntitySyncState.js +1 -1
- package/out/src/storage/schema/entities/EntitySyncState.js.map +1 -1
- package/out/src/storage/schema/tables/TableCertificate.d.ts +1 -1
- package/out/src/storage/schema/tables/TableCertificate.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableCertificateField.d.ts +1 -1
- package/out/src/storage/schema/tables/TableCertificateField.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableCommission.d.ts +1 -1
- package/out/src/storage/schema/tables/TableCommission.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableMonitorEvent.d.ts +1 -1
- package/out/src/storage/schema/tables/TableMonitorEvent.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableOutput.d.ts +1 -1
- package/out/src/storage/schema/tables/TableOutput.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableOutputBasket.d.ts +1 -1
- package/out/src/storage/schema/tables/TableOutputBasket.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableOutputTag.d.ts +1 -1
- package/out/src/storage/schema/tables/TableOutputTag.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableOutputTagMap.d.ts +1 -1
- package/out/src/storage/schema/tables/TableOutputTagMap.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableProvenTx.d.ts +1 -1
- package/out/src/storage/schema/tables/TableProvenTx.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableProvenTxReq.d.ts +1 -1
- package/out/src/storage/schema/tables/TableProvenTxReq.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableSettings.d.ts +1 -1
- package/out/src/storage/schema/tables/TableSettings.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableSyncState.d.ts +1 -1
- package/out/src/storage/schema/tables/TableSyncState.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableTransaction.d.ts +1 -1
- package/out/src/storage/schema/tables/TableTransaction.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableTransaction.js.map +1 -1
- package/out/src/storage/schema/tables/TableTxLabel.d.ts +1 -1
- package/out/src/storage/schema/tables/TableTxLabel.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableTxLabelMap.d.ts +1 -1
- package/out/src/storage/schema/tables/TableTxLabelMap.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableUser.d.ts +1 -1
- package/out/src/storage/schema/tables/TableUser.d.ts.map +1 -1
- package/out/src/storage/sync/StorageMySQLDojoReader.d.ts.map +1 -1
- package/out/src/storage/sync/StorageMySQLDojoReader.js +8 -7
- package/out/src/storage/sync/StorageMySQLDojoReader.js.map +1 -1
- package/out/src/utility/actionBatchDigest.d.ts.map +1 -1
- package/out/src/utility/actionBatchDigest.js +9 -7
- package/out/src/utility/actionBatchDigest.js.map +1 -1
- package/out/src/utility/actionBatchPack.d.ts.map +1 -1
- package/out/src/utility/actionBatchPack.js +7 -12
- package/out/src/utility/actionBatchPack.js.map +1 -1
- package/out/src/utility/brc153ReferenceLabels.d.ts.map +1 -1
- package/out/src/utility/brc153ReferenceLabels.js +4 -4
- package/out/src/utility/brc153ReferenceLabels.js.map +1 -1
- package/out/src/utility/brc177NoSendExpiry.d.ts +2 -2
- package/out/src/utility/brc177NoSendExpiry.d.ts.map +1 -1
- package/out/src/utility/canonicalizeAtomicBeef.js +2 -2
- package/out/src/utility/canonicalizeAtomicBeef.js.map +1 -1
- package/out/src/utility/exactActionSpend.d.ts +11 -0
- package/out/src/utility/exactActionSpend.d.ts.map +1 -0
- package/out/src/utility/exactActionSpend.js +11 -0
- package/out/src/utility/exactActionSpend.js.map +1 -0
- package/out/src/utility/identityUtils.d.ts +44 -4
- package/out/src/utility/identityUtils.d.ts.map +1 -1
- package/out/src/utility/identityUtils.js +376 -61
- package/out/src/utility/identityUtils.js.map +1 -1
- package/out/src/utility/parseTxScriptOffsets.d.ts.map +1 -1
- package/out/src/utility/parseTxScriptOffsets.js +1 -19
- package/out/src/utility/parseTxScriptOffsets.js.map +1 -1
- package/out/src/utility/tscProofToMerklePath.d.ts.map +1 -1
- package/out/src/utility/tscProofToMerklePath.js +35 -4
- package/out/src/utility/tscProofToMerklePath.js.map +1 -1
- package/out/src/utility/utilityHelpers.d.ts.map +1 -1
- package/out/src/utility/utilityHelpers.js +8 -6
- package/out/src/utility/utilityHelpers.js.map +1 -1
- package/out/src/utility/utilityHelpers.noBuffer.d.ts.map +1 -1
- package/out/src/utility/utilityHelpers.noBuffer.js +6 -6
- package/out/src/utility/utilityHelpers.noBuffer.js.map +1 -1
- package/out/src/utility/verifyOverlayOutput.d.ts +12 -0
- package/out/src/utility/verifyOverlayOutput.d.ts.map +1 -0
- package/out/src/utility/verifyOverlayOutput.js +22 -0
- package/out/src/utility/verifyOverlayOutput.js.map +1 -0
- package/out/src/utility/walletResultGuards.d.ts +14 -0
- package/out/src/utility/walletResultGuards.d.ts.map +1 -0
- package/out/src/utility/walletResultGuards.js +28 -0
- package/out/src/utility/walletResultGuards.js.map +1 -0
- package/out/src/wab-client/WABClient.d.ts +3 -17
- package/out/src/wab-client/WABClient.d.ts.map +1 -1
- package/out/src/wab-client/WABClient.js +30 -14
- package/out/src/wab-client/WABClient.js.map +1 -1
- package/out/src/wab-client/WABResponseValidation.d.ts +48 -0
- package/out/src/wab-client/WABResponseValidation.d.ts.map +1 -0
- package/out/src/wab-client/WABResponseValidation.js +321 -0
- package/out/src/wab-client/WABResponseValidation.js.map +1 -0
- package/out/src/wab-client/auth-method-interactors/AuthMethodInteractor.d.ts.map +1 -1
- package/out/src/wab-client/auth-method-interactors/AuthMethodInteractor.js +3 -2
- package/out/src/wab-client/auth-method-interactors/AuthMethodInteractor.js.map +1 -1
- package/package.json +5 -5
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.GoChaintracksServiceClient = void 0;
|
|
4
4
|
const utilityHelpers_noBuffer_1 = require("../../../utility/utilityHelpers.noBuffer");
|
|
5
|
+
const blockHeaderUtilities_1 = require("./util/blockHeaderUtilities");
|
|
6
|
+
const safeDiagnostic_1 = require("./util/safeDiagnostic");
|
|
5
7
|
/**
|
|
6
8
|
* Client for go-chaintracks compatible HTTP services, including Arcade's
|
|
7
9
|
* `/chaintracks/v2` surface. Unlike the legacy ChaintracksServiceClient, this
|
|
@@ -10,20 +12,44 @@ const utilityHelpers_noBuffer_1 = require("../../../utility/utilityHelpers.noBuf
|
|
|
10
12
|
*/
|
|
11
13
|
class GoChaintracksServiceClient {
|
|
12
14
|
chain;
|
|
15
|
+
/** SSE client; reorg registration is a supported additive capability. */
|
|
16
|
+
supportsReorgEvents = true;
|
|
17
|
+
static MAX_CONFIGURED_BYTES = 512 * 1024 * 1024;
|
|
18
|
+
static MAX_SUBSCRIPTIONS = 100_000;
|
|
13
19
|
baseUrl;
|
|
14
20
|
fetcher;
|
|
15
21
|
requestTimeoutMsecs;
|
|
16
22
|
reconnectWaitMsecs;
|
|
17
23
|
reconnectWaitMaxMsecs;
|
|
24
|
+
maxJsonResponseBytes;
|
|
25
|
+
maxBinaryResponseBytes;
|
|
26
|
+
maxSseEventBytes;
|
|
27
|
+
maxReorgHeaders;
|
|
28
|
+
streamIdleTimeoutMsecs;
|
|
18
29
|
subscriptions = new Map();
|
|
19
30
|
nextSubscriptionId = 1;
|
|
20
31
|
constructor(chain, serviceUrl, options = {}) {
|
|
21
32
|
this.chain = chain;
|
|
22
|
-
|
|
33
|
+
if (typeof chain !== 'string' || this.normalizeChain(chain) !== chain) {
|
|
34
|
+
throw new Error('chain must be a supported canonical ChainTracks network.');
|
|
35
|
+
}
|
|
36
|
+
if (options == null || typeof options !== 'object' || Array.isArray(options)) {
|
|
37
|
+
throw new Error('options must be a plain data object.');
|
|
38
|
+
}
|
|
39
|
+
const optionDescriptors = Object.getOwnPropertyDescriptors(options);
|
|
40
|
+
if (Object.values(optionDescriptors).some(descriptor => descriptor.get != null || descriptor.set != null)) {
|
|
41
|
+
throw new Error('options must contain accessor-free data properties.');
|
|
42
|
+
}
|
|
43
|
+
options = Object.freeze({ ...options });
|
|
44
|
+
const parsedServiceUrl = this.parseServiceUrl(serviceUrl);
|
|
45
|
+
let base = parsedServiceUrl.toString();
|
|
23
46
|
while (base.endsWith('/'))
|
|
24
47
|
base = base.slice(0, -1);
|
|
25
48
|
let prefix = options.apiPrefix ?? '';
|
|
26
49
|
if (prefix !== '') {
|
|
50
|
+
if (/[[\]\\?#]/.test(prefix) || prefix.split('/').some(part => part === '..' || part === '.')) {
|
|
51
|
+
throw new Error('apiPrefix must be an absolute URL path without traversal, query, or fragment.');
|
|
52
|
+
}
|
|
27
53
|
if (!prefix.startsWith('/'))
|
|
28
54
|
prefix = `/${prefix}`;
|
|
29
55
|
while (prefix.endsWith('/'))
|
|
@@ -31,16 +57,23 @@ class GoChaintracksServiceClient {
|
|
|
31
57
|
}
|
|
32
58
|
this.baseUrl = `${base}${prefix}`;
|
|
33
59
|
this.fetcher = options.fetch ?? fetch;
|
|
60
|
+
if (typeof this.fetcher !== 'function')
|
|
61
|
+
throw new Error('fetch must be a function.');
|
|
34
62
|
this.requestTimeoutMsecs = options.requestTimeoutMsecs ?? 30000;
|
|
35
63
|
this.reconnectWaitMsecs = options.reconnectWaitMsecs ?? 1000;
|
|
36
64
|
this.reconnectWaitMaxMsecs = options.reconnectWaitMaxMsecs ?? 60000;
|
|
65
|
+
this.maxJsonResponseBytes = this.readPositiveOption(options.maxJsonResponseBytes, 1024 * 1024, 'maxJsonResponseBytes', GoChaintracksServiceClient.MAX_CONFIGURED_BYTES);
|
|
66
|
+
this.maxBinaryResponseBytes = this.readPositiveOption(options.maxBinaryResponseBytes, 32 * 1024 * 1024, 'maxBinaryResponseBytes', GoChaintracksServiceClient.MAX_CONFIGURED_BYTES);
|
|
67
|
+
this.maxSseEventBytes = this.readPositiveOption(options.maxSseEventBytes, 1024 * 1024, 'maxSseEventBytes', GoChaintracksServiceClient.MAX_CONFIGURED_BYTES);
|
|
68
|
+
this.maxReorgHeaders = this.readPositiveOption(options.maxReorgHeaders, 4096, 'maxReorgHeaders', 100_000);
|
|
69
|
+
this.streamIdleTimeoutMsecs = this.readPositiveOption(options.streamIdleTimeoutMsecs, 45_000, 'streamIdleTimeoutMsecs', 60 * 60 * 1000);
|
|
37
70
|
for (const [name, value] of [
|
|
38
71
|
['requestTimeoutMsecs', this.requestTimeoutMsecs],
|
|
39
72
|
['reconnectWaitMsecs', this.reconnectWaitMsecs],
|
|
40
73
|
['reconnectWaitMaxMsecs', this.reconnectWaitMaxMsecs]
|
|
41
74
|
]) {
|
|
42
|
-
if (!Number.isSafeInteger(value) || value < 1) {
|
|
43
|
-
throw new Error(`${name} must be a positive integer.`);
|
|
75
|
+
if (!Number.isSafeInteger(value) || value < 1 || value > 60 * 60 * 1000) {
|
|
76
|
+
throw new Error(`${name} must be a positive integer no greater than 3600000.`);
|
|
44
77
|
}
|
|
45
78
|
}
|
|
46
79
|
if (this.reconnectWaitMaxMsecs < this.reconnectWaitMsecs) {
|
|
@@ -55,8 +88,16 @@ class GoChaintracksServiceClient {
|
|
|
55
88
|
return h != null && root === (0, utilityHelpers_noBuffer_1.asString)(h.merkleRoot);
|
|
56
89
|
}
|
|
57
90
|
async getChain() {
|
|
58
|
-
const
|
|
59
|
-
|
|
91
|
+
const value = await this.getJson('/network');
|
|
92
|
+
const network = typeof value === 'string' ? value : this.readExactRecord(value, ['network'], 'network response').network;
|
|
93
|
+
if (typeof network !== 'string' || network.length > 64) {
|
|
94
|
+
throw new Error('ChainTracks upstream returned an invalid network.');
|
|
95
|
+
}
|
|
96
|
+
const actual = this.normalizeChain(network);
|
|
97
|
+
if (actual !== this.chain) {
|
|
98
|
+
throw new Error(`ChainTracks upstream network '${actual}' does not match configured chain '${this.chain}'.`);
|
|
99
|
+
}
|
|
100
|
+
return actual;
|
|
60
101
|
}
|
|
61
102
|
async getInfo() {
|
|
62
103
|
const tip = await this.findChainTipHeader();
|
|
@@ -71,24 +112,60 @@ class GoChaintracksServiceClient {
|
|
|
71
112
|
};
|
|
72
113
|
}
|
|
73
114
|
async getPresentHeight() {
|
|
74
|
-
const
|
|
75
|
-
|
|
115
|
+
const value = await this.getJson('/height');
|
|
116
|
+
const height = typeof value === 'number' ? value : this.readExactRecord(value, ['height'], 'height response').height;
|
|
117
|
+
return this.validateHeight(height, 'upstream height');
|
|
76
118
|
}
|
|
77
119
|
async getHeaders(height, count) {
|
|
78
|
-
|
|
120
|
+
this.validateHeight(height, 'height');
|
|
121
|
+
if (!Number.isSafeInteger(count) || count < 1) {
|
|
122
|
+
throw new Error('count must be a positive safe integer.');
|
|
123
|
+
}
|
|
124
|
+
if (count > Math.floor(this.maxBinaryResponseBytes / 80)) {
|
|
125
|
+
throw new Error('count exceeds the configured binary response limit.');
|
|
126
|
+
}
|
|
127
|
+
const bytes = await this.getBinary(`/headers.bin?height=${height}&count=${count}`, count * 80);
|
|
128
|
+
if (bytes.length % 80 !== 0) {
|
|
129
|
+
throw new Error('ChainTracks upstream returned a non-canonical binary header response.');
|
|
130
|
+
}
|
|
131
|
+
const headers = (0, blockHeaderUtilities_1.deserializeBlockHeaders)(height, bytes);
|
|
132
|
+
for (const [index, header] of headers.entries()) {
|
|
133
|
+
this.validateRemoteHeader(header, `binary header ${index}`);
|
|
134
|
+
if (index > 0 && header.previousHash !== headers[index - 1]?.hash) {
|
|
135
|
+
throw new Error('ChainTracks upstream returned an unlinked binary header response.');
|
|
136
|
+
}
|
|
137
|
+
}
|
|
79
138
|
return (0, utilityHelpers_noBuffer_1.asString)(bytes);
|
|
80
139
|
}
|
|
81
140
|
async findChainTipHeader() {
|
|
82
|
-
return await this.getJson('/tip');
|
|
141
|
+
return this.validateRemoteHeader(await this.getJson('/tip'), 'chain tip');
|
|
83
142
|
}
|
|
84
143
|
async findChainTipHash() {
|
|
85
144
|
return (await this.findChainTipHeader()).hash;
|
|
86
145
|
}
|
|
87
146
|
async findHeaderForHeight(height) {
|
|
88
|
-
|
|
147
|
+
this.validateHeight(height, 'height');
|
|
148
|
+
const value = await this.getJsonOrUndefined(`/header/height/${height}`);
|
|
149
|
+
if (value === undefined)
|
|
150
|
+
return undefined;
|
|
151
|
+
const header = this.validateRemoteHeader(value, 'header-by-height response');
|
|
152
|
+
if (header.height !== height) {
|
|
153
|
+
throw new Error('ChainTracks upstream returned a header for the wrong height.');
|
|
154
|
+
}
|
|
155
|
+
return header;
|
|
89
156
|
}
|
|
90
157
|
async findHeaderForBlockHash(hash) {
|
|
91
|
-
|
|
158
|
+
if (!/^[0-9a-fA-F]{64}$/.test(hash)) {
|
|
159
|
+
throw new Error('hash must be exactly 32 hexadecimal bytes.');
|
|
160
|
+
}
|
|
161
|
+
const value = await this.getJsonOrUndefined(`/header/hash/${hash}`);
|
|
162
|
+
if (value === undefined)
|
|
163
|
+
return undefined;
|
|
164
|
+
const header = this.validateRemoteHeader(value, 'header-by-hash response');
|
|
165
|
+
if (header.hash.toLowerCase() !== hash.toLowerCase()) {
|
|
166
|
+
throw new Error('ChainTracks upstream returned a header for the wrong hash.');
|
|
167
|
+
}
|
|
168
|
+
return header;
|
|
92
169
|
}
|
|
93
170
|
async addHeader(_header) {
|
|
94
171
|
throw new Error('GoChaintracksServiceClient.addHeader is not supported by the remote v2 API.');
|
|
@@ -112,19 +189,52 @@ class GoChaintracksServiceClient {
|
|
|
112
189
|
return await this.isListening();
|
|
113
190
|
}
|
|
114
191
|
async subscribeHeaders(listener) {
|
|
192
|
+
this.validateListener(listener);
|
|
115
193
|
return this.subscribe('header', '/tip/stream', payload => {
|
|
116
|
-
listener(payload);
|
|
194
|
+
listener(this.validateRemoteHeader(payload, 'tip stream event'));
|
|
117
195
|
});
|
|
118
196
|
}
|
|
119
197
|
async subscribeReorgs(listener) {
|
|
198
|
+
this.validateListener(listener);
|
|
120
199
|
return this.subscribe('reorg', '/reorg/stream', payload => {
|
|
121
|
-
const event = payload;
|
|
122
|
-
|
|
123
|
-
|
|
200
|
+
const event = this.readExactRecord(payload, ['depth', 'oldTip', 'newTip', 'deactivatedHeaders'], 'reorg stream event', ['deactivatedHeaders']);
|
|
201
|
+
const depth = event.depth;
|
|
202
|
+
if (!Number.isSafeInteger(depth) || depth < 0 || depth > this.maxReorgHeaders) {
|
|
203
|
+
throw new Error('ChainTracks upstream returned an invalid reorg depth.');
|
|
204
|
+
}
|
|
205
|
+
const oldTip = this.validateRemoteHeader(event.oldTip, 'reorg old tip');
|
|
206
|
+
const newTip = this.validateRemoteHeader(event.newTip, 'reorg new tip');
|
|
207
|
+
let deactivatedHeaders;
|
|
208
|
+
if (event.deactivatedHeaders !== undefined) {
|
|
209
|
+
if (!Array.isArray(event.deactivatedHeaders) || event.deactivatedHeaders.length > this.maxReorgHeaders) {
|
|
210
|
+
throw new Error('ChainTracks upstream returned an invalid deactivated-header list.');
|
|
211
|
+
}
|
|
212
|
+
deactivatedHeaders = event.deactivatedHeaders.map((header, index) => this.validateRemoteHeader(header, `deactivated header ${index}`));
|
|
213
|
+
if (deactivatedHeaders.length > depth) {
|
|
214
|
+
throw new Error('ChainTracks upstream returned more deactivated headers than the reorg depth.');
|
|
215
|
+
}
|
|
216
|
+
if (deactivatedHeaders.length > 0 && deactivatedHeaders[0].hash !== oldTip.hash) {
|
|
217
|
+
throw new Error('ChainTracks upstream returned a deactivated-header list that does not start at the old tip.');
|
|
218
|
+
}
|
|
219
|
+
const seen = new Set();
|
|
220
|
+
for (let index = 0; index < deactivatedHeaders.length; index++) {
|
|
221
|
+
const header = deactivatedHeaders[index];
|
|
222
|
+
if (seen.has(header.hash))
|
|
223
|
+
throw new Error('ChainTracks upstream returned duplicate deactivated headers.');
|
|
224
|
+
seen.add(header.hash);
|
|
225
|
+
const parent = deactivatedHeaders[index + 1];
|
|
226
|
+
if (parent != null && (header.height !== parent.height + 1 || header.previousHash !== parent.hash)) {
|
|
227
|
+
throw new Error('ChainTracks upstream returned an unlinked deactivated-header list.');
|
|
228
|
+
}
|
|
229
|
+
}
|
|
124
230
|
}
|
|
231
|
+
listener(depth, oldTip, newTip, deactivatedHeaders);
|
|
125
232
|
});
|
|
126
233
|
}
|
|
127
234
|
async unsubscribe(subscriptionId) {
|
|
235
|
+
if (typeof subscriptionId !== 'string' || subscriptionId.length === 0 || subscriptionId.length > 128) {
|
|
236
|
+
throw new Error('subscriptionId must be a non-empty bounded string.');
|
|
237
|
+
}
|
|
128
238
|
const sub = this.subscriptions.get(subscriptionId);
|
|
129
239
|
if (sub == null)
|
|
130
240
|
return false;
|
|
@@ -134,6 +244,12 @@ class GoChaintracksServiceClient {
|
|
|
134
244
|
return true;
|
|
135
245
|
}
|
|
136
246
|
async subscribe(type, path, onPayload) {
|
|
247
|
+
if (this.subscriptions.size >= GoChaintracksServiceClient.MAX_SUBSCRIPTIONS) {
|
|
248
|
+
throw new Error('ChainTracks subscription capacity has been reached.');
|
|
249
|
+
}
|
|
250
|
+
if (!Number.isSafeInteger(this.nextSubscriptionId) || this.nextSubscriptionId < 1) {
|
|
251
|
+
throw new Error('ChainTracks subscription id space has been exhausted.');
|
|
252
|
+
}
|
|
137
253
|
const id = `${type}-${this.nextSubscriptionId++}`;
|
|
138
254
|
const abort = new AbortController();
|
|
139
255
|
const done = this.runSseWithReconnect(path, abort.signal, onPayload);
|
|
@@ -192,23 +308,28 @@ class GoChaintracksServiceClient {
|
|
|
192
308
|
try {
|
|
193
309
|
const response = await this.fetcher(this.url(path), {
|
|
194
310
|
headers: { Accept: 'text/event-stream' },
|
|
311
|
+
redirect: 'error',
|
|
195
312
|
signal: controller.signal
|
|
196
313
|
});
|
|
197
314
|
clearTimeout(timeout);
|
|
198
315
|
if (!response.ok) {
|
|
199
|
-
|
|
316
|
+
await response.body?.cancel().catch(() => { });
|
|
317
|
+
throw new Error(`GET ${this.url(path)} failed ${response.status} ${(0, safeDiagnostic_1.safeDiagnostic)(response.statusText, 128)}`);
|
|
200
318
|
}
|
|
201
319
|
if (response.body == null) {
|
|
202
320
|
throw new Error(`GET ${this.url(path)} returned no response body`);
|
|
203
321
|
}
|
|
204
322
|
const reader = response.body.getReader();
|
|
205
|
-
const decoder = new TextDecoder();
|
|
323
|
+
const decoder = new TextDecoder('utf-8', { fatal: true });
|
|
206
324
|
let buffer = '';
|
|
207
325
|
try {
|
|
208
326
|
for (;;) {
|
|
209
|
-
const { done, value } = await reader.
|
|
327
|
+
const { done, value } = await this.readStreamChunk(reader, controller.signal, this.streamIdleTimeoutMsecs);
|
|
210
328
|
if (done)
|
|
211
329
|
break;
|
|
330
|
+
if (value.byteLength > this.maxSseEventBytes) {
|
|
331
|
+
throw new Error('ChainTracks upstream SSE chunk exceeds the configured byte limit.');
|
|
332
|
+
}
|
|
212
333
|
buffer += decoder.decode(value, { stream: true });
|
|
213
334
|
buffer = this.processSseBuffer(buffer, observePayload);
|
|
214
335
|
}
|
|
@@ -216,11 +337,13 @@ class GoChaintracksServiceClient {
|
|
|
216
337
|
this.processSseBuffer(`${buffer}\n\n`, observePayload);
|
|
217
338
|
}
|
|
218
339
|
finally {
|
|
340
|
+
await reader.cancel().catch(() => { });
|
|
219
341
|
reader.releaseLock();
|
|
220
342
|
}
|
|
221
343
|
}
|
|
222
344
|
finally {
|
|
223
345
|
clearTimeout(timeout);
|
|
346
|
+
controller.abort();
|
|
224
347
|
signal.removeEventListener('abort', onAbort);
|
|
225
348
|
}
|
|
226
349
|
return receivedEvent;
|
|
@@ -229,9 +352,12 @@ class GoChaintracksServiceClient {
|
|
|
229
352
|
buffer = buffer.replaceAll('\r\n', '\n');
|
|
230
353
|
for (;;) {
|
|
231
354
|
const boundary = buffer.indexOf('\n\n');
|
|
232
|
-
if (boundary < 0)
|
|
355
|
+
if (boundary < 0) {
|
|
356
|
+
this.assertSseSize(buffer);
|
|
233
357
|
return buffer;
|
|
358
|
+
}
|
|
234
359
|
const eventText = buffer.slice(0, boundary);
|
|
360
|
+
this.assertSseSize(eventText);
|
|
235
361
|
buffer = buffer.slice(boundary + 2);
|
|
236
362
|
const data = eventText
|
|
237
363
|
.split(/\r?\n/)
|
|
@@ -240,12 +366,15 @@ class GoChaintracksServiceClient {
|
|
|
240
366
|
.join('\n');
|
|
241
367
|
if (data === '')
|
|
242
368
|
continue;
|
|
369
|
+
let payload;
|
|
243
370
|
try {
|
|
244
|
-
|
|
371
|
+
payload = JSON.parse(data);
|
|
245
372
|
}
|
|
246
373
|
catch {
|
|
247
374
|
// Ignore malformed events; the next SSE event can still be valid.
|
|
375
|
+
continue;
|
|
248
376
|
}
|
|
377
|
+
onPayload(payload);
|
|
249
378
|
}
|
|
250
379
|
}
|
|
251
380
|
async getJson(path) {
|
|
@@ -255,43 +384,246 @@ class GoChaintracksServiceClient {
|
|
|
255
384
|
return r;
|
|
256
385
|
}
|
|
257
386
|
async getJsonOrUndefined(path) {
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
387
|
+
return await this.consumeWithTimeout(this.url(path), { headers: { Accept: 'application/json' } }, async (response, signal) => {
|
|
388
|
+
if (response.status === 404) {
|
|
389
|
+
await response.body?.cancel().catch(() => { });
|
|
390
|
+
return undefined;
|
|
391
|
+
}
|
|
392
|
+
if (!response.ok) {
|
|
393
|
+
await response.body?.cancel().catch(() => { });
|
|
394
|
+
throw new Error(`GET ${this.url(path)} failed ${response.status} ${response.statusText}`);
|
|
395
|
+
}
|
|
396
|
+
const bytes = await this.readBoundedBody(response, this.maxJsonResponseBytes, signal);
|
|
397
|
+
let value;
|
|
398
|
+
try {
|
|
399
|
+
value = JSON.parse(new TextDecoder('utf-8', { fatal: true }).decode(bytes));
|
|
400
|
+
}
|
|
401
|
+
catch {
|
|
402
|
+
throw new Error(`GET ${this.url(path)} returned invalid JSON.`);
|
|
403
|
+
}
|
|
404
|
+
if (this.isPlainRecord(value) && Object.hasOwn(value, 'status')) {
|
|
405
|
+
const envelope = this.readRecord(value, ['status', 'value', 'code', 'description'], 'legacy ChainTracks envelope');
|
|
406
|
+
if (envelope.status === 'success' && Object.hasOwn(envelope, 'value')) {
|
|
407
|
+
return envelope.value;
|
|
408
|
+
}
|
|
409
|
+
if (envelope.status === 'error') {
|
|
410
|
+
const description = envelope.description;
|
|
411
|
+
if (description !== undefined && (typeof description !== 'string' || description.length > 4096)) {
|
|
412
|
+
throw new Error('ChainTracks upstream returned an invalid error envelope.');
|
|
413
|
+
}
|
|
414
|
+
throw new Error(typeof description === 'string' ? (0, safeDiagnostic_1.safeDiagnostic)(description) : `GET ${this.url(path)} failed`);
|
|
415
|
+
}
|
|
416
|
+
throw new Error('ChainTracks upstream returned an invalid legacy envelope.');
|
|
417
|
+
}
|
|
418
|
+
return value;
|
|
419
|
+
});
|
|
273
420
|
}
|
|
274
|
-
async getBinary(path) {
|
|
275
|
-
const
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
421
|
+
async getBinary(path, expectedMaximum) {
|
|
422
|
+
const maximum = Math.min(this.maxBinaryResponseBytes, expectedMaximum);
|
|
423
|
+
return await this.consumeWithTimeout(this.url(path), { headers: { Accept: 'application/octet-stream' } }, async (response, signal) => {
|
|
424
|
+
if (!response.ok) {
|
|
425
|
+
await response.body?.cancel().catch(() => { });
|
|
426
|
+
throw new Error(`GET ${this.url(path)} failed ${response.status} ${(0, safeDiagnostic_1.safeDiagnostic)(response.statusText, 128)}`);
|
|
427
|
+
}
|
|
428
|
+
return await this.readBoundedBody(response, maximum, signal);
|
|
429
|
+
});
|
|
280
430
|
}
|
|
281
|
-
async
|
|
431
|
+
async consumeWithTimeout(url, init, consume) {
|
|
282
432
|
const controller = new AbortController();
|
|
283
433
|
const timeout = setTimeout(() => controller.abort(), this.requestTimeoutMsecs);
|
|
284
434
|
try {
|
|
285
|
-
|
|
435
|
+
const response = await this.fetcher(url, {
|
|
436
|
+
...init,
|
|
437
|
+
redirect: 'error',
|
|
438
|
+
signal: controller.signal
|
|
439
|
+
});
|
|
440
|
+
return await consume(response, controller.signal);
|
|
286
441
|
}
|
|
287
442
|
finally {
|
|
288
443
|
clearTimeout(timeout);
|
|
444
|
+
controller.abort();
|
|
289
445
|
}
|
|
290
446
|
}
|
|
447
|
+
async readBoundedBody(response, maximum, signal) {
|
|
448
|
+
const contentLength = response.headers.get('content-length');
|
|
449
|
+
if (contentLength != null) {
|
|
450
|
+
if (!/^(0|[1-9]\d*)$/.test(contentLength)) {
|
|
451
|
+
throw new Error('ChainTracks upstream returned an invalid Content-Length.');
|
|
452
|
+
}
|
|
453
|
+
const declared = Number(contentLength);
|
|
454
|
+
if (!Number.isSafeInteger(declared) || declared > maximum) {
|
|
455
|
+
throw new Error('ChainTracks upstream response exceeds the configured byte limit.');
|
|
456
|
+
}
|
|
457
|
+
}
|
|
458
|
+
if (response.body == null)
|
|
459
|
+
return new Uint8Array(0);
|
|
460
|
+
const reader = response.body.getReader();
|
|
461
|
+
const chunks = [];
|
|
462
|
+
let length = 0;
|
|
463
|
+
try {
|
|
464
|
+
for (;;) {
|
|
465
|
+
const { done, value } = await this.readStreamChunk(reader, signal);
|
|
466
|
+
if (done)
|
|
467
|
+
break;
|
|
468
|
+
if (!(value instanceof Uint8Array)) {
|
|
469
|
+
throw new Error('ChainTracks upstream returned a non-byte response body.');
|
|
470
|
+
}
|
|
471
|
+
length += value.byteLength;
|
|
472
|
+
if (!Number.isSafeInteger(length) || length > maximum) {
|
|
473
|
+
throw new Error('ChainTracks upstream response exceeds the configured byte limit.');
|
|
474
|
+
}
|
|
475
|
+
chunks.push(value);
|
|
476
|
+
}
|
|
477
|
+
}
|
|
478
|
+
finally {
|
|
479
|
+
await reader.cancel().catch(() => { });
|
|
480
|
+
reader.releaseLock();
|
|
481
|
+
}
|
|
482
|
+
const result = new Uint8Array(length);
|
|
483
|
+
let offset = 0;
|
|
484
|
+
for (const chunk of chunks) {
|
|
485
|
+
result.set(chunk, offset);
|
|
486
|
+
offset += chunk.byteLength;
|
|
487
|
+
}
|
|
488
|
+
return result;
|
|
489
|
+
}
|
|
490
|
+
async readStreamChunk(reader, signal, idleTimeoutMsecs) {
|
|
491
|
+
if (signal.aborted)
|
|
492
|
+
throw this.abortError();
|
|
493
|
+
return await new Promise((resolve, reject) => {
|
|
494
|
+
let settled = false;
|
|
495
|
+
let timeout;
|
|
496
|
+
const finish = (action, value) => {
|
|
497
|
+
if (settled)
|
|
498
|
+
return;
|
|
499
|
+
settled = true;
|
|
500
|
+
if (timeout != null)
|
|
501
|
+
clearTimeout(timeout);
|
|
502
|
+
signal.removeEventListener('abort', onAbort);
|
|
503
|
+
action(value);
|
|
504
|
+
};
|
|
505
|
+
const onAbort = () => finish(reject, this.abortError());
|
|
506
|
+
signal.addEventListener('abort', onAbort, { once: true });
|
|
507
|
+
if (idleTimeoutMsecs != null) {
|
|
508
|
+
timeout = setTimeout(() => finish(reject, new Error('ChainTracks upstream stream exceeded its idle timeout.')), idleTimeoutMsecs);
|
|
509
|
+
}
|
|
510
|
+
reader.read().then(result => finish(resolve, result), error => finish(reject, error instanceof Error ? error : new Error(String(error))));
|
|
511
|
+
});
|
|
512
|
+
}
|
|
513
|
+
abortError() {
|
|
514
|
+
const error = new Error('ChainTracks upstream request exceeded its deadline.');
|
|
515
|
+
error.name = 'AbortError';
|
|
516
|
+
return error;
|
|
517
|
+
}
|
|
518
|
+
assertSseSize(value) {
|
|
519
|
+
if (new TextEncoder().encode(value).byteLength > this.maxSseEventBytes) {
|
|
520
|
+
throw new Error('ChainTracks upstream SSE event exceeds the configured byte limit.');
|
|
521
|
+
}
|
|
522
|
+
}
|
|
523
|
+
validateHeight(value, name) {
|
|
524
|
+
if (!Number.isSafeInteger(value) || value < 0 || value > 0x7fffffff) {
|
|
525
|
+
throw new Error(`${name} must be an integer between 0 and 2147483647.`);
|
|
526
|
+
}
|
|
527
|
+
return value;
|
|
528
|
+
}
|
|
529
|
+
validateRemoteHeader(value, name) {
|
|
530
|
+
const baseKeys = ['version', 'previousHash', 'merkleRoot', 'time', 'bits', 'nonce', 'height', 'hash'];
|
|
531
|
+
const liveKeys = ['chainWork', 'isChainTip', 'isActive', 'headerId', 'previousHeaderId'];
|
|
532
|
+
const record = this.readExactRecord(value, [...baseKeys, ...liveKeys], name, liveKeys);
|
|
533
|
+
const presentLiveKeys = liveKeys.filter(key => Object.hasOwn(record, key));
|
|
534
|
+
if ((presentLiveKeys.length !== 0 && presentLiveKeys.length !== liveKeys.length) ||
|
|
535
|
+
(record.chainWork !== undefined &&
|
|
536
|
+
(typeof record.chainWork !== 'string' || !/^[0-9a-fA-F]{64}$/.test(record.chainWork))) ||
|
|
537
|
+
(record.isChainTip !== undefined && typeof record.isChainTip !== 'boolean') ||
|
|
538
|
+
(record.isActive !== undefined && typeof record.isActive !== 'boolean') ||
|
|
539
|
+
(record.headerId !== undefined && (!Number.isSafeInteger(record.headerId) || record.headerId < 1)) ||
|
|
540
|
+
(record.previousHeaderId !== undefined &&
|
|
541
|
+
record.previousHeaderId !== null &&
|
|
542
|
+
(!Number.isSafeInteger(record.previousHeaderId) || record.previousHeaderId < 1))) {
|
|
543
|
+
throw new Error(`ChainTracks upstream returned an invalid ${name}.`);
|
|
544
|
+
}
|
|
545
|
+
const header = {
|
|
546
|
+
version: record.version,
|
|
547
|
+
previousHash: record.previousHash,
|
|
548
|
+
merkleRoot: record.merkleRoot,
|
|
549
|
+
time: record.time,
|
|
550
|
+
bits: record.bits,
|
|
551
|
+
nonce: record.nonce,
|
|
552
|
+
height: record.height,
|
|
553
|
+
hash: record.hash
|
|
554
|
+
};
|
|
555
|
+
try {
|
|
556
|
+
(0, blockHeaderUtilities_1.validateHeaderFormat)(header);
|
|
557
|
+
(0, blockHeaderUtilities_1.validateHeaderProofOfWork)(header);
|
|
558
|
+
}
|
|
559
|
+
catch (error) {
|
|
560
|
+
throw new Error(`ChainTracks upstream returned an invalid ${name}: ${(0, safeDiagnostic_1.safeDiagnostic)(error)}`);
|
|
561
|
+
}
|
|
562
|
+
const result = { ...header };
|
|
563
|
+
for (const key of liveKeys) {
|
|
564
|
+
if (record[key] !== undefined)
|
|
565
|
+
result[key] = record[key];
|
|
566
|
+
}
|
|
567
|
+
return result;
|
|
568
|
+
}
|
|
569
|
+
isPlainRecord(value) {
|
|
570
|
+
if (value == null || typeof value !== 'object' || Array.isArray(value))
|
|
571
|
+
return false;
|
|
572
|
+
const prototype = Object.getPrototypeOf(value);
|
|
573
|
+
return prototype === Object.prototype || prototype === null;
|
|
574
|
+
}
|
|
575
|
+
readRecord(value, allowedKeys, name) {
|
|
576
|
+
if (!this.isPlainRecord(value))
|
|
577
|
+
throw new Error(`ChainTracks upstream returned an invalid ${name}.`);
|
|
578
|
+
const descriptors = Object.getOwnPropertyDescriptors(value);
|
|
579
|
+
if (Object.keys(descriptors).some(key => !allowedKeys.includes(key) || descriptors[key]?.get != null || descriptors[key]?.set != null)) {
|
|
580
|
+
throw new Error(`ChainTracks upstream returned an invalid ${name}.`);
|
|
581
|
+
}
|
|
582
|
+
return value;
|
|
583
|
+
}
|
|
584
|
+
readExactRecord(value, allowedKeys, name, optionalKeys = []) {
|
|
585
|
+
const record = this.readRecord(value, allowedKeys, name);
|
|
586
|
+
const requiredKeys = allowedKeys.filter(key => !optionalKeys.includes(key));
|
|
587
|
+
if (!requiredKeys.every(key => Object.hasOwn(record, key))) {
|
|
588
|
+
throw new Error(`ChainTracks upstream returned an invalid ${name}.`);
|
|
589
|
+
}
|
|
590
|
+
return record;
|
|
591
|
+
}
|
|
592
|
+
readPositiveOption(value, fallback, name, maximum) {
|
|
593
|
+
const resolved = value ?? fallback;
|
|
594
|
+
if (!Number.isSafeInteger(resolved) || resolved < 1 || resolved > maximum) {
|
|
595
|
+
throw new Error(`${name} must be an integer between 1 and ${maximum}.`);
|
|
596
|
+
}
|
|
597
|
+
return resolved;
|
|
598
|
+
}
|
|
599
|
+
validateListener(listener) {
|
|
600
|
+
if (typeof listener !== 'function')
|
|
601
|
+
throw new Error('listener must be a function.');
|
|
602
|
+
}
|
|
603
|
+
parseServiceUrl(serviceUrl) {
|
|
604
|
+
let parsed;
|
|
605
|
+
try {
|
|
606
|
+
parsed = new URL(serviceUrl);
|
|
607
|
+
}
|
|
608
|
+
catch {
|
|
609
|
+
throw new Error('serviceUrl must be an absolute HTTP(S) URL.');
|
|
610
|
+
}
|
|
611
|
+
if (!['http:', 'https:'].includes(parsed.protocol) ||
|
|
612
|
+
parsed.username !== '' ||
|
|
613
|
+
parsed.password !== '' ||
|
|
614
|
+
parsed.search !== '' ||
|
|
615
|
+
parsed.hash !== '') {
|
|
616
|
+
throw new Error('serviceUrl must be an HTTP(S) URL without credentials, query, or fragment.');
|
|
617
|
+
}
|
|
618
|
+
return parsed;
|
|
619
|
+
}
|
|
291
620
|
url(path) {
|
|
292
621
|
return `${this.baseUrl}${path}`;
|
|
293
622
|
}
|
|
294
623
|
normalizeChain(network) {
|
|
624
|
+
if (typeof network !== 'string' || network.length > 64 || (0, safeDiagnostic_1.containsControlCharacter)(network)) {
|
|
625
|
+
throw new Error('ChainTracks upstream returned an invalid network.');
|
|
626
|
+
}
|
|
295
627
|
switch (network.trim().toLowerCase()) {
|
|
296
628
|
case 'main':
|
|
297
629
|
case 'mainnet':
|