@bsv/wallet-toolbox 1.4.5 → 1.4.7
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 +6 -0
- package/docs/client.md +1 -1
- package/docs/services.md +1 -1
- package/docs/wallet.md +1 -1
- package/mobile/out/src/CWIStyleWalletManager.js +1 -1
- package/mobile/out/src/CWIStyleWalletManager.js.map +1 -1
- package/mobile/out/src/WalletPermissionsManager.js +0 -1
- package/mobile/out/src/WalletPermissionsManager.js.map +1 -1
- package/mobile/out/src/services/chaintracker/BHServiceClient.d.ts +34 -0
- package/mobile/out/src/services/chaintracker/BHServiceClient.d.ts.map +1 -0
- package/mobile/out/src/services/chaintracker/BHServiceClient.js +163 -0
- package/mobile/out/src/services/chaintracker/BHServiceClient.js.map +1 -0
- package/mobile/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.d.ts +144 -0
- package/mobile/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.d.ts.map +1 -0
- package/mobile/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.js +463 -0
- package/mobile/out/src/services/chaintracker/chaintracks/util/blockHeaderUtilities.js.map +1 -0
- package/mobile/out/src/services/chaintracker/chaintracks/util/dirtyHashes.d.ts +20 -0
- package/mobile/out/src/services/chaintracker/chaintracks/util/dirtyHashes.d.ts.map +1 -0
- package/mobile/out/src/services/chaintracker/chaintracks/util/dirtyHashes.js +31 -0
- package/mobile/out/src/services/chaintracker/chaintracks/util/dirtyHashes.js.map +1 -0
- package/mobile/out/src/services/chaintracker/index.d.ts +1 -0
- package/mobile/out/src/services/chaintracker/index.d.ts.map +1 -1
- package/mobile/out/src/services/chaintracker/index.js +1 -0
- package/mobile/out/src/services/chaintracker/index.js.map +1 -1
- package/mobile/out/src/services/createDefaultWalletServicesOptions.d.ts +1 -1
- package/mobile/out/src/services/createDefaultWalletServicesOptions.d.ts.map +1 -1
- package/mobile/out/src/services/createDefaultWalletServicesOptions.js +10 -7
- package/mobile/out/src/services/createDefaultWalletServicesOptions.js.map +1 -1
- package/mobile/out/src/utility/utilityHelpers.buffer.d.ts +18 -0
- package/mobile/out/src/utility/utilityHelpers.buffer.d.ts.map +1 -0
- package/mobile/out/src/utility/utilityHelpers.buffer.js +45 -0
- package/mobile/out/src/utility/utilityHelpers.buffer.js.map +1 -0
- package/mobile/package-lock.json +2 -2
- package/mobile/package.json +1 -1
- package/out/src/Setup.d.ts.map +1 -1
- package/out/src/Setup.js +4 -0
- package/out/src/Setup.js.map +1 -1
- package/out/src/__tests/CWIStyleWalletManager.test.js +2 -2
- package/out/src/__tests/CWIStyleWalletManager.test.js.map +1 -1
- package/out/src/services/__tests/ArcGorillaPool.man.test.js.map +1 -1
- package/out/src/services/chaintracker/BHServiceClient.d.ts +34 -0
- package/out/src/services/chaintracker/BHServiceClient.d.ts.map +1 -0
- package/out/src/services/chaintracker/BHServiceClient.js +163 -0
- package/out/src/services/chaintracker/BHServiceClient.js.map +1 -0
- package/out/src/services/chaintracker/index.d.ts +1 -0
- package/out/src/services/chaintracker/index.d.ts.map +1 -1
- package/out/src/services/chaintracker/index.js +1 -0
- package/out/src/services/chaintracker/index.js.map +1 -1
- package/out/src/services/createDefaultWalletServicesOptions.d.ts +1 -1
- package/out/src/services/createDefaultWalletServicesOptions.d.ts.map +1 -1
- package/out/src/services/createDefaultWalletServicesOptions.js +10 -7
- package/out/src/services/createDefaultWalletServicesOptions.js.map +1 -1
- package/out/src/storage/__test/adminStats.man.test.js +1 -0
- package/out/src/storage/__test/adminStats.man.test.js.map +1 -1
- package/out/test/wallet/action/abortAction.test.d.ts.map +1 -0
- package/out/test/{Wallet → wallet}/action/abortAction.test.js.map +1 -1
- package/out/test/wallet/action/createAction.test.d.ts.map +1 -0
- package/out/test/{Wallet → wallet}/action/createAction.test.js.map +1 -1
- package/out/test/{Wallet → wallet}/action/createAction2.test.d.ts.map +1 -1
- package/out/test/{Wallet → wallet}/action/createAction2.test.js.map +1 -1
- package/out/test/wallet/action/createActionToGenerateBeefs.man.test.d.ts.map +1 -0
- package/out/test/{Wallet → wallet}/action/createActionToGenerateBeefs.man.test.js.map +1 -1
- package/out/test/wallet/action/internalizeAction.test.d.ts.map +1 -0
- package/out/test/{Wallet → wallet}/action/internalizeAction.test.js.map +1 -1
- package/out/test/wallet/action/relinquishOutput.test.d.ts.map +1 -0
- package/out/test/{Wallet → wallet}/action/relinquishOutput.test.js.map +1 -1
- package/out/test/wallet/construct/Wallet.constructor.test.d.ts.map +1 -0
- package/out/test/{Wallet → wallet}/construct/Wallet.constructor.test.js.map +1 -1
- package/out/test/wallet/list/listActions.test.d.ts.map +1 -0
- package/out/test/{Wallet → wallet}/list/listActions.test.js.map +1 -1
- package/out/test/wallet/list/listActions2.test.d.ts.map +1 -0
- package/out/test/{Wallet → wallet}/list/listActions2.test.js.map +1 -1
- package/out/test/wallet/list/listCertificates.test.d.ts.map +1 -0
- package/out/test/{Wallet → wallet}/list/listCertificates.test.js.map +1 -1
- package/out/test/wallet/list/listOutputs.test.d.ts.map +1 -0
- package/out/test/{Wallet → wallet}/list/listOutputs.test.js.map +1 -1
- package/out/test/wallet/sync/Wallet.sync.test.d.ts.map +1 -0
- package/out/test/{Wallet → wallet}/sync/Wallet.sync.test.js.map +1 -1
- package/out/tsconfig.all.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/src/Setup.ts +6 -0
- package/src/__tests/CWIStyleWalletManager.test.ts +2 -2
- package/src/services/__tests/ArcGorillaPool.man.test.ts +1 -1
- package/src/services/chaintracker/BHServiceClient.ts +199 -0
- package/src/services/chaintracker/index.ts +1 -0
- package/src/services/createDefaultWalletServicesOptions.ts +15 -7
- package/src/storage/__test/adminStats.man.test.ts +1 -0
- package/out/src/sdk/CertOps.d.ts +0 -66
- package/out/src/sdk/CertOps.d.ts.map +0 -1
- package/out/src/sdk/CertOps.js +0 -198
- package/out/src/sdk/CertOps.js.map +0 -1
- package/out/src/sdk/StorageSyncReader.d.ts +0 -121
- package/out/src/sdk/StorageSyncReader.d.ts.map +0 -1
- package/out/src/sdk/StorageSyncReader.js +0 -3
- package/out/src/sdk/StorageSyncReader.js.map +0 -1
- package/out/src/sdk/StorageSyncReaderWriter.d.ts +0 -89
- package/out/src/sdk/StorageSyncReaderWriter.d.ts.map +0 -1
- package/out/src/sdk/StorageSyncReaderWriter.js +0 -3
- package/out/src/sdk/StorageSyncReaderWriter.js.map +0 -1
- package/out/src/services/__tests/ARC.test.d.ts +0 -2
- package/out/src/services/__tests/ARC.test.d.ts.map +0 -1
- package/out/src/services/__tests/ARC.test.js +0 -104
- package/out/src/services/__tests/ARC.test.js.map +0 -1
- package/out/src/services/chaintracker/chaintracks/BlockHeaderApi.d.ts +0 -98
- package/out/src/services/chaintracker/chaintracks/BlockHeaderApi.d.ts.map +0 -1
- package/out/src/services/chaintracker/chaintracks/BlockHeaderApi.js +0 -38
- package/out/src/services/chaintracker/chaintracks/BlockHeaderApi.js.map +0 -1
- package/out/src/storage/methods/listActions.d.ts +0 -5
- package/out/src/storage/methods/listActions.d.ts.map +0 -1
- package/out/src/storage/methods/listActions.js +0 -228
- package/out/src/storage/methods/listActions.js.map +0 -1
- package/out/src/storage/methods/listOutputs.d.ts +0 -5
- package/out/src/storage/methods/listOutputs.d.ts.map +0 -1
- package/out/src/storage/methods/listOutputs.js +0 -295
- package/out/src/storage/methods/listOutputs.js.map +0 -1
- package/out/src/storage/schema/entities/Certificate.d.ts +0 -43
- package/out/src/storage/schema/entities/Certificate.d.ts.map +0 -1
- package/out/src/storage/schema/entities/Certificate.js +0 -162
- package/out/src/storage/schema/entities/Certificate.js.map +0 -1
- package/out/src/storage/schema/entities/CertificateField.d.ts +0 -32
- package/out/src/storage/schema/entities/CertificateField.d.ts.map +0 -1
- package/out/src/storage/schema/entities/CertificateField.js +0 -114
- package/out/src/storage/schema/entities/CertificateField.js.map +0 -1
- package/out/src/storage/schema/entities/Commission.d.ts +0 -37
- package/out/src/storage/schema/entities/Commission.d.ts.map +0 -1
- package/out/src/storage/schema/entities/Commission.js +0 -130
- package/out/src/storage/schema/entities/Commission.js.map +0 -1
- package/out/src/storage/schema/entities/Output.d.ts +0 -67
- package/out/src/storage/schema/entities/Output.d.ts.map +0 -1
- package/out/src/storage/schema/entities/Output.js +0 -281
- package/out/src/storage/schema/entities/Output.js.map +0 -1
- package/out/src/storage/schema/entities/OutputBasket.d.ts +0 -35
- package/out/src/storage/schema/entities/OutputBasket.d.ts.map +0 -1
- package/out/src/storage/schema/entities/OutputBasket.js +0 -133
- package/out/src/storage/schema/entities/OutputBasket.js.map +0 -1
- package/out/src/storage/schema/entities/OutputTag.d.ts +0 -31
- package/out/src/storage/schema/entities/OutputTag.d.ts.map +0 -1
- package/out/src/storage/schema/entities/OutputTag.js +0 -104
- package/out/src/storage/schema/entities/OutputTag.js.map +0 -1
- package/out/src/storage/schema/entities/OutputTagMap.d.ts +0 -28
- package/out/src/storage/schema/entities/OutputTagMap.d.ts.map +0 -1
- package/out/src/storage/schema/entities/OutputTagMap.js +0 -101
- package/out/src/storage/schema/entities/OutputTagMap.js.map +0 -1
- package/out/src/storage/schema/entities/ProvenTx.d.ts +0 -84
- package/out/src/storage/schema/entities/ProvenTx.d.ts.map +0 -1
- package/out/src/storage/schema/entities/ProvenTx.js +0 -286
- package/out/src/storage/schema/entities/ProvenTx.js.map +0 -1
- package/out/src/storage/schema/entities/ProvenTxReq.d.ts +0 -135
- package/out/src/storage/schema/entities/ProvenTxReq.d.ts.map +0 -1
- package/out/src/storage/schema/entities/ProvenTxReq.js +0 -532
- package/out/src/storage/schema/entities/ProvenTxReq.js.map +0 -1
- package/out/src/storage/schema/entities/SyncState.d.ts +0 -66
- package/out/src/storage/schema/entities/SyncState.d.ts.map +0 -1
- package/out/src/storage/schema/entities/SyncState.js +0 -284
- package/out/src/storage/schema/entities/SyncState.js.map +0 -1
- package/out/src/storage/schema/entities/Transaction.d.ts +0 -67
- package/out/src/storage/schema/entities/Transaction.d.ts.map +0 -1
- package/out/src/storage/schema/entities/Transaction.js +0 -264
- package/out/src/storage/schema/entities/Transaction.js.map +0 -1
- package/out/src/storage/schema/entities/TxLabel.d.ts +0 -31
- package/out/src/storage/schema/entities/TxLabel.d.ts.map +0 -1
- package/out/src/storage/schema/entities/TxLabel.js +0 -104
- package/out/src/storage/schema/entities/TxLabel.js.map +0 -1
- package/out/src/storage/schema/entities/TxLabelMap.d.ts +0 -28
- package/out/src/storage/schema/entities/TxLabelMap.d.ts.map +0 -1
- package/out/src/storage/schema/entities/TxLabelMap.js +0 -103
- package/out/src/storage/schema/entities/TxLabelMap.js.map +0 -1
- package/out/src/storage/schema/entities/User.d.ts +0 -29
- package/out/src/storage/schema/entities/User.d.ts.map +0 -1
- package/out/src/storage/schema/entities/User.js +0 -100
- package/out/src/storage/schema/entities/User.js.map +0 -1
- package/out/src/storage/schema/tables/Certificate.d.ts +0 -20
- package/out/src/storage/schema/tables/Certificate.d.ts.map +0 -1
- package/out/src/storage/schema/tables/Certificate.js +0 -3
- package/out/src/storage/schema/tables/Certificate.js.map +0 -1
- package/out/src/storage/schema/tables/CertificateField.d.ts +0 -12
- package/out/src/storage/schema/tables/CertificateField.d.ts.map +0 -1
- package/out/src/storage/schema/tables/CertificateField.js +0 -3
- package/out/src/storage/schema/tables/CertificateField.js.map +0 -1
- package/out/src/storage/schema/tables/Commission.d.ts +0 -13
- package/out/src/storage/schema/tables/Commission.d.ts.map +0 -1
- package/out/src/storage/schema/tables/Commission.js +0 -3
- package/out/src/storage/schema/tables/Commission.js.map +0 -1
- package/out/src/storage/schema/tables/MonitorEvent.d.ts +0 -9
- package/out/src/storage/schema/tables/MonitorEvent.d.ts.map +0 -1
- package/out/src/storage/schema/tables/MonitorEvent.js +0 -3
- package/out/src/storage/schema/tables/MonitorEvent.js.map +0 -1
- package/out/src/storage/schema/tables/Output.d.ts +0 -36
- package/out/src/storage/schema/tables/Output.d.ts.map +0 -1
- package/out/src/storage/schema/tables/Output.js +0 -31
- package/out/src/storage/schema/tables/Output.js.map +0 -1
- package/out/src/storage/schema/tables/OutputBasket.d.ts +0 -12
- package/out/src/storage/schema/tables/OutputBasket.d.ts.map +0 -1
- package/out/src/storage/schema/tables/OutputBasket.js +0 -3
- package/out/src/storage/schema/tables/OutputBasket.js.map +0 -1
- package/out/src/storage/schema/tables/OutputTag.d.ts +0 -10
- package/out/src/storage/schema/tables/OutputTag.d.ts.map +0 -1
- package/out/src/storage/schema/tables/OutputTag.js +0 -3
- package/out/src/storage/schema/tables/OutputTag.js.map +0 -1
- package/out/src/storage/schema/tables/OutputTagMap.d.ts +0 -9
- package/out/src/storage/schema/tables/OutputTagMap.d.ts.map +0 -1
- package/out/src/storage/schema/tables/OutputTagMap.js +0 -3
- package/out/src/storage/schema/tables/OutputTagMap.js.map +0 -1
- package/out/src/storage/schema/tables/ProvenTx.d.ts +0 -14
- package/out/src/storage/schema/tables/ProvenTx.d.ts.map +0 -1
- package/out/src/storage/schema/tables/ProvenTx.js +0 -3
- package/out/src/storage/schema/tables/ProvenTx.js.map +0 -1
- package/out/src/storage/schema/tables/ProvenTxReq.d.ts +0 -64
- package/out/src/storage/schema/tables/ProvenTxReq.d.ts.map +0 -1
- package/out/src/storage/schema/tables/ProvenTxReq.js +0 -3
- package/out/src/storage/schema/tables/ProvenTxReq.js.map +0 -1
- package/out/src/storage/schema/tables/SyncState.d.ts +0 -18
- package/out/src/storage/schema/tables/SyncState.d.ts.map +0 -1
- package/out/src/storage/schema/tables/SyncState.js +0 -3
- package/out/src/storage/schema/tables/SyncState.js.map +0 -1
- package/out/src/storage/schema/tables/Transaction.d.ts +0 -37
- package/out/src/storage/schema/tables/Transaction.d.ts.map +0 -1
- package/out/src/storage/schema/tables/Transaction.js +0 -21
- package/out/src/storage/schema/tables/Transaction.js.map +0 -1
- package/out/src/storage/schema/tables/TxLabel.d.ts +0 -10
- package/out/src/storage/schema/tables/TxLabel.d.ts.map +0 -1
- package/out/src/storage/schema/tables/TxLabel.js +0 -3
- package/out/src/storage/schema/tables/TxLabel.js.map +0 -1
- package/out/src/storage/schema/tables/TxLabelMap.d.ts +0 -9
- package/out/src/storage/schema/tables/TxLabelMap.d.ts.map +0 -1
- package/out/src/storage/schema/tables/TxLabelMap.js +0 -3
- package/out/src/storage/schema/tables/TxLabelMap.js.map +0 -1
- package/out/src/storage/schema/tables/User.d.ts +0 -16
- package/out/src/storage/schema/tables/User.d.ts.map +0 -1
- package/out/src/storage/schema/tables/User.js +0 -3
- package/out/src/storage/schema/tables/User.js.map +0 -1
- package/out/test/Wallet/action/abortAction.test.d.ts.map +0 -1
- package/out/test/Wallet/action/createAction.test.d.ts.map +0 -1
- package/out/test/Wallet/action/createActionToGenerateBeefs.man.test.d.ts.map +0 -1
- package/out/test/Wallet/action/internalizeAction.test.d.ts.map +0 -1
- package/out/test/Wallet/action/relinquishOutput.test.d.ts.map +0 -1
- package/out/test/Wallet/construct/Wallet.constructor.test.d.ts.map +0 -1
- package/out/test/Wallet/list/listActions.test.d.ts.map +0 -1
- package/out/test/Wallet/list/listActions2.test.d.ts.map +0 -1
- package/out/test/Wallet/list/listCertificates.test.d.ts.map +0 -1
- package/out/test/Wallet/list/listOutputs.test.d.ts.map +0 -1
- package/out/test/Wallet/local/localWalletMethods.d.ts +0 -28
- package/out/test/Wallet/local/localWalletMethods.d.ts.map +0 -1
- package/out/test/Wallet/local/localWalletMethods.js +0 -281
- package/out/test/Wallet/local/localWalletMethods.js.map +0 -1
- package/out/test/Wallet/support/opers1.man.test.d.ts +0 -2
- package/out/test/Wallet/support/opers1.man.test.d.ts.map +0 -1
- package/out/test/Wallet/support/opers1.man.test.js +0 -202
- package/out/test/Wallet/support/opers1.man.test.js.map +0 -1
- package/out/test/Wallet/sync/Wallet.sync.test.d.ts.map +0 -1
- /package/out/test/{Wallet → wallet}/action/abortAction.test.d.ts +0 -0
- /package/out/test/{Wallet → wallet}/action/abortAction.test.js +0 -0
- /package/out/test/{Wallet → wallet}/action/createAction.test.d.ts +0 -0
- /package/out/test/{Wallet → wallet}/action/createAction.test.js +0 -0
- /package/out/test/{Wallet → wallet}/action/createAction2.test.d.ts +0 -0
- /package/out/test/{Wallet → wallet}/action/createAction2.test.js +0 -0
- /package/out/test/{Wallet → wallet}/action/createActionToGenerateBeefs.man.test.d.ts +0 -0
- /package/out/test/{Wallet → wallet}/action/createActionToGenerateBeefs.man.test.js +0 -0
- /package/out/test/{Wallet → wallet}/action/internalizeAction.test.d.ts +0 -0
- /package/out/test/{Wallet → wallet}/action/internalizeAction.test.js +0 -0
- /package/out/test/{Wallet → wallet}/action/relinquishOutput.test.d.ts +0 -0
- /package/out/test/{Wallet → wallet}/action/relinquishOutput.test.js +0 -0
- /package/out/test/{Wallet → wallet}/construct/Wallet.constructor.test.d.ts +0 -0
- /package/out/test/{Wallet → wallet}/construct/Wallet.constructor.test.js +0 -0
- /package/out/test/{Wallet → wallet}/list/listActions.test.d.ts +0 -0
- /package/out/test/{Wallet → wallet}/list/listActions.test.js +0 -0
- /package/out/test/{Wallet → wallet}/list/listActions2.test.d.ts +0 -0
- /package/out/test/{Wallet → wallet}/list/listActions2.test.js +0 -0
- /package/out/test/{Wallet → wallet}/list/listCertificates.test.d.ts +0 -0
- /package/out/test/{Wallet → wallet}/list/listCertificates.test.js +0 -0
- /package/out/test/{Wallet → wallet}/list/listOutputs.test.d.ts +0 -0
- /package/out/test/{Wallet → wallet}/list/listOutputs.test.js +0 -0
- /package/out/test/{Wallet → wallet}/sync/Wallet.sync.test.d.ts +0 -0
- /package/out/test/{Wallet → wallet}/sync/Wallet.sync.test.js +0 -0
- /package/test/{Wallet → wallet}/action/abortAction.test.ts +0 -0
- /package/test/{Wallet → wallet}/action/createAction.test.ts +0 -0
- /package/test/{Wallet → wallet}/action/createAction2.test.ts +0 -0
- /package/test/{Wallet → wallet}/action/createActionToGenerateBeefs.man.test.ts +0 -0
- /package/test/{Wallet → wallet}/action/internalizeAction.test.ts +0 -0
- /package/test/{Wallet → wallet}/action/relinquishOutput.test.ts +0 -0
- /package/test/{Wallet → wallet}/construct/Wallet.constructor.test.ts +0 -0
- /package/test/{Wallet → wallet}/list/listActions.test.ts +0 -0
- /package/test/{Wallet → wallet}/list/listActions2.test.ts +0 -0
- /package/test/{Wallet → wallet}/list/listCertificates.test.ts +0 -0
- /package/test/{Wallet → wallet}/list/listOutputs.test.ts +0 -0
- /package/test/{Wallet → wallet}/sync/Wallet.sync.test.ts +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bsv/wallet-toolbox",
|
|
3
|
-
"version": "1.4.
|
|
3
|
+
"version": "1.4.7",
|
|
4
4
|
"description": "BRC100 conforming wallet, wallet storage and wallet signer components",
|
|
5
5
|
"main": "./out/src/index.js",
|
|
6
6
|
"types": "./out/src/index.d.ts",
|
|
@@ -32,7 +32,7 @@
|
|
|
32
32
|
"dependencies": {
|
|
33
33
|
"@bsv/auth-express-middleware": "^1.1.2",
|
|
34
34
|
"@bsv/payment-express-middleware": "^1.0.6",
|
|
35
|
-
"@bsv/sdk": "^1.6.
|
|
35
|
+
"@bsv/sdk": "^1.6.5",
|
|
36
36
|
"express": "^4.21.2",
|
|
37
37
|
"idb": "^8.0.2",
|
|
38
38
|
"knex": "^3.1.0",
|
package/src/Setup.ts
CHANGED
|
@@ -26,6 +26,8 @@ import {
|
|
|
26
26
|
import { Knex, knex as makeKnex } from 'knex'
|
|
27
27
|
|
|
28
28
|
import * as dotenv from 'dotenv'
|
|
29
|
+
// To rely on your own headers service, uncomment the following line:
|
|
30
|
+
// import { BHServiceClient } from './services/chaintracker'
|
|
29
31
|
dotenv.config()
|
|
30
32
|
|
|
31
33
|
/**
|
|
@@ -145,6 +147,10 @@ DEV_KEYS = '{
|
|
|
145
147
|
if (storage.canMakeAvailable()) await storage.makeAvailable()
|
|
146
148
|
const serviceOptions = Services.createDefaultOptions(chain)
|
|
147
149
|
serviceOptions.taalApiKey = args.env.taalApiKey
|
|
150
|
+
|
|
151
|
+
// To rely on your own headers service, uncomment the following line, updating the url and apiKey to your own values.
|
|
152
|
+
// serviceOptions.chaintracks = new BHServiceClient('main', 'https://headers.spv.money', 'fC42F069YJs30FaWBAgikfDFEfIW1j4q')
|
|
153
|
+
|
|
148
154
|
const services = new Services(serviceOptions)
|
|
149
155
|
const monopts = Monitor.createDefaultWalletMonitorOptions(chain, storage, services)
|
|
150
156
|
const monitor = new Monitor(monopts)
|
|
@@ -502,8 +502,8 @@ describe('CWIStyleWalletManager Tests', () => {
|
|
|
502
502
|
|
|
503
503
|
test('waitForAuthentication() eventually resolves', async () => {
|
|
504
504
|
// Already authenticated from beforeEach. So it should immediately return.
|
|
505
|
-
|
|
506
|
-
expect(
|
|
505
|
+
await manager.waitForAuthentication({}, 'normal.com')
|
|
506
|
+
expect(mockUnderlyingWallet.waitForAuthentication).toHaveBeenCalledTimes(1)
|
|
507
507
|
})
|
|
508
508
|
})
|
|
509
509
|
describe('Additional Tests for Password Retriever Callback, Privileged Key Expiry, and UMP Token Serialization', () => {
|
|
@@ -2,7 +2,7 @@ import { _tu, logger } from '../../../test/utils/TestUtilsWalletStorage'
|
|
|
2
2
|
import { sdk, wait } from '../../index.client'
|
|
3
3
|
import { ARC } from '../providers/ARC'
|
|
4
4
|
import { Beef, BeefTx } from '@bsv/sdk'
|
|
5
|
-
import {
|
|
5
|
+
import { arcGorillaPoolUrl } from '../createDefaultWalletServicesOptions'
|
|
6
6
|
import { Setup } from '../../index.all'
|
|
7
7
|
|
|
8
8
|
describe('ArcGorillaPool tests', () => {
|
|
@@ -0,0 +1,199 @@
|
|
|
1
|
+
import { BlockHeadersService, Utils } from '@bsv/sdk'
|
|
2
|
+
import { ChaintracksServiceClient, ChaintracksServiceClientOptions } from './chaintracks/ChaintracksServiceClient'
|
|
3
|
+
import { sdk } from '../../index.client'
|
|
4
|
+
import { BaseBlockHeader, BlockHeader } from './chaintracks'
|
|
5
|
+
import { serializeBlockHeader } from './chaintracks/util/blockHeaderUtilities'
|
|
6
|
+
|
|
7
|
+
interface BHSHeader {
|
|
8
|
+
hash: string
|
|
9
|
+
version: number
|
|
10
|
+
prevBlockHash: string
|
|
11
|
+
merkleRoot: string
|
|
12
|
+
creationTimestamp: number
|
|
13
|
+
difficultyTarget: number
|
|
14
|
+
nonce: number
|
|
15
|
+
work: string
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
interface BHSHeaderState {
|
|
19
|
+
header: BHSHeader
|
|
20
|
+
state: string
|
|
21
|
+
chainWork: string
|
|
22
|
+
height: number
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
export class BHServiceClient implements ChaintracksServiceClient {
|
|
26
|
+
bhs: BlockHeadersService
|
|
27
|
+
cache: Record<number, string>
|
|
28
|
+
chain: sdk.Chain
|
|
29
|
+
serviceUrl: string
|
|
30
|
+
options: ChaintracksServiceClientOptions
|
|
31
|
+
apiKey: string
|
|
32
|
+
|
|
33
|
+
constructor(chain: sdk.Chain, url: string, apiKey: string) {
|
|
34
|
+
this.bhs = new BlockHeadersService(url, { apiKey })
|
|
35
|
+
this.cache = {}
|
|
36
|
+
this.chain = chain
|
|
37
|
+
this.serviceUrl = url
|
|
38
|
+
this.options = ChaintracksServiceClient.createChaintracksServiceClientOptions()
|
|
39
|
+
this.options.useAuthrite = true
|
|
40
|
+
this.apiKey = apiKey
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
async currentHeight(): Promise<number> {
|
|
44
|
+
return await this.bhs.currentHeight()
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
async isValidRootForHeight(root: string, height: number): Promise<boolean> {
|
|
48
|
+
const cachedRoot = this.cache[height]
|
|
49
|
+
if (cachedRoot) {
|
|
50
|
+
return cachedRoot === root
|
|
51
|
+
}
|
|
52
|
+
const isValid = await this.bhs.isValidRootForHeight(root, height)
|
|
53
|
+
this.cache[height] = root
|
|
54
|
+
return isValid
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
async getPresentHeight(): Promise<number> {
|
|
58
|
+
return await this.bhs.currentHeight()
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
async findHeaderForHeight(height: number): Promise<BlockHeader | undefined> {
|
|
62
|
+
const response = await this.getJsonOrUndefined<BHSHeader[]>(`/api/v1/chain/header/byHeight?height=${height}`)
|
|
63
|
+
const header = response?.[0]
|
|
64
|
+
if (!header) return undefined
|
|
65
|
+
const formatted: BlockHeader = {
|
|
66
|
+
version: header.version,
|
|
67
|
+
previousHash: header.prevBlockHash,
|
|
68
|
+
merkleRoot: header.merkleRoot,
|
|
69
|
+
time: header.creationTimestamp,
|
|
70
|
+
bits: header.difficultyTarget,
|
|
71
|
+
nonce: header.nonce,
|
|
72
|
+
height,
|
|
73
|
+
hash: header.hash
|
|
74
|
+
}
|
|
75
|
+
return formatted
|
|
76
|
+
}
|
|
77
|
+
|
|
78
|
+
async findHeaderForBlockHash(hash: string): Promise<BlockHeader | undefined> {
|
|
79
|
+
const response = await this.getJsonOrUndefined<BHSHeaderState>(`/api/v1/chain/header/state/${hash}`)
|
|
80
|
+
if (!response?.header) return undefined
|
|
81
|
+
const formatted: BlockHeader = {
|
|
82
|
+
version: response.header.version,
|
|
83
|
+
previousHash: response.header.prevBlockHash,
|
|
84
|
+
merkleRoot: response.header.merkleRoot,
|
|
85
|
+
time: response.header.creationTimestamp,
|
|
86
|
+
bits: response.header.difficultyTarget,
|
|
87
|
+
nonce: response.header.nonce,
|
|
88
|
+
height: response.height,
|
|
89
|
+
hash: response.header.hash
|
|
90
|
+
}
|
|
91
|
+
return formatted
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
async getHeaders(height: number, count: number): Promise<string> {
|
|
95
|
+
const response = await this.getJsonOrUndefined<BHSHeader[]>(
|
|
96
|
+
`/api/v1/chain/header/byHeight?height=${height}&count=${count}`
|
|
97
|
+
)
|
|
98
|
+
if (!response) return ''
|
|
99
|
+
if (response.length < count) throw new Error('Cannot retrieve enough headers')
|
|
100
|
+
const headers = response.map(response => {
|
|
101
|
+
const header: BaseBlockHeader = {
|
|
102
|
+
version: response.version,
|
|
103
|
+
previousHash: response.prevBlockHash,
|
|
104
|
+
merkleRoot: response.merkleRoot,
|
|
105
|
+
time: response.creationTimestamp,
|
|
106
|
+
bits: response.difficultyTarget,
|
|
107
|
+
nonce: response.nonce
|
|
108
|
+
}
|
|
109
|
+
return serializeBlockHeader(header)
|
|
110
|
+
})
|
|
111
|
+
return headers.reduce((str: string, arr: number[]) => str + Utils.toHex(arr), '')
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
async findChainWorkForBlockHash(hash: string): Promise<string | undefined> {
|
|
115
|
+
throw new Error('Not implemented')
|
|
116
|
+
}
|
|
117
|
+
|
|
118
|
+
async findChainTipHeader(): Promise<BlockHeader> {
|
|
119
|
+
const response = await this.getJson<BHSHeaderState>('/api/v1/chain/tip/longest')
|
|
120
|
+
const formatted: BlockHeader = {
|
|
121
|
+
version: response.header.version,
|
|
122
|
+
previousHash: response.header.prevBlockHash,
|
|
123
|
+
merkleRoot: response.header.merkleRoot,
|
|
124
|
+
time: response.header.creationTimestamp,
|
|
125
|
+
bits: response.header.difficultyTarget,
|
|
126
|
+
nonce: response.header.nonce,
|
|
127
|
+
height: response.height,
|
|
128
|
+
hash: response.header.hash
|
|
129
|
+
}
|
|
130
|
+
return formatted
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
async getJsonOrUndefined<T>(path: string): Promise<T | undefined> {
|
|
134
|
+
let e: Error | undefined = undefined
|
|
135
|
+
for (let retry = 0; retry < 3; retry++) {
|
|
136
|
+
try {
|
|
137
|
+
const r = await fetch(`${this.serviceUrl}${path}`, { headers: { Authorization: `Bearer ${this.apiKey}` } })
|
|
138
|
+
if (r.status !== 200) throw new Error(JSON.stringify(r))
|
|
139
|
+
const v = <T>await r.json()
|
|
140
|
+
if (!v) return undefined
|
|
141
|
+
return v
|
|
142
|
+
} catch (eu: unknown) {
|
|
143
|
+
e = eu as Error
|
|
144
|
+
}
|
|
145
|
+
if (e && e.name !== 'ECONNRESET') break
|
|
146
|
+
}
|
|
147
|
+
if (e) throw e
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
async getJson<T>(path: string): Promise<T> {
|
|
151
|
+
const r = await this.getJsonOrUndefined<T>(path)
|
|
152
|
+
if (r === undefined) throw new Error('Value was undefined. Requested object may not exist.')
|
|
153
|
+
return r
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
/*
|
|
157
|
+
Please note that all methods hereafter are included only to match the interface of ChaintracksServiceClient.
|
|
158
|
+
*/
|
|
159
|
+
|
|
160
|
+
async postJsonVoid<T>(path: string, params: T): Promise<void> {
|
|
161
|
+
throw new Error('Not implemented')
|
|
162
|
+
}
|
|
163
|
+
|
|
164
|
+
async addHeader(header: any): Promise<void> {
|
|
165
|
+
throw new Error('Not implemented')
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
async findHeaderForMerkleRoot(merkleRoot: string, height?: number): Promise<undefined> {
|
|
169
|
+
throw new Error('Not implemented')
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
async startListening(): Promise<void> {
|
|
173
|
+
throw new Error('Not implemented')
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
async listening(): Promise<void> {
|
|
177
|
+
throw new Error('Not implemented')
|
|
178
|
+
}
|
|
179
|
+
|
|
180
|
+
async isSynchronized(): Promise<boolean> {
|
|
181
|
+
throw new Error('Not implemented')
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
async getChain(): Promise<sdk.Chain> {
|
|
185
|
+
return this.chain
|
|
186
|
+
}
|
|
187
|
+
|
|
188
|
+
async isListening(): Promise<boolean> {
|
|
189
|
+
throw new Error('Not implemented')
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
async getChainTipHeader(): Promise<BlockHeader> {
|
|
193
|
+
throw new Error('Not implemented')
|
|
194
|
+
}
|
|
195
|
+
|
|
196
|
+
async findChainTipHashHex(): Promise<string> {
|
|
197
|
+
throw new Error('Not implemented')
|
|
198
|
+
}
|
|
199
|
+
}
|
|
@@ -1,13 +1,17 @@
|
|
|
1
1
|
import { randomBytesHex, sdk } from '../index.client'
|
|
2
2
|
import { ChaintracksServiceClient } from './chaintracker'
|
|
3
3
|
|
|
4
|
-
export function createDefaultWalletServicesOptions(
|
|
4
|
+
export function createDefaultWalletServicesOptions(
|
|
5
|
+
chain: sdk.Chain,
|
|
6
|
+
arcCallbackUrl?: string,
|
|
7
|
+
arcCallbackToken?: string,
|
|
8
|
+
arcApiKey?: string
|
|
9
|
+
): sdk.WalletServicesOptions {
|
|
5
10
|
const deploymentId = `wallet-toolbox-${randomBytesHex(16)}`
|
|
6
11
|
const taalApiKey =
|
|
7
|
-
chain === 'main'
|
|
12
|
+
arcApiKey || chain === 'main'
|
|
8
13
|
? 'mainnet_9596de07e92300c6287e4393594ae39c' // no plan
|
|
9
14
|
: 'testnet_0e6cf72133b43ea2d7861da2a38684e3' // personal "starter" key
|
|
10
|
-
const gorillaPoolApiKey = chain === 'main' ? '' : ''
|
|
11
15
|
|
|
12
16
|
const o: sdk.WalletServicesOptions = {
|
|
13
17
|
chain,
|
|
@@ -37,13 +41,17 @@ export function createDefaultWalletServicesOptions(chain: sdk.Chain): sdk.Wallet
|
|
|
37
41
|
),
|
|
38
42
|
arcUrl: arcDefaultUrl(chain),
|
|
39
43
|
arcConfig: {
|
|
40
|
-
apiKey:
|
|
41
|
-
deploymentId
|
|
44
|
+
apiKey: arcApiKey ?? undefined,
|
|
45
|
+
deploymentId,
|
|
46
|
+
callbackUrl: arcCallbackUrl ?? undefined,
|
|
47
|
+
callbackToken: arcCallbackToken ?? undefined
|
|
42
48
|
},
|
|
43
49
|
arcGorillaPoolUrl: arcGorillaPoolUrl(chain),
|
|
44
50
|
arcGorillaPoolConfig: {
|
|
45
|
-
apiKey:
|
|
46
|
-
deploymentId
|
|
51
|
+
apiKey: arcApiKey ?? undefined,
|
|
52
|
+
deploymentId,
|
|
53
|
+
callbackUrl: arcCallbackUrl ?? undefined,
|
|
54
|
+
callbackToken: arcCallbackToken ?? undefined
|
|
47
55
|
}
|
|
48
56
|
}
|
|
49
57
|
return o
|
|
@@ -36,6 +36,7 @@ describe('storage adminStats tests', () => {
|
|
|
36
36
|
})
|
|
37
37
|
|
|
38
38
|
test('0 adminStats StorageKnex', async () => {
|
|
39
|
+
storage.setServices(setup.services)
|
|
39
40
|
const r = await storage.adminStats(env.identityKey)
|
|
40
41
|
console.log(Format.toLogStringAdminStats(r))
|
|
41
42
|
expect(r.requestedBy).toBe(env.identityKey)
|
package/out/src/sdk/CertOps.d.ts
DELETED
|
@@ -1,66 +0,0 @@
|
|
|
1
|
-
import { Base64String, Certificate as BsvCertificate, CertificateFieldNameUnder50Bytes, GetPublicKeyArgs, GetPublicKeyResult, OriginatorDomainNameStringUnder250Bytes, PubKeyHex, WalletCertificate, WalletDecryptArgs, WalletDecryptResult, WalletEncryptArgs, WalletEncryptResult, WalletProtocol } from '@bsv/sdk';
|
|
2
|
-
export interface CertOpsWallet {
|
|
3
|
-
getPublicKey(args: GetPublicKeyArgs, originator?: OriginatorDomainNameStringUnder250Bytes): Promise<GetPublicKeyResult>;
|
|
4
|
-
encrypt(args: WalletEncryptArgs, originator?: OriginatorDomainNameStringUnder250Bytes): Promise<WalletEncryptResult>;
|
|
5
|
-
decrypt(args: WalletDecryptArgs, originator?: OriginatorDomainNameStringUnder250Bytes): Promise<WalletDecryptResult>;
|
|
6
|
-
}
|
|
7
|
-
export declare class CertOps extends BsvCertificate {
|
|
8
|
-
wallet: CertOpsWallet;
|
|
9
|
-
_keyring?: Record<CertificateFieldNameUnder50Bytes, string>;
|
|
10
|
-
_encryptedFields?: Record<CertificateFieldNameUnder50Bytes, Base64String>;
|
|
11
|
-
_decryptedFields?: Record<CertificateFieldNameUnder50Bytes, string>;
|
|
12
|
-
constructor(wallet: CertOpsWallet, wc: WalletCertificate);
|
|
13
|
-
static fromCounterparty(wallet: CertOpsWallet, e: {
|
|
14
|
-
certificate: WalletCertificate;
|
|
15
|
-
keyring: Record<CertificateFieldNameUnder50Bytes, string>;
|
|
16
|
-
counterparty: PubKeyHex;
|
|
17
|
-
}): Promise<CertOps>;
|
|
18
|
-
static fromCertifier(wallet: CertOpsWallet, e: {
|
|
19
|
-
certificate: WalletCertificate;
|
|
20
|
-
keyring: Record<CertificateFieldNameUnder50Bytes, string>;
|
|
21
|
-
}): Promise<CertOps>;
|
|
22
|
-
static fromEncrypted(wallet: CertOpsWallet, wc: WalletCertificate, keyring: Record<CertificateFieldNameUnder50Bytes, string>): Promise<CertOps>;
|
|
23
|
-
static fromDecrypted(wallet: CertOpsWallet, wc: WalletCertificate): Promise<CertOps>;
|
|
24
|
-
static copyFields<T>(fields: Record<CertificateFieldNameUnder50Bytes, T>): Record<CertificateFieldNameUnder50Bytes, T>;
|
|
25
|
-
static getProtocolForCertificateFieldEncryption(serialNumber: string, fieldName: string): {
|
|
26
|
-
protocolID: WalletProtocol;
|
|
27
|
-
keyID: string;
|
|
28
|
-
};
|
|
29
|
-
exportForSubject(): {
|
|
30
|
-
certificate: WalletCertificate;
|
|
31
|
-
keyring: Record<CertificateFieldNameUnder50Bytes, string>;
|
|
32
|
-
};
|
|
33
|
-
toWalletCertificate(): WalletCertificate;
|
|
34
|
-
encryptFields(counterparty?: 'self' | PubKeyHex): Promise<{
|
|
35
|
-
fields: Record<CertificateFieldNameUnder50Bytes, string>;
|
|
36
|
-
keyring: Record<CertificateFieldNameUnder50Bytes, string>;
|
|
37
|
-
}>;
|
|
38
|
-
decryptFields(counterparty?: PubKeyHex, keyring?: Record<CertificateFieldNameUnder50Bytes, string>): Promise<Record<CertificateFieldNameUnder50Bytes, string>>;
|
|
39
|
-
exportForCounterparty(
|
|
40
|
-
/** The incoming counterparty is who they are to us. */
|
|
41
|
-
counterparty: PubKeyHex, fieldsToReveal: CertificateFieldNameUnder50Bytes[]): Promise<{
|
|
42
|
-
certificate: WalletCertificate;
|
|
43
|
-
keyring: Record<CertificateFieldNameUnder50Bytes, string>;
|
|
44
|
-
counterparty: PubKeyHex;
|
|
45
|
-
}>;
|
|
46
|
-
/**
|
|
47
|
-
* Creates a verifiable certificate structure for a specific verifier, allowing them access to specified fields.
|
|
48
|
-
* This method decrypts the master field keys for each field specified in `fieldsToReveal` and re-encrypts them
|
|
49
|
-
* for the verifier's identity key. The resulting certificate structure includes only the fields intended to be
|
|
50
|
-
* revealed and a verifier-specific keyring for field decryption.
|
|
51
|
-
*
|
|
52
|
-
* @param {PubKeyHex} verifierIdentityKey - The public identity key of the verifier who will receive access to the specified fields.
|
|
53
|
-
* @param {CertificateFieldNameUnder50Bytes[]} fieldsToReveal - An array of field names to be revealed to the verifier. Must be a subset of the certificate's fields.
|
|
54
|
-
* @returns {Promise<Record<CertificateFieldNameUnder50Bytes[], Base64String>} - A new certificate structure containing the original encrypted fields, the verifier-specific field decryption keyring, and essential certificate metadata.
|
|
55
|
-
* @throws {WERR_INVALID_PARAMETER} Throws an error if:
|
|
56
|
-
* - fieldsToReveal is empty or a field in `fieldsToReveal` does not exist in the certificate.
|
|
57
|
-
* - The decrypted master field key fails to decrypt the corresponding field (indicating an invalid key).
|
|
58
|
-
*/
|
|
59
|
-
createKeyringForVerifier(verifierIdentityKey: PubKeyHex, fieldsToReveal: CertificateFieldNameUnder50Bytes[]): Promise<Record<CertificateFieldNameUnder50Bytes, Base64String>>;
|
|
60
|
-
/**
|
|
61
|
-
* encrypt plaintext field values for the subject
|
|
62
|
-
* update the signature using the certifier's private key.
|
|
63
|
-
*/
|
|
64
|
-
encryptAndSignNewCertificate(): Promise<void>;
|
|
65
|
-
}
|
|
66
|
-
//# sourceMappingURL=CertOps.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CertOps.d.ts","sourceRoot":"","sources":["../../../src/sdk/CertOps.ts"],"names":[],"mappings":"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"}
|
package/out/src/sdk/CertOps.js
DELETED
|
@@ -1,198 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.CertOps = void 0;
|
|
4
|
-
const sdk_1 = require("@bsv/sdk");
|
|
5
|
-
const index_client_1 = require("../index.client");
|
|
6
|
-
const sdk_2 = require("@bsv/sdk");
|
|
7
|
-
const WERR_errors_1 = require("./WERR_errors");
|
|
8
|
-
class CertOps extends sdk_1.Certificate {
|
|
9
|
-
constructor(wallet, wc) {
|
|
10
|
-
super(wc.type, wc.serialNumber, wc.subject, wc.certifier, wc.revocationOutpoint, wc.fields, wc.signature);
|
|
11
|
-
this.wallet = wallet;
|
|
12
|
-
}
|
|
13
|
-
static async fromCounterparty(wallet, e) {
|
|
14
|
-
const c = new CertOps(wallet, e.certificate);
|
|
15
|
-
// confirm cert verifies and decrypts.
|
|
16
|
-
await c.verify();
|
|
17
|
-
await c.decryptFields(e.counterparty, e.keyring);
|
|
18
|
-
// un-decrypt
|
|
19
|
-
c.fields = c._encryptedFields;
|
|
20
|
-
return c;
|
|
21
|
-
}
|
|
22
|
-
static async fromCertifier(wallet, e) {
|
|
23
|
-
return await CertOps.fromCounterparty(wallet, {
|
|
24
|
-
counterparty: e.certificate.certifier,
|
|
25
|
-
...e
|
|
26
|
-
});
|
|
27
|
-
}
|
|
28
|
-
static async fromEncrypted(wallet, wc, keyring) {
|
|
29
|
-
const c = new CertOps(wallet, wc);
|
|
30
|
-
c._keyring = keyring;
|
|
31
|
-
c._encryptedFields = this.copyFields(c.fields);
|
|
32
|
-
c._decryptedFields = await c.decryptFields();
|
|
33
|
-
await c.verify();
|
|
34
|
-
return c;
|
|
35
|
-
}
|
|
36
|
-
static async fromDecrypted(wallet, wc) {
|
|
37
|
-
const c = new CertOps(wallet, wc);
|
|
38
|
-
({ fields: c._encryptedFields, keyring: c._keyring } =
|
|
39
|
-
await c.encryptFields());
|
|
40
|
-
c._decryptedFields = await c.decryptFields();
|
|
41
|
-
return c;
|
|
42
|
-
}
|
|
43
|
-
static copyFields(fields) {
|
|
44
|
-
const copy = {};
|
|
45
|
-
for (const [n, v] of Object.entries(fields))
|
|
46
|
-
copy[n] = v;
|
|
47
|
-
return copy;
|
|
48
|
-
}
|
|
49
|
-
static getProtocolForCertificateFieldEncryption(serialNumber, fieldName) {
|
|
50
|
-
return {
|
|
51
|
-
protocolID: [2, 'certificate field encryption'],
|
|
52
|
-
keyID: `${serialNumber} ${fieldName}`
|
|
53
|
-
};
|
|
54
|
-
}
|
|
55
|
-
exportForSubject() {
|
|
56
|
-
if (!this._keyring ||
|
|
57
|
-
!this._encryptedFields ||
|
|
58
|
-
!this.signature ||
|
|
59
|
-
this.signature.length === 0)
|
|
60
|
-
throw new WERR_errors_1.WERR_INVALID_OPERATION(`Certificate must be encrypted and signed prior to export.`);
|
|
61
|
-
const certificate = this.toWalletCertificate();
|
|
62
|
-
const keyring = this._keyring;
|
|
63
|
-
return { certificate, keyring };
|
|
64
|
-
}
|
|
65
|
-
toWalletCertificate() {
|
|
66
|
-
const wc = {
|
|
67
|
-
signature: '',
|
|
68
|
-
...this
|
|
69
|
-
};
|
|
70
|
-
return wc;
|
|
71
|
-
}
|
|
72
|
-
async encryptFields(counterparty = 'self') {
|
|
73
|
-
const fields = this._decryptedFields || this.fields;
|
|
74
|
-
const encryptedFields = {};
|
|
75
|
-
const keyring = {};
|
|
76
|
-
for (const fieldName of Object.keys(fields)) {
|
|
77
|
-
const fieldSymmetricKey = sdk_2.SymmetricKey.fromRandom();
|
|
78
|
-
const encryptedFieldValue = fieldSymmetricKey.encrypt(sdk_2.Utils.toArray(this.fields[fieldName], 'utf8'));
|
|
79
|
-
encryptedFields[fieldName] = sdk_2.Utils.toBase64(encryptedFieldValue);
|
|
80
|
-
const encryptedFieldKey = await this.wallet.encrypt({
|
|
81
|
-
plaintext: fieldSymmetricKey.toArray(),
|
|
82
|
-
counterparty,
|
|
83
|
-
...CertOps.getProtocolForCertificateFieldEncryption(this.serialNumber, fieldName)
|
|
84
|
-
});
|
|
85
|
-
keyring[fieldName] = sdk_2.Utils.toBase64(encryptedFieldKey.ciphertext);
|
|
86
|
-
}
|
|
87
|
-
this._keyring = keyring;
|
|
88
|
-
this._decryptedFields = fields;
|
|
89
|
-
this.fields = this._encryptedFields = encryptedFields;
|
|
90
|
-
return { fields: encryptedFields, keyring };
|
|
91
|
-
}
|
|
92
|
-
async decryptFields(counterparty, keyring) {
|
|
93
|
-
keyring || (keyring = this._keyring);
|
|
94
|
-
const fields = this._encryptedFields || this.fields;
|
|
95
|
-
const decryptedFields = {};
|
|
96
|
-
if (!keyring)
|
|
97
|
-
throw new index_client_1.sdk.WERR_INVALID_PARAMETER('keyring', 'valid');
|
|
98
|
-
try {
|
|
99
|
-
for (const fieldName of Object.keys(keyring)) {
|
|
100
|
-
const { plaintext: fieldRevelationKey } = await this.wallet.decrypt({
|
|
101
|
-
ciphertext: sdk_2.Utils.toArray(keyring[fieldName], 'base64'),
|
|
102
|
-
counterparty: counterparty || this.subject,
|
|
103
|
-
...CertOps.getProtocolForCertificateFieldEncryption(this.serialNumber, fieldName)
|
|
104
|
-
});
|
|
105
|
-
const fieldValue = new sdk_2.SymmetricKey(fieldRevelationKey).decrypt(sdk_2.Utils.toArray(fields[fieldName], 'base64'));
|
|
106
|
-
decryptedFields[fieldName] = sdk_2.Utils.toUTF8(fieldValue);
|
|
107
|
-
}
|
|
108
|
-
this._keyring = keyring;
|
|
109
|
-
this._encryptedFields = fields;
|
|
110
|
-
this.fields = this._decryptedFields = decryptedFields;
|
|
111
|
-
return decryptedFields;
|
|
112
|
-
}
|
|
113
|
-
catch (eu) {
|
|
114
|
-
const e = index_client_1.sdk.WalletError.fromUnknown(eu);
|
|
115
|
-
throw e;
|
|
116
|
-
}
|
|
117
|
-
}
|
|
118
|
-
async exportForCounterparty(
|
|
119
|
-
/** The incoming counterparty is who they are to us. */
|
|
120
|
-
counterparty, fieldsToReveal) {
|
|
121
|
-
if (!this._keyring ||
|
|
122
|
-
!this._encryptedFields ||
|
|
123
|
-
!this.signature ||
|
|
124
|
-
this.signature.length === 0)
|
|
125
|
-
throw new WERR_errors_1.WERR_INVALID_OPERATION(`Certificate must be encrypted and signed prior to export.`);
|
|
126
|
-
const certificate = this.toWalletCertificate();
|
|
127
|
-
const keyring = await this.createKeyringForVerifier(counterparty, fieldsToReveal);
|
|
128
|
-
// The exported counterparty is who we are to them...
|
|
129
|
-
return {
|
|
130
|
-
certificate,
|
|
131
|
-
keyring,
|
|
132
|
-
counterparty: await (0, index_client_1.getIdentityKey)(this.wallet)
|
|
133
|
-
};
|
|
134
|
-
}
|
|
135
|
-
/**
|
|
136
|
-
* Creates a verifiable certificate structure for a specific verifier, allowing them access to specified fields.
|
|
137
|
-
* This method decrypts the master field keys for each field specified in `fieldsToReveal` and re-encrypts them
|
|
138
|
-
* for the verifier's identity key. The resulting certificate structure includes only the fields intended to be
|
|
139
|
-
* revealed and a verifier-specific keyring for field decryption.
|
|
140
|
-
*
|
|
141
|
-
* @param {PubKeyHex} verifierIdentityKey - The public identity key of the verifier who will receive access to the specified fields.
|
|
142
|
-
* @param {CertificateFieldNameUnder50Bytes[]} fieldsToReveal - An array of field names to be revealed to the verifier. Must be a subset of the certificate's fields.
|
|
143
|
-
* @returns {Promise<Record<CertificateFieldNameUnder50Bytes[], Base64String>} - A new certificate structure containing the original encrypted fields, the verifier-specific field decryption keyring, and essential certificate metadata.
|
|
144
|
-
* @throws {WERR_INVALID_PARAMETER} Throws an error if:
|
|
145
|
-
* - fieldsToReveal is empty or a field in `fieldsToReveal` does not exist in the certificate.
|
|
146
|
-
* - The decrypted master field key fails to decrypt the corresponding field (indicating an invalid key).
|
|
147
|
-
*/
|
|
148
|
-
async createKeyringForVerifier(verifierIdentityKey, fieldsToReveal) {
|
|
149
|
-
if (!this._keyring || !this._encryptedFields)
|
|
150
|
-
throw new index_client_1.sdk.WERR_INVALID_OPERATION(`certificate must be encrypted`);
|
|
151
|
-
if (!Array.isArray(fieldsToReveal) ||
|
|
152
|
-
fieldsToReveal.some(n => this._encryptedFields[n] === undefined))
|
|
153
|
-
throw new index_client_1.sdk.WERR_INVALID_PARAMETER('fieldsToReveal', `an array of certificate field names`);
|
|
154
|
-
const fieldRevelationKeyring = {};
|
|
155
|
-
for (const fieldName of fieldsToReveal) {
|
|
156
|
-
// Create a keyID
|
|
157
|
-
const encryptedFieldKey = this._keyring[fieldName];
|
|
158
|
-
const protocol = CertOps.getProtocolForCertificateFieldEncryption(this.serialNumber, fieldName);
|
|
159
|
-
// Decrypt the master field key
|
|
160
|
-
const { plaintext: fieldKey } = await this.wallet.decrypt({
|
|
161
|
-
ciphertext: sdk_2.Utils.toArray(encryptedFieldKey, 'base64'),
|
|
162
|
-
counterparty: this.certifier,
|
|
163
|
-
...protocol
|
|
164
|
-
});
|
|
165
|
-
// Verify that derived key actually decrypts requested field
|
|
166
|
-
try {
|
|
167
|
-
new sdk_2.SymmetricKey(fieldKey).decrypt(sdk_2.Utils.toArray(this.fields[fieldName], 'base64'));
|
|
168
|
-
}
|
|
169
|
-
catch (_) {
|
|
170
|
-
throw new index_client_1.sdk.WERR_INTERNAL(`unable to decrypt field "${fieldName}" using derived field key.`);
|
|
171
|
-
}
|
|
172
|
-
// Encrypt derived fieldRevelationKey for verifier
|
|
173
|
-
const { ciphertext: encryptedFieldRevelationKey } = await this.wallet.encrypt({
|
|
174
|
-
plaintext: fieldKey,
|
|
175
|
-
counterparty: verifierIdentityKey,
|
|
176
|
-
...protocol
|
|
177
|
-
});
|
|
178
|
-
// Add encryptedFieldRevelationKey to fieldRevelationKeyring
|
|
179
|
-
fieldRevelationKeyring[fieldName] = sdk_2.Utils.toBase64(encryptedFieldRevelationKey);
|
|
180
|
-
}
|
|
181
|
-
// Return the field revelation keyring which can be used to create a verifiable certificate for a verifier.
|
|
182
|
-
return fieldRevelationKeyring;
|
|
183
|
-
}
|
|
184
|
-
/**
|
|
185
|
-
* encrypt plaintext field values for the subject
|
|
186
|
-
* update the signature using the certifier's private key.
|
|
187
|
-
*/
|
|
188
|
-
async encryptAndSignNewCertificate() {
|
|
189
|
-
if ((await (0, index_client_1.getIdentityKey)(this.wallet)) !== this.certifier)
|
|
190
|
-
throw new index_client_1.sdk.WERR_INVALID_PARAMETER('wallet', 'the certifier for new certificate issuance.');
|
|
191
|
-
await this.encryptFields(this.subject);
|
|
192
|
-
await this.sign(this.wallet);
|
|
193
|
-
// Confirm the signed certificate verifies:
|
|
194
|
-
await this.verify();
|
|
195
|
-
}
|
|
196
|
-
}
|
|
197
|
-
exports.CertOps = CertOps;
|
|
198
|
-
//# sourceMappingURL=CertOps.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"CertOps.js","sourceRoot":"","sources":["../../../src/sdk/CertOps.ts"],"names":[],"mappings":"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"}
|