@bsv/wallet-toolbox 1.4.4 → 1.4.5
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/mobile/out/src/WalletPermissionsManager.js +1 -0
- package/mobile/out/src/WalletPermissionsManager.js.map +1 -1
- package/out/src/CWIStyleWalletManager.js +1 -1
- package/out/src/CWIStyleWalletManager.js.map +1 -1
- package/out/src/sdk/CertOps.d.ts +66 -0
- package/out/src/sdk/CertOps.d.ts.map +1 -0
- package/out/src/sdk/CertOps.js +198 -0
- package/out/src/sdk/CertOps.js.map +1 -0
- package/out/src/sdk/StorageSyncReader.d.ts +121 -0
- package/out/src/sdk/StorageSyncReader.d.ts.map +1 -0
- package/out/src/sdk/StorageSyncReader.js +3 -0
- package/out/src/sdk/StorageSyncReader.js.map +1 -0
- package/out/src/sdk/StorageSyncReaderWriter.d.ts +89 -0
- package/out/src/sdk/StorageSyncReaderWriter.d.ts.map +1 -0
- package/out/src/sdk/StorageSyncReaderWriter.js +3 -0
- package/out/src/sdk/StorageSyncReaderWriter.js.map +1 -0
- package/out/src/services/__tests/ARC.test.d.ts +2 -0
- package/out/src/services/__tests/ARC.test.d.ts.map +1 -0
- package/out/src/services/__tests/ARC.test.js +104 -0
- package/out/src/services/__tests/ARC.test.js.map +1 -0
- package/out/src/services/chaintracker/chaintracks/BlockHeaderApi.d.ts +98 -0
- package/out/src/services/chaintracker/chaintracks/BlockHeaderApi.d.ts.map +1 -0
- package/out/src/services/chaintracker/chaintracks/BlockHeaderApi.js +38 -0
- package/out/src/services/chaintracker/chaintracks/BlockHeaderApi.js.map +1 -0
- package/out/src/storage/methods/listActions.d.ts +5 -0
- package/out/src/storage/methods/listActions.d.ts.map +1 -0
- package/out/src/storage/methods/listActions.js +228 -0
- package/out/src/storage/methods/listActions.js.map +1 -0
- package/out/src/storage/methods/listOutputs.d.ts +5 -0
- package/out/src/storage/methods/listOutputs.d.ts.map +1 -0
- package/out/src/storage/methods/listOutputs.js +295 -0
- package/out/src/storage/methods/listOutputs.js.map +1 -0
- package/out/src/storage/schema/entities/Certificate.d.ts +43 -0
- package/out/src/storage/schema/entities/Certificate.d.ts.map +1 -0
- package/out/src/storage/schema/entities/Certificate.js +162 -0
- package/out/src/storage/schema/entities/Certificate.js.map +1 -0
- package/out/src/storage/schema/entities/CertificateField.d.ts +32 -0
- package/out/src/storage/schema/entities/CertificateField.d.ts.map +1 -0
- package/out/src/storage/schema/entities/CertificateField.js +114 -0
- package/out/src/storage/schema/entities/CertificateField.js.map +1 -0
- package/out/src/storage/schema/entities/Commission.d.ts +37 -0
- package/out/src/storage/schema/entities/Commission.d.ts.map +1 -0
- package/out/src/storage/schema/entities/Commission.js +130 -0
- package/out/src/storage/schema/entities/Commission.js.map +1 -0
- package/out/src/storage/schema/entities/Output.d.ts +67 -0
- package/out/src/storage/schema/entities/Output.d.ts.map +1 -0
- package/out/src/storage/schema/entities/Output.js +281 -0
- package/out/src/storage/schema/entities/Output.js.map +1 -0
- package/out/src/storage/schema/entities/OutputBasket.d.ts +35 -0
- package/out/src/storage/schema/entities/OutputBasket.d.ts.map +1 -0
- package/out/src/storage/schema/entities/OutputBasket.js +133 -0
- package/out/src/storage/schema/entities/OutputBasket.js.map +1 -0
- package/out/src/storage/schema/entities/OutputTag.d.ts +31 -0
- package/out/src/storage/schema/entities/OutputTag.d.ts.map +1 -0
- package/out/src/storage/schema/entities/OutputTag.js +104 -0
- package/out/src/storage/schema/entities/OutputTag.js.map +1 -0
- package/out/src/storage/schema/entities/OutputTagMap.d.ts +28 -0
- package/out/src/storage/schema/entities/OutputTagMap.d.ts.map +1 -0
- package/out/src/storage/schema/entities/OutputTagMap.js +101 -0
- package/out/src/storage/schema/entities/OutputTagMap.js.map +1 -0
- package/out/src/storage/schema/entities/ProvenTx.d.ts +84 -0
- package/out/src/storage/schema/entities/ProvenTx.d.ts.map +1 -0
- package/out/src/storage/schema/entities/ProvenTx.js +286 -0
- package/out/src/storage/schema/entities/ProvenTx.js.map +1 -0
- package/out/src/storage/schema/entities/ProvenTxReq.d.ts +135 -0
- package/out/src/storage/schema/entities/ProvenTxReq.d.ts.map +1 -0
- package/out/src/storage/schema/entities/ProvenTxReq.js +532 -0
- package/out/src/storage/schema/entities/ProvenTxReq.js.map +1 -0
- package/out/src/storage/schema/entities/SyncState.d.ts +66 -0
- package/out/src/storage/schema/entities/SyncState.d.ts.map +1 -0
- package/out/src/storage/schema/entities/SyncState.js +284 -0
- package/out/src/storage/schema/entities/SyncState.js.map +1 -0
- package/out/src/storage/schema/entities/Transaction.d.ts +67 -0
- package/out/src/storage/schema/entities/Transaction.d.ts.map +1 -0
- package/out/src/storage/schema/entities/Transaction.js +264 -0
- package/out/src/storage/schema/entities/Transaction.js.map +1 -0
- package/out/src/storage/schema/entities/TxLabel.d.ts +31 -0
- package/out/src/storage/schema/entities/TxLabel.d.ts.map +1 -0
- package/out/src/storage/schema/entities/TxLabel.js +104 -0
- package/out/src/storage/schema/entities/TxLabel.js.map +1 -0
- package/out/src/storage/schema/entities/TxLabelMap.d.ts +28 -0
- package/out/src/storage/schema/entities/TxLabelMap.d.ts.map +1 -0
- package/out/src/storage/schema/entities/TxLabelMap.js +103 -0
- package/out/src/storage/schema/entities/TxLabelMap.js.map +1 -0
- package/out/src/storage/schema/entities/User.d.ts +29 -0
- package/out/src/storage/schema/entities/User.d.ts.map +1 -0
- package/out/src/storage/schema/entities/User.js +100 -0
- package/out/src/storage/schema/entities/User.js.map +1 -0
- package/out/src/storage/schema/tables/Certificate.d.ts +20 -0
- package/out/src/storage/schema/tables/Certificate.d.ts.map +1 -0
- package/out/src/storage/schema/tables/Certificate.js +3 -0
- package/out/src/storage/schema/tables/Certificate.js.map +1 -0
- package/out/src/storage/schema/tables/CertificateField.d.ts +12 -0
- package/out/src/storage/schema/tables/CertificateField.d.ts.map +1 -0
- package/out/src/storage/schema/tables/CertificateField.js +3 -0
- package/out/src/storage/schema/tables/CertificateField.js.map +1 -0
- package/out/src/storage/schema/tables/Commission.d.ts +13 -0
- package/out/src/storage/schema/tables/Commission.d.ts.map +1 -0
- package/out/src/storage/schema/tables/Commission.js +3 -0
- package/out/src/storage/schema/tables/Commission.js.map +1 -0
- package/out/src/storage/schema/tables/MonitorEvent.d.ts +9 -0
- package/out/src/storage/schema/tables/MonitorEvent.d.ts.map +1 -0
- package/out/src/storage/schema/tables/MonitorEvent.js +3 -0
- package/out/src/storage/schema/tables/MonitorEvent.js.map +1 -0
- package/out/src/storage/schema/tables/Output.d.ts +36 -0
- package/out/src/storage/schema/tables/Output.d.ts.map +1 -0
- package/out/src/storage/schema/tables/Output.js +31 -0
- package/out/src/storage/schema/tables/Output.js.map +1 -0
- package/out/src/storage/schema/tables/OutputBasket.d.ts +12 -0
- package/out/src/storage/schema/tables/OutputBasket.d.ts.map +1 -0
- package/out/src/storage/schema/tables/OutputBasket.js +3 -0
- package/out/src/storage/schema/tables/OutputBasket.js.map +1 -0
- package/out/src/storage/schema/tables/OutputTag.d.ts +10 -0
- package/out/src/storage/schema/tables/OutputTag.d.ts.map +1 -0
- package/out/src/storage/schema/tables/OutputTag.js +3 -0
- package/out/src/storage/schema/tables/OutputTag.js.map +1 -0
- package/out/src/storage/schema/tables/OutputTagMap.d.ts +9 -0
- package/out/src/storage/schema/tables/OutputTagMap.d.ts.map +1 -0
- package/out/src/storage/schema/tables/OutputTagMap.js +3 -0
- package/out/src/storage/schema/tables/OutputTagMap.js.map +1 -0
- package/out/src/storage/schema/tables/ProvenTx.d.ts +14 -0
- package/out/src/storage/schema/tables/ProvenTx.d.ts.map +1 -0
- package/out/src/storage/schema/tables/ProvenTx.js +3 -0
- package/out/src/storage/schema/tables/ProvenTx.js.map +1 -0
- package/out/src/storage/schema/tables/ProvenTxReq.d.ts +64 -0
- package/out/src/storage/schema/tables/ProvenTxReq.d.ts.map +1 -0
- package/out/src/storage/schema/tables/ProvenTxReq.js +3 -0
- package/out/src/storage/schema/tables/ProvenTxReq.js.map +1 -0
- package/out/src/storage/schema/tables/SyncState.d.ts +18 -0
- package/out/src/storage/schema/tables/SyncState.d.ts.map +1 -0
- package/out/src/storage/schema/tables/SyncState.js +3 -0
- package/out/src/storage/schema/tables/SyncState.js.map +1 -0
- package/out/src/storage/schema/tables/Transaction.d.ts +37 -0
- package/out/src/storage/schema/tables/Transaction.d.ts.map +1 -0
- package/out/src/storage/schema/tables/Transaction.js +21 -0
- package/out/src/storage/schema/tables/Transaction.js.map +1 -0
- package/out/src/storage/schema/tables/TxLabel.d.ts +10 -0
- package/out/src/storage/schema/tables/TxLabel.d.ts.map +1 -0
- package/out/src/storage/schema/tables/TxLabel.js +3 -0
- package/out/src/storage/schema/tables/TxLabel.js.map +1 -0
- package/out/src/storage/schema/tables/TxLabelMap.d.ts +9 -0
- package/out/src/storage/schema/tables/TxLabelMap.d.ts.map +1 -0
- package/out/src/storage/schema/tables/TxLabelMap.js +3 -0
- package/out/src/storage/schema/tables/TxLabelMap.js.map +1 -0
- package/out/src/storage/schema/tables/User.d.ts +16 -0
- package/out/src/storage/schema/tables/User.d.ts.map +1 -0
- package/out/src/storage/schema/tables/User.js +3 -0
- package/out/src/storage/schema/tables/User.js.map +1 -0
- 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/local/localWalletMethods.d.ts +28 -0
- package/out/test/Wallet/local/localWalletMethods.d.ts.map +1 -0
- package/out/test/Wallet/local/localWalletMethods.js +281 -0
- package/out/test/Wallet/local/localWalletMethods.js.map +1 -0
- package/out/test/Wallet/support/opers1.man.test.d.ts +2 -0
- package/out/test/Wallet/support/opers1.man.test.d.ts.map +1 -0
- package/out/test/Wallet/support/opers1.man.test.js +202 -0
- package/out/test/Wallet/support/opers1.man.test.js.map +1 -0
- 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 +1 -1
- package/src/CWIStyleWalletManager.ts +1 -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/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
|
@@ -0,0 +1,198 @@
|
|
|
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
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"CertOps.js","sourceRoot":"","sources":["../../../src/sdk/CertOps.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
import { sdk, TableCertificate, TableCertificateField, TableCertificateX, TableCommission, TableOutput, TableOutputBasket, TableOutputTag, TableOutputTagMap, TableProvenTx, TableProvenTxReq, TableSettings, TableSyncState, TableTransaction, TableTxLabel, TableTxLabelMap, TableUser } from '../index.client';
|
|
2
|
+
/**
|
|
3
|
+
* This is the minimal interface required for a WalletStorageProvider to export data to another provider.
|
|
4
|
+
*/
|
|
5
|
+
export interface StorageSyncReader {
|
|
6
|
+
isAvailable(): boolean;
|
|
7
|
+
makeAvailable(): Promise<TableSettings>;
|
|
8
|
+
destroy(): Promise<void>;
|
|
9
|
+
getSettings(): TableSettings;
|
|
10
|
+
findUserByIdentityKey(key: string): Promise<TableUser | undefined>;
|
|
11
|
+
findSyncStates(args: sdk.FindSyncStatesArgs): Promise<TableSyncState[]>;
|
|
12
|
+
findCertificateFields(args: sdk.FindCertificateFieldsArgs): Promise<TableCertificateField[]>;
|
|
13
|
+
findCertificates(args: sdk.FindCertificatesArgs): Promise<TableCertificateX[]>;
|
|
14
|
+
findCommissions(args: sdk.FindCommissionsArgs): Promise<TableCommission[]>;
|
|
15
|
+
findOutputBaskets(args: sdk.FindOutputBasketsArgs): Promise<TableOutputBasket[]>;
|
|
16
|
+
findOutputs(args: sdk.FindOutputsArgs): Promise<TableOutput[]>;
|
|
17
|
+
findOutputTags(args: sdk.FindOutputTagsArgs): Promise<TableOutputTag[]>;
|
|
18
|
+
findTransactions(args: sdk.FindTransactionsArgs): Promise<TableTransaction[]>;
|
|
19
|
+
findTxLabels(args: sdk.FindTxLabelsArgs): Promise<TableTxLabel[]>;
|
|
20
|
+
getProvenTxsForUser(args: sdk.FindForUserSincePagedArgs): Promise<TableProvenTx[]>;
|
|
21
|
+
getProvenTxReqsForUser(args: sdk.FindForUserSincePagedArgs): Promise<TableProvenTxReq[]>;
|
|
22
|
+
getTxLabelMapsForUser(args: sdk.FindForUserSincePagedArgs): Promise<TableTxLabelMap[]>;
|
|
23
|
+
getOutputTagMapsForUser(args: sdk.FindForUserSincePagedArgs): Promise<TableOutputTagMap[]>;
|
|
24
|
+
getSyncChunk(args: RequestSyncChunkArgs): Promise<SyncChunk>;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* success: Last sync of this user from this storage was successful.
|
|
28
|
+
*
|
|
29
|
+
* error: Last sync protocol operation for this user to this storage threw and error.
|
|
30
|
+
*
|
|
31
|
+
* identified: Configured sync storage has been identified but not sync'ed.
|
|
32
|
+
*
|
|
33
|
+
* unknown: Sync protocol state is unknown.
|
|
34
|
+
*/
|
|
35
|
+
export type SyncStatus = 'success' | 'error' | 'identified' | 'updated' | 'unknown';
|
|
36
|
+
export type SyncProtocolVersion = '0.1.0';
|
|
37
|
+
export interface RequestSyncChunkArgs {
|
|
38
|
+
/**
|
|
39
|
+
* The storageIdentityKey of the storage supplying the update SyncChunk data.
|
|
40
|
+
*/
|
|
41
|
+
fromStorageIdentityKey: string;
|
|
42
|
+
/**
|
|
43
|
+
* The storageIdentityKey of the storage consuming the update SyncChunk data.
|
|
44
|
+
*/
|
|
45
|
+
toStorageIdentityKey: string;
|
|
46
|
+
/**
|
|
47
|
+
* The identity of whose data is being requested
|
|
48
|
+
*/
|
|
49
|
+
identityKey: string;
|
|
50
|
+
/**
|
|
51
|
+
* The max updated_at time received from the storage service receiving the request.
|
|
52
|
+
* Will be undefiend if this is the first request or if no data was previously sync'ed.
|
|
53
|
+
*
|
|
54
|
+
* `since` must include items if 'updated_at' is greater or equal. Thus, when not undefined, a sync request should always return at least one item already seen.
|
|
55
|
+
*/
|
|
56
|
+
since?: Date;
|
|
57
|
+
/**
|
|
58
|
+
* A rough limit on how large the response should be.
|
|
59
|
+
* The item that exceeds the limit is included and ends adding more items.
|
|
60
|
+
*/
|
|
61
|
+
maxRoughSize: number;
|
|
62
|
+
/**
|
|
63
|
+
* The maximum number of items (records) to be returned.
|
|
64
|
+
*/
|
|
65
|
+
maxItems: number;
|
|
66
|
+
/**
|
|
67
|
+
* For each entity in dependency order, the offset at which to start returning items
|
|
68
|
+
* from `since`.
|
|
69
|
+
*
|
|
70
|
+
* The entity order is:
|
|
71
|
+
* 0 ProvenTxs
|
|
72
|
+
* 1 ProvenTxReqs
|
|
73
|
+
* 2 OutputBaskets
|
|
74
|
+
* 3 TxLabels
|
|
75
|
+
* 4 OutputTags
|
|
76
|
+
* 5 Transactions
|
|
77
|
+
* 6 TxLabelMaps
|
|
78
|
+
* 7 Commissions
|
|
79
|
+
* 8 Outputs
|
|
80
|
+
* 9 OutputTagMaps
|
|
81
|
+
* 10 Certificates
|
|
82
|
+
* 11 CertificateFields
|
|
83
|
+
*/
|
|
84
|
+
offsets: {
|
|
85
|
+
name: string;
|
|
86
|
+
offset: number;
|
|
87
|
+
}[];
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Result received from remote `WalletStorage` in response to a `RequestSyncChunkArgs` request.
|
|
91
|
+
*
|
|
92
|
+
* Each property is undefined if there was no attempt to update it. Typically this is caused by size and count limits on this result.
|
|
93
|
+
*
|
|
94
|
+
* If all properties are empty arrays the sync process has received all available new and updated items.
|
|
95
|
+
*/
|
|
96
|
+
export interface SyncChunk {
|
|
97
|
+
fromStorageIdentityKey: string;
|
|
98
|
+
toStorageIdentityKey: string;
|
|
99
|
+
userIdentityKey: string;
|
|
100
|
+
user?: TableUser;
|
|
101
|
+
provenTxs?: TableProvenTx[];
|
|
102
|
+
provenTxReqs?: TableProvenTxReq[];
|
|
103
|
+
outputBaskets?: TableOutputBasket[];
|
|
104
|
+
txLabels?: TableTxLabel[];
|
|
105
|
+
outputTags?: TableOutputTag[];
|
|
106
|
+
transactions?: TableTransaction[];
|
|
107
|
+
txLabelMaps?: TableTxLabelMap[];
|
|
108
|
+
commissions?: TableCommission[];
|
|
109
|
+
outputs?: TableOutput[];
|
|
110
|
+
outputTagMaps?: TableOutputTagMap[];
|
|
111
|
+
certificates?: TableCertificate[];
|
|
112
|
+
certificateFields?: TableCertificateField[];
|
|
113
|
+
}
|
|
114
|
+
export interface ProcessSyncChunkResult {
|
|
115
|
+
done: boolean;
|
|
116
|
+
maxUpdated_at: Date | undefined;
|
|
117
|
+
updates: number;
|
|
118
|
+
inserts: number;
|
|
119
|
+
error?: sdk.WalletError;
|
|
120
|
+
}
|
|
121
|
+
//# sourceMappingURL=StorageSyncReader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StorageSyncReader.d.ts","sourceRoot":"","sources":["../../../src/sdk/StorageSyncReader.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StorageSyncReader.js","sourceRoot":"","sources":["../../../src/sdk/StorageSyncReader.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { sdk, TableCertificate, TableCertificateField, TableCommission, TableOutput, TableOutputBasket, TableOutputTag, TableOutputTagMap, TableProvenTx, TableProvenTxReq, TableProvenTxReqDynamics, TableSyncState, TableTransaction, TableTxLabel, TableTxLabelMap, TableUser } from '../index.client';
|
|
2
|
+
/**
|
|
3
|
+
* This is the minimal interface required for a WalletStorageProvider to import and export data to another provider.
|
|
4
|
+
*/
|
|
5
|
+
export interface StorageSyncReaderWriter extends sdk.StorageSyncReader {
|
|
6
|
+
getProvenOrRawTx(txid: string, trx?: sdk.TrxToken): Promise<sdk.ProvenOrRawTx>;
|
|
7
|
+
purgeData(params: sdk.PurgeParams, trx?: sdk.TrxToken): Promise<sdk.PurgeResults>;
|
|
8
|
+
transaction<T>(scope: (trx: sdk.TrxToken) => Promise<T>, trx?: sdk.TrxToken): Promise<T>;
|
|
9
|
+
findOutputTagMaps(args: sdk.FindOutputTagMapsArgs): Promise<TableOutputTagMap[]>;
|
|
10
|
+
findProvenTxReqs(args: sdk.FindProvenTxReqsArgs): Promise<TableProvenTxReq[]>;
|
|
11
|
+
findProvenTxs(args: sdk.FindProvenTxsArgs): Promise<TableProvenTx[]>;
|
|
12
|
+
findTxLabelMaps(args: sdk.FindTxLabelMapsArgs): Promise<TableTxLabelMap[]>;
|
|
13
|
+
countOutputTagMaps(args: sdk.FindOutputTagMapsArgs): Promise<number>;
|
|
14
|
+
countProvenTxReqs(args: sdk.FindProvenTxReqsArgs): Promise<number>;
|
|
15
|
+
countProvenTxs(args: sdk.FindProvenTxsArgs): Promise<number>;
|
|
16
|
+
countTxLabelMaps(args: sdk.FindTxLabelMapsArgs): Promise<number>;
|
|
17
|
+
insertProvenTx(tx: TableProvenTx, trx?: sdk.TrxToken): Promise<number>;
|
|
18
|
+
insertProvenTxReq(tx: TableProvenTxReq, trx?: sdk.TrxToken): Promise<number>;
|
|
19
|
+
insertUser(user: TableUser, trx?: sdk.TrxToken): Promise<number>;
|
|
20
|
+
insertCertificate(certificate: TableCertificate, trx?: sdk.TrxToken): Promise<number>;
|
|
21
|
+
insertCertificateField(certificateField: TableCertificateField, trx?: sdk.TrxToken): Promise<void>;
|
|
22
|
+
insertOutputBasket(basket: TableOutputBasket, trx?: sdk.TrxToken): Promise<number>;
|
|
23
|
+
insertTransaction(tx: TableTransaction, trx?: sdk.TrxToken): Promise<number>;
|
|
24
|
+
insertCommission(commission: TableCommission, trx?: sdk.TrxToken): Promise<number>;
|
|
25
|
+
insertOutput(output: TableOutput, trx?: sdk.TrxToken): Promise<number>;
|
|
26
|
+
insertOutputTag(tag: TableOutputTag, trx?: sdk.TrxToken): Promise<number>;
|
|
27
|
+
insertOutputTagMap(tagMap: TableOutputTagMap, trx?: sdk.TrxToken): Promise<void>;
|
|
28
|
+
insertTxLabel(label: TableTxLabel, trx?: sdk.TrxToken): Promise<number>;
|
|
29
|
+
insertTxLabelMap(labelMap: TableTxLabelMap, trx?: sdk.TrxToken): Promise<void>;
|
|
30
|
+
insertSyncState(syncState: TableSyncState, trx?: sdk.TrxToken): Promise<number>;
|
|
31
|
+
updateCertificateField(certificateId: number, fieldName: string, update: Partial<TableCertificateField>, trx?: sdk.TrxToken): Promise<number>;
|
|
32
|
+
updateCertificate(id: number, update: Partial<TableCertificate>, trx?: sdk.TrxToken): Promise<number>;
|
|
33
|
+
updateCommission(id: number, update: Partial<TableCommission>, trx?: sdk.TrxToken): Promise<number>;
|
|
34
|
+
updateOutputBasket(id: number, update: Partial<TableOutputBasket>, trx?: sdk.TrxToken): Promise<number>;
|
|
35
|
+
updateOutput(id: number, update: Partial<TableOutput>, trx?: sdk.TrxToken): Promise<number>;
|
|
36
|
+
updateOutputTagMap(outputId: number, tagId: number, update: Partial<TableOutputTagMap>, trx?: sdk.TrxToken): Promise<number>;
|
|
37
|
+
updateOutputTag(id: number, update: Partial<TableOutputTag>, trx?: sdk.TrxToken): Promise<number>;
|
|
38
|
+
updateProvenTxReq(id: number | number[], update: Partial<TableProvenTxReq>, trx?: sdk.TrxToken): Promise<number>;
|
|
39
|
+
updateProvenTxReqDynamics(id: number, update: Partial<TableProvenTxReqDynamics>, trx?: sdk.TrxToken): Promise<number>;
|
|
40
|
+
updateProvenTxReqWithNewProvenTx(args: sdk.UpdateProvenTxReqWithNewProvenTxArgs): Promise<sdk.UpdateProvenTxReqWithNewProvenTxResult>;
|
|
41
|
+
updateProvenTx(id: number, update: Partial<TableProvenTx>, trx?: sdk.TrxToken): Promise<number>;
|
|
42
|
+
updateSyncState(id: number, update: Partial<TableSyncState>, trx?: sdk.TrxToken): Promise<number>;
|
|
43
|
+
updateTransaction(id: number | number[], update: Partial<TableTransaction>, trx?: sdk.TrxToken): Promise<number>;
|
|
44
|
+
updateTransactionStatus(status: sdk.TransactionStatus, transactionId?: number, userId?: number, reference?: string, trx?: sdk.TrxToken): Promise<void>;
|
|
45
|
+
updateTransactionsStatus(transactionIds: number[], status: sdk.TransactionStatus): Promise<void>;
|
|
46
|
+
updateTxLabelMap(transactionId: number, txLabelId: number, update: Partial<TableTxLabelMap>, trx?: sdk.TrxToken): Promise<number>;
|
|
47
|
+
updateTxLabel(id: number, update: Partial<TableTxLabel>, trx?: sdk.TrxToken): Promise<number>;
|
|
48
|
+
updateUser(id: number, update: Partial<TableUser>, trx?: sdk.TrxToken): Promise<number>;
|
|
49
|
+
findCertificateById(id: number, trx?: sdk.TrxToken): Promise<TableCertificate | undefined>;
|
|
50
|
+
findCommissionById(id: number, trx?: sdk.TrxToken): Promise<TableCommission | undefined>;
|
|
51
|
+
findOutputById(id: number, trx?: sdk.TrxToken, noScript?: boolean): Promise<TableOutput | undefined>;
|
|
52
|
+
findOutputBasketById(id: number, trx?: sdk.TrxToken): Promise<TableOutputBasket | undefined>;
|
|
53
|
+
findProvenTxById(id: number, trx?: sdk.TrxToken | undefined): Promise<TableProvenTx | undefined>;
|
|
54
|
+
findProvenTxReqById(id: number, trx?: sdk.TrxToken | undefined): Promise<TableProvenTxReq | undefined>;
|
|
55
|
+
findSyncStateById(id: number, trx?: sdk.TrxToken): Promise<TableSyncState | undefined>;
|
|
56
|
+
findTransactionById(id: number, trx?: sdk.TrxToken, noRawTx?: boolean): Promise<TableTransaction | undefined>;
|
|
57
|
+
findTxLabelById(id: number, trx?: sdk.TrxToken): Promise<TableTxLabel | undefined>;
|
|
58
|
+
findOutputTagById(id: number, trx?: sdk.TrxToken): Promise<TableOutputTag | undefined>;
|
|
59
|
+
findUserById(id: number, trx?: sdk.TrxToken): Promise<TableUser | undefined>;
|
|
60
|
+
findOrInsertUser(identityKey: string, trx?: sdk.TrxToken): Promise<{
|
|
61
|
+
user: TableUser;
|
|
62
|
+
isNew: boolean;
|
|
63
|
+
}>;
|
|
64
|
+
findOrInsertTransaction(newTx: TableTransaction, trx?: sdk.TrxToken): Promise<{
|
|
65
|
+
tx: TableTransaction;
|
|
66
|
+
isNew: boolean;
|
|
67
|
+
}>;
|
|
68
|
+
findOrInsertOutputBasket(userId: number, name: string, trx?: sdk.TrxToken): Promise<TableOutputBasket>;
|
|
69
|
+
findOrInsertTxLabel(userId: number, label: string, trx?: sdk.TrxToken): Promise<TableTxLabel>;
|
|
70
|
+
findOrInsertTxLabelMap(transactionId: number, txLabelId: number, trx?: sdk.TrxToken): Promise<TableTxLabelMap>;
|
|
71
|
+
findOrInsertOutputTag(userId: number, tag: string, trx?: sdk.TrxToken): Promise<TableOutputTag>;
|
|
72
|
+
findOrInsertOutputTagMap(outputId: number, outputTagId: number, trx?: sdk.TrxToken): Promise<TableOutputTagMap>;
|
|
73
|
+
findOrInsertSyncStateAuth(auth: sdk.AuthId, storageIdentityKey: string, storageName: string): Promise<{
|
|
74
|
+
syncState: TableSyncState;
|
|
75
|
+
isNew: boolean;
|
|
76
|
+
}>;
|
|
77
|
+
findOrInsertProvenTxReq(newReq: TableProvenTxReq, trx?: sdk.TrxToken): Promise<{
|
|
78
|
+
req: TableProvenTxReq;
|
|
79
|
+
isNew: boolean;
|
|
80
|
+
}>;
|
|
81
|
+
findOrInsertProvenTx(newProven: TableProvenTx, trx?: sdk.TrxToken): Promise<{
|
|
82
|
+
proven: TableProvenTx;
|
|
83
|
+
isNew: boolean;
|
|
84
|
+
}>;
|
|
85
|
+
findUsers(args: sdk.FindUsersArgs): Promise<TableUser[]>;
|
|
86
|
+
tagOutput(partial: Partial<TableOutput>, tag: string, trx?: sdk.TrxToken): Promise<void>;
|
|
87
|
+
processSyncChunk(args: sdk.RequestSyncChunkArgs, chunk: sdk.SyncChunk): Promise<sdk.ProcessSyncChunkResult>;
|
|
88
|
+
}
|
|
89
|
+
//# sourceMappingURL=StorageSyncReaderWriter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StorageSyncReaderWriter.d.ts","sourceRoot":"","sources":["../../../src/sdk/StorageSyncReaderWriter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StorageSyncReaderWriter.js","sourceRoot":"","sources":["../../../src/sdk/StorageSyncReaderWriter.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ARC.test.d.ts","sourceRoot":"","sources":["../../../../src/services/__tests/ARC.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const TestUtilsWalletStorage_1 = require("../../../test/utils/TestUtilsWalletStorage");
|
|
4
|
+
const index_client_1 = require("../../index.client");
|
|
5
|
+
const ARC_1 = require("../providers/ARC");
|
|
6
|
+
const sdk_1 = require("@bsv/sdk");
|
|
7
|
+
const createDefaultWalletServicesOptions_1 = require("../createDefaultWalletServicesOptions");
|
|
8
|
+
const index_all_1 = require("../../index.all");
|
|
9
|
+
describe('ARC tests', () => {
|
|
10
|
+
jest.setTimeout(99999999);
|
|
11
|
+
const envTest = TestUtilsWalletStorage_1._tu.getEnv('test');
|
|
12
|
+
const arcTest = new ARC_1.ARC((0, createDefaultWalletServicesOptions_1.arcDefaultUrl)(envTest.chain), {
|
|
13
|
+
apiKey: envTest.taalApiKey
|
|
14
|
+
});
|
|
15
|
+
const envMain = TestUtilsWalletStorage_1._tu.getEnv('main');
|
|
16
|
+
const arcMain = new ARC_1.ARC((0, createDefaultWalletServicesOptions_1.arcDefaultUrl)(envMain.chain), {
|
|
17
|
+
apiKey: envMain.taalApiKey
|
|
18
|
+
});
|
|
19
|
+
test.skip('0 double spend', async () => {
|
|
20
|
+
const arc = arcTest;
|
|
21
|
+
const beef = sdk_1.Beef.fromString(testnetDoubleSpendBeef);
|
|
22
|
+
const txids = [beef.txs.slice(-1)[0].txid];
|
|
23
|
+
const r = await arc.postBeef(beef, txids);
|
|
24
|
+
expect(r.status === 'error').toBe(true);
|
|
25
|
+
expect(r.txidResults[0].doubleSpend).toBe(true);
|
|
26
|
+
});
|
|
27
|
+
test.skip('7 postRawTx testnet', async () => {
|
|
28
|
+
await postRawTxTest('test', arcTest);
|
|
29
|
+
});
|
|
30
|
+
test.skip('8 postRawTx mainnet', async () => {
|
|
31
|
+
await postRawTxTest('main', arcMain);
|
|
32
|
+
});
|
|
33
|
+
test.skip('9 postBeef testnet', async () => {
|
|
34
|
+
const r = await postBeefTest('test', arcTest);
|
|
35
|
+
console.log(`9 postBeef testnet done ${r}`);
|
|
36
|
+
});
|
|
37
|
+
test.skip('10 postBeef mainnet', async () => {
|
|
38
|
+
const r = await postBeefTest('main', arcMain);
|
|
39
|
+
console.log(`10 postBeef mainnet done ${r}`);
|
|
40
|
+
});
|
|
41
|
+
});
|
|
42
|
+
async function postBeefTest(chain, arc) {
|
|
43
|
+
if (index_all_1.Setup.noEnv(chain))
|
|
44
|
+
return 'skipped';
|
|
45
|
+
const c = await TestUtilsWalletStorage_1._tu.createNoSendTxPair(chain);
|
|
46
|
+
const txids = [c.txidDo, c.txidUndo];
|
|
47
|
+
const r = await arc.postBeef(c.beef, txids);
|
|
48
|
+
expect(r.status).toBe('success');
|
|
49
|
+
for (const txid of txids) {
|
|
50
|
+
const tr = r.txidResults.find(tx => tx.txid === txid);
|
|
51
|
+
expect(tr).not.toBeUndefined();
|
|
52
|
+
expect(tr.status).toBe('success');
|
|
53
|
+
}
|
|
54
|
+
// replace Undo transaction with double spend transaction and send again.
|
|
55
|
+
const beef2 = c.beef.clone();
|
|
56
|
+
beef2.txs[beef2.txs.length - 1] = sdk_1.BeefTx.fromTx(c.doubleSpendTx);
|
|
57
|
+
const txids2 = [c.txidDo, c.doubleSpendTx.id('hex')];
|
|
58
|
+
const r2 = await arc.postBeef(beef2, txids2);
|
|
59
|
+
expect(r2.status).toBe('error');
|
|
60
|
+
for (const txid of txids2) {
|
|
61
|
+
const tr = r2.txidResults.find(tx => tx.txid === txid);
|
|
62
|
+
expect(tr).not.toBeUndefined();
|
|
63
|
+
if (txid === c.txidDo) {
|
|
64
|
+
expect(tr.status).toBe('success');
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
expect(tr.status).toBe('error');
|
|
68
|
+
expect(tr.doubleSpend).toBe(true);
|
|
69
|
+
expect(tr.competingTxs).toEqual([c.txidUndo]);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
return 'passed';
|
|
73
|
+
}
|
|
74
|
+
async function postRawTxTest(chain, arc) {
|
|
75
|
+
if (index_all_1.Setup.noEnv(chain))
|
|
76
|
+
return;
|
|
77
|
+
const c = await TestUtilsWalletStorage_1._tu.createNoSendTxPair(chain);
|
|
78
|
+
const rawTxDo = c.beef.findTxid(c.txidDo).tx.toHex();
|
|
79
|
+
const rawTxUndo = c.beef.findTxid(c.txidUndo).tx.toHex();
|
|
80
|
+
const rDo = await arc.postRawTx(rawTxDo);
|
|
81
|
+
expect(rDo.status).toBe('success');
|
|
82
|
+
expect(rDo.txid).toBe(c.txidDo);
|
|
83
|
+
await (0, index_client_1.wait)(1000);
|
|
84
|
+
const rUndo = await arc.postRawTx(rawTxUndo);
|
|
85
|
+
expect(rUndo.status).toBe('success');
|
|
86
|
+
expect(rUndo.txid).toBe(c.txidUndo);
|
|
87
|
+
expect(rUndo.doubleSpend).not.toBe(true);
|
|
88
|
+
await (0, index_client_1.wait)(1000);
|
|
89
|
+
{
|
|
90
|
+
// Send same transaction again...
|
|
91
|
+
const rUndo = await arc.postRawTx(rawTxUndo);
|
|
92
|
+
expect(rUndo.status).toBe('success');
|
|
93
|
+
expect(rUndo.txid).toBe(c.txidUndo);
|
|
94
|
+
expect(rUndo.doubleSpend).not.toBe(true);
|
|
95
|
+
}
|
|
96
|
+
await (0, index_client_1.wait)(1000);
|
|
97
|
+
// Confirm double spend detection.
|
|
98
|
+
const rDouble = await arc.postRawTx(c.doubleSpendTx.toHex());
|
|
99
|
+
expect(rDouble.status).toBe('error');
|
|
100
|
+
expect(rDouble.doubleSpend).toBe(true);
|
|
101
|
+
expect(rDouble.competingTxs[0]).toBe(c.txidUndo);
|
|
102
|
+
}
|
|
103
|
+
const testnetDoubleSpendBeef = '0100beef01fe65631900020200009df812619ae232d2363d91516ab3e811211192933526bbc2aee71b54ccb236d10102462876eec65d9aa26d957421c5cc8dd9119b61177242b9dd814fb190fd0a361801010076a3297928f6841bcb656e91225540e87c65f67d8ec12bc768d7656eb7561b3d02010000000159617a9d17562f7c9765e5dfa6a9a393aa2809ca6166a3d7a31c09efcc5070141f0000006a47304402200a528145a67ba1879b88a093cb711f79f04413a81d5678f314302e36a7f59e43022010bc4bb3c2574052c50bbdc8a05c31fb39e69280656b34f5dc22e2ceadc3bb4a412102fd4200bf389d16479b3d06f97fee0752f2c3b9dc29fb3ddce2b327d851b8902bffffffff0204000000000000001976a9140df1a69c834bb7d9bb5b2b7d6a34e5a401db3e1688ac01000000000000001976a91423f2562a8092ed24eddc77c74387b44c561692a188ac0000000001000100000001462876eec65d9aa26d957421c5cc8dd9119b61177242b9dd814fb190fd0a3618000000006a47304402204183bbfdcf11d50907b91f5e70ea8f81228501ce84e24af75c8d984682d094dc022029caa8f7e5acb4990bbeafee523a3c4a99b78e98b9e5c41349147b099679d4ae412103b76389eea6494c2c30443cba9d59b9dba05fb04e467bc94272629615b87a429fffffffff0202000000000000001976a91476d851e59fcb4ee0ebe6947496db3a393b08e49c88ac01000000000000001976a91423f2562a8092ed24eddc77c74387b44c561692a188ac0000000000';
|
|
104
|
+
//# sourceMappingURL=ARC.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ARC.test.js","sourceRoot":"","sources":["../../../../src/services/__tests/ARC.test.ts"],"names":[],"mappings":"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"}
|