@nucypher/taco 0.7.0-alpha.2 → 0.7.0-dev.viem
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/README.md +149 -0
- package/dist/cjs/access-client/client.d.ts +237 -0
- package/dist/cjs/access-client/client.js +196 -0
- package/dist/cjs/access-client/client.js.map +1 -0
- package/dist/cjs/access-client/config-validator.d.ts +92 -0
- package/dist/cjs/access-client/config-validator.js +204 -0
- package/dist/cjs/access-client/config-validator.js.map +1 -0
- package/dist/cjs/access-client/config.d.ts +50 -0
- package/dist/cjs/access-client/config.js +27 -0
- package/dist/cjs/access-client/config.js.map +1 -0
- package/dist/cjs/access-client/index.d.ts +2 -0
- package/dist/cjs/access-client/index.js +19 -0
- package/dist/cjs/access-client/index.js.map +1 -0
- package/dist/cjs/conditions/base/contract.d.ts +4 -4
- package/dist/cjs/conditions/base/contract.js +8 -8
- package/dist/cjs/conditions/base/contract.js.map +1 -1
- package/dist/cjs/conditions/base/index.d.ts +6 -9
- package/dist/cjs/conditions/base/index.js +7 -10
- package/dist/cjs/conditions/base/index.js.map +1 -1
- package/dist/cjs/conditions/base/json-api.d.ts +4 -4
- package/dist/cjs/conditions/base/json-api.js +8 -8
- package/dist/cjs/conditions/base/json-api.js.map +1 -1
- package/dist/cjs/conditions/base/json-rpc.d.ts +4 -4
- package/dist/cjs/conditions/base/json-rpc.js +8 -8
- package/dist/cjs/conditions/base/json-rpc.js.map +1 -1
- package/dist/cjs/conditions/base/jwt.d.ts +4 -4
- package/dist/cjs/conditions/base/jwt.js +9 -9
- package/dist/cjs/conditions/base/jwt.js.map +1 -1
- package/dist/cjs/conditions/base/rpc.d.ts +4 -4
- package/dist/cjs/conditions/base/rpc.js +8 -8
- package/dist/cjs/conditions/base/rpc.js.map +1 -1
- package/dist/cjs/conditions/base/time.d.ts +4 -4
- package/dist/cjs/conditions/base/time.js +9 -9
- package/dist/cjs/conditions/base/time.js.map +1 -1
- package/dist/cjs/conditions/compound-condition.d.ts +4 -4
- package/dist/cjs/conditions/compound-condition.js +9 -9
- package/dist/cjs/conditions/compound-condition.js.map +1 -1
- package/dist/cjs/conditions/condition-expr.d.ts +1 -1
- package/dist/cjs/conditions/condition-expr.js +7 -7
- package/dist/cjs/conditions/condition-expr.js.map +1 -1
- package/dist/cjs/conditions/condition-factory.d.ts +1 -1
- package/dist/cjs/conditions/condition-factory.js +27 -38
- package/dist/cjs/conditions/condition-factory.js.map +1 -1
- package/dist/cjs/conditions/condition.d.ts +1 -1
- package/dist/cjs/conditions/condition.js +6 -6
- package/dist/cjs/conditions/condition.js.map +1 -1
- package/dist/cjs/conditions/context/context.d.ts +2 -6
- package/dist/cjs/conditions/context/context.js +16 -41
- package/dist/cjs/conditions/context/context.js.map +1 -1
- package/dist/cjs/conditions/context/index.d.ts +1 -1
- package/dist/cjs/conditions/context/index.js +2 -2
- package/dist/cjs/conditions/context/index.js.map +1 -1
- package/dist/cjs/conditions/if-then-else-condition.d.ts +4 -4
- package/dist/cjs/conditions/if-then-else-condition.js +8 -8
- package/dist/cjs/conditions/if-then-else-condition.js.map +1 -1
- package/dist/cjs/conditions/index.d.ts +9 -9
- package/dist/cjs/conditions/index.js +10 -10
- package/dist/cjs/conditions/index.js.map +1 -1
- package/dist/cjs/conditions/multi-condition.d.ts +1 -1
- package/dist/cjs/conditions/multi-condition.js +8 -8
- package/dist/cjs/conditions/multi-condition.js.map +1 -1
- package/dist/cjs/conditions/predefined/erc20.d.ts +1 -1
- package/dist/cjs/conditions/predefined/erc20.js +3 -3
- package/dist/cjs/conditions/predefined/erc20.js.map +1 -1
- package/dist/cjs/conditions/predefined/erc721.d.ts +1 -1
- package/dist/cjs/conditions/predefined/erc721.js +5 -5
- package/dist/cjs/conditions/predefined/erc721.js.map +1 -1
- package/dist/cjs/conditions/predefined/index.d.ts +2 -2
- package/dist/cjs/conditions/predefined/index.js +2 -2
- package/dist/cjs/conditions/predefined/index.js.map +1 -1
- package/dist/cjs/conditions/schemas/common.d.ts +0 -2
- package/dist/cjs/conditions/schemas/common.js +8 -25
- package/dist/cjs/conditions/schemas/common.js.map +1 -1
- package/dist/cjs/conditions/schemas/compound.js +6 -6
- package/dist/cjs/conditions/schemas/compound.js.map +1 -1
- package/dist/cjs/conditions/schemas/context.js +5 -5
- package/dist/cjs/conditions/schemas/context.js.map +1 -1
- package/dist/cjs/conditions/schemas/contract.d.ts +30 -33
- package/dist/cjs/conditions/schemas/contract.js +4 -4
- package/dist/cjs/conditions/schemas/contract.js.map +1 -1
- package/dist/cjs/conditions/schemas/export-for-zod-doc-gen.d.ts +13 -16
- package/dist/cjs/conditions/schemas/export-for-zod-doc-gen.js +13 -17
- package/dist/cjs/conditions/schemas/export-for-zod-doc-gen.js.map +1 -1
- package/dist/cjs/conditions/schemas/if-then-else.js +10 -10
- package/dist/cjs/conditions/schemas/if-then-else.js.map +1 -1
- package/dist/cjs/conditions/schemas/json-api.d.ts +14 -47
- package/dist/cjs/conditions/schemas/json-api.js +9 -23
- package/dist/cjs/conditions/schemas/json-api.js.map +1 -1
- package/dist/cjs/conditions/schemas/json-rpc.d.ts +13 -48
- package/dist/cjs/conditions/schemas/json-rpc.js +9 -23
- package/dist/cjs/conditions/schemas/json-rpc.js.map +1 -1
- package/dist/cjs/conditions/schemas/jwt.d.ts +4 -2
- package/dist/cjs/conditions/schemas/jwt.js +4 -4
- package/dist/cjs/conditions/schemas/jwt.js.map +1 -1
- package/dist/cjs/conditions/schemas/return-value-test.d.ts +12 -28
- package/dist/cjs/conditions/schemas/return-value-test.js +8 -22
- package/dist/cjs/conditions/schemas/return-value-test.js.map +1 -1
- package/dist/cjs/conditions/schemas/rpc.d.ts +16 -22
- package/dist/cjs/conditions/schemas/rpc.js +8 -8
- package/dist/cjs/conditions/schemas/rpc.js.map +1 -1
- package/dist/cjs/conditions/schemas/sequential.js +18 -38
- package/dist/cjs/conditions/schemas/sequential.js.map +1 -1
- package/dist/cjs/conditions/schemas/time.d.ts +10 -18
- package/dist/cjs/conditions/schemas/time.js +2 -2
- package/dist/cjs/conditions/schemas/time.js.map +1 -1
- package/dist/cjs/conditions/schemas/utils.js +18 -25
- package/dist/cjs/conditions/schemas/utils.js.map +1 -1
- package/dist/cjs/conditions/sequential.d.ts +4 -4
- package/dist/cjs/conditions/sequential.js +8 -8
- package/dist/cjs/conditions/sequential.js.map +1 -1
- package/dist/cjs/conditions/shared.d.ts +2 -2
- package/dist/cjs/conditions/shared.js +6 -6
- package/dist/cjs/conditions/shared.js.map +1 -1
- package/dist/cjs/index.d.ts +3 -3
- package/dist/cjs/index.js +8 -9
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/taco.d.ts +82 -43
- package/dist/cjs/taco.js +28 -86
- package/dist/cjs/taco.js.map +1 -1
- package/dist/cjs/tdec.d.ts +2 -2
- package/dist/cjs/tdec.js +7 -7
- package/dist/cjs/tdec.js.map +1 -1
- package/dist/cjs/types.d.ts +0 -1
- package/dist/es/access-client/client.d.ts +237 -0
- package/dist/es/access-client/client.js +192 -0
- package/dist/es/access-client/client.js.map +1 -0
- package/dist/es/access-client/config-validator.d.ts +92 -0
- package/dist/es/access-client/config-validator.js +200 -0
- package/dist/es/access-client/config-validator.js.map +1 -0
- package/dist/es/access-client/config.d.ts +50 -0
- package/dist/es/access-client/config.js +23 -0
- package/dist/es/access-client/config.js.map +1 -0
- package/dist/es/access-client/index.d.ts +2 -0
- package/dist/es/access-client/index.js +3 -0
- package/dist/es/access-client/index.js.map +1 -0
- package/dist/es/conditions/base/contract.d.ts +4 -4
- package/dist/es/conditions/base/contract.js +3 -3
- package/dist/es/conditions/base/contract.js.map +1 -1
- package/dist/es/conditions/base/index.d.ts +6 -9
- package/dist/es/conditions/base/index.js +6 -9
- package/dist/es/conditions/base/index.js.map +1 -1
- package/dist/es/conditions/base/json-api.d.ts +4 -4
- package/dist/es/conditions/base/json-api.js +3 -3
- package/dist/es/conditions/base/json-api.js.map +1 -1
- package/dist/es/conditions/base/json-rpc.d.ts +4 -4
- package/dist/es/conditions/base/json-rpc.js +3 -3
- package/dist/es/conditions/base/json-rpc.js.map +1 -1
- package/dist/es/conditions/base/jwt.d.ts +4 -4
- package/dist/es/conditions/base/jwt.js +3 -3
- package/dist/es/conditions/base/jwt.js.map +1 -1
- package/dist/es/conditions/base/rpc.d.ts +4 -4
- package/dist/es/conditions/base/rpc.js +3 -3
- package/dist/es/conditions/base/rpc.js.map +1 -1
- package/dist/es/conditions/base/time.d.ts +4 -4
- package/dist/es/conditions/base/time.js +3 -3
- package/dist/es/conditions/base/time.js.map +1 -1
- package/dist/es/conditions/compound-condition.d.ts +4 -4
- package/dist/es/conditions/compound-condition.js +3 -3
- package/dist/es/conditions/compound-condition.js.map +1 -1
- package/dist/es/conditions/condition-expr.d.ts +1 -1
- package/dist/es/conditions/condition-expr.js +2 -2
- package/dist/es/conditions/condition-expr.js.map +1 -1
- package/dist/es/conditions/condition-factory.d.ts +1 -1
- package/dist/es/conditions/condition-factory.js +9 -20
- package/dist/es/conditions/condition-factory.js.map +1 -1
- package/dist/es/conditions/condition.d.ts +1 -1
- package/dist/es/conditions/condition.js +3 -3
- package/dist/es/conditions/condition.js.map +1 -1
- package/dist/es/conditions/context/context.d.ts +2 -6
- package/dist/es/conditions/context/context.js +6 -31
- package/dist/es/conditions/context/context.js.map +1 -1
- package/dist/es/conditions/context/index.d.ts +1 -1
- package/dist/es/conditions/context/index.js +1 -1
- package/dist/es/conditions/context/index.js.map +1 -1
- package/dist/es/conditions/if-then-else-condition.d.ts +4 -4
- package/dist/es/conditions/if-then-else-condition.js +3 -3
- package/dist/es/conditions/if-then-else-condition.js.map +1 -1
- package/dist/es/conditions/index.d.ts +9 -9
- package/dist/es/conditions/index.js +9 -9
- package/dist/es/conditions/index.js.map +1 -1
- package/dist/es/conditions/multi-condition.d.ts +1 -1
- package/dist/es/conditions/multi-condition.js +3 -3
- package/dist/es/conditions/multi-condition.js.map +1 -1
- package/dist/es/conditions/predefined/erc20.d.ts +1 -1
- package/dist/es/conditions/predefined/erc20.js +1 -1
- package/dist/es/conditions/predefined/erc20.js.map +1 -1
- package/dist/es/conditions/predefined/erc721.d.ts +1 -1
- package/dist/es/conditions/predefined/erc721.js +1 -1
- package/dist/es/conditions/predefined/erc721.js.map +1 -1
- package/dist/es/conditions/predefined/index.d.ts +2 -2
- package/dist/es/conditions/predefined/index.js +2 -2
- package/dist/es/conditions/predefined/index.js.map +1 -1
- package/dist/es/conditions/schemas/common.d.ts +0 -2
- package/dist/es/conditions/schemas/common.js +3 -20
- package/dist/es/conditions/schemas/common.js.map +1 -1
- package/dist/es/conditions/schemas/compound.js +3 -3
- package/dist/es/conditions/schemas/compound.js.map +1 -1
- package/dist/es/conditions/schemas/context.js +2 -2
- package/dist/es/conditions/schemas/context.js.map +1 -1
- package/dist/es/conditions/schemas/contract.d.ts +30 -33
- package/dist/es/conditions/schemas/contract.js +2 -2
- package/dist/es/conditions/schemas/contract.js.map +1 -1
- package/dist/es/conditions/schemas/export-for-zod-doc-gen.d.ts +13 -16
- package/dist/es/conditions/schemas/export-for-zod-doc-gen.js +13 -17
- package/dist/es/conditions/schemas/export-for-zod-doc-gen.js.map +1 -1
- package/dist/es/conditions/schemas/if-then-else.js +3 -3
- package/dist/es/conditions/schemas/if-then-else.js.map +1 -1
- package/dist/es/conditions/schemas/json-api.d.ts +14 -47
- package/dist/es/conditions/schemas/json-api.js +5 -19
- package/dist/es/conditions/schemas/json-api.js.map +1 -1
- package/dist/es/conditions/schemas/json-rpc.d.ts +13 -48
- package/dist/es/conditions/schemas/json-rpc.js +5 -19
- package/dist/es/conditions/schemas/json-rpc.js.map +1 -1
- package/dist/es/conditions/schemas/jwt.d.ts +4 -2
- package/dist/es/conditions/schemas/jwt.js +2 -2
- package/dist/es/conditions/schemas/jwt.js.map +1 -1
- package/dist/es/conditions/schemas/return-value-test.d.ts +12 -28
- package/dist/es/conditions/schemas/return-value-test.js +6 -20
- package/dist/es/conditions/schemas/return-value-test.js.map +1 -1
- package/dist/es/conditions/schemas/rpc.d.ts +16 -22
- package/dist/es/conditions/schemas/rpc.js +3 -3
- package/dist/es/conditions/schemas/rpc.js.map +1 -1
- package/dist/es/conditions/schemas/sequential.js +14 -34
- package/dist/es/conditions/schemas/sequential.js.map +1 -1
- package/dist/es/conditions/schemas/time.d.ts +10 -18
- package/dist/es/conditions/schemas/time.js +1 -1
- package/dist/es/conditions/schemas/time.js.map +1 -1
- package/dist/es/conditions/schemas/utils.js +10 -17
- package/dist/es/conditions/schemas/utils.js.map +1 -1
- package/dist/es/conditions/sequential.d.ts +4 -4
- package/dist/es/conditions/sequential.js +3 -3
- package/dist/es/conditions/sequential.js.map +1 -1
- package/dist/es/conditions/shared.d.ts +2 -2
- package/dist/es/conditions/shared.js +2 -2
- package/dist/es/conditions/shared.js.map +1 -1
- package/dist/es/index.d.ts +3 -3
- package/dist/es/index.js +3 -3
- package/dist/es/index.js.map +1 -1
- package/dist/es/package.json +3 -0
- package/dist/es/taco.d.ts +82 -43
- package/dist/es/taco.js +25 -82
- package/dist/es/taco.js.map +1 -1
- package/dist/es/tdec.d.ts +2 -2
- package/dist/es/tdec.js +5 -5
- package/dist/es/tdec.js.map +1 -1
- package/dist/es/types.d.ts +0 -1
- package/dist/tsconfig.cjs.tsbuildinfo +1 -1
- package/dist/tsconfig.es.tsbuildinfo +1 -1
- package/package.json +12 -8
- package/dist/cjs/conditions/base/address-allowlist.d.ts +0 -10
- package/dist/cjs/conditions/base/address-allowlist.js +0 -19
- package/dist/cjs/conditions/base/address-allowlist.js.map +0 -1
- package/dist/cjs/conditions/base/ecdsa.d.ts +0 -7
- package/dist/cjs/conditions/base/ecdsa.js +0 -21
- package/dist/cjs/conditions/base/ecdsa.js.map +0 -1
- package/dist/cjs/conditions/base/signing.d.ts +0 -10
- package/dist/cjs/conditions/base/signing.js +0 -32
- package/dist/cjs/conditions/base/signing.js.map +0 -1
- package/dist/cjs/conditions/schemas/address-allowlist.d.ts +0 -16
- package/dist/cjs/conditions/schemas/address-allowlist.js +0 -20
- package/dist/cjs/conditions/schemas/address-allowlist.js.map +0 -1
- package/dist/cjs/conditions/schemas/ecdsa.d.ts +0 -38
- package/dist/cjs/conditions/schemas/ecdsa.js +0 -40
- package/dist/cjs/conditions/schemas/ecdsa.js.map +0 -1
- package/dist/cjs/conditions/schemas/signing.d.ts +0 -12
- package/dist/cjs/conditions/schemas/signing.js +0 -204
- package/dist/cjs/conditions/schemas/signing.js.map +0 -1
- package/dist/cjs/conditions/zod.d.ts +0 -3
- package/dist/cjs/conditions/zod.js +0 -19
- package/dist/cjs/conditions/zod.js.map +0 -1
- package/dist/cjs/sign.d.ts +0 -26
- package/dist/cjs/sign.js +0 -99
- package/dist/cjs/sign.js.map +0 -1
- package/dist/es/conditions/base/address-allowlist.d.ts +0 -10
- package/dist/es/conditions/base/address-allowlist.js +0 -15
- package/dist/es/conditions/base/address-allowlist.js.map +0 -1
- package/dist/es/conditions/base/ecdsa.d.ts +0 -7
- package/dist/es/conditions/base/ecdsa.js +0 -12
- package/dist/es/conditions/base/ecdsa.js.map +0 -1
- package/dist/es/conditions/base/signing.d.ts +0 -10
- package/dist/es/conditions/base/signing.js +0 -20
- package/dist/es/conditions/base/signing.js.map +0 -1
- package/dist/es/conditions/schemas/address-allowlist.d.ts +0 -16
- package/dist/es/conditions/schemas/address-allowlist.js +0 -17
- package/dist/es/conditions/schemas/address-allowlist.js.map +0 -1
- package/dist/es/conditions/schemas/ecdsa.d.ts +0 -38
- package/dist/es/conditions/schemas/ecdsa.js +0 -37
- package/dist/es/conditions/schemas/ecdsa.js.map +0 -1
- package/dist/es/conditions/schemas/signing.d.ts +0 -12
- package/dist/es/conditions/schemas/signing.js +0 -201
- package/dist/es/conditions/schemas/signing.js.map +0 -1
- package/dist/es/conditions/zod.d.ts +0 -3
- package/dist/es/conditions/zod.js +0 -17
- package/dist/es/conditions/zod.js.map +0 -1
- package/dist/es/sign.d.ts +0 -26
- package/dist/es/sign.js +0 -95
- package/dist/es/sign.js.map +0 -1
package/dist/cjs/taco.js
CHANGED
|
@@ -1,101 +1,43 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.encrypt = encrypt;
|
|
4
|
+
exports.encryptWithPublicKey = encryptWithPublicKey;
|
|
5
|
+
exports.decrypt = decrypt;
|
|
4
6
|
const nucypher_core_1 = require("@nucypher/nucypher-core");
|
|
5
7
|
const shared_1 = require("@nucypher/shared");
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
9
|
-
const
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
* @param {number} ritualId - The ID of the DKG Ritual to be used for encryption. The message will be encrypted
|
|
22
|
-
* under the public key of this ritual.
|
|
23
|
-
* @param {ethers.Signer} authSigner - The signer that will be used to sign the encrypter authorization.
|
|
24
|
-
*
|
|
25
|
-
* @returns {Promise<ThresholdMessageKit>} Returns Promise that resolves with an instance of ThresholdMessageKit.
|
|
26
|
-
* It represents the encrypted message.
|
|
27
|
-
*
|
|
28
|
-
* @throws {Error} If the active DKG Ritual cannot be retrieved an error is thrown.
|
|
29
|
-
*/
|
|
30
|
-
const encrypt = async (provider, domain, message, condition, ritualId, authSigner) => {
|
|
31
|
-
// TODO(#264): Enable ritual initialization
|
|
32
|
-
// if (ritualId === undefined) {
|
|
33
|
-
// ritualId = await DkgClient.initializeRitual(
|
|
34
|
-
// provider,
|
|
35
|
-
// this.cohort.ursulaAddresses,
|
|
36
|
-
// true
|
|
37
|
-
// );
|
|
38
|
-
// }
|
|
39
|
-
// if (ritualId === undefined) {
|
|
40
|
-
// // Given that we just initialized the ritual, this should never happen
|
|
41
|
-
// throw new Error('Ritual ID is undefined');
|
|
42
|
-
// }
|
|
43
|
-
const dkgRitual = await dkg_1.DkgClient.getActiveRitual(provider, domain, ritualId);
|
|
44
|
-
return await (0, exports.encryptWithPublicKey)(message, condition, dkgRitual.dkgPublicKey, authSigner);
|
|
45
|
-
};
|
|
46
|
-
exports.encrypt = encrypt;
|
|
47
|
-
/**
|
|
48
|
-
* Encrypts a message with the given DKG public key under a specified condition.
|
|
49
|
-
*
|
|
50
|
-
* @export
|
|
51
|
-
* @param {Uint8Array | string} message - The message to be encrypted.
|
|
52
|
-
* @param {Condition} condition - Condition under which the message will be encrypted. Those conditions must be
|
|
53
|
-
* satisfied in order to decrypt the message.
|
|
54
|
-
* @param {DkgPublicKey} dkgPublicKey - The public key of an active DKG Ritual to be used for encryption
|
|
55
|
-
* @param {ethers.Signer} authSigner - The signer that will be used to sign the encrypter authorization.
|
|
56
|
-
*
|
|
57
|
-
* @returns {Promise<ThresholdMessageKit>} Returns Promise that resolves with an instance of ThresholdMessageKit.
|
|
58
|
-
* It represents the encrypted message.
|
|
59
|
-
*
|
|
60
|
-
* @throws {Error} If the encryption process throws an error, an error is thrown.
|
|
61
|
-
*/
|
|
62
|
-
const encryptWithPublicKey = async (message, condition, dkgPublicKey, authSigner) => {
|
|
8
|
+
const ethers_1 = require("ethers");
|
|
9
|
+
const condition_expr_js_1 = require("./conditions/condition-expr.js");
|
|
10
|
+
const dkg_js_1 = require("./dkg.js");
|
|
11
|
+
const tdec_js_1 = require("./tdec.js");
|
|
12
|
+
async function encrypt(providerLike, domain, message, condition, ritualId, signerLike) {
|
|
13
|
+
// Create TACo provider and signer adapters from viem objects
|
|
14
|
+
const providerAdapter = (0, shared_1.toEthersProvider)(providerLike);
|
|
15
|
+
const dkgRitual = await dkg_js_1.DkgClient.getActiveRitual(providerAdapter, domain, ritualId);
|
|
16
|
+
return await encryptWithPublicKey(message, condition, dkgRitual.dkgPublicKey,
|
|
17
|
+
// Casting is needed because with the function definition of encryptWithPublicKey,
|
|
18
|
+
// this param can be either a Signer or a viem signer account. But not a type that is the union of both.
|
|
19
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
20
|
+
signerLike);
|
|
21
|
+
}
|
|
22
|
+
async function encryptWithPublicKey(message, condition, dkgPublicKey, signerLike) {
|
|
63
23
|
if (typeof message === 'string') {
|
|
64
24
|
message = (0, shared_1.toBytes)(message);
|
|
65
25
|
}
|
|
66
|
-
const
|
|
26
|
+
const signer = (0, shared_1.toTacoSigner)(signerLike);
|
|
27
|
+
const conditionExpr = new condition_expr_js_1.ConditionExpression(condition);
|
|
67
28
|
const [ciphertext, authenticatedData] = (0, nucypher_core_1.encryptForDkg)(message, dkgPublicKey, conditionExpr.toCoreCondition());
|
|
68
|
-
const headerHash =
|
|
69
|
-
const authorization = await
|
|
29
|
+
const headerHash = ethers_1.ethers.utils.keccak256(ciphertext.header.toBytes());
|
|
30
|
+
const authorization = await signer.signMessage((0, shared_1.fromHexString)(headerHash));
|
|
70
31
|
const acp = new nucypher_core_1.AccessControlPolicy(authenticatedData, (0, shared_1.fromHexString)(authorization));
|
|
71
32
|
return new nucypher_core_1.ThresholdMessageKit(ciphertext, acp);
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* Decrypts an encrypted message.
|
|
76
|
-
*
|
|
77
|
-
* @export
|
|
78
|
-
* @param {ethers.providers.Provider} provider - Instance of ethers provider which is used to interact with
|
|
79
|
-
* your selected network.
|
|
80
|
-
* @param {Domain} domain - Represents the logical network in which the decryption will be performed.
|
|
81
|
-
* Must match the `ritualId`.
|
|
82
|
-
* @param {ThresholdMessageKit} messageKit - The kit containing the message to be decrypted
|
|
83
|
-
* @param {ConditionContext} context - Optional context data used for decryption time values for the condition(s) within the `messageKit`.
|
|
84
|
-
* @param {string[]} [porterUris] - Optional URI(s) for the Porter service. If not provided, a value will be obtained
|
|
85
|
-
* from the Domain
|
|
86
|
-
*
|
|
87
|
-
* @returns {Promise<Uint8Array>} Returns Promise that resolves with a decrypted message
|
|
88
|
-
*
|
|
89
|
-
* @throws {Error} If the active DKG Ritual cannot be retrieved or decryption process throws an error,
|
|
90
|
-
* an error is thrown.
|
|
91
|
-
*/
|
|
92
|
-
const decrypt = async (provider, domain, messageKit, context, porterUris) => {
|
|
33
|
+
}
|
|
34
|
+
async function decrypt(providerLike, domain, messageKit, context, porterUris) {
|
|
93
35
|
const porterUrisFull = porterUris
|
|
94
36
|
? porterUris
|
|
95
37
|
: await (0, shared_1.getPorterUris)(domain);
|
|
96
38
|
const porter = new shared_1.PorterClient(porterUrisFull);
|
|
97
|
-
const
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
39
|
+
const providerAdapter = (0, shared_1.toEthersProvider)(providerLike);
|
|
40
|
+
const ritualId = await shared_1.DkgCoordinatorAgent.getRitualIdFromPublicKey(providerAdapter, domain, messageKit.acp.publicKey);
|
|
41
|
+
return (0, tdec_js_1.retrieveAndDecrypt)(providerAdapter, domain, porter, messageKit, ritualId, context);
|
|
42
|
+
}
|
|
101
43
|
//# sourceMappingURL=taco.js.map
|
package/dist/cjs/taco.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"taco.js","sourceRoot":"","sources":["../../src/taco.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"taco.js","sourceRoot":"","sources":["../../src/taco.ts"],"names":[],"mappings":";;AAkFA,0BA0BC;AA0CD,oDA4BC;AA8CD,0BA2BC;AA3PD,2DAKiC;AACjC,6CAa0B;AAC1B,mCAAgC;AAEhC,sEAAqE;AAGrE,qCAAqC;AACrC,uCAA+C;AAwDxC,KAAK,UAAU,OAAO,CAC3B,YAA0B,EAC1B,MAAc,EACd,OAA4B,EAC5B,SAAoB,EACpB,QAAgB,EAChB,UAAsB;IAEtB,6DAA6D;IAC7D,MAAM,eAAe,GAAG,IAAA,yBAAgB,EAAC,YAAY,CAAC,CAAC;IAEvD,MAAM,SAAS,GAAG,MAAM,kBAAS,CAAC,eAAe,CAC/C,eAAe,EACf,MAAM,EACN,QAAQ,CACT,CAAC;IAEF,OAAO,MAAM,oBAAoB,CAC/B,OAAO,EACP,SAAS,EACT,SAAS,CAAC,YAAY;IACtB,kFAAkF;IAClF,wGAAwG;IACxG,8DAA8D;IAC9D,UAAiB,CAClB,CAAC;AACJ,CAAC;AA0CM,KAAK,UAAU,oBAAoB,CACxC,OAA4B,EAC5B,SAAoB,EACpB,YAA0B,EAC1B,UAAsB;IAEtB,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;QAChC,OAAO,GAAG,IAAA,gBAAO,EAAC,OAAO,CAAC,CAAC;IAC7B,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,qBAAY,EAAC,UAAU,CAAC,CAAC;IAExC,MAAM,aAAa,GAAG,IAAI,uCAAmB,CAAC,SAAS,CAAC,CAAC;IAEzD,MAAM,CAAC,UAAU,EAAE,iBAAiB,CAAC,GAAG,IAAA,6BAAa,EACnD,OAAO,EACP,YAAY,EACZ,aAAa,CAAC,eAAe,EAAE,CAChC,CAAC;IAEF,MAAM,UAAU,GAAG,eAAM,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IACvE,MAAM,aAAa,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,IAAA,sBAAa,EAAC,UAAU,CAAC,CAAC,CAAC;IAC1E,MAAM,GAAG,GAAG,IAAI,mCAAmB,CACjC,iBAAiB,EACjB,IAAA,sBAAa,EAAC,aAAa,CAAC,CAC7B,CAAC;IAEF,OAAO,IAAI,mCAAmB,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC;AAClD,CAAC;AA8CM,KAAK,UAAU,OAAO,CAC3B,YAA0B,EAC1B,MAAc,EACd,UAA+B,EAC/B,OAA0B,EAC1B,UAAqB;IAErB,MAAM,cAAc,GAAa,UAAU;QACzC,CAAC,CAAC,UAAU;QACZ,CAAC,CAAC,MAAM,IAAA,sBAAa,EAAC,MAAM,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,IAAI,qBAAY,CAAC,cAAc,CAAC,CAAC;IAEhD,MAAM,eAAe,GAAG,IAAA,yBAAgB,EAAC,YAAY,CAAC,CAAC;IAEvD,MAAM,QAAQ,GAAG,MAAM,4BAAmB,CAAC,wBAAwB,CACjE,eAAe,EACf,MAAM,EACN,UAAU,CAAC,GAAG,CAAC,SAAS,CACzB,CAAC;IACF,OAAO,IAAA,4BAAkB,EACvB,eAAe,EACf,MAAM,EACN,MAAM,EACN,UAAU,EACV,QAAQ,EACR,OAAO,CACR,CAAC;AACJ,CAAC"}
|
package/dist/cjs/tdec.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { DkgPublicKey, ThresholdMessageKit } from '@nucypher/nucypher-core';
|
|
2
2
|
import { Domain, PorterClient } from '@nucypher/shared';
|
|
3
3
|
import { ethers } from 'ethers';
|
|
4
|
-
import { ConditionExpression } from './conditions/condition-expr';
|
|
5
|
-
import { ConditionContext } from './conditions/context';
|
|
4
|
+
import { ConditionExpression } from './conditions/condition-expr.js';
|
|
5
|
+
import { ConditionContext } from './conditions/context/index.js';
|
|
6
6
|
export declare const encryptMessage: (plaintext: Uint8Array | string, encryptingKey: DkgPublicKey, conditions: ConditionExpression, authSigner: ethers.Signer) => Promise<ThresholdMessageKit>;
|
|
7
7
|
export declare const retrieveAndDecrypt: (provider: ethers.providers.Provider, domain: Domain, porter: PorterClient, thresholdMessageKit: ThresholdMessageKit, ritualId: number, context?: ConditionContext) => Promise<Uint8Array>;
|
package/dist/cjs/tdec.js
CHANGED
|
@@ -3,15 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.retrieveAndDecrypt = exports.encryptMessage = void 0;
|
|
4
4
|
const nucypher_core_1 = require("@nucypher/nucypher-core");
|
|
5
5
|
const shared_1 = require("@nucypher/shared");
|
|
6
|
-
const
|
|
7
|
-
const
|
|
8
|
-
const
|
|
6
|
+
const ethers_1 = require("ethers");
|
|
7
|
+
const index_js_1 = require("./conditions/context/index.js");
|
|
8
|
+
const dkg_js_1 = require("./dkg.js");
|
|
9
9
|
const ERR_DECRYPTION_FAILED = (errors) => `Threshold of responses not met; TACo decryption failed with errors: ${JSON.stringify(errors)}`;
|
|
10
10
|
const ERR_RITUAL_ID_MISMATCH = (expectedRitualId, ritualIds) => `Ritual id mismatch. Expected ${expectedRitualId}, got ${ritualIds}`;
|
|
11
11
|
const encryptMessage = async (plaintext, encryptingKey, conditions, authSigner) => {
|
|
12
12
|
const [ciphertext, authenticatedData] = (0, nucypher_core_1.encryptForDkg)(plaintext instanceof Uint8Array ? plaintext : (0, shared_1.toBytes)(plaintext), encryptingKey, conditions.toCoreCondition());
|
|
13
|
-
const headerHash =
|
|
14
|
-
const authorization = await authSigner.signMessage(
|
|
13
|
+
const headerHash = ethers_1.ethers.utils.keccak256(ciphertext.header.toBytes());
|
|
14
|
+
const authorization = await authSigner.signMessage(ethers_1.ethers.utils.arrayify(headerHash));
|
|
15
15
|
const acp = new nucypher_core_1.AccessControlPolicy(authenticatedData, (0, shared_1.toBytes)(authorization));
|
|
16
16
|
return new nucypher_core_1.ThresholdMessageKit(ciphertext, acp);
|
|
17
17
|
};
|
|
@@ -25,11 +25,11 @@ const retrieveAndDecrypt = async (provider, domain, porter, thresholdMessageKit,
|
|
|
25
25
|
exports.retrieveAndDecrypt = retrieveAndDecrypt;
|
|
26
26
|
// Retrieve decryption shares
|
|
27
27
|
const retrieve = async (provider, domain, porter, thresholdMessageKit, ritualId, context) => {
|
|
28
|
-
const ritual = await
|
|
28
|
+
const ritual = await dkg_js_1.DkgClient.getActiveRitual(provider, domain, ritualId);
|
|
29
29
|
const dkgParticipants = await shared_1.DkgCoordinatorAgent.getParticipants(provider, domain, ritualId, ritual.sharesNum);
|
|
30
30
|
const conditionContext = context
|
|
31
31
|
? context
|
|
32
|
-
:
|
|
32
|
+
: index_js_1.ConditionContext.fromMessageKit(thresholdMessageKit);
|
|
33
33
|
const { sharedSecrets, encryptedRequests } = await makeDecryptionRequests(ritualId, conditionContext, dkgParticipants, thresholdMessageKit);
|
|
34
34
|
const { encryptedResponses, errors } = await porter.tacoDecrypt(encryptedRequests, ritual.threshold);
|
|
35
35
|
if (Object.keys(encryptedResponses).length < ritual.threshold) {
|
package/dist/cjs/tdec.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tdec.js","sourceRoot":"","sources":["../../src/tdec.ts"],"names":[],"mappings":";;;AAAA,2DAaiC;AACjC,6CAM0B;
|
|
1
|
+
{"version":3,"file":"tdec.js","sourceRoot":"","sources":["../../src/tdec.ts"],"names":[],"mappings":"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"}
|
package/dist/cjs/types.d.ts
CHANGED
|
@@ -0,0 +1,237 @@
|
|
|
1
|
+
import { DkgPublicKey, ThresholdMessageKit } from '@nucypher/nucypher-core';
|
|
2
|
+
import { SignerAccount } from '@nucypher/shared';
|
|
3
|
+
import { ethers } from 'ethers';
|
|
4
|
+
import { Condition } from '../conditions/condition.js';
|
|
5
|
+
import { ConditionContext } from '../conditions/context/index.js';
|
|
6
|
+
import { type AccessClientConfig } from './config.js';
|
|
7
|
+
/**
|
|
8
|
+
* AccessClient provides an object-oriented interface for TACo cryptographic operations
|
|
9
|
+
*
|
|
10
|
+
* This class encapsulates TACo access-control configuration and provides simplified methods
|
|
11
|
+
* for encryption and decryption operations. It handles configuration validation,
|
|
12
|
+
* automatic WASM initialization, and provides enhanced error messages.
|
|
13
|
+
*
|
|
14
|
+
* @example Using with viem:
|
|
15
|
+
* ```typescript
|
|
16
|
+
* import { AccessClient, DOMAIN_NAMES } from '@nucypher/taco';
|
|
17
|
+
* import { createPublicClient, http } from 'viem';
|
|
18
|
+
* import { polygonAmoy } from 'viem/chains';
|
|
19
|
+
* import { privateKeyToAccount } from 'viem/accounts';
|
|
20
|
+
*
|
|
21
|
+
* // Create viem client and account
|
|
22
|
+
* const viemClient = createPublicClient({
|
|
23
|
+
* chain: polygonAmoy,
|
|
24
|
+
* transport: http()
|
|
25
|
+
* });
|
|
26
|
+
* const viemAccount = privateKeyToAccount('0x...');
|
|
27
|
+
*
|
|
28
|
+
* // Create AccessClient - WASM initializes automatically
|
|
29
|
+
* const accessClient = new AccessClient({
|
|
30
|
+
* domain: DOMAIN_NAMES.TESTNET, // 'tapir'
|
|
31
|
+
* ritualId: 6,
|
|
32
|
+
* viemClient
|
|
33
|
+
* });
|
|
34
|
+
*
|
|
35
|
+
* // Pass signer to encrypt operation
|
|
36
|
+
* const messageKit = await accessClient.encrypt('Hello, secret!', condition, viemAccount);
|
|
37
|
+
* // Decrypt doesn't require signer
|
|
38
|
+
* const decrypted = await accessClient.decrypt(messageKit, conditionContext);
|
|
39
|
+
* ```
|
|
40
|
+
*
|
|
41
|
+
* @example Using with ethers.js:
|
|
42
|
+
* ```typescript
|
|
43
|
+
* import { AccessClient, DOMAIN_NAMES } from '@nucypher/taco';
|
|
44
|
+
* import { ethers } from 'ethers';
|
|
45
|
+
*
|
|
46
|
+
* // Create ethers provider and signer
|
|
47
|
+
* const ethersProvider = new ethers.providers.JsonRpcProvider('https://rpc-amoy.polygon.technology');
|
|
48
|
+
* const ethersSigner = new ethers.Wallet('0x...', ethersProvider);
|
|
49
|
+
*
|
|
50
|
+
* // Create AccessClient - WASM initializes automatically
|
|
51
|
+
* const accessClient = new AccessClient({
|
|
52
|
+
* domain: DOMAIN_NAMES.TESTNET,
|
|
53
|
+
* ritualId: 6,
|
|
54
|
+
* ethersProvider
|
|
55
|
+
* });
|
|
56
|
+
*
|
|
57
|
+
* // Pass signer to encrypt operation
|
|
58
|
+
* const messageKit = await accessClient.encrypt('Hello, secret!', condition, ethersSigner);
|
|
59
|
+
* // Decrypt doesn't require signer
|
|
60
|
+
* const decrypted = await accessClient.decrypt(messageKit, conditionContext);
|
|
61
|
+
* ```
|
|
62
|
+
*/
|
|
63
|
+
export declare class AccessClient {
|
|
64
|
+
private config;
|
|
65
|
+
private static initializationPromise;
|
|
66
|
+
/**
|
|
67
|
+
* Initialize TACo WASM globally (singleton pattern)
|
|
68
|
+
*
|
|
69
|
+
* This method ensures TACo WASM is initialized exactly once across all AccessClient instances.
|
|
70
|
+
* Initialization happens automatically when creating clients or calling operations, but you can
|
|
71
|
+
* call this explicitly for performance optimization or error handling.
|
|
72
|
+
*
|
|
73
|
+
* @returns {Promise<void>} Promise that resolves when TACo WASM is initialized
|
|
74
|
+
*
|
|
75
|
+
* @example
|
|
76
|
+
* ```typescript
|
|
77
|
+
* // Optional: Pre-initialize for better performance
|
|
78
|
+
* await AccessClient.initialize();
|
|
79
|
+
*
|
|
80
|
+
* // All AccessClient instances share the same initialization
|
|
81
|
+
* const client1 = new AccessClient(config1);
|
|
82
|
+
* const client2 = new AccessClient(config2);
|
|
83
|
+
*
|
|
84
|
+
* // Operations automatically wait for initialization
|
|
85
|
+
* const encrypted = await client1.encrypt(data, condition);
|
|
86
|
+
* ```
|
|
87
|
+
*/
|
|
88
|
+
static initialize(): Promise<void>;
|
|
89
|
+
/**
|
|
90
|
+
* Create a new AccessClient instance
|
|
91
|
+
*
|
|
92
|
+
* @param {AccessClientConfig} config - Configuration for the AccessClient
|
|
93
|
+
* @throws {Error} If configuration is invalid
|
|
94
|
+
*/
|
|
95
|
+
constructor(config: AccessClientConfig);
|
|
96
|
+
/**
|
|
97
|
+
* Fully validate the configuration including network provider checks
|
|
98
|
+
*
|
|
99
|
+
* This method performs comprehensive validation including:
|
|
100
|
+
* - Domain and ritual ID validation
|
|
101
|
+
* - Provider/signer configuration validation
|
|
102
|
+
* - Network compatibility check (calls provider to verify chain ID matches domain)
|
|
103
|
+
*
|
|
104
|
+
* @returns {Promise<ValidationResult>} Promise resolving to validation result with isValid boolean and errors array
|
|
105
|
+
* @throws {Error} If configuration validation fails
|
|
106
|
+
*
|
|
107
|
+
* @example
|
|
108
|
+
* ```typescript
|
|
109
|
+
* try {
|
|
110
|
+
* await accessClient.validateConfig();
|
|
111
|
+
* console.log('Configuration is valid.');
|
|
112
|
+
* } catch (error) {
|
|
113
|
+
* console.error('Configuration validation failed:', error.message);
|
|
114
|
+
* }
|
|
115
|
+
* ```
|
|
116
|
+
*/
|
|
117
|
+
validateConfig(): Promise<void>;
|
|
118
|
+
/**
|
|
119
|
+
* Encrypt data with the given access condition.
|
|
120
|
+
*
|
|
121
|
+
* Use this overload when your application uses ethers.js.
|
|
122
|
+
*
|
|
123
|
+
* @export
|
|
124
|
+
* @param {string | Uint8Array} data - String or Uint8Array to encrypt
|
|
125
|
+
* @param {Condition} accessCondition - Access condition (single or composite) that must be satisfied at decryption time.
|
|
126
|
+
* @param {ethers.Signer} authSigner - Signer used to identify encryptor and verify authorization.
|
|
127
|
+
*
|
|
128
|
+
* @returns {Promise<ThresholdMessageKit>} Encrypted message kit representing the ciphertext and associated metadata.
|
|
129
|
+
*
|
|
130
|
+
* @throws {Error} If the ritual cannot be retrieved or encryption fails.
|
|
131
|
+
*
|
|
132
|
+
* @example
|
|
133
|
+
* ```typescript
|
|
134
|
+
* const messageKit = await accessClient.encrypt('Hello, secret!', condition, authSigner);
|
|
135
|
+
* ```
|
|
136
|
+
*/
|
|
137
|
+
encrypt(data: string | Uint8Array, accessCondition: Condition, authSigner: ethers.Signer): Promise<ThresholdMessageKit>;
|
|
138
|
+
/**
|
|
139
|
+
* Encrypt data with the given access condition.
|
|
140
|
+
*
|
|
141
|
+
* Use this overload when your application uses viem.
|
|
142
|
+
*
|
|
143
|
+
* @export
|
|
144
|
+
* @param {string | Uint8Array} data - String or Uint8Array to encrypt
|
|
145
|
+
* @param {Condition} accessCondition - Access condition (single or composite) that must be satisfied at decryption time.
|
|
146
|
+
* @param {SignerAccount} authAccount - Viem account used to identify encryptor and verify authorization.
|
|
147
|
+
*
|
|
148
|
+
* @returns {Promise<ThresholdMessageKit>} Encrypted message kit representing the ciphertext and associated metadata.
|
|
149
|
+
*
|
|
150
|
+
* @throws {Error} If the ritual cannot be retrieved or encryption fails.
|
|
151
|
+
* @example
|
|
152
|
+
* ```typescript
|
|
153
|
+
* const messageKit = await accessClient.encrypt('Hello, secret!', condition, authAccount);
|
|
154
|
+
* ```
|
|
155
|
+
*/
|
|
156
|
+
encrypt(data: string | Uint8Array, accessCondition: Condition, authAccount: SignerAccount): Promise<ThresholdMessageKit>;
|
|
157
|
+
/**
|
|
158
|
+
* Encrypt data with a provided DKG public key under a specified condition
|
|
159
|
+
*
|
|
160
|
+
* This method can be used offline since it doesn't require network access to fetch
|
|
161
|
+
* the DKG public key (unlike the `encrypt` method which fetches it from the ritual).
|
|
162
|
+
*
|
|
163
|
+
* Use this overload when your application uses ethers.js.
|
|
164
|
+
*
|
|
165
|
+
* @export
|
|
166
|
+
* @param {string | Uint8Array} data - String or Uint8Array to encrypt
|
|
167
|
+
* @param {Condition} condition - Access condition (single or composite) that must be satisfied at decryption time.
|
|
168
|
+
* @param {DkgPublicKey} dkgPublicKey - The public key of an active DKG Ritual to be used for encryption
|
|
169
|
+
* @param {ethers.Signer} authSigner - ethers.Signer used to identify encryptor and verify authorization.
|
|
170
|
+
*
|
|
171
|
+
* @returns {Promise<ThresholdMessageKit>} Encrypted message kit representing the ciphertext and associated metadata.
|
|
172
|
+
*
|
|
173
|
+
* @throws {Error} If encryption fails
|
|
174
|
+
*
|
|
175
|
+
* @example
|
|
176
|
+
* ```typescript
|
|
177
|
+
* // Get DKG public key from ritual or cache
|
|
178
|
+
* const dkgPublicKey = await getDkgPublicKey(domain, ritualId);
|
|
179
|
+
*
|
|
180
|
+
* // Encrypt offline using the public key
|
|
181
|
+
* const messageKit = await accessClient.encryptWithPublicKey('Hello, secret!', condition, dkgPublicKey, authSigner);
|
|
182
|
+
* ```
|
|
183
|
+
*/
|
|
184
|
+
encryptWithPublicKey(data: Uint8Array | string, condition: Condition, dkgPublicKey: DkgPublicKey, authSigner: ethers.Signer): Promise<ThresholdMessageKit>;
|
|
185
|
+
/**
|
|
186
|
+
* Encrypt data with a provided DKG public key under a specified condition
|
|
187
|
+
*
|
|
188
|
+
* This method can be used offline since it doesn't require network access to fetch
|
|
189
|
+
* the DKG public key (unlike the `encrypt` method which fetches it from the ritual).
|
|
190
|
+
*
|
|
191
|
+
* Use this overload when your application uses viem.
|
|
192
|
+
*
|
|
193
|
+
* @export
|
|
194
|
+
* @param {string | Uint8Array} data - String or Uint8Array to encrypt
|
|
195
|
+
* @param {Condition} condition - Access condition (single or composite) that must be satisfied at decryption time.
|
|
196
|
+
* @param {DkgPublicKey} dkgPublicKey - The public key of an active DKG Ritual to be used for encryption
|
|
197
|
+
* @param {SignerAccount} authAccount - Viem signer account used to identify encryptor and verify authorization.
|
|
198
|
+
*
|
|
199
|
+
* @returns {Promise<ThresholdMessageKit>} Encrypted message kit representing the ciphertext and associated metadata.
|
|
200
|
+
*
|
|
201
|
+
* @throws {Error} If encryption fails
|
|
202
|
+
*
|
|
203
|
+
* @example
|
|
204
|
+
* ```typescript
|
|
205
|
+
* // Get DKG public key from ritual or cache
|
|
206
|
+
* const dkgPublicKey = await getDkgPublicKey(domain, ritualId);
|
|
207
|
+
*
|
|
208
|
+
* // Encrypt offline using the public key
|
|
209
|
+
* const messageKit = await accessClient.encryptWithPublicKey('Hello, secret!', condition, dkgPublicKey, authAccount);
|
|
210
|
+
* ```
|
|
211
|
+
*/
|
|
212
|
+
encryptWithPublicKey(data: Uint8Array | string, condition: Condition, dkgPublicKey: DkgPublicKey, authAccount: SignerAccount): Promise<ThresholdMessageKit>;
|
|
213
|
+
/**
|
|
214
|
+
* Decrypt data using TACo
|
|
215
|
+
*
|
|
216
|
+
* @param {ThresholdMessageKit | Uint8Array} encryptedData - Either a ThresholdMessageKit or encrypted bytes (Uint8Array)
|
|
217
|
+
* @param {ConditionContext} [conditionContext] - Optional condition context for time-based conditions
|
|
218
|
+
* @returns {Promise<Uint8Array>} Decrypted data
|
|
219
|
+
* @throws {Error} If decryption fails
|
|
220
|
+
*
|
|
221
|
+
* @example
|
|
222
|
+
* ```typescript
|
|
223
|
+
* // With messageKit
|
|
224
|
+
* const decrypted = await accessClient.decrypt(messageKit, conditionContext);
|
|
225
|
+
*
|
|
226
|
+
* // With encrypted bytes
|
|
227
|
+
* const decrypted = await accessClient.decrypt(encryptedBytes, conditionContext);
|
|
228
|
+
* ```
|
|
229
|
+
*/
|
|
230
|
+
decrypt(encryptedData: ThresholdMessageKit | Uint8Array, conditionContext?: ConditionContext): Promise<Uint8Array>;
|
|
231
|
+
/**
|
|
232
|
+
* Get current client configuration
|
|
233
|
+
*
|
|
234
|
+
* @returns {Readonly<AccessClientConfig>} Client configuration
|
|
235
|
+
*/
|
|
236
|
+
getConfig(): Readonly<AccessClientConfig>;
|
|
237
|
+
}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
import { initialize, ThresholdMessageKit, } from '@nucypher/nucypher-core';
|
|
2
|
+
import { decrypt, encrypt, encryptWithPublicKey } from '../taco.js';
|
|
3
|
+
import { AccessConfigValidator } from './config-validator.js';
|
|
4
|
+
/**
|
|
5
|
+
* AccessClient provides an object-oriented interface for TACo cryptographic operations
|
|
6
|
+
*
|
|
7
|
+
* This class encapsulates TACo access-control configuration and provides simplified methods
|
|
8
|
+
* for encryption and decryption operations. It handles configuration validation,
|
|
9
|
+
* automatic WASM initialization, and provides enhanced error messages.
|
|
10
|
+
*
|
|
11
|
+
* @example Using with viem:
|
|
12
|
+
* ```typescript
|
|
13
|
+
* import { AccessClient, DOMAIN_NAMES } from '@nucypher/taco';
|
|
14
|
+
* import { createPublicClient, http } from 'viem';
|
|
15
|
+
* import { polygonAmoy } from 'viem/chains';
|
|
16
|
+
* import { privateKeyToAccount } from 'viem/accounts';
|
|
17
|
+
*
|
|
18
|
+
* // Create viem client and account
|
|
19
|
+
* const viemClient = createPublicClient({
|
|
20
|
+
* chain: polygonAmoy,
|
|
21
|
+
* transport: http()
|
|
22
|
+
* });
|
|
23
|
+
* const viemAccount = privateKeyToAccount('0x...');
|
|
24
|
+
*
|
|
25
|
+
* // Create AccessClient - WASM initializes automatically
|
|
26
|
+
* const accessClient = new AccessClient({
|
|
27
|
+
* domain: DOMAIN_NAMES.TESTNET, // 'tapir'
|
|
28
|
+
* ritualId: 6,
|
|
29
|
+
* viemClient
|
|
30
|
+
* });
|
|
31
|
+
*
|
|
32
|
+
* // Pass signer to encrypt operation
|
|
33
|
+
* const messageKit = await accessClient.encrypt('Hello, secret!', condition, viemAccount);
|
|
34
|
+
* // Decrypt doesn't require signer
|
|
35
|
+
* const decrypted = await accessClient.decrypt(messageKit, conditionContext);
|
|
36
|
+
* ```
|
|
37
|
+
*
|
|
38
|
+
* @example Using with ethers.js:
|
|
39
|
+
* ```typescript
|
|
40
|
+
* import { AccessClient, DOMAIN_NAMES } from '@nucypher/taco';
|
|
41
|
+
* import { ethers } from 'ethers';
|
|
42
|
+
*
|
|
43
|
+
* // Create ethers provider and signer
|
|
44
|
+
* const ethersProvider = new ethers.providers.JsonRpcProvider('https://rpc-amoy.polygon.technology');
|
|
45
|
+
* const ethersSigner = new ethers.Wallet('0x...', ethersProvider);
|
|
46
|
+
*
|
|
47
|
+
* // Create AccessClient - WASM initializes automatically
|
|
48
|
+
* const accessClient = new AccessClient({
|
|
49
|
+
* domain: DOMAIN_NAMES.TESTNET,
|
|
50
|
+
* ritualId: 6,
|
|
51
|
+
* ethersProvider
|
|
52
|
+
* });
|
|
53
|
+
*
|
|
54
|
+
* // Pass signer to encrypt operation
|
|
55
|
+
* const messageKit = await accessClient.encrypt('Hello, secret!', condition, ethersSigner);
|
|
56
|
+
* // Decrypt doesn't require signer
|
|
57
|
+
* const decrypted = await accessClient.decrypt(messageKit, conditionContext);
|
|
58
|
+
* ```
|
|
59
|
+
*/
|
|
60
|
+
export class AccessClient {
|
|
61
|
+
config;
|
|
62
|
+
static initializationPromise;
|
|
63
|
+
/**
|
|
64
|
+
* Initialize TACo WASM globally (singleton pattern)
|
|
65
|
+
*
|
|
66
|
+
* This method ensures TACo WASM is initialized exactly once across all AccessClient instances.
|
|
67
|
+
* Initialization happens automatically when creating clients or calling operations, but you can
|
|
68
|
+
* call this explicitly for performance optimization or error handling.
|
|
69
|
+
*
|
|
70
|
+
* @returns {Promise<void>} Promise that resolves when TACo WASM is initialized
|
|
71
|
+
*
|
|
72
|
+
* @example
|
|
73
|
+
* ```typescript
|
|
74
|
+
* // Optional: Pre-initialize for better performance
|
|
75
|
+
* await AccessClient.initialize();
|
|
76
|
+
*
|
|
77
|
+
* // All AccessClient instances share the same initialization
|
|
78
|
+
* const client1 = new AccessClient(config1);
|
|
79
|
+
* const client2 = new AccessClient(config2);
|
|
80
|
+
*
|
|
81
|
+
* // Operations automatically wait for initialization
|
|
82
|
+
* const encrypted = await client1.encrypt(data, condition);
|
|
83
|
+
* ```
|
|
84
|
+
*/
|
|
85
|
+
static async initialize() {
|
|
86
|
+
if (!AccessClient.initializationPromise) {
|
|
87
|
+
AccessClient.initializationPromise = (async () => {
|
|
88
|
+
try {
|
|
89
|
+
await initialize();
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
console.error(`TACo initialization failed: ${error}`);
|
|
93
|
+
throw error; // Re-throw to maintain error propagation
|
|
94
|
+
}
|
|
95
|
+
})();
|
|
96
|
+
}
|
|
97
|
+
return AccessClient.initializationPromise;
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Create a new AccessClient instance
|
|
101
|
+
*
|
|
102
|
+
* @param {AccessClientConfig} config - Configuration for the AccessClient
|
|
103
|
+
* @throws {Error} If configuration is invalid
|
|
104
|
+
*/
|
|
105
|
+
constructor(config) {
|
|
106
|
+
// Validate configuration using AccessConfig
|
|
107
|
+
const result = AccessConfigValidator.validateFast(config);
|
|
108
|
+
if (!result.isValid) {
|
|
109
|
+
throw new Error(`Invalid configuration: ${result.errors.join(', ')}`);
|
|
110
|
+
}
|
|
111
|
+
this.config = config;
|
|
112
|
+
AccessClient.initialize();
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Fully validate the configuration including network provider checks
|
|
116
|
+
*
|
|
117
|
+
* This method performs comprehensive validation including:
|
|
118
|
+
* - Domain and ritual ID validation
|
|
119
|
+
* - Provider/signer configuration validation
|
|
120
|
+
* - Network compatibility check (calls provider to verify chain ID matches domain)
|
|
121
|
+
*
|
|
122
|
+
* @returns {Promise<ValidationResult>} Promise resolving to validation result with isValid boolean and errors array
|
|
123
|
+
* @throws {Error} If configuration validation fails
|
|
124
|
+
*
|
|
125
|
+
* @example
|
|
126
|
+
* ```typescript
|
|
127
|
+
* try {
|
|
128
|
+
* await accessClient.validateConfig();
|
|
129
|
+
* console.log('Configuration is valid.');
|
|
130
|
+
* } catch (error) {
|
|
131
|
+
* console.error('Configuration validation failed:', error.message);
|
|
132
|
+
* }
|
|
133
|
+
* ```
|
|
134
|
+
*/
|
|
135
|
+
async validateConfig() {
|
|
136
|
+
const validationResult = await AccessConfigValidator.validate(this.config);
|
|
137
|
+
if (!validationResult.isValid) {
|
|
138
|
+
throw new Error(`Invalid configuration: ${validationResult.errors.join(', ')}`);
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
async encrypt(data, accessCondition, signerLike) {
|
|
142
|
+
await AccessClient.initialize();
|
|
143
|
+
const messageKit = await encrypt(this.config.ethersProvider ||
|
|
144
|
+
this.config.viemClient, this.config.domain, data, accessCondition, this.config.ritualId,
|
|
145
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
146
|
+
signerLike);
|
|
147
|
+
return messageKit;
|
|
148
|
+
}
|
|
149
|
+
async encryptWithPublicKey(data, accessCondition, dkgPublicKey, signerLike) {
|
|
150
|
+
await AccessClient.initialize();
|
|
151
|
+
const messageKit = await encryptWithPublicKey(data, accessCondition, dkgPublicKey,
|
|
152
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
153
|
+
signerLike);
|
|
154
|
+
return messageKit;
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Decrypt data using TACo
|
|
158
|
+
*
|
|
159
|
+
* @param {ThresholdMessageKit | Uint8Array} encryptedData - Either a ThresholdMessageKit or encrypted bytes (Uint8Array)
|
|
160
|
+
* @param {ConditionContext} [conditionContext] - Optional condition context for time-based conditions
|
|
161
|
+
* @returns {Promise<Uint8Array>} Decrypted data
|
|
162
|
+
* @throws {Error} If decryption fails
|
|
163
|
+
*
|
|
164
|
+
* @example
|
|
165
|
+
* ```typescript
|
|
166
|
+
* // With messageKit
|
|
167
|
+
* const decrypted = await accessClient.decrypt(messageKit, conditionContext);
|
|
168
|
+
*
|
|
169
|
+
* // With encrypted bytes
|
|
170
|
+
* const decrypted = await accessClient.decrypt(encryptedBytes, conditionContext);
|
|
171
|
+
* ```
|
|
172
|
+
*/
|
|
173
|
+
async decrypt(encryptedData, conditionContext) {
|
|
174
|
+
await AccessClient.initialize();
|
|
175
|
+
// Handle both messageKit and encrypted bytes
|
|
176
|
+
const messageKit = encryptedData instanceof ThresholdMessageKit
|
|
177
|
+
? encryptedData
|
|
178
|
+
: ThresholdMessageKit.fromBytes(encryptedData);
|
|
179
|
+
const decrypted = await decrypt(this.config.ethersProvider ||
|
|
180
|
+
this.config.viemClient, this.config.domain, messageKit, conditionContext, this.config.porterUris);
|
|
181
|
+
return decrypted;
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* Get current client configuration
|
|
185
|
+
*
|
|
186
|
+
* @returns {Readonly<AccessClientConfig>} Client configuration
|
|
187
|
+
*/
|
|
188
|
+
getConfig() {
|
|
189
|
+
return Object.freeze({ ...this.config });
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
//# sourceMappingURL=client.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/access-client/client.ts"],"names":[],"mappings":"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"}
|