@bsv/wallet-toolbox 1.1.60 → 1.1.62
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/.prettierrc +1 -1
- package/docs/client.md +39 -5
- package/docs/services.md +1 -0
- package/docs/setup.md +9 -26
- package/docs/storage.md +35 -0
- package/docs/wallet.md +39 -5
- package/out/src/Setup.d.ts.map +1 -1
- package/out/src/Setup.js +6 -16
- package/out/src/Setup.js.map +1 -1
- package/out/src/Wallet.d.ts.map +1 -1
- package/out/src/Wallet.js +4 -11
- package/out/src/Wallet.js.map +1 -1
- package/out/src/monitor/Monitor.d.ts.map +1 -1
- package/out/src/monitor/Monitor.js.map +1 -1
- package/out/src/monitor/MonitorDaemon.d.ts.map +1 -1
- package/out/src/monitor/MonitorDaemon.js +1 -3
- package/out/src/monitor/MonitorDaemon.js.map +1 -1
- package/out/src/monitor/tasks/TaskCheckForProofs.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskCheckForProofs.js +2 -10
- package/out/src/monitor/tasks/TaskCheckForProofs.js.map +1 -1
- package/out/src/monitor/tasks/TaskClock.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskClock.js +1 -1
- package/out/src/monitor/tasks/TaskClock.js.map +1 -1
- package/out/src/monitor/tasks/TaskFailAbandoned.d.ts.map +1 -1
- 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 +1 -2
- package/out/src/monitor/tasks/TaskNewHeader.js.map +1 -1
- package/out/src/monitor/tasks/TaskPurge.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskPurge.js +1 -2
- package/out/src/monitor/tasks/TaskPurge.js.map +1 -1
- package/out/src/monitor/tasks/TaskReviewStatus.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskReviewStatus.js +1 -2
- package/out/src/monitor/tasks/TaskReviewStatus.js.map +1 -1
- package/out/src/monitor/tasks/TaskSendWaiting.d.ts.map +1 -1
- package/out/src/monitor/tasks/TaskSendWaiting.js.map +1 -1
- package/out/src/sdk/CertOps.d.ts.map +1 -1
- package/out/src/sdk/CertOps.js +4 -12
- package/out/src/sdk/CertOps.js.map +1 -1
- package/out/src/sdk/PrivilegedKeyManager.d.ts.map +1 -1
- package/out/src/sdk/PrivilegedKeyManager.js.map +1 -1
- package/out/src/sdk/WERR_errors.d.ts.map +1 -1
- 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 +1 -4
- package/out/src/sdk/WalletError.js.map +1 -1
- package/out/src/sdk/WalletServices.interfaces.d.ts +2 -0
- package/out/src/sdk/WalletServices.interfaces.d.ts.map +1 -1
- package/out/src/sdk/WalletStorage.interfaces.d.ts.map +1 -1
- package/out/src/sdk/__test/CertificateLifeCycle.test.js +1 -3
- package/out/src/sdk/__test/CertificateLifeCycle.test.js.map +1 -1
- package/out/src/sdk/__test/PrivilegedKeyManager.test.js +13 -26
- package/out/src/sdk/__test/PrivilegedKeyManager.test.js.map +1 -1
- package/out/src/sdk/types.d.ts.map +1 -1
- package/out/src/sdk/types.js +2 -10
- package/out/src/sdk/types.js.map +1 -1
- package/out/src/sdk/validationHelpers.d.ts.map +1 -1
- package/out/src/sdk/validationHelpers.js +5 -12
- package/out/src/sdk/validationHelpers.js.map +1 -1
- package/out/src/services/Services.d.ts +1 -0
- package/out/src/services/Services.d.ts.map +1 -1
- package/out/src/services/Services.js +29 -38
- package/out/src/services/Services.js.map +1 -1
- package/out/src/services/__tests/ARC.test.js +9 -0
- package/out/src/services/__tests/ARC.test.js.map +1 -1
- package/out/src/services/__tests/bitrails.test.js.map +1 -1
- package/out/src/services/__tests/getMerklePath.test.js.map +1 -1
- package/out/src/services/__tests/getRawTx.test.js.map +1 -1
- package/out/src/services/__tests/verifyBeef.test.js +2 -1
- package/out/src/services/__tests/verifyBeef.test.js.map +1 -1
- package/out/src/services/chaintracker/ChaintracksChainTracker.d.ts.map +1 -1
- package/out/src/services/chaintracker/ChaintracksChainTracker.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/BlockHeaderApi.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/BlockHeaderApi.js.map +1 -1
- package/out/src/services/chaintracker/chaintracks/ChaintracksServiceClient.d.ts.map +1 -1
- package/out/src/services/chaintracker/chaintracks/ChaintracksServiceClient.js +1 -3
- package/out/src/services/chaintracker/chaintracks/ChaintracksServiceClient.js.map +1 -1
- package/out/src/services/createDefaultWalletServicesOptions.d.ts.map +1 -1
- package/out/src/services/createDefaultWalletServicesOptions.js.map +1 -1
- package/out/src/services/providers/ARC.d.ts.map +1 -1
- package/out/src/services/providers/ARC.js +2 -3
- package/out/src/services/providers/ARC.js.map +1 -1
- package/out/src/services/providers/Bitails.d.ts.map +1 -1
- package/out/src/services/providers/Bitails.js +62 -134
- package/out/src/services/providers/Bitails.js.map +1 -1
- package/out/src/services/providers/SdkWhatsOnChain.d.ts.map +1 -1
- package/out/src/services/providers/SdkWhatsOnChain.js.map +1 -1
- package/out/src/services/providers/WhatsOnChain.d.ts.map +1 -1
- package/out/src/services/providers/WhatsOnChain.js +6 -21
- package/out/src/services/providers/WhatsOnChain.js.map +1 -1
- package/out/src/services/providers/__tests/WhatsOnChain.test.js +1 -2
- package/out/src/services/providers/__tests/WhatsOnChain.test.js.map +1 -1
- package/out/src/services/providers/echangeRates.d.ts.map +1 -1
- package/out/src/services/providers/echangeRates.js.map +1 -1
- package/out/src/signer/WalletSigner.d.ts.map +1 -1
- package/out/src/signer/WalletSigner.js.map +1 -1
- package/out/src/signer/methods/acquireDirectCertificate.d.ts.map +1 -1
- package/out/src/signer/methods/acquireDirectCertificate.js +1 -3
- package/out/src/signer/methods/acquireDirectCertificate.js.map +1 -1
- package/out/src/signer/methods/buildSignableTransaction.d.ts.map +1 -1
- package/out/src/signer/methods/buildSignableTransaction.js +3 -11
- package/out/src/signer/methods/buildSignableTransaction.js.map +1 -1
- package/out/src/signer/methods/createAction.d.ts.map +1 -1
- package/out/src/signer/methods/createAction.js +3 -10
- package/out/src/signer/methods/createAction.js.map +1 -1
- package/out/src/signer/methods/internalizeAction.d.ts.map +1 -1
- package/out/src/signer/methods/internalizeAction.js.map +1 -1
- 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 +2 -7
- package/out/src/signer/methods/signAction.js.map +1 -1
- package/out/src/storage/StorageKnex.d.ts.map +1 -1
- package/out/src/storage/StorageKnex.js +15 -44
- package/out/src/storage/StorageKnex.js.map +1 -1
- package/out/src/storage/StorageProvider.d.ts.map +1 -1
- package/out/src/storage/StorageProvider.js +9 -34
- package/out/src/storage/StorageProvider.js.map +1 -1
- package/out/src/storage/StorageReader.d.ts.map +1 -1
- package/out/src/storage/StorageReader.js.map +1 -1
- package/out/src/storage/StorageReaderWriter.d.ts.map +1 -1
- package/out/src/storage/StorageReaderWriter.js.map +1 -1
- package/out/src/storage/StorageSyncReader.d.ts.map +1 -1
- package/out/src/storage/StorageSyncReader.js.map +1 -1
- package/out/src/storage/WalletStorageManager.d.ts.map +1 -1
- package/out/src/storage/WalletStorageManager.js +5 -10
- package/out/src/storage/WalletStorageManager.js.map +1 -1
- package/out/src/storage/__test/WalletStorageManager.test.js +2 -8
- package/out/src/storage/__test/WalletStorageManager.test.js.map +1 -1
- package/out/src/storage/methods/__test/GenerateChange/generateChangeSdk.test.js +10 -30
- package/out/src/storage/methods/__test/GenerateChange/generateChangeSdk.test.js.map +1 -1
- package/out/src/storage/methods/__test/GenerateChange/randomValsUsed1.d.ts.map +1 -1
- package/out/src/storage/methods/__test/GenerateChange/randomValsUsed1.js +17 -28
- package/out/src/storage/methods/__test/GenerateChange/randomValsUsed1.js.map +1 -1
- package/out/src/storage/methods/attemptToPostReqsToNetwork.d.ts.map +1 -1
- package/out/src/storage/methods/attemptToPostReqsToNetwork.js +6 -20
- package/out/src/storage/methods/attemptToPostReqsToNetwork.js.map +1 -1
- package/out/src/storage/methods/createAction.d.ts.map +1 -1
- package/out/src/storage/methods/createAction.js +4 -9
- package/out/src/storage/methods/createAction.js.map +1 -1
- package/out/src/storage/methods/generateChange.d.ts.map +1 -1
- package/out/src/storage/methods/generateChange.js +7 -18
- package/out/src/storage/methods/generateChange.js.map +1 -1
- package/out/src/storage/methods/getBeefForTransaction.d.ts.map +1 -1
- package/out/src/storage/methods/getBeefForTransaction.js +1 -3
- 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.map +1 -1
- package/out/src/storage/methods/internalizeAction.d.ts.map +1 -1
- package/out/src/storage/methods/internalizeAction.js +2 -9
- package/out/src/storage/methods/internalizeAction.js.map +1 -1
- package/out/src/storage/methods/listActions.d.ts.map +1 -1
- package/out/src/storage/methods/listActions.js +3 -15
- package/out/src/storage/methods/listActions.js.map +1 -1
- 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/listOutputs.d.ts.map +1 -1
- package/out/src/storage/methods/listOutputs.js +5 -12
- package/out/src/storage/methods/listOutputs.js.map +1 -1
- package/out/src/storage/methods/processAction.d.ts.map +1 -1
- package/out/src/storage/methods/processAction.js +4 -10
- 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 +8 -32
- package/out/src/storage/methods/purgeData.js.map +1 -1
- package/out/src/storage/methods/reviewStatus.d.ts.map +1 -1
- package/out/src/storage/methods/reviewStatus.js +1 -3
- package/out/src/storage/methods/reviewStatus.js.map +1 -1
- package/out/src/storage/remoting/StorageClient.d.ts.map +1 -1
- package/out/src/storage/remoting/StorageClient.js +15 -41
- package/out/src/storage/remoting/StorageClient.js.map +1 -1
- package/out/src/storage/remoting/StorageServer.d.ts.map +1 -1
- package/out/src/storage/remoting/StorageServer.js +2 -5
- package/out/src/storage/remoting/StorageServer.js.map +1 -1
- package/out/src/storage/schema/KnexMigrations.d.ts.map +1 -1
- package/out/src/storage/schema/KnexMigrations.js +24 -130
- package/out/src/storage/schema/KnexMigrations.js.map +1 -1
- package/out/src/storage/schema/entities/Certificate.d.ts.map +1 -1
- package/out/src/storage/schema/entities/Certificate.js +1 -1
- package/out/src/storage/schema/entities/Certificate.js.map +1 -1
- package/out/src/storage/schema/entities/CertificateField.d.ts.map +1 -1
- package/out/src/storage/schema/entities/CertificateField.js +2 -5
- package/out/src/storage/schema/entities/CertificateField.js.map +1 -1
- package/out/src/storage/schema/entities/Commission.d.ts.map +1 -1
- package/out/src/storage/schema/entities/Commission.js +2 -5
- package/out/src/storage/schema/entities/Commission.js.map +1 -1
- package/out/src/storage/schema/entities/EntityBase.d.ts.map +1 -1
- package/out/src/storage/schema/entities/EntityBase.js.map +1 -1
- package/out/src/storage/schema/entities/MergeEntity.d.ts.map +1 -1
- package/out/src/storage/schema/entities/MergeEntity.js +14 -9
- package/out/src/storage/schema/entities/MergeEntity.js.map +1 -1
- package/out/src/storage/schema/entities/Output.d.ts.map +1 -1
- package/out/src/storage/schema/entities/Output.js +8 -25
- package/out/src/storage/schema/entities/Output.js.map +1 -1
- package/out/src/storage/schema/entities/OutputBasket.d.ts.map +1 -1
- package/out/src/storage/schema/entities/OutputBasket.js +1 -1
- package/out/src/storage/schema/entities/OutputBasket.js.map +1 -1
- package/out/src/storage/schema/entities/OutputTag.d.ts.map +1 -1
- package/out/src/storage/schema/entities/OutputTag.js +1 -1
- package/out/src/storage/schema/entities/OutputTag.js.map +1 -1
- package/out/src/storage/schema/entities/OutputTagMap.d.ts.map +1 -1
- package/out/src/storage/schema/entities/OutputTagMap.js +3 -7
- package/out/src/storage/schema/entities/OutputTagMap.js.map +1 -1
- package/out/src/storage/schema/entities/ProvenTx.d.ts.map +1 -1
- package/out/src/storage/schema/entities/ProvenTx.js +10 -20
- package/out/src/storage/schema/entities/ProvenTx.js.map +1 -1
- package/out/src/storage/schema/entities/ProvenTxReq.d.ts.map +1 -1
- package/out/src/storage/schema/entities/ProvenTxReq.js +8 -18
- package/out/src/storage/schema/entities/ProvenTxReq.js.map +1 -1
- package/out/src/storage/schema/entities/SyncState.d.ts +1 -0
- package/out/src/storage/schema/entities/SyncState.d.ts.map +1 -1
- package/out/src/storage/schema/entities/SyncState.js +41 -6
- package/out/src/storage/schema/entities/SyncState.js.map +1 -1
- package/out/src/storage/schema/entities/Transaction.d.ts.map +1 -1
- package/out/src/storage/schema/entities/Transaction.js +4 -13
- package/out/src/storage/schema/entities/Transaction.js.map +1 -1
- package/out/src/storage/schema/entities/TxLabel.d.ts.map +1 -1
- package/out/src/storage/schema/entities/TxLabel.js +1 -1
- package/out/src/storage/schema/entities/TxLabel.js.map +1 -1
- package/out/src/storage/schema/entities/TxLabelMap.d.ts.map +1 -1
- package/out/src/storage/schema/entities/TxLabelMap.js +3 -9
- package/out/src/storage/schema/entities/TxLabelMap.js.map +1 -1
- package/out/src/storage/schema/entities/User.d.ts.map +1 -1
- package/out/src/storage/schema/entities/User.js +3 -5
- package/out/src/storage/schema/entities/User.js.map +1 -1
- package/out/src/storage/schema/entities/__tests/CertificateFieldTests.test.js.map +1 -1
- package/out/src/storage/schema/entities/__tests/CertificateTests.test.js.map +1 -1
- package/out/src/storage/schema/entities/__tests/CommissionTests.test.js.map +1 -1
- package/out/src/storage/schema/entities/__tests/OutputBasketTests.test.js.map +1 -1
- package/out/src/storage/schema/entities/__tests/OutputTagMapTests.test.js.map +1 -1
- package/out/src/storage/schema/entities/__tests/OutputTagTests.test.js.map +1 -1
- package/out/src/storage/schema/entities/__tests/OutputTests.test.js.map +1 -1
- package/out/src/storage/schema/entities/__tests/ProvenTxReqTests.test.js.map +1 -1
- package/out/src/storage/schema/entities/__tests/ProvenTxTests.test.js +1 -2
- package/out/src/storage/schema/entities/__tests/ProvenTxTests.test.js.map +1 -1
- package/out/src/storage/schema/entities/__tests/SyncStateTests.test.js.map +1 -1
- package/out/src/storage/schema/entities/__tests/TransactionTests.test.js +2 -2
- package/out/src/storage/schema/entities/__tests/TransactionTests.test.js.map +1 -1
- package/out/src/storage/schema/entities/__tests/TxLabelMapTests.test.js.map +1 -1
- package/out/src/storage/schema/entities/__tests/TxLabelTests.test.js.map +1 -1
- package/out/src/storage/schema/entities/__tests/stampLogTests.test.js.map +1 -1
- package/out/src/storage/schema/entities/__tests/usersTests.test.js.map +1 -1
- package/out/src/storage/schema/tables/TableSettings.d.ts.map +1 -1
- package/out/src/storage/sync/StorageMySQLDojoReader.d.ts.map +1 -1
- package/out/src/storage/sync/StorageMySQLDojoReader.js +1 -3
- package/out/src/storage/sync/StorageMySQLDojoReader.js.map +1 -1
- package/out/src/utility/ScriptTemplateBRC29.d.ts.map +1 -1
- package/out/src/utility/ScriptTemplateBRC29.js +1 -2
- package/out/src/utility/ScriptTemplateBRC29.js.map +1 -1
- package/out/src/utility/stampLog.d.ts.map +1 -1
- package/out/src/utility/stampLog.js.map +1 -1
- package/out/src/utility/tscProofToMerklePath.d.ts.map +1 -1
- package/out/src/utility/tscProofToMerklePath.js.map +1 -1
- package/out/src/utility/utilityHelpers.buffer.d.ts.map +1 -1
- package/out/src/utility/utilityHelpers.buffer.js.map +1 -1
- package/out/src/utility/utilityHelpers.d.ts.map +1 -1
- package/out/src/utility/utilityHelpers.js +1 -3
- package/out/src/utility/utilityHelpers.js.map +1 -1
- package/out/test/Wallet/StorageClient/storageClient.man.test.js.map +1 -1
- package/out/test/Wallet/action/internalizeAction.a.test.js.map +1 -1
- package/out/test/Wallet/certificate/acquireCertificate.test.js.map +1 -1
- package/out/test/Wallet/certificate/listCertificates.test.js.map +1 -1
- package/out/test/Wallet/get/getHeaderForHeight.test.js +2 -6
- package/out/test/Wallet/get/getHeaderForHeight.test.js.map +1 -1
- package/out/test/Wallet/get/getHeight.test.js.map +1 -1
- package/out/test/Wallet/get/getKnownTxids.test.js.map +1 -1
- package/out/test/Wallet/get/getNetwork.test.js.map +1 -1
- package/out/test/Wallet/get/getVersion.test.js.map +1 -1
- package/out/test/Wallet/live/walletLive.man.test.d.ts.map +1 -1
- package/out/test/Wallet/live/walletLive.man.test.js +3 -9
- package/out/test/Wallet/live/walletLive.man.test.js.map +1 -1
- package/out/test/Wallet/local/localWallet.man.test.d.ts.map +1 -1
- package/out/test/Wallet/local/localWallet.man.test.js +39 -31
- package/out/test/Wallet/local/localWallet.man.test.js.map +1 -1
- package/out/test/Wallet/specOps/specOps.man.test.js +1 -4
- package/out/test/Wallet/specOps/specOps.man.test.js.map +1 -1
- package/out/test/Wallet/support/janitor.man.test.js.map +1 -1
- package/out/test/Wallet/sync/Wallet.updateWalletLegacyTestData.man.test.js.map +1 -1
- package/out/test/Wallet/sync/setActive.test.js +73 -50
- package/out/test/Wallet/sync/setActive.test.js.map +1 -1
- package/out/test/checkDB.d.ts.map +1 -1
- package/out/test/checkDB.js.map +1 -1
- package/out/test/examples/backup.man.test.d.ts.map +1 -1
- package/out/test/examples/backup.man.test.js.map +1 -1
- package/out/test/examples/pushdrop.test.d.ts.map +1 -1
- package/out/test/examples/pushdrop.test.js +5 -4
- package/out/test/examples/pushdrop.test.js.map +1 -1
- package/out/test/monitor/Monitor.test.js.map +1 -1
- package/out/test/services/Services.test.js.map +1 -1
- package/out/test/storage/KnexMigrations.test.js.map +1 -1
- package/out/test/storage/StorageMySQLDojoReader.man.test.js +1 -3
- package/out/test/storage/StorageMySQLDojoReader.man.test.js.map +1 -1
- package/out/test/storage/count.test.js.map +1 -1
- package/out/test/storage/find.test.js +5 -10
- package/out/test/storage/find.test.js.map +1 -1
- package/out/test/storage/findLegacy.test.js.map +1 -1
- package/out/test/storage/insert.test.js.map +1 -1
- package/out/test/storage/update.test.js +7 -19
- package/out/test/storage/update.test.js.map +1 -1
- package/out/test/storage/update2.test.js +22 -24
- package/out/test/storage/update2.test.js.map +1 -1
- package/out/test/utils/TestUtilsWalletStorage.d.ts +3 -1
- package/out/test/utils/TestUtilsWalletStorage.d.ts.map +1 -1
- package/out/test/utils/TestUtilsWalletStorage.js +52 -76
- package/out/test/utils/TestUtilsWalletStorage.js.map +1 -1
- package/out/test/wallet/action/abortAction.test.js.map +1 -1
- package/out/test/wallet/action/createAction.test.js +1 -2
- package/out/test/wallet/action/createAction.test.js.map +1 -1
- package/out/test/wallet/action/createAction2.test.d.ts.map +1 -1
- package/out/test/wallet/action/createAction2.test.js +6 -16
- package/out/test/wallet/action/createAction2.test.js.map +1 -1
- package/out/test/wallet/action/createActionToGenerateBeefs.man.test.js.map +1 -1
- package/out/test/wallet/action/internalizeAction.test.js.map +1 -1
- package/out/test/wallet/action/relinquishOutput.test.js.map +1 -1
- package/out/test/wallet/list/listActions.test.js.map +1 -1
- package/out/test/wallet/list/listActions2.test.js.map +1 -1
- package/out/test/wallet/list/listCertificates.test.js +2 -6
- package/out/test/wallet/list/listCertificates.test.js.map +1 -1
- package/out/test/wallet/list/listOutputs.test.js +2 -10
- package/out/test/wallet/list/listOutputs.test.js.map +1 -1
- package/out/test/wallet/sync/Wallet.sync.test.js +4 -6
- package/out/test/wallet/sync/Wallet.sync.test.js.map +1 -1
- package/out/tsconfig.all.tsbuildinfo +1 -1
- package/package.json +3 -3
- package/src/Setup.ts +15 -52
- package/src/Wallet.ts +58 -161
- package/src/monitor/Monitor.ts +7 -22
- package/src/monitor/MonitorDaemon.ts +6 -23
- package/src/monitor/tasks/TaskCheckForProofs.ts +4 -23
- package/src/monitor/tasks/TaskClock.ts +1 -3
- package/src/monitor/tasks/TaskFailAbandoned.ts +1 -3
- package/src/monitor/tasks/TaskNewHeader.ts +1 -4
- package/src/monitor/tasks/TaskPurge.ts +1 -2
- package/src/monitor/tasks/TaskReviewStatus.ts +1 -3
- package/src/monitor/tasks/TaskSendWaiting.ts +3 -10
- package/src/sdk/CertOps.ts +31 -103
- package/src/sdk/PrivilegedKeyManager.ts +18 -48
- package/src/sdk/WERR_errors.ts +6 -25
- package/src/sdk/WalletError.ts +5 -21
- package/src/sdk/WalletServices.interfaces.ts +11 -33
- package/src/sdk/WalletStorage.interfaces.ts +25 -91
- package/src/sdk/__test/CertificateLifeCycle.test.ts +9 -27
- package/src/sdk/__test/PrivilegedKeyManager.test.ts +29 -66
- package/src/sdk/types.ts +6 -26
- package/src/sdk/validationHelpers.ts +111 -402
- package/src/services/Services.ts +51 -114
- package/src/services/__tests/ARC.test.ts +14 -1
- package/src/services/__tests/bitrails.test.ts +4 -15
- package/src/services/__tests/getMerklePath.test.ts +1 -2
- package/src/services/__tests/getRawTx.test.ts +1 -3
- package/src/services/__tests/verifyBeef.test.ts +2 -1
- package/src/services/chaintracker/ChaintracksChainTracker.ts +3 -13
- package/src/services/chaintracker/chaintracks/BlockHeaderApi.ts +4 -12
- package/src/services/chaintracker/chaintracks/ChaintracksServiceClient.ts +9 -27
- package/src/services/createDefaultWalletServicesOptions.ts +2 -5
- package/src/services/processingErrors/arcSuccessError.json +76 -0
- package/src/services/providers/ARC.ts +6 -25
- package/src/services/providers/Bitails.ts +61 -159
- package/src/services/providers/SdkWhatsOnChain.ts +4 -17
- package/src/services/providers/WhatsOnChain.ts +31 -100
- package/src/services/providers/__tests/WhatsOnChain.test.ts +5 -15
- package/src/services/providers/echangeRates.ts +7 -22
- package/src/signer/WalletSigner.ts +1 -5
- package/src/signer/methods/acquireDirectCertificate.ts +1 -4
- package/src/signer/methods/buildSignableTransaction.ts +5 -20
- package/src/signer/methods/createAction.ts +15 -54
- package/src/signer/methods/internalizeAction.ts +10 -39
- package/src/signer/methods/proveCertificate.ts +2 -5
- package/src/signer/methods/signAction.ts +9 -39
- package/src/storage/StorageKnex.ts +166 -499
- package/src/storage/StorageProvider.ts +75 -291
- package/src/storage/StorageReader.ts +20 -65
- package/src/storage/StorageReaderWriter.ts +67 -264
- package/src/storage/StorageSyncReader.ts +2 -5
- package/src/storage/WalletStorageManager.ts +33 -108
- package/src/storage/__test/WalletStorageManager.test.ts +6 -23
- package/src/storage/methods/__test/GenerateChange/generateChangeSdk.test.ts +53 -171
- package/src/storage/methods/__test/GenerateChange/randomValsUsed1.ts +17 -28
- package/src/storage/methods/attemptToPostReqsToNetwork.ts +9 -37
- package/src/storage/methods/createAction.ts +45 -181
- package/src/storage/methods/generateChange.ts +33 -114
- package/src/storage/methods/getBeefForTransaction.ts +7 -37
- package/src/storage/methods/getSyncChunk.ts +18 -69
- package/src/storage/methods/internalizeAction.ts +18 -70
- package/src/storage/methods/listActions.ts +6 -23
- package/src/storage/methods/listCertificates.ts +5 -14
- package/src/storage/methods/listOutputs.ts +15 -69
- package/src/storage/methods/processAction.ts +29 -104
- package/src/storage/methods/purgeData.ts +11 -45
- package/src/storage/methods/reviewStatus.ts +3 -9
- package/src/storage/remoting/StorageClient.ts +43 -146
- package/src/storage/remoting/StorageServer.ts +21 -59
- package/src/storage/schema/KnexMigrations.ts +34 -165
- package/src/storage/schema/entities/Certificate.ts +3 -14
- package/src/storage/schema/entities/CertificateField.ts +6 -28
- package/src/storage/schema/entities/Commission.ts +6 -23
- package/src/storage/schema/entities/EntityBase.ts +1 -6
- package/src/storage/schema/entities/MergeEntity.ts +14 -21
- package/src/storage/schema/entities/Output.ts +10 -39
- package/src/storage/schema/entities/OutputBasket.ts +4 -16
- package/src/storage/schema/entities/OutputTag.ts +4 -17
- package/src/storage/schema/entities/OutputTagMap.ts +7 -30
- package/src/storage/schema/entities/ProvenTx.ts +16 -57
- package/src/storage/schema/entities/ProvenTxReq.ts +29 -93
- package/src/storage/schema/entities/SyncState.ts +64 -116
- package/src/storage/schema/entities/Transaction.ts +10 -35
- package/src/storage/schema/entities/TxLabel.ts +4 -17
- package/src/storage/schema/entities/TxLabelMap.ts +6 -28
- package/src/storage/schema/entities/User.ts +8 -31
- package/src/storage/schema/entities/__tests/CertificateFieldTests.test.ts +23 -54
- package/src/storage/schema/entities/__tests/CertificateTests.test.ts +26 -59
- package/src/storage/schema/entities/__tests/CommissionTests.test.ts +2 -11
- package/src/storage/schema/entities/__tests/OutputBasketTests.test.ts +2 -10
- package/src/storage/schema/entities/__tests/OutputTagMapTests.test.ts +2 -10
- package/src/storage/schema/entities/__tests/OutputTagTests.test.ts +1 -4
- package/src/storage/schema/entities/__tests/OutputTests.test.ts +3 -14
- package/src/storage/schema/entities/__tests/ProvenTxReqTests.test.ts +4 -16
- package/src/storage/schema/entities/__tests/ProvenTxTests.test.ts +5 -18
- package/src/storage/schema/entities/__tests/SyncStateTests.test.ts +5 -26
- package/src/storage/schema/entities/__tests/TransactionTests.test.ts +12 -48
- package/src/storage/schema/entities/__tests/TxLabelMapTests.test.ts +4 -22
- package/src/storage/schema/entities/__tests/TxLabelTests.test.ts +2 -10
- package/src/storage/schema/entities/__tests/stampLogTests.test.ts +3 -10
- package/src/storage/schema/entities/__tests/usersTests.test.ts +4 -7
- package/src/storage/schema/tables/TableSettings.ts +1 -3
- package/src/storage/sync/StorageMySQLDojoReader.ts +47 -148
- package/src/utility/ScriptTemplateBRC29.ts +2 -11
- package/src/utility/stampLog.ts +2 -6
- package/src/utility/tscProofToMerklePath.ts +1 -4
- package/src/utility/utilityHelpers.buffer.ts +3 -12
- package/src/utility/utilityHelpers.ts +14 -49
- package/test/Wallet/StorageClient/storageClient.man.test.ts +2 -8
- package/test/Wallet/action/internalizeAction.a.test.ts +8 -23
- package/test/Wallet/certificate/acquireCertificate.test.ts +10 -24
- package/test/Wallet/certificate/listCertificates.test.ts +8 -18
- package/test/Wallet/get/getHeaderForHeight.test.ts +4 -15
- package/test/Wallet/get/getHeight.test.ts +2 -6
- package/test/Wallet/get/getKnownTxids.test.ts +1 -5
- package/test/Wallet/get/getNetwork.test.ts +1 -2
- package/test/Wallet/get/getVersion.test.ts +1 -2
- package/test/Wallet/live/walletLive.man.test.ts +14 -41
- package/test/Wallet/local/localWallet.man.test.ts +45 -102
- package/test/Wallet/specOps/specOps.man.test.ts +4 -13
- package/test/Wallet/support/janitor.man.test.ts +2 -7
- package/test/Wallet/sync/Wallet.updateWalletLegacyTestData.man.test.ts +11 -34
- package/test/Wallet/sync/setActive.test.ts +75 -61
- package/test/checkDB.ts +2 -8
- package/test/examples/backup.man.test.ts +2 -9
- package/test/examples/pushdrop.test.ts +7 -20
- package/test/monitor/Monitor.test.ts +33 -87
- package/test/services/Services.test.ts +8 -19
- package/test/storage/KnexMigrations.test.ts +3 -18
- package/test/storage/StorageMySQLDojoReader.man.test.ts +4 -15
- package/test/storage/count.test.ts +7 -24
- package/test/storage/find.test.ts +7 -29
- package/test/storage/findLegacy.test.ts +2 -5
- package/test/storage/insert.test.ts +3 -19
- package/test/storage/update.test.ts +47 -179
- package/test/storage/update2.test.ts +54 -176
- package/test/utils/TestUtilsWalletStorage.ts +139 -372
- package/test/wallet/action/abortAction.test.ts +4 -12
- package/test/wallet/action/createAction.test.ts +4 -14
- package/test/wallet/action/createAction2.test.ts +74 -208
- package/test/wallet/action/createActionToGenerateBeefs.man.test.ts +8 -11
- package/test/wallet/action/internalizeAction.test.ts +20 -72
- package/test/wallet/action/relinquishOutput.test.ts +3 -9
- package/test/wallet/list/listActions.test.ts +2 -9
- package/test/wallet/list/listActions2.test.ts +8 -34
- package/test/wallet/list/listCertificates.test.ts +5 -16
- package/test/wallet/list/listOutputs.test.ts +15 -54
- package/test/wallet/sync/Wallet.sync.test.ts +18 -49
|
@@ -88,10 +88,7 @@ export class MonitorDaemon {
|
|
|
88
88
|
if (a.storageProvider) {
|
|
89
89
|
await a.storageProvider.makeAvailable()
|
|
90
90
|
const settings = await a.storageProvider.getSettings()
|
|
91
|
-
a.storageManager = new WalletStorageManager(
|
|
92
|
-
settings.storageIdentityKey,
|
|
93
|
-
a.storageProvider
|
|
94
|
-
)
|
|
91
|
+
a.storageManager = new WalletStorageManager(settings.storageIdentityKey, a.storageProvider)
|
|
95
92
|
await a.storageManager.makeAvailable()
|
|
96
93
|
} else if (!a.storageManager) {
|
|
97
94
|
throw new sdk.WERR_INVALID_PARAMETER(
|
|
@@ -102,10 +99,7 @@ export class MonitorDaemon {
|
|
|
102
99
|
|
|
103
100
|
if (a.servicesOptions) {
|
|
104
101
|
if (a.servicesOptions.chain != a.chain)
|
|
105
|
-
throw new sdk.WERR_INVALID_PARAMETER(
|
|
106
|
-
'serviceOptions.chain',
|
|
107
|
-
'same as args.chain'
|
|
108
|
-
)
|
|
102
|
+
throw new sdk.WERR_INVALID_PARAMETER('serviceOptions.chain', 'same as args.chain')
|
|
109
103
|
a.services = new Services(a.servicesOptions)
|
|
110
104
|
}
|
|
111
105
|
|
|
@@ -115,11 +109,7 @@ export class MonitorDaemon {
|
|
|
115
109
|
|
|
116
110
|
a.storageManager.setServices(a.services)
|
|
117
111
|
|
|
118
|
-
const monitorOptions = Monitor.createDefaultWalletMonitorOptions(
|
|
119
|
-
a.chain,
|
|
120
|
-
a.storageManager,
|
|
121
|
-
a.services
|
|
122
|
-
)
|
|
112
|
+
const monitorOptions = Monitor.createDefaultWalletMonitorOptions(a.chain, a.storageManager, a.services)
|
|
123
113
|
a.monitor = new Monitor(monitorOptions)
|
|
124
114
|
}
|
|
125
115
|
|
|
@@ -130,8 +120,7 @@ export class MonitorDaemon {
|
|
|
130
120
|
|
|
131
121
|
async start(): Promise<void> {
|
|
132
122
|
if (!this.setup) await this.createSetup()
|
|
133
|
-
if (!this.setup?.monitor)
|
|
134
|
-
throw new sdk.WERR_INTERNAL('createSetup failed to initialize setup')
|
|
123
|
+
if (!this.setup?.monitor) throw new sdk.WERR_INTERNAL('createSetup failed to initialize setup')
|
|
135
124
|
|
|
136
125
|
const { monitor } = this.setup
|
|
137
126
|
|
|
@@ -144,11 +133,7 @@ export class MonitorDaemon {
|
|
|
144
133
|
async stop(): Promise<void> {
|
|
145
134
|
console.log('start of stop')
|
|
146
135
|
|
|
147
|
-
if (
|
|
148
|
-
!this.setup ||
|
|
149
|
-
(!this.doneTasks && !this.noRunTasks) ||
|
|
150
|
-
!this.doneListening
|
|
151
|
-
)
|
|
136
|
+
if (!this.setup || (!this.doneTasks && !this.noRunTasks) || !this.doneListening)
|
|
152
137
|
throw new sdk.WERR_INTERNAL('call start or createSetup first')
|
|
153
138
|
|
|
154
139
|
const { monitor } = this.setup
|
|
@@ -189,9 +174,7 @@ export class MonitorDaemon {
|
|
|
189
174
|
console.log('done')
|
|
190
175
|
} catch (eu: unknown) {
|
|
191
176
|
const e = sdk.WalletError.fromUnknown(eu)
|
|
192
|
-
console.log(
|
|
193
|
-
`\n\nrunWatchman Main Error Handler\n\ncode: ${e.code}\nDescription: ${e.description}\n\n\n`
|
|
194
|
-
)
|
|
177
|
+
console.log(`\n\nrunWatchman Main Error Handler\n\ncode: ${e.code}\nDescription: ${e.description}\n\n\n`)
|
|
195
178
|
}
|
|
196
179
|
}
|
|
197
180
|
}
|
|
@@ -1,11 +1,4 @@
|
|
|
1
|
-
import {
|
|
2
|
-
asString,
|
|
3
|
-
doubleSha256BE,
|
|
4
|
-
EntityProvenTx,
|
|
5
|
-
EntityProvenTxReq,
|
|
6
|
-
sdk,
|
|
7
|
-
TableProvenTxReq
|
|
8
|
-
} from '../../index.client'
|
|
1
|
+
import { asString, doubleSha256BE, EntityProvenTx, EntityProvenTxReq, sdk, TableProvenTxReq } from '../../index.client'
|
|
9
2
|
import { Monitor } from '../Monitor'
|
|
10
3
|
import { WalletMonitorTask } from './WalletMonitorTask'
|
|
11
4
|
|
|
@@ -45,8 +38,7 @@ export class TaskCheckForProofs extends WalletMonitorTask {
|
|
|
45
38
|
return {
|
|
46
39
|
run:
|
|
47
40
|
TaskCheckForProofs.checkNow ||
|
|
48
|
-
(this.triggerMsecs > 0 &&
|
|
49
|
-
nowMsecsSinceEpoch - this.lastRunMsecsSinceEpoch > this.triggerMsecs)
|
|
41
|
+
(this.triggerMsecs > 0 && nowMsecsSinceEpoch - this.lastRunMsecsSinceEpoch > this.triggerMsecs)
|
|
50
42
|
}
|
|
51
43
|
}
|
|
52
44
|
|
|
@@ -60,14 +52,7 @@ export class TaskCheckForProofs extends WalletMonitorTask {
|
|
|
60
52
|
for (;;) {
|
|
61
53
|
const reqs = await this.storage.findProvenTxReqs({
|
|
62
54
|
partial: {},
|
|
63
|
-
status: [
|
|
64
|
-
'callback',
|
|
65
|
-
'unmined',
|
|
66
|
-
'nosend',
|
|
67
|
-
'sending',
|
|
68
|
-
'unknown',
|
|
69
|
-
'unconfirmed'
|
|
70
|
-
],
|
|
55
|
+
status: ['callback', 'unmined', 'nosend', 'sending', 'unknown', 'unconfirmed'],
|
|
71
56
|
paged: { limit, offset }
|
|
72
57
|
})
|
|
73
58
|
if (reqs.length === 0) break
|
|
@@ -189,11 +174,7 @@ export class TaskCheckForProofs extends WalletMonitorTask {
|
|
|
189
174
|
// one more time.
|
|
190
175
|
//
|
|
191
176
|
r = await this.monitor.services.getMerklePath(req.txid)
|
|
192
|
-
ptx = await EntityProvenTx.fromReq(
|
|
193
|
-
req,
|
|
194
|
-
r,
|
|
195
|
-
countsAsAttempt && req.status !== 'nosend'
|
|
196
|
-
)
|
|
177
|
+
ptx = await EntityProvenTx.fromReq(req, r, countsAsAttempt && req.status !== 'nosend')
|
|
197
178
|
|
|
198
179
|
if (ptx) {
|
|
199
180
|
// We have a merklePath proof for the request (and a block header)
|
|
@@ -28,8 +28,6 @@ export class TaskClock extends WalletMonitorTask {
|
|
|
28
28
|
}
|
|
29
29
|
|
|
30
30
|
getNextMinute(): number {
|
|
31
|
-
return (
|
|
32
|
-
Math.ceil(Date.now() / this.monitor.oneMinute) * this.monitor.oneMinute
|
|
33
|
-
)
|
|
31
|
+
return Math.ceil(Date.now() / this.monitor.oneMinute) * this.monitor.oneMinute
|
|
34
32
|
}
|
|
35
33
|
}
|
|
@@ -32,9 +32,7 @@ export class TaskFailAbandoned extends WalletMonitorTask {
|
|
|
32
32
|
let offset = 0
|
|
33
33
|
for (;;) {
|
|
34
34
|
const now = new Date()
|
|
35
|
-
const abandoned = new Date(
|
|
36
|
-
now.getTime() - this.monitor.options.abandonedMsecs
|
|
37
|
-
)
|
|
35
|
+
const abandoned = new Date(now.getTime() - this.monitor.options.abandonedMsecs)
|
|
38
36
|
const done = await this.storage.runAsStorageProvider(async sp => {
|
|
39
37
|
const txsAll = await sp.findTransactions({
|
|
40
38
|
partial: {},
|
|
@@ -34,10 +34,7 @@ export class TaskNewHeader extends WalletMonitorTask {
|
|
|
34
34
|
const skip = this.header.height - oldHeader.height - 1
|
|
35
35
|
const skipped = skip > 0 ? ` SKIPPED ${skip}` : ''
|
|
36
36
|
log = `new header: ${this.header.height} ${this.header.hash}${skipped}`
|
|
37
|
-
} else if (
|
|
38
|
-
oldHeader.height === this.header.height &&
|
|
39
|
-
oldHeader.hash != this.header.hash
|
|
40
|
-
) {
|
|
37
|
+
} else if (oldHeader.height === this.header.height && oldHeader.hash != this.header.hash) {
|
|
41
38
|
log = `reorg header: ${this.header.height} ${this.header.hash}`
|
|
42
39
|
} else {
|
|
43
40
|
isNew = false
|
|
@@ -49,8 +49,7 @@ export class TaskPurge extends WalletMonitorTask {
|
|
|
49
49
|
return {
|
|
50
50
|
run:
|
|
51
51
|
TaskPurge.checkNow ||
|
|
52
|
-
(this.triggerMsecs > 0 &&
|
|
53
|
-
nowMsecsSinceEpoch - this.lastRunMsecsSinceEpoch > this.triggerMsecs)
|
|
52
|
+
(this.triggerMsecs > 0 && nowMsecsSinceEpoch - this.lastRunMsecsSinceEpoch > this.triggerMsecs)
|
|
54
53
|
}
|
|
55
54
|
}
|
|
56
55
|
|
|
@@ -29,9 +29,7 @@ export class TaskReviewStatus extends WalletMonitorTask {
|
|
|
29
29
|
|
|
30
30
|
trigger(nowMsecsSinceEpoch: number): { run: boolean } {
|
|
31
31
|
return {
|
|
32
|
-
run:
|
|
33
|
-
this.triggerMsecs > 0 &&
|
|
34
|
-
nowMsecsSinceEpoch - this.lastRunMsecsSinceEpoch > this.triggerMsecs
|
|
32
|
+
run: this.triggerMsecs > 0 && nowMsecsSinceEpoch - this.lastRunMsecsSinceEpoch > this.triggerMsecs
|
|
35
33
|
}
|
|
36
34
|
}
|
|
37
35
|
|
|
@@ -34,9 +34,7 @@ export class TaskSendWaiting extends WalletMonitorTask {
|
|
|
34
34
|
})
|
|
35
35
|
if (reqs.length === 0) break
|
|
36
36
|
log += `${reqs.length} reqs with status 'unsent'\n`
|
|
37
|
-
const agedReqs = reqs.filter(
|
|
38
|
-
req => verifyTruthy(req.updated_at) < agedLimit
|
|
39
|
-
)
|
|
37
|
+
const agedReqs = reqs.filter(req => verifyTruthy(req.updated_at) < agedLimit)
|
|
40
38
|
log += ` Of those reqs, ${agedReqs.length} where last updated before ${agedLimit.toISOString()}.\n`
|
|
41
39
|
log += await this.processUnsent(agedReqs, 2)
|
|
42
40
|
if (reqs.length < limit) break
|
|
@@ -62,10 +60,7 @@ export class TaskSendWaiting extends WalletMonitorTask {
|
|
|
62
60
|
*
|
|
63
61
|
* @param reqApis
|
|
64
62
|
*/
|
|
65
|
-
async processUnsent(
|
|
66
|
-
reqApis: TableProvenTxReq[],
|
|
67
|
-
indent = 0
|
|
68
|
-
): Promise<string> {
|
|
63
|
+
async processUnsent(reqApis: TableProvenTxReq[], indent = 0): Promise<string> {
|
|
69
64
|
let log = ''
|
|
70
65
|
for (let i = 0; i < reqApis.length; i++) {
|
|
71
66
|
const reqApi = reqApis[i]
|
|
@@ -84,9 +79,7 @@ export class TaskSendWaiting extends WalletMonitorTask {
|
|
|
84
79
|
})
|
|
85
80
|
for (const bra of batchReqApis) {
|
|
86
81
|
// Remove any matching batchReqApis from reqApis
|
|
87
|
-
const index = reqApis.findIndex(
|
|
88
|
-
ra => ra.provenTxReqId === bra.provenTxReqId
|
|
89
|
-
)
|
|
82
|
+
const index = reqApis.findIndex(ra => ra.provenTxReqId === bra.provenTxReqId)
|
|
90
83
|
if (index > -1) reqApis.slice(index, index + 1)
|
|
91
84
|
// And add to reqs being processed now:
|
|
92
85
|
reqs.push(new EntityProvenTxReq(bra))
|
package/src/sdk/CertOps.ts
CHANGED
|
@@ -23,14 +23,8 @@ export interface CertOpsWallet {
|
|
|
23
23
|
args: GetPublicKeyArgs,
|
|
24
24
|
originator?: OriginatorDomainNameStringUnder250Bytes
|
|
25
25
|
): Promise<GetPublicKeyResult>
|
|
26
|
-
encrypt(
|
|
27
|
-
|
|
28
|
-
originator?: OriginatorDomainNameStringUnder250Bytes
|
|
29
|
-
): Promise<WalletEncryptResult>
|
|
30
|
-
decrypt(
|
|
31
|
-
args: WalletDecryptArgs,
|
|
32
|
-
originator?: OriginatorDomainNameStringUnder250Bytes
|
|
33
|
-
): Promise<WalletDecryptResult>
|
|
26
|
+
encrypt(args: WalletEncryptArgs, originator?: OriginatorDomainNameStringUnder250Bytes): Promise<WalletEncryptResult>
|
|
27
|
+
decrypt(args: WalletDecryptArgs, originator?: OriginatorDomainNameStringUnder250Bytes): Promise<WalletDecryptResult>
|
|
34
28
|
}
|
|
35
29
|
|
|
36
30
|
export class CertOps extends BsvCertificate {
|
|
@@ -42,15 +36,7 @@ export class CertOps extends BsvCertificate {
|
|
|
42
36
|
public wallet: CertOpsWallet,
|
|
43
37
|
wc: WalletCertificate
|
|
44
38
|
) {
|
|
45
|
-
super(
|
|
46
|
-
wc.type,
|
|
47
|
-
wc.serialNumber,
|
|
48
|
-
wc.subject,
|
|
49
|
-
wc.certifier,
|
|
50
|
-
wc.revocationOutpoint,
|
|
51
|
-
wc.fields,
|
|
52
|
-
wc.signature
|
|
53
|
-
)
|
|
39
|
+
super(wc.type, wc.serialNumber, wc.subject, wc.certifier, wc.revocationOutpoint, wc.fields, wc.signature)
|
|
54
40
|
}
|
|
55
41
|
|
|
56
42
|
static async fromCounterparty(
|
|
@@ -96,13 +82,9 @@ export class CertOps extends BsvCertificate {
|
|
|
96
82
|
return c
|
|
97
83
|
}
|
|
98
84
|
|
|
99
|
-
static async fromDecrypted(
|
|
100
|
-
wallet: CertOpsWallet,
|
|
101
|
-
wc: WalletCertificate
|
|
102
|
-
): Promise<CertOps> {
|
|
85
|
+
static async fromDecrypted(wallet: CertOpsWallet, wc: WalletCertificate): Promise<CertOps> {
|
|
103
86
|
const c = new CertOps(wallet, wc)
|
|
104
|
-
;({ fields: c._encryptedFields, keyring: c._keyring } =
|
|
105
|
-
await c.encryptFields())
|
|
87
|
+
;({ fields: c._encryptedFields, keyring: c._keyring } = await c.encryptFields())
|
|
106
88
|
c._decryptedFields = await c.decryptFields()
|
|
107
89
|
return c
|
|
108
90
|
}
|
|
@@ -129,15 +111,8 @@ export class CertOps extends BsvCertificate {
|
|
|
129
111
|
certificate: WalletCertificate
|
|
130
112
|
keyring: Record<CertificateFieldNameUnder50Bytes, string>
|
|
131
113
|
} {
|
|
132
|
-
if (
|
|
133
|
-
|
|
134
|
-
!this._encryptedFields ||
|
|
135
|
-
!this.signature ||
|
|
136
|
-
this.signature.length === 0
|
|
137
|
-
)
|
|
138
|
-
throw new WERR_INVALID_OPERATION(
|
|
139
|
-
`Certificate must be encrypted and signed prior to export.`
|
|
140
|
-
)
|
|
114
|
+
if (!this._keyring || !this._encryptedFields || !this.signature || this.signature.length === 0)
|
|
115
|
+
throw new WERR_INVALID_OPERATION(`Certificate must be encrypted and signed prior to export.`)
|
|
141
116
|
const certificate = this.toWalletCertificate()
|
|
142
117
|
const keyring = this._keyring!
|
|
143
118
|
return { certificate, keyring }
|
|
@@ -155,30 +130,19 @@ export class CertOps extends BsvCertificate {
|
|
|
155
130
|
fields: Record<CertificateFieldNameUnder50Bytes, string>
|
|
156
131
|
keyring: Record<CertificateFieldNameUnder50Bytes, string>
|
|
157
132
|
}> {
|
|
158
|
-
const fields: Record<CertificateFieldNameUnder50Bytes, string> =
|
|
159
|
-
|
|
160
|
-
const encryptedFields: Record<
|
|
161
|
-
CertificateFieldNameUnder50Bytes,
|
|
162
|
-
Base64String
|
|
163
|
-
> = {}
|
|
133
|
+
const fields: Record<CertificateFieldNameUnder50Bytes, string> = this._decryptedFields || this.fields
|
|
134
|
+
const encryptedFields: Record<CertificateFieldNameUnder50Bytes, Base64String> = {}
|
|
164
135
|
const keyring: Record<CertificateFieldNameUnder50Bytes, Base64String> = {}
|
|
165
136
|
|
|
166
137
|
for (const fieldName of Object.keys(fields)) {
|
|
167
138
|
const fieldSymmetricKey = SymmetricKey.fromRandom()
|
|
168
|
-
const encryptedFieldValue = fieldSymmetricKey.encrypt(
|
|
169
|
-
|
|
170
|
-
)
|
|
171
|
-
encryptedFields[fieldName] = Utils.toBase64(
|
|
172
|
-
encryptedFieldValue as number[]
|
|
173
|
-
)
|
|
139
|
+
const encryptedFieldValue = fieldSymmetricKey.encrypt(Utils.toArray(this.fields[fieldName], 'utf8'))
|
|
140
|
+
encryptedFields[fieldName] = Utils.toBase64(encryptedFieldValue as number[])
|
|
174
141
|
|
|
175
142
|
const encryptedFieldKey = await this.wallet.encrypt({
|
|
176
143
|
plaintext: fieldSymmetricKey.toArray(),
|
|
177
144
|
counterparty,
|
|
178
|
-
...CertOps.getProtocolForCertificateFieldEncryption(
|
|
179
|
-
this.serialNumber,
|
|
180
|
-
fieldName
|
|
181
|
-
)
|
|
145
|
+
...CertOps.getProtocolForCertificateFieldEncryption(this.serialNumber, fieldName)
|
|
182
146
|
})
|
|
183
147
|
keyring[fieldName] = Utils.toBase64(encryptedFieldKey.ciphertext)
|
|
184
148
|
}
|
|
@@ -193,8 +157,7 @@ export class CertOps extends BsvCertificate {
|
|
|
193
157
|
keyring?: Record<CertificateFieldNameUnder50Bytes, string>
|
|
194
158
|
): Promise<Record<CertificateFieldNameUnder50Bytes, string>> {
|
|
195
159
|
keyring ||= this._keyring
|
|
196
|
-
const fields: Record<CertificateFieldNameUnder50Bytes, Base64String> =
|
|
197
|
-
this._encryptedFields || this.fields
|
|
160
|
+
const fields: Record<CertificateFieldNameUnder50Bytes, Base64String> = this._encryptedFields || this.fields
|
|
198
161
|
const decryptedFields: Record<CertificateFieldNameUnder50Bytes, string> = {}
|
|
199
162
|
if (!keyring) throw new sdk.WERR_INVALID_PARAMETER('keyring', 'valid')
|
|
200
163
|
|
|
@@ -203,15 +166,10 @@ export class CertOps extends BsvCertificate {
|
|
|
203
166
|
const { plaintext: fieldRevelationKey } = await this.wallet.decrypt({
|
|
204
167
|
ciphertext: Utils.toArray(keyring[fieldName], 'base64'),
|
|
205
168
|
counterparty: counterparty || this.subject,
|
|
206
|
-
...CertOps.getProtocolForCertificateFieldEncryption(
|
|
207
|
-
this.serialNumber,
|
|
208
|
-
fieldName
|
|
209
|
-
)
|
|
169
|
+
...CertOps.getProtocolForCertificateFieldEncryption(this.serialNumber, fieldName)
|
|
210
170
|
})
|
|
211
171
|
|
|
212
|
-
const fieldValue = new SymmetricKey(fieldRevelationKey).decrypt(
|
|
213
|
-
Utils.toArray(fields[fieldName], 'base64')
|
|
214
|
-
)
|
|
172
|
+
const fieldValue = new SymmetricKey(fieldRevelationKey).decrypt(Utils.toArray(fields[fieldName], 'base64'))
|
|
215
173
|
decryptedFields[fieldName] = Utils.toUTF8(fieldValue as number[])
|
|
216
174
|
}
|
|
217
175
|
this._keyring = keyring
|
|
@@ -233,20 +191,10 @@ export class CertOps extends BsvCertificate {
|
|
|
233
191
|
keyring: Record<CertificateFieldNameUnder50Bytes, string>
|
|
234
192
|
counterparty: PubKeyHex
|
|
235
193
|
}> {
|
|
236
|
-
if (
|
|
237
|
-
|
|
238
|
-
!this._encryptedFields ||
|
|
239
|
-
!this.signature ||
|
|
240
|
-
this.signature.length === 0
|
|
241
|
-
)
|
|
242
|
-
throw new WERR_INVALID_OPERATION(
|
|
243
|
-
`Certificate must be encrypted and signed prior to export.`
|
|
244
|
-
)
|
|
194
|
+
if (!this._keyring || !this._encryptedFields || !this.signature || this.signature.length === 0)
|
|
195
|
+
throw new WERR_INVALID_OPERATION(`Certificate must be encrypted and signed prior to export.`)
|
|
245
196
|
const certificate = this.toWalletCertificate()
|
|
246
|
-
const keyring = await this.createKeyringForVerifier(
|
|
247
|
-
counterparty,
|
|
248
|
-
fieldsToReveal
|
|
249
|
-
)
|
|
197
|
+
const keyring = await this.createKeyringForVerifier(counterparty, fieldsToReveal)
|
|
250
198
|
// The exported counterparty is who we are to them...
|
|
251
199
|
return {
|
|
252
200
|
certificate,
|
|
@@ -272,24 +220,14 @@ export class CertOps extends BsvCertificate {
|
|
|
272
220
|
verifierIdentityKey: PubKeyHex,
|
|
273
221
|
fieldsToReveal: CertificateFieldNameUnder50Bytes[]
|
|
274
222
|
): Promise<Record<CertificateFieldNameUnder50Bytes, Base64String>> {
|
|
275
|
-
if (!this._keyring || !this._encryptedFields)
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
!Array.isArray(fieldsToReveal) ||
|
|
279
|
-
fieldsToReveal.some(n => this._encryptedFields![n] === undefined)
|
|
280
|
-
)
|
|
281
|
-
throw new sdk.WERR_INVALID_PARAMETER(
|
|
282
|
-
'fieldsToReveal',
|
|
283
|
-
`an array of certificate field names`
|
|
284
|
-
)
|
|
223
|
+
if (!this._keyring || !this._encryptedFields) throw new sdk.WERR_INVALID_OPERATION(`certificate must be encrypted`)
|
|
224
|
+
if (!Array.isArray(fieldsToReveal) || fieldsToReveal.some(n => this._encryptedFields![n] === undefined))
|
|
225
|
+
throw new sdk.WERR_INVALID_PARAMETER('fieldsToReveal', `an array of certificate field names`)
|
|
285
226
|
const fieldRevelationKeyring = {}
|
|
286
227
|
for (const fieldName of fieldsToReveal) {
|
|
287
228
|
// Create a keyID
|
|
288
229
|
const encryptedFieldKey = this._keyring[fieldName]
|
|
289
|
-
const protocol = CertOps.getProtocolForCertificateFieldEncryption(
|
|
290
|
-
this.serialNumber,
|
|
291
|
-
fieldName
|
|
292
|
-
)
|
|
230
|
+
const protocol = CertOps.getProtocolForCertificateFieldEncryption(this.serialNumber, fieldName)
|
|
293
231
|
|
|
294
232
|
// Decrypt the master field key
|
|
295
233
|
const { plaintext: fieldKey } = await this.wallet.decrypt({
|
|
@@ -300,27 +238,20 @@ export class CertOps extends BsvCertificate {
|
|
|
300
238
|
|
|
301
239
|
// Verify that derived key actually decrypts requested field
|
|
302
240
|
try {
|
|
303
|
-
new SymmetricKey(fieldKey).decrypt(
|
|
304
|
-
Utils.toArray(this.fields[fieldName], 'base64')
|
|
305
|
-
)
|
|
241
|
+
new SymmetricKey(fieldKey).decrypt(Utils.toArray(this.fields[fieldName], 'base64'))
|
|
306
242
|
} catch (_) {
|
|
307
|
-
throw new sdk.WERR_INTERNAL(
|
|
308
|
-
`unable to decrypt field "${fieldName}" using derived field key.`
|
|
309
|
-
)
|
|
243
|
+
throw new sdk.WERR_INTERNAL(`unable to decrypt field "${fieldName}" using derived field key.`)
|
|
310
244
|
}
|
|
311
245
|
|
|
312
246
|
// Encrypt derived fieldRevelationKey for verifier
|
|
313
|
-
const { ciphertext: encryptedFieldRevelationKey } =
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
})
|
|
247
|
+
const { ciphertext: encryptedFieldRevelationKey } = await this.wallet.encrypt({
|
|
248
|
+
plaintext: fieldKey,
|
|
249
|
+
counterparty: verifierIdentityKey,
|
|
250
|
+
...protocol
|
|
251
|
+
})
|
|
319
252
|
|
|
320
253
|
// Add encryptedFieldRevelationKey to fieldRevelationKeyring
|
|
321
|
-
fieldRevelationKeyring[fieldName] = Utils.toBase64(
|
|
322
|
-
encryptedFieldRevelationKey
|
|
323
|
-
)
|
|
254
|
+
fieldRevelationKeyring[fieldName] = Utils.toBase64(encryptedFieldRevelationKey)
|
|
324
255
|
}
|
|
325
256
|
|
|
326
257
|
// Return the field revelation keyring which can be used to create a verifiable certificate for a verifier.
|
|
@@ -333,10 +264,7 @@ export class CertOps extends BsvCertificate {
|
|
|
333
264
|
*/
|
|
334
265
|
async encryptAndSignNewCertificate(): Promise<void> {
|
|
335
266
|
if ((await getIdentityKey(this.wallet)) !== this.certifier)
|
|
336
|
-
throw new sdk.WERR_INVALID_PARAMETER(
|
|
337
|
-
'wallet',
|
|
338
|
-
'the certifier for new certificate issuance.'
|
|
339
|
-
)
|
|
267
|
+
throw new sdk.WERR_INVALID_PARAMETER('wallet', 'the certifier for new certificate issuance.')
|
|
340
268
|
|
|
341
269
|
await this.encryptFields(this.subject)
|
|
342
270
|
await this.sign(this.wallet as unknown as WalletInterface)
|
|
@@ -90,10 +90,7 @@ export class PrivilegedKeyManager implements ProtoWallet {
|
|
|
90
90
|
* @param keyGetter - Asynchronous function that retrieves the PrivateKey from a secure environment.
|
|
91
91
|
* @param retentionPeriod - Time in milliseconds to retain the obfuscated key in memory before zeroizing.
|
|
92
92
|
*/
|
|
93
|
-
constructor(
|
|
94
|
-
keyGetter: (reason: string) => Promise<PrivateKey>,
|
|
95
|
-
retentionPeriod = 120_000
|
|
96
|
-
) {
|
|
93
|
+
constructor(keyGetter: (reason: string) => Promise<PrivateKey>, retentionPeriod = 120_000) {
|
|
97
94
|
this.keyGetter = keyGetter
|
|
98
95
|
this.retentionPeriod = retentionPeriod
|
|
99
96
|
|
|
@@ -192,8 +189,7 @@ export class PrivilegedKeyManager implements ProtoWallet {
|
|
|
192
189
|
let offset = 0
|
|
193
190
|
|
|
194
191
|
for (let i = 0; i < this.CHUNK_COUNT; i++) {
|
|
195
|
-
const size =
|
|
196
|
-
i === this.CHUNK_COUNT - 1 ? keyBytes.length - offset : chunkSize
|
|
192
|
+
const size = i === this.CHUNK_COUNT - 1 ? keyBytes.length - offset : chunkSize
|
|
197
193
|
chunks.push(keyBytes.slice(offset, offset + size))
|
|
198
194
|
offset += size
|
|
199
195
|
}
|
|
@@ -256,9 +252,7 @@ export class PrivilegedKeyManager implements ProtoWallet {
|
|
|
256
252
|
// if the numeric value has leading zeros.
|
|
257
253
|
const buf = privKey.toArray()
|
|
258
254
|
if (buf.length > 32) {
|
|
259
|
-
throw new Error(
|
|
260
|
-
'PrivilegedKeyManager: Expected a 32-byte key, but got more.'
|
|
261
|
-
)
|
|
255
|
+
throw new Error('PrivilegedKeyManager: Expected a 32-byte key, but got more.')
|
|
262
256
|
}
|
|
263
257
|
// Left-pad with zeros if needed
|
|
264
258
|
const keyBytes = new Uint8Array(32)
|
|
@@ -336,67 +330,43 @@ export class PrivilegedKeyManager implements ProtoWallet {
|
|
|
336
330
|
return fetchedKey
|
|
337
331
|
}
|
|
338
332
|
|
|
339
|
-
async getPublicKey(
|
|
340
|
-
args
|
|
341
|
-
): Promise<{ publicKey: PubKeyHex }> {
|
|
342
|
-
return new ProtoWallet(
|
|
343
|
-
await this.getPrivilegedKey(args.privilegedReason as string)
|
|
344
|
-
).getPublicKey(args)
|
|
333
|
+
async getPublicKey(args: GetPublicKeyArgs): Promise<{ publicKey: PubKeyHex }> {
|
|
334
|
+
return new ProtoWallet(await this.getPrivilegedKey(args.privilegedReason as string)).getPublicKey(args)
|
|
345
335
|
}
|
|
346
336
|
|
|
347
337
|
async revealCounterpartyKeyLinkage(
|
|
348
338
|
args: RevealCounterpartyKeyLinkageArgs
|
|
349
339
|
): Promise<RevealCounterpartyKeyLinkageResult> {
|
|
350
|
-
return new ProtoWallet(
|
|
351
|
-
|
|
352
|
-
)
|
|
340
|
+
return new ProtoWallet(await this.getPrivilegedKey(args.privilegedReason as string)).revealCounterpartyKeyLinkage(
|
|
341
|
+
args
|
|
342
|
+
)
|
|
353
343
|
}
|
|
354
344
|
|
|
355
|
-
async revealSpecificKeyLinkage(
|
|
356
|
-
args
|
|
357
|
-
): Promise<RevealSpecificKeyLinkageResult> {
|
|
358
|
-
return new ProtoWallet(
|
|
359
|
-
await this.getPrivilegedKey(args.privilegedReason as string)
|
|
360
|
-
).revealSpecificKeyLinkage(args)
|
|
345
|
+
async revealSpecificKeyLinkage(args: RevealSpecificKeyLinkageArgs): Promise<RevealSpecificKeyLinkageResult> {
|
|
346
|
+
return new ProtoWallet(await this.getPrivilegedKey(args.privilegedReason as string)).revealSpecificKeyLinkage(args)
|
|
361
347
|
}
|
|
362
348
|
|
|
363
349
|
async encrypt(args: WalletEncryptArgs): Promise<WalletEncryptResult> {
|
|
364
|
-
return new ProtoWallet(
|
|
365
|
-
await this.getPrivilegedKey(args.privilegedReason as string)
|
|
366
|
-
).encrypt(args)
|
|
350
|
+
return new ProtoWallet(await this.getPrivilegedKey(args.privilegedReason as string)).encrypt(args)
|
|
367
351
|
}
|
|
368
352
|
|
|
369
353
|
async decrypt(args: WalletDecryptArgs): Promise<WalletDecryptResult> {
|
|
370
|
-
return new ProtoWallet(
|
|
371
|
-
await this.getPrivilegedKey(args.privilegedReason as string)
|
|
372
|
-
).decrypt(args)
|
|
354
|
+
return new ProtoWallet(await this.getPrivilegedKey(args.privilegedReason as string)).decrypt(args)
|
|
373
355
|
}
|
|
374
356
|
|
|
375
357
|
async createHmac(args: CreateHmacArgs): Promise<CreateHmacResult> {
|
|
376
|
-
return new ProtoWallet(
|
|
377
|
-
await this.getPrivilegedKey(args.privilegedReason as string)
|
|
378
|
-
).createHmac(args)
|
|
358
|
+
return new ProtoWallet(await this.getPrivilegedKey(args.privilegedReason as string)).createHmac(args)
|
|
379
359
|
}
|
|
380
360
|
|
|
381
361
|
async verifyHmac(args: VerifyHmacArgs): Promise<VerifyHmacResult> {
|
|
382
|
-
return new ProtoWallet(
|
|
383
|
-
await this.getPrivilegedKey(args.privilegedReason as string)
|
|
384
|
-
).verifyHmac(args)
|
|
362
|
+
return new ProtoWallet(await this.getPrivilegedKey(args.privilegedReason as string)).verifyHmac(args)
|
|
385
363
|
}
|
|
386
364
|
|
|
387
|
-
async createSignature(
|
|
388
|
-
args
|
|
389
|
-
): Promise<CreateSignatureResult> {
|
|
390
|
-
return new ProtoWallet(
|
|
391
|
-
await this.getPrivilegedKey(args.privilegedReason as string)
|
|
392
|
-
).createSignature(args)
|
|
365
|
+
async createSignature(args: CreateSignatureArgs): Promise<CreateSignatureResult> {
|
|
366
|
+
return new ProtoWallet(await this.getPrivilegedKey(args.privilegedReason as string)).createSignature(args)
|
|
393
367
|
}
|
|
394
368
|
|
|
395
|
-
async verifySignature(
|
|
396
|
-
args
|
|
397
|
-
): Promise<VerifySignatureResult> {
|
|
398
|
-
return new ProtoWallet(
|
|
399
|
-
await this.getPrivilegedKey(args.privilegedReason as string)
|
|
400
|
-
).verifySignature(args)
|
|
369
|
+
async verifySignature(args: VerifySignatureArgs): Promise<VerifySignatureResult> {
|
|
370
|
+
return new ProtoWallet(await this.getPrivilegedKey(args.privilegedReason as string)).verifySignature(args)
|
|
401
371
|
}
|
|
402
372
|
}
|
package/src/sdk/WERR_errors.ts
CHANGED
|
@@ -28,10 +28,7 @@ export class WERR_INTERNAL extends WalletError {
|
|
|
28
28
|
*/
|
|
29
29
|
export class WERR_INVALID_OPERATION extends WalletError {
|
|
30
30
|
constructor(message?: string) {
|
|
31
|
-
super(
|
|
32
|
-
'WERR_INVALID_OPERATION',
|
|
33
|
-
message ?? `An invalid operation was requested.`
|
|
34
|
-
)
|
|
31
|
+
super('WERR_INVALID_OPERATION', message ?? `An invalid operation was requested.`)
|
|
35
32
|
}
|
|
36
33
|
}
|
|
37
34
|
|
|
@@ -40,10 +37,7 @@ export class WERR_INVALID_OPERATION extends WalletError {
|
|
|
40
37
|
*/
|
|
41
38
|
export class WERR_BROADCAST_UNAVAILABLE extends WalletError {
|
|
42
39
|
constructor(message?: string) {
|
|
43
|
-
super(
|
|
44
|
-
'WERR_BROADCAST_UNAVAILABLE',
|
|
45
|
-
`Unable to broadcast transaction at this time.`
|
|
46
|
-
)
|
|
40
|
+
super('WERR_BROADCAST_UNAVAILABLE', `Unable to broadcast transaction at this time.`)
|
|
47
41
|
}
|
|
48
42
|
}
|
|
49
43
|
|
|
@@ -57,10 +51,7 @@ export class WERR_INVALID_PARAMETER extends WalletError {
|
|
|
57
51
|
public parameter: string,
|
|
58
52
|
mustBe?: string
|
|
59
53
|
) {
|
|
60
|
-
super(
|
|
61
|
-
'WERR_INVALID_PARAMETER',
|
|
62
|
-
`The ${parameter} parameter must be ${mustBe ?? 'valid.'}`
|
|
63
|
-
)
|
|
54
|
+
super('WERR_INVALID_PARAMETER', `The ${parameter} parameter must be ${mustBe ?? 'valid.'}`)
|
|
64
55
|
}
|
|
65
56
|
}
|
|
66
57
|
|
|
@@ -71,10 +62,7 @@ export class WERR_INVALID_PARAMETER extends WalletError {
|
|
|
71
62
|
*/
|
|
72
63
|
export class WERR_MISSING_PARAMETER extends WalletError {
|
|
73
64
|
constructor(public parameter: string) {
|
|
74
|
-
super(
|
|
75
|
-
'WERR_MISSING_PARAMETER',
|
|
76
|
-
`The required ${parameter} parameter is missing.`
|
|
77
|
-
)
|
|
65
|
+
super('WERR_MISSING_PARAMETER', `The required ${parameter} parameter is missing.`)
|
|
78
66
|
}
|
|
79
67
|
}
|
|
80
68
|
|
|
@@ -92,11 +80,7 @@ export class WERR_BAD_REQUEST extends WalletError {
|
|
|
92
80
|
*/
|
|
93
81
|
export class WERR_NETWORK_CHAIN extends WalletError {
|
|
94
82
|
constructor(message?: string) {
|
|
95
|
-
super(
|
|
96
|
-
'WERR_NETWORK_CHAIN',
|
|
97
|
-
message ??
|
|
98
|
-
'Configured network chain is invalid or does not match across services.'
|
|
99
|
-
)
|
|
83
|
+
super('WERR_NETWORK_CHAIN', message ?? 'Configured network chain is invalid or does not match across services.')
|
|
100
84
|
}
|
|
101
85
|
}
|
|
102
86
|
|
|
@@ -105,10 +89,7 @@ export class WERR_NETWORK_CHAIN extends WalletError {
|
|
|
105
89
|
*/
|
|
106
90
|
export class WERR_UNAUTHORIZED extends WalletError {
|
|
107
91
|
constructor(message?: string) {
|
|
108
|
-
super(
|
|
109
|
-
'WERR_UNAUTHORIZED',
|
|
110
|
-
message ?? 'Access is denied due to an authorization error.'
|
|
111
|
-
)
|
|
92
|
+
super('WERR_UNAUTHORIZED', message ?? 'Access is denied due to an authorization error.')
|
|
112
93
|
}
|
|
113
94
|
}
|
|
114
95
|
|