@inco/js 0.3.0 → 0.3.2
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/dist/cjs/advancedacl/index.d.ts +2 -0
- package/dist/cjs/advancedacl/index.js +19 -0
- package/dist/cjs/advancedacl/session-key.d.ts +28 -0
- package/dist/cjs/advancedacl/session-key.js +176 -0
- package/dist/cjs/advancedacl/types.d.ts +15 -0
- package/dist/cjs/advancedacl/types.js +3 -0
- package/dist/cjs/attestedcompute/attested-compute.d.ts +14 -16
- package/dist/cjs/attestedcompute/attested-compute.js +56 -71
- package/dist/cjs/attesteddecrypt/attested-decrypt.d.ts +18 -19
- package/dist/cjs/attesteddecrypt/attested-decrypt.js +50 -60
- package/dist/cjs/attesteddecrypt/index.d.ts +0 -1
- package/dist/cjs/attesteddecrypt/index.js +1 -2
- package/dist/cjs/generated/abis/lightning-preview.d.ts +2265 -0
- package/dist/cjs/generated/abis/lightning-preview.js +1429 -0
- package/dist/cjs/lite/attested-compute.d.ts +1 -2
- package/dist/cjs/lite/attested-compute.js +1 -4
- package/dist/cjs/lite/attested-decrypt.d.ts +1 -2
- package/dist/cjs/lite/attested-decrypt.js +1 -4
- package/dist/cjs/lite/lightning.d.ts +94 -1
- package/dist/cjs/lite/lightning.js +129 -2
- package/dist/cjs/local/local-node.d.ts +1 -1
- package/dist/cjs/local/local-node.js +15 -15
- package/dist/esm/advancedacl/index.d.ts +2 -0
- package/dist/esm/advancedacl/index.js +3 -0
- package/dist/esm/advancedacl/session-key.d.ts +28 -0
- package/dist/esm/advancedacl/session-key.js +170 -0
- package/dist/esm/advancedacl/types.d.ts +15 -0
- package/dist/esm/advancedacl/types.js +2 -0
- package/dist/esm/attestedcompute/attested-compute.d.ts +14 -16
- package/dist/esm/attestedcompute/attested-compute.js +55 -70
- package/dist/esm/attesteddecrypt/attested-decrypt.d.ts +18 -19
- package/dist/esm/attesteddecrypt/attested-decrypt.js +49 -59
- package/dist/esm/attesteddecrypt/index.d.ts +0 -1
- package/dist/esm/attesteddecrypt/index.js +1 -2
- package/dist/esm/generated/abis/lightning-preview.d.ts +2265 -0
- package/dist/esm/generated/abis/lightning-preview.js +1426 -0
- package/dist/esm/lite/attested-compute.d.ts +1 -2
- package/dist/esm/lite/attested-compute.js +2 -3
- package/dist/esm/lite/attested-decrypt.d.ts +1 -2
- package/dist/esm/lite/attested-decrypt.js +2 -3
- package/dist/esm/lite/lightning.d.ts +94 -1
- package/dist/esm/lite/lightning.js +129 -2
- package/dist/esm/local/local-node.d.ts +1 -1
- package/dist/esm/local/local-node.js +3 -3
- package/dist/types/advancedacl/index.d.ts +2 -0
- package/dist/types/advancedacl/session-key.d.ts +28 -0
- package/dist/types/advancedacl/types.d.ts +15 -0
- package/dist/types/attestedcompute/attested-compute.d.ts +14 -16
- package/dist/types/attesteddecrypt/attested-decrypt.d.ts +18 -19
- package/dist/types/attesteddecrypt/index.d.ts +0 -1
- package/dist/types/generated/abis/lightning-preview.d.ts +2265 -0
- package/dist/types/lite/attested-compute.d.ts +1 -2
- package/dist/types/lite/attested-decrypt.d.ts +1 -2
- package/dist/types/lite/lightning.d.ts +94 -1
- package/dist/types/local/local-node.d.ts +1 -1
- package/package.json +1 -1
@@ -1,8 +1,11 @@
|
|
1
1
|
import type { Account, Chain, Transport, WalletClient } from 'viem';
|
2
|
+
import { DecryptionAttestation } from '../attesteddecrypt/types.js';
|
3
|
+
import { HexString } from '../binary.js';
|
2
4
|
import { SupportedChainId } from '../chain.js';
|
3
|
-
import { EciesScheme } from '../encryption/encryption.js';
|
5
|
+
import { EciesScheme, SupportedFheType } from '../encryption/encryption.js';
|
4
6
|
import type { KmsClient } from '../kms/client.js';
|
5
|
-
import {
|
7
|
+
import type { BackoffConfig } from '../retry.js';
|
8
|
+
import { AttestedComputeOP } from './types.js';
|
6
9
|
/**
|
7
10
|
* Arguments for creating an attested compute.
|
8
11
|
*/
|
@@ -21,18 +24,13 @@ export interface IncoLiteAttestedComputeArgs {
|
|
21
24
|
* @throws {AttestedComputeError} If the creation fails
|
22
25
|
*
|
23
26
|
* @todo Support multiple operations in a single request.
|
24
|
-
*
|
25
|
-
* @example
|
26
|
-
* ```typescript
|
27
|
-
* const compute = await incoLiteAttestedCompute({
|
28
|
-
* walletClient,
|
29
|
-
* chainId: sepolia,
|
30
|
-
* });
|
31
|
-
* const decryptionAttestation = await compute({
|
32
|
-
* lhsHandle: '0x...',
|
33
|
-
* op: AttestedComputeSupportedOps.Eq,
|
34
|
-
* rhsPlaintext: 1337n,
|
35
|
-
* });
|
36
|
-
* ```
|
37
27
|
*/
|
38
|
-
export declare function
|
28
|
+
export declare function attestedCompute<T extends SupportedFheType>({ lhsHandle, op, rhsPlaintext, backoffConfig, walletClient, kmsConnectRpcEndpointOrClient, chainId, }: {
|
29
|
+
lhsHandle: HexString;
|
30
|
+
op: AttestedComputeOP;
|
31
|
+
rhsPlaintext: bigint | boolean;
|
32
|
+
backoffConfig?: Partial<BackoffConfig> | undefined;
|
33
|
+
walletClient: WalletClient<Transport, Chain, Account>;
|
34
|
+
kmsConnectRpcEndpointOrClient?: string | KmsClient;
|
35
|
+
chainId: SupportedChainId;
|
36
|
+
}): Promise<DecryptionAttestation<EciesScheme, T>>;
|
@@ -17,79 +17,64 @@ const ATTESTED_COMPUTE_DOMAIN_VERSION = '0.1.0';
|
|
17
17
|
* @throws {AttestedComputeError} If the creation fails
|
18
18
|
*
|
19
19
|
* @todo Support multiple operations in a single request.
|
20
|
-
*
|
21
|
-
* @example
|
22
|
-
* ```typescript
|
23
|
-
* const compute = await incoLiteAttestedCompute({
|
24
|
-
* walletClient,
|
25
|
-
* chainId: sepolia,
|
26
|
-
* });
|
27
|
-
* const decryptionAttestation = await compute({
|
28
|
-
* lhsHandle: '0x...',
|
29
|
-
* op: AttestedComputeSupportedOps.Eq,
|
30
|
-
* rhsPlaintext: 1337n,
|
31
|
-
* });
|
32
|
-
* ```
|
33
20
|
*/
|
34
|
-
export function
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
message: {
|
50
|
-
op: op,
|
51
|
-
lhsHandle: lhsHandle,
|
52
|
-
rhsPlaintext: bigintToBytes32(rhsPlaintextBig),
|
53
|
-
},
|
54
|
-
domainName: ATTESTED_COMPUTE_DOMAIN_NAME,
|
55
|
-
domainVersion: ATTESTED_COMPUTE_DOMAIN_VERSION,
|
56
|
-
});
|
57
|
-
// Sign the EIP712 message
|
58
|
-
const eip712Signature = await walletClient.signTypedData(eip712Payload);
|
59
|
-
const rhsValueBytes = bigintToPlaintext(encryptionSchemes.ecies, getHandleType(lhsHandle), rhsPlaintextBig);
|
60
|
-
const attestedComputeRequest = {
|
61
|
-
$typeName: 'inco.kms.lite.v1.AttestedComputeRequest',
|
62
|
-
userAddress: walletClient.account.address,
|
21
|
+
export async function attestedCompute({ lhsHandle, op, rhsPlaintext, backoffConfig, walletClient, kmsConnectRpcEndpointOrClient, chainId, }) {
|
22
|
+
try {
|
23
|
+
const kmsClient = getKmsClient(kmsConnectRpcEndpointOrClient || defaultCovalidatorGrpc(getSupportedChain(chainId)));
|
24
|
+
validateHandle(lhsHandle);
|
25
|
+
const rhsPlaintextBig = BigInt(rhsPlaintext);
|
26
|
+
// Create the EIP712 payload for the handles to decrypt
|
27
|
+
const eip712Payload = createEIP712Payload({
|
28
|
+
chainId: BigInt(chainId),
|
29
|
+
primaryType: 'AttestedComputeRequest',
|
30
|
+
primaryTypeFields: [
|
31
|
+
{ name: 'op', type: 'uint8' },
|
32
|
+
{ name: 'lhsHandle', type: 'bytes32' },
|
33
|
+
{ name: 'rhsPlaintext', type: 'bytes32' },
|
34
|
+
],
|
35
|
+
message: {
|
63
36
|
op: op,
|
64
37
|
lhsHandle: lhsHandle,
|
65
|
-
rhsPlaintext:
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
38
|
+
rhsPlaintext: bigintToBytes32(rhsPlaintextBig),
|
39
|
+
},
|
40
|
+
domainName: ATTESTED_COMPUTE_DOMAIN_NAME,
|
41
|
+
domainVersion: ATTESTED_COMPUTE_DOMAIN_VERSION,
|
42
|
+
});
|
43
|
+
// Sign the EIP712 message
|
44
|
+
const eip712Signature = await walletClient.signTypedData(eip712Payload);
|
45
|
+
const rhsValueBytes = bigintToPlaintext(encryptionSchemes.ecies, getHandleType(lhsHandle), rhsPlaintextBig);
|
46
|
+
const attestedComputeRequest = {
|
47
|
+
$typeName: 'inco.kms.lite.v1.AttestedComputeRequest',
|
48
|
+
userAddress: walletClient.account.address,
|
49
|
+
op: op,
|
50
|
+
lhsHandle: lhsHandle,
|
51
|
+
rhsPlaintext: rhsValueBytes.value.toString(16),
|
52
|
+
eip712Signature: hexToBytes(eip712Signature),
|
53
|
+
};
|
54
|
+
const response = await retryWithBackoff(async () => {
|
55
|
+
return await kmsClient.attestedCompute(attestedComputeRequest);
|
56
|
+
}, backoffConfig);
|
57
|
+
const decryptionAttestation = response.decryptionAttestation;
|
58
|
+
if (decryptionAttestation?.plaintext === undefined) {
|
59
|
+
throw new AttestedComputeError('No plaintext in response');
|
60
|
+
}
|
61
|
+
const computeResultHandle = response.decryptionAttestation?.handle;
|
62
|
+
if (!computeResultHandle) {
|
63
|
+
throw new AttestedComputeError('No compute result handle in response');
|
86
64
|
}
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
65
|
+
const handleType = getHandleType(computeResultHandle);
|
66
|
+
const bigIntValue = bytesToBigInt(decryptionAttestation.plaintext);
|
67
|
+
return {
|
68
|
+
handle: computeResultHandle,
|
69
|
+
plaintext: bigintToPlaintext(encryptionSchemes.ecies, handleType, bigIntValue),
|
70
|
+
covalidatorSignature: decryptionAttestation.signature,
|
71
|
+
};
|
72
|
+
}
|
73
|
+
catch (error) {
|
74
|
+
if (error instanceof AttestedComputeError) {
|
75
|
+
throw error;
|
92
76
|
}
|
93
|
-
|
77
|
+
throw new AttestedComputeError('Failed to perform attested compute', error);
|
78
|
+
}
|
94
79
|
}
|
95
|
-
//# sourceMappingURL=data:application/json;base64,
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ZXN0ZWQtY29tcHV0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdHRlc3RlZGNvbXB1dGUvYXR0ZXN0ZWQtY29tcHV0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSx3Q0FBd0MsQ0FBQztBQUV4RSxPQUFPLEVBQUUsZUFBZSxFQUFFLGFBQWEsRUFBYSxNQUFNLGNBQWMsQ0FBQztBQUN6RSxPQUFPLEVBQUUsaUJBQWlCLEVBQW9CLE1BQU0sYUFBYSxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxpQkFBaUIsRUFBZSxpQkFBaUIsRUFBb0IsTUFBTSw2QkFBNkIsQ0FBQztBQUVsSCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTdDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FBTyxFQUFFLG9CQUFvQixFQUFxQixNQUFNLFlBQVksQ0FBQztBQUVyRSxNQUFNLDRCQUE0QixHQUFHLHFCQUFxQixDQUFDO0FBQzNELE1BQU0sK0JBQStCLEdBQUcsT0FBTyxDQUFDO0FBY2hEOzs7Ozs7O0dBT0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGVBQWUsQ0FBNkIsRUFDaEUsU0FBUyxFQUNULEVBQUUsRUFDRixZQUFZLEVBQ1osYUFBYSxFQUNiLFlBQVksRUFDWiw2QkFBNkIsRUFDN0IsT0FBTyxHQVNSO0lBQ0MsSUFBSSxDQUFDO1FBQ0gsTUFBTSxTQUFTLEdBQUcsWUFBWSxDQUFDLDZCQUE2QixJQUFJLHNCQUFzQixDQUFDLGlCQUFpQixDQUFDLE9BQU8sQ0FBQyxD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
|
@@ -1,16 +1,18 @@
|
|
1
1
|
import type { Account, Chain, Transport, WalletClient } from 'viem';
|
2
|
+
import { HexString } from '../binary.js';
|
2
3
|
import { SupportedChainId } from '../chain.js';
|
3
|
-
import { EciesScheme } from '../encryption/encryption.js';
|
4
|
+
import { EciesScheme, SupportedFheType } from '../encryption/encryption.js';
|
4
5
|
import type { KmsClient } from '../kms/client.js';
|
5
|
-
import {
|
6
|
+
import type { BackoffConfig } from '../retry.js';
|
7
|
+
import { DecryptionAttestation } from './types.js';
|
6
8
|
/**
|
7
9
|
* Validates a handle format.
|
8
10
|
* @param handle - The handle to validate
|
9
11
|
* @throws {AttestedDecryptError} If the handle format is invalid
|
10
12
|
*/
|
11
|
-
export declare function validateHandle(handle:
|
13
|
+
export declare function validateHandle(handle: HexString): void;
|
12
14
|
/**
|
13
|
-
* Arguments for creating an attested
|
15
|
+
* Arguments for creating an attested decrypt request.
|
14
16
|
*/
|
15
17
|
export interface IncoLiteAttestedDecryptorArgs {
|
16
18
|
/** The wallet used to interact with the blockchain and sign the decrypt request */
|
@@ -21,20 +23,17 @@ export interface IncoLiteAttestedDecryptorArgs {
|
|
21
23
|
chainId: SupportedChainId;
|
22
24
|
}
|
23
25
|
/**
|
24
|
-
*
|
25
|
-
*
|
26
|
-
* @returns A function that can decrypt handles using attestation
|
27
|
-
* @throws {AttestedDecryptError} If the decryptor creation fails
|
26
|
+
* Decrypt multiple handles in a single attested request.
|
27
|
+
* Returns an array of attestations aligned with the response ordering.
|
28
28
|
*
|
29
|
-
* @
|
30
|
-
*
|
31
|
-
* @
|
32
|
-
* ```typescript
|
33
|
-
* const decryptor = await incoLiteAttestedDecryptor({
|
34
|
-
* walletClient,
|
35
|
-
* chainId: sepolia,
|
36
|
-
* });
|
37
|
-
* const { plaintext, covalidatorSignature } = await decryptor({ handle: '0x...' });
|
38
|
-
* ```
|
29
|
+
* @param args - The arguments for creating the attested decrypt function
|
30
|
+
* @returns A function that can decrypt handles and return an attestation
|
31
|
+
* @throws {AttestedDecryptError} If the creation fails
|
39
32
|
*/
|
40
|
-
export declare function
|
33
|
+
export declare function attestedDecrypt({ handles, backoffConfig, walletClient, chainId, kmsConnectRpcEndpointOrClient, }: {
|
34
|
+
handles: HexString[];
|
35
|
+
backoffConfig?: Partial<BackoffConfig> | undefined;
|
36
|
+
walletClient: WalletClient<Transport, Chain, Account>;
|
37
|
+
chainId: SupportedChainId;
|
38
|
+
kmsConnectRpcEndpointOrClient?: string | KmsClient;
|
39
|
+
}): Promise<Array<DecryptionAttestation<EciesScheme, SupportedFheType>>>;
|
@@ -20,70 +20,60 @@ export function validateHandle(handle) {
|
|
20
20
|
}
|
21
21
|
}
|
22
22
|
/**
|
23
|
-
*
|
24
|
-
*
|
25
|
-
* @returns A function that can decrypt handles using attestation
|
26
|
-
* @throws {AttestedDecryptError} If the decryptor creation fails
|
23
|
+
* Decrypt multiple handles in a single attested request.
|
24
|
+
* Returns an array of attestations aligned with the response ordering.
|
27
25
|
*
|
28
|
-
* @
|
29
|
-
*
|
30
|
-
* @
|
31
|
-
* ```typescript
|
32
|
-
* const decryptor = await incoLiteAttestedDecryptor({
|
33
|
-
* walletClient,
|
34
|
-
* chainId: sepolia,
|
35
|
-
* });
|
36
|
-
* const { plaintext, covalidatorSignature } = await decryptor({ handle: '0x...' });
|
37
|
-
* ```
|
26
|
+
* @param args - The arguments for creating the attested decrypt function
|
27
|
+
* @returns A function that can decrypt handles and return an attestation
|
28
|
+
* @throws {AttestedDecryptError} If the creation fails
|
38
29
|
*/
|
39
|
-
export function
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
const decryptionAttestation = response.decryptionAttestations[0];
|
70
|
-
if (decryptionAttestation.plaintext === undefined) {
|
71
|
-
throw new AttestedDecryptError('No plaintext in response');
|
30
|
+
export async function attestedDecrypt({ handles, backoffConfig, walletClient, chainId, kmsConnectRpcEndpointOrClient, }) {
|
31
|
+
try {
|
32
|
+
handles.forEach(validateHandle);
|
33
|
+
const kmsClient = getKmsClient(kmsConnectRpcEndpointOrClient || defaultCovalidatorGrpc(getSupportedChain(chainId)));
|
34
|
+
const eip712Payload = createEIP712Payload({
|
35
|
+
chainId: BigInt(chainId),
|
36
|
+
primaryType: 'AttestedDecryptRequest',
|
37
|
+
primaryTypeFields: [{ name: 'handles', type: 'bytes32[]' }],
|
38
|
+
message: {
|
39
|
+
handles,
|
40
|
+
},
|
41
|
+
domainName: ATTESTED_DECRYPT_DOMAIN_NAME,
|
42
|
+
domainVersion: ATTESTED_DECRYPT_DOMAIN_VERSION,
|
43
|
+
});
|
44
|
+
const eip712Signature = await walletClient.signTypedData(eip712Payload);
|
45
|
+
const attestedDecryptRequest = {
|
46
|
+
$typeName: 'inco.kms.lite.v1.AttestedDecryptRequest',
|
47
|
+
userAddress: walletClient.account.address,
|
48
|
+
handles,
|
49
|
+
eip712Signature: hexToBytes(eip712Signature),
|
50
|
+
};
|
51
|
+
const response = await retryWithBackoff(async () => {
|
52
|
+
return await kmsClient.attestedDecrypt(attestedDecryptRequest);
|
53
|
+
}, backoffConfig);
|
54
|
+
if (!response.decryptionAttestations || response.decryptionAttestations.length === 0) {
|
55
|
+
throw new AttestedDecryptError('No decryption attestations in response');
|
56
|
+
}
|
57
|
+
const results = response.decryptionAttestations.map((att) => {
|
58
|
+
if (att.plaintext === undefined) {
|
59
|
+
throw new AttestedDecryptError('No plaintext in attestation');
|
72
60
|
}
|
73
|
-
const
|
74
|
-
const
|
61
|
+
const h = att.handle;
|
62
|
+
const handleType = getHandleType(h);
|
63
|
+
const bigIntValue = bytesToBigInt(att.plaintext);
|
75
64
|
return {
|
76
|
-
handle:
|
65
|
+
handle: h,
|
77
66
|
plaintext: bigintToPlaintext(encryptionSchemes.ecies, handleType, bigIntValue),
|
78
|
-
covalidatorSignature:
|
67
|
+
covalidatorSignature: att.signature,
|
79
68
|
};
|
69
|
+
});
|
70
|
+
return results;
|
71
|
+
}
|
72
|
+
catch (error) {
|
73
|
+
if (error instanceof AttestedDecryptError) {
|
74
|
+
throw error;
|
80
75
|
}
|
81
|
-
|
82
|
-
|
83
|
-
throw error;
|
84
|
-
}
|
85
|
-
throw new AttestedDecryptError('Failed to decrypt handle', error);
|
86
|
-
}
|
87
|
-
};
|
76
|
+
throw new AttestedDecryptError('Failed to decrypt handles', error);
|
77
|
+
}
|
88
78
|
}
|
89
|
-
//# sourceMappingURL=data:application/json;base64,
|
79
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ZXN0ZWQtZGVjcnlwdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdHRlc3RlZGRlY3J5cHQvYXR0ZXN0ZWQtZGVjcnlwdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxhQUFhLEVBQWEsTUFBTSxjQUFjLENBQUM7QUFDeEQsT0FBTyxFQUFFLGlCQUFpQixFQUFvQixNQUFNLGFBQWEsQ0FBQztBQUNsRSxPQUFPLEVBQUUsaUJBQWlCLEVBQWUsaUJBQWlCLEVBQW9CLE1BQU0sNkJBQTZCLENBQUM7QUFFbEgsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUU3QyxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsWUFBWSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDeEUsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFFaEUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBQy9DLE9BQU8sRUFBRSxvQkFBb0IsRUFBeUIsTUFBTSxZQUFZLENBQUM7QUFFekUsTUFBTSw0QkFBNEIsR0FBRyxxQkFBcUIsQ0FBQztBQUMzRCxNQUFNLCtCQUErQixHQUFHLE9BQU8sQ0FBQztBQUVoRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxNQUFpQjtJQUM5QyxJQUFJLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLEVBQUUsRUFBRSxDQUFDO1FBQ3JELE1BQU0sSUFBSSxvQkFBb0IsQ0FBQyxvRUFBb0UsQ0FBQyxDQUFDO0lBQ3ZHLENBQUM7QUFDSCxDQUFDO0FBY0Q7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsZUFBZSxDQUFDLEVBQ3BDLE9BQU8sRUFDUCxhQUFhLEVBQ2IsWUFB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
|
@@ -1,3 +1,2 @@
|
|
1
|
-
export * from './attested-decrypt.js';
|
2
1
|
export * from './types.js';
|
3
|
-
//# sourceMappingURL=data:application/json;base64,
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYXR0ZXN0ZWRkZWNyeXB0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsWUFBWSxDQUFDIn0=
|