@fastxyz/fastid-sdk 0.1.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 (95) hide show
  1. package/LICENSE +202 -0
  2. package/README.md +65 -0
  3. package/dist/address.d.ts +12 -0
  4. package/dist/address.d.ts.map +1 -0
  5. package/dist/address.js +57 -0
  6. package/dist/address.js.map +1 -0
  7. package/dist/canonical-json.d.ts +12 -0
  8. package/dist/canonical-json.d.ts.map +1 -0
  9. package/dist/canonical-json.js +95 -0
  10. package/dist/canonical-json.js.map +1 -0
  11. package/dist/claim-data.d.ts +9 -0
  12. package/dist/claim-data.d.ts.map +1 -0
  13. package/dist/claim-data.js +151 -0
  14. package/dist/claim-data.js.map +1 -0
  15. package/dist/claim-fee.d.ts +26 -0
  16. package/dist/claim-fee.d.ts.map +1 -0
  17. package/dist/claim-fee.js +144 -0
  18. package/dist/claim-fee.js.map +1 -0
  19. package/dist/claim-preflight.d.ts +7 -0
  20. package/dist/claim-preflight.d.ts.map +1 -0
  21. package/dist/claim-preflight.js +34 -0
  22. package/dist/claim-preflight.js.map +1 -0
  23. package/dist/claim-tx.d.ts +35 -0
  24. package/dist/claim-tx.d.ts.map +1 -0
  25. package/dist/claim-tx.js +140 -0
  26. package/dist/claim-tx.js.map +1 -0
  27. package/dist/claims.d.ts +44 -0
  28. package/dist/claims.d.ts.map +1 -0
  29. package/dist/claims.js +348 -0
  30. package/dist/claims.js.map +1 -0
  31. package/dist/client.d.ts +37 -0
  32. package/dist/client.d.ts.map +1 -0
  33. package/dist/client.js +139 -0
  34. package/dist/client.js.map +1 -0
  35. package/dist/errors.d.ts +252 -0
  36. package/dist/errors.d.ts.map +1 -0
  37. package/dist/errors.js +410 -0
  38. package/dist/errors.js.map +1 -0
  39. package/dist/fasttx.d.ts +10 -0
  40. package/dist/fasttx.d.ts.map +1 -0
  41. package/dist/fasttx.js +35 -0
  42. package/dist/fasttx.js.map +1 -0
  43. package/dist/http.d.ts +15 -0
  44. package/dist/http.d.ts.map +1 -0
  45. package/dist/http.js +67 -0
  46. package/dist/http.js.map +1 -0
  47. package/dist/index.d.ts +12 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +7 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/name.d.ts +15 -0
  52. package/dist/name.d.ts.map +1 -0
  53. package/dist/name.js +34 -0
  54. package/dist/name.js.map +1 -0
  55. package/dist/networks.d.ts +8 -0
  56. package/dist/networks.d.ts.map +1 -0
  57. package/dist/networks.js +32 -0
  58. package/dist/networks.js.map +1 -0
  59. package/dist/profile-message.d.ts +22 -0
  60. package/dist/profile-message.d.ts.map +1 -0
  61. package/dist/profile-message.js +53 -0
  62. package/dist/profile-message.js.map +1 -0
  63. package/dist/profile.d.ts +30 -0
  64. package/dist/profile.d.ts.map +1 -0
  65. package/dist/profile.js +363 -0
  66. package/dist/profile.js.map +1 -0
  67. package/dist/proofs.d.ts +92 -0
  68. package/dist/proofs.d.ts.map +1 -0
  69. package/dist/proofs.js +770 -0
  70. package/dist/proofs.js.map +1 -0
  71. package/dist/reads.d.ts +76 -0
  72. package/dist/reads.d.ts.map +1 -0
  73. package/dist/reads.js +244 -0
  74. package/dist/reads.js.map +1 -0
  75. package/dist/report-wire.d.ts +35 -0
  76. package/dist/report-wire.d.ts.map +1 -0
  77. package/dist/report-wire.js +131 -0
  78. package/dist/report-wire.js.map +1 -0
  79. package/dist/report.d.ts +36 -0
  80. package/dist/report.d.ts.map +1 -0
  81. package/dist/report.js +255 -0
  82. package/dist/report.js.map +1 -0
  83. package/dist/share.d.ts +9 -0
  84. package/dist/share.d.ts.map +1 -0
  85. package/dist/share.js +16 -0
  86. package/dist/share.js.map +1 -0
  87. package/dist/signer.d.ts +23 -0
  88. package/dist/signer.d.ts.map +1 -0
  89. package/dist/signer.js +73 -0
  90. package/dist/signer.js.map +1 -0
  91. package/dist/verify.d.ts +6 -0
  92. package/dist/verify.d.ts.map +1 -0
  93. package/dist/verify.js +33 -0
  94. package/dist/verify.js.map +1 -0
  95. package/package.json +53 -0
package/dist/claims.js ADDED
@@ -0,0 +1,348 @@
1
+ import { claimDataHex, encodeClaimDataV2, isClaimDataKind, } from "./claim-data.js";
2
+ import { classifyPreflight, mayReachSettlement } from "./claim-preflight.js";
3
+ import { feeTokenForState, resolveClaimFee, } from "./claim-fee.js";
4
+ import { ClaimNotHeldError, FeeUnavailableError, NotSettledError, IndeterminateSubmissionError, InsufficientFundsError, InvalidClaimError, InvalidPendingRegistrationError, LocalVerificationError, NameUnavailableError, NonceConflictError, NonceFetchError, PendingNetworkMismatchError, PreSubmitError, PropertyAlreadyClaimedError, RegistrationPendingError, RegistrationTerminalError, SettlementMismatchError, SigningError, WrongNetworkError, } from "./errors.js";
5
+ import { buildExternalClaimBytes, getNextNonce, IndeterminateProviderSubmissionError, submitSignedClaim, } from "./claim-tx.js";
6
+ import { verifyStrict } from "./verify.js";
7
+ function isRevocableClaimKind(value) {
8
+ return isClaimDataKind(value) && value !== "revoke";
9
+ }
10
+ function reasonOf(body) {
11
+ if (!body || typeof body !== "object")
12
+ return undefined;
13
+ const reason = body.reason;
14
+ return typeof reason === "string" ? reason : undefined;
15
+ }
16
+ const LOWER_HEX_32 = /^[0-9a-f]{64}$/;
17
+ const I64_MAX_DECIMAL = "9223372036854775807";
18
+ function isProtocolNonce(value) {
19
+ if (typeof value !== "string" || !/^[0-9]+$/.test(value))
20
+ return false;
21
+ const normalized = value.replace(/^0+(?=\d)/, "");
22
+ return (normalized.length < I64_MAX_DECIMAL.length ||
23
+ (normalized.length === I64_MAX_DECIMAL.length && normalized <= I64_MAX_DECIMAL));
24
+ }
25
+ export function snapshotPendingRegistration(value) {
26
+ if (typeof value !== "object" || value === null) {
27
+ throw new InvalidPendingRegistrationError(undefined, "record must be an object");
28
+ }
29
+ const callerOwned = value;
30
+ let fields;
31
+ try {
32
+ fields = {
33
+ op: callerOwned.op,
34
+ network: callerOwned.network,
35
+ addressHex: callerOwned.addressHex,
36
+ name: callerOwned.name,
37
+ kind: callerOwned.kind,
38
+ value: callerOwned.value,
39
+ nonce: callerOwned.nonce,
40
+ txIdHex: callerOwned.txIdHex,
41
+ };
42
+ }
43
+ catch {
44
+ throw new InvalidPendingRegistrationError(undefined, "record properties could not be read");
45
+ }
46
+ const { op, network, addressHex, name, kind, value: claimValue, nonce, txIdHex, } = fields;
47
+ if (op !== "claim" && op !== "revoke") {
48
+ throw new InvalidPendingRegistrationError(op, "unsupported operation");
49
+ }
50
+ if (typeof network !== "string" || network.length === 0) {
51
+ throw new InvalidPendingRegistrationError(op, "network must be a non-empty string");
52
+ }
53
+ if (typeof addressHex !== "string" || !LOWER_HEX_32.test(addressHex)) {
54
+ throw new InvalidPendingRegistrationError(op, "addressHex must be 64-character lowercase hex");
55
+ }
56
+ if (typeof txIdHex !== "string" || !LOWER_HEX_32.test(txIdHex)) {
57
+ throw new InvalidPendingRegistrationError(op, "txIdHex must be 64-character lowercase hex");
58
+ }
59
+ if (!isProtocolNonce(nonce)) {
60
+ throw new InvalidPendingRegistrationError(op, "nonce must be a decimal string at most i64::MAX");
61
+ }
62
+ if (name !== undefined && typeof name !== "string") {
63
+ throw new InvalidPendingRegistrationError(op, "name must be a string when present");
64
+ }
65
+ if (kind !== undefined && !isClaimDataKind(kind)) {
66
+ throw new InvalidPendingRegistrationError(op, "kind is unsupported when present");
67
+ }
68
+ if (claimValue !== undefined && typeof claimValue !== "string") {
69
+ throw new InvalidPendingRegistrationError(op, "value must be a string when present");
70
+ }
71
+ return {
72
+ op,
73
+ network,
74
+ addressHex,
75
+ ...(name !== undefined ? { name } : {}),
76
+ ...(kind !== undefined ? { kind } : {}),
77
+ ...(claimValue !== undefined ? { value: claimValue } : {}),
78
+ nonce,
79
+ txIdHex,
80
+ };
81
+ }
82
+ async function responseBody(response) {
83
+ const text = await response.text();
84
+ if (text.length === 0)
85
+ return null;
86
+ try {
87
+ return JSON.parse(text);
88
+ }
89
+ catch {
90
+ return text;
91
+ }
92
+ }
93
+ export class ClaimService {
94
+ #config;
95
+ #signer;
96
+ #provider;
97
+ #reads;
98
+ #feeSource;
99
+ #fetch;
100
+ constructor(options) {
101
+ this.#config = options.config;
102
+ this.#signer = options.signer;
103
+ this.#provider = options.provider;
104
+ this.#reads = options.reads;
105
+ this.#feeSource = options.feeSource;
106
+ this.#fetch = options.fetchImpl;
107
+ }
108
+ async claimName(name) {
109
+ let identity;
110
+ try {
111
+ identity = await this.#reads.identity(this.#signer.address);
112
+ }
113
+ catch (cause) {
114
+ throw new PreSubmitError("identity preflight is indeterminate; refusing to continue to payment", { cause });
115
+ }
116
+ if (identity?.address === this.#signer.address &&
117
+ identity.network === this.#config.networkId &&
118
+ identity.name !== undefined) {
119
+ throw new NameUnavailableError("address_already_named");
120
+ }
121
+ let availability;
122
+ try {
123
+ availability = await this.#reads.availability(name);
124
+ }
125
+ catch {
126
+ availability = "failed";
127
+ }
128
+ const verdict = classifyPreflight(availability, this.#config.networkId);
129
+ if (!mayReachSettlement(verdict))
130
+ throw new NameUnavailableError(verdict);
131
+ return this.#settle("claim", "name", name, { name });
132
+ }
133
+ async claimProperty(kind, value) {
134
+ if (kind !== "work")
135
+ throw new InvalidClaimError();
136
+ const status = await this.#reads.propertyClaimed(kind, value);
137
+ if (status.claimed)
138
+ throw new PropertyAlreadyClaimedError(kind, value);
139
+ return this.#settle("claim", kind, value, { kind, value });
140
+ }
141
+ /**
142
+ * Settlement entry used only after ProofService has established the external
143
+ * proof gate. Proven claims are unavailable through public claim methods.
144
+ */
145
+ async settleProvenProperty(kind, value) {
146
+ if (kind !== "x") {
147
+ const status = await this.#reads.propertyClaimed(kind, value);
148
+ if (status.claimed)
149
+ throw new PropertyAlreadyClaimedError(kind, value);
150
+ }
151
+ return this.#settle("claim", kind, value, { kind, value });
152
+ }
153
+ importWork(doi) {
154
+ const canonical = doi
155
+ .trim()
156
+ .toLowerCase()
157
+ .replace(/^https?:\/\/(dx\.)?doi\.org\//, "")
158
+ .replace(/^doi:/, "");
159
+ return this.claimProperty("work", canonical);
160
+ }
161
+ async revoke(kind, value) {
162
+ if (!isRevocableClaimKind(kind)) {
163
+ throw new ClaimNotHeldError(kind, value);
164
+ }
165
+ const claimTx = await this.#claimTransactionForRevoke(kind, value);
166
+ return this.#settle("revoke", "revoke", claimTx, {
167
+ kind,
168
+ value,
169
+ });
170
+ }
171
+ async #claimTransactionForRevoke(kind, value) {
172
+ const validTx = (candidate) => typeof candidate === "string" && /^[0-9a-f]{64}$/.test(candidate);
173
+ try {
174
+ if (kind === "name") {
175
+ const identity = await this.#reads.identity(this.#signer.address);
176
+ if (identity.address === this.#signer.address &&
177
+ identity.network === this.#config.networkId &&
178
+ identity.name === value &&
179
+ validTx(identity.name_claim_tx)) {
180
+ return identity.name_claim_tx;
181
+ }
182
+ }
183
+ else if (kind === "work") {
184
+ const document = await this.#reads.resolve(this.#signer.address);
185
+ if (document.address === this.#signer.address &&
186
+ document.network === this.#config.networkId &&
187
+ Array.isArray(document.imported_works)) {
188
+ const held = document.imported_works.find((work) => typeof work === "object" &&
189
+ work !== null &&
190
+ work.doi === value &&
191
+ validTx(work.claim_tx));
192
+ if (held)
193
+ return held.claim_tx;
194
+ }
195
+ }
196
+ else {
197
+ const links = await this.#reads.links(this.#signer.address);
198
+ if (links.address === this.#signer.address &&
199
+ links.network === this.#config.networkId &&
200
+ Array.isArray(links.links)) {
201
+ const held = links.links.find((link) => link.kind === kind &&
202
+ link.value === value &&
203
+ (link.status === "pending" ||
204
+ link.status === "verified" ||
205
+ link.status === "stale") &&
206
+ validTx(link.claim_tx));
207
+ if (held)
208
+ return held.claim_tx;
209
+ }
210
+ }
211
+ }
212
+ catch {
213
+ // An unavailable or malformed owner read is not evidence that a claim is held.
214
+ }
215
+ throw new ClaimNotHeldError(kind, value);
216
+ }
217
+ retryRegistration(pending) {
218
+ return this.#register(snapshotPendingRegistration(pending));
219
+ }
220
+ async #settle(op, claimKind, claimValue, metadata) {
221
+ const fee = await resolveClaimFee(this.#config.networkId, this.#feeSource);
222
+ if (fee.kind === "unavailable")
223
+ throw new FeeUnavailableError();
224
+ let encoded;
225
+ try {
226
+ encoded = encodeClaimDataV2(claimKind, claimValue);
227
+ }
228
+ catch (cause) {
229
+ throw new InvalidClaimError({ cause });
230
+ }
231
+ let nonce;
232
+ try {
233
+ nonce = await getNextNonce(this.#provider, this.#signer.address);
234
+ }
235
+ catch (cause) {
236
+ throw new NonceFetchError({ cause });
237
+ }
238
+ let built;
239
+ try {
240
+ built = await buildExternalClaimBytes({
241
+ address: this.#signer.address,
242
+ networkId: this.#config.networkId,
243
+ nonce,
244
+ claimDataHex: claimDataHex(encoded),
245
+ feeToken: feeTokenForState(fee),
246
+ });
247
+ }
248
+ catch (cause) {
249
+ throw new PreSubmitError("could not build the claim transaction", { cause });
250
+ }
251
+ const signingBytes = new Uint8Array(built.bytes);
252
+ let signatureHex;
253
+ try {
254
+ signatureHex = await this.#signer.sign(signingBytes);
255
+ }
256
+ catch (cause) {
257
+ throw new SigningError({ cause });
258
+ }
259
+ if (!verifyStrict(signingBytes, signatureHex, this.#signer.publicKey)) {
260
+ throw new LocalVerificationError();
261
+ }
262
+ let settled;
263
+ try {
264
+ settled = await submitSignedClaim(this.#provider, built.versioned, signatureHex, this.#config.networkId, fee.kind === "quoted" ? fee.symbol : null);
265
+ }
266
+ catch (cause) {
267
+ if (cause instanceof NonceConflictError ||
268
+ cause instanceof InsufficientFundsError ||
269
+ cause instanceof PreSubmitError) {
270
+ throw cause;
271
+ }
272
+ const recovery = cause instanceof IndeterminateProviderSubmissionError ||
273
+ cause instanceof NotSettledError ||
274
+ cause instanceof SettlementMismatchError ||
275
+ cause instanceof WrongNetworkError
276
+ ? cause.recovery
277
+ : undefined;
278
+ throw new IndeterminateSubmissionError(this.#config.networkId, this.#signer.address, { cause, recovery });
279
+ }
280
+ const pending = {
281
+ op,
282
+ network: this.#config.networkId,
283
+ addressHex: this.#signer.signerHex,
284
+ ...metadata,
285
+ nonce: settled.nonce,
286
+ txIdHex: settled.txIdHex,
287
+ };
288
+ return this.#register(pending);
289
+ }
290
+ async #register(pending) {
291
+ if (pending.network !== this.#config.networkId) {
292
+ throw new PendingNetworkMismatchError(pending.network, this.#config.networkId);
293
+ }
294
+ const path = pending.op === "revoke" ? "/api/revoke" : "/api/claim";
295
+ let response;
296
+ try {
297
+ response = await this.#fetch(`${this.#config.idOrigin}${path}`, {
298
+ method: "POST",
299
+ headers: { "content-type": "application/json" },
300
+ body: JSON.stringify({
301
+ address: pending.addressHex,
302
+ nonce: pending.nonce,
303
+ tx_id: pending.txIdHex,
304
+ network: pending.network,
305
+ }),
306
+ });
307
+ }
308
+ catch (cause) {
309
+ throw new RegistrationPendingError(pending, { cause });
310
+ }
311
+ let body;
312
+ try {
313
+ body = await responseBody(response);
314
+ }
315
+ catch (cause) {
316
+ throw new RegistrationPendingError(pending, { cause });
317
+ }
318
+ if (response.status === 409) {
319
+ throw new RegistrationTerminalError("conflict", reasonOf(body));
320
+ }
321
+ if (response.status === 422) {
322
+ throw new RegistrationTerminalError("invalid", reasonOf(body));
323
+ }
324
+ if (!response.ok)
325
+ throw new RegistrationPendingError(pending);
326
+ const status = body && typeof body === "object"
327
+ ? body.status
328
+ : undefined;
329
+ if (status === "rejected") {
330
+ throw new RegistrationTerminalError("rejected", reasonOf(body));
331
+ }
332
+ const registered = status === "applied" ||
333
+ (pending.op === "claim" && status === "verified_external_link");
334
+ if (!registered) {
335
+ throw new RegistrationPendingError(pending);
336
+ }
337
+ return {
338
+ txIdHex: pending.txIdHex,
339
+ nonce: pending.nonce,
340
+ ...(pending.name
341
+ ? { profileUrl: `${this.#config.idOrigin}/${encodeURIComponent(pending.name)}` }
342
+ : {}),
343
+ registration: "registered",
344
+ outcome: status === "applied" ? "applied" : "verified",
345
+ };
346
+ }
347
+ }
348
+ //# sourceMappingURL=claims.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claims.js","sourceRoot":"","sources":["../src/claims.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,YAAY,EACZ,iBAAiB,EACjB,eAAe,GAEhB,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC7E,OAAO,EACL,gBAAgB,EAChB,eAAe,GAEhB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,eAAe,EACf,4BAA4B,EAC5B,sBAAsB,EACtB,iBAAiB,EACjB,+BAA+B,EAC/B,sBAAsB,EACtB,oBAAoB,EACpB,kBAAkB,EAClB,eAAe,EACf,2BAA2B,EAC3B,cAAc,EACd,2BAA2B,EAC3B,wBAAwB,EACxB,yBAAyB,EACzB,uBAAuB,EACvB,YAAY,EAEZ,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAIrB,OAAO,EACL,uBAAuB,EACvB,YAAY,EACZ,oCAAoC,EACpC,iBAAiB,GAClB,MAAM,eAAe,CAAC;AACvB,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAK3C,SAAS,oBAAoB,CAAC,KAAc;IAC1C,OAAO,eAAe,CAAC,KAAK,CAAC,IAAI,KAAK,KAAK,QAAQ,CAAC;AACtD,CAAC;AAuBD,SAAS,QAAQ,CAAC,IAAa;IAC7B,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IACxD,MAAM,MAAM,GAAI,IAA6B,CAAC,MAAM,CAAC;IACrD,OAAO,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;AACzD,CAAC;AAED,MAAM,YAAY,GAAG,gBAAgB,CAAC;AACtC,MAAM,eAAe,GAAG,qBAAqB,CAAC;AAE9C,SAAS,eAAe,CAAC,KAAc;IACrC,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IACvE,MAAM,UAAU,GAAG,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;IAClD,OAAO,CACL,UAAU,CAAC,MAAM,GAAG,eAAe,CAAC,MAAM;QAC1C,CAAC,UAAU,CAAC,MAAM,KAAK,eAAe,CAAC,MAAM,IAAI,UAAU,IAAI,eAAe,CAAC,CAChF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,2BAA2B,CAAC,KAAc;IACxD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,MAAM,IAAI,+BAA+B,CAAC,SAAS,EAAE,0BAA0B,CAAC,CAAC;IACnF,CAAC;IACD,MAAM,WAAW,GAAG,KAAgC,CAAC;IACrD,IAAI,MAA+B,CAAC;IACpC,IAAI,CAAC;QACH,MAAM,GAAG;YACP,EAAE,EAAE,WAAW,CAAC,EAAE;YAClB,OAAO,EAAE,WAAW,CAAC,OAAO;YAC5B,UAAU,EAAE,WAAW,CAAC,UAAU;YAClC,IAAI,EAAE,WAAW,CAAC,IAAI;YACtB,IAAI,EAAE,WAAW,CAAC,IAAI;YACtB,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,OAAO,EAAE,WAAW,CAAC,OAAO;SAC7B,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,+BAA+B,CACvC,SAAS,EACT,qCAAqC,CACtC,CAAC;IACJ,CAAC;IACD,MAAM,EACJ,EAAE,EACF,OAAO,EACP,UAAU,EACV,IAAI,EACJ,IAAI,EACJ,KAAK,EAAE,UAAU,EACjB,KAAK,EACL,OAAO,GACR,GAAG,MAAM,CAAC;IACX,IAAI,EAAE,KAAK,OAAO,IAAI,EAAE,KAAK,QAAQ,EAAE,CAAC;QACtC,MAAM,IAAI,+BAA+B,CAAC,EAAE,EAAE,uBAAuB,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxD,MAAM,IAAI,+BAA+B,CACvC,EAAE,EACF,oCAAoC,CACrC,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,EAAE,CAAC;QACrE,MAAM,IAAI,+BAA+B,CACvC,EAAE,EACF,+CAA+C,CAChD,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,OAAO,KAAK,QAAQ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC/D,MAAM,IAAI,+BAA+B,CACvC,EAAE,EACF,4CAA4C,CAC7C,CAAC;IACJ,CAAC;IACD,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,+BAA+B,CACvC,EAAE,EACF,iDAAiD,CAClD,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,KAAK,SAAS,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;QACnD,MAAM,IAAI,+BAA+B,CACvC,EAAE,EACF,oCAAoC,CACrC,CAAC;IACJ,CAAC;IACD,IAAI,IAAI,KAAK,SAAS,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,EAAE,CAAC;QACjD,MAAM,IAAI,+BAA+B,CACvC,EAAE,EACF,kCAAkC,CACnC,CAAC;IACJ,CAAC;IACD,IAAI,UAAU,KAAK,SAAS,IAAI,OAAO,UAAU,KAAK,QAAQ,EAAE,CAAC;QAC/D,MAAM,IAAI,+BAA+B,CACvC,EAAE,EACF,qCAAqC,CACtC,CAAC;IACJ,CAAC;IACD,OAAO;QACL,EAAE;QACF,OAAO;QACP,UAAU;QACV,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,KAAK;QACL,OAAO;KACR,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,QAAkB;IAC5C,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;IACnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,MAAM,OAAO,YAAY;IACd,OAAO,CAAkB;IACzB,OAAO,CAAS;IAChB,SAAS,CAAe;IACxB,MAAM,CAAU;IAChB,UAAU,CAAY;IACtB,MAAM,CAAe;IAE9B,YAAY,OAA4B;QACtC,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;QAC9B,IAAI,CAAC,SAAS,GAAG,OAAO,CAAC,QAAQ,CAAC;QAClC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;QAC5B,IAAI,CAAC,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC;QACpC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IAClC,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAY;QAC1B,IAAI,QAA8D,CAAC;QACnE,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC9D,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,cAAc,CACtB,sEAAsE,EACtE,EAAE,KAAK,EAAE,CACV,CAAC;QACJ,CAAC;QACD,IACE,QAAQ,EAAE,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO;YAC1C,QAAQ,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,SAAS;YAC3C,QAAQ,CAAC,IAAI,KAAK,SAAS,EAC3B,CAAC;YACD,MAAM,IAAI,oBAAoB,CAAC,uBAAuB,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,YAAqE,CAAC;QAC1E,IAAI,CAAC;YACH,YAAY,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QACtD,CAAC;QAAC,MAAM,CAAC;YACP,YAAY,GAAG,QAAQ,CAAC;QAC1B,CAAC;QACD,MAAM,OAAO,GAAG,iBAAiB,CAAC,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACxE,IAAI,CAAC,kBAAkB,CAAC,OAAO,CAAC;YAAE,MAAM,IAAI,oBAAoB,CAAC,OAAO,CAAC,CAAC;QAC1E,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,IAA2B,EAC3B,KAAa;QAEb,IAAI,IAAI,KAAK,MAAM;YAAE,MAAM,IAAI,iBAAiB,EAAE,CAAC;QACnD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC9D,IAAI,MAAM,CAAC,OAAO;YAAE,MAAM,IAAI,2BAA2B,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACvE,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,oBAAoB,CACxB,IAAwB,EACxB,KAAa;QAEb,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YACjB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YAC9D,IAAI,MAAM,CAAC,OAAO;gBAAE,MAAM,IAAI,2BAA2B,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACzE,CAAC;QACD,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;IAC7D,CAAC;IAED,UAAU,CAAC,GAAW;QACpB,MAAM,SAAS,GAAG,GAAG;aAClB,IAAI,EAAE;aACN,WAAW,EAAE;aACb,OAAO,CAAC,+BAA+B,EAAE,EAAE,CAAC;aAC5C,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC/C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAwB,EAAE,KAAa;QAClD,IAAI,CAAC,oBAAoB,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,MAAM,IAAI,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QAC3C,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,0BAA0B,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACnE,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE;YAC/C,IAAI;YACJ,KAAK;SACN,CAAC,CAAC;IACL,CAAC;IAED,KAAK,CAAC,0BAA0B,CAC9B,IAAwB,EACxB,KAAa;QAEb,MAAM,OAAO,GAAG,CAAC,SAAkB,EAAuB,EAAE,CAC1D,OAAO,SAAS,KAAK,QAAQ,IAAI,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACpE,IAAI,CAAC;YACH,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBACpB,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAClE,IACE,QAAQ,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO;oBACzC,QAAQ,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,SAAS;oBAC3C,QAAQ,CAAC,IAAI,KAAK,KAAK;oBACvB,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAC,EAC/B,CAAC;oBACD,OAAO,QAAQ,CAAC,aAAa,CAAC;gBAChC,CAAC;YACH,CAAC;iBAAM,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;gBAC3B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBACjE,IACE,QAAQ,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO;oBACzC,QAAQ,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,SAAS;oBAC3C,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAC,EACtC,CAAC;oBACD,MAAM,IAAI,GAAG,QAAQ,CAAC,cAAc,CAAC,IAAI,CACvC,CAAC,IAAI,EAAE,EAAE,CACP,OAAO,IAAI,KAAK,QAAQ;wBACxB,IAAI,KAAK,IAAI;wBACb,IAAI,CAAC,GAAG,KAAK,KAAK;wBAClB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CACzB,CAAC;oBACF,IAAI,IAAI;wBAAE,OAAO,IAAI,CAAC,QAAQ,CAAC;gBACjC,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;gBAC5D,IACE,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,OAAO;oBACtC,KAAK,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,SAAS;oBACxC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,EAC1B,CAAC;oBACD,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,CAC3B,CAAC,IAAI,EAAE,EAAE,CACP,IAAI,CAAC,IAAI,KAAK,IAAI;wBAClB,IAAI,CAAC,KAAK,KAAK,KAAK;wBACpB,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS;4BACxB,IAAI,CAAC,MAAM,KAAK,UAAU;4BAC1B,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC;wBAC1B,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CACzB,CAAC;oBACF,IAAI,IAAI;wBAAE,OAAO,IAAI,CAAC,QAAQ,CAAC;gBACjC,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,+EAA+E;QACjF,CAAC;QACD,MAAM,IAAI,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAC3C,CAAC;IAED,iBAAiB,CAAC,OAA4B;QAC5C,OAAO,IAAI,CAAC,SAAS,CAAC,2BAA2B,CAAC,OAAO,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED,KAAK,CAAC,OAAO,CACX,EAAsB,EACtB,SAAwB,EACxB,UAAkB,EAClB,QAA8D;QAE9D,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,CAAC;QAC3E,IAAI,GAAG,CAAC,IAAI,KAAK,aAAa;YAAE,MAAM,IAAI,mBAAmB,EAAE,CAAC;QAEhE,IAAI,OAAmB,CAAC;QACxB,IAAI,CAAC;YACH,OAAO,GAAG,iBAAiB,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACrD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,iBAAiB,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACzC,CAAC;QAED,IAAI,KAAa,CAAC;QAClB,IAAI,CAAC;YACH,KAAK,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACnE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,eAAe,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACvC,CAAC;QAED,IAAI,KAA0D,CAAC;QAC/D,IAAI,CAAC;YACH,KAAK,GAAG,MAAM,uBAAuB,CAAC;gBACpC,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO;gBAC7B,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;gBACjC,KAAK;gBACL,YAAY,EAAE,YAAY,CAAC,OAAO,CAAC;gBACnC,QAAQ,EAAE,gBAAgB,CAAC,GAAG,CAAC;aAChC,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,cAAc,CAAC,uCAAuC,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QAC/E,CAAC;QAED,MAAM,YAAY,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACjD,IAAI,YAAoB,CAAC;QACzB,IAAI,CAAC;YACH,YAAY,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QACvD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,YAAY,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,CAAC;YACtE,MAAM,IAAI,sBAAsB,EAAE,CAAC;QACrC,CAAC;QAED,IAAI,OAAsD,CAAC;QAC3D,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,iBAAiB,CAC/B,IAAI,CAAC,SAAS,EACd,KAAK,CAAC,SAAS,EACf,YAAY,EACZ,IAAI,CAAC,OAAO,CAAC,SAAS,EACtB,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAC1C,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IACE,KAAK,YAAY,kBAAkB;gBACnC,KAAK,YAAY,sBAAsB;gBACvC,KAAK,YAAY,cAAc,EAC/B,CAAC;gBACD,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,QAAQ,GACZ,KAAK,YAAY,oCAAoC;gBACrD,KAAK,YAAY,eAAe;gBAChC,KAAK,YAAY,uBAAuB;gBACxC,KAAK,YAAY,iBAAiB;gBAChC,CAAC,CAAC,KAAK,CAAC,QAAQ;gBAChB,CAAC,CAAC,SAAS,CAAC;YAChB,MAAM,IAAI,4BAA4B,CACpC,IAAI,CAAC,OAAO,CAAC,SAAS,EACtB,IAAI,CAAC,OAAO,CAAC,OAAO,EACpB,EAAE,KAAK,EAAE,QAAQ,EAAE,CACpB,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAAwB;YACnC,EAAE;YACF,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;YAC/B,UAAU,EAAE,IAAI,CAAC,OAAO,CAAC,SAAS;YAClC,GAAG,QAAQ;YACX,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,OAAO,EAAE,OAAO,CAAC,OAAO;SACzB,CAAC;QACF,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,OAA4B;QAC1C,IAAI,OAAO,CAAC,OAAO,KAAK,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC;YAC/C,MAAM,IAAI,2BAA2B,CACnC,OAAO,CAAC,OAAO,EACf,IAAI,CAAC,OAAO,CAAC,SAAS,CACvB,CAAC;QACJ,CAAC;QACD,MAAM,IAAI,GAAG,OAAO,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC;QACpE,IAAI,QAAkB,CAAC;QACvB,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,GAAG,IAAI,EAAE,EAAE;gBAC9D,MAAM,EAAE,MAAM;gBACd,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;gBAC/C,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;oBACnB,OAAO,EAAE,OAAO,CAAC,UAAU;oBAC3B,KAAK,EAAE,OAAO,CAAC,KAAK;oBACpB,KAAK,EAAE,OAAO,CAAC,OAAO;oBACtB,OAAO,EAAE,OAAO,CAAC,OAAO;iBACzB,CAAC;aACH,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,wBAAwB,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACzD,CAAC;QAED,IAAI,IAAa,CAAC;QAClB,IAAI,CAAC;YACH,IAAI,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,wBAAwB,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC;QACzD,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,MAAM,IAAI,yBAAyB,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAClE,CAAC;QACD,IAAI,QAAQ,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YAC5B,MAAM,IAAI,yBAAyB,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QACjE,CAAC;QACD,IAAI,CAAC,QAAQ,CAAC,EAAE;YAAE,MAAM,IAAI,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAE9D,MAAM,MAAM,GACV,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ;YAC9B,CAAC,CAAE,IAA6B,CAAC,MAAM;YACvC,CAAC,CAAC,SAAS,CAAC;QAChB,IAAI,MAAM,KAAK,UAAU,EAAE,CAAC;YAC1B,MAAM,IAAI,yBAAyB,CAAC,UAAU,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;QAClE,CAAC;QACD,MAAM,UAAU,GACd,MAAM,KAAK,SAAS;YACpB,CAAC,OAAO,CAAC,EAAE,KAAK,OAAO,IAAI,MAAM,KAAK,wBAAwB,CAAC,CAAC;QAClE,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,MAAM,IAAI,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAC9C,CAAC;QACD,OAAO;YACL,OAAO,EAAE,OAAO,CAAC,OAAO;YACxB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,GAAG,CAAC,OAAO,CAAC,IAAI;gBACd,CAAC,CAAC,EAAE,UAAU,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,IAAI,kBAAkB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE;gBAChF,CAAC,CAAC,EAAE,CAAC;YACP,YAAY,EAAE,YAAY;YAC1B,OAAO,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU;SACvD,CAAC;IACJ,CAAC;CACF"}
@@ -0,0 +1,37 @@
1
+ import { FastProvider } from "@fastxyz/sdk";
2
+ import { type PendingRegistration, type RegisteredClaim, type RevocableClaimKind } from "./claims.js";
3
+ import { type IdNetwork } from "./networks.js";
4
+ import { type Availability, type AvailabilityReadOptions, type IdentityDocument, type OwnerLinks, type PropertyClaimedResult, type PropertyClaimKind, type ResolvedId } from "./reads.js";
5
+ import { type Signer } from "./signer.js";
6
+ import { type ProfileUpdateInput, type ProfileUpdateResult } from "./profile.js";
7
+ import { type SubmitReportInput, type SubmitReportResult } from "./report.js";
8
+ import { ShareLinks } from "./share.js";
9
+ import { type OAuthClaimInstructions, type OAuthProofReady, type OAuthProvider, type ProofWaitOptions, type WebsiteClaimInstructions, type XClaimStart } from "./proofs.js";
10
+ export interface IdClientOptions {
11
+ network: IdNetwork;
12
+ signer: Signer;
13
+ fetchImpl?: typeof fetch;
14
+ provider?: FastProvider;
15
+ }
16
+ export declare class IdClient {
17
+ #private;
18
+ readonly share: ShareLinks;
19
+ constructor(options: IdClientOptions);
20
+ resolve(identity: string): Promise<ResolvedId>;
21
+ identity(address: string): Promise<IdentityDocument>;
22
+ availability(name: string, options?: AvailabilityReadOptions): Promise<Availability>;
23
+ links(address: string): Promise<OwnerLinks>;
24
+ propertyClaimed(kind: PropertyClaimKind, value: string): Promise<PropertyClaimedResult>;
25
+ claimName(name: string): Promise<RegisteredClaim>;
26
+ importWork(doi: string): Promise<RegisteredClaim>;
27
+ updateProfile(input: ProfileUpdateInput): Promise<ProfileUpdateResult>;
28
+ submitReport(input: SubmitReportInput): Promise<SubmitReportResult>;
29
+ oauthClaimInstructions(provider: OAuthProvider): OAuthClaimInstructions;
30
+ waitForOAuthProof(provider: OAuthProvider, value: string, options: ProofWaitOptions): Promise<OAuthProofReady>;
31
+ settleOAuthClaim(provider: OAuthProvider, value: string): Promise<RegisteredClaim>;
32
+ claimWebsite(host: string): WebsiteClaimInstructions;
33
+ startXClaim(handle: string): Promise<XClaimStart>;
34
+ revoke(kind: RevocableClaimKind, value: string): Promise<RegisteredClaim>;
35
+ retryRegistration(pending: PendingRegistration): Promise<RegisteredClaim>;
36
+ }
37
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,OAAO,EAGL,KAAK,mBAAmB,EACxB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACxB,MAAM,aAAa,CAAC;AAIrB,OAAO,EAAc,KAAK,SAAS,EAAE,MAAM,eAAe,CAAC;AAC3D,OAAO,EAEL,KAAK,YAAY,EACjB,KAAK,uBAAuB,EAC5B,KAAK,gBAAgB,EACrB,KAAK,UAAU,EACf,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACtB,KAAK,UAAU,EAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAmB,KAAK,MAAM,EAAE,MAAM,aAAa,CAAC;AAC3D,OAAO,EAEL,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACzB,MAAM,cAAc,CAAC;AACtB,OAAO,EAEL,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACxB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAEL,KAAK,sBAAsB,EAC3B,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAC7B,KAAK,WAAW,EACjB,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,SAAS,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB;AAYD,qBAAa,QAAQ;;IAUnB,QAAQ,CAAC,KAAK,EAAE,UAAU,CAAC;gBAEf,OAAO,EAAE,eAAe;IAoCpC,OAAO,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAI9C,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAIpD,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,uBAAuB,GAAG,OAAO,CAAC,YAAY,CAAC;IAIpF,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;IAI3C,eAAe,CACb,IAAI,EAAE,iBAAiB,EACvB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,qBAAqB,CAAC;IAIjC,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAIjD,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAIjD,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC;IAItE,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAInE,sBAAsB,CAAC,QAAQ,EAAE,aAAa,GAAG,sBAAsB;IAIvE,iBAAiB,CACf,QAAQ,EAAE,aAAa,EACvB,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,gBAAgB,GACxB,OAAO,CAAC,eAAe,CAAC;IAI3B,gBAAgB,CACd,QAAQ,EAAE,aAAa,EACvB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,eAAe,CAAC;IAI3B,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,wBAAwB;IAIpD,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAI3C,MAAM,CAAC,IAAI,EAAE,kBAAkB,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IAsBzE,iBAAiB,CAAC,OAAO,EAAE,mBAAmB,GAAG,OAAO,CAAC,eAAe,CAAC;CAWhF"}
package/dist/client.js ADDED
@@ -0,0 +1,139 @@
1
+ import { proxyFeeSource } from "./claim-fee.js";
2
+ import { ClaimService, snapshotPendingRegistration, } from "./claims.js";
3
+ import { HttpClient } from "./http.js";
4
+ import { makeProvider } from "./claim-tx.js";
5
+ import { RegistrationPendingError } from "./errors.js";
6
+ import { networkFor } from "./networks.js";
7
+ import { IdReads, } from "./reads.js";
8
+ import { validatedSigner } from "./signer.js";
9
+ import { ProfileService, } from "./profile.js";
10
+ import { ReportService, } from "./report.js";
11
+ import { ShareLinks } from "./share.js";
12
+ import { ProofService, } from "./proofs.js";
13
+ function pendingWireKey(pending) {
14
+ return [
15
+ pending.op,
16
+ pending.network,
17
+ pending.addressHex,
18
+ pending.nonce,
19
+ pending.txIdHex,
20
+ ].join("|");
21
+ }
22
+ export class IdClient {
23
+ #reads;
24
+ #claims;
25
+ #profile;
26
+ #report;
27
+ #proofs;
28
+ #pendingOAuthRevocations = new Map();
29
+ share;
30
+ constructor(options) {
31
+ const config = networkFor(options.network);
32
+ const signer = validatedSigner(options.signer);
33
+ const fetchImpl = options.fetchImpl ?? fetch;
34
+ const provider = options.provider ?? makeProvider(config.proxyUrl, config.networkId);
35
+ const http = new HttpClient(config.idOrigin, fetchImpl);
36
+ this.#reads = new IdReads(http, config.networkId);
37
+ this.#claims = new ClaimService({
38
+ config,
39
+ signer,
40
+ provider,
41
+ reads: this.#reads,
42
+ feeSource: proxyFeeSource(config.proxyUrl, fetchImpl),
43
+ fetchImpl,
44
+ });
45
+ this.#profile = new ProfileService({
46
+ config,
47
+ signer,
48
+ reads: this.#reads,
49
+ fetchImpl,
50
+ });
51
+ this.#report = new ReportService({
52
+ config,
53
+ signer,
54
+ fetchImpl,
55
+ });
56
+ this.#proofs = new ProofService({
57
+ config,
58
+ signer,
59
+ reads: this.#reads,
60
+ claims: this.#claims,
61
+ fetchImpl,
62
+ });
63
+ this.share = new ShareLinks(config);
64
+ }
65
+ resolve(identity) {
66
+ return this.#reads.resolve(identity);
67
+ }
68
+ identity(address) {
69
+ return this.#reads.identity(address);
70
+ }
71
+ availability(name, options) {
72
+ return this.#reads.availability(name, options);
73
+ }
74
+ links(address) {
75
+ return this.#reads.links(address);
76
+ }
77
+ propertyClaimed(kind, value) {
78
+ return this.#reads.propertyClaimed(kind, value);
79
+ }
80
+ claimName(name) {
81
+ return this.#claims.claimName(name);
82
+ }
83
+ importWork(doi) {
84
+ return this.#claims.importWork(doi);
85
+ }
86
+ updateProfile(input) {
87
+ return this.#profile.updateProfile(input);
88
+ }
89
+ submitReport(input) {
90
+ return this.#report.submitReport(input);
91
+ }
92
+ oauthClaimInstructions(provider) {
93
+ return this.#proofs.oauthClaimInstructions(provider);
94
+ }
95
+ waitForOAuthProof(provider, value, options) {
96
+ return this.#proofs.waitForOAuthProof(provider, value, options);
97
+ }
98
+ settleOAuthClaim(provider, value) {
99
+ return this.#proofs.settleOAuthClaim(provider, value);
100
+ }
101
+ claimWebsite(host) {
102
+ return this.#proofs.claimWebsite(host);
103
+ }
104
+ startXClaim(handle) {
105
+ return this.#proofs.startXClaim(handle);
106
+ }
107
+ async revoke(kind, value) {
108
+ let result;
109
+ try {
110
+ result = await this.#claims.revoke(kind, value);
111
+ }
112
+ catch (cause) {
113
+ if ((kind === "github" || kind === "orcid") &&
114
+ cause instanceof RegistrationPendingError) {
115
+ this.#pendingOAuthRevocations.set(pendingWireKey(cause.pending), {
116
+ provider: kind,
117
+ value,
118
+ });
119
+ }
120
+ throw cause;
121
+ }
122
+ if (kind === "github" || kind === "orcid") {
123
+ this.#proofs.forgetOAuthSettlement(kind, value);
124
+ }
125
+ return result;
126
+ }
127
+ async retryRegistration(pending) {
128
+ const snapshot = snapshotPendingRegistration(pending);
129
+ const result = await this.#claims.retryRegistration(snapshot);
130
+ const key = pendingWireKey(snapshot);
131
+ const oauth = this.#pendingOAuthRevocations.get(key);
132
+ if (oauth) {
133
+ this.#proofs.forgetOAuthSettlement(oauth.provider, oauth.value);
134
+ this.#pendingOAuthRevocations.delete(key);
135
+ }
136
+ return result;
137
+ }
138
+ }
139
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"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"}