@inco/js 0.6.1 → 0.6.9
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/session-key.d.ts +8 -1
- package/dist/cjs/advancedacl/session-key.js +55 -21
- package/dist/cjs/attestedcompute/attested-compute.js +11 -4
- package/dist/cjs/attesteddecrypt/attested-decrypt.d.ts +38 -1
- package/dist/cjs/attesteddecrypt/attested-decrypt.js +49 -6
- package/dist/cjs/attesteddecrypt/types.d.ts +6 -1
- package/dist/cjs/attesteddecrypt/types.js +1 -1
- package/dist/cjs/attestedreveal/attested-reveal.js +9 -7
- package/dist/cjs/binary.d.ts +1 -0
- package/dist/cjs/binary.js +6 -2
- package/dist/cjs/encryption/encryption.d.ts +17 -22
- package/dist/cjs/encryption/encryption.js +34 -16
- package/dist/cjs/generated/abis/add-two.d.ts +1 -1
- package/dist/cjs/generated/abis/add-two.js +1 -1
- package/dist/cjs/generated/abis/lightning-preview.d.ts +48 -106
- package/dist/cjs/generated/abis/lightning-preview.js +33 -55
- package/dist/cjs/generated/abis/lightning.d.ts +55 -116
- package/dist/cjs/generated/abis/lightning.js +33 -66
- package/dist/cjs/generated/abis/verifier.d.ts +193 -84
- package/dist/cjs/generated/abis/verifier.js +151 -61
- package/dist/cjs/generated/es/cosmos_proto/cosmos_pb.js +2 -2
- package/dist/cjs/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +775 -0
- package/dist/cjs/generated/es/inco/covalidator/compute/v1/server_pb.js +261 -0
- package/dist/cjs/generated/es/inco/covalidator/compute/v1/types_pb.d.ts +186 -0
- package/dist/cjs/generated/es/inco/covalidator/compute/v1/types_pb.js +47 -0
- package/dist/cjs/generated/es/inco/fhe/v1/types_pb.js +2 -2
- package/dist/cjs/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +76 -129
- package/dist/cjs/generated/es/inco/kms/lite/v1/kms_service_pb.js +21 -26
- package/dist/cjs/generated/es/inco/kms/lite/v1/types_pb.js +2 -2
- package/dist/cjs/generated/lightning.d.ts +0 -32
- package/dist/cjs/generated/lightning.js +1 -33
- package/dist/cjs/generated/local-node.d.ts +1 -5
- package/dist/cjs/generated/local-node.js +2 -6
- package/dist/cjs/handle.d.ts +16 -0
- package/dist/cjs/handle.js +28 -3
- package/dist/cjs/lite/deployments.d.ts +20 -2
- package/dist/cjs/lite/deployments.js +1 -1
- package/dist/cjs/lite/ecies.d.ts +0 -2
- package/dist/cjs/lite/ecies.js +24 -13
- package/dist/cjs/lite/hadu.d.ts +3 -23
- package/dist/cjs/lite/hadu.js +26 -29
- package/dist/cjs/lite/index.d.ts +1 -1
- package/dist/cjs/lite/index.js +1 -1
- package/dist/cjs/lite/lightning.d.ts +24 -12
- package/dist/cjs/lite/lightning.js +62 -27
- package/dist/cjs/lite/reencrypt.d.ts +5 -7
- package/dist/cjs/lite/reencrypt.js +68 -58
- package/dist/cjs/test/mocks.d.ts +12 -0
- package/dist/cjs/test/mocks.js +27 -0
- package/dist/cjs/viem.d.ts +45 -48
- package/dist/esm/advancedacl/session-key.d.ts +8 -1
- package/dist/esm/advancedacl/session-key.js +58 -24
- package/dist/esm/attestedcompute/attested-compute.js +11 -4
- package/dist/esm/attesteddecrypt/attested-decrypt.d.ts +38 -1
- package/dist/esm/attesteddecrypt/attested-decrypt.js +51 -8
- package/dist/esm/attesteddecrypt/types.d.ts +6 -1
- package/dist/esm/attesteddecrypt/types.js +1 -1
- package/dist/esm/attestedreveal/attested-reveal.js +9 -7
- package/dist/esm/binary.d.ts +1 -0
- package/dist/esm/binary.js +5 -2
- package/dist/esm/encryption/encryption.d.ts +17 -22
- package/dist/esm/encryption/encryption.js +30 -16
- package/dist/esm/generated/abis/add-two.d.ts +1 -1
- package/dist/esm/generated/abis/add-two.js +1 -1
- package/dist/esm/generated/abis/lightning-preview.d.ts +48 -106
- package/dist/esm/generated/abis/lightning-preview.js +33 -55
- package/dist/esm/generated/abis/lightning.d.ts +55 -116
- package/dist/esm/generated/abis/lightning.js +33 -66
- package/dist/esm/generated/abis/verifier.d.ts +193 -84
- package/dist/esm/generated/abis/verifier.js +151 -61
- package/dist/esm/generated/es/cosmos_proto/cosmos_pb.js +2 -2
- package/dist/esm/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +775 -0
- package/dist/esm/generated/es/inco/covalidator/compute/v1/server_pb.js +258 -0
- package/dist/esm/generated/es/inco/covalidator/compute/v1/types_pb.d.ts +186 -0
- package/dist/esm/generated/es/inco/covalidator/compute/v1/types_pb.js +44 -0
- package/dist/esm/generated/es/inco/fhe/v1/types_pb.js +2 -2
- package/dist/esm/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +76 -129
- package/dist/esm/generated/es/inco/kms/lite/v1/kms_service_pb.js +20 -25
- package/dist/esm/generated/es/inco/kms/lite/v1/types_pb.js +2 -2
- package/dist/esm/generated/lightning.d.ts +0 -32
- package/dist/esm/generated/lightning.js +1 -33
- package/dist/esm/generated/local-node.d.ts +1 -5
- package/dist/esm/generated/local-node.js +2 -6
- package/dist/esm/handle.d.ts +16 -0
- package/dist/esm/handle.js +27 -3
- package/dist/esm/lite/deployments.d.ts +20 -2
- package/dist/esm/lite/deployments.js +1 -1
- package/dist/esm/lite/ecies.d.ts +0 -2
- package/dist/esm/lite/ecies.js +26 -15
- package/dist/esm/lite/hadu.d.ts +3 -23
- package/dist/esm/lite/hadu.js +28 -30
- package/dist/esm/lite/index.d.ts +1 -1
- package/dist/esm/lite/index.js +1 -1
- package/dist/esm/lite/lightning.d.ts +24 -12
- package/dist/esm/lite/lightning.js +59 -24
- package/dist/esm/lite/reencrypt.d.ts +5 -7
- package/dist/esm/lite/reencrypt.js +67 -58
- package/dist/esm/test/mocks.d.ts +12 -0
- package/dist/esm/test/mocks.js +23 -0
- package/dist/esm/viem.d.ts +45 -48
- package/dist/types/advancedacl/session-key.d.ts +8 -1
- package/dist/types/attesteddecrypt/attested-decrypt.d.ts +38 -1
- package/dist/types/attesteddecrypt/types.d.ts +6 -1
- package/dist/types/binary.d.ts +1 -0
- package/dist/types/encryption/encryption.d.ts +17 -22
- package/dist/types/generated/abis/add-two.d.ts +1 -1
- package/dist/types/generated/abis/lightning-preview.d.ts +48 -106
- package/dist/types/generated/abis/lightning.d.ts +55 -116
- package/dist/types/generated/abis/verifier.d.ts +193 -84
- package/dist/types/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +775 -0
- package/dist/types/generated/es/inco/covalidator/compute/v1/types_pb.d.ts +186 -0
- package/dist/types/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +76 -129
- package/dist/types/generated/lightning.d.ts +0 -32
- package/dist/types/generated/local-node.d.ts +1 -5
- package/dist/types/handle.d.ts +16 -0
- package/dist/types/lite/deployments.d.ts +20 -2
- package/dist/types/lite/ecies.d.ts +0 -2
- package/dist/types/lite/hadu.d.ts +3 -23
- package/dist/types/lite/index.d.ts +1 -1
- package/dist/types/lite/lightning.d.ts +24 -12
- package/dist/types/lite/reencrypt.d.ts +5 -7
- package/dist/types/test/mocks.d.ts +12 -0
- package/dist/types/viem.d.ts +45 -48
- package/package.json +3 -1
package/dist/cjs/viem.d.ts
CHANGED
|
@@ -30,7 +30,7 @@ export declare const chains: {
|
|
|
30
30
|
experimental_preconfirmationTime?: number | undefined | undefined;
|
|
31
31
|
rpcUrls: {
|
|
32
32
|
readonly default: {
|
|
33
|
-
readonly http: readonly ["https://
|
|
33
|
+
readonly http: readonly ["https://11155111.rpc.thirdweb.com"];
|
|
34
34
|
};
|
|
35
35
|
};
|
|
36
36
|
sourceId?: number | undefined | undefined;
|
|
@@ -116,7 +116,7 @@ export declare const chains: {
|
|
|
116
116
|
formatters: {
|
|
117
117
|
readonly block: {
|
|
118
118
|
exclude: [] | undefined;
|
|
119
|
-
format: (args: import("viem/chains").OpStackRpcBlock) => {
|
|
119
|
+
format: (args: import("viem/chains").OpStackRpcBlock, action?: string | undefined) => {
|
|
120
120
|
baseFeePerGas: bigint | null;
|
|
121
121
|
blobGasUsed: bigint;
|
|
122
122
|
difficulty: bigint;
|
|
@@ -126,7 +126,7 @@ export declare const chains: {
|
|
|
126
126
|
gasUsed: bigint;
|
|
127
127
|
hash: `0x${string}` | null;
|
|
128
128
|
logsBloom: `0x${string}` | null;
|
|
129
|
-
miner: import("
|
|
129
|
+
miner: import("viem").Address;
|
|
130
130
|
mixHash: import("viem").Hash;
|
|
131
131
|
nonce: `0x${string}` | null;
|
|
132
132
|
number: bigint | null;
|
|
@@ -149,17 +149,17 @@ export declare const chains: {
|
|
|
149
149
|
};
|
|
150
150
|
readonly transaction: {
|
|
151
151
|
exclude: [] | undefined;
|
|
152
|
-
format: (args: import("viem/chains").OpStackRpcTransaction) => ({
|
|
152
|
+
format: (args: import("viem/chains").OpStackRpcTransaction, action?: string | undefined) => ({
|
|
153
153
|
blockHash: `0x${string}` | null;
|
|
154
154
|
blockNumber: bigint | null;
|
|
155
|
-
from: import("
|
|
155
|
+
from: import("viem").Address;
|
|
156
156
|
gas: bigint;
|
|
157
157
|
hash: import("viem").Hash;
|
|
158
158
|
input: import("viem").Hex;
|
|
159
159
|
nonce: number;
|
|
160
160
|
r: import("viem").Hex;
|
|
161
161
|
s: import("viem").Hex;
|
|
162
|
-
to: import("
|
|
162
|
+
to: import("viem").Address | null;
|
|
163
163
|
transactionIndex: number | null;
|
|
164
164
|
typeHex: import("viem").Hex | null;
|
|
165
165
|
v: bigint;
|
|
@@ -179,8 +179,8 @@ export declare const chains: {
|
|
|
179
179
|
v: bigint;
|
|
180
180
|
value: bigint;
|
|
181
181
|
gas: bigint;
|
|
182
|
-
to: import("
|
|
183
|
-
from: import("
|
|
182
|
+
to: import("viem").Address | null;
|
|
183
|
+
from: import("viem").Address;
|
|
184
184
|
nonce: number;
|
|
185
185
|
blockHash: `0x${string}` | null;
|
|
186
186
|
blockNumber: bigint | null;
|
|
@@ -204,14 +204,14 @@ export declare const chains: {
|
|
|
204
204
|
} | {
|
|
205
205
|
blockHash: `0x${string}` | null;
|
|
206
206
|
blockNumber: bigint | null;
|
|
207
|
-
from: import("
|
|
207
|
+
from: import("viem").Address;
|
|
208
208
|
gas: bigint;
|
|
209
209
|
hash: import("viem").Hash;
|
|
210
210
|
input: import("viem").Hex;
|
|
211
211
|
nonce: number;
|
|
212
212
|
r: import("viem").Hex;
|
|
213
213
|
s: import("viem").Hex;
|
|
214
|
-
to: import("
|
|
214
|
+
to: import("viem").Address | null;
|
|
215
215
|
transactionIndex: number | null;
|
|
216
216
|
typeHex: import("viem").Hex | null;
|
|
217
217
|
v: bigint;
|
|
@@ -232,14 +232,14 @@ export declare const chains: {
|
|
|
232
232
|
} | {
|
|
233
233
|
blockHash: `0x${string}` | null;
|
|
234
234
|
blockNumber: bigint | null;
|
|
235
|
-
from: import("
|
|
235
|
+
from: import("viem").Address;
|
|
236
236
|
gas: bigint;
|
|
237
237
|
hash: import("viem").Hash;
|
|
238
238
|
input: import("viem").Hex;
|
|
239
239
|
nonce: number;
|
|
240
240
|
r: import("viem").Hex;
|
|
241
241
|
s: import("viem").Hex;
|
|
242
|
-
to: import("
|
|
242
|
+
to: import("viem").Address | null;
|
|
243
243
|
transactionIndex: number | null;
|
|
244
244
|
typeHex: import("viem").Hex | null;
|
|
245
245
|
v: bigint;
|
|
@@ -260,14 +260,14 @@ export declare const chains: {
|
|
|
260
260
|
} | {
|
|
261
261
|
blockHash: `0x${string}` | null;
|
|
262
262
|
blockNumber: bigint | null;
|
|
263
|
-
from: import("
|
|
263
|
+
from: import("viem").Address;
|
|
264
264
|
gas: bigint;
|
|
265
265
|
hash: import("viem").Hash;
|
|
266
266
|
input: import("viem").Hex;
|
|
267
267
|
nonce: number;
|
|
268
268
|
r: import("viem").Hex;
|
|
269
269
|
s: import("viem").Hex;
|
|
270
|
-
to: import("
|
|
270
|
+
to: import("viem").Address | null;
|
|
271
271
|
transactionIndex: number | null;
|
|
272
272
|
typeHex: import("viem").Hex | null;
|
|
273
273
|
v: bigint;
|
|
@@ -288,14 +288,14 @@ export declare const chains: {
|
|
|
288
288
|
} | {
|
|
289
289
|
blockHash: `0x${string}` | null;
|
|
290
290
|
blockNumber: bigint | null;
|
|
291
|
-
from: import("
|
|
291
|
+
from: import("viem").Address;
|
|
292
292
|
gas: bigint;
|
|
293
293
|
hash: import("viem").Hash;
|
|
294
294
|
input: import("viem").Hex;
|
|
295
295
|
nonce: number;
|
|
296
296
|
r: import("viem").Hex;
|
|
297
297
|
s: import("viem").Hex;
|
|
298
|
-
to: import("
|
|
298
|
+
to: import("viem").Address | null;
|
|
299
299
|
transactionIndex: number | null;
|
|
300
300
|
typeHex: import("viem").Hex | null;
|
|
301
301
|
v: bigint;
|
|
@@ -318,21 +318,21 @@ export declare const chains: {
|
|
|
318
318
|
};
|
|
319
319
|
readonly transactionReceipt: {
|
|
320
320
|
exclude: [] | undefined;
|
|
321
|
-
format: (args: import("viem/chains").OpStackRpcTransactionReceipt) => {
|
|
321
|
+
format: (args: import("viem/chains").OpStackRpcTransactionReceipt, action?: string | undefined) => {
|
|
322
322
|
blobGasPrice?: bigint | undefined;
|
|
323
323
|
blobGasUsed?: bigint | undefined;
|
|
324
324
|
blockHash: import("viem").Hash;
|
|
325
325
|
blockNumber: bigint;
|
|
326
|
-
contractAddress: import("
|
|
326
|
+
contractAddress: import("viem").Address | null | undefined;
|
|
327
327
|
cumulativeGasUsed: bigint;
|
|
328
328
|
effectiveGasPrice: bigint;
|
|
329
|
-
from: import("
|
|
329
|
+
from: import("viem").Address;
|
|
330
330
|
gasUsed: bigint;
|
|
331
331
|
logs: import("viem").Log<bigint, number, false>[];
|
|
332
332
|
logsBloom: import("viem").Hex;
|
|
333
333
|
root?: `0x${string}` | undefined;
|
|
334
334
|
status: "success" | "reverted";
|
|
335
|
-
to: import("
|
|
335
|
+
to: import("viem").Address | null;
|
|
336
336
|
transactionHash: import("viem").Hash;
|
|
337
337
|
transactionIndex: number;
|
|
338
338
|
type: import("viem").TransactionType;
|
|
@@ -392,15 +392,12 @@ export declare const chains: {
|
|
|
392
392
|
};
|
|
393
393
|
};
|
|
394
394
|
blockTime?: number | undefined | undefined;
|
|
395
|
-
contracts
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
multicall3?: import("viem").ChainContract | undefined;
|
|
402
|
-
erc6492Verifier?: import("viem").ChainContract | undefined;
|
|
403
|
-
} | undefined;
|
|
395
|
+
contracts: {
|
|
396
|
+
readonly multicall3: {
|
|
397
|
+
readonly address: "0xcA11bde05977b3631167028862bE2a173976CA11";
|
|
398
|
+
readonly blockCreated: 0;
|
|
399
|
+
};
|
|
400
|
+
};
|
|
404
401
|
ensTlds?: readonly string[] | undefined;
|
|
405
402
|
id: 9746;
|
|
406
403
|
name: "Plasma Testnet";
|
|
@@ -546,7 +543,7 @@ export declare const chains: {
|
|
|
546
543
|
formatters: {
|
|
547
544
|
readonly block: {
|
|
548
545
|
exclude: [] | undefined;
|
|
549
|
-
format: (args: import("viem/chains").OpStackRpcBlock) => {
|
|
546
|
+
format: (args: import("viem/chains").OpStackRpcBlock, action?: string | undefined) => {
|
|
550
547
|
baseFeePerGas: bigint | null;
|
|
551
548
|
blobGasUsed: bigint;
|
|
552
549
|
difficulty: bigint;
|
|
@@ -556,7 +553,7 @@ export declare const chains: {
|
|
|
556
553
|
gasUsed: bigint;
|
|
557
554
|
hash: `0x${string}` | null;
|
|
558
555
|
logsBloom: `0x${string}` | null;
|
|
559
|
-
miner: import("
|
|
556
|
+
miner: import("viem").Address;
|
|
560
557
|
mixHash: import("viem").Hash;
|
|
561
558
|
nonce: `0x${string}` | null;
|
|
562
559
|
number: bigint | null;
|
|
@@ -579,17 +576,17 @@ export declare const chains: {
|
|
|
579
576
|
};
|
|
580
577
|
readonly transaction: {
|
|
581
578
|
exclude: [] | undefined;
|
|
582
|
-
format: (args: import("viem/chains").OpStackRpcTransaction) => ({
|
|
579
|
+
format: (args: import("viem/chains").OpStackRpcTransaction, action?: string | undefined) => ({
|
|
583
580
|
blockHash: `0x${string}` | null;
|
|
584
581
|
blockNumber: bigint | null;
|
|
585
|
-
from: import("
|
|
582
|
+
from: import("viem").Address;
|
|
586
583
|
gas: bigint;
|
|
587
584
|
hash: import("viem").Hash;
|
|
588
585
|
input: import("viem").Hex;
|
|
589
586
|
nonce: number;
|
|
590
587
|
r: import("viem").Hex;
|
|
591
588
|
s: import("viem").Hex;
|
|
592
|
-
to: import("
|
|
589
|
+
to: import("viem").Address | null;
|
|
593
590
|
transactionIndex: number | null;
|
|
594
591
|
typeHex: import("viem").Hex | null;
|
|
595
592
|
v: bigint;
|
|
@@ -609,8 +606,8 @@ export declare const chains: {
|
|
|
609
606
|
v: bigint;
|
|
610
607
|
value: bigint;
|
|
611
608
|
gas: bigint;
|
|
612
|
-
to: import("
|
|
613
|
-
from: import("
|
|
609
|
+
to: import("viem").Address | null;
|
|
610
|
+
from: import("viem").Address;
|
|
614
611
|
nonce: number;
|
|
615
612
|
blockHash: `0x${string}` | null;
|
|
616
613
|
blockNumber: bigint | null;
|
|
@@ -634,14 +631,14 @@ export declare const chains: {
|
|
|
634
631
|
} | {
|
|
635
632
|
blockHash: `0x${string}` | null;
|
|
636
633
|
blockNumber: bigint | null;
|
|
637
|
-
from: import("
|
|
634
|
+
from: import("viem").Address;
|
|
638
635
|
gas: bigint;
|
|
639
636
|
hash: import("viem").Hash;
|
|
640
637
|
input: import("viem").Hex;
|
|
641
638
|
nonce: number;
|
|
642
639
|
r: import("viem").Hex;
|
|
643
640
|
s: import("viem").Hex;
|
|
644
|
-
to: import("
|
|
641
|
+
to: import("viem").Address | null;
|
|
645
642
|
transactionIndex: number | null;
|
|
646
643
|
typeHex: import("viem").Hex | null;
|
|
647
644
|
v: bigint;
|
|
@@ -662,14 +659,14 @@ export declare const chains: {
|
|
|
662
659
|
} | {
|
|
663
660
|
blockHash: `0x${string}` | null;
|
|
664
661
|
blockNumber: bigint | null;
|
|
665
|
-
from: import("
|
|
662
|
+
from: import("viem").Address;
|
|
666
663
|
gas: bigint;
|
|
667
664
|
hash: import("viem").Hash;
|
|
668
665
|
input: import("viem").Hex;
|
|
669
666
|
nonce: number;
|
|
670
667
|
r: import("viem").Hex;
|
|
671
668
|
s: import("viem").Hex;
|
|
672
|
-
to: import("
|
|
669
|
+
to: import("viem").Address | null;
|
|
673
670
|
transactionIndex: number | null;
|
|
674
671
|
typeHex: import("viem").Hex | null;
|
|
675
672
|
v: bigint;
|
|
@@ -690,14 +687,14 @@ export declare const chains: {
|
|
|
690
687
|
} | {
|
|
691
688
|
blockHash: `0x${string}` | null;
|
|
692
689
|
blockNumber: bigint | null;
|
|
693
|
-
from: import("
|
|
690
|
+
from: import("viem").Address;
|
|
694
691
|
gas: bigint;
|
|
695
692
|
hash: import("viem").Hash;
|
|
696
693
|
input: import("viem").Hex;
|
|
697
694
|
nonce: number;
|
|
698
695
|
r: import("viem").Hex;
|
|
699
696
|
s: import("viem").Hex;
|
|
700
|
-
to: import("
|
|
697
|
+
to: import("viem").Address | null;
|
|
701
698
|
transactionIndex: number | null;
|
|
702
699
|
typeHex: import("viem").Hex | null;
|
|
703
700
|
v: bigint;
|
|
@@ -718,14 +715,14 @@ export declare const chains: {
|
|
|
718
715
|
} | {
|
|
719
716
|
blockHash: `0x${string}` | null;
|
|
720
717
|
blockNumber: bigint | null;
|
|
721
|
-
from: import("
|
|
718
|
+
from: import("viem").Address;
|
|
722
719
|
gas: bigint;
|
|
723
720
|
hash: import("viem").Hash;
|
|
724
721
|
input: import("viem").Hex;
|
|
725
722
|
nonce: number;
|
|
726
723
|
r: import("viem").Hex;
|
|
727
724
|
s: import("viem").Hex;
|
|
728
|
-
to: import("
|
|
725
|
+
to: import("viem").Address | null;
|
|
729
726
|
transactionIndex: number | null;
|
|
730
727
|
typeHex: import("viem").Hex | null;
|
|
731
728
|
v: bigint;
|
|
@@ -748,21 +745,21 @@ export declare const chains: {
|
|
|
748
745
|
};
|
|
749
746
|
readonly transactionReceipt: {
|
|
750
747
|
exclude: [] | undefined;
|
|
751
|
-
format: (args: import("viem/chains").OpStackRpcTransactionReceipt) => {
|
|
748
|
+
format: (args: import("viem/chains").OpStackRpcTransactionReceipt, action?: string | undefined) => {
|
|
752
749
|
blobGasPrice?: bigint | undefined;
|
|
753
750
|
blobGasUsed?: bigint | undefined;
|
|
754
751
|
blockHash: import("viem").Hash;
|
|
755
752
|
blockNumber: bigint;
|
|
756
|
-
contractAddress: import("
|
|
753
|
+
contractAddress: import("viem").Address | null | undefined;
|
|
757
754
|
cumulativeGasUsed: bigint;
|
|
758
755
|
effectiveGasPrice: bigint;
|
|
759
|
-
from: import("
|
|
756
|
+
from: import("viem").Address;
|
|
760
757
|
gasUsed: bigint;
|
|
761
758
|
logs: import("viem").Log<bigint, number, false>[];
|
|
762
759
|
logsBloom: import("viem").Hex;
|
|
763
760
|
root?: `0x${string}` | undefined;
|
|
764
761
|
status: "success" | "reverted";
|
|
765
|
-
to: import("
|
|
762
|
+
to: import("viem").Address | null;
|
|
766
763
|
transactionHash: import("viem").Hash;
|
|
767
764
|
transactionIndex: number;
|
|
768
765
|
type: import("viem").TransactionType;
|
|
@@ -29,6 +29,11 @@ export interface SessionKeyReencryptorArgs {
|
|
|
29
29
|
kmsConnectRpcEndpointOrClient: string | Client<typeof KmsService>;
|
|
30
30
|
allowanceVoucherWithSig: AllowanceVoucherWithSig;
|
|
31
31
|
}
|
|
32
|
+
/**
|
|
33
|
+
* The sessionKeyReencryptor function is a reencryptor that uses a session key
|
|
34
|
+
* to reencrypt data.
|
|
35
|
+
*
|
|
36
|
+
*/
|
|
32
37
|
export declare function sessionKeyReencryptor({ chainId, kmsConnectRpcEndpointOrClient, ephemeralKeypair, allowanceVoucherWithSig, }: SessionKeyReencryptorArgs): Promise<(<T extends SupportedFheType>({ handle, }: ReencryptFnArgs<EciesScheme, T>) => Promise<import("../encryption/encryption.js").PlaintextOf<1, 0 | 5 | 7 | 8>>)>;
|
|
33
38
|
export declare function updateActiveVouchersSessionNonce(incoLiteAddress: Address, sharerWalletClient: WalletClient<Transport, Chain, Account>): Promise<`0x${string}`>;
|
|
34
39
|
export interface SessionKeyAttestedComputeArgs {
|
|
@@ -53,5 +58,7 @@ export interface SessionKeyAttestedDecryptArgs {
|
|
|
53
58
|
allowanceVoucherWithSig: AllowanceVoucherWithSig;
|
|
54
59
|
handles: HexString[];
|
|
55
60
|
backoffConfig?: Partial<BackoffConfig> | undefined;
|
|
61
|
+
reencryptPubKey?: Uint8Array;
|
|
62
|
+
reencryptKeypair?: Secp256k1Keypair;
|
|
56
63
|
}
|
|
57
|
-
export declare function sessionKeyAttestedDecrypt({ chainId, kmsConnectRpcEndpointOrClient, handles, ephemeralKeypair, allowanceVoucherWithSig, backoffConfig, }: SessionKeyAttestedDecryptArgs): Promise<Array<DecryptionAttestation<EciesScheme, SupportedFheType>>>;
|
|
64
|
+
export declare function sessionKeyAttestedDecrypt({ chainId, kmsConnectRpcEndpointOrClient, handles, ephemeralKeypair, allowanceVoucherWithSig, backoffConfig, reencryptPubKey, reencryptKeypair, }: SessionKeyAttestedDecryptArgs): Promise<Array<DecryptionAttestation<EciesScheme, SupportedFheType>>>;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { create } from '@bufbuild/protobuf';
|
|
2
|
-
import { encodeAbiParameters, getContract, hexToBytes, toFunctionSelector, } from 'viem';
|
|
2
|
+
import { bytesToHex, encodeAbiParameters, getContract, hexToBytes, toFunctionSelector, } from 'viem';
|
|
3
3
|
import { privateKeyToAccount } from 'viem/accounts';
|
|
4
4
|
import { AttestedDecryptError, } from '../attesteddecrypt/index.js';
|
|
5
5
|
import { getSupportedChain } from '../chain.js';
|
|
@@ -8,11 +8,12 @@ import { abiHelperAbi, advancedAccessControlAbi, } from '../generated/abis/light
|
|
|
8
8
|
import { incoLightningAbi, sessionVerifierAbi, } from '../generated/abis/lightning.js';
|
|
9
9
|
import { incoVerifierAbi } from '../generated/abis/verifier.js';
|
|
10
10
|
import { bigintToBytes32, bytesToBigInt, getHandleType, } from '../index.js';
|
|
11
|
-
import { ATTESTED_COMPUTE_DOMAIN_NAME, ATTESTED_COMPUTE_DOMAIN_VERSION, ATTESTED_DECRYPT_DOMAIN_NAME, ATTESTED_DECRYPT_DOMAIN_VERSION, decryptGrpcResponse, defaultCovalidatorGrpc, getKmsClient,
|
|
11
|
+
import { ATTESTED_COMPUTE_DOMAIN_NAME, ATTESTED_COMPUTE_DOMAIN_VERSION, ATTESTED_DECRYPT_DOMAIN_NAME, ATTESTED_DECRYPT_DOMAIN_VERSION, decryptGrpcResponse, defaultCovalidatorGrpc, getKmsClient, } from '../lite/index.js';
|
|
12
12
|
import { createEIP712Payload, } from '../reencryption/index.js';
|
|
13
13
|
import { retryWithBackoff } from '../retry.js';
|
|
14
|
-
import { AttestedComputeRequestSchema, AttestedDecryptRequestSchema,
|
|
14
|
+
import { AttestedComputeRequestSchema, AttestedDecryptRequestSchema, } from '../generated/es/inco/kms/lite/v1/kms_service_pb.js';
|
|
15
15
|
import { AllowanceProofSchema, AllowanceVoucherSchema, HandleWithProofSchema, IncoLiteAdvancedACLProofSchema, } from '../generated/es/inco/kms/lite/v1/types_pb.js';
|
|
16
|
+
import { decryptGrpcDecryptResponse } from '../lite/reencrypt.js';
|
|
16
17
|
// Given a sharer's wallet client, an incoLite contract address, and a
|
|
17
18
|
// (verifyingContract, callFunction, sharerArgData) tuple, this function
|
|
18
19
|
// creates an AllowanceVoucher.
|
|
@@ -76,23 +77,40 @@ export async function grantSessionKey({ chainId, incoLiteAddress, sessionVerifie
|
|
|
76
77
|
voucherSignature,
|
|
77
78
|
};
|
|
78
79
|
}
|
|
79
|
-
|
|
80
|
-
|
|
80
|
+
/**
|
|
81
|
+
* The sessionKeyReencryptor function is a reencryptor that uses a session key
|
|
82
|
+
* to reencrypt data.
|
|
83
|
+
*
|
|
84
|
+
*/
|
|
81
85
|
export async function sessionKeyReencryptor({ chainId, kmsConnectRpcEndpointOrClient, ephemeralKeypair, allowanceVoucherWithSig, }) {
|
|
82
86
|
const kmsClient = getKmsClient(kmsConnectRpcEndpointOrClient ||
|
|
83
87
|
defaultCovalidatorGrpc(getSupportedChain(chainId)));
|
|
84
88
|
const requesterAccount = privateKeyToAccount(`0x${ephemeralKeypair.kp.getPrivate('hex')}`);
|
|
85
89
|
const ephemeralPubKey = ephemeralKeypair.encodePublicKey();
|
|
86
|
-
// Sign the EIP712 attesting that the requester has access to the private key
|
|
87
|
-
// corresponding to the ephemeral public key.
|
|
88
|
-
const eip712Payload = reencryptEIP712(chainId, ephemeralPubKey);
|
|
89
|
-
// Since the account is an ephemeral keypair stored in memory (not in Metamask),
|
|
90
|
-
// this step will NOT prompt the user with a pop-up.
|
|
91
|
-
const eip712Signature = await requesterAccount.signTypedData(eip712Payload);
|
|
92
90
|
return async function reencrypt({ handle, }) {
|
|
93
|
-
const
|
|
91
|
+
const handles = [handle];
|
|
92
|
+
// Sign the EIP712 attesting that the requester has access to the private key
|
|
93
|
+
// corresponding to the ephemeral public key.
|
|
94
|
+
const eip712Payload = createEIP712Payload({
|
|
95
|
+
chainId,
|
|
96
|
+
primaryType: 'AttestedDecryptRequest',
|
|
97
|
+
primaryTypeFields: [
|
|
98
|
+
{ name: 'handles', type: 'bytes32[]' },
|
|
99
|
+
{ name: 'publicKey', type: 'bytes' },
|
|
100
|
+
],
|
|
101
|
+
message: {
|
|
102
|
+
handles: handles,
|
|
103
|
+
publicKey: bytesToHex(ephemeralPubKey),
|
|
104
|
+
},
|
|
105
|
+
domainName: ATTESTED_DECRYPT_DOMAIN_NAME,
|
|
106
|
+
domainVersion: ATTESTED_DECRYPT_DOMAIN_VERSION,
|
|
107
|
+
});
|
|
108
|
+
// Since the account is an ephemeral keypair stored in memory (not in Metamask),
|
|
109
|
+
// this step will NOT prompt the user with a pop-up.
|
|
110
|
+
const eip712Signature = await requesterAccount.signTypedData(eip712Payload);
|
|
111
|
+
const reencryptRequest = create(AttestedDecryptRequestSchema, {
|
|
94
112
|
userAddress: requesterAccount.address,
|
|
95
|
-
ephemeralPubKey,
|
|
113
|
+
reencryptPubKey: ephemeralPubKey,
|
|
96
114
|
eip712Signature: hexToBytes(eip712Signature),
|
|
97
115
|
handlesWithProofs: [
|
|
98
116
|
create(HandleWithProofSchema, {
|
|
@@ -118,7 +136,7 @@ export async function sessionKeyReencryptor({ chainId, kmsConnectRpcEndpointOrCl
|
|
|
118
136
|
}),
|
|
119
137
|
],
|
|
120
138
|
});
|
|
121
|
-
const response = await kmsClient.
|
|
139
|
+
const response = await kmsClient.attestedDecrypt(reencryptRequest);
|
|
122
140
|
return decryptGrpcResponse(response, ephemeralKeypair, handle);
|
|
123
141
|
};
|
|
124
142
|
}
|
|
@@ -189,10 +207,14 @@ export async function sessionKeyAttestedCompute({ lhsHandle, op, rhsPlaintext, b
|
|
|
189
207
|
throw new Error('Failed to get decryption attestation from attested compute');
|
|
190
208
|
}
|
|
191
209
|
const decryptionAttestation = response.decryptionAttestation;
|
|
192
|
-
if (decryptionAttestation.
|
|
193
|
-
throw new Error('No
|
|
210
|
+
if (decryptionAttestation.value === undefined) {
|
|
211
|
+
throw new Error('No value in compute response');
|
|
212
|
+
}
|
|
213
|
+
if (decryptionAttestation.value.case !== 'plaintext') {
|
|
214
|
+
throw new Error(`Unexpected attestation type: ${decryptionAttestation.value.case}, expected 'plaintext'`);
|
|
194
215
|
}
|
|
195
|
-
const
|
|
216
|
+
const plaintext = decryptionAttestation.value.value;
|
|
217
|
+
const bigIntValue = bytesToBigInt(plaintext.value);
|
|
196
218
|
return {
|
|
197
219
|
handle: decryptionAttestation.handle,
|
|
198
220
|
plaintext: bigintToPlaintext(encryptionSchemes.ecies, getHandleType(lhsHandle), bigIntValue),
|
|
@@ -201,7 +223,7 @@ export async function sessionKeyAttestedCompute({ lhsHandle, op, rhsPlaintext, b
|
|
|
201
223
|
}
|
|
202
224
|
// The sessionKeyAttestedDecrypt function is a decryptor that uses a session key
|
|
203
225
|
// to decrypt data.
|
|
204
|
-
export async function sessionKeyAttestedDecrypt({ chainId, kmsConnectRpcEndpointOrClient, handles, ephemeralKeypair, allowanceVoucherWithSig, backoffConfig, }) {
|
|
226
|
+
export async function sessionKeyAttestedDecrypt({ chainId, kmsConnectRpcEndpointOrClient, handles, ephemeralKeypair, allowanceVoucherWithSig, backoffConfig, reencryptPubKey, reencryptKeypair, }) {
|
|
205
227
|
const kmsClient = getKmsClient(kmsConnectRpcEndpointOrClient ||
|
|
206
228
|
defaultCovalidatorGrpc(getSupportedChain(chainId)));
|
|
207
229
|
const requesterAccount = privateKeyToAccount(`0x${ephemeralKeypair.kp.getPrivate('hex')}`);
|
|
@@ -210,9 +232,13 @@ export async function sessionKeyAttestedDecrypt({ chainId, kmsConnectRpcEndpoint
|
|
|
210
232
|
const eip712Payload = createEIP712Payload({
|
|
211
233
|
chainId: BigInt(chainId),
|
|
212
234
|
primaryType: 'AttestedDecryptRequest',
|
|
213
|
-
primaryTypeFields: [
|
|
235
|
+
primaryTypeFields: [
|
|
236
|
+
{ name: 'handles', type: 'bytes32[]' },
|
|
237
|
+
{ name: 'publicKey', type: 'bytes' },
|
|
238
|
+
],
|
|
214
239
|
message: {
|
|
215
240
|
handles: handles,
|
|
241
|
+
publicKey: bytesToHex(reencryptPubKey ? reencryptPubKey : Uint8Array.from([])),
|
|
216
242
|
},
|
|
217
243
|
domainName: ATTESTED_DECRYPT_DOMAIN_NAME,
|
|
218
244
|
domainVersion: ATTESTED_DECRYPT_DOMAIN_VERSION,
|
|
@@ -247,21 +273,29 @@ export async function sessionKeyAttestedDecrypt({ chainId, kmsConnectRpcEndpoint
|
|
|
247
273
|
userAddress: requesterAccount.address,
|
|
248
274
|
handlesWithProofs: handlesWithProofs,
|
|
249
275
|
eip712Signature: hexToBytes(eip712Signature),
|
|
276
|
+
reencryptPubKey: reencryptPubKey ? reencryptPubKey : Uint8Array.from([]),
|
|
250
277
|
});
|
|
251
|
-
|
|
278
|
+
var response = await retryWithBackoff(async () => {
|
|
252
279
|
return await kmsClient.attestedDecrypt(attestedDecryptRequest);
|
|
253
280
|
}, backoffConfig);
|
|
254
281
|
if (!response.decryptionAttestations ||
|
|
255
282
|
response.decryptionAttestations.length === 0) {
|
|
256
283
|
throw new AttestedDecryptError('No decryption attestations in response');
|
|
257
284
|
}
|
|
285
|
+
if (reencryptKeypair) {
|
|
286
|
+
response = await decryptGrpcDecryptResponse(response, reencryptKeypair);
|
|
287
|
+
}
|
|
258
288
|
const results = response.decryptionAttestations.map((att) => {
|
|
259
|
-
if (att.
|
|
260
|
-
throw new AttestedDecryptError('No
|
|
289
|
+
if (att.value === undefined) {
|
|
290
|
+
throw new AttestedDecryptError('No value in attestation');
|
|
291
|
+
}
|
|
292
|
+
if (att.value.case !== 'plaintext') {
|
|
293
|
+
throw new Error(`Unexpected attestation type: ${att.value.case}, expected 'plaintext'`);
|
|
261
294
|
}
|
|
295
|
+
const plaintext = att.value.value;
|
|
262
296
|
const h = att.handle;
|
|
263
297
|
const handleType = getHandleType(h);
|
|
264
|
-
const bigIntValue = bytesToBigInt(
|
|
298
|
+
const bigIntValue = bytesToBigInt(plaintext.value);
|
|
265
299
|
return {
|
|
266
300
|
handle: h,
|
|
267
301
|
plaintext: bigintToPlaintext(encryptionSchemes.ecies, handleType, bigIntValue),
|
|
@@ -333,4 +367,4 @@ async function getIncoVerifier(incoLiteAddress, walletClient) {
|
|
|
333
367
|
client: walletClient,
|
|
334
368
|
});
|
|
335
369
|
}
|
|
336
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi1rZXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWR2YW5jZWRhY2wvc2Vzc2lvbi1rZXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTVDLE9BQU8sRUFJTCxtQkFBbUIsRUFDbkIsV0FBVyxFQUVYLFVBQVUsRUFDVixrQkFBa0IsR0FHbkIsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEQsT0FBTyxFQUNMLG9CQUFvQixHQUVyQixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxpQkFBaUIsRUFBb0IsTUFBTSxhQUFhLENBQUM7QUFDbEUsT0FBTyxFQUNMLGlCQUFpQixFQUVqQixpQkFBaUIsR0FFbEIsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQ0wsWUFBWSxFQUNaLHdCQUF3QixHQUN6QixNQUFNLHdDQUF3QyxDQUFDO0FBQ2hELE9BQU8sRUFDTCxnQkFBZ0IsRUFDaEIsa0JBQWtCLEdBQ25CLE1BQU0sZ0NBQWdDLENBQUM7QUFDeEMsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sRUFDTCxlQUFlLEVBQ2YsYUFBYSxFQUNiLGFBQWEsR0FFZCxNQUFNLGFBQWEsQ0FBQztBQVNyQixPQUFPLEVBQ0wsNEJBQTRCLEVBQzVCLCtCQUErQixFQUMvQiw0QkFBNEIsRUFDNUIsK0JBQStCLEVBQy9CLG1CQUFtQixFQUNuQixzQkFBc0IsRUFDdEIsWUFBWSxFQUNaLGVBQWUsR0FDaEIsTUFBTSxrQkFBa0IsQ0FBQztBQUMxQixPQUFPLEVBQ0wsbUJBQW1CLEdBRXBCLE1BQU0sMEJBQTBCLENBQUM7QUFDbEMsT0FBTyxFQUFpQixnQkFBZ0IsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUk5RCxPQUFPLEVBQ0wsNEJB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
|
|
370
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2Vzc2lvbi1rZXkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvYWR2YW5jZWRhY2wvc2Vzc2lvbi1rZXkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBRTVDLE9BQU8sRUFHTCxVQUFVLEVBRVYsbUJBQW1CLEVBQ25CLFdBQVcsRUFFWCxVQUFVLEVBQ1Ysa0JBQWtCLEdBR25CLE1BQU0sTUFBTSxDQUFDO0FBQ2QsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQ3BELE9BQU8sRUFDTCxvQkFBb0IsR0FFckIsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsaUJBQWlCLEVBQW9CLE1BQU0sYUFBYSxDQUFDO0FBQ2xFLE9BQU8sRUFDTCxpQkFBaUIsRUFFakIsaUJBQWlCLEdBRWxCLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUNMLFlBQVksRUFDWix3QkFBd0IsR0FDekIsTUFBTSx3Q0FBd0MsQ0FBQztBQUNoRCxPQUFPLEVBQ0wsZ0JBQWdCLEVBQ2hCLGtCQUFrQixHQUNuQixNQUFNLGdDQUFnQyxDQUFDO0FBQ3hDLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSwrQkFBK0IsQ0FBQztBQUNoRSxPQUFPLEVBQ0wsZUFBZSxFQUNmLGFBQWEsRUFDYixhQUFhLEdBRWQsTUFBTSxhQUFhLENBQUM7QUFRckIsT0FBTyxFQUNMLDRCQUE0QixFQUM1QiwrQkFBK0IsRUFDL0IsNEJBQTRCLEVBQzVCLCtCQUErQixFQUMvQixtQkFBbUIsRUFDbkIsc0JBQXNCLEVBQ3RCLFlBQVksR0FDYixNQUFNLGtCQUFrQixDQUFDO0FBQzFCLE9BQU8sRUFDTCxtQkFBbUIsR0FFcEIsTUFBTSwwQkFBMEIsQ0FBQztBQUNsQyxPQUFPLEVBQWlCLGdCQUFnQixFQUFFLE1BQU0sYUFBYSxDQUFDO0FBSTlELE9BQU8sRUFDTCw0QkFB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
|
|
@@ -66,15 +66,22 @@ export async function attestedCompute({ lhsHandle, op, rhsPlaintext, backoffConf
|
|
|
66
66
|
return await kmsClient.attestedCompute(attestedComputeRequest);
|
|
67
67
|
}, backoffConfig);
|
|
68
68
|
const decryptionAttestation = response.decryptionAttestation;
|
|
69
|
-
if (decryptionAttestation
|
|
70
|
-
throw new AttestedComputeError('No
|
|
69
|
+
if (decryptionAttestation === undefined) {
|
|
70
|
+
throw new AttestedComputeError('No decryption attestation in response');
|
|
71
71
|
}
|
|
72
|
+
if (decryptionAttestation.value === undefined) {
|
|
73
|
+
throw new AttestedComputeError('No value in compute response');
|
|
74
|
+
}
|
|
75
|
+
if (decryptionAttestation.value.case !== 'plaintext') {
|
|
76
|
+
throw new AttestedComputeError(`Unexpected attestation type: ${decryptionAttestation.value.case}, expected 'plaintext'`);
|
|
77
|
+
}
|
|
78
|
+
const plaintext = decryptionAttestation.value.value;
|
|
72
79
|
const computeResultHandle = response.decryptionAttestation?.handle;
|
|
73
80
|
if (!computeResultHandle) {
|
|
74
81
|
throw new AttestedComputeError('No compute result handle in response');
|
|
75
82
|
}
|
|
76
83
|
const handleType = getHandleType(computeResultHandle);
|
|
77
|
-
const bigIntValue = bytesToBigInt(
|
|
84
|
+
const bigIntValue = bytesToBigInt(plaintext.value);
|
|
78
85
|
return {
|
|
79
86
|
handle: computeResultHandle,
|
|
80
87
|
plaintext: bigintToPlaintext(encryptionSchemes.ecies, handleType, bigIntValue),
|
|
@@ -88,4 +95,4 @@ export async function attestedCompute({ lhsHandle, op, rhsPlaintext, backoffConf
|
|
|
88
95
|
throw new AttestedComputeError('Failed to perform attested compute', error);
|
|
89
96
|
}
|
|
90
97
|
}
|
|
91
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
98
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0ZXN0ZWQtY29tcHV0ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9hdHRlc3RlZGNvbXB1dGUvYXR0ZXN0ZWQtY29tcHV0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFFNUMsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUNsQyxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFFeEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxhQUFhLEVBQWEsTUFBTSxjQUFjLENBQUM7QUFDekUsT0FBTyxFQUFFLGlCQUFpQixFQUFvQixNQUFNLGFBQWEsQ0FBQztBQUNsRSxPQUFPLEVBQ0wsaUJBQWlCLEVBRWpCLGlCQUFpQixHQUVsQixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFFTCw0QkFBNEIsR0FFN0IsTUFBTSxvREFBb0QsQ0FBQztBQUM1RCxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBRTdDLE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxZQUFZLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN4RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUVoRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDL0MsT0FBTyxFQUFFLG9CQUFvQixFQUFxQixNQUFNLFlBQVksQ0FBQztBQUVyRSxNQUFNLENBQUMsTUFBTSw0QkFBNEIsR0FBRyxxQkFBcUIsQ0FBQztBQUNsRSxNQUFNLENBQUMsTUFBTSwrQkFBK0IsR0FBRyxPQUFPLENBQUM7QUFjdkQ7Ozs7Ozs7R0FPRztBQUNILE1BQU0sQ0FBQyxLQUFLLFVBQVUsZUFBZSxDQUE2QixFQUNoRSxTQUFTLEVBQ1QsRUFBRSxFQUNGLFlBQVksRUFDWixhQUFhLEVBQ2IsWUFBWSxFQUNaLDZCQUE2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
|