@bopen-io/wallet-toolbox 2.6.2-brc153.5 → 2.15.0-bopen.1
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 +789 -1
- package/LICENSES/Open-BSV-License-4-wallet-pre-2026.txt +28 -0
- package/README.md +889 -14
- package/THIRD_PARTY_NOTICES.md +35 -0
- package/docs/README.md +44 -31
- package/docs/action-batch-planning.md +80 -37
- package/docs/client.md +11241 -2525
- package/docs/identity-verification.md +218 -0
- package/docs/local-first-chaintracks.md +129 -0
- package/docs/managed-change-liquidity.md +258 -0
- package/docs/managed-change-policy.md +14 -1
- package/docs/monitor.md +411 -85
- package/docs/no-send-expiry.md +167 -0
- package/docs/prepared-beef.md +197 -0
- package/docs/services.md +5163 -2157
- package/docs/setup.md +153 -57
- package/docs/storage.md +5051 -851
- package/docs/sync-transfer.md +144 -0
- package/docs/wab-shamir.md +5 -1
- package/docs/wallet.md +10202 -10670
- package/out/src/CWIStyleWalletManager.d.ts +39 -31
- package/out/src/CWIStyleWalletManager.d.ts.map +1 -1
- package/out/src/CWIStyleWalletManager.js +309 -258
- package/out/src/CWIStyleWalletManager.js.map +1 -1
- package/out/src/Setup.d.ts +24 -0
- package/out/src/Setup.d.ts.map +1 -1
- package/out/src/Setup.js +30 -2
- package/out/src/Setup.js.map +1 -1
- package/out/src/SetupClient.d.ts +3 -0
- package/out/src/SetupClient.d.ts.map +1 -1
- package/out/src/SetupClient.js +1 -0
- package/out/src/SetupClient.js.map +1 -1
- package/out/src/SetupWallet.d.ts +3 -0
- package/out/src/SetupWallet.d.ts.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 +54 -14
- package/out/src/Wallet.d.ts.map +1 -1
- package/out/src/Wallet.js +216 -114
- package/out/src/Wallet.js.map +1 -1
- package/out/src/WalletAuthenticationManager.d.ts +32 -0
- package/out/src/WalletAuthenticationManager.d.ts.map +1 -1
- package/out/src/WalletAuthenticationManager.js +531 -78
- 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 +101 -43
- package/out/src/WalletPermissionsManager.d.ts.map +1 -1
- package/out/src/WalletPermissionsManager.js +897 -414
- 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 +143 -8
- 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/index.client.d.ts +6 -0
- package/out/src/index.client.d.ts.map +1 -1
- package/out/src/index.client.js +16 -1
- package/out/src/index.client.js.map +1 -1
- package/out/src/index.mobile.d.ts +7 -0
- package/out/src/index.mobile.d.ts.map +1 -1
- package/out/src/index.mobile.js +17 -1
- package/out/src/index.mobile.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 +2 -0
- package/out/src/mockchain/MockServices.d.ts.map +1 -1
- package/out/src/mockchain/MockServices.js +54 -14
- package/out/src/mockchain/MockServices.js.map +1 -1
- package/out/src/monitor/Monitor.d.ts +51 -0
- package/out/src/monitor/Monitor.d.ts.map +1 -1
- package/out/src/monitor/Monitor.js +282 -41
- package/out/src/monitor/Monitor.js.map +1 -1
- package/out/src/monitor/MonitorDaemon.d.ts +2 -0
- package/out/src/monitor/MonitorDaemon.d.ts.map +1 -1
- package/out/src/monitor/MonitorDaemon.js +73 -17
- 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 +6 -1
- package/out/src/monitor/tasks/TaskArcSSE.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskArcSSE.js +117 -74
- 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/TaskNoSendExpiry.d.ts +19 -0
- package/out/src/monitor/tasks/TaskNoSendExpiry.d.ts.map +1 -0
- package/out/src/monitor/tasks/TaskNoSendExpiry.js +47 -0
- package/out/src/monitor/tasks/TaskNoSendExpiry.js.map +1 -0
- package/out/src/monitor/tasks/TaskReconcilePendingTransactions.d.ts +27 -0
- package/out/src/monitor/tasks/TaskReconcilePendingTransactions.d.ts.map +1 -0
- package/out/src/monitor/tasks/TaskReconcilePendingTransactions.js +242 -0
- package/out/src/monitor/tasks/TaskReconcilePendingTransactions.js.map +1 -0
- 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 +31 -9
- 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 +33 -6
- package/out/src/monitor/tasks/TaskReviewUtxos.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskReviewUtxos.js +189 -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/monitor/tasks/index.all.d.ts +2 -0
- package/out/src/monitor/tasks/index.all.d.ts.map +1 -1
- package/out/src/monitor/tasks/index.all.js +2 -0
- package/out/src/monitor/tasks/index.all.js.map +1 -1
- package/out/src/sdk/ActionBatch.interfaces.d.ts +23 -0
- package/out/src/sdk/ActionBatch.interfaces.d.ts.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/WERR_errors.d.ts +23 -0
- package/out/src/sdk/WERR_errors.d.ts.map +1 -1
- package/out/src/sdk/WERR_errors.js +51 -7
- package/out/src/sdk/WERR_errors.js.map +1 -1
- package/out/src/sdk/WalletError.d.ts.map +1 -1
- package/out/src/sdk/WalletError.js +7 -21
- package/out/src/sdk/WalletError.js.map +1 -1
- package/out/src/sdk/WalletErrorFromJson.d.ts.map +1 -1
- package/out/src/sdk/WalletErrorFromJson.js +121 -3
- package/out/src/sdk/WalletErrorFromJson.js.map +1 -1
- package/out/src/sdk/WalletServices.interfaces.d.ts +45 -2
- package/out/src/sdk/WalletServices.interfaces.d.ts.map +1 -1
- package/out/src/sdk/WalletStorage.interfaces.d.ts +87 -4
- package/out/src/sdk/WalletStorage.interfaces.d.ts.map +1 -1
- package/out/src/sdk/types.d.ts +3 -2
- package/out/src/sdk/types.d.ts.map +1 -1
- package/out/src/sdk/types.js +3 -2
- package/out/src/sdk/types.js.map +1 -1
- package/out/src/services/ServiceCollection.js +2 -2
- package/out/src/services/ServiceCollection.js.map +1 -1
- package/out/src/services/Services.d.ts +5 -0
- package/out/src/services/Services.d.ts.map +1 -1
- package/out/src/services/Services.js +346 -120
- 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 +269 -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 +122 -0
- package/out/src/services/chaintracker/LocalChainTracker.d.ts.map +1 -0
- package/out/src/services/chaintracker/LocalChainTracker.js +465 -0
- package/out/src/services/chaintracker/LocalChainTracker.js.map +1 -0
- 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/BulkFileDataCacheApi.d.ts +48 -0
- package/out/src/services/chaintracker/chaintracks/Api/BulkFileDataCacheApi.d.ts.map +1 -0
- package/out/src/services/chaintracker/chaintracks/Api/BulkFileDataCacheApi.js +3 -0
- package/out/src/services/chaintracker/chaintracks/Api/BulkFileDataCacheApi.js.map +1 -0
- package/out/src/services/chaintracker/chaintracks/Api/BulkFileDataValidatorApi.d.ts +70 -0
- package/out/src/services/chaintracker/chaintracks/Api/BulkFileDataValidatorApi.d.ts.map +1 -0
- package/out/src/services/chaintracker/chaintracks/Api/BulkFileDataValidatorApi.js +21 -0
- package/out/src/services/chaintracker/chaintracks/Api/BulkFileDataValidatorApi.js.map +1 -0
- 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 +53 -0
- package/out/src/services/chaintracker/chaintracks/Api/ChaintracksClientApi.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Api/ChaintracksFetchApi.d.ts +9 -2
- 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 +28 -3
- package/out/src/services/chaintracker/chaintracks/Chaintracks.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Chaintracks.js +282 -64
- 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 +348 -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 +378 -44
- 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 +230 -28
- 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 +8 -1
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageKnex.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/Storage/ChaintracksStorageKnex.js +248 -87
- 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.d.ts +8 -0
- package/out/src/services/chaintracker/chaintracks/configureChaintracksIngestors.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/configureChaintracksIngestors.js +6 -3
- 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/index.all.d.ts +3 -0
- package/out/src/services/chaintracker/chaintracks/index.all.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/index.all.js +3 -0
- package/out/src/services/chaintracker/chaintracks/index.all.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/index.mobile.d.ts +5 -0
- package/out/src/services/chaintracker/chaintracks/index.mobile.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/index.mobile.js +5 -0
- package/out/src/services/chaintracker/chaintracks/index.mobile.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/BulkFileDataCacheFs.d.ts +51 -0
- package/out/src/services/chaintracker/chaintracks/util/BulkFileDataCacheFs.d.ts.map +1 -0
- package/out/src/services/chaintracker/chaintracks/util/BulkFileDataCacheFs.js +394 -0
- package/out/src/services/chaintracker/chaintracks/util/BulkFileDataCacheFs.js.map +1 -0
- package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.d.ts +45 -1
- package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/BulkFileDataManager.js +733 -166
- 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 +32 -0
- package/out/src/services/chaintracker/chaintracks/util/BulkFileDataValidator.worker.d.ts.map +1 -0
- package/out/src/services/chaintracker/chaintracks/util/BulkFileDataValidator.worker.js +40 -0
- package/out/src/services/chaintracker/chaintracks/util/BulkFileDataValidator.worker.js.map +1 -0
- 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 +3 -1
- 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 +38 -4
- package/out/src/services/chaintracker/chaintracks/util/ChaintracksFetch.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/ChaintracksFetch.js +191 -47
- 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 +48 -0
- package/out/src/services/chaintracker/chaintracks/util/DurableFileBulkFileDownloadBudget.d.ts.map +1 -0
- package/out/src/services/chaintracker/chaintracks/util/DurableFileBulkFileDownloadBudget.js +280 -0
- package/out/src/services/chaintracker/chaintracks/util/DurableFileBulkFileDownloadBudget.js.map +1 -0
- package/out/src/services/chaintracker/chaintracks/util/FixedWindowBulkFileDownloadBudget.d.ts +30 -0
- package/out/src/services/chaintracker/chaintracks/util/FixedWindowBulkFileDownloadBudget.d.ts.map +1 -0
- package/out/src/services/chaintracker/chaintracks/util/FixedWindowBulkFileDownloadBudget.js +57 -0
- package/out/src/services/chaintracker/chaintracks/util/FixedWindowBulkFileDownloadBudget.js.map +1 -0
- 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 +14 -0
- package/out/src/services/chaintracker/chaintracks/util/InlineBulkFileDataValidator.d.ts.map +1 -0
- package/out/src/services/chaintracker/chaintracks/util/InlineBulkFileDataValidator.js +148 -0
- package/out/src/services/chaintracker/chaintracks/util/InlineBulkFileDataValidator.js.map +1 -0
- package/out/src/services/chaintracker/chaintracks/util/NodeBulkFileDataValidator.d.ts +41 -0
- package/out/src/services/chaintracker/chaintracks/util/NodeBulkFileDataValidator.d.ts.map +1 -0
- package/out/src/services/chaintracker/chaintracks/util/NodeBulkFileDataValidator.js +271 -0
- package/out/src/services/chaintracker/chaintracks/util/NodeBulkFileDataValidator.js.map +1 -0
- 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 +17 -4
- package/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.js +362 -105
- 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/chaintracker/index.all.d.ts +1 -0
- package/out/src/services/chaintracker/index.all.d.ts.map +1 -1
- package/out/src/services/chaintracker/index.all.js +1 -0
- package/out/src/services/chaintracker/index.all.js.map +1 -1
- package/out/src/services/chaintracker/index.client.d.ts +1 -0
- package/out/src/services/chaintracker/index.client.d.ts.map +1 -1
- package/out/src/services/chaintracker/index.client.js +1 -0
- package/out/src/services/chaintracker/index.client.js.map +1 -1
- package/out/src/services/chaintracker/index.mobile.d.ts +1 -0
- package/out/src/services/chaintracker/index.mobile.d.ts.map +1 -1
- package/out/src/services/chaintracker/index.mobile.js +1 -0
- package/out/src/services/chaintracker/index.mobile.js.map +1 -1
- package/out/src/services/classifyOutputUtxo.d.ts +25 -0
- package/out/src/services/classifyOutputUtxo.d.ts.map +1 -0
- package/out/src/services/classifyOutputUtxo.js +96 -0
- package/out/src/services/classifyOutputUtxo.js.map +1 -0
- package/out/src/services/createDefaultWalletServicesOptions.d.ts +16 -3
- package/out/src/services/createDefaultWalletServicesOptions.d.ts.map +1 -1
- package/out/src/services/createDefaultWalletServicesOptions.js +38 -8
- package/out/src/services/createDefaultWalletServicesOptions.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 +38 -23
- package/out/src/services/providers/ArcSSEClient.d.ts.map +1 -1
- package/out/src/services/providers/ArcSSEClient.js +384 -63
- package/out/src/services/providers/ArcSSEClient.js.map +1 -1
- package/out/src/services/providers/Arcade.d.ts +11 -1
- package/out/src/services/providers/Arcade.d.ts.map +1 -1
- package/out/src/services/providers/Arcade.js +111 -33
- 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/arcadeStatus.d.ts +18 -0
- package/out/src/services/providers/arcadeStatus.d.ts.map +1 -0
- package/out/src/services/providers/arcadeStatus.js +56 -0
- package/out/src/services/providers/arcadeStatus.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 +29 -6
- package/out/src/signer/actionBatch/ActionBatchPlanner.js.map +1 -1
- package/out/src/signer/actionBatch/ActionBatchWorkspace.d.ts +8 -5
- package/out/src/signer/actionBatch/ActionBatchWorkspace.d.ts.map +1 -1
- package/out/src/signer/actionBatch/ActionBatchWorkspace.js +186 -73
- 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 +3 -1
- package/out/src/signer/methods/createAction.js.map +1 -1
- package/out/src/signer/methods/createNoSendExpiryAction.d.ts +7 -0
- package/out/src/signer/methods/createNoSendExpiryAction.d.ts.map +1 -0
- package/out/src/signer/methods/createNoSendExpiryAction.js +254 -0
- package/out/src/signer/methods/createNoSendExpiryAction.js.map +1 -0
- package/out/src/signer/methods/internalizeAction.d.ts.map +1 -1
- package/out/src/signer/methods/internalizeAction.js +9 -5
- 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 +12 -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 +11 -3
- package/out/src/storage/StorageIdb.d.ts.map +1 -1
- package/out/src/storage/StorageIdb.js +134 -44
- package/out/src/storage/StorageIdb.js.map +1 -1
- package/out/src/storage/StorageKnex.d.ts +71 -7
- package/out/src/storage/StorageKnex.d.ts.map +1 -1
- package/out/src/storage/StorageKnex.js +616 -262
- package/out/src/storage/StorageKnex.js.map +1 -1
- package/out/src/storage/StorageProvider.d.ts +41 -10
- package/out/src/storage/StorageProvider.d.ts.map +1 -1
- package/out/src/storage/StorageProvider.js +397 -107
- package/out/src/storage/StorageProvider.js.map +1 -1
- package/out/src/storage/StorageReader.d.ts +9 -3
- package/out/src/storage/StorageReader.d.ts.map +1 -1
- package/out/src/storage/StorageReader.js +21 -43
- package/out/src/storage/StorageReader.js.map +1 -1
- package/out/src/storage/StorageReaderWriter.d.ts +4 -0
- package/out/src/storage/StorageReaderWriter.d.ts.map +1 -1
- package/out/src/storage/StorageReaderWriter.js +68 -38
- 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 +31 -6
- package/out/src/storage/WalletStorageManager.d.ts.map +1 -1
- package/out/src/storage/WalletStorageManager.js +166 -75
- package/out/src/storage/WalletStorageManager.js.map +1 -1
- package/out/src/storage/adminServer/adminServer.d.ts +3 -1
- package/out/src/storage/adminServer/adminServer.d.ts.map +1 -1
- package/out/src/storage/adminServer/adminServer.js +41 -90
- package/out/src/storage/adminServer/adminServer.js.map +1 -1
- package/out/src/storage/adminServer/adminUi.d.ts.map +1 -1
- package/out/src/storage/adminServer/adminUi.js +32 -9
- package/out/src/storage/adminServer/adminUi.js.map +1 -1
- package/out/src/storage/adminServer/reqReviewQuery.d.ts +41 -0
- package/out/src/storage/adminServer/reqReviewQuery.d.ts.map +1 -0
- package/out/src/storage/adminServer/reqReviewQuery.js +67 -0
- package/out/src/storage/adminServer/reqReviewQuery.js.map +1 -0
- package/out/src/storage/adminServer/reviewUtxos.d.ts +27 -0
- package/out/src/storage/adminServer/reviewUtxos.d.ts.map +1 -0
- package/out/src/storage/adminServer/reviewUtxos.js +62 -0
- package/out/src/storage/adminServer/reviewUtxos.js.map +1 -0
- package/out/src/storage/idbHelpers.d.ts.map +1 -1
- package/out/src/storage/idbHelpers.js +14 -2
- package/out/src/storage/idbHelpers.js.map +1 -1
- package/out/src/storage/index.all.d.ts +4 -0
- package/out/src/storage/index.all.d.ts.map +1 -1
- package/out/src/storage/index.all.js +4 -0
- package/out/src/storage/index.all.js.map +1 -1
- package/out/src/storage/index.client.d.ts +1 -0
- package/out/src/storage/index.client.d.ts.map +1 -1
- package/out/src/storage/index.client.js +1 -0
- package/out/src/storage/index.client.js.map +1 -1
- package/out/src/storage/index.mobile.d.ts +1 -0
- package/out/src/storage/index.mobile.d.ts.map +1 -1
- package/out/src/storage/index.mobile.js +1 -0
- package/out/src/storage/index.mobile.js.map +1 -1
- package/out/src/storage/knexPostgres.d.ts +16 -0
- package/out/src/storage/knexPostgres.d.ts.map +1 -0
- package/out/src/storage/knexPostgres.js +34 -0
- package/out/src/storage/knexPostgres.js.map +1 -0
- 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 +5 -44
- package/out/src/storage/methods/ListOutputsSpecOp.js.map +1 -1
- package/out/src/storage/methods/actionBatch.d.ts +9 -2
- package/out/src/storage/methods/actionBatch.d.ts.map +1 -1
- package/out/src/storage/methods/actionBatch.js +260 -67
- 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 +47 -26
- 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 +59 -110
- package/out/src/storage/methods/attemptToPostReqsToNetwork.js.map +1 -1
- package/out/src/storage/methods/availableManagedChange.d.ts +8 -1
- package/out/src/storage/methods/availableManagedChange.d.ts.map +1 -1
- package/out/src/storage/methods/availableManagedChange.js.map +1 -1
- package/out/src/storage/methods/createAction.d.ts +60 -3
- package/out/src/storage/methods/createAction.d.ts.map +1 -1
- package/out/src/storage/methods/createAction.js +390 -105
- package/out/src/storage/methods/createAction.js.map +1 -1
- package/out/src/storage/methods/generateChange.d.ts +15 -5
- package/out/src/storage/methods/generateChange.d.ts.map +1 -1
- package/out/src/storage/methods/generateChange.js +187 -27
- 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/getSyncChunk.d.ts.map +1 -1
- package/out/src/storage/methods/getSyncChunk.js +42 -11
- package/out/src/storage/methods/getSyncChunk.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 +171 -133
- 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 +21 -11
- 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 +25 -18
- 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 +31 -30
- package/out/src/storage/methods/listOutputsKnex.js.map +1 -1
- package/out/src/storage/methods/managedChangePolicy.d.ts +44 -0
- package/out/src/storage/methods/managedChangePolicy.d.ts.map +1 -0
- package/out/src/storage/methods/managedChangePolicy.js +58 -0
- package/out/src/storage/methods/managedChangePolicy.js.map +1 -0
- package/out/src/storage/methods/maxPossibleSatoshis.d.ts +13 -0
- package/out/src/storage/methods/maxPossibleSatoshis.d.ts.map +1 -0
- package/out/src/storage/methods/maxPossibleSatoshis.js +16 -0
- package/out/src/storage/methods/maxPossibleSatoshis.js.map +1 -0
- package/out/src/storage/methods/noSendExpiry.d.ts +11 -0
- package/out/src/storage/methods/noSendExpiry.d.ts.map +1 -0
- package/out/src/storage/methods/noSendExpiry.js +359 -0
- package/out/src/storage/methods/noSendExpiry.js.map +1 -0
- package/out/src/storage/methods/noSendExpiryLifecycle.d.ts +14 -0
- package/out/src/storage/methods/noSendExpiryLifecycle.d.ts.map +1 -0
- package/out/src/storage/methods/noSendExpiryLifecycle.js +691 -0
- package/out/src/storage/methods/noSendExpiryLifecycle.js.map +1 -0
- package/out/src/storage/methods/preparedBeef.d.ts +104 -0
- package/out/src/storage/methods/preparedBeef.d.ts.map +1 -0
- package/out/src/storage/methods/preparedBeef.js +524 -0
- package/out/src/storage/methods/preparedBeef.js.map +1 -0
- package/out/src/storage/methods/processAction.d.ts.map +1 -1
- package/out/src/storage/methods/processAction.js +144 -32
- package/out/src/storage/methods/processAction.js.map +1 -1
- package/out/src/storage/methods/purgeData.d.ts.map +1 -1
- package/out/src/storage/methods/purgeData.js +18 -3
- package/out/src/storage/methods/purgeData.js.map +1 -1
- package/out/src/storage/methods/reconcileFailedTransactionInputs.d.ts +32 -0
- package/out/src/storage/methods/reconcileFailedTransactionInputs.d.ts.map +1 -0
- package/out/src/storage/methods/reconcileFailedTransactionInputs.js +142 -0
- package/out/src/storage/methods/reconcileFailedTransactionInputs.js.map +1 -0
- package/out/src/storage/methods/reviewStatus.js +4 -4
- package/out/src/storage/methods/reviewStatus.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 +38 -0
- package/out/src/storage/methods/reviewUtxoOutputs.d.ts.map +1 -0
- package/out/src/storage/methods/reviewUtxoOutputs.js +197 -0
- package/out/src/storage/methods/reviewUtxoOutputs.js.map +1 -0
- package/out/src/storage/methods/validateSyncProof.d.ts +32 -0
- package/out/src/storage/methods/validateSyncProof.d.ts.map +1 -0
- package/out/src/storage/methods/validateSyncProof.js +139 -0
- package/out/src/storage/methods/validateSyncProof.js.map +1 -0
- package/out/src/storage/portable/index.d.ts.map +1 -1
- package/out/src/storage/portable/index.js +63 -27
- 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 +94 -8
- package/out/src/storage/remoting/BinaryJson.js.map +1 -1
- package/out/src/storage/remoting/KnexPaymentReplayStore.d.ts.map +1 -1
- package/out/src/storage/remoting/KnexPaymentReplayStore.js +1 -0
- package/out/src/storage/remoting/KnexPaymentReplayStore.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 +221 -40
- package/out/src/storage/remoting/KnexSessionManager.js.map +1 -1
- package/out/src/storage/remoting/KnexSyncTransferStore.d.ts +26 -0
- package/out/src/storage/remoting/KnexSyncTransferStore.d.ts.map +1 -0
- package/out/src/storage/remoting/KnexSyncTransferStore.js +222 -0
- package/out/src/storage/remoting/KnexSyncTransferStore.js.map +1 -0
- 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 +65 -8
- package/out/src/storage/remoting/StorageClient.js.map +1 -1
- package/out/src/storage/remoting/StorageClientBase.d.ts +57 -10
- package/out/src/storage/remoting/StorageClientBase.d.ts.map +1 -1
- package/out/src/storage/remoting/StorageClientBase.js +372 -9
- 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 +13 -11
- package/out/src/storage/remoting/StorageMobile.js.map +1 -1
- package/out/src/storage/remoting/StorageServer.d.ts +27 -5
- package/out/src/storage/remoting/StorageServer.d.ts.map +1 -1
- package/out/src/storage/remoting/StorageServer.js +243 -33
- package/out/src/storage/remoting/StorageServer.js.map +1 -1
- package/out/src/storage/remoting/SyncTransfer.d.ts +29 -0
- package/out/src/storage/remoting/SyncTransfer.d.ts.map +1 -0
- package/out/src/storage/remoting/SyncTransfer.js +153 -0
- package/out/src/storage/remoting/SyncTransfer.js.map +1 -0
- package/out/src/storage/remoting/entityValidationHelpers.d.ts.map +1 -1
- package/out/src/storage/remoting/entityValidationHelpers.js +35 -0
- package/out/src/storage/remoting/entityValidationHelpers.js.map +1 -1
- package/out/src/storage/remoting/syncChunkBinary.d.ts +4 -0
- package/out/src/storage/remoting/syncChunkBinary.d.ts.map +1 -0
- package/out/src/storage/remoting/syncChunkBinary.js +38 -0
- package/out/src/storage/remoting/syncChunkBinary.js.map +1 -0
- package/out/src/storage/remoting/validateRpcSyncProofs.d.ts +5 -0
- package/out/src/storage/remoting/validateRpcSyncProofs.d.ts.map +1 -0
- package/out/src/storage/remoting/validateRpcSyncProofs.js +82 -0
- package/out/src/storage/remoting/validateRpcSyncProofs.js.map +1 -0
- package/out/src/storage/schema/KnexMigrations.d.ts +13 -2
- package/out/src/storage/schema/KnexMigrations.d.ts.map +1 -1
- package/out/src/storage/schema/KnexMigrations.js +334 -43
- package/out/src/storage/schema/KnexMigrations.js.map +1 -1
- package/out/src/storage/schema/StorageIdbSchema.d.ts +3 -0
- package/out/src/storage/schema/StorageIdbSchema.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntityOutput.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntityOutput.js +24 -4
- package/out/src/storage/schema/entities/EntityOutput.js.map +1 -1
- package/out/src/storage/schema/entities/EntityOutputBasket.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntityOutputBasket.js +5 -2
- package/out/src/storage/schema/entities/EntityOutputBasket.js.map +1 -1
- package/out/src/storage/schema/entities/EntityProvenTx.d.ts +4 -1
- package/out/src/storage/schema/entities/EntityProvenTx.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntityProvenTx.js +125 -41
- 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.d.ts +4 -2
- package/out/src/storage/schema/entities/EntitySyncState.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntitySyncState.js +12 -6
- package/out/src/storage/schema/entities/EntitySyncState.js.map +1 -1
- package/out/src/storage/schema/entities/EntityTransaction.d.ts +26 -0
- package/out/src/storage/schema/entities/EntityTransaction.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntityTransaction.js +221 -21
- package/out/src/storage/schema/entities/EntityTransaction.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/TablePreparedBeef.interfaces.d.ts +23 -0
- package/out/src/storage/schema/tables/TablePreparedBeef.interfaces.d.ts.map +1 -0
- package/out/src/storage/schema/tables/TablePreparedBeef.interfaces.js +3 -0
- package/out/src/storage/schema/tables/TablePreparedBeef.interfaces.js.map +1 -0
- 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 +2 -2
- 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 +17 -1
- package/out/src/storage/schema/tables/TableTransaction.d.ts.map +1 -1
- package/out/src/storage/schema/tables/TableTransaction.js +14 -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/storage/sync/SyncPageBudget.d.ts +8 -0
- package/out/src/storage/sync/SyncPageBudget.d.ts.map +1 -0
- package/out/src/storage/sync/SyncPageBudget.js +24 -0
- package/out/src/storage/sync/SyncPageBudget.js.map +1 -0
- package/out/src/storage/sync/syncCheckpoint.d.ts +4 -0
- package/out/src/storage/sync/syncCheckpoint.d.ts.map +1 -0
- package/out/src/storage/sync/syncCheckpoint.js +49 -0
- package/out/src/storage/sync/syncCheckpoint.js.map +1 -0
- package/out/src/utility/Argon2idBackend.d.ts +36 -0
- package/out/src/utility/Argon2idBackend.d.ts.map +1 -0
- package/out/src/utility/Argon2idBackend.js +60 -0
- package/out/src/utility/Argon2idBackend.js.map +1 -0
- 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/beefForTxids.d.ts +12 -3
- package/out/src/utility/beefForTxids.d.ts.map +1 -1
- package/out/src/utility/beefForTxids.js +69 -21
- package/out/src/utility/beefForTxids.js.map +1 -1
- package/out/src/utility/brc153ReferenceLabels.d.ts +16 -0
- package/out/src/utility/brc153ReferenceLabels.d.ts.map +1 -1
- package/out/src/utility/brc153ReferenceLabels.js +20 -5
- package/out/src/utility/brc153ReferenceLabels.js.map +1 -1
- package/out/src/utility/brc177NoSendExpiry.d.ts +34 -0
- package/out/src/utility/brc177NoSendExpiry.d.ts.map +1 -0
- package/out/src/utility/brc177NoSendExpiry.js +81 -0
- package/out/src/utility/brc177NoSendExpiry.js.map +1 -0
- package/out/src/utility/canonicalizeAtomicBeef.d.ts +12 -0
- package/out/src/utility/canonicalizeAtomicBeef.d.ts.map +1 -0
- package/out/src/utility/canonicalizeAtomicBeef.js +23 -0
- package/out/src/utility/canonicalizeAtomicBeef.js.map +1 -0
- package/out/src/utility/exactActionSpend.d.ts +9 -0
- package/out/src/utility/exactActionSpend.d.ts.map +1 -0
- package/out/src/utility/exactActionSpend.js +26 -0
- package/out/src/utility/exactActionSpend.js.map +1 -0
- package/out/src/utility/hashWasm.d.ts +1 -1
- package/out/src/utility/hashWasm.d.ts.map +1 -1
- package/out/src/utility/hashWasm.js +83 -1
- package/out/src/utility/hashWasm.js.map +1 -1
- 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 +523 -61
- package/out/src/utility/identityUtils.js.map +1 -1
- package/out/src/utility/index.all.d.ts +2 -0
- package/out/src/utility/index.all.d.ts.map +1 -1
- package/out/src/utility/index.all.js +2 -0
- package/out/src/utility/index.all.js.map +1 -1
- package/out/src/utility/index.client.d.ts +2 -0
- package/out/src/utility/index.client.d.ts.map +1 -1
- package/out/src/utility/index.client.js +2 -0
- package/out/src/utility/index.client.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 +1 -1
- package/out/src/utility/utilityHelpers.d.ts.map +1 -1
- package/out/src/utility/utilityHelpers.js +10 -7
- 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 +4 -17
- package/out/src/wab-client/WABClient.d.ts.map +1 -1
- package/out/src/wab-client/WABClient.js +35 -12
- 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/WABTransport.d.ts +17 -23
- package/out/src/wab-client/WABTransport.d.ts.map +1 -1
- package/out/src/wab-client/WABTransport.js +130 -142
- package/out/src/wab-client/WABTransport.js.map +1 -1
- package/out/src/wab-client/auth-method-interactors/AuthMethodInteractor.d.ts +8 -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 +35 -30
- package/docs/open-rpc/index.html +0 -46
|
@@ -11,12 +11,18 @@ const reviewStatus_1 = require("./methods/reviewStatus");
|
|
|
11
11
|
const WERR_errors_1 = require("../sdk/WERR_errors");
|
|
12
12
|
const utilityHelpers_1 = require("../utility/utilityHelpers");
|
|
13
13
|
const managedChange_1 = require("./methods/managedChange");
|
|
14
|
+
const preparedBeef_1 = require("./methods/preparedBeef");
|
|
15
|
+
const knexPostgres_1 = require("./knexPostgres");
|
|
14
16
|
// Keep bulk statements below conservative SQLite/MySQL bind-parameter
|
|
15
17
|
// ceilings. The surrounding transaction still makes a complete pack atomic.
|
|
16
18
|
const ACTION_BATCH_BLOB_SQL_CHUNK = 500;
|
|
17
19
|
const OUTPUT_INSERT_SQL_CHUNK = 500;
|
|
18
20
|
class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
19
21
|
knex;
|
|
22
|
+
preparedBeefPolicy;
|
|
23
|
+
preparedBeefCoordinator;
|
|
24
|
+
preparedBeefReadSuspensions = new Set();
|
|
25
|
+
nextPreparedBeefReadSuspension = 0;
|
|
20
26
|
querySpans = new Map();
|
|
21
27
|
onQuery = (query) => {
|
|
22
28
|
if (!this.telemetry.enabled || query.__knexQueryUid == null)
|
|
@@ -42,6 +48,9 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
42
48
|
if (options.knex == null)
|
|
43
49
|
throw new WERR_errors_1.WERR_INVALID_PARAMETER('options.knex', 'valid');
|
|
44
50
|
this.knex = options.knex;
|
|
51
|
+
(0, knexPostgres_1.usePostgresInt8Numbers)(this.knex);
|
|
52
|
+
this.preparedBeefPolicy = (0, preparedBeef_1.validatePreparedBeefPolicy)(options.preparedBeef);
|
|
53
|
+
this.preparedBeefCoordinator = new preparedBeef_1.PreparedBeefCoordinator(this);
|
|
45
54
|
if (this.telemetry.enabled) {
|
|
46
55
|
this.knex.on('query', this.onQuery);
|
|
47
56
|
this.knex.on('query-response', this.onQueryResponse);
|
|
@@ -67,10 +76,26 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
67
76
|
this.querySpans.delete(query.__knexQueryUid);
|
|
68
77
|
span.end(error == null ? {} : { status: 'error', error });
|
|
69
78
|
}
|
|
70
|
-
supportsActionBatchPersistence() {
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
79
|
+
supportsActionBatchPersistence() {
|
|
80
|
+
return true;
|
|
81
|
+
}
|
|
82
|
+
supportsNoSendExpiryPersistence() {
|
|
83
|
+
return true;
|
|
84
|
+
}
|
|
85
|
+
requiresActionBatchCleanupBeforeCreateAction() {
|
|
86
|
+
return false;
|
|
87
|
+
}
|
|
88
|
+
async makeAvailable() {
|
|
89
|
+
const settings = await super.makeAvailable();
|
|
90
|
+
this.startPreparedBeefBackfill();
|
|
91
|
+
return settings;
|
|
92
|
+
}
|
|
93
|
+
setServices(services) {
|
|
94
|
+
super.setServices(services);
|
|
95
|
+
this.startPreparedBeefBackfill();
|
|
96
|
+
}
|
|
97
|
+
async readSettings(trx) {
|
|
98
|
+
return this.validateEntity((0, utilityHelpers_1.verifyOne)(await this.toDb(trx)('settings')));
|
|
74
99
|
}
|
|
75
100
|
async getProvenOrRawTx(txid, trx) {
|
|
76
101
|
const k = this.toDb(trx);
|
|
@@ -87,7 +112,7 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
87
112
|
.select('rawTx', 'inputBEEF'));
|
|
88
113
|
if (reqRawTx != null) {
|
|
89
114
|
r.rawTx = Array.from(reqRawTx.rawTx);
|
|
90
|
-
r.inputBEEF = Array.from(reqRawTx.inputBEEF);
|
|
115
|
+
r.inputBEEF = reqRawTx.inputBEEF == null ? undefined : Array.from(reqRawTx.inputBEEF);
|
|
91
116
|
}
|
|
92
117
|
}
|
|
93
118
|
return r;
|
|
@@ -124,33 +149,234 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
124
149
|
}
|
|
125
150
|
return results;
|
|
126
151
|
}
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
152
|
+
async findPreparedBeefs(userId, rootTxids, trx) {
|
|
153
|
+
const unique = [...new Set(rootTxids)];
|
|
154
|
+
if (unique.length === 0)
|
|
155
|
+
return [];
|
|
156
|
+
let query = this.toDb(trx)('prepared_beefs')
|
|
157
|
+
.where({ userId, state: 'ready', formatVersion: preparedBeef_1.PREPARED_BEEF_FORMAT_VERSION })
|
|
158
|
+
.whereIn('rootTxid', unique);
|
|
159
|
+
// Enforce the per-row byte limit in SQL so a corrupt metadata value cannot
|
|
160
|
+
// make Knex transfer an oversized blob before JavaScript validates it.
|
|
161
|
+
query = query.whereRaw('length(??) <= ?', ['beef', this.preparedBeefPolicy.maxArtifactBytes]);
|
|
162
|
+
const rows = await query;
|
|
163
|
+
return this.validateEntities(rows);
|
|
164
|
+
}
|
|
165
|
+
/**
|
|
166
|
+
* Metadata-only foreground preflight for fragmented actions. SQL computes
|
|
167
|
+
* the actual blob lengths; BEEF bytes are not transferred to the process.
|
|
168
|
+
*/
|
|
169
|
+
async readPreparedBeefLookupByteLength(userId, rootTxids) {
|
|
170
|
+
const unique = [...new Set(rootTxids)];
|
|
171
|
+
if (unique.length === 0)
|
|
172
|
+
return 0;
|
|
173
|
+
const row = (await this.knex('prepared_beefs')
|
|
174
|
+
.where({ userId, state: 'ready', formatVersion: preparedBeef_1.PREPARED_BEEF_FORMAT_VERSION })
|
|
175
|
+
.whereIn('rootTxid', unique)
|
|
176
|
+
.first({ byteLength: this.knex.raw('coalesce(sum(length(??)), 0)', ['beef']) }));
|
|
177
|
+
return Number(row?.byteLength ?? 0);
|
|
178
|
+
}
|
|
179
|
+
async readPreparedBeefProofEpoch(trx) {
|
|
180
|
+
const row = await this.toDb(trx)('prepared_beef_metadata')
|
|
181
|
+
.where({ preparedBeefMetadataId: 1 })
|
|
182
|
+
.first('proofEpoch');
|
|
183
|
+
if (row == null || !Number.isSafeInteger(Number(row.proofEpoch))) {
|
|
184
|
+
throw new WERR_errors_1.WERR_INTERNAL('prepared BEEF proof epoch is unavailable');
|
|
185
|
+
}
|
|
186
|
+
return Number(row.proofEpoch);
|
|
187
|
+
}
|
|
188
|
+
/**
|
|
189
|
+
* Cheap worker preflight. It prevents a large tenant-controlled no-send BEEF
|
|
190
|
+
* from being loaded and parsed merely to discover that COOK will reject it.
|
|
191
|
+
*/
|
|
192
|
+
async readPreparedBeefSourceByteLength(rootTxid) {
|
|
193
|
+
const byteLength = (...columns) => this.knex.raw(columns.map(() => 'coalesce(length(??), 0)').join(' + '), columns);
|
|
194
|
+
const proven = (await this.knex('proven_txs')
|
|
195
|
+
.where({ txid: rootTxid })
|
|
196
|
+
.first({ byteLength: byteLength('rawTx', 'merklePath') }));
|
|
197
|
+
if (proven != null)
|
|
198
|
+
return Number(proven.byteLength);
|
|
199
|
+
const request = (await this.knex('proven_tx_reqs')
|
|
200
|
+
.where({ txid: rootTxid })
|
|
201
|
+
.whereIn('status', ['unsent', 'unmined', 'unconfirmed', 'sending', 'nosend', 'completed'])
|
|
202
|
+
.first({ byteLength: byteLength('rawTx', 'inputBEEF') }));
|
|
203
|
+
return request == null ? undefined : Number(request.byteLength);
|
|
204
|
+
}
|
|
205
|
+
async upsertPreparedBeef(artifact, expectedProofEpoch) {
|
|
206
|
+
return await this.transaction(async (trx) => {
|
|
207
|
+
let epochQuery = this.toDb(trx)('prepared_beef_metadata').where({
|
|
208
|
+
preparedBeefMetadataId: 1
|
|
209
|
+
});
|
|
210
|
+
// Serialize a worker commit with proof invalidation across MySQL and
|
|
211
|
+
// Postgres server processes. SQLite serializes the subsequent write transaction.
|
|
212
|
+
if (this.dbtype === 'MySQL' || this.dbtype === 'Postgres')
|
|
213
|
+
epochQuery = epochQuery.forUpdate();
|
|
214
|
+
const metadata = await epochQuery.first('proofEpoch');
|
|
215
|
+
if (metadata == null || Number(metadata.proofEpoch) !== expectedProofEpoch)
|
|
216
|
+
return false;
|
|
217
|
+
const row = await this.validateEntityForInsert(artifact, trx);
|
|
218
|
+
if (row.preparedBeefId === 0)
|
|
219
|
+
delete row.preparedBeefId;
|
|
220
|
+
const update = {
|
|
221
|
+
beef: row.beef,
|
|
222
|
+
checksum: row.checksum,
|
|
223
|
+
formatVersion: row.formatVersion,
|
|
224
|
+
state: row.state,
|
|
225
|
+
txCount: row.txCount,
|
|
226
|
+
bumpCount: row.bumpCount,
|
|
227
|
+
byteLength: row.byteLength,
|
|
228
|
+
updated_at: row.updated_at
|
|
229
|
+
};
|
|
230
|
+
await this.toDb(trx)('prepared_beefs')
|
|
231
|
+
.insert(row)
|
|
232
|
+
.onConflict(['userId', 'rootTxid'])
|
|
233
|
+
.merge(update);
|
|
234
|
+
return true;
|
|
235
|
+
});
|
|
236
|
+
}
|
|
237
|
+
async findPreparedBeefBackfillRoots(limit, formatVersion) {
|
|
238
|
+
const rows = (await this.knex('outputs as o')
|
|
239
|
+
.join('transactions as t', function () {
|
|
240
|
+
this.on('t.transactionId', '=', 'o.transactionId').andOn('t.userId', '=', 'o.userId');
|
|
241
|
+
})
|
|
242
|
+
.leftJoin('prepared_beefs as pb', function () {
|
|
243
|
+
this.on('pb.userId', '=', 'o.userId')
|
|
244
|
+
.andOn('pb.rootTxid', '=', 'o.txid')
|
|
245
|
+
.andOnVal('pb.formatVersion', '=', formatVersion);
|
|
246
|
+
})
|
|
247
|
+
.where('o.spendable', true)
|
|
248
|
+
.whereNull('o.spentBy')
|
|
249
|
+
.where('o.change', true)
|
|
250
|
+
.where('o.providedBy', 'storage')
|
|
251
|
+
.where('o.purpose', 'change')
|
|
252
|
+
.where('o.type', 'P2PKH')
|
|
253
|
+
.whereNotNull('o.derivationPrefix')
|
|
254
|
+
.whereNotNull('o.derivationSuffix')
|
|
255
|
+
.whereNotNull('o.txid')
|
|
256
|
+
// Backfill only settled roots. Pending roots receive one organic
|
|
257
|
+
// processAction attempt and can be retried after a canonical read; a
|
|
258
|
+
// perpetual backfill loop must not poll an unconfirmed ancestry chain.
|
|
259
|
+
.where('t.status', 'completed')
|
|
260
|
+
.whereNotNull('t.provenTxId')
|
|
261
|
+
.whereNull('pb.preparedBeefId')
|
|
262
|
+
.select('o.userId', 'o.txid as rootTxid')
|
|
263
|
+
.groupBy('o.userId', 'o.txid')
|
|
264
|
+
.orderByRaw('MIN(??)', ['o.outputId'])
|
|
265
|
+
.limit(limit));
|
|
266
|
+
return rows;
|
|
267
|
+
}
|
|
268
|
+
async invalidatePreparedBeefs(trx) {
|
|
269
|
+
if (trx == null) {
|
|
270
|
+
return await this.transaction(async (transaction) => await this.invalidatePreparedBeefs(transaction));
|
|
271
|
+
}
|
|
272
|
+
const metadataUpdates = await this.toDb(trx)('prepared_beef_metadata')
|
|
273
|
+
.where({ preparedBeefMetadataId: 1 })
|
|
274
|
+
.increment('proofEpoch', 1);
|
|
275
|
+
if (metadataUpdates !== 1)
|
|
276
|
+
throw new WERR_errors_1.WERR_INTERNAL('prepared BEEF proof epoch update failed');
|
|
277
|
+
return await this.toDb(trx)('prepared_beefs')
|
|
278
|
+
.where({ state: 'ready' })
|
|
279
|
+
.update(this.validatePartialForUpdate({
|
|
280
|
+
state: 'stale',
|
|
281
|
+
// A later backfill pass must not mistake an invalidated current-format
|
|
282
|
+
// row for a completed artifact.
|
|
283
|
+
formatVersion: 0
|
|
284
|
+
}));
|
|
131
285
|
}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
return rs[0];
|
|
135
|
-
return rs;
|
|
286
|
+
async lookupPreparedBeefs(userId, rootTxids, parent) {
|
|
287
|
+
return await (0, preparedBeef_1.lookupPreparedBeefs)(this, userId, rootTxids, parent);
|
|
136
288
|
}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
289
|
+
preparedBeefReadsEnabled() {
|
|
290
|
+
return this.preparedBeefPolicy.readEnabled && this.preparedBeefReadSuspensions.size === 0;
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Synchronously close the local prepared-read gate before asynchronous reorg
|
|
294
|
+
* invalidation waits for manager/database locks. The returned release is
|
|
295
|
+
* idempotent; callers release it only after invalidation commits.
|
|
296
|
+
*/
|
|
297
|
+
suspendPreparedBeefReads() {
|
|
298
|
+
const suspension = ++this.nextPreparedBeefReadSuspension;
|
|
299
|
+
this.preparedBeefReadSuspensions.add(suspension);
|
|
300
|
+
let released = false;
|
|
301
|
+
return () => {
|
|
302
|
+
if (released)
|
|
303
|
+
return;
|
|
304
|
+
released = true;
|
|
305
|
+
// This committed invalidation covers every reorg observed before it,
|
|
306
|
+
// including an earlier failed attempt. Do not clear a newer suspension
|
|
307
|
+
// whose database invalidation may still be pending.
|
|
308
|
+
for (const pending of this.preparedBeefReadSuspensions) {
|
|
309
|
+
if (pending <= suspension)
|
|
310
|
+
this.preparedBeefReadSuspensions.delete(pending);
|
|
311
|
+
}
|
|
312
|
+
};
|
|
313
|
+
}
|
|
314
|
+
preparedBeefWritesEnabled() {
|
|
315
|
+
return this.preparedBeefPolicy.writeEnabled;
|
|
316
|
+
}
|
|
317
|
+
/** Queue best-effort preparation after foreground action work has completed. */
|
|
318
|
+
enqueuePreparedBeef(preparation) {
|
|
319
|
+
return this.preparedBeefCoordinator.enqueue(preparation);
|
|
320
|
+
}
|
|
321
|
+
/** Start the optional, rate-limited existing-wallet backfill. */
|
|
322
|
+
startPreparedBeefBackfill() {
|
|
323
|
+
if (!this.isAvailable() || this._services == null)
|
|
324
|
+
return;
|
|
325
|
+
this.preparedBeefCoordinator.startBackfill();
|
|
326
|
+
}
|
|
327
|
+
/** Test/operator hook for waiting until currently queued work is complete. */
|
|
328
|
+
async waitForPreparedBeefTasks() {
|
|
329
|
+
await this.preparedBeefCoordinator.waitForIdle();
|
|
330
|
+
}
|
|
331
|
+
/** Stop accepting background work and settle an active preparation before shutdown. */
|
|
332
|
+
async stopPreparedBeefTasks() {
|
|
333
|
+
await this.preparedBeefCoordinator.stop();
|
|
334
|
+
}
|
|
335
|
+
rawTxSliceExpression(offset, length, dbtype) {
|
|
336
|
+
const sql = dbtype === 'MySQL' ? 'substring(?? from ? for ?)' : 'substr(??, ?, ?)';
|
|
337
|
+
return this.knex.raw(sql, ['rawTx', offset + 1, length]);
|
|
338
|
+
}
|
|
339
|
+
async getRawTxSlice(txid, offset, length, dbtype, trx) {
|
|
340
|
+
const k = this.toDb(trx);
|
|
341
|
+
const slice = this.rawTxSliceExpression(offset, length, dbtype);
|
|
342
|
+
const proven = (0, utilityHelpers_1.verifyOneOrNone)(await k('proven_txs').select({ rawTx: slice }).where({ txid }));
|
|
141
343
|
if (proven?.rawTx != null)
|
|
142
344
|
return Array.from(proven.rawTx);
|
|
143
|
-
|
|
144
|
-
|
|
345
|
+
const req = (0, utilityHelpers_1.verifyOneOrNone)(await k('proven_tx_reqs')
|
|
346
|
+
.select({ rawTx: slice })
|
|
347
|
+
.where({ txid })
|
|
348
|
+
.whereIn('status', ['unsent', 'nosend', 'sending', 'unmined', 'completed', 'unfail']));
|
|
145
349
|
return req?.rawTx != null ? Array.from(req.rawTx) : undefined;
|
|
146
350
|
}
|
|
147
351
|
async getRawTxOfKnownValidTransaction(txid, offset, length, trx) {
|
|
148
352
|
if (txid == null || txid === '')
|
|
149
353
|
return undefined;
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
if (
|
|
153
|
-
|
|
354
|
+
const hasOffset = offset !== undefined;
|
|
355
|
+
const hasLength = length !== undefined;
|
|
356
|
+
if (hasOffset !== hasLength) {
|
|
357
|
+
throw new WERR_errors_1.WERR_INVALID_PARAMETER('offset and length', 'both defined or both undefined');
|
|
358
|
+
}
|
|
359
|
+
if (hasOffset &&
|
|
360
|
+
(!/^[0-9a-f]{64}$/i.test(txid) ||
|
|
361
|
+
!Number.isSafeInteger(offset) ||
|
|
362
|
+
!Number.isSafeInteger(length) ||
|
|
363
|
+
offset < 0 ||
|
|
364
|
+
length < 0 ||
|
|
365
|
+
!Number.isSafeInteger(offset + length))) {
|
|
366
|
+
throw new WERR_errors_1.WERR_INVALID_PARAMETER('txid, offset and length', 'a hexadecimal transaction id and non-negative safe slice integers with a safe sum');
|
|
367
|
+
}
|
|
368
|
+
// A cold caller may already own SQLite's only connection. Read settings
|
|
369
|
+
// through that transaction without caching uncommitted state or starting
|
|
370
|
+
// the background backfill before the caller commits.
|
|
371
|
+
let settings;
|
|
372
|
+
if (this.isAvailable())
|
|
373
|
+
settings = this.getSettings();
|
|
374
|
+
else if (trx != null)
|
|
375
|
+
settings = await this.readSettings(trx);
|
|
376
|
+
else
|
|
377
|
+
settings = await this.makeAvailable();
|
|
378
|
+
if (hasOffset) {
|
|
379
|
+
return await this.getRawTxSlice(txid, offset, length, settings.dbtype, trx);
|
|
154
380
|
}
|
|
155
381
|
const r = await this.getProvenOrRawTx(txid, trx);
|
|
156
382
|
return r.proven != null ? r.proven.rawTx : r.rawTx;
|
|
@@ -161,9 +387,15 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
161
387
|
void this.whereExists(k
|
|
162
388
|
.select('*')
|
|
163
389
|
.from('transactions')
|
|
164
|
-
.whereRaw(
|
|
390
|
+
.whereRaw('?? = ?? and ?? = ?', [
|
|
391
|
+
'proven_txs.provenTxId',
|
|
392
|
+
'transactions.provenTxId',
|
|
393
|
+
'transactions.userId',
|
|
394
|
+
args.userId
|
|
395
|
+
]));
|
|
165
396
|
});
|
|
166
397
|
if (args.paged != null) {
|
|
398
|
+
q = q.orderBy(pagingOrder('proven_txs'));
|
|
167
399
|
q = q.limit(args.paged.limit);
|
|
168
400
|
q = q.offset(args.paged.offset ?? 0);
|
|
169
401
|
}
|
|
@@ -182,9 +414,10 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
182
414
|
void this.whereExists(k
|
|
183
415
|
.select('*')
|
|
184
416
|
.from('transactions')
|
|
185
|
-
.whereRaw(
|
|
417
|
+
.whereRaw('proven_tx_reqs.txid = transactions.txid and ?? = ?', ['transactions.userId', args.userId]));
|
|
186
418
|
});
|
|
187
419
|
if (args.paged != null) {
|
|
420
|
+
q = q.orderBy(pagingOrder('proven_tx_reqs'));
|
|
188
421
|
q = q.limit(args.paged.limit);
|
|
189
422
|
q = q.offset(args.paged.offset ?? 0);
|
|
190
423
|
}
|
|
@@ -202,10 +435,16 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
202
435
|
let q = k('tx_labels_map').whereExists(k
|
|
203
436
|
.select('*')
|
|
204
437
|
.from('tx_labels')
|
|
205
|
-
.whereRaw(
|
|
438
|
+
.whereRaw('?? = ?? and ?? = ?', [
|
|
439
|
+
'tx_labels.txLabelId',
|
|
440
|
+
'tx_labels_map.txLabelId',
|
|
441
|
+
'tx_labels.userId',
|
|
442
|
+
args.userId
|
|
443
|
+
]));
|
|
206
444
|
if (args.since != null)
|
|
207
445
|
q = q.where('updated_at', '>=', this.validateDateForWhere(args.since));
|
|
208
446
|
if (args.paged != null) {
|
|
447
|
+
q = q.orderBy(pagingOrder('tx_labels_map'));
|
|
209
448
|
q = q.limit(args.paged.limit);
|
|
210
449
|
q = q.offset(args.paged.offset ?? 0);
|
|
211
450
|
}
|
|
@@ -221,10 +460,16 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
221
460
|
let q = k('output_tags_map').whereExists(k
|
|
222
461
|
.select('*')
|
|
223
462
|
.from('output_tags')
|
|
224
|
-
.whereRaw(
|
|
463
|
+
.whereRaw('?? = ?? and ?? = ?', [
|
|
464
|
+
'output_tags.outputTagId',
|
|
465
|
+
'output_tags_map.outputTagId',
|
|
466
|
+
'output_tags.userId',
|
|
467
|
+
args.userId
|
|
468
|
+
]));
|
|
225
469
|
if (args.since != null)
|
|
226
470
|
q = q.where('updated_at', '>=', this.validateDateForWhere(args.since));
|
|
227
471
|
if (args.paged != null) {
|
|
472
|
+
q = q.orderBy(pagingOrder('output_tags_map'));
|
|
228
473
|
q = q.limit(args.paged.limit);
|
|
229
474
|
q = q.offset(args.paged.offset ?? 0);
|
|
230
475
|
}
|
|
@@ -235,6 +480,45 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
235
480
|
const rs = await q;
|
|
236
481
|
return this.validateEntities(rs, undefined, ['isDeleted']);
|
|
237
482
|
}
|
|
483
|
+
async countSyncQuery(query) {
|
|
484
|
+
const row = await query.count({ count: '*' }).first();
|
|
485
|
+
return Number(row?.count ?? 0);
|
|
486
|
+
}
|
|
487
|
+
async getSyncChunkTotals(args, userId) {
|
|
488
|
+
const since = args.since;
|
|
489
|
+
const [provenTxs, outputBaskets, outputTags, txLabels, transactions, outputs, txLabelMaps, outputTagMaps, certificates, certificateFields, commissions, provenTxReqs] = await Promise.all([
|
|
490
|
+
this.countSyncQuery(this.getProvenTxsForUserQuery({ userId, since })),
|
|
491
|
+
this.countOutputBaskets({ partial: { userId }, since }),
|
|
492
|
+
this.countOutputTags({ partial: { userId }, since }),
|
|
493
|
+
this.countTxLabels({ partial: { userId }, since }),
|
|
494
|
+
this.countTransactions({ partial: { userId }, since, noRawTx: true }),
|
|
495
|
+
this.countOutputs({ partial: { userId }, since, noScript: true }),
|
|
496
|
+
this.countSyncQuery(this.getTxLabelMapsForUserQuery({ userId, since })),
|
|
497
|
+
this.countSyncQuery(this.getOutputTagMapsForUserQuery({ userId, since })),
|
|
498
|
+
this.countCertificates({ partial: { userId }, since }),
|
|
499
|
+
this.countCertificateFields({ partial: { userId }, since }),
|
|
500
|
+
this.countCommissions({ partial: { userId }, since }),
|
|
501
|
+
this.countSyncQuery(this.getProvenTxReqsForUserQuery({ userId, since }))
|
|
502
|
+
]);
|
|
503
|
+
const records = {
|
|
504
|
+
provenTxs,
|
|
505
|
+
outputBaskets,
|
|
506
|
+
outputTags,
|
|
507
|
+
txLabels,
|
|
508
|
+
transactions,
|
|
509
|
+
outputs,
|
|
510
|
+
txLabelMaps,
|
|
511
|
+
outputTagMaps,
|
|
512
|
+
certificates,
|
|
513
|
+
certificateFields,
|
|
514
|
+
commissions,
|
|
515
|
+
provenTxReqs
|
|
516
|
+
};
|
|
517
|
+
return {
|
|
518
|
+
totalRecords: Object.values(records).reduce((total, count) => total + count, 0),
|
|
519
|
+
records
|
|
520
|
+
};
|
|
521
|
+
}
|
|
238
522
|
async listActions(auth, vargs) {
|
|
239
523
|
if (auth.userId == null)
|
|
240
524
|
throw new WERR_errors_1.WERR_UNAUTHORIZED();
|
|
@@ -245,11 +529,40 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
245
529
|
throw new WERR_errors_1.WERR_UNAUTHORIZED();
|
|
246
530
|
return await (0, listOutputsKnex_1.listOutputs)(this, auth, vargs);
|
|
247
531
|
}
|
|
532
|
+
/**
|
|
533
|
+
* Insert one row and return its auto-increment primary key. MySQL and SQLite
|
|
534
|
+
* report the id as the insert result; Postgres requires a RETURNING clause.
|
|
535
|
+
*
|
|
536
|
+
* `recoverable` marks inserts that the findOrInsert helpers retry as a find
|
|
537
|
+
* after a duplicate-key error, in the same transaction; see `inSavepoint`.
|
|
538
|
+
*/
|
|
539
|
+
async insertReturningId(table, idColumn, row, trx, recoverable = false) {
|
|
540
|
+
if (this.dbtype !== 'Postgres') {
|
|
541
|
+
const [id] = await this.toDb(trx)(table).insert(row);
|
|
542
|
+
return id;
|
|
543
|
+
}
|
|
544
|
+
const insert = async (db) => {
|
|
545
|
+
const [r] = await db(table).insert(row).returning(idColumn);
|
|
546
|
+
return r[idColumn];
|
|
547
|
+
};
|
|
548
|
+
return recoverable ? await this.inSavepoint(trx, insert) : await insert(this.toDb(trx));
|
|
549
|
+
}
|
|
550
|
+
/**
|
|
551
|
+
* The findOrInsert helpers catch a failed insert and find the row again in
|
|
552
|
+
* the same transaction. MySQL and SQLite allow that. Postgres aborts the
|
|
553
|
+
* whole transaction on any statement error, so there the insert runs in a
|
|
554
|
+
* savepoint that is rolled back on its own.
|
|
555
|
+
*/
|
|
556
|
+
async inSavepoint(trx, run) {
|
|
557
|
+
if (trx == null || this.dbtype !== 'Postgres')
|
|
558
|
+
return await run(this.toDb(trx));
|
|
559
|
+
return await trx.transaction(async (savepoint) => await run(savepoint));
|
|
560
|
+
}
|
|
248
561
|
async insertProvenTx(tx, trx) {
|
|
249
562
|
const e = await this.validateEntityForInsert(tx, trx);
|
|
250
563
|
if (e.provenTxId === 0)
|
|
251
564
|
delete e.provenTxId;
|
|
252
|
-
const
|
|
565
|
+
const id = await this.insertReturningId('proven_txs', 'provenTxId', e, trx, true);
|
|
253
566
|
tx.provenTxId = id;
|
|
254
567
|
return tx.provenTxId;
|
|
255
568
|
}
|
|
@@ -257,7 +570,7 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
257
570
|
const e = await this.validateEntityForInsert(batch, trx, ['expiresAt', 'hardExpiresAt']);
|
|
258
571
|
if (e.actionBatchId === 0)
|
|
259
572
|
delete e.actionBatchId;
|
|
260
|
-
const
|
|
573
|
+
const id = await this.insertReturningId('action_batches', 'actionBatchId', e, trx);
|
|
261
574
|
batch.actionBatchId = id;
|
|
262
575
|
return id;
|
|
263
576
|
}
|
|
@@ -266,10 +579,7 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
266
579
|
return row == null ? undefined : this.validateEntity(row, ['expiresAt', 'hardExpiresAt']);
|
|
267
580
|
}
|
|
268
581
|
async findActionBatchForUpdate(userId, batchId, trx) {
|
|
269
|
-
const row = await this.toDb(trx)('action_batches')
|
|
270
|
-
.where({ userId, batchId })
|
|
271
|
-
.forUpdate()
|
|
272
|
-
.first();
|
|
582
|
+
const row = await this.toDb(trx)('action_batches').where({ userId, batchId }).forUpdate().first();
|
|
273
583
|
return row == null ? undefined : this.validateEntity(row, ['expiresAt', 'hardExpiresAt']);
|
|
274
584
|
}
|
|
275
585
|
async findExpiredActionBatches(now, trx) {
|
|
@@ -345,9 +655,9 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
345
655
|
const rows = [];
|
|
346
656
|
const uniqueDigests = [...new Set(digests)];
|
|
347
657
|
for (let offset = 0; offset < uniqueDigests.length; offset += ACTION_BATCH_BLOB_SQL_CHUNK) {
|
|
348
|
-
rows.push(...await this.toDb(trx)('action_batch_blobs')
|
|
658
|
+
rows.push(...(await this.toDb(trx)('action_batch_blobs')
|
|
349
659
|
.where({ actionBatchId })
|
|
350
|
-
.whereIn('digest', uniqueDigests.slice(offset, offset + ACTION_BATCH_BLOB_SQL_CHUNK)));
|
|
660
|
+
.whereIn('digest', uniqueDigests.slice(offset, offset + ACTION_BATCH_BLOB_SQL_CHUNK))));
|
|
351
661
|
}
|
|
352
662
|
for (const row of rows) {
|
|
353
663
|
if (Buffer.isBuffer(row.bytes)) {
|
|
@@ -380,7 +690,7 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
380
690
|
const e = await this.validateEntityForInsert(tx, trx);
|
|
381
691
|
if (e.provenTxReqId === 0)
|
|
382
692
|
delete e.provenTxReqId;
|
|
383
|
-
const
|
|
693
|
+
const id = await this.insertReturningId('proven_tx_reqs', 'provenTxReqId', e, trx, true);
|
|
384
694
|
tx.provenTxReqId = id;
|
|
385
695
|
return tx.provenTxReqId;
|
|
386
696
|
}
|
|
@@ -388,12 +698,13 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
388
698
|
const e = await this.validateEntityForInsert(user, trx);
|
|
389
699
|
if (e.userId === 0)
|
|
390
700
|
delete e.userId;
|
|
391
|
-
const
|
|
701
|
+
const id = await this.insertReturningId('users', 'userId', e, trx);
|
|
392
702
|
user.userId = id;
|
|
393
703
|
return user.userId;
|
|
394
704
|
}
|
|
395
705
|
async insertCertificateAuth(auth, certificate) {
|
|
396
|
-
if (auth.userId == null ||
|
|
706
|
+
if (auth.userId == null ||
|
|
707
|
+
(certificate.userId != null && certificate.userId !== 0 && certificate.userId !== auth.userId))
|
|
397
708
|
throw new WERR_errors_1.WERR_UNAUTHORIZED();
|
|
398
709
|
certificate.userId = auth.userId;
|
|
399
710
|
return await this.insertCertificate(certificate);
|
|
@@ -407,7 +718,7 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
407
718
|
const fields = e.fields;
|
|
408
719
|
if (e.fields != null)
|
|
409
720
|
delete e.fields;
|
|
410
|
-
const
|
|
721
|
+
const id = await this.insertReturningId('certificates', 'certificateId', e, trx);
|
|
411
722
|
certificate.certificateId = id;
|
|
412
723
|
if (fields != null) {
|
|
413
724
|
for (const field of fields) {
|
|
@@ -426,7 +737,7 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
426
737
|
const e = await this.validateEntityForInsert(basket, trx, undefined, ['isDeleted']);
|
|
427
738
|
if (e.basketId === 0)
|
|
428
739
|
delete e.basketId;
|
|
429
|
-
const
|
|
740
|
+
const id = await this.insertReturningId('output_baskets', 'basketId', e, trx, true);
|
|
430
741
|
basket.basketId = id;
|
|
431
742
|
return basket.basketId;
|
|
432
743
|
}
|
|
@@ -434,7 +745,7 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
434
745
|
const e = await this.validateEntityForInsert(tx, trx);
|
|
435
746
|
if (e.transactionId === 0)
|
|
436
747
|
delete e.transactionId;
|
|
437
|
-
const
|
|
748
|
+
const id = await this.insertReturningId('transactions', 'transactionId', e, trx, true);
|
|
438
749
|
tx.transactionId = id;
|
|
439
750
|
return tx.transactionId;
|
|
440
751
|
}
|
|
@@ -442,7 +753,7 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
442
753
|
const e = await this.validateEntityForInsert(commission, trx);
|
|
443
754
|
if (e.commissionId === 0)
|
|
444
755
|
delete e.commissionId;
|
|
445
|
-
const
|
|
756
|
+
const id = await this.insertReturningId('commissions', 'commissionId', e, trx);
|
|
446
757
|
commission.commissionId = id;
|
|
447
758
|
return commission.commissionId;
|
|
448
759
|
}
|
|
@@ -450,7 +761,7 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
450
761
|
const e = await this.validateEntityForInsert(output, trx);
|
|
451
762
|
if (e.outputId === 0)
|
|
452
763
|
delete e.outputId;
|
|
453
|
-
const
|
|
764
|
+
const id = await this.insertReturningId('outputs', 'outputId', e, trx);
|
|
454
765
|
output.outputId = id;
|
|
455
766
|
return output.outputId;
|
|
456
767
|
}
|
|
@@ -471,31 +782,31 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
471
782
|
const e = await this.validateEntityForInsert(tag, trx, undefined, ['isDeleted']);
|
|
472
783
|
if (e.outputTagId === 0)
|
|
473
784
|
delete e.outputTagId;
|
|
474
|
-
const
|
|
785
|
+
const id = await this.insertReturningId('output_tags', 'outputTagId', e, trx, true);
|
|
475
786
|
tag.outputTagId = id;
|
|
476
787
|
return tag.outputTagId;
|
|
477
788
|
}
|
|
478
789
|
async insertOutputTagMap(tagMap, trx) {
|
|
479
790
|
const e = await this.validateEntityForInsert(tagMap, trx, undefined, ['isDeleted']);
|
|
480
|
-
await this.
|
|
791
|
+
await this.inSavepoint(trx, async (db) => await db('output_tags_map').insert(e));
|
|
481
792
|
}
|
|
482
793
|
async insertTxLabel(label, trx) {
|
|
483
794
|
const e = await this.validateEntityForInsert(label, trx, undefined, ['isDeleted']);
|
|
484
795
|
if (e.txLabelId === 0)
|
|
485
796
|
delete e.txLabelId;
|
|
486
|
-
const
|
|
797
|
+
const id = await this.insertReturningId('tx_labels', 'txLabelId', e, trx, true);
|
|
487
798
|
label.txLabelId = id;
|
|
488
799
|
return label.txLabelId;
|
|
489
800
|
}
|
|
490
801
|
async insertTxLabelMap(labelMap, trx) {
|
|
491
802
|
const e = await this.validateEntityForInsert(labelMap, trx, undefined, ['isDeleted']);
|
|
492
|
-
await this.
|
|
803
|
+
await this.inSavepoint(trx, async (db) => await db('tx_labels_map').insert(e));
|
|
493
804
|
}
|
|
494
805
|
async insertMonitorEvent(event, trx) {
|
|
495
806
|
const e = await this.validateEntityForInsert(event, trx);
|
|
496
807
|
if (e.id === 0)
|
|
497
808
|
delete e.id;
|
|
498
|
-
const
|
|
809
|
+
const id = await this.insertReturningId('monitor_events', 'id', e, trx);
|
|
499
810
|
event.id = id;
|
|
500
811
|
return event.id;
|
|
501
812
|
}
|
|
@@ -503,7 +814,7 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
503
814
|
const e = await this.validateEntityForInsert(syncState, trx, ['when'], ['init']);
|
|
504
815
|
if (e.syncStateId === 0)
|
|
505
816
|
delete e.syncStateId;
|
|
506
|
-
const
|
|
817
|
+
const id = await this.insertReturningId('sync_states', 'syncStateId', e, trx);
|
|
507
818
|
syncState.syncStateId = id;
|
|
508
819
|
return syncState.syncStateId;
|
|
509
820
|
}
|
|
@@ -597,6 +908,13 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
597
908
|
}
|
|
598
909
|
return r;
|
|
599
910
|
}
|
|
911
|
+
async compareAndSetNoSendExpiryState(transactionId, expected, next, trx) {
|
|
912
|
+
await this.verifyReadyForDatabaseAccess(trx);
|
|
913
|
+
const updated = await this.toDb(trx)('transactions')
|
|
914
|
+
.where({ transactionId, noSendExpiryState: expected })
|
|
915
|
+
.update(this.validatePartialForUpdate({ noSendExpiryState: next }));
|
|
916
|
+
return updated === 1;
|
|
917
|
+
}
|
|
600
918
|
async updateTxLabelMap(transactionId, txLabelId, update, trx) {
|
|
601
919
|
await this.verifyReadyForDatabaseAccess(trx);
|
|
602
920
|
return await this.toDb(trx)('tx_labels_map')
|
|
@@ -672,6 +990,8 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
672
990
|
}
|
|
673
991
|
}
|
|
674
992
|
if (args.paged != null) {
|
|
993
|
+
if (args.orderDescending !== true)
|
|
994
|
+
void q.orderBy(pagingOrder(table));
|
|
675
995
|
void q.limit(args.paged.limit);
|
|
676
996
|
void q.offset(args.paged.offset ?? 0);
|
|
677
997
|
}
|
|
@@ -682,9 +1002,9 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
682
1002
|
}
|
|
683
1003
|
findCertificatesQuery(args) {
|
|
684
1004
|
const q = this.setupQuery('certificates', args);
|
|
685
|
-
if (
|
|
1005
|
+
if (args.certifiers != null && args.certifiers.length > 0)
|
|
686
1006
|
void q.whereIn('certifier', args.certifiers);
|
|
687
|
-
if (
|
|
1007
|
+
if (args.types != null && args.types.length > 0)
|
|
688
1008
|
void q.whereIn('type', args.types);
|
|
689
1009
|
return q;
|
|
690
1010
|
}
|
|
@@ -702,10 +1022,30 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
702
1022
|
throw new WERR_errors_1.WERR_INVALID_PARAMETER('args.partial.lockingScript', 'undefined. Outputs may not be found by lockingScript value.');
|
|
703
1023
|
}
|
|
704
1024
|
const q = this.setupQuery('outputs', args);
|
|
705
|
-
if (
|
|
706
|
-
|
|
1025
|
+
if (args.txStatus != null && args.txStatus.length > 0) {
|
|
1026
|
+
const allowedStatuses = new Set([
|
|
1027
|
+
'completed',
|
|
1028
|
+
'failed',
|
|
1029
|
+
'unprocessed',
|
|
1030
|
+
'sending',
|
|
1031
|
+
'unproven',
|
|
1032
|
+
'unsigned',
|
|
1033
|
+
'nosend',
|
|
1034
|
+
'nonfinal',
|
|
1035
|
+
'unfail'
|
|
1036
|
+
]);
|
|
1037
|
+
if (args.txStatus.some(status => !allowedStatuses.has(status))) {
|
|
1038
|
+
throw new WERR_errors_1.WERR_INVALID_PARAMETER('args.txStatus', 'supported transaction statuses');
|
|
1039
|
+
}
|
|
1040
|
+
const statuses = [...new Set(args.txStatus)];
|
|
1041
|
+
void q.whereExists(function () {
|
|
1042
|
+
void this.select(1)
|
|
1043
|
+
.from('transactions')
|
|
1044
|
+
.whereRaw('?? = ??', ['transactions.transactionId', 'outputs.transactionId'])
|
|
1045
|
+
.whereIn('transactions.status', statuses);
|
|
1046
|
+
});
|
|
707
1047
|
}
|
|
708
|
-
if (
|
|
1048
|
+
if (args.noScript === true && count !== true) {
|
|
709
1049
|
const columns = tables_1.outputColumnsWithoutLockingScript.map(c => `outputs.${c}`);
|
|
710
1050
|
void q.select(columns);
|
|
711
1051
|
}
|
|
@@ -713,7 +1053,7 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
713
1053
|
}
|
|
714
1054
|
findOutputTagMapsQuery(args) {
|
|
715
1055
|
const q = this.setupQuery('output_tags_map', args);
|
|
716
|
-
if (
|
|
1056
|
+
if (args.tagIds != null && args.tagIds.length > 0)
|
|
717
1057
|
void q.whereIn('outputTagId', args.tagIds);
|
|
718
1058
|
return q;
|
|
719
1059
|
}
|
|
@@ -728,7 +1068,7 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
728
1068
|
throw new WERR_errors_1.WERR_INVALID_PARAMETER('args.partial.inputBEEF', 'undefined. ProvenTxReqs may not be found by inputBEEF value.');
|
|
729
1069
|
}
|
|
730
1070
|
const q = this.setupQuery('proven_tx_reqs', args);
|
|
731
|
-
if (
|
|
1071
|
+
if (args.status != null && args.status.length > 0)
|
|
732
1072
|
void q.whereIn('status', args.status);
|
|
733
1073
|
if (args.txids != null) {
|
|
734
1074
|
const txids = args.txids.filter(txid => txid !== undefined);
|
|
@@ -771,13 +1111,13 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
771
1111
|
throw new WERR_errors_1.WERR_INVALID_PARAMETER('args.partial.inputBEEF', 'undefined. Transactions may not be found by inputBEEF value.');
|
|
772
1112
|
}
|
|
773
1113
|
const q = this.setupQuery('transactions', args);
|
|
774
|
-
if (
|
|
1114
|
+
if (args.status != null && args.status.length > 0)
|
|
775
1115
|
void q.whereIn('status', args.status);
|
|
776
1116
|
if (args.from != null)
|
|
777
1117
|
void q.where('created_at', '>=', this.validateDateForWhere(args.from));
|
|
778
1118
|
if (args.to != null)
|
|
779
1119
|
void q.where('created_at', '<', this.validateDateForWhere(args.to));
|
|
780
|
-
if (
|
|
1120
|
+
if (args.noRawTx === true && count !== true) {
|
|
781
1121
|
const columns = tables_1.transactionColumnsWithoutRawTx.map(c => `transactions.${c}`);
|
|
782
1122
|
void q.select(columns);
|
|
783
1123
|
}
|
|
@@ -785,7 +1125,7 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
785
1125
|
}
|
|
786
1126
|
findTxLabelMapsQuery(args) {
|
|
787
1127
|
const q = this.setupQuery('tx_labels_map', args);
|
|
788
|
-
if (
|
|
1128
|
+
if (args.labelIds != null && args.labelIds.length > 0)
|
|
789
1129
|
void q.whereIn('txLabelId', args.labelIds);
|
|
790
1130
|
return q;
|
|
791
1131
|
}
|
|
@@ -799,19 +1139,32 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
799
1139
|
return this.setupQuery('monitor_events', args);
|
|
800
1140
|
}
|
|
801
1141
|
async findCertificatesAuth(auth, args) {
|
|
802
|
-
if (auth.userId == null ||
|
|
1142
|
+
if (auth.userId == null ||
|
|
1143
|
+
(args.partial.userId != null && args.partial.userId !== 0 && args.partial.userId !== auth.userId))
|
|
803
1144
|
throw new WERR_errors_1.WERR_UNAUTHORIZED();
|
|
804
1145
|
args.partial.userId = auth.userId;
|
|
805
1146
|
return await this.findCertificates(args);
|
|
806
1147
|
}
|
|
1148
|
+
async findProvenTxReqsAuth(auth, args) {
|
|
1149
|
+
const userId = (0, utilityHelpers_1.verifyId)(auth.userId);
|
|
1150
|
+
const k = this.toDb(args.trx);
|
|
1151
|
+
const q = this.findProvenTxReqsQuery(args).whereExists(k
|
|
1152
|
+
.select(1)
|
|
1153
|
+
.from('transactions')
|
|
1154
|
+
.whereRaw('proven_tx_reqs.txid = transactions.txid')
|
|
1155
|
+
.where('transactions.userId', userId));
|
|
1156
|
+
return this.validateEntities(await q, undefined, ['notified', 'wasBroadcast']);
|
|
1157
|
+
}
|
|
807
1158
|
async findOutputBasketsAuth(auth, args) {
|
|
808
|
-
if (auth.userId == null ||
|
|
1159
|
+
if (auth.userId == null ||
|
|
1160
|
+
(args.partial.userId != null && args.partial.userId !== 0 && args.partial.userId !== auth.userId))
|
|
809
1161
|
throw new WERR_errors_1.WERR_UNAUTHORIZED();
|
|
810
1162
|
args.partial.userId = auth.userId;
|
|
811
1163
|
return await this.findOutputBaskets(args);
|
|
812
1164
|
}
|
|
813
1165
|
async findOutputsAuth(auth, args) {
|
|
814
|
-
if (auth.userId == null ||
|
|
1166
|
+
if (auth.userId == null ||
|
|
1167
|
+
(args.partial.userId != null && args.partial.userId !== 0 && args.partial.userId !== auth.userId))
|
|
815
1168
|
throw new WERR_errors_1.WERR_UNAUTHORIZED();
|
|
816
1169
|
args.partial.userId = auth.userId;
|
|
817
1170
|
return await this.findOutputs(args);
|
|
@@ -880,6 +1233,12 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
880
1233
|
}
|
|
881
1234
|
async findSyncStates(args) {
|
|
882
1235
|
const q = this.findSyncStatesQuery(args);
|
|
1236
|
+
// Serialize sync checkpoint reads with the page transaction on MySQL and Postgres too.
|
|
1237
|
+
if (args.trx != null &&
|
|
1238
|
+
(this.dbtype === 'MySQL' || this.dbtype === 'Postgres') &&
|
|
1239
|
+
args.partial.userId != null &&
|
|
1240
|
+
(args.partial.syncStateId != null || args.partial.storageIdentityKey != null))
|
|
1241
|
+
q.forUpdate();
|
|
883
1242
|
const r = await q;
|
|
884
1243
|
return this.validateEntities(r, ['when'], ['init']);
|
|
885
1244
|
}
|
|
@@ -928,9 +1287,12 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
928
1287
|
return this.validateEntities(r, ['when']);
|
|
929
1288
|
}
|
|
930
1289
|
async getCount(q) {
|
|
931
|
-
|
|
1290
|
+
// Alias the count: the default result key differs by dialect, and Postgres
|
|
1291
|
+
// returns count(*) as a bigint string.
|
|
1292
|
+
// A paged find query orders its rows; an aggregate cannot keep that order on Postgres.
|
|
1293
|
+
void q.clearOrder().count({ count: '*' });
|
|
932
1294
|
const r = await q;
|
|
933
|
-
return r[0]
|
|
1295
|
+
return Number(r[0].count);
|
|
934
1296
|
}
|
|
935
1297
|
async countCertificateFields(args) {
|
|
936
1298
|
return await this.getCount(this.findCertificateFieldsQuery(args));
|
|
@@ -978,6 +1340,7 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
978
1340
|
return await this.getCount(this.findMonitorEventsQuery(args));
|
|
979
1341
|
}
|
|
980
1342
|
async destroy() {
|
|
1343
|
+
await this.stopPreparedBeefTasks();
|
|
981
1344
|
this.knex.off('query', this.onQuery);
|
|
982
1345
|
this.knex.off('query-response', this.onQueryResponse);
|
|
983
1346
|
this.knex.off('query-error', this.onQueryError);
|
|
@@ -990,24 +1353,46 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
990
1353
|
// Check if this is a SQLite database by looking at the Knex client config
|
|
991
1354
|
const clientName = this.knex.client.config?.client ?? '';
|
|
992
1355
|
const isSQLite = clientName.includes('sqlite');
|
|
993
|
-
// For SQLite,
|
|
994
|
-
// PRAGMA foreign_keys is silently ignored
|
|
995
|
-
//
|
|
996
|
-
//
|
|
1356
|
+
// For SQLite, turn foreign keys off for the duration of the migration.
|
|
1357
|
+
// PRAGMA foreign_keys is silently ignored *when executed inside* a
|
|
1358
|
+
// transaction (https://github.com/knex/knex/issues/4155), so it is issued
|
|
1359
|
+
// here, outside migrate.latest(). SQLite's single-connection pool means
|
|
1360
|
+
// knex's per-migration transaction runs on this same connection and
|
|
1361
|
+
// inherits the setting, and knex's own SQLite alter-table rebuild leaves an
|
|
1362
|
+
// ambient pragma alone while transacting (sqlite3/schema/ddl.js: alter()
|
|
1363
|
+
// uses `enforceForeignCheck = this.client.transacting ? null : false`).
|
|
997
1364
|
if (isSQLite) {
|
|
998
1365
|
await this.knex.raw('PRAGMA foreign_keys = OFF;');
|
|
999
1366
|
}
|
|
1000
|
-
const
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1367
|
+
const isPostgres = this.knex.client.dialect === 'postgresql';
|
|
1368
|
+
try {
|
|
1369
|
+
const config = {
|
|
1370
|
+
migrationSource: new KnexMigrations_1.KnexMigrations(this.chain, storageName, storageIdentityKey, 1024, isPostgres ? 'Postgres' : undefined),
|
|
1371
|
+
// Keep DDL and its migration journal entry in the same transaction.
|
|
1372
|
+
disableTransactions: false
|
|
1373
|
+
};
|
|
1374
|
+
if (isPostgres) {
|
|
1375
|
+
// Postgres index migrations run outside a transaction (CREATE INDEX
|
|
1376
|
+
// CONCURRENTLY). When any pending migration does, knex's latest()
|
|
1377
|
+
// journals every migration of the batch outside its transaction, so
|
|
1378
|
+
// run one migration per up() to keep the others atomic with their journal row.
|
|
1379
|
+
for (;;) {
|
|
1380
|
+
const [, applied] = (await this.knex.migrate.up(config));
|
|
1381
|
+
if (applied.length === 0)
|
|
1382
|
+
break;
|
|
1383
|
+
}
|
|
1384
|
+
}
|
|
1385
|
+
else {
|
|
1386
|
+
await this.knex.migrate.latest(config);
|
|
1387
|
+
}
|
|
1388
|
+
return await this.knex.migrate.currentVersion(config);
|
|
1389
|
+
}
|
|
1390
|
+
finally {
|
|
1391
|
+
// Leaving foreign-key enforcement disabled after a failed migration would
|
|
1392
|
+
// weaken every subsequent write on this connection.
|
|
1393
|
+
if (isSQLite)
|
|
1394
|
+
await this.knex.raw('PRAGMA foreign_keys = ON;');
|
|
1009
1395
|
}
|
|
1010
|
-
return version;
|
|
1011
1396
|
}
|
|
1012
1397
|
async dropAllData() {
|
|
1013
1398
|
// Only using migrations to migrate down, don't need valid properties for settings table.
|
|
@@ -1029,24 +1414,22 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
1029
1414
|
if (isSQLite) {
|
|
1030
1415
|
await this.knex.raw('PRAGMA foreign_keys = OFF;');
|
|
1031
1416
|
}
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
const
|
|
1035
|
-
if (
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
|
|
1417
|
+
try {
|
|
1418
|
+
for (let i = 0; i < count; i++) {
|
|
1419
|
+
const version = await this.knex.migrate.currentVersion(config);
|
|
1420
|
+
if (version === 'none')
|
|
1421
|
+
return;
|
|
1422
|
+
const result = await this.knex.migrate.down(config);
|
|
1423
|
+
if (result == null)
|
|
1424
|
+
throw new WERR_errors_1.WERR_INTERNAL('database migration rollback returned no result');
|
|
1039
1425
|
}
|
|
1040
|
-
|
|
1041
|
-
|
|
1042
|
-
// the expected terminal condition, so we stop iterating rather than propagating.
|
|
1043
|
-
console.debug('migrate.down stopped (no more migrations or error):', migrationError);
|
|
1044
|
-
break;
|
|
1426
|
+
if ((await this.knex.migrate.currentVersion(config)) !== 'none') {
|
|
1427
|
+
throw new WERR_errors_1.WERR_INTERNAL('database migration rollback did not reach the empty schema');
|
|
1045
1428
|
}
|
|
1046
1429
|
}
|
|
1047
|
-
|
|
1048
|
-
|
|
1049
|
-
|
|
1430
|
+
finally {
|
|
1431
|
+
if (isSQLite)
|
|
1432
|
+
await this.knex.raw('PRAGMA foreign_keys = ON;');
|
|
1050
1433
|
}
|
|
1051
1434
|
}
|
|
1052
1435
|
async transaction(scope, trx) {
|
|
@@ -1064,7 +1447,7 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
1064
1447
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1065
1448
|
toDb(trx) {
|
|
1066
1449
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1067
|
-
const db =
|
|
1450
|
+
const db = trx == null ? this.knex : trx;
|
|
1068
1451
|
this.whenLastAccess = new Date();
|
|
1069
1452
|
return db;
|
|
1070
1453
|
}
|
|
@@ -1088,7 +1471,7 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
1088
1471
|
* @param trx
|
|
1089
1472
|
*/
|
|
1090
1473
|
async verifyReadyForDatabaseAccess(trx) {
|
|
1091
|
-
this._settings ??= await this.readSettings();
|
|
1474
|
+
this._settings ??= await this.readSettings(trx);
|
|
1092
1475
|
// Always run the PRAGMA for SQLite to ensure foreign key constraints are enabled.
|
|
1093
1476
|
// This is necessary because PRAGMA foreign_keys is a per-connection setting,
|
|
1094
1477
|
// and connection pools may create new connections that don't have it set.
|
|
@@ -1236,7 +1619,7 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
1236
1619
|
void this.select(1)
|
|
1237
1620
|
.from('action_batch_outputs as abo')
|
|
1238
1621
|
.join('action_batches as ab', 'abo.actionBatchId', 'ab.actionBatchId')
|
|
1239
|
-
.whereRaw('abo.outputId
|
|
1622
|
+
.whereRaw('?? = ??', ['abo.outputId', 'o.outputId'])
|
|
1240
1623
|
.whereIn('ab.status', ['active', 'prepared'])
|
|
1241
1624
|
.where('ab.expiresAt', '>', now)
|
|
1242
1625
|
.where('ab.hardExpiresAt', '>', now);
|
|
@@ -1270,7 +1653,7 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
1270
1653
|
void this.select(1)
|
|
1271
1654
|
.from('action_batch_outputs as abo')
|
|
1272
1655
|
.join('action_batches as ab', 'abo.actionBatchId', 'ab.actionBatchId')
|
|
1273
|
-
.whereRaw('abo.outputId
|
|
1656
|
+
.whereRaw('?? = ??', ['abo.outputId', 'o.outputId'])
|
|
1274
1657
|
.whereIn('ab.status', ['active', 'prepared'])
|
|
1275
1658
|
.where('ab.expiresAt', '>', now)
|
|
1276
1659
|
.where('ab.hardExpiresAt', '>', now);
|
|
@@ -1304,13 +1687,13 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
1304
1687
|
void this.select(1)
|
|
1305
1688
|
.from('action_batch_outputs as abo')
|
|
1306
1689
|
.join('action_batches as ab', 'abo.actionBatchId', 'ab.actionBatchId')
|
|
1307
|
-
.whereRaw('abo.outputId
|
|
1690
|
+
.whereRaw('?? = ??', ['abo.outputId', 'o.outputId'])
|
|
1308
1691
|
.whereIn('ab.status', ['active', 'prepared'])
|
|
1309
1692
|
.where('ab.expiresAt', '>', now)
|
|
1310
1693
|
.where('ab.hardExpiresAt', '>', now);
|
|
1311
1694
|
})
|
|
1312
1695
|
.whereIn('t.status', statuses)
|
|
1313
|
-
.select('o.outputId', 'o.transactionId', 'o.satoshis', 'o.txid', 'o.vout');
|
|
1696
|
+
.select('o.outputId', 'o.transactionId', 'o.satoshis', 'o.txid', 'o.vout', 't.status as transactionStatus');
|
|
1314
1697
|
}
|
|
1315
1698
|
async findOutputsByIds(outputIds, trx) {
|
|
1316
1699
|
const byId = {};
|
|
@@ -1481,7 +1864,7 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
1481
1864
|
.whereIn('t.status', status)
|
|
1482
1865
|
.sum({ totalSatoshis: 'o.satoshis' })
|
|
1483
1866
|
.first();
|
|
1484
|
-
const total =
|
|
1867
|
+
const total = row != null ? row.totalSatoshis : undefined;
|
|
1485
1868
|
return Number(total ?? 0);
|
|
1486
1869
|
}
|
|
1487
1870
|
/**
|
|
@@ -1511,27 +1894,40 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
1511
1894
|
.whereNot('o.derivationSuffix', '')
|
|
1512
1895
|
.whereNull('o.spentBy')
|
|
1513
1896
|
.whereNotExists(function () {
|
|
1514
|
-
void this.select(1)
|
|
1515
|
-
.from('action_batch_outputs as abo')
|
|
1516
|
-
.whereRaw('abo.outputId = o.outputId');
|
|
1897
|
+
void this.select(1).from('action_batch_outputs as abo').whereRaw('?? = ??', ['abo.outputId', 'o.outputId']);
|
|
1517
1898
|
})
|
|
1518
1899
|
.whereIn('t.status', status)
|
|
1519
1900
|
.select('o.*')
|
|
1520
1901
|
.forUpdate();
|
|
1521
|
-
|
|
1522
|
-
|
|
1523
|
-
|
|
1902
|
+
const excluded = [];
|
|
1903
|
+
const candidates = () => excluded.length > 0 ? baseQuery().whereNotIn('o.outputId', excluded) : baseQuery();
|
|
1904
|
+
const selectOutput = async () => {
|
|
1905
|
+
let output;
|
|
1906
|
+
if (exactSatoshis !== undefined) {
|
|
1907
|
+
output = await candidates().where('o.satoshis', exactSatoshis).orderBy('o.outputId', 'asc').first();
|
|
1908
|
+
}
|
|
1909
|
+
output ??= await candidates()
|
|
1910
|
+
.where('o.satoshis', '>=', targetSatoshis)
|
|
1911
|
+
.orderBy('o.satoshis', 'asc')
|
|
1912
|
+
.orderBy('o.outputId', 'asc')
|
|
1913
|
+
.first();
|
|
1914
|
+
output ??= await candidates()
|
|
1915
|
+
.where('o.satoshis', '<', targetSatoshis)
|
|
1916
|
+
.orderBy('o.satoshis', 'desc')
|
|
1917
|
+
.orderBy('o.outputId', 'desc')
|
|
1918
|
+
.first();
|
|
1919
|
+
return output;
|
|
1920
|
+
};
|
|
1921
|
+
let output = await selectOutput();
|
|
1922
|
+
// Under Postgres READ COMMITTED the NOT EXISTS above uses the statement's
|
|
1923
|
+
// snapshot, so an action batch reservation committed while the statement
|
|
1924
|
+
// waited for the row lock is not visible to it. Re-check with a new statement.
|
|
1925
|
+
while (output != null &&
|
|
1926
|
+
this.dbtype === 'Postgres' &&
|
|
1927
|
+
(await this.findReservedActionBatchOutputIds([output.outputId], trx)).length > 0) {
|
|
1928
|
+
excluded.push(output.outputId);
|
|
1929
|
+
output = await selectOutput();
|
|
1524
1930
|
}
|
|
1525
|
-
output ??= await baseQuery()
|
|
1526
|
-
.where('o.satoshis', '>=', targetSatoshis)
|
|
1527
|
-
.orderBy('o.satoshis', 'asc')
|
|
1528
|
-
.orderBy('o.outputId', 'asc')
|
|
1529
|
-
.first();
|
|
1530
|
-
output ??= await baseQuery()
|
|
1531
|
-
.where('o.satoshis', '<', targetSatoshis)
|
|
1532
|
-
.orderBy('o.satoshis', 'desc')
|
|
1533
|
-
.orderBy('o.outputId', 'desc')
|
|
1534
|
-
.first();
|
|
1535
1931
|
if (output == null)
|
|
1536
1932
|
return undefined;
|
|
1537
1933
|
await this.updateOutput(output.outputId, {
|
|
@@ -1591,7 +1987,8 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
1591
1987
|
for (const df of booleanFields) {
|
|
1592
1988
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1593
1989
|
if (entity[df] !== undefined)
|
|
1594
|
-
entity[df] =
|
|
1990
|
+
entity[df] =
|
|
1991
|
+
entity[df] !== 0 && entity[df] != null && entity[df] !== false;
|
|
1595
1992
|
}
|
|
1596
1993
|
}
|
|
1597
1994
|
this.deserialiseFromKnex(entity);
|
|
@@ -1609,165 +2006,122 @@ class StorageKnex extends StorageProvider_1.StorageProvider {
|
|
|
1609
2006
|
return entities;
|
|
1610
2007
|
}
|
|
1611
2008
|
async adminStats(adminIdentityKey) {
|
|
1612
|
-
if (this.dbtype !== 'MySQL')
|
|
1613
|
-
throw new WERR_errors_1.WERR_NOT_IMPLEMENTED('adminStats, only MySQL
|
|
2009
|
+
if (this.dbtype !== 'MySQL' && this.dbtype !== 'Postgres')
|
|
2010
|
+
throw new WERR_errors_1.WERR_NOT_IMPLEMENTED('adminStats, only MySQL and Postgres are supported');
|
|
1614
2011
|
const monitorEvent = (0, utilityHelpers_1.verifyOneOrNone)(await this.findMonitorEvents({
|
|
1615
2012
|
partial: { event: 'MonitorCallHistory' },
|
|
1616
2013
|
orderDescending: true,
|
|
1617
2014
|
paged: { limit: 1 }
|
|
1618
2015
|
}));
|
|
1619
|
-
const monitorStats =
|
|
2016
|
+
const monitorStats = monitorEvent != null ? JSON.parse(monitorEvent.details) : undefined;
|
|
1620
2017
|
const servicesStats = this.getServices().getServicesCallHistory(true);
|
|
1621
|
-
const
|
|
1622
|
-
const
|
|
1623
|
-
const
|
|
1624
|
-
|
|
1625
|
-
|
|
1626
|
-
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
|
|
1630
|
-
|
|
1631
|
-
|
|
1632
|
-
|
|
1633
|
-
|
|
1634
|
-
|
|
1635
|
-
|
|
1636
|
-
|
|
1637
|
-
|
|
1638
|
-
|
|
1639
|
-
|
|
1640
|
-
|
|
1641
|
-
|
|
1642
|
-
|
|
1643
|
-
|
|
1644
|
-
|
|
1645
|
-
|
|
1646
|
-
|
|
1647
|
-
|
|
1648
|
-
|
|
1649
|
-
|
|
1650
|
-
|
|
1651
|
-
|
|
1652
|
-
|
|
1653
|
-
|
|
1654
|
-
|
|
1655
|
-
|
|
1656
|
-
|
|
1657
|
-
|
|
1658
|
-
|
|
1659
|
-
|
|
1660
|
-
|
|
1661
|
-
|
|
1662
|
-
|
|
1663
|
-
|
|
1664
|
-
|
|
1665
|
-
|
|
1666
|
-
|
|
1667
|
-
|
|
1668
|
-
|
|
1669
|
-
|
|
1670
|
-
|
|
1671
|
-
|
|
1672
|
-
|
|
1673
|
-
|
|
1674
|
-
|
|
1675
|
-
(select sum(o.satoshis) from outputs o, transactions t where o.transactionId = t.transactionId and t.status = 'completed' and o.spendable = 1 and o.change = 1 and o.created_at > '${oneWeekAgo}') as satoshisDefaultWeek,
|
|
1676
|
-
(select sum(o.satoshis) from outputs o, transactions t where o.transactionId = t.transactionId and t.status = 'completed' and o.spendable = 1 and o.change = 1 and o.created_at > '${oneMonthAgo}') as satoshisDefaultMonth,
|
|
1677
|
-
(select sum(o.satoshis) from outputs o, transactions t where o.transactionId = t.transactionId and t.status = 'completed' and o.spendable = 1 and o.change = 1) as satoshisDefaultTotal,
|
|
1678
|
-
(select sum(o.satoshis) from outputs o, transactions t where o.transactionId = t.transactionId and t.status = 'completed' and o.spendable = 1 and o.change = 0 and not o.basketId is null and o.created_at > '${oneDayAgo}') as satoshisOtherDay,
|
|
1679
|
-
(select sum(o.satoshis) from outputs o, transactions t where o.transactionId = t.transactionId and t.status = 'completed' and o.spendable = 1 and o.change = 0 and not o.basketId is null and o.created_at > '${oneWeekAgo}') as satoshisOtherWeek,
|
|
1680
|
-
(select sum(o.satoshis) from outputs o, transactions t where o.transactionId = t.transactionId and t.status = 'completed' and o.spendable = 1 and o.change = 0 and not o.basketId is null and o.created_at > '${oneMonthAgo}') as satoshisOtherMonth,
|
|
1681
|
-
(select sum(o.satoshis) from outputs o, transactions t where o.transactionId = t.transactionId and t.status = 'completed' and o.spendable = 1 and o.change = 0 and not o.basketId is null) as satoshisOtherTotal,
|
|
1682
|
-
(select count(*) from output_baskets where created_at > '${oneDayAgo}') as basketsDay,
|
|
1683
|
-
(select count(*) from output_baskets where created_at > '${oneWeekAgo}') as basketsWeek,
|
|
1684
|
-
(select count(*) from output_baskets where created_at > '${oneMonthAgo}') as basketsMonth,
|
|
1685
|
-
(select count(*) from output_baskets) as basketsTotal,
|
|
1686
|
-
(select count(*) from tx_labels where created_at > '${oneDayAgo}') as labelsDay,
|
|
1687
|
-
(select count(*) from tx_labels where created_at > '${oneWeekAgo}') as labelsWeek,
|
|
1688
|
-
(select count(*) from tx_labels where created_at > '${oneMonthAgo}') as labelsMonth,
|
|
1689
|
-
(select count(*) from tx_labels) as labelsTotal,
|
|
1690
|
-
(select count(*) from output_tags where created_at > '${oneDayAgo}') as tagsDay,
|
|
1691
|
-
(select count(*) from output_tags where created_at > '${oneWeekAgo}') as tagsWeek,
|
|
1692
|
-
(select count(*) from output_tags where created_at > '${oneMonthAgo}') as tagsMonth,
|
|
1693
|
-
(select count(*) from output_tags) as tagsTotal
|
|
1694
|
-
`);
|
|
2018
|
+
const day = 24 * 60 * 60 * 1000;
|
|
2019
|
+
const now = Date.now();
|
|
2020
|
+
const periods = [
|
|
2021
|
+
['Day', new Date(now - day)],
|
|
2022
|
+
['Week', new Date(now - 7 * day)],
|
|
2023
|
+
['Month', new Date(now - 30 * day)],
|
|
2024
|
+
['Total', undefined]
|
|
2025
|
+
];
|
|
2026
|
+
const k = this.knex;
|
|
2027
|
+
const count = (table, createdAt = 'created_at') => (since) => {
|
|
2028
|
+
const q = k(table).count('*');
|
|
2029
|
+
if (since != null)
|
|
2030
|
+
void q.where(createdAt, '>', this.validateDateForWhere(since));
|
|
2031
|
+
return q;
|
|
2032
|
+
};
|
|
2033
|
+
const txCount = (status) => (since) => count('transactions')(since).where({ status });
|
|
2034
|
+
const satoshis = (change) => (since) => {
|
|
2035
|
+
const q = k('outputs as o')
|
|
2036
|
+
.join('transactions as t', 'o.transactionId', 't.transactionId')
|
|
2037
|
+
.where({ 't.status': 'completed', 'o.spendable': true, 'o.change': change })
|
|
2038
|
+
.sum('o.satoshis');
|
|
2039
|
+
if (!change)
|
|
2040
|
+
void q.whereNotNull('o.basketId');
|
|
2041
|
+
if (since != null)
|
|
2042
|
+
void q.where('o.created_at', '>', this.validateDateForWhere(since));
|
|
2043
|
+
return q;
|
|
2044
|
+
};
|
|
2045
|
+
const stats = [
|
|
2046
|
+
['users', count('users')],
|
|
2047
|
+
['transactions', count('transactions')],
|
|
2048
|
+
['txCompleted', txCount('completed')],
|
|
2049
|
+
['txFailed', since => txCount('failed')(since).whereNotNull('txid')],
|
|
2050
|
+
['txAbandoned', since => txCount('failed')(since).whereNull('txid')],
|
|
2051
|
+
['txUnprocessed', txCount('unprocessed')],
|
|
2052
|
+
['txSending', txCount('sending')],
|
|
2053
|
+
['txUnproven', txCount('unproven')],
|
|
2054
|
+
['txUnsigned', txCount('unsigned')],
|
|
2055
|
+
['txNosend', txCount('nosend')],
|
|
2056
|
+
['txNonfinal', txCount('nonfinal')],
|
|
2057
|
+
['txUnfail', txCount('unfail')],
|
|
2058
|
+
['satoshisDefault', satoshis(true)],
|
|
2059
|
+
['satoshisOther', satoshis(false)],
|
|
2060
|
+
['baskets', count('output_baskets')],
|
|
2061
|
+
['labels', count('tx_labels')],
|
|
2062
|
+
['tags', count('output_tags')]
|
|
2063
|
+
];
|
|
2064
|
+
// One statement of scalar subqueries; knex quotes the camelCase identifiers per dialect.
|
|
2065
|
+
const columns = {};
|
|
2066
|
+
for (const [name, query] of stats) {
|
|
2067
|
+
for (const [period, since] of periods)
|
|
2068
|
+
columns[`${name}${period}`] = query(since);
|
|
2069
|
+
}
|
|
2070
|
+
const [row] = (await k.select(columns));
|
|
2071
|
+
const values = Object.fromEntries(Object.keys(columns).map(name => [name, Number(row[name] ?? 0)]));
|
|
1695
2072
|
const r = {
|
|
1696
2073
|
monitorStats,
|
|
1697
2074
|
servicesStats,
|
|
1698
2075
|
requestedBy: adminIdentityKey,
|
|
1699
2076
|
when: new Date().toISOString(),
|
|
1700
|
-
|
|
1701
|
-
usersWeek,
|
|
1702
|
-
usersMonth,
|
|
1703
|
-
usersTotal,
|
|
1704
|
-
transactionsDay,
|
|
1705
|
-
transactionsWeek,
|
|
1706
|
-
transactionsMonth,
|
|
1707
|
-
transactionsTotal,
|
|
1708
|
-
txCompletedDay,
|
|
1709
|
-
txCompletedWeek,
|
|
1710
|
-
txCompletedMonth,
|
|
1711
|
-
txCompletedTotal,
|
|
1712
|
-
txFailedDay,
|
|
1713
|
-
txFailedWeek,
|
|
1714
|
-
txFailedMonth,
|
|
1715
|
-
txFailedTotal,
|
|
1716
|
-
txAbandonedDay,
|
|
1717
|
-
txAbandonedWeek,
|
|
1718
|
-
txAbandonedMonth,
|
|
1719
|
-
txAbandonedTotal,
|
|
1720
|
-
txUnprocessedDay,
|
|
1721
|
-
txUnprocessedWeek,
|
|
1722
|
-
txUnprocessedMonth,
|
|
1723
|
-
txUnprocessedTotal,
|
|
1724
|
-
txSendingDay,
|
|
1725
|
-
txSendingWeek,
|
|
1726
|
-
txSendingMonth,
|
|
1727
|
-
txSendingTotal,
|
|
1728
|
-
txUnprovenDay,
|
|
1729
|
-
txUnprovenWeek,
|
|
1730
|
-
txUnprovenMonth,
|
|
1731
|
-
txUnprovenTotal,
|
|
1732
|
-
txUnsignedDay,
|
|
1733
|
-
txUnsignedWeek,
|
|
1734
|
-
txUnsignedMonth,
|
|
1735
|
-
txUnsignedTotal,
|
|
1736
|
-
txNosendDay,
|
|
1737
|
-
txNosendWeek,
|
|
1738
|
-
txNosendMonth,
|
|
1739
|
-
txNosendTotal,
|
|
1740
|
-
txNonfinalDay,
|
|
1741
|
-
txNonfinalWeek,
|
|
1742
|
-
txNonfinalMonth,
|
|
1743
|
-
txNonfinalTotal,
|
|
1744
|
-
txUnfailDay,
|
|
1745
|
-
txUnfailWeek,
|
|
1746
|
-
txUnfailMonth,
|
|
1747
|
-
txUnfailTotal,
|
|
1748
|
-
satoshisDefaultDay: Number(satoshisDefaultDay),
|
|
1749
|
-
satoshisDefaultWeek: Number(satoshisDefaultWeek),
|
|
1750
|
-
satoshisDefaultMonth: Number(satoshisDefaultMonth),
|
|
1751
|
-
satoshisDefaultTotal: Number(satoshisDefaultTotal),
|
|
1752
|
-
satoshisOtherDay: Number(satoshisOtherDay),
|
|
1753
|
-
satoshisOtherWeek: Number(satoshisOtherWeek),
|
|
1754
|
-
satoshisOtherMonth: Number(satoshisOtherMonth),
|
|
1755
|
-
satoshisOtherTotal: Number(satoshisOtherTotal),
|
|
1756
|
-
basketsDay,
|
|
1757
|
-
basketsWeek,
|
|
1758
|
-
basketsMonth,
|
|
1759
|
-
basketsTotal,
|
|
1760
|
-
labelsDay,
|
|
1761
|
-
labelsWeek,
|
|
1762
|
-
labelsMonth,
|
|
1763
|
-
labelsTotal,
|
|
1764
|
-
tagsDay,
|
|
1765
|
-
tagsWeek,
|
|
1766
|
-
tagsMonth,
|
|
1767
|
-
tagsTotal
|
|
2077
|
+
...values
|
|
1768
2078
|
};
|
|
1769
2079
|
return r;
|
|
1770
2080
|
}
|
|
1771
2081
|
}
|
|
1772
2082
|
exports.StorageKnex = StorageKnex;
|
|
2083
|
+
/**
|
|
2084
|
+
* Key columns that give paged queries a deterministic row order. Without an
|
|
2085
|
+
* ORDER BY, Postgres may return the rows of consecutive LIMIT/OFFSET pages in
|
|
2086
|
+
* different orders, so sync chunks could repeat some rows and skip others.
|
|
2087
|
+
*/
|
|
2088
|
+
function pagingOrder(table) {
|
|
2089
|
+
return pagingKey(table).map(column => `${table}.${column}`);
|
|
2090
|
+
}
|
|
2091
|
+
function pagingKey(table) {
|
|
2092
|
+
switch (table) {
|
|
2093
|
+
case 'certificate_fields':
|
|
2094
|
+
return ['certificateId', 'fieldName'];
|
|
2095
|
+
case 'certificates':
|
|
2096
|
+
return ['certificateId'];
|
|
2097
|
+
case 'commissions':
|
|
2098
|
+
return ['commissionId'];
|
|
2099
|
+
case 'monitor_events':
|
|
2100
|
+
return ['id'];
|
|
2101
|
+
case 'output_baskets':
|
|
2102
|
+
return ['basketId'];
|
|
2103
|
+
case 'output_tags':
|
|
2104
|
+
return ['outputTagId'];
|
|
2105
|
+
case 'output_tags_map':
|
|
2106
|
+
return ['outputTagId', 'outputId'];
|
|
2107
|
+
case 'outputs':
|
|
2108
|
+
return ['outputId'];
|
|
2109
|
+
case 'proven_tx_reqs':
|
|
2110
|
+
return ['provenTxReqId'];
|
|
2111
|
+
case 'proven_txs':
|
|
2112
|
+
return ['provenTxId'];
|
|
2113
|
+
case 'sync_states':
|
|
2114
|
+
return ['syncStateId'];
|
|
2115
|
+
case 'transactions':
|
|
2116
|
+
return ['transactionId'];
|
|
2117
|
+
case 'tx_labels':
|
|
2118
|
+
return ['txLabelId'];
|
|
2119
|
+
case 'tx_labels_map':
|
|
2120
|
+
return ['txLabelId', 'transactionId'];
|
|
2121
|
+
case 'users':
|
|
2122
|
+
return ['userId'];
|
|
2123
|
+
default:
|
|
2124
|
+
return [];
|
|
2125
|
+
}
|
|
2126
|
+
}
|
|
1773
2127
|
//# sourceMappingURL=StorageKnex.js.map
|