@inco/js 0.9.0-devnet-test-10 → 0.10.0-devnet-1

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.
Files changed (226) hide show
  1. package/README.md +503 -47
  2. package/dist/cjs/advancedacl/session-key.d.ts +5 -5
  3. package/dist/cjs/advancedacl/session-key.js +33 -9
  4. package/dist/cjs/attestedcompute/attested-compute.d.ts +1 -2
  5. package/dist/cjs/attestedcompute/attested-compute.js +15 -7
  6. package/dist/cjs/attesteddecrypt/attested-decrypt.d.ts +5 -43
  7. package/dist/cjs/attesteddecrypt/attested-decrypt.js +33 -96
  8. package/dist/cjs/attestedreveal/attested-reveal.d.ts +21 -0
  9. package/dist/cjs/attestedreveal/attested-reveal.js +31 -0
  10. package/dist/cjs/attestedreveal/index.d.ts +2 -0
  11. package/dist/cjs/attestedreveal/index.js +21 -0
  12. package/dist/cjs/attestedreveal/types.d.ts +4 -0
  13. package/dist/cjs/attestedreveal/types.js +13 -0
  14. package/dist/cjs/binary.d.ts +82 -0
  15. package/dist/cjs/binary.js +87 -5
  16. package/dist/cjs/chain.d.ts +29 -4
  17. package/dist/cjs/chain.js +34 -6
  18. package/dist/cjs/eip712/eip712.d.ts +18 -0
  19. package/dist/cjs/eip712/eip712.js +51 -0
  20. package/dist/cjs/eip712/index.d.ts +1 -0
  21. package/dist/cjs/eip712/index.js +8 -0
  22. package/dist/cjs/elistattesteddecrypt/elist-attested-decrypt.d.ts +49 -0
  23. package/dist/cjs/elistattesteddecrypt/elist-attested-decrypt.js +94 -0
  24. package/dist/cjs/elistattesteddecrypt/index.d.ts +2 -0
  25. package/dist/cjs/elistattesteddecrypt/index.js +22 -0
  26. package/dist/cjs/elistattesteddecrypt/types.d.ts +31 -0
  27. package/dist/cjs/elistattesteddecrypt/types.js +16 -0
  28. package/dist/cjs/encryption/encryption.d.ts +115 -0
  29. package/dist/cjs/encryption/encryption.js +98 -7
  30. package/dist/cjs/encryption/index.d.ts +1 -1
  31. package/dist/cjs/encryption/index.js +17 -16
  32. package/dist/cjs/generated/abis/lightning.d.ts +1119 -107
  33. package/dist/cjs/generated/abis/lightning.js +762 -52
  34. package/dist/cjs/generated/abis/test-elist.d.ts +20 -2
  35. package/dist/cjs/generated/abis/test-elist.js +16 -3
  36. package/dist/cjs/generated/abis/verifier.d.ts +118 -15
  37. package/dist/cjs/generated/abis/verifier.js +71 -19
  38. package/dist/cjs/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +23 -37
  39. package/dist/cjs/generated/es/inco/covalidator/compute/v1/server_pb.js +36 -41
  40. package/dist/cjs/generated/es/inco/covalidator/compute/v1/types_pb.js +1 -1
  41. package/dist/cjs/generated/es/inco/helioswrapper/v1/helioswrapper_pb.js +1 -1
  42. package/dist/cjs/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +16 -0
  43. package/dist/cjs/generated/es/inco/kms/lite/v1/kms_service_pb.js +3 -3
  44. package/dist/cjs/generated/es/inco/kms/lite/v1/types_pb.js +1 -1
  45. package/dist/cjs/generated/es/inco/sealingfetcher/v1/sealingfetcher_pb.d.ts +7 -0
  46. package/dist/cjs/generated/es/inco/sealingfetcher/v1/sealingfetcher_pb.js +3 -3
  47. package/dist/cjs/generated/lightning.d.ts +150 -0
  48. package/dist/cjs/generated/lightning.js +157 -1
  49. package/dist/cjs/generated/local-node.d.ts +9 -9
  50. package/dist/cjs/generated/local-node.js +37 -10
  51. package/dist/cjs/handle.d.ts +72 -0
  52. package/dist/cjs/handle.js +113 -9
  53. package/dist/cjs/index.d.ts +1 -1
  54. package/dist/cjs/index.js +11 -2
  55. package/dist/cjs/kms/client.d.ts +1 -1
  56. package/dist/cjs/kms/client.js +4 -3
  57. package/dist/cjs/kms/quorumClient.d.ts +18 -12
  58. package/dist/cjs/kms/quorumClient.js +212 -231
  59. package/dist/cjs/kms/quorumConsistency.d.ts +82 -0
  60. package/dist/cjs/kms/quorumConsistency.js +269 -0
  61. package/dist/cjs/kms/signatureVerification.d.ts +35 -0
  62. package/dist/cjs/kms/signatureVerification.js +88 -0
  63. package/dist/cjs/kms/thresholdPromises.d.ts +4 -3
  64. package/dist/cjs/kms/thresholdPromises.js +25 -15
  65. package/dist/cjs/lite/attested-compute.d.ts +2 -2
  66. package/dist/cjs/lite/attested-compute.js +2 -3
  67. package/dist/cjs/lite/attested-decrypt.d.ts +2 -2
  68. package/dist/cjs/lite/attested-decrypt.js +2 -3
  69. package/dist/cjs/lite/hadu.d.ts +1 -1
  70. package/dist/cjs/lite/hadu.js +3 -3
  71. package/dist/cjs/lite/index.d.ts +6 -2
  72. package/dist/cjs/lite/index.js +8 -14
  73. package/dist/cjs/lite/lightning.d.ts +96 -47
  74. package/dist/cjs/lite/lightning.js +221 -267
  75. package/dist/cjs/lite/types.d.ts +47 -0
  76. package/dist/cjs/lite/types.js +3 -0
  77. package/dist/cjs/lite/xwing.d.ts +33 -2
  78. package/dist/cjs/lite/xwing.js +62 -7
  79. package/dist/cjs/local/local-node.d.ts +18 -0
  80. package/dist/cjs/local/local-node.js +18 -3
  81. package/dist/cjs/reencryption/eip712.d.ts +27 -0
  82. package/dist/cjs/reencryption/eip712.js +20 -7
  83. package/dist/cjs/reencryption/types.d.ts +24 -0
  84. package/dist/cjs/retry.d.ts +14 -0
  85. package/dist/cjs/retry.js +58 -2
  86. package/dist/cjs/test/mocks.d.ts +6 -1
  87. package/dist/cjs/test/mocks.js +31 -6
  88. package/dist/cjs/viem.d.ts +361 -1
  89. package/dist/cjs/viem.js +14 -1
  90. package/dist/esm/advancedacl/session-key.d.ts +5 -5
  91. package/dist/esm/advancedacl/session-key.js +33 -9
  92. package/dist/esm/attestedcompute/attested-compute.d.ts +1 -2
  93. package/dist/esm/attestedcompute/attested-compute.js +13 -5
  94. package/dist/esm/attesteddecrypt/attested-decrypt.d.ts +5 -43
  95. package/dist/esm/attesteddecrypt/attested-decrypt.js +34 -96
  96. package/dist/esm/attestedreveal/attested-reveal.d.ts +21 -0
  97. package/dist/esm/attestedreveal/attested-reveal.js +28 -0
  98. package/dist/esm/attestedreveal/index.d.ts +2 -0
  99. package/dist/esm/attestedreveal/index.js +3 -0
  100. package/dist/esm/attestedreveal/types.d.ts +4 -0
  101. package/dist/esm/attestedreveal/types.js +9 -0
  102. package/dist/esm/binary.d.ts +82 -0
  103. package/dist/esm/binary.js +87 -5
  104. package/dist/esm/chain.d.ts +29 -4
  105. package/dist/esm/chain.js +33 -5
  106. package/dist/esm/eip712/eip712.d.ts +18 -0
  107. package/dist/esm/eip712/eip712.js +46 -0
  108. package/dist/esm/eip712/index.d.ts +1 -0
  109. package/dist/esm/eip712/index.js +2 -0
  110. package/dist/esm/elistattesteddecrypt/elist-attested-decrypt.d.ts +49 -0
  111. package/dist/esm/elistattesteddecrypt/elist-attested-decrypt.js +89 -0
  112. package/dist/esm/elistattesteddecrypt/index.d.ts +2 -0
  113. package/dist/esm/elistattesteddecrypt/index.js +3 -0
  114. package/dist/esm/elistattesteddecrypt/types.d.ts +31 -0
  115. package/dist/esm/elistattesteddecrypt/types.js +12 -0
  116. package/dist/esm/encryption/encryption.d.ts +115 -0
  117. package/dist/esm/encryption/encryption.js +98 -7
  118. package/dist/esm/encryption/index.d.ts +1 -1
  119. package/dist/esm/encryption/index.js +2 -2
  120. package/dist/esm/generated/abis/lightning.d.ts +1119 -107
  121. package/dist/esm/generated/abis/lightning.js +761 -51
  122. package/dist/esm/generated/abis/test-elist.d.ts +20 -2
  123. package/dist/esm/generated/abis/test-elist.js +16 -3
  124. package/dist/esm/generated/abis/verifier.d.ts +118 -15
  125. package/dist/esm/generated/abis/verifier.js +71 -19
  126. package/dist/esm/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +23 -37
  127. package/dist/esm/generated/es/inco/covalidator/compute/v1/server_pb.js +35 -40
  128. package/dist/esm/generated/es/inco/covalidator/compute/v1/types_pb.js +1 -1
  129. package/dist/esm/generated/es/inco/helioswrapper/v1/helioswrapper_pb.js +1 -1
  130. package/dist/esm/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +16 -0
  131. package/dist/esm/generated/es/inco/kms/lite/v1/kms_service_pb.js +3 -3
  132. package/dist/esm/generated/es/inco/kms/lite/v1/types_pb.js +1 -1
  133. package/dist/esm/generated/es/inco/sealingfetcher/v1/sealingfetcher_pb.d.ts +7 -0
  134. package/dist/esm/generated/es/inco/sealingfetcher/v1/sealingfetcher_pb.js +3 -3
  135. package/dist/esm/generated/lightning.d.ts +150 -0
  136. package/dist/esm/generated/lightning.js +157 -1
  137. package/dist/esm/generated/local-node.d.ts +9 -9
  138. package/dist/esm/generated/local-node.js +37 -10
  139. package/dist/esm/handle.d.ts +72 -0
  140. package/dist/esm/handle.js +110 -8
  141. package/dist/esm/index.d.ts +1 -1
  142. package/dist/esm/index.js +2 -2
  143. package/dist/esm/kms/client.d.ts +1 -1
  144. package/dist/esm/kms/client.js +3 -2
  145. package/dist/esm/kms/quorumClient.d.ts +18 -12
  146. package/dist/esm/kms/quorumClient.js +213 -232
  147. package/dist/esm/kms/quorumConsistency.d.ts +82 -0
  148. package/dist/esm/kms/quorumConsistency.js +260 -0
  149. package/dist/esm/kms/signatureVerification.d.ts +35 -0
  150. package/dist/esm/kms/signatureVerification.js +84 -0
  151. package/dist/esm/kms/thresholdPromises.d.ts +4 -3
  152. package/dist/esm/kms/thresholdPromises.js +25 -15
  153. package/dist/esm/lite/attested-compute.d.ts +2 -2
  154. package/dist/esm/lite/attested-compute.js +3 -3
  155. package/dist/esm/lite/attested-decrypt.d.ts +2 -2
  156. package/dist/esm/lite/attested-decrypt.js +3 -3
  157. package/dist/esm/lite/hadu.d.ts +1 -1
  158. package/dist/esm/lite/hadu.js +2 -2
  159. package/dist/esm/lite/index.d.ts +6 -2
  160. package/dist/esm/lite/index.js +5 -3
  161. package/dist/esm/lite/lightning.d.ts +96 -47
  162. package/dist/esm/lite/lightning.js +217 -263
  163. package/dist/esm/lite/types.d.ts +47 -0
  164. package/dist/esm/lite/types.js +2 -0
  165. package/dist/esm/lite/xwing.d.ts +33 -2
  166. package/dist/esm/lite/xwing.js +59 -7
  167. package/dist/esm/local/local-node.d.ts +18 -0
  168. package/dist/esm/local/local-node.js +18 -3
  169. package/dist/esm/reencryption/eip712.d.ts +27 -0
  170. package/dist/esm/reencryption/eip712.js +20 -7
  171. package/dist/esm/reencryption/types.d.ts +24 -0
  172. package/dist/esm/retry.d.ts +14 -0
  173. package/dist/esm/retry.js +56 -2
  174. package/dist/esm/test/mocks.d.ts +6 -1
  175. package/dist/esm/test/mocks.js +31 -8
  176. package/dist/esm/viem.d.ts +361 -1
  177. package/dist/esm/viem.js +15 -2
  178. package/dist/types/advancedacl/session-key.d.ts +5 -5
  179. package/dist/types/attestedcompute/attested-compute.d.ts +1 -2
  180. package/dist/types/attesteddecrypt/attested-decrypt.d.ts +5 -43
  181. package/dist/types/attestedreveal/attested-reveal.d.ts +21 -0
  182. package/dist/types/attestedreveal/index.d.ts +2 -0
  183. package/dist/types/attestedreveal/types.d.ts +4 -0
  184. package/dist/types/binary.d.ts +82 -0
  185. package/dist/types/chain.d.ts +29 -4
  186. package/dist/types/eip712/eip712.d.ts +18 -0
  187. package/dist/types/eip712/index.d.ts +1 -0
  188. package/dist/types/elistattesteddecrypt/elist-attested-decrypt.d.ts +49 -0
  189. package/dist/types/elistattesteddecrypt/index.d.ts +2 -0
  190. package/dist/types/elistattesteddecrypt/types.d.ts +31 -0
  191. package/dist/types/encryption/encryption.d.ts +115 -0
  192. package/dist/types/encryption/index.d.ts +1 -1
  193. package/dist/types/generated/abis/lightning.d.ts +1119 -107
  194. package/dist/types/generated/abis/test-elist.d.ts +20 -2
  195. package/dist/types/generated/abis/verifier.d.ts +118 -15
  196. package/dist/types/generated/es/inco/covalidator/compute/v1/server_pb.d.ts +23 -37
  197. package/dist/types/generated/es/inco/kms/lite/v1/kms_service_pb.d.ts +16 -0
  198. package/dist/types/generated/es/inco/sealingfetcher/v1/sealingfetcher_pb.d.ts +7 -0
  199. package/dist/types/generated/lightning.d.ts +150 -0
  200. package/dist/types/generated/local-node.d.ts +9 -9
  201. package/dist/types/handle.d.ts +72 -0
  202. package/dist/types/index.d.ts +1 -1
  203. package/dist/types/kms/client.d.ts +1 -1
  204. package/dist/types/kms/quorumClient.d.ts +18 -12
  205. package/dist/types/kms/quorumConsistency.d.ts +82 -0
  206. package/dist/types/kms/signatureVerification.d.ts +35 -0
  207. package/dist/types/kms/thresholdPromises.d.ts +4 -3
  208. package/dist/types/lite/attested-compute.d.ts +2 -2
  209. package/dist/types/lite/attested-decrypt.d.ts +2 -2
  210. package/dist/types/lite/hadu.d.ts +1 -1
  211. package/dist/types/lite/index.d.ts +6 -2
  212. package/dist/types/lite/lightning.d.ts +96 -47
  213. package/dist/types/lite/types.d.ts +47 -0
  214. package/dist/types/lite/xwing.d.ts +33 -2
  215. package/dist/types/local/local-node.d.ts +18 -0
  216. package/dist/types/reencryption/eip712.d.ts +27 -0
  217. package/dist/types/reencryption/types.d.ts +24 -0
  218. package/dist/types/retry.d.ts +14 -0
  219. package/dist/types/test/mocks.d.ts +6 -1
  220. package/dist/types/viem.d.ts +361 -1
  221. package/package.json +19 -21
  222. package/dist/cjs/generated/abis/lightning-preview.d.ts +0 -1385
  223. package/dist/cjs/generated/abis/lightning-preview.js +0 -857
  224. package/dist/esm/generated/abis/lightning-preview.d.ts +0 -1385
  225. package/dist/esm/generated/abis/lightning-preview.js +0 -854
  226. package/dist/types/generated/abis/lightning-preview.d.ts +0 -1385
@@ -1,22 +1,104 @@
1
1
  import { Schema } from 'effect';
2
2
  import { Hex } from 'viem';
3
+ /** Schema for a `0x`-prefixed hex string. */
3
4
  export declare const HexString: Schema.TemplateLiteral<`0x${string}`>;
5
+ /** A `0x`-prefixed hex-encoded string (e.g. `"0xdeadbeef"`). */
4
6
  export type HexString = typeof HexString.Type;
7
+ /** A value that can represent raw bytes — either a hex string or a `Uint8Array`. */
5
8
  export type BytesIsh = string | Uint8Array;
9
+ /**
10
+ * Converts a `Uint8Array` to a `bigint`. Returns `0n` for empty arrays.
11
+ * @param byteArray - The byte array to convert.
12
+ * @returns The unsigned big-endian integer representation of the bytes.
13
+ */
6
14
  export declare function bytesToBigInt(byteArray: Uint8Array): bigint;
15
+ /**
16
+ * Converts a `Buffer` to a `bigint`.
17
+ * @param buffer - The buffer to convert.
18
+ * @returns The unsigned big-endian integer representation of the buffer.
19
+ */
7
20
  export declare function bufferToBigInt(buffer: Buffer): bigint;
21
+ /**
22
+ * Converts a `bigint` to a 32-byte `Buffer`, zero-padded on the left.
23
+ * @param value - The bigint to convert.
24
+ * @returns A 32-byte big-endian buffer.
25
+ * @throws If the bigint is negative or too large to fit in 32 bytes.
26
+ */
8
27
  export declare function bigintToBytes(value: bigint): Buffer;
28
+ /**
29
+ * Converts a `bigint` to a {@link Bytes32} hex string, left-padded to 32 bytes.
30
+ * @param value - The bigint to convert.
31
+ * @returns A `Bytes32` hex string.
32
+ * @throws If the bigint is negative or too large to fit in 32 bytes.
33
+ */
9
34
  export declare function bigintToBytes32(value: bigint): Bytes32;
35
+ /**
36
+ * Left-pads a byte array with zeros to the specified length.
37
+ * @param bs - The byte array to pad.
38
+ * @param n - The desired total length in bytes.
39
+ * @returns A new `Buffer` of length `n` with `bs` right-aligned.
40
+ * @throws If `bs` is longer than `n` (would require truncation).
41
+ */
10
42
  export declare function padLeft(bs: Uint8Array, n: number): Buffer;
43
+ /**
44
+ * Parses a {@link BytesIsh} value as a 32-byte value and converts it to a `bigint`.
45
+ * @param bs - A hex string or `Uint8Array` representing exactly 32 bytes.
46
+ * @returns The `bigint` representation of the 32-byte value.
47
+ * @throws If the input is not exactly 32 bytes.
48
+ */
11
49
  export declare function bytes32ToBigint(bs: BytesIsh): bigint;
50
+ /**
51
+ * Decodes a hex string into a `Buffer`. Handles both `0x`-prefixed and bare hex strings.
52
+ * @param hexString - The hex string to decode.
53
+ * @returns A `Buffer` containing the decoded bytes.
54
+ */
12
55
  export declare function bytesFromHexString(hexString: string): Buffer;
56
+ /**
57
+ * Asserts that a string is a valid `0x`-prefixed hex string and narrows its type to `Hex`.
58
+ * @param value - The string to validate.
59
+ * @returns The input typed as `Hex`.
60
+ * @throws If `value` is not a valid hex string.
61
+ */
13
62
  export declare function mustBeHex(value: string): Hex;
63
+ /**
64
+ * Normalises a string to a `0x`-prefixed `Hex` value, adding the prefix if missing.
65
+ * @param value - A hex string, with or without a `0x` prefix.
66
+ * @returns The `0x`-prefixed `Hex` string.
67
+ * @throws If the resulting string is not valid hex.
68
+ */
14
69
  export declare function normaliseToHex(value: string): Hex;
70
+ /**
71
+ * Encodes a `Uint8Array` as a `0x`-prefixed hex string.
72
+ * @param bs - The byte array to encode.
73
+ * @returns A `Hex` string representation of the bytes.
74
+ */
15
75
  export declare function bytesToHex(bs: Uint8Array): Hex;
76
+ /** Schema for a 32-byte (66-character with `0x` prefix) hex string, branded as `Bytes32`. Accepts both hex strings and `Uint8Array` inputs. */
16
77
  export declare const Bytes32: Schema.brand<Schema.filter<Schema.transformOrFail<Schema.Union<[typeof Schema.String, Schema.refine<object & Uint8Array<ArrayBufferLike>, Schema.Schema<object, object, never>>]>, Schema.TemplateLiteral<`0x${string}`>, never>>, "Bytes32">;
78
+ /**
79
+ * Parses and validates a {@link BytesIsh} value as a {@link Bytes32}.
80
+ * @param x - A hex string or `Uint8Array` to parse.
81
+ * @returns A validated `Bytes32` value.
82
+ * @throws If the input is not exactly 32 bytes.
83
+ */
17
84
  export declare function asBytes32(x: BytesIsh): Bytes32;
85
+ /** A branded 32-byte hex string type (`0x` + 64 hex characters). */
18
86
  export type Bytes32 = typeof Bytes32.Type;
87
+ /** A branded 20-byte Ethereum address type (`0x` + 40 hex characters). */
19
88
  export type Address = typeof Address.Type;
89
+ /** Schema for a 20-byte `0x`-prefixed Ethereum address, branded as `Address`. */
20
90
  export declare const Address: Schema.brand<Schema.filter<Schema.TemplateLiteral<`0x${string}`>>, "Address">;
91
+ /**
92
+ * Parses and validates a string as an Ethereum {@link Address} (20-byte, `0x`-prefixed).
93
+ * @param address - The string to parse.
94
+ * @returns A validated `Address` value.
95
+ * @throws If the input is not a valid 20-byte hex address.
96
+ */
21
97
  export declare function parseAddress(address: string): Address;
98
+ /**
99
+ * Parses and validates a string as a {@link HexString} (`0x`-prefixed).
100
+ * @param hex - The string to parse.
101
+ * @returns A validated `HexString` value.
102
+ * @throws If the input is not a valid `0x`-prefixed hex string.
103
+ */
22
104
  export declare function parseHex(hex: string): HexString;
@@ -1,25 +1,59 @@
1
1
  import { ParseResult, Schema } from 'effect';
2
2
  import { isHex } from 'viem';
3
3
  import { parse } from './schema.js';
4
+ /** Schema for a `0x`-prefixed hex string. */
4
5
  export const HexString = Schema.TemplateLiteral('0x', Schema.String);
6
+ /**
7
+ * Converts a `Uint8Array` to a `bigint`. Returns `0n` for empty arrays.
8
+ * @param byteArray - The byte array to convert.
9
+ * @returns The unsigned big-endian integer representation of the bytes.
10
+ */
5
11
  export function bytesToBigInt(byteArray) {
6
12
  // Ugly but better than bigint-buffer that insists on writing junk to stderr if it doesn't have native bindings
7
13
  return !byteArray?.length
8
14
  ? BigInt(0)
9
15
  : BigInt('0x' + Buffer.from(byteArray).toString('hex'));
10
16
  }
17
+ /**
18
+ * Converts a `Buffer` to a `bigint`.
19
+ * @param buffer - The buffer to convert.
20
+ * @returns The unsigned big-endian integer representation of the buffer.
21
+ */
11
22
  export function bufferToBigInt(buffer) {
12
23
  return bytesToBigInt(Uint8Array.from(buffer));
13
24
  }
25
+ /**
26
+ * Converts a `bigint` to a 32-byte `Buffer`, zero-padded on the left.
27
+ * @param value - The bigint to convert.
28
+ * @returns A 32-byte big-endian buffer.
29
+ * @throws If the bigint is negative or too large to fit in 32 bytes.
30
+ */
14
31
  export function bigintToBytes(value) {
15
- return Buffer.from(value.toString(16).padStart(64, '0'), 'hex');
32
+ if (value < 0n) {
33
+ throw new Error(`bigintToBytes: value must be non-negative`);
34
+ }
35
+ const hex = value.toString(16);
36
+ if (hex.length > 64) {
37
+ throw new Error(`bigintToBytes: value too large for 32 bytes`);
38
+ }
39
+ return Buffer.from(hex.padStart(64, '0'), 'hex');
16
40
  }
17
- // Convert a bigint to a 32-byte array, left-padded if necessary. Note: it is
18
- // caller's responsibility to ensure that the bigint is not too large to fit in
19
- // 32 bytes, or else the result will be truncated.
41
+ /**
42
+ * Converts a `bigint` to a {@link Bytes32} hex string, left-padded to 32 bytes.
43
+ * @param value - The bigint to convert.
44
+ * @returns A `Bytes32` hex string.
45
+ * @throws If the bigint is negative or too large to fit in 32 bytes.
46
+ */
20
47
  export function bigintToBytes32(value) {
21
48
  return parse(Bytes32, bigintToBytes(value).toString('hex'));
22
49
  }
50
+ /**
51
+ * Left-pads a byte array with zeros to the specified length.
52
+ * @param bs - The byte array to pad.
53
+ * @param n - The desired total length in bytes.
54
+ * @returns A new `Buffer` of length `n` with `bs` right-aligned.
55
+ * @throws If `bs` is longer than `n` (would require truncation).
56
+ */
23
57
  export function padLeft(bs, n) {
24
58
  if (bs.length > n) {
25
59
  throw new Error(`Cannot pad ${bs.length} bytes to ${n} - would truncate`);
@@ -28,22 +62,50 @@ export function padLeft(bs, n) {
28
62
  buf.set(bs, n - bs.length);
29
63
  return buf;
30
64
  }
65
+ /**
66
+ * Parses a {@link BytesIsh} value as a 32-byte value and converts it to a `bigint`.
67
+ * @param bs - A hex string or `Uint8Array` representing exactly 32 bytes.
68
+ * @returns The `bigint` representation of the 32-byte value.
69
+ * @throws If the input is not exactly 32 bytes.
70
+ */
31
71
  export function bytes32ToBigint(bs) {
32
72
  const bytes32 = asBytes32(bs);
33
73
  return BigInt(bytes32);
34
74
  }
75
+ /**
76
+ * Decodes a hex string into a `Buffer`. Handles both `0x`-prefixed and bare hex strings.
77
+ * @param hexString - The hex string to decode.
78
+ * @returns A `Buffer` containing the decoded bytes.
79
+ */
35
80
  export function bytesFromHexString(hexString) {
36
81
  return Buffer.from(hexString.startsWith('0x') ? hexString.slice(2) : hexString, 'hex');
37
82
  }
83
+ /**
84
+ * Asserts that a string is a valid `0x`-prefixed hex string and narrows its type to `Hex`.
85
+ * @param value - The string to validate.
86
+ * @returns The input typed as `Hex`.
87
+ * @throws If `value` is not a valid hex string.
88
+ */
38
89
  export function mustBeHex(value) {
39
90
  if (!isHex(value)) {
40
91
  throw new Error(`Expected hex string, got: ${value}`);
41
92
  }
42
93
  return value;
43
94
  }
95
+ /**
96
+ * Normalises a string to a `0x`-prefixed `Hex` value, adding the prefix if missing.
97
+ * @param value - A hex string, with or without a `0x` prefix.
98
+ * @returns The `0x`-prefixed `Hex` string.
99
+ * @throws If the resulting string is not valid hex.
100
+ */
44
101
  export function normaliseToHex(value) {
45
102
  return mustBeHex(value.startsWith('0x') ? value : `0x${value}`);
46
103
  }
104
+ /**
105
+ * Encodes a `Uint8Array` as a `0x`-prefixed hex string.
106
+ * @param bs - The byte array to encode.
107
+ * @returns A `Hex` string representation of the bytes.
108
+ */
47
109
  export function bytesToHex(bs) {
48
110
  return ('0x' + Buffer.from(bs).toString('hex'));
49
111
  }
@@ -57,17 +119,37 @@ const BytesToHex = Schema.transformOrFail(Schema.Union(Schema.String, ByteArray)
57
119
  ? ParseResult.succeed(y)
58
120
  : ParseResult.fail(new ParseResult.Unexpected(y, `'${y}' is not a hex string`)))(normaliseToHex(x)),
59
121
  });
122
+ /** Schema for a 32-byte (66-character with `0x` prefix) hex string, branded as `Bytes32`. Accepts both hex strings and `Uint8Array` inputs. */
60
123
  export const Bytes32 = BytesToHex.pipe(Schema.filter((x) => x.length === 66 ||
61
124
  `Expected 32-byte hex string (66 characters with 0x prefix) but got ${x.length} character string`), Schema.brand('Bytes32'));
125
+ /**
126
+ * Parses and validates a {@link BytesIsh} value as a {@link Bytes32}.
127
+ * @param x - A hex string or `Uint8Array` to parse.
128
+ * @returns A validated `Bytes32` value.
129
+ * @throws If the input is not exactly 32 bytes.
130
+ */
62
131
  export function asBytes32(x) {
63
132
  return parse(Bytes32, x);
64
133
  }
134
+ /** Schema for a 20-byte `0x`-prefixed Ethereum address, branded as `Address`. */
65
135
  export const Address = HexString.pipe(Schema.filter((s) => s.length === 42 ||
66
136
  `Address must be a 20-byte '0x'-prefixed hex string, but got: ${s}`), Schema.brand('Address'));
137
+ /**
138
+ * Parses and validates a string as an Ethereum {@link Address} (20-byte, `0x`-prefixed).
139
+ * @param address - The string to parse.
140
+ * @returns A validated `Address` value.
141
+ * @throws If the input is not a valid 20-byte hex address.
142
+ */
67
143
  export function parseAddress(address) {
68
144
  return parse(Address, address);
69
145
  }
146
+ /**
147
+ * Parses and validates a string as a {@link HexString} (`0x`-prefixed).
148
+ * @param hex - The string to parse.
149
+ * @returns A validated `HexString` value.
150
+ * @throws If the input is not a valid `0x`-prefixed hex string.
151
+ */
70
152
  export function parseHex(hex) {
71
153
  return parse(HexString, hex);
72
154
  }
73
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluYXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2JpbmFyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUM3QyxPQUFPLEVBQU8sS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFcEMsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQU1yRSxNQUFNLFVBQVUsYUFBYSxDQUFDLFNBQXFCO0lBQ2pELCtHQUErRztJQUMvRyxPQUFPLENBQUMsU0FBUyxFQUFFLE1BQU07UUFDdkIsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFDWCxDQUFDLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQzVELENBQUM7QUFFRCxNQUFNLFVBQVUsY0FBYyxDQUFDLE1BQWM7SUFDM0MsT0FBTyxhQUFhLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFFRCxNQUFNLFVBQVUsYUFBYSxDQUFDLEtBQWE7SUFDekMsT0FBTyxNQUFNLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxHQUFHLENBQUMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNsRSxDQUFDO0FBRUQsNkVBQTZFO0FBQzdFLCtFQUErRTtBQUMvRSxrREFBa0Q7QUFDbEQsTUFBTSxVQUFVLGVBQWUsQ0FBQyxLQUFhO0lBQzNDLE9BQU8sS0FBSyxDQUFDLE9BQU8s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
155
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmluYXJ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2JpbmFyeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxNQUFNLFFBQVEsQ0FBQztBQUM3QyxPQUFPLEVBQU8sS0FBSyxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFBRSxLQUFLLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFcEMsNkNBQTZDO0FBQzdDLE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxNQUFNLENBQUMsZUFBZSxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7QUFRckU7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQUMsU0FBcUI7SUFDakQsK0dBQStHO0lBQy9HLE9BQU8sQ0FBQyxTQUFTLEVBQUUsTUFBTTtRQUN2QixDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUNYLENBQUMsQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDNUQsQ0FBQztBQUVEOzs7O0dBSUc7QUFDSCxNQUFNLFVBQVUsY0FBYyxDQUFDLE1BQWM7SUFDM0MsT0FBTyxhQUFhLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ2hELENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxhQUFhLENBQUMsS0FBYTtJQUN6QyxJQUFJLEtBQUssR0FBRyxFQUFFLEVBQUUsQ0FBQztRQUNmLE1BQU0sSUFBSSxLQUFLLENBQUMsMkNBQTJDLENBQUMsQ0FBQztJQUMvRCxDQUFDO0lBQ0QsTUFBTSxHQUFHLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUMvQixJQUFJLEdBQUcsQ0FBQyxNQUFNLEdBQUcsRUFBRSxFQUFFLENBQUM7UUFDcEIsTUFBTSxJQUFJLEtBQUssQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO0lBQ2pFLENBQUM7SUFDRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbkQsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBQyxLQUFhO0lBQzNDLE9BQU8sS0FBSyxDQUFDLE9BQU8sRUFBRSxhQUFhLENBQUMsS0FBSyxDQUFDLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDOUQsQ0FBQztBQUVEOzs7Ozs7R0FNRztBQUNILE1BQU0sVUFBVSxPQUFPLENBQUMsRUFBYyxFQUFFLENBQVM7SUFDL0MsSUFBSSxFQUFFLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQUMsY0FBYyxFQUFFLENBQUMsTUFBTSxhQUFhLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUM1RSxDQUFDO0lBQ0QsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUM1QixHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzNCLE9BQU8sR0FBRyxDQUFDO0FBQ2IsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGVBQWUsQ0FBQyxFQUFZO0lBQzFDLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxFQUFFLENBQUMsQ0FBQztJQUM5QixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN6QixDQUFDO0FBRUQ7Ozs7R0FJRztBQUNILE1BQU0sVUFBVSxrQkFBa0IsQ0FBQyxTQUFpQjtJQUNsRCxPQUFPLE1BQU0sQ0FBQyxJQUFJLENBQ2hCLFNBQVMsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFDM0QsS0FBSyxDQUNOLENBQUM7QUFDSixDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLEtBQWE7SUFDckMsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ2xCLE1BQU0sSUFBSSxLQUFLLENBQUMsNkJBQTZCLEtBQUssRUFBRSxDQUFDLENBQUM7SUFDeEQsQ0FBQztJQUNELE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxLQUFhO0lBQzFDLE9BQU8sU0FBUyxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQ2xFLENBQUM7QUFFRDs7OztHQUlHO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FBQyxFQUFjO0lBQ3ZDLE9BQU8sQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQVEsQ0FBQztBQUN6RCxDQUFDO0FBRUQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQ2xDLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsWUFBWSxVQUFVLENBQUMsQ0FDOUMsQ0FBQztBQUVGLE1BQU0sVUFBVSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQ3ZDLE1BQU0sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsRUFDdEMsU0FBUyxFQUNUO0lBQ0UsTUFBTSxFQUFFLElBQUk7SUFDWixNQUFNLEVBQUUsV0FBVyxDQUFDLE9BQU87SUFDM0IsTUFBTSxFQUFFLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FDWixDQUFDLFlBQVksVUFBVTtRQUNyQixDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFTLEVBQUUsRUFBRSxDQUNiLEtBQUssQ0FBQyxDQUFDLENBQUM7WUFDTixDQUFDLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUM7WUFDeEIsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQ2QsSUFBSSxXQUFXLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FDNUQsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFXLENBQUMsQ0FBQztDQUM1QyxDQUNGLENBQUM7QUFFRiwrSUFBK0k7QUFDL0ksTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLFVBQVUsQ0FBQyxJQUFJLENBQ3BDLE1BQU0sQ0FBQyxNQUFNLENBQ1gsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNKLENBQUMsQ0FBQyxNQUFNLEtBQUssRUFBRTtJQUNmLHNFQUFzRSxDQUFDLENBQUMsTUFBTSxtQkFBbUIsQ0FDcEcsRUFDRCxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUN4QixDQUFDO0FBRUY7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsU0FBUyxDQUFDLENBQVc7SUFDbkMsT0FBTyxLQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzNCLENBQUM7QUFRRCxpRkFBaUY7QUFDakYsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLFNBQVMsQ0FBQyxJQUFJLENBQ25DLE1BQU0sQ0FBQyxNQUFNLENBQ1gsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUNKLENBQUMsQ0FBQyxNQUFNLEtBQUssRUFBRTtJQUNmLGdFQUFnRSxDQUFDLEVBQUUsQ0FDdEUsRUFDRCxNQUFNLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxDQUN4QixDQUFDO0FBRUY7Ozs7O0dBS0c7QUFDSCxNQUFNLFVBQVUsWUFBWSxDQUFDLE9BQWU7SUFDMUMsT0FBTyxLQUFLLENBQUMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxDQUFDO0FBQ2pDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNILE1BQU0sVUFBVSxRQUFRLENBQUMsR0FBVztJQUNsQyxPQUFPLEtBQUssQ0FBQyxTQUFTLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDL0IsQ0FBQyJ9
@@ -1,4 +1,12 @@
1
+ /**
2
+ * Map of supported chain short names to their chain IDs.
3
+ *
4
+ * @remarks This mirrors viem chain definitions without depending on viem directly,
5
+ * to work around Pulumi closure serialisation issues.
6
+ */
1
7
  export declare const supportedChains: {
8
+ readonly mainnet: 1;
9
+ readonly base: 8453;
2
10
  readonly baseSepolia: 84532;
3
11
  readonly sepolia: 11155111;
4
12
  readonly monadTestnet: 10143;
@@ -6,20 +14,37 @@ export declare const supportedChains: {
6
14
  readonly worldchainSepolia: 4801;
7
15
  readonly anvil: 31337;
8
16
  };
9
- export declare const fheSupportedChains: {
10
- readonly baseSepolia: 84532;
11
- readonly sepolia: 11155111;
12
- };
13
17
  type SupportedChains = typeof supportedChains;
18
+ /** Numeric chain ID of a supported chain (e.g. `84532`, `11155111`). */
14
19
  export type SupportedChainId = SupportedChains[keyof SupportedChains];
20
+ /** Short name of a supported chain (e.g. `"baseSepolia"`, `"sepolia"`). */
15
21
  export type SupportedChainName = keyof SupportedChains;
22
+ /** A supported chain identified by both its short name and numeric ID. */
16
23
  export type SupportedChain = {
17
24
  name: SupportedChainName;
18
25
  id: SupportedChainId;
19
26
  };
27
+ /** A value that can represent a number — either a `number` or a `bigint`. */
20
28
  export type Numberish = number | bigint;
29
+ /** A flexible chain identifier: a chain ID (`number` | `bigint`), an object with an `id` field, or a chain short name. */
21
30
  export type Chainish = {
22
31
  id: Numberish;
23
32
  } | Numberish | string;
33
+ /**
34
+ * Map of supported chain IDs to their short names.
35
+ * Public networks use the `shortName` from https://github.com/ethereum-lists/chains.
36
+ * Local Anvil uses `31337` (same ID as GoChain Testnet in the registry) but the SDK labels it `anvil`.
37
+ */
38
+ export declare const chainShortNames: Record<SupportedChainId, string>;
39
+ /**
40
+ * Resolves a {@link Chainish} value to a {@link SupportedChain}.
41
+ *
42
+ * Accepts a chain ID (`number` or `bigint`), an object with an `id` field,
43
+ * or a chain short name (e.g. `"baseSepolia"`).
44
+ *
45
+ * @param chainish - The chain identifier to resolve.
46
+ * @returns The matching `SupportedChain` with both `name` and `id`.
47
+ * @throws If no supported chain matches the given identifier.
48
+ */
24
49
  export declare function getSupportedChain(chainish: Chainish): SupportedChain;
25
50
  export {};
package/dist/esm/chain.js CHANGED
@@ -2,7 +2,15 @@
2
2
  // This file can be seen as mirroring the functionality of viem changes without depending on it directly.
3
3
  // It exists as a workaround for some very gnarly issues with code reuse between Pulumi and this module, partly
4
4
  // relating to modules but also linked to Pulumi's ability to capture closures and serialise them.
5
+ /**
6
+ * Map of supported chain short names to their chain IDs.
7
+ *
8
+ * @remarks This mirrors viem chain definitions without depending on viem directly,
9
+ * to work around Pulumi closure serialisation issues.
10
+ */
5
11
  export const supportedChains = {
12
+ mainnet: 1,
13
+ base: 8453,
6
14
  baseSepolia: 84532,
7
15
  sepolia: 11155111,
8
16
  monadTestnet: 10143,
@@ -10,11 +18,31 @@ export const supportedChains = {
10
18
  worldchainSepolia: 4801,
11
19
  anvil: 31337,
12
20
  };
13
- export const fheSupportedChains = {
14
- baseSepolia: 84532,
15
- sepolia: 11155111,
21
+ /**
22
+ * Map of supported chain IDs to their short names.
23
+ * Public networks use the `shortName` from https://github.com/ethereum-lists/chains.
24
+ * Local Anvil uses `31337` (same ID as GoChain Testnet in the registry) but the SDK labels it `anvil`.
25
+ */
26
+ export const chainShortNames = {
27
+ [supportedChains.mainnet]: 'eth',
28
+ [supportedChains.base]: 'base',
29
+ [supportedChains.baseSepolia]: 'basesep',
30
+ [supportedChains.sepolia]: 'sep',
31
+ [supportedChains.monadTestnet]: 'mon-testnet',
32
+ [supportedChains.plasmaTestnet]: 'plasma-testnet',
33
+ [supportedChains.worldchainSepolia]: 'wcsep',
34
+ [supportedChains.anvil]: 'anvil',
16
35
  };
17
- // Get supportedChain either by its chain ID or the short name (lower pascal case)
36
+ /**
37
+ * Resolves a {@link Chainish} value to a {@link SupportedChain}.
38
+ *
39
+ * Accepts a chain ID (`number` or `bigint`), an object with an `id` field,
40
+ * or a chain short name (e.g. `"baseSepolia"`).
41
+ *
42
+ * @param chainish - The chain identifier to resolve.
43
+ * @returns The matching `SupportedChain` with both `name` and `id`.
44
+ * @throws If no supported chain matches the given identifier.
45
+ */
18
46
  export function getSupportedChain(chainish) {
19
47
  const found = typeof chainish === 'number' || typeof chainish === 'bigint'
20
48
  ? Object.entries(supportedChains).find(([, id]) => id === Number(chainish))
@@ -27,4 +55,4 @@ export function getSupportedChain(chainish) {
27
55
  const [name, id] = found;
28
56
  return { name: name, id };
29
57
  }
30
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2hhaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUZBQW1GO0FBRW5GLHlHQUF5RztBQUN6RywrR0FBK0c7QUFDL0csa0dBQWtHO0FBRWxHLE1BQU0sQ0FBQyxNQUFNLGVBQWUsR0FBRztJQUM3QixXQUFXLEVBQUUsS0FBSztJQUNsQixPQUFPLEVBQUUsUUFBUTtJQUNqQixZQUFZLEVBQUUsS0FBSztJQUNuQixhQUFhLEVBQUUsSUFBSTtJQUNuQixpQkFBaUIsRUFBRSxJQUFJO0lBQ3ZCLEtBQUssRUFBRSxLQUFLO0NBQ0osQ0FBQztBQUVYLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHO0lBQ2hDLFdBQVcsRUFBRSxLQUFLO0lBQ2xCLE9BQU8sRUFBRSxRQUFRO0NBQ1QsQ0FBQztBQWNYLGtGQUFrRjtBQUNsRixNQUFNLFVBQVUsaUJBQWlCLENBQUMsUUFBa0I7SUFDbEQsTUFBTSxLQUFLLEdBQ1QsT0FBTyxRQUFRLEtBQUssUUFBUSxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVE7UUFDMUQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUNsQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FDcEM7UUFDSCxDQUFDLENBQUMsT0FBTyxRQUFRLEtBQUssUUFBUTtZQUM1QixDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQ2xDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FDdkM7WUFDSCxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQ2xDLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsU0FBUyxLQUFLLFFBQVEsQ0FDeEMsQ0FBQztJQUNWLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLFFBQVEsWUFBWSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUNELE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBMEIsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRCxDQUFDIn0=
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2hhaW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY2hhaW4udHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsbUZBQW1GO0FBRW5GLHlHQUF5RztBQUN6RywrR0FBK0c7QUFDL0csa0dBQWtHO0FBRWxHOzs7OztHQUtHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFHO0lBQzdCLE9BQU8sRUFBRSxDQUFDO0lBQ1YsSUFBSSxFQUFFLElBQUk7SUFDVixXQUFXLEVBQUUsS0FBSztJQUNsQixPQUFPLEVBQUUsUUFBUTtJQUNqQixZQUFZLEVBQUUsS0FBSztJQUNuQixhQUFhLEVBQUUsSUFBSTtJQUNuQixpQkFBaUIsRUFBRSxJQUFJO0lBQ3ZCLEtBQUssRUFBRSxLQUFLO0NBQ0osQ0FBQztBQW1CWDs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sZUFBZSxHQUFxQztJQUMvRCxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLO0lBQ2hDLENBQUMsZUFBZSxDQUFDLElBQUksQ0FBQyxFQUFFLE1BQU07SUFDOUIsQ0FBQyxlQUFlLENBQUMsV0FBVyxDQUFDLEVBQUUsU0FBUztJQUN4QyxDQUFDLGVBQWUsQ0FBQyxPQUFPLENBQUMsRUFBRSxLQUFLO0lBQ2hDLENBQUMsZUFBZSxDQUFDLFlBQVksQ0FBQyxFQUFFLGFBQWE7SUFDN0MsQ0FBQyxlQUFlLENBQUMsYUFBYSxDQUFDLEVBQUUsZ0JBQWdCO0lBQ2pELENBQUMsZUFBZSxDQUFDLGlCQUFpQixDQUFDLEVBQUUsT0FBTztJQUM1QyxDQUFDLGVBQWUsQ0FBQyxLQUFLLENBQUMsRUFBRSxPQUFPO0NBQ2pDLENBQUM7QUFFRjs7Ozs7Ozs7O0dBU0c7QUFDSCxNQUFNLFVBQVUsaUJBQWlCLENBQUMsUUFBa0I7SUFDbEQsTUFBTSxLQUFLLEdBQ1QsT0FBTyxRQUFRLEtBQUssUUFBUSxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVE7UUFDMUQsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsZUFBZSxDQUFDLENBQUMsSUFBSSxDQUNsQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FDcEM7UUFDSCxDQUFDLENBQUMsT0FBTyxRQUFRLEtBQUssUUFBUTtZQUM1QixDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQ2xDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FDdkM7WUFDSCxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxlQUFlLENBQUMsQ0FBQyxJQUFJLENBQ2xDLENBQUMsQ0FBQyxTQUFTLENBQUMsRUFBRSxFQUFFLENBQUMsU0FBUyxLQUFLLFFBQVEsQ0FDeEMsQ0FBQztJQUNWLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQztRQUNYLE1BQU0sSUFBSSxLQUFLLENBQUMsbUJBQW1CLFFBQVEsWUFBWSxDQUFDLENBQUM7SUFDM0QsQ0FBQztJQUNELE1BQU0sQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDO0lBQ3pCLE9BQU8sRUFBRSxJQUFJLEVBQUUsSUFBMEIsRUFBRSxFQUFFLEVBQUUsQ0FBQztBQUNsRCxDQUFDIn0=
@@ -0,0 +1,18 @@
1
+ import type { Account, Chain, Transport, WalletClient } from 'viem';
2
+ import type { HexString } from '../binary.js';
3
+ import type { SupportedChainId } from '../chain.js';
4
+ import { ViemClient } from '../viem.js';
5
+ export declare function fetchEip712DomainVersion(executorAddress: HexString, ethClient: ViemClient): Promise<string>;
6
+ export declare function buildEip712Payload(params: {
7
+ executorAddress: HexString;
8
+ ethClient: ViemClient;
9
+ chainId: SupportedChainId;
10
+ handles: HexString[];
11
+ reencryptPubKey: Uint8Array;
12
+ }): Promise<import("../reencryption/eip712.js").EIP712<{
13
+ handles: `0x${string}`[];
14
+ publicKey: `0x${string}`;
15
+ }>>;
16
+ type WalletSignTypedDataParams = Parameters<WalletClient<Transport, Chain, Account>['signTypedData']>[0];
17
+ export declare function signEip712(walletClient: WalletClient<Transport, Chain, Account>, eip712Payload: WalletSignTypedDataParams): Promise<`0x${string}`>;
18
+ export {};
@@ -0,0 +1,46 @@
1
+ import { bytesToHex, getContract } from 'viem';
2
+ import { ATTESTED_DECRYPT_DOMAIN_NAME } from '../attesteddecrypt/attested-decrypt.js';
3
+ import { incoLightningAbi } from '../generated/abis/lightning.js';
4
+ import { incoVerifierAbi } from '../generated/abis/verifier.js';
5
+ import { createEIP712Payload } from '../reencryption/eip712.js';
6
+ // Fetches EIP712 domain version from on-chain verifier contract.
7
+ // This is needed to ensure the payload is signed with the correct domain version,
8
+ // which is required for the covalidator to verify the signature and process the request.
9
+ export async function fetchEip712DomainVersion(executorAddress, ethClient) {
10
+ let eip712DomainVersion;
11
+ const lightning = getContract({
12
+ address: executorAddress,
13
+ abi: incoLightningAbi,
14
+ client: ethClient,
15
+ });
16
+ const incoVerifierAddress = await lightning.read.incoVerifier();
17
+ const verifier = getContract({
18
+ address: incoVerifierAddress,
19
+ abi: incoVerifierAbi,
20
+ client: ethClient,
21
+ });
22
+ eip712DomainVersion = await verifier.read.getEIP712Version();
23
+ return eip712DomainVersion;
24
+ }
25
+ // Small helpers to make the main flow readable
26
+ export async function buildEip712Payload(params) {
27
+ const eip712DomainVersion = await fetchEip712DomainVersion(params.executorAddress, params.ethClient);
28
+ return createEIP712Payload({
29
+ chainId: BigInt(params.chainId),
30
+ primaryType: 'AttestedDecryptRequest',
31
+ primaryTypeFields: [
32
+ { name: 'handles', type: 'bytes32[]' },
33
+ { name: 'publicKey', type: 'bytes' },
34
+ ],
35
+ message: {
36
+ handles: params.handles,
37
+ publicKey: bytesToHex(params.reencryptPubKey),
38
+ },
39
+ domainName: ATTESTED_DECRYPT_DOMAIN_NAME,
40
+ domainVersion: eip712DomainVersion,
41
+ });
42
+ }
43
+ export function signEip712(walletClient, eip712Payload) {
44
+ return walletClient.signTypedData(eip712Payload);
45
+ }
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWlwNzEyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vc3JjL2VpcDcxMi9laXA3MTIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDL0MsT0FBTyxFQUFFLDRCQUE0QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFHdEYsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDbEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBR2hFLGlFQUFpRTtBQUNqRSxrRkFBa0Y7QUFDbEYseUZBQXlGO0FBQ3pGLE1BQU0sQ0FBQyxLQUFLLFVBQVUsd0JBQXdCLENBQzVDLGVBQTBCLEVBQzFCLFNBQXFCO0lBRXJCLElBQUksbUJBQTJCLENBQUM7SUFFaEMsTUFBTSxTQUFTLEdBQUcsV0FBVyxDQUFDO1FBQzVCLE9BQU8sRUFBRSxlQUFlO1FBQ3hCLEdBQUcsRUFBRSxnQkFBZ0I7UUFDckIsTUFBTSxFQUFFLFNBQVM7S0FDbEIsQ0FBQyxDQUFDO0lBRUgsTUFBTSxtQkFBbUIsR0FBRyxNQUFNLFNBQVMsQ0FBQyxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7SUFDaEUsTUFBTSxRQUFRLEdBQUcsV0FBVyxDQUFDO1FBQzNCLE9BQU8sRUFBRSxtQkFBbUI7UUFDNUIsR0FBRyxFQUFFLGVBQWU7UUFDcEIsTUFBTSxFQUFFLFNBQVM7S0FDbEIsQ0FBQyxDQUFDO0lBRUgsbUJBQW1CLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7SUFFN0QsT0FBTyxtQkFBbUIsQ0FBQztBQUM3QixDQUFDO0FBRUQsK0NBQStDO0FBQy9DLE1BQU0sQ0FBQyxLQUFLLFVBQVUsa0JBQWtCLENBQUMsTUFNeEM7SUFDQyxNQUFNLG1CQUFtQixHQUFHLE1BQU0sd0JBQXdCLENBQ3hELE1BQU0sQ0FBQyxlQUFlLEVBQ3RCLE1BQU0sQ0FBQyxTQUFTLENBQ2pCLENBQUM7SUFFRixPQUFPLG1CQUFtQixDQUFDO1FBQ3pCLE9BQU8sRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQztRQUMvQixXQUFXLEVBQUUsd0JBQXdCO1FBQ3JDLGlCQUFpQixFQUFFO1lBQ2pCLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFO1lBQ3RDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFO1NBQ3JDO1FBQ0QsT0FBTyxFQUFFO1lBQ1AsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO1lBQ3ZCLFNBQVMsRUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQztTQUM5QztRQUNELFVBQVUsRUFBRSw0QkFBNEI7UUFDeEMsYUFBYSxFQUFFLG1CQUFtQjtLQUNuQyxDQUFDLENBQUM7QUFDTCxDQUFDO0FBTUQsTUFBTSxVQUFVLFVBQVUsQ0FDeEIsWUFBcUQsRUFDckQsYUFBd0M7SUFFeEMsT0FBTyxZQUFZLENBQUMsYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQ25ELENBQUMifQ==
@@ -0,0 +1 @@
1
+ export { buildEip712Payload, fetchEip712DomainVersion, signEip712, } from './eip712.js';
@@ -0,0 +1,2 @@
1
+ export { buildEip712Payload, fetchEip712DomainVersion, signEip712, } from './eip712.js';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZWlwNzEyL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIsd0JBQXdCLEVBQ3hCLFVBQVUsR0FDWCxNQUFNLGFBQWEsQ0FBQyJ9
@@ -0,0 +1,49 @@
1
+ import type { Account, Chain, Transport, WalletClient } from 'viem';
2
+ import { validateHandle } from '../attesteddecrypt/attested-decrypt.js';
3
+ import { type HexString } from '../binary.js';
4
+ import { type SupportedChainId } from '../chain.js';
5
+ import { type EncryptionScheme, type SupportedFheType } from '../encryption/encryption.js';
6
+ import { KmsQuorumClient } from '../kms/quorumClient.js';
7
+ import type { XwingKeypair } from '../lite/xwing.js';
8
+ import type { BackoffConfig } from '../retry.js';
9
+ import { type EListDecryptionAttestation, type EncryptedEListDecryptionAttestation } from './types.js';
10
+ export { validateHandle };
11
+ export declare function eListAttestedDecrypt({ handle, backoffConfig, walletClient, chainId, reencryptPubKey, reencryptKeypair, kmsQuorumClient, executorAddress, }: {
12
+ handle: HexString;
13
+ backoffConfig?: Partial<BackoffConfig> | undefined;
14
+ walletClient: WalletClient<Transport, Chain, Account>;
15
+ chainId: SupportedChainId;
16
+ reencryptPubKey: Uint8Array;
17
+ reencryptKeypair: XwingKeypair;
18
+ kmsQuorumClient: KmsQuorumClient;
19
+ executorAddress: HexString;
20
+ }): Promise<EListDecryptionAttestation<EncryptionScheme, SupportedFheType>>;
21
+ export declare function eListAttestedDecrypt({ handle, backoffConfig, walletClient, chainId, reencryptPubKey, kmsQuorumClient, executorAddress, }: {
22
+ handle: HexString;
23
+ backoffConfig?: Partial<BackoffConfig> | undefined;
24
+ walletClient: WalletClient<Transport, Chain, Account>;
25
+ chainId: SupportedChainId;
26
+ reencryptPubKey: Uint8Array;
27
+ reencryptKeypair?: never;
28
+ kmsQuorumClient: KmsQuorumClient;
29
+ executorAddress: HexString;
30
+ }): Promise<EncryptedEListDecryptionAttestation<EncryptionScheme, SupportedFheType>>;
31
+ export declare function eListAttestedDecrypt({ handle, backoffConfig, walletClient, chainId, kmsQuorumClient, executorAddress, }: {
32
+ handle: HexString;
33
+ backoffConfig?: Partial<BackoffConfig> | undefined;
34
+ walletClient: WalletClient<Transport, Chain, Account>;
35
+ chainId: SupportedChainId;
36
+ reencryptPubKey?: never;
37
+ reencryptKeypair?: never;
38
+ kmsQuorumClient: KmsQuorumClient;
39
+ executorAddress: HexString;
40
+ }): Promise<EListDecryptionAttestation<EncryptionScheme, SupportedFheType>>;
41
+ /**
42
+ * Reveal a single elist handle without wallet authentication.
43
+ * Returns plaintext values along with an attestation of the checksum.
44
+ */
45
+ export declare function eListAttestedReveal({ handle, backoffConfig, kmsQuorumClient, }: {
46
+ handle: HexString;
47
+ backoffConfig?: Partial<BackoffConfig> | undefined;
48
+ kmsQuorumClient: KmsQuorumClient;
49
+ }): Promise<EListDecryptionAttestation<EncryptionScheme, SupportedFheType>>;
@@ -0,0 +1,89 @@
1
+ import { create } from '@bufbuild/protobuf';
2
+ import { hexToBytes } from 'viem';
3
+ import { buildHandlesWithProofs, validateHandle, } from '../attesteddecrypt/attested-decrypt.js';
4
+ import { bytesToBigInt } from '../binary.js';
5
+ import { buildEip712Payload, signEip712 } from '../eip712/eip712.js';
6
+ import { bigintToPlaintext, } from '../encryption/encryption.js';
7
+ import { EListAttestedDecryptRequestSchema, EListAttestedRevealRequestSchema, } from '../generated/es/inco/kms/lite/v1/kms_service_pb.js';
8
+ import { getEListElementType } from '../handle.js';
9
+ import { decrypt } from '../lite/xwing.js';
10
+ import { EListAttestedDecryptError, } from './types.js';
11
+ export { validateHandle };
12
+ // Implementation
13
+ export async function eListAttestedDecrypt({ handle, backoffConfig, walletClient, chainId, reencryptPubKey, reencryptKeypair, kmsQuorumClient, executorAddress, }) {
14
+ try {
15
+ validateHandle(handle);
16
+ const eip712Payload = await buildEip712Payload({
17
+ executorAddress,
18
+ ethClient: walletClient,
19
+ chainId,
20
+ handles: [handle],
21
+ reencryptPubKey: reencryptPubKey ?? new Uint8Array(),
22
+ });
23
+ const eip712SignatureHex = await signEip712(walletClient, eip712Payload);
24
+ const handlesWithProofs = buildHandlesWithProofs([handle]);
25
+ const eListAttestedDecryptRequest = buildEListAttestedDecryptRequest({
26
+ userAddress: walletClient.account.address,
27
+ handleWithProof: handlesWithProofs[0],
28
+ eip712Signature: hexToBytes(eip712SignatureHex),
29
+ ...(reencryptPubKey !== undefined ? { reencryptPubKey } : {}),
30
+ });
31
+ const encryptedResponse = await kmsQuorumClient.eListAttestedDecrypt(eListAttestedDecryptRequest, backoffConfig, reencryptKeypair, executorAddress, walletClient);
32
+ // If reencryptPubKey is provided with a keypair, decrypt the values
33
+ if (reencryptPubKey !== undefined && reencryptKeypair) {
34
+ return {
35
+ ...encryptedResponse,
36
+ values: await decryptEncryptedEListValues(encryptedResponse.values, reencryptKeypair, getEListElementType(handle)),
37
+ };
38
+ }
39
+ return encryptedResponse;
40
+ }
41
+ catch (error) {
42
+ if (error instanceof EListAttestedDecryptError) {
43
+ throw error;
44
+ }
45
+ throw new EListAttestedDecryptError('Failed to decrypt elist handle', error);
46
+ }
47
+ }
48
+ /**
49
+ * Reveal a single elist handle without wallet authentication.
50
+ * Returns plaintext values along with an attestation of the checksum.
51
+ */
52
+ export async function eListAttestedReveal({ handle, backoffConfig, kmsQuorumClient, }) {
53
+ try {
54
+ validateHandle(handle);
55
+ const eListAttestedRevealRequest = create(EListAttestedRevealRequestSchema, {
56
+ handle,
57
+ });
58
+ return await kmsQuorumClient.eListAttestedReveal(eListAttestedRevealRequest, backoffConfig);
59
+ }
60
+ catch (error) {
61
+ if (error instanceof EListAttestedDecryptError) {
62
+ throw error;
63
+ }
64
+ throw new EListAttestedDecryptError('Failed to reveal elist handle', error);
65
+ }
66
+ }
67
+ function buildEListAttestedDecryptRequest(params) {
68
+ return create(EListAttestedDecryptRequestSchema, {
69
+ userAddress: params.userAddress,
70
+ elistHandleWithProof: params.handleWithProof,
71
+ eip712Signature: params.eip712Signature,
72
+ reencryptPubKey: params.reencryptPubKey
73
+ ? params.reencryptPubKey
74
+ : new Uint8Array(),
75
+ });
76
+ }
77
+ // Helper function that transforms EncryptResultOf[] to PlaintextOf[] by decrypting the encrypted values
78
+ async function decryptEncryptedEListValues(values, reencryptKeypair, handleType) {
79
+ return Promise.all(values.map(async (value) => {
80
+ // Check if value is EncryptResultOf (has ciphertext property)
81
+ if ('ciphertext' in value) {
82
+ const ct = hexToBytes(value.ciphertext.value);
83
+ const plaintextBytes = await decrypt(reencryptKeypair, ct);
84
+ return bigintToPlaintext(value.ciphertext.scheme, handleType, bytesToBigInt(plaintextBytes));
85
+ }
86
+ return value;
87
+ }));
88
+ }
89
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxpc3QtYXR0ZXN0ZWQtZGVjcnlwdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3NyYy9lbGlzdGF0dGVzdGVkZGVjcnlwdC9lbGlzdC1hdHRlc3RlZC1kZWNyeXB0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUU1QyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2xDLE9BQU8sRUFDTCxzQkFBc0IsRUFDdEIsY0FBYyxHQUNmLE1BQU0sd0NBQXdDLENBQUM7QUFDaEQsT0FBTyxFQUFFLGFBQWEsRUFBa0IsTUFBTSxjQUFjLENBQUM7QUFFN0QsT0FBTyxFQUFFLGtCQUFrQixFQUFFLFVBQVUsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBQ3JFLE9BQU8sRUFDTCxpQkFBaUIsR0FLbEIsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBRUwsaUNBQWlDLEVBQ2pDLGdDQUFnQyxHQUNqQyxNQUFNLG9EQUFvRCxDQUFDO0FBRTVELE9BQU8sRUFBRSxtQkFBbUIsRUFBRSxNQUFNLGNBQWMsQ0FBQztBQUduRCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFFM0MsT0FBTyxFQUNMLHlCQUF5QixHQUcxQixNQUFNLFlBQVksQ0FBQztBQUVwQixPQUFPLEVBQUUsY0FBYyxFQUFFLENBQUM7QUFnRTFCLGlCQUFpQjtBQUNqQixNQUFNLENBQUMsS0FBSyxVQUFVLG9CQUFvQixDQUFDLEVBQ3pDLE1BQU0sRUFDTixhQUFhLEVBQ2IsWUFBWSxFQUNaLE9BQU8sRUFDUCxlQUFlLEVBQ2YsZ0JBQWdCLEVBQ2hCLGVBQWUsRUFDZixlQUFlLEdBVWhCO0lBSUMsSUFBSSxDQUFDO1FBQ0gsY0FBYyxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBRXZCLE1BQU0sYUFBYSxHQUFHLE1BQU0sa0JBQWtCLENBQUM7WUFDN0MsZUFBZTtZ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
@@ -0,0 +1,2 @@
1
+ export { eListAttestedDecrypt, eListAttestedReveal, } from './elist-attested-decrypt.js';
2
+ export * from './types.js';
@@ -0,0 +1,3 @@
1
+ export { eListAttestedDecrypt, eListAttestedReveal, } from './elist-attested-decrypt.js';
2
+ export * from './types.js';
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvZWxpc3RhdHRlc3RlZGRlY3J5cHQvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLG9CQUFvQixFQUNwQixtQkFBbUIsR0FDcEIsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxjQUFjLFlBQVksQ0FBQyJ9