ox 1.1.2 → 1.3.0

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 (296) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/dist/core/AbiFunction.d.ts +1 -1
  3. package/dist/core/AbiFunction.d.ts.map +1 -1
  4. package/dist/core/AbiFunction.js +6 -2
  5. package/dist/core/AbiFunction.js.map +1 -1
  6. package/dist/core/AbiParameters.d.ts +1 -1
  7. package/dist/core/AbiParameters.d.ts.map +1 -1
  8. package/dist/core/AbiParameters.js +1 -13
  9. package/dist/core/AbiParameters.js.map +1 -1
  10. package/dist/core/AesGcm.d.ts +36 -1
  11. package/dist/core/AesGcm.d.ts.map +1 -1
  12. package/dist/core/AesGcm.js +44 -0
  13. package/dist/core/AesGcm.js.map +1 -1
  14. package/dist/core/Ed25519.d.ts +46 -1
  15. package/dist/core/Ed25519.d.ts.map +1 -1
  16. package/dist/core/Ed25519.js +43 -0
  17. package/dist/core/Ed25519.js.map +1 -1
  18. package/dist/core/Engine.d.ts +1 -1
  19. package/dist/core/Engine.d.ts.map +1 -1
  20. package/dist/core/Engine.js.map +1 -1
  21. package/dist/core/Hash.d.ts +200 -1
  22. package/dist/core/Hash.d.ts.map +1 -1
  23. package/dist/core/Hash.js +207 -0
  24. package/dist/core/Hash.js.map +1 -1
  25. package/dist/core/Hex.d.ts.map +1 -1
  26. package/dist/core/Hex.js +1 -4
  27. package/dist/core/Hex.js.map +1 -1
  28. package/dist/core/Rlp.d.ts +32 -0
  29. package/dist/core/Rlp.d.ts.map +1 -1
  30. package/dist/core/Rlp.js +146 -0
  31. package/dist/core/Rlp.js.map +1 -1
  32. package/dist/core/Secp256k1.d.ts +46 -1
  33. package/dist/core/Secp256k1.d.ts.map +1 -1
  34. package/dist/core/Secp256k1.js +48 -0
  35. package/dist/core/Secp256k1.js.map +1 -1
  36. package/dist/core/WebAuthn.d.ts +224 -0
  37. package/dist/core/WebAuthn.d.ts.map +1 -0
  38. package/dist/core/WebAuthn.js +343 -0
  39. package/dist/core/WebAuthn.js.map +1 -0
  40. package/dist/core/WebAuthnP256.d.ts +46 -50
  41. package/dist/core/WebAuthnP256.d.ts.map +1 -1
  42. package/dist/core/WebAuthnP256.js +44 -50
  43. package/dist/core/WebAuthnP256.js.map +1 -1
  44. package/dist/core/internal/abiParameters.d.ts +7 -87
  45. package/dist/core/internal/abiParameters.d.ts.map +1 -1
  46. package/dist/core/internal/abiParameters.js +339 -194
  47. package/dist/core/internal/abiParameters.js.map +1 -1
  48. package/dist/core/internal/engine.d.ts +35 -2
  49. package/dist/core/internal/engine.d.ts.map +1 -1
  50. package/dist/core/internal/engine.js +12 -1
  51. package/dist/core/internal/engine.js.map +1 -1
  52. package/dist/core/internal/hash.d.ts +10 -0
  53. package/dist/core/internal/hash.d.ts.map +1 -1
  54. package/dist/core/internal/hash.js +26 -1
  55. package/dist/core/internal/hash.js.map +1 -1
  56. package/dist/index.d.ts +23 -14
  57. package/dist/index.d.ts.map +1 -1
  58. package/dist/index.js +23 -14
  59. package/dist/index.js.map +1 -1
  60. package/dist/node/Engine.d.ts +1 -1
  61. package/dist/node/Engine.d.ts.map +1 -1
  62. package/dist/node/Engine.js.map +1 -1
  63. package/dist/node/Hash.d.ts +6 -4
  64. package/dist/node/Hash.d.ts.map +1 -1
  65. package/dist/node/Hash.js +35 -3
  66. package/dist/node/Hash.js.map +1 -1
  67. package/dist/tempo/AuthorizationTempo.d.ts +6 -6
  68. package/dist/tempo/AuthorizationTempo.js +6 -6
  69. package/dist/tempo/KeyAuthorization.d.ts +3 -8
  70. package/dist/tempo/KeyAuthorization.d.ts.map +1 -1
  71. package/dist/tempo/KeyAuthorization.js +3 -8
  72. package/dist/tempo/KeyAuthorization.js.map +1 -1
  73. package/dist/tempo/SignatureEnvelope.d.ts +8 -8
  74. package/dist/tempo/SignatureEnvelope.js +8 -8
  75. package/dist/trusted-setups/Paths.d.ts +1 -0
  76. package/dist/trusted-setups/Paths.d.ts.map +1 -1
  77. package/dist/trusted-setups/Paths.js +1 -0
  78. package/dist/trusted-setups/Paths.js.map +1 -1
  79. package/dist/trusted-setups/Setups.d.ts +35 -0
  80. package/dist/trusted-setups/Setups.d.ts.map +1 -0
  81. package/dist/trusted-setups/Setups.js +29 -0
  82. package/dist/trusted-setups/Setups.js.map +1 -0
  83. package/dist/trusted-setups/index.d.ts +20 -0
  84. package/dist/trusted-setups/index.d.ts.map +1 -1
  85. package/dist/trusted-setups/index.js +20 -0
  86. package/dist/trusted-setups/index.js.map +1 -1
  87. package/dist/trusted-setups/internal/paths.d.ts.map +1 -1
  88. package/dist/trusted-setups/internal/paths.js +1 -1
  89. package/dist/trusted-setups/internal/paths.js.map +1 -1
  90. package/dist/trusted-setups/internal/setups/mainnet.d.ts +7 -0
  91. package/dist/trusted-setups/internal/setups/mainnet.d.ts.map +1 -0
  92. package/dist/trusted-setups/internal/setups/mainnet.js +11 -0
  93. package/dist/trusted-setups/internal/setups/mainnet.js.map +1 -0
  94. package/dist/wasm/Engine.d.ts +4 -3
  95. package/dist/wasm/Engine.d.ts.map +1 -1
  96. package/dist/wasm/Engine.js +5 -5
  97. package/dist/wasm/Engine.js.map +1 -1
  98. package/dist/wasm/Hash.d.ts +1 -1
  99. package/dist/wasm/Hash.d.ts.map +1 -1
  100. package/dist/wasm/Hash.js +5 -0
  101. package/dist/wasm/Hash.js.map +1 -1
  102. package/dist/wasm/Keystore.d.ts +23 -9
  103. package/dist/wasm/Keystore.d.ts.map +1 -1
  104. package/dist/wasm/Keystore.js +30 -13
  105. package/dist/wasm/Keystore.js.map +1 -1
  106. package/dist/wasm/Kzg.d.ts +112 -0
  107. package/dist/wasm/Kzg.d.ts.map +1 -0
  108. package/dist/wasm/Kzg.js +333 -0
  109. package/dist/wasm/Kzg.js.map +1 -0
  110. package/dist/wasm/Secp256k1.d.ts +55 -0
  111. package/dist/wasm/Secp256k1.d.ts.map +1 -0
  112. package/dist/wasm/Secp256k1.js +181 -0
  113. package/dist/wasm/Secp256k1.js.map +1 -0
  114. package/dist/wasm/index.d.ts +44 -1
  115. package/dist/wasm/index.d.ts.map +1 -1
  116. package/dist/wasm/index.js +44 -1
  117. package/dist/wasm/index.js.map +1 -1
  118. package/dist/wasm/internal/blake3.d.ts +10 -1
  119. package/dist/wasm/internal/blake3.d.ts.map +1 -1
  120. package/dist/wasm/internal/blake3.js +12 -1
  121. package/dist/wasm/internal/blake3.js.map +1 -1
  122. package/dist/wasm/internal/blake3.wasm.d.ts +3 -1
  123. package/dist/wasm/internal/blake3.wasm.d.ts.map +1 -1
  124. package/dist/wasm/internal/blake3.wasm.js +3 -1
  125. package/dist/wasm/internal/blake3.wasm.js.map +1 -1
  126. package/dist/wasm/internal/hash.d.ts +9 -0
  127. package/dist/wasm/internal/hash.d.ts.map +1 -1
  128. package/dist/wasm/internal/hash.js +13 -1
  129. package/dist/wasm/internal/hash.js.map +1 -1
  130. package/dist/wasm/internal/hashState.d.ts +25 -0
  131. package/dist/wasm/internal/hashState.d.ts.map +1 -0
  132. package/dist/wasm/internal/hashState.js +105 -0
  133. package/dist/wasm/internal/hashState.js.map +1 -0
  134. package/dist/wasm/internal/hashes.d.ts +12 -1
  135. package/dist/wasm/internal/hashes.d.ts.map +1 -1
  136. package/dist/wasm/internal/hashes.js +18 -1
  137. package/dist/wasm/internal/hashes.js.map +1 -1
  138. package/dist/wasm/internal/hashes.wasm.d.ts +11 -3
  139. package/dist/wasm/internal/hashes.wasm.d.ts.map +1 -1
  140. package/dist/wasm/internal/hashes.wasm.js +11 -3
  141. package/dist/wasm/internal/hashes.wasm.js.map +1 -1
  142. package/dist/wasm/internal/instantiate.d.ts +12 -0
  143. package/dist/wasm/internal/instantiate.d.ts.map +1 -1
  144. package/dist/wasm/internal/instantiate.js +23 -7
  145. package/dist/wasm/internal/instantiate.js.map +1 -1
  146. package/dist/wasm/internal/keystore.d.ts +10 -0
  147. package/dist/wasm/internal/keystore.d.ts.map +1 -0
  148. package/dist/wasm/internal/keystore.js +10 -0
  149. package/dist/wasm/internal/keystore.js.map +1 -0
  150. package/dist/wasm/internal/kzg.d.ts +17 -0
  151. package/dist/wasm/internal/kzg.d.ts.map +1 -0
  152. package/dist/wasm/internal/kzg.js +8 -0
  153. package/dist/wasm/internal/kzg.js.map +1 -0
  154. package/dist/wasm/internal/kzg.wasm.d.ts +3 -0
  155. package/dist/wasm/internal/kzg.wasm.d.ts.map +1 -0
  156. package/dist/wasm/internal/kzg.wasm.js +10 -0
  157. package/dist/wasm/internal/kzg.wasm.js.map +1 -0
  158. package/dist/wasm/internal/scrypt.d.ts +16 -0
  159. package/dist/wasm/internal/scrypt.d.ts.map +1 -0
  160. package/dist/wasm/internal/scrypt.js +78 -0
  161. package/dist/wasm/internal/scrypt.js.map +1 -0
  162. package/dist/wasm/internal/scrypt.wasm.d.ts +7 -0
  163. package/dist/wasm/internal/scrypt.wasm.d.ts.map +1 -0
  164. package/dist/wasm/internal/scrypt.wasm.js +14 -0
  165. package/dist/wasm/internal/scrypt.wasm.js.map +1 -0
  166. package/dist/wasm/internal/secp256k1.d.ts +16 -0
  167. package/dist/wasm/internal/secp256k1.d.ts.map +1 -0
  168. package/dist/wasm/internal/secp256k1.js +20 -0
  169. package/dist/wasm/internal/secp256k1.js.map +1 -0
  170. package/dist/wasm/internal/secp256k1.wasm.d.ts +3 -0
  171. package/dist/wasm/internal/secp256k1.wasm.d.ts.map +1 -0
  172. package/dist/wasm/internal/secp256k1.wasm.js +10 -0
  173. package/dist/wasm/internal/secp256k1.wasm.js.map +1 -0
  174. package/dist/webauthn/Authentication.d.ts +2 -0
  175. package/dist/webauthn/Authentication.d.ts.map +1 -1
  176. package/dist/webauthn/Authentication.js +2 -1
  177. package/dist/webauthn/Authentication.js.map +1 -1
  178. package/dist/webauthn/Registration.d.ts.map +1 -1
  179. package/dist/webauthn/Registration.js +2 -1
  180. package/dist/webauthn/Registration.js.map +1 -1
  181. package/dist/webauthn/Types.d.ts +27 -6
  182. package/dist/webauthn/Types.d.ts.map +1 -1
  183. package/dist/webauthn/internal/utils.d.ts.map +1 -1
  184. package/dist/webauthn/internal/utils.js +35 -9
  185. package/dist/webauthn/internal/utils.js.map +1 -1
  186. package/dist/zod/TypedData.d.ts +2 -2
  187. package/package.json +27 -2
  188. package/src/benchmarks/Ox.bench.ts +6 -0
  189. package/src/benchmarks/OxNode.bench.ts +8 -0
  190. package/src/benchmarks/OxV0.bench.ts +4 -0
  191. package/src/benchmarks/OxWasm.bench.ts +22 -0
  192. package/src/core/AbiFunction.ts +5 -5
  193. package/src/core/AbiParameters.ts +8 -20
  194. package/src/core/AesGcm.ts +86 -1
  195. package/src/core/Ed25519.ts +87 -1
  196. package/src/core/Engine.ts +1 -0
  197. package/src/core/Hash.ts +321 -1
  198. package/src/core/Hex.ts +1 -4
  199. package/src/core/Rlp.ts +172 -5
  200. package/src/core/Secp256k1.ts +92 -1
  201. package/src/core/WebAuthn.ts +579 -0
  202. package/src/core/WebAuthnP256.ts +47 -50
  203. package/src/core/_test/AbiFunction.test.ts +9 -0
  204. package/src/core/_test/AbiParameters.differential.fuzz.ts +156 -0
  205. package/src/core/_test/AbiParameters.encode.test.ts +22 -0
  206. package/src/core/_test/AbiParameters.fuzz.ts +4 -0
  207. package/src/core/_test/AesGcm.test.ts +76 -0
  208. package/src/core/_test/Block.test.ts +9 -2
  209. package/src/core/_test/Ed25519.test-d.ts +13 -1
  210. package/src/core/_test/Ed25519.test.ts +120 -1
  211. package/src/core/_test/Engine.test-d.ts +9 -0
  212. package/src/core/_test/Engine.test.ts +1 -1
  213. package/src/core/_test/Hash.test-d.ts +41 -0
  214. package/src/core/_test/Hash.test.ts +278 -1
  215. package/src/core/_test/Hash.vectors.test.ts +1 -2
  216. package/src/core/_test/Hex.test.ts +2 -0
  217. package/src/core/_test/Rlp.test-d.ts +18 -0
  218. package/src/core/_test/Rlp.test.ts +109 -0
  219. package/src/core/_test/Secp256k1.test-d.ts +14 -0
  220. package/src/core/_test/Secp256k1.test.ts +91 -1
  221. package/src/core/_test/Transaction.test.ts +11 -2
  222. package/src/core/_test/WebAuthn.test-d.ts +142 -0
  223. package/src/core/_test/WebAuthn.test.ts +766 -0
  224. package/src/core/_test/index.test.ts +1 -0
  225. package/src/core/internal/abiParameters.ts +466 -326
  226. package/src/core/internal/engine.ts +47 -2
  227. package/src/core/internal/hash.ts +53 -1
  228. package/src/index.ts +24 -14
  229. package/src/node/Engine.ts +1 -0
  230. package/src/node/Hash.ts +43 -6
  231. package/src/node/_test/Engine.test-d.ts +1 -0
  232. package/src/node/_test/Engine.test.ts +2 -0
  233. package/src/node/_test/Hash.test-d.ts +11 -0
  234. package/src/node/_test/Hash.test.ts +46 -0
  235. package/src/tempo/AuthorizationTempo.ts +6 -6
  236. package/src/tempo/KeyAuthorization.ts +3 -8
  237. package/src/tempo/SignatureEnvelope.ts +8 -8
  238. package/src/trusted-setups/Paths.ts +1 -0
  239. package/src/trusted-setups/README.md +39 -0
  240. package/src/trusted-setups/Setups.ts +46 -0
  241. package/src/trusted-setups/_test/Paths.test.ts +16 -0
  242. package/src/trusted-setups/_test/Setups.test-d.ts +7 -0
  243. package/src/trusted-setups/_test/Setups.test.ts +43 -0
  244. package/src/trusted-setups/_test/index.test.ts +1 -0
  245. package/src/trusted-setups/index.ts +21 -0
  246. package/src/trusted-setups/internal/paths.ts +4 -1
  247. package/src/trusted-setups/internal/setups/mainnet.source.json +7 -0
  248. package/src/trusted-setups/internal/setups/mainnet.ts +16 -0
  249. package/src/version.ts +1 -1
  250. package/src/wasm/Engine.ts +9 -6
  251. package/src/wasm/Hash.ts +10 -0
  252. package/src/wasm/Keystore.bench.ts +26 -0
  253. package/src/wasm/Keystore.ts +32 -14
  254. package/src/wasm/Kzg.bench.ts +63 -0
  255. package/src/wasm/Kzg.ts +518 -0
  256. package/src/wasm/Secp256k1.bench.ts +79 -0
  257. package/src/wasm/Secp256k1.ts +248 -0
  258. package/src/wasm/_test/Engine.test-d.ts +2 -0
  259. package/src/wasm/_test/Engine.test.ts +5 -0
  260. package/src/wasm/_test/Hash.browser.test.ts +31 -0
  261. package/src/wasm/_test/Hash.test-d.ts +17 -0
  262. package/src/wasm/_test/Hash.test.ts +252 -3
  263. package/src/wasm/_test/Keystore.browser.test.ts +31 -0
  264. package/src/wasm/_test/Keystore.fuzz.ts +50 -0
  265. package/src/wasm/_test/Keystore.test-d.ts +10 -1
  266. package/src/wasm/_test/Keystore.test.ts +289 -4
  267. package/src/wasm/_test/Kzg.test-d.ts +19 -0
  268. package/src/wasm/_test/Kzg.test.ts +220 -0
  269. package/src/wasm/_test/Runtime.test.ts +9 -0
  270. package/src/wasm/_test/Secp256k1.test-d.ts +35 -0
  271. package/src/wasm/_test/Secp256k1.test.ts +354 -0
  272. package/src/wasm/index.ts +46 -1
  273. package/src/wasm/internal/blake3.ts +23 -2
  274. package/src/wasm/internal/blake3.wasm.ts +4 -1
  275. package/src/wasm/internal/hash.ts +27 -1
  276. package/src/wasm/internal/hashState.ts +154 -0
  277. package/src/wasm/internal/hashes.ts +56 -15
  278. package/src/wasm/internal/hashes.wasm.ts +15 -3
  279. package/src/wasm/internal/instantiate.ts +29 -9
  280. package/src/wasm/internal/keystore.ts +19 -0
  281. package/src/wasm/internal/kzg.ts +50 -0
  282. package/src/wasm/internal/kzg.wasm.ts +11 -0
  283. package/src/wasm/internal/scrypt.ts +131 -0
  284. package/src/wasm/internal/scrypt.wasm.ts +17 -0
  285. package/src/wasm/internal/secp256k1.ts +62 -0
  286. package/src/wasm/internal/secp256k1.wasm.ts +11 -0
  287. package/src/webauthn/Authentication.ts +4 -0
  288. package/src/webauthn/Registration.ts +2 -0
  289. package/src/webauthn/Types.ts +32 -2
  290. package/src/webauthn/_test/Authentication.test.ts +123 -1
  291. package/src/webauthn/_test/Registration.test.ts +26 -6
  292. package/src/webauthn/_test/WebAuthn.browser.test.ts +28 -0
  293. package/src/webauthn/internal/utils.ts +41 -8
  294. package/wasm/vendor/c-kzg-4844/LICENSE +201 -0
  295. package/wasm/vendor/c-kzg-4844/blst/LICENSE +201 -0
  296. package/src/trusted-setups/internal/setups/mainnet.txt +0 -4163
@@ -0,0 +1,224 @@
1
+ import * as Bytes from './Bytes.js';
2
+ import * as Errors from './Errors.js';
3
+ import * as Hex from './Hex.js';
4
+ import type { UnionOmit } from './internal/types.js';
5
+ import * as Authentication from '../webauthn/Authentication.js';
6
+ import type * as Credential from '../webauthn/Credential.js';
7
+ import * as Registration from '../webauthn/Registration.js';
8
+ import type * as Types from '../webauthn/Types.js';
9
+ export * from './WebAuthnP256.js';
10
+ /** Configuration for evaluating a WebAuthn credential-bound PRF. */
11
+ export type Prf = true | {
12
+ /**
13
+ * Application-owned PRF input.
14
+ *
15
+ * Use the same input to reproduce an output. Store unpredictable inputs
16
+ * with the credential metadata.
17
+ */
18
+ input: Bytes.Bytes;
19
+ };
20
+ /**
21
+ * Creates a WebAuthn credential and optionally returns its credential-bound
22
+ * PRF output.
23
+ *
24
+ * @example
25
+ * ```ts twoslash
26
+ * import { Secp256k1, WebAuthn } from 'ox'
27
+ *
28
+ * const credential = await WebAuthn.createCredential({
29
+ * name: 'Example',
30
+ * prf: true
31
+ * })
32
+ * const privateKey = Secp256k1.fromPrf(credential.prf)
33
+ * ```
34
+ *
35
+ * `prf: true` uses the stable input `ox.webauthn.prf.v1`. Pass
36
+ * `{ input }` to use an application-owned input instead.
37
+ *
38
+ * When credential creation enables PRF but does not return an output, this
39
+ * function performs a follow-up assertion. The user may be prompted twice.
40
+ *
41
+ * If PRF evaluation fails after registration, the thrown error retains the
42
+ * created credential on its `credential` property.
43
+ *
44
+ * :::warning
45
+ *
46
+ * PRF output is secret application-held key material. Native
47
+ * `credential.raw.toJSON()` output includes extension results, so do not
48
+ * serialize or send the raw credential.
49
+ *
50
+ * PRF-derived keys are software keys. Code on any origin allowed to use the
51
+ * same RP ID can request the same output after user verification.
52
+ *
53
+ * :::
54
+ *
55
+ * @param options - Credential creation and PRF options.
56
+ * @returns The credential, with a copied PRF output when requested.
57
+ */
58
+ export declare function createCredential<const options extends createCredential.Options | createCredential.PrfOptions>(options: options): Promise<createCredential.ReturnType<options>>;
59
+ export declare namespace createCredential {
60
+ /** Options for ordinary WebAuthn P256 credential creation. */
61
+ type Options = Registration.create.Options & {
62
+ /** Reserved for credential creation with PRF output. */
63
+ prf?: never;
64
+ };
65
+ /** Options for WebAuthn credential creation with required PRF output. */
66
+ type PrfOptions = UnionOmit<Registration.getOptions.Options, 'authenticatorSelection' | 'challenge' | 'extensions'> & {
67
+ /**
68
+ * Criteria used to select an authenticator. User verification is always required.
69
+ */
70
+ authenticatorSelection?: Omit<NonNullable<Registration.getOptions.Options['authenticatorSelection']>, 'userVerification'> | undefined;
71
+ /**
72
+ * Cryptographic challenge. Defaults to a random 32-byte value.
73
+ *
74
+ * Supply and verify a server-generated challenge when registration is
75
+ * also used to authenticate a user to a server.
76
+ */
77
+ challenge?: Registration.getOptions.Options['challenge'] | undefined;
78
+ /** Function that creates the WebAuthn credential. */
79
+ createFn?: ((options?: Types.CredentialCreationOptions) => Promise<Types.Credential | null>) | undefined;
80
+ /** Additional WebAuthn extensions. The `prf` extension is managed by this function. */
81
+ extensions?: Omit<Types.AuthenticationExtensionsClientInputs, 'prf'> | undefined;
82
+ /** Function used for a follow-up PRF assertion when creation does not return an output. */
83
+ getFn?: ((options?: Types.CredentialRequestOptions) => Promise<Types.Credential | null>) | undefined;
84
+ /** Credential-bound PRF configuration. */
85
+ prf: Prf;
86
+ /** Raw credential options cannot be combined with managed PRF evaluation. */
87
+ publicKey?: never;
88
+ };
89
+ /** Created WebAuthn credential with its credential-bound PRF output. */
90
+ type PrfReturnType = Credential.Credential & {
91
+ /** Copied 32-byte credential-bound PRF output. */
92
+ prf: Bytes.Bytes;
93
+ };
94
+ /** Return type for a WebAuthn credential creation request. */
95
+ type ReturnType<options extends Options | PrfOptions> = options extends PrfOptions ? PrfReturnType : Credential.Credential;
96
+ type ErrorType = InvalidExtensionError | InvalidOptionsError | InvalidPrfOutputError | PrfEvaluationFailedError | PrfNotSupportedError | Registration.create.ErrorType | Errors.GlobalErrorType;
97
+ }
98
+ /**
99
+ * Requests a WebAuthn credential and returns its credential-bound PRF output.
100
+ *
101
+ * @example
102
+ * ```ts twoslash
103
+ * import { Secp256k1, WebAuthn } from 'ox'
104
+ *
105
+ * const { prf } = await WebAuthn.getCredential({
106
+ * credentialId: 'oZ48...',
107
+ * prf: true
108
+ * })
109
+ * const privateKey = Secp256k1.fromPrf(prf)
110
+ * ```
111
+ *
112
+ * `prf: true` uses the stable input `ox.webauthn.prf.v1`. Pass
113
+ * `{ input }` to use an application-owned input instead.
114
+ *
115
+ * When more than one credential can be selected, check `result.id`
116
+ * before using the PRF output.
117
+ *
118
+ * :::warning
119
+ *
120
+ * PRF output is secret application-held key material. Native
121
+ * `response.raw.toJSON()` output includes extension results, so do not
122
+ * serialize or send the raw response.
123
+ *
124
+ * :::
125
+ *
126
+ * @param options - Credential request and PRF options.
127
+ * @returns The requested credential and a copied 32-byte PRF output.
128
+ */
129
+ export declare function getCredential(options: getCredential.Options): Promise<getCredential.ReturnType>;
130
+ export declare namespace getCredential {
131
+ type Options = UnionOmit<Authentication.getOptions.Options, 'challenge' | 'extensions' | 'userVerification'> & {
132
+ /**
133
+ * Challenge to sign. Defaults to a random 32-byte value.
134
+ *
135
+ * Supply and verify a server-generated challenge when the assertion is
136
+ * also used to authenticate a user to a server.
137
+ */
138
+ challenge?: Hex.Hex | undefined;
139
+ /** Additional WebAuthn extensions. The `prf` extension is managed by this function. */
140
+ extensions?: Omit<Types.AuthenticationExtensionsClientInputs, 'prf'> | undefined;
141
+ /** Function that requests the WebAuthn credential. */
142
+ getFn?: ((options?: Types.CredentialRequestOptions) => Promise<Types.Credential | null>) | undefined;
143
+ /** Credential-bound PRF configuration. */
144
+ prf: Prf;
145
+ /** Raw credential options cannot be combined with managed PRF evaluation. */
146
+ publicKey?: never;
147
+ };
148
+ /** Result from a WebAuthn credential request. */
149
+ type Response = {
150
+ /** Credential identifier. */
151
+ id: string;
152
+ /** Native WebAuthn credential. */
153
+ raw: Types.PublicKeyCredential;
154
+ };
155
+ type ReturnType = Response & {
156
+ /** Copied 32-byte credential-bound PRF output. */
157
+ prf: Bytes.Bytes;
158
+ };
159
+ type ErrorType = Authentication.getOptions.ErrorType | GetCredentialFailedError | InvalidExtensionError | InvalidOptionsError | InvalidPrfOutputError | PrfEvaluationFailedError | PrfUnavailableError | Errors.GlobalErrorType;
160
+ }
161
+ type PrfResultContext = {
162
+ credential?: Credential.Credential | undefined;
163
+ response?: getCredential.Response | undefined;
164
+ };
165
+ /** Thrown when a caller supplies the managed `prf` extension. */
166
+ export declare class InvalidExtensionError extends Errors.BaseError {
167
+ readonly name = "WebAuthn.InvalidExtensionError";
168
+ constructor();
169
+ }
170
+ /** Thrown when raw credential options are combined with managed PRF evaluation. */
171
+ export declare class InvalidOptionsError extends Errors.BaseError {
172
+ readonly name = "WebAuthn.InvalidOptionsError";
173
+ constructor();
174
+ }
175
+ /** Thrown when a WebAuthn PRF result is not a valid 32-byte output. */
176
+ export declare class InvalidPrfOutputError extends Errors.BaseError {
177
+ /** Credential that returned the invalid PRF output, when created in this operation. */
178
+ readonly credential?: Credential.Credential | undefined;
179
+ /** Authentication response that returned the invalid PRF output, when available. */
180
+ readonly response?: getCredential.Response | undefined;
181
+ readonly name = "WebAuthn.InvalidPrfOutputError";
182
+ constructor({ credential, response, size, }: PrfResultContext & {
183
+ size?: number | undefined;
184
+ });
185
+ }
186
+ /** Thrown when a created credential does not support PRF evaluation. */
187
+ export declare class PrfNotSupportedError extends Errors.BaseError {
188
+ /** Credential that was created before PRF support was determined. */
189
+ readonly credential: Credential.Credential;
190
+ readonly name = "WebAuthn.PrfNotSupportedError";
191
+ constructor({ credential }: {
192
+ credential: Credential.Credential;
193
+ });
194
+ }
195
+ /** Thrown when a credential assertion does not return a PRF output. */
196
+ export declare class PrfUnavailableError extends Errors.BaseError {
197
+ /** Authentication response that did not contain a PRF output. */
198
+ readonly response: getCredential.Response;
199
+ readonly name = "WebAuthn.PrfUnavailableError";
200
+ constructor({ response }: {
201
+ response: getCredential.Response;
202
+ });
203
+ }
204
+ /** Thrown when WebAuthn PRF evaluation fails after a credential ceremony. */
205
+ export declare class PrfEvaluationFailedError extends Errors.BaseError<Error> {
206
+ /** Credential that was created before PRF evaluation failed, when available. */
207
+ readonly credential?: Credential.Credential | undefined;
208
+ /** Authentication response produced before PRF evaluation failed, when available. */
209
+ readonly response?: getCredential.Response | undefined;
210
+ readonly name = "WebAuthn.PrfEvaluationFailedError";
211
+ constructor({ cause, credential, response, }: {
212
+ cause: Error;
213
+ credential?: Credential.Credential | undefined;
214
+ response?: getCredential.Response | undefined;
215
+ });
216
+ }
217
+ /** Thrown when a WebAuthn credential request fails. */
218
+ export declare class GetCredentialFailedError extends Errors.BaseError<Error> {
219
+ readonly name = "WebAuthn.GetCredentialFailedError";
220
+ constructor({ cause }?: {
221
+ cause?: Error | undefined;
222
+ });
223
+ }
224
+ //# sourceMappingURL=WebAuthn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebAuthn.d.ts","sourceRoot":"","sources":["../../src/core/WebAuthn.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,343 @@
1
+ import * as Bytes from './Bytes.js';
2
+ import * as Errors from './Errors.js';
3
+ import * as Hex from './Hex.js';
4
+ import * as WebAuthnP256 from './WebAuthnP256.js';
5
+ import * as Authentication from '../webauthn/Authentication.js';
6
+ import * as Registration from '../webauthn/Registration.js';
7
+ export * from './WebAuthnP256.js';
8
+ const defaultPrfInput = Bytes.fromString('ox.webauthn.prf.v1');
9
+ /**
10
+ * Creates a WebAuthn credential and optionally returns its credential-bound
11
+ * PRF output.
12
+ *
13
+ * @example
14
+ * ```ts twoslash
15
+ * import { Secp256k1, WebAuthn } from 'ox'
16
+ *
17
+ * const credential = await WebAuthn.createCredential({
18
+ * name: 'Example',
19
+ * prf: true
20
+ * })
21
+ * const privateKey = Secp256k1.fromPrf(credential.prf)
22
+ * ```
23
+ *
24
+ * `prf: true` uses the stable input `ox.webauthn.prf.v1`. Pass
25
+ * `{ input }` to use an application-owned input instead.
26
+ *
27
+ * When credential creation enables PRF but does not return an output, this
28
+ * function performs a follow-up assertion. The user may be prompted twice.
29
+ *
30
+ * If PRF evaluation fails after registration, the thrown error retains the
31
+ * created credential on its `credential` property.
32
+ *
33
+ * :::warning
34
+ *
35
+ * PRF output is secret application-held key material. Native
36
+ * `credential.raw.toJSON()` output includes extension results, so do not
37
+ * serialize or send the raw credential.
38
+ *
39
+ * PRF-derived keys are software keys. Code on any origin allowed to use the
40
+ * same RP ID can request the same output after user verification.
41
+ *
42
+ * :::
43
+ *
44
+ * @param options - Credential creation and PRF options.
45
+ * @returns The credential, with a copied PRF output when requested.
46
+ */
47
+ export async function createCredential(options) {
48
+ if (!('prf' in options) || options.prf === undefined)
49
+ return WebAuthnP256.createCredential(options);
50
+ if ('publicKey' in options)
51
+ throw new InvalidOptionsError();
52
+ const rpId = options.rp?.id;
53
+ const { authenticatorSelection = {
54
+ requireResidentKey: true,
55
+ residentKey: 'required',
56
+ }, challenge = Hex.random(32), createFn, extensions, getFn, prf, timeout, ...rest } = options;
57
+ assertExtensions(extensions);
58
+ const input = getPrfInput(prf);
59
+ const credential = await Registration.create({
60
+ ...rest,
61
+ authenticatorSelection: {
62
+ ...authenticatorSelection,
63
+ userVerification: 'required',
64
+ },
65
+ challenge,
66
+ ...(createFn && { createFn }),
67
+ extensions: {
68
+ ...extensions,
69
+ prf: {
70
+ eval: {
71
+ first: input,
72
+ },
73
+ },
74
+ },
75
+ ...(timeout !== undefined && { timeout }),
76
+ });
77
+ const result = (() => {
78
+ try {
79
+ return credential.raw.getClientExtensionResults().prf;
80
+ }
81
+ catch (cause) {
82
+ throw new PrfEvaluationFailedError({
83
+ cause: cause,
84
+ credential,
85
+ });
86
+ }
87
+ })();
88
+ const output = result?.results?.first;
89
+ if (output !== undefined)
90
+ return {
91
+ ...credential,
92
+ prf: parsePrfOutput(output, {
93
+ credential,
94
+ }),
95
+ };
96
+ if (result?.enabled !== true)
97
+ throw new PrfNotSupportedError({
98
+ credential,
99
+ });
100
+ try {
101
+ const result = await getCredential({
102
+ credentialId: credential.id,
103
+ ...(getFn && { getFn }),
104
+ prf: {
105
+ input,
106
+ },
107
+ ...(rpId && { rpId }),
108
+ ...(timeout !== undefined && { timeout }),
109
+ });
110
+ if (result.id !== credential.id)
111
+ throw new Error(`Expected credential "${credential.id}", but received "${result.id}".`);
112
+ return {
113
+ ...credential,
114
+ prf: result.prf,
115
+ };
116
+ }
117
+ catch (cause) {
118
+ throw new PrfEvaluationFailedError({
119
+ cause: cause,
120
+ credential,
121
+ });
122
+ }
123
+ }
124
+ /**
125
+ * Requests a WebAuthn credential and returns its credential-bound PRF output.
126
+ *
127
+ * @example
128
+ * ```ts twoslash
129
+ * import { Secp256k1, WebAuthn } from 'ox'
130
+ *
131
+ * const { prf } = await WebAuthn.getCredential({
132
+ * credentialId: 'oZ48...',
133
+ * prf: true
134
+ * })
135
+ * const privateKey = Secp256k1.fromPrf(prf)
136
+ * ```
137
+ *
138
+ * `prf: true` uses the stable input `ox.webauthn.prf.v1`. Pass
139
+ * `{ input }` to use an application-owned input instead.
140
+ *
141
+ * When more than one credential can be selected, check `result.id`
142
+ * before using the PRF output.
143
+ *
144
+ * :::warning
145
+ *
146
+ * PRF output is secret application-held key material. Native
147
+ * `response.raw.toJSON()` output includes extension results, so do not
148
+ * serialize or send the raw response.
149
+ *
150
+ * :::
151
+ *
152
+ * @param options - Credential request and PRF options.
153
+ * @returns The requested credential and a copied 32-byte PRF output.
154
+ */
155
+ export async function getCredential(options) {
156
+ if ('publicKey' in options)
157
+ throw new InvalidOptionsError();
158
+ const { challenge = Hex.random(32), extensions, getFn = (options) => window.navigator.credentials.get(options), prf, ...rest } = options;
159
+ assertExtensions(extensions);
160
+ const input = getPrfInput(prf);
161
+ const request = Authentication.getOptions({
162
+ ...rest,
163
+ challenge,
164
+ extensions: {
165
+ ...extensions,
166
+ prf: {
167
+ eval: {
168
+ first: input,
169
+ },
170
+ },
171
+ },
172
+ userVerification: 'required',
173
+ });
174
+ const raw = await (async () => {
175
+ try {
176
+ return (await getFn(request));
177
+ }
178
+ catch (cause) {
179
+ throw new GetCredentialFailedError({
180
+ cause: cause,
181
+ });
182
+ }
183
+ })();
184
+ if (!raw)
185
+ throw new GetCredentialFailedError();
186
+ const response = {
187
+ id: raw.id,
188
+ raw,
189
+ };
190
+ const output = (() => {
191
+ try {
192
+ return response.raw.getClientExtensionResults().prf?.results?.first;
193
+ }
194
+ catch (cause) {
195
+ throw new PrfEvaluationFailedError({
196
+ cause: cause,
197
+ response,
198
+ });
199
+ }
200
+ })();
201
+ if (output === undefined)
202
+ throw new PrfUnavailableError({
203
+ response,
204
+ });
205
+ return {
206
+ ...response,
207
+ prf: parsePrfOutput(output, {
208
+ response,
209
+ }),
210
+ };
211
+ }
212
+ function getPrfInput(prf) {
213
+ return (prf === true ? defaultPrfInput : prf.input).slice();
214
+ }
215
+ function parsePrfOutput(value, context) {
216
+ if (ArrayBuffer.isView(value)) {
217
+ if (value.byteLength !== 32)
218
+ throw new InvalidPrfOutputError({
219
+ ...context,
220
+ size: value.byteLength,
221
+ });
222
+ return new Uint8Array(value.buffer, value.byteOffset, value.byteLength).slice();
223
+ }
224
+ const arrayBufferSize = getArrayBufferSize(value);
225
+ if (arrayBufferSize !== undefined) {
226
+ if (arrayBufferSize !== 32)
227
+ throw new InvalidPrfOutputError({
228
+ ...context,
229
+ size: arrayBufferSize,
230
+ });
231
+ return new Uint8Array(value).slice();
232
+ }
233
+ if (typeof value === 'object' &&
234
+ value !== null &&
235
+ 'length' in value &&
236
+ typeof value.length === 'number') {
237
+ if (value.length !== 32)
238
+ throw new InvalidPrfOutputError({
239
+ ...context,
240
+ size: value.length,
241
+ });
242
+ const output = new Uint8Array(32);
243
+ for (let index = 0; index < output.length; index++) {
244
+ const byte = value[index];
245
+ if (typeof byte !== 'number' ||
246
+ !Number.isInteger(byte) ||
247
+ byte < 0 ||
248
+ byte > 255)
249
+ throw new InvalidPrfOutputError(context);
250
+ output[index] = byte;
251
+ }
252
+ return output;
253
+ }
254
+ throw new InvalidPrfOutputError(context);
255
+ }
256
+ function getArrayBufferSize(value) {
257
+ try {
258
+ return Object.getOwnPropertyDescriptor(ArrayBuffer.prototype, 'byteLength')?.get?.call(value);
259
+ }
260
+ catch {
261
+ return undefined;
262
+ }
263
+ }
264
+ function assertExtensions(extensions) {
265
+ if (extensions?.prf)
266
+ throw new InvalidExtensionError();
267
+ }
268
+ /** Thrown when a caller supplies the managed `prf` extension. */
269
+ export class InvalidExtensionError extends Errors.BaseError {
270
+ name = 'WebAuthn.InvalidExtensionError';
271
+ constructor() {
272
+ super('The `prf` extension is managed by this function.');
273
+ }
274
+ }
275
+ /** Thrown when raw credential options are combined with managed PRF evaluation. */
276
+ export class InvalidOptionsError extends Errors.BaseError {
277
+ name = 'WebAuthn.InvalidOptionsError';
278
+ constructor() {
279
+ super('The `publicKey` option cannot be combined with managed PRF evaluation.');
280
+ }
281
+ }
282
+ /** Thrown when a WebAuthn PRF result is not a valid 32-byte output. */
283
+ export class InvalidPrfOutputError extends Errors.BaseError {
284
+ /** Credential that returned the invalid PRF output, when created in this operation. */
285
+ credential;
286
+ /** Authentication response that returned the invalid PRF output, when available. */
287
+ response;
288
+ name = 'WebAuthn.InvalidPrfOutputError';
289
+ constructor({ credential, response, size, }) {
290
+ super(size === undefined
291
+ ? 'Expected a 32-byte PRF output.'
292
+ : `Expected a 32-byte PRF output, but received ${size} bytes.`);
293
+ this.credential = credential;
294
+ this.response = response;
295
+ }
296
+ }
297
+ /** Thrown when a created credential does not support PRF evaluation. */
298
+ export class PrfNotSupportedError extends Errors.BaseError {
299
+ /** Credential that was created before PRF support was determined. */
300
+ credential;
301
+ name = 'WebAuthn.PrfNotSupportedError';
302
+ constructor({ credential }) {
303
+ super('The created credential does not support PRF evaluation.');
304
+ this.credential = credential;
305
+ }
306
+ }
307
+ /** Thrown when a credential assertion does not return a PRF output. */
308
+ export class PrfUnavailableError extends Errors.BaseError {
309
+ /** Authentication response that did not contain a PRF output. */
310
+ response;
311
+ name = 'WebAuthn.PrfUnavailableError';
312
+ constructor({ response }) {
313
+ super('The credential did not return a PRF output.');
314
+ this.response = response;
315
+ }
316
+ }
317
+ /** Thrown when WebAuthn PRF evaluation fails after a credential ceremony. */
318
+ export class PrfEvaluationFailedError extends Errors.BaseError {
319
+ /** Credential that was created before PRF evaluation failed, when available. */
320
+ credential;
321
+ /** Authentication response produced before PRF evaluation failed, when available. */
322
+ response;
323
+ name = 'WebAuthn.PrfEvaluationFailedError';
324
+ constructor({ cause, credential, response, }) {
325
+ super(credential
326
+ ? 'Created a credential, but failed to evaluate its PRF.'
327
+ : 'Failed to evaluate the credential PRF.', {
328
+ cause,
329
+ });
330
+ this.credential = credential;
331
+ this.response = response;
332
+ }
333
+ }
334
+ /** Thrown when a WebAuthn credential request fails. */
335
+ export class GetCredentialFailedError extends Errors.BaseError {
336
+ name = 'WebAuthn.GetCredentialFailedError';
337
+ constructor({ cause } = {}) {
338
+ super('Failed to request credential.', {
339
+ cause,
340
+ });
341
+ }
342
+ }
343
+ //# sourceMappingURL=WebAuthn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"WebAuthn.js","sourceRoot":"","sources":["../../src/core/WebAuthn.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,YAAY,CAAA;AACnC,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAE/B,OAAO,KAAK,YAAY,MAAM,mBAAmB,CAAA;AACjD,OAAO,KAAK,cAAc,MAAM,+BAA+B,CAAA;AAE/D,OAAO,KAAK,YAAY,MAAM,6BAA6B,CAAA;AAG3D,cAAc,mBAAmB,CAAA;AAEjC,MAAM,eAAe,GAAG,KAAK,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAA;AAe9D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAqCG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAEpC,OAAgB;IAChB,IAAI,CAAC,CAAC,KAAK,IAAI,OAAO,CAAC,IAAI,OAAO,CAAC,GAAG,KAAK,SAAS;QAClD,OAAO,YAAY,CAAC,gBAAgB,CAAC,OAAO,CAAU,CAAA;IACxD,IAAI,WAAW,IAAI,OAAO;QAAE,MAAM,IAAI,mBAAmB,EAAE,CAAA;IAE3D,MAAM,IAAI,GAAG,OAAO,CAAC,EAAE,EAAE,EAAE,CAAA;IAC3B,MAAM,EACJ,sBAAsB,GAAG;QACvB,kBAAkB,EAAE,IAAI;QACxB,WAAW,EAAE,UAAU;KACxB,EACD,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAC1B,QAAQ,EACR,UAAU,EACV,KAAK,EACL,GAAG,EACH,OAAO,EACP,GAAG,IAAI,EACR,GAAG,OAAO,CAAA;IACX,gBAAgB,CAAC,UAAU,CAAC,CAAA;IAE5B,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAA;IAC9B,MAAM,UAAU,GAAG,MAAM,YAAY,CAAC,MAAM,CAAC;QAC3C,GAAG,IAAI;QACP,sBAAsB,EAAE;YACtB,GAAG,sBAAsB;YACzB,gBAAgB,EAAE,UAAU;SAC7B;QACD,SAAS;QACT,GAAG,CAAC,QAAQ,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC7B,UAAU,EAAE;YACV,GAAG,UAAU;YACb,GAAG,EAAE;gBACH,IAAI,EAAE;oBACJ,KAAK,EAAE,KAAK;iBACb;aACF;SACF;QACD,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,CAAC;KACX,CAAC,CAAA;IAEjC,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC;YACH,OAAO,UAAU,CAAC,GAAG,CAAC,yBAAyB,EAAE,CAAC,GAAG,CAAA;QACvD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,wBAAwB,CAAC;gBACjC,KAAK,EAAE,KAAc;gBACrB,UAAU;aACX,CAAC,CAAA;QACJ,CAAC;IACH,CAAC,CAAC,EAAE,CAAA;IACJ,MAAM,MAAM,GAAG,MAAM,EAAE,OAAO,EAAE,KAAK,CAAA;IACrC,IAAI,MAAM,KAAK,SAAS;QACtB,OAAO;YACL,GAAG,UAAU;YACb,GAAG,EAAE,cAAc,CAAC,MAAM,EAAE;gBAC1B,UAAU;aACX,CAAC;SACM,CAAA;IAEZ,IAAI,MAAM,EAAE,OAAO,KAAK,IAAI;QAC1B,MAAM,IAAI,oBAAoB,CAAC;YAC7B,UAAU;SACX,CAAC,CAAA;IAEJ,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC;YACjC,YAAY,EAAE,UAAU,CAAC,EAAE;YAC3B,GAAG,CAAC,KAAK,IAAI,EAAE,KAAK,EAAE,CAAC;YACvB,GAAG,EAAE;gBACH,KAAK;aACN;YACD,GAAG,CAAC,IAAI,IAAI,EAAE,IAAI,EAAE,CAAC;YACrB,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,CAAC;SAC1C,CAAC,CAAA;QACF,IAAI,MAAM,CAAC,EAAE,KAAK,UAAU,CAAC,EAAE;YAC7B,MAAM,IAAI,KAAK,CACb,wBAAwB,UAAU,CAAC,EAAE,oBAAoB,MAAM,CAAC,EAAE,IAAI,CACvE,CAAA;QACH,OAAO;YACL,GAAG,UAAU;YACb,GAAG,EAAE,MAAM,CAAC,GAAG;SACP,CAAA;IACZ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,wBAAwB,CAAC;YACjC,KAAK,EAAE,KAAc;YACrB,UAAU;SACX,CAAC,CAAA;IACJ,CAAC;AACH,CAAC;AA0ED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA8BG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,OAA8B;IAE9B,IAAI,WAAW,IAAI,OAAO;QAAE,MAAM,IAAI,mBAAmB,EAAE,CAAA;IAE3D,MAAM,EACJ,SAAS,GAAG,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAC1B,UAAU,EACV,KAAK,GAAG,CAAC,OAAmD,EAAE,EAAE,CAC9D,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,GAAG,CAAC,OAAgB,CAAC,EACpD,GAAG,EACH,GAAG,IAAI,EACR,GAAG,OAAO,CAAA;IACX,gBAAgB,CAAC,UAAU,CAAC,CAAA;IAE5B,MAAM,KAAK,GAAG,WAAW,CAAC,GAAG,CAAC,CAAA;IAC9B,MAAM,OAAO,GAAG,cAAc,CAAC,UAAU,CAAC;QACxC,GAAG,IAAI;QACP,SAAS;QACT,UAAU,EAAE;YACV,GAAG,UAAU;YACb,GAAG,EAAE;gBACH,IAAI,EAAE;oBACJ,KAAK,EAAE,KAAK;iBACb;aACF;SACF;QACD,gBAAgB,EAAE,UAAU;KAC7B,CAAC,CAAA;IACF,MAAM,GAAG,GAAG,MAAM,CAAC,KAAK,IAAI,EAAE;QAC5B,IAAI,CAAC;YACH,OAAO,CAAC,MAAM,KAAK,CAAC,OAAO,CAAC,CAAqC,CAAA;QACnE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,wBAAwB,CAAC;gBACjC,KAAK,EAAE,KAAc;aACtB,CAAC,CAAA;QACJ,CAAC;IACH,CAAC,CAAC,EAAE,CAAA;IACJ,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,wBAAwB,EAAE,CAAA;IAE9C,MAAM,QAAQ,GAAG;QACf,EAAE,EAAE,GAAG,CAAC,EAAE;QACV,GAAG;KACJ,CAAA;IAED,MAAM,MAAM,GAAG,CAAC,GAAG,EAAE;QACnB,IAAI,CAAC;YACH,OAAO,QAAQ,CAAC,GAAG,CAAC,yBAAyB,EAAE,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,CAAA;QACrE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,wBAAwB,CAAC;gBACjC,KAAK,EAAE,KAAc;gBACrB,QAAQ;aACT,CAAC,CAAA;QACJ,CAAC;IACH,CAAC,CAAC,EAAE,CAAA;IACJ,IAAI,MAAM,KAAK,SAAS;QACtB,MAAM,IAAI,mBAAmB,CAAC;YAC5B,QAAQ;SACT,CAAC,CAAA;IAEJ,OAAO;QACL,GAAG,QAAQ;QACX,GAAG,EAAE,cAAc,CAAC,MAAM,EAAE;YAC1B,QAAQ;SACT,CAAC;KACH,CAAA;AACH,CAAC;AAsDD,SAAS,WAAW,CAAC,GAAQ;IAC3B,OAAO,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,CAAA;AAC7D,CAAC;AAOD,SAAS,cAAc,CACrB,KAAc,EACd,OAAyB;IAEzB,IAAI,WAAW,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QAC9B,IAAI,KAAK,CAAC,UAAU,KAAK,EAAE;YACzB,MAAM,IAAI,qBAAqB,CAAC;gBAC9B,GAAG,OAAO;gBACV,IAAI,EAAE,KAAK,CAAC,UAAU;aACvB,CAAC,CAAA;QACJ,OAAO,IAAI,UAAU,CACnB,KAAK,CAAC,MAAM,EACZ,KAAK,CAAC,UAAU,EAChB,KAAK,CAAC,UAAU,CACjB,CAAC,KAAK,EAAE,CAAA;IACX,CAAC;IAED,MAAM,eAAe,GAAG,kBAAkB,CAAC,KAAK,CAAC,CAAA;IACjD,IAAI,eAAe,KAAK,SAAS,EAAE,CAAC;QAClC,IAAI,eAAe,KAAK,EAAE;YACxB,MAAM,IAAI,qBAAqB,CAAC;gBAC9B,GAAG,OAAO;gBACV,IAAI,EAAE,eAAe;aACtB,CAAC,CAAA;QACJ,OAAO,IAAI,UAAU,CAAC,KAAoB,CAAC,CAAC,KAAK,EAAE,CAAA;IACrD,CAAC;IAED,IACE,OAAO,KAAK,KAAK,QAAQ;QACzB,KAAK,KAAK,IAAI;QACd,QAAQ,IAAI,KAAK;QACjB,OAAO,KAAK,CAAC,MAAM,KAAK,QAAQ,EAChC,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE;YACrB,MAAM,IAAI,qBAAqB,CAAC;gBAC9B,GAAG,OAAO;gBACV,IAAI,EAAE,KAAK,CAAC,MAAM;aACnB,CAAC,CAAA;QAEJ,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,EAAE,CAAC,CAAA;QACjC,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,MAAM,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;YACnD,MAAM,IAAI,GAAI,KAA4B,CAAC,KAAK,CAAC,CAAA;YACjD,IACE,OAAO,IAAI,KAAK,QAAQ;gBACxB,CAAC,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC;gBACvB,IAAI,GAAG,CAAC;gBACR,IAAI,GAAG,GAAG;gBAEV,MAAM,IAAI,qBAAqB,CAAC,OAAO,CAAC,CAAA;YAC1C,MAAM,CAAC,KAAK,CAAC,GAAG,IAAI,CAAA;QACtB,CAAC;QACD,OAAO,MAAM,CAAA;IACf,CAAC;IAED,MAAM,IAAI,qBAAqB,CAAC,OAAO,CAAC,CAAA;AAC1C,CAAC;AAED,SAAS,kBAAkB,CAAC,KAAc;IACxC,IAAI,CAAC;QACH,OAAO,MAAM,CAAC,wBAAwB,CACpC,WAAW,CAAC,SAAS,EACrB,YAAY,CACb,EAAE,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAA;IACrB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,SAAS,CAAA;IAClB,CAAC;AACH,CAAC;AAED,SAAS,gBAAgB,CACvB,UAAkE;IAElE,IAAI,UAAU,EAAE,GAAG;QAAE,MAAM,IAAI,qBAAqB,EAAE,CAAA;AACxD,CAAC;AAED,iEAAiE;AACjE,MAAM,OAAO,qBAAsB,SAAQ,MAAM,CAAC,SAAS;IACvC,IAAI,GAAG,gCAAgC,CAAA;IAEzD;QACE,KAAK,CAAC,kDAAkD,CAAC,CAAA;IAC3D,CAAC;CACF;AAED,mFAAmF;AACnF,MAAM,OAAO,mBAAoB,SAAQ,MAAM,CAAC,SAAS;IACrC,IAAI,GAAG,8BAA8B,CAAA;IAEvD;QACE,KAAK,CACH,wEAAwE,CACzE,CAAA;IACH,CAAC;CACF;AAED,uEAAuE;AACvE,MAAM,OAAO,qBAAsB,SAAQ,MAAM,CAAC,SAAS;IACzD,uFAAuF;IAC9E,UAAU,CAAoC;IAEvD,oFAAoF;IAC3E,QAAQ,CAAqC;IAEpC,IAAI,GAAG,gCAAgC,CAAA;IAEzD,YAAY,EACV,UAAU,EACV,QAAQ,EACR,IAAI,GAGL;QACC,KAAK,CACH,IAAI,KAAK,SAAS;YAChB,CAAC,CAAC,gCAAgC;YAClC,CAAC,CAAC,+CAA+C,IAAI,SAAS,CACjE,CAAA;QACD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC1B,CAAC;CACF;AAED,wEAAwE;AACxE,MAAM,OAAO,oBAAqB,SAAQ,MAAM,CAAC,SAAS;IACxD,qEAAqE;IAC5D,UAAU,CAAuB;IAExB,IAAI,GAAG,+BAA+B,CAAA;IAExD,YAAY,EAAE,UAAU,EAAyC;QAC/D,KAAK,CAAC,yDAAyD,CAAC,CAAA;QAChE,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;IAC9B,CAAC;CACF;AAED,uEAAuE;AACvE,MAAM,OAAO,mBAAoB,SAAQ,MAAM,CAAC,SAAS;IACvD,iEAAiE;IACxD,QAAQ,CAAwB;IAEvB,IAAI,GAAG,8BAA8B,CAAA;IAEvD,YAAY,EAAE,QAAQ,EAAwC;QAC5D,KAAK,CAAC,6CAA6C,CAAC,CAAA;QACpD,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC1B,CAAC;CACF;AAED,6EAA6E;AAC7E,MAAM,OAAO,wBAAyB,SAAQ,MAAM,CAAC,SAAgB;IACnE,gFAAgF;IACvE,UAAU,CAAoC;IAEvD,qFAAqF;IAC5E,QAAQ,CAAqC;IAEpC,IAAI,GAAG,mCAAmC,CAAA;IAE5D,YAAY,EACV,KAAK,EACL,UAAU,EACV,QAAQ,GAKT;QACC,KAAK,CACH,UAAU;YACR,CAAC,CAAC,uDAAuD;YACzD,CAAC,CAAC,wCAAwC,EAC5C;YACE,KAAK;SACN,CACF,CAAA;QACD,IAAI,CAAC,UAAU,GAAG,UAAU,CAAA;QAC5B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAA;IAC1B,CAAC;CACF;AAED,uDAAuD;AACvD,MAAM,OAAO,wBAAyB,SAAQ,MAAM,CAAC,SAAgB;IACjD,IAAI,GAAG,mCAAmC,CAAA;IAE5D,YAAY,EAAE,KAAK,KAAoC,EAAE;QACvD,KAAK,CAAC,+BAA+B,EAAE;YACrC,KAAK;SACN,CAAC,CAAA;IACJ,CAAC;CACF"}