domainkit 0.6.0 → 0.8.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 (32) hide show
  1. package/README.md +20 -18
  2. package/dist/{canonical-json-9x7gHIoS.mjs → canonical-json-CQYKsZw7.mjs} +10 -4
  3. package/dist/canonical-json-CQYKsZw7.mjs.map +1 -0
  4. package/dist/{connect-Db830jad.d.mts → connect-D-X8T9W8.d.mts} +305 -95
  5. package/dist/{connect-ks3cpqBD.mjs → connect-oI8hcMxc.mjs} +4 -4
  6. package/dist/connect-oI8hcMxc.mjs.map +1 -0
  7. package/dist/{connection-DuYDgWir.d.mts → connection-Dp6ZdSo8.d.mts} +2 -2
  8. package/dist/{connection-api-B__0M3PA.d.mts → connection-api-lqG1nBtD.d.mts} +2 -2
  9. package/dist/index.d.mts +703 -34
  10. package/dist/index.mjs +137 -30
  11. package/dist/index.mjs.map +1 -1
  12. package/dist/{managed-dns-connections-CaXts84E.mjs → managed-dns-connections-C3A_GBaz.mjs} +2 -2
  13. package/dist/{managed-dns-connections-CaXts84E.mjs.map → managed-dns-connections-C3A_GBaz.mjs.map} +1 -1
  14. package/dist/promise.d.mts +72 -13
  15. package/dist/promise.mjs +13 -8
  16. package/dist/promise.mjs.map +1 -1
  17. package/dist/{resolver-DxJPsq6l.mjs → resolver-BeGz1ukw.mjs} +132 -50
  18. package/dist/resolver-BeGz1ukw.mjs.map +1 -0
  19. package/dist/{resolver-DUAIlm2I.d.mts → resolver-xoSwyXDJ.d.mts} +889 -15
  20. package/dist/server.d.mts +3 -3
  21. package/dist/server.mjs +3 -3
  22. package/dist/testing.d.mts +2 -2
  23. package/dist/testing.mjs +5 -7
  24. package/dist/testing.mjs.map +1 -1
  25. package/dist/{verify-DAtUAEeg.mjs → verify-DvGPb5C9.mjs} +51 -45
  26. package/dist/verify-DvGPb5C9.mjs.map +1 -0
  27. package/dist/{verify-yAy-r9no.d.mts → verify-FpunAcM7.d.mts} +83 -6
  28. package/package.json +4 -2
  29. package/dist/canonical-json-9x7gHIoS.mjs.map +0 -1
  30. package/dist/connect-ks3cpqBD.mjs.map +0 -1
  31. package/dist/resolver-DxJPsq6l.mjs.map +0 -1
  32. package/dist/verify-DAtUAEeg.mjs.map +0 -1
package/dist/promise.mjs CHANGED
@@ -1,9 +1,9 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.mjs";
2
- import { B as tokenMethod$2, C as integrationFlow$1, D as tokenConnectionMethod$3, E as restore$3, F as oauthMethod$1, G as authorize$2, I as refreshCredential$1, J as selection_exports, L as restore$2, N as manifest$2, O as tokenMethod$3, P as oauthFlow$1, Q as decode$3, R as subjectResolver$1, S as exchangeCode$1, T as manifest$3, V as tokenValidator$1, W as make$6, X as Method$1, Y as secret_exports, Z as Schema$1, _ as toAsync$1, a as Result, c as Observation, d as defaultMake$1, et as diagnostic_exports, f as make$8, h as toAsync$3, i as PublicDnsObservation, j as make$7, l as Policy, n as ProviderObservation, o as observe$1, r as PublicDns$1, t as Provider$1, tt as version, u as Service, w as integrationMethod$1, y as toAsync$2, z as tokenConnectionMethod$2 } from "./verify-DAtUAEeg.mjs";
3
- import { A as invalid_input_exports, O as parse, S as encode, T as Schema$2, _ as ProviderTargetEvidence, b as authorizationError, d as provider_context_exports, f as AuthorizationError, g as ProviderTarget, h as ProviderConnection, i as webCryptoLayer, m as DomainAttachment, p as ConnectionStatus, w as validate, x as decode$4 } from "./canonical-json-9x7gHIoS.mjs";
4
- import { a as start$1, i as complete$1, n as Method$2, r as StartResult, t as Error } from "./connect-ks3cpqBD.mjs";
5
- import { $ as data, A as decodeReceipt$1, B as A, D as Receipt, E as Operation, F as Service$1, G as Ns, H as Caa, J as RequirementMetadata, K as Observed, L as layerFromAsync, M as encodeReceipt, O as Schema$4, P as Error$1, Q as Type, S as create$3, T as Authorization, U as Cname, V as Aaaa, W as Mx, X as Srv, Y as Schema$3, Z as Txt, a as Authorization$1, at as Service$2, b as apply$3, c as PartialError, d as apply$2, f as authorize$3, g as CreateResult, it as Candidate, j as encode$1, k as decode$5, l as Plan, lt as zones_exports, nt as equals, o as Error$2, ot as make$9, p as create$2, q as Opaque, rt as parse$1, s as Operation$1, t as Error$3, u as Receipt$1, w as renderManualInstructions$1, x as authorize$4, y as Target, z as toAsync$4 } from "./resolver-DxJPsq6l.mjs";
6
- import { n as managed_dns_connections_exports, t as layerFromAsync$1 } from "./managed-dns-connections-CaXts84E.mjs";
2
+ import { $ as decode$3, B as tokenConnectionMethod$2, C as integrationFlow$1, D as tokenConnectionMethod$3, E as restore$3, F as oauthFlow$1, G as make$6, H as tokenValidator$1, I as oauthMethod$1, K as authorize$2, L as refreshCredential$1, M as make$7, O as tokenMethod$3, P as manifest$2, Q as Schema$1, R as restore$2, S as exchangeCode$1, T as manifest$3, V as tokenMethod$2, X as secret_exports, Y as selection_exports, Z as Method$1, _ as toAsync$1, a as Result, c as Observation, d as defaultMake$1, f as make$8, h as toAsync$3, i as PublicDnsObservation, k as AccountContext, l as Policy, n as ProviderObservation, nt as version, o as observe$1, r as PublicDns$1, t as Provider$1, tt as diagnostic_exports, u as Service, w as integrationMethod$1, y as toAsync$2, z as subjectResolver$1 } from "./verify-DvGPb5C9.mjs";
3
+ import { C as encode, E as Schema$2, S as decode$4, T as validate, _ as ProviderTarget, f as provider_context_exports, g as ProviderConnection, h as DomainAttachment, i as webCryptoLayer, j as invalid_input_exports, k as parse, m as ConnectionStatus, p as AuthorizationError, v as ProviderTargetEvidence, x as authorizationError } from "./canonical-json-CQYKsZw7.mjs";
4
+ import { a as start$1, i as complete$1, n as Method$2, r as StartResult, t as Error } from "./connect-oI8hcMxc.mjs";
5
+ import { $ as Txt, A as Schema$3, C as authorize$4, D as Authorization, E as renderManualInstructions$1, G as Cname, H as A, I as Error$1, J as Observed, K as Mx, L as Service$1, M as decodeReceipt$1, N as encode$1, O as Operation, P as encodeReceipt, Q as Srv, S as apply$3, U as Aaaa, V as toAsync$4, W as Caa, X as RecordSchema, Y as Opaque, Z as RequirementMetadata, at as parse$1, c as Error$2, ct as make$9, d as Plan, dt as zones_exports, et as Type, f as Receipt$1, h as create$2, it as equals, j as decode$5, k as Receipt, l as Operation$1, m as authorize$3, n as Error$3, ot as Candidate, p as apply$2, q as Ns, s as Authorization$1, st as Service$2, t as AsyncResolution, tt as data, u as PartialError, v as CreateResult, w as create$3, x as Target, z as layerFromAsync } from "./resolver-BeGz1ukw.mjs";
6
+ import { n as managed_dns_connections_exports, t as layerFromAsync$1 } from "./managed-dns-connections-C3A_GBaz.mjs";
7
7
  import { Data, Effect, Layer } from "effect";
8
8
  //#region src/promise/connection.ts
9
9
  var connection_exports = /* @__PURE__ */ __exportAll({
@@ -137,6 +137,10 @@ const fromEffect = (session) => ({
137
137
  forTarget: (target) => Effect.runPromise(session.forTarget(target)).then(toAsync$4)
138
138
  });
139
139
  //#endregion
140
+ //#region src/promise/dns-resolver.ts
141
+ var dns_resolver_exports = /* @__PURE__ */ __exportAll({ Resolution: () => Resolution });
142
+ const Resolution = AsyncResolution;
143
+ //#endregion
140
144
  //#region src/promise/provider-auth.ts
141
145
  var provider_auth_exports = /* @__PURE__ */ __exportAll({
142
146
  Method: () => Method$1,
@@ -219,7 +223,7 @@ var dns_record_exports = /* @__PURE__ */ __exportAll({
219
223
  Observed: () => Observed,
220
224
  Opaque: () => Opaque,
221
225
  RequirementMetadata: () => RequirementMetadata,
222
- Schema: () => Schema$3,
226
+ Schema: () => RecordSchema,
223
227
  Srv: () => Srv,
224
228
  Txt: () => Txt,
225
229
  Type: () => Type,
@@ -239,7 +243,7 @@ var dns_plan_exports = /* @__PURE__ */ __exportAll({
239
243
  Authorization: () => Authorization,
240
244
  Operation: () => Operation,
241
245
  Receipt: () => Receipt,
242
- Schema: () => Schema$4,
246
+ Schema: () => Schema$3,
243
247
  decode: () => decode,
244
248
  decodeReceipt: () => decodeReceipt,
245
249
  encode: () => encode$1,
@@ -392,6 +396,7 @@ function tokenConnectionMethod(options) {
392
396
  //#endregion
393
397
  //#region src/promise/vercel.ts
394
398
  var vercel_exports = /* @__PURE__ */ __exportAll({
399
+ AccountContext: () => AccountContext,
395
400
  Auth: () => vercel_auth_exports,
396
401
  discovery: () => discovery,
397
402
  make: () => make$4
@@ -588,6 +593,6 @@ function asyncResolver(resolver) {
588
593
  /** The current package version from the package manifest. */
589
594
  const VERSION = version;
590
595
  //#endregion
591
- export { cloudflare_exports as Cloudflare, cloudflare_doh_exports as CloudflareDnsOverHttps, connection_exports as Connection, deletion_exports as Deletion, diagnostic_exports as Diagnostic, doh_exports as DnsOverHttps, dns_plan_exports as DnsPlan, dns_record_exports as DnsRecord, resolver_pool_exports as DnsResolverPool, domain_name_exports as DomainName, google_doh_exports as GoogleDnsOverHttps, invalid_input_exports as InvalidInput, managed_dns_connections_exports as ManagedDnsConnections, provider_auth_exports as ProviderAuth, provider_context_exports as ProviderContext, selection_exports as ProviderDiscovery, provider_session_exports as ProviderSession, provisioning_exports as Provisioning, secret_exports as Secret, VERSION, vercel_exports as Vercel, verification_exports as Verification, zone_discovery_exports as ZoneDiscovery, zones_exports as Zones };
596
+ export { cloudflare_exports as Cloudflare, cloudflare_doh_exports as CloudflareDnsOverHttps, connection_exports as Connection, deletion_exports as Deletion, diagnostic_exports as Diagnostic, doh_exports as DnsOverHttps, dns_plan_exports as DnsPlan, dns_record_exports as DnsRecord, dns_resolver_exports as DnsResolver, resolver_pool_exports as DnsResolverPool, domain_name_exports as DomainName, google_doh_exports as GoogleDnsOverHttps, invalid_input_exports as InvalidInput, managed_dns_connections_exports as ManagedDnsConnections, provider_auth_exports as ProviderAuth, provider_context_exports as ProviderContext, selection_exports as ProviderDiscovery, provider_session_exports as ProviderSession, provisioning_exports as Provisioning, secret_exports as Secret, VERSION, vercel_exports as Vercel, verification_exports as Verification, zone_discovery_exports as ZoneDiscovery, zones_exports as Zones };
592
597
 
593
598
  //# sourceMappingURL=promise.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"promise.mjs","names":["decode","Connection.decode","Connect.Error","Connect.start","Lifecycle.layerFromAsync","Connect.complete","EffectDnsProvider.toAsync","decode","ProviderAuth.decode","Discovery.make","Provider.Error","DnsPlan.decode","DnsPlan.decodeReceipt","create","DeletionEffect.create","DnsProvider.layerFromAsync","authorize","DeletionEffect.authorize","apply","DeletionEffect.apply","manifest","EffectAuth.manifest","EffectAuth.oauthMethod","EffectAuth.refreshCredential","restore","EffectAuth.restore","tokenMethod","EffectAuth.tokenMethod","EffectAuth.subjectResolver","Connection.fromEffectFlow","EffectAuth.oauthFlow","tokenConnectionMethod","Connection.fromEffectTokenMethod","EffectAuth.tokenConnectionMethod","EffectAuth.tokenValidator","make","Cloudflare.make","discovery","EffectAuth.integrationMethod","EffectAuth.manifest","EffectAuth.restore","EffectAuth.tokenMethod","EffectAuth.exchangeCode","Connection.fromEffectFlow","EffectAuth.integrationFlow","Connection.fromEffectTokenMethod","EffectAuth.tokenConnectionMethod","make","Vercel.make","ProvisioningEffect.create","ZoneDiscoveryEffect.Service","ZoneDiscoveryEffect.make","ZoneDiscovery.toEffectSource","DnsProvider.layerFromAsync","ProvisioningEffect.authorize","ProvisioningEffect.apply","ConnectionAuthorization.authorize","Lifecycle.layerFromAsync","ProvisioningEffect.renderManualInstructions","VerificationEffect.PublicDns","VerificationEffect.observe","DnsProvider.layerFromAsync","DnsResolverPoolEffect.Service","DnsResolverPoolEffect.make","DnsResolver.Error","make","CloudflareDnsOverHttps.toAsync","make","DnsOverHttps.toAsync","make","GoogleDnsOverHttps.toAsync","Pool.make","Pool.defaultMake","DnsResolver.Error","packageJson.version"],"sources":["../src/promise/connection.ts","../src/promise/provider-session.ts","../src/promise/provider-auth.ts","../src/promise/zone-discovery.ts","../src/promise/dns-record.ts","../src/promise/domain-name.ts","../src/promise/dns-plan.ts","../src/promise/deletion.ts","../src/promise/cloudflare-auth.ts","../src/promise/cloudflare.ts","../src/promise/vercel-auth.ts","../src/promise/vercel.ts","../src/promise/provisioning.ts","../src/promise/verification.ts","../src/promise/cloudflare-doh.ts","../src/promise/doh.ts","../src/promise/google-doh.ts","../src/promise/resolver-pool.ts","../src/promise.ts"],"sourcesContent":["import { Data, Effect, Layer } from \"effect\";\n\nimport * as Connection from \"../auth/connection.ts\";\nimport * as Connect from \"../auth/connect.ts\";\nimport type * as ProviderAuthorization from \"../auth/authorization.ts\";\nimport { webCryptoLayer } from \"../plan/canonical-json.ts\";\nimport * as Lifecycle from \"./managed-dns-connections.ts\";\nimport type * as Secret from \"../auth/secret.ts\";\n\nexport {\n AuthorizationError,\n authorizationError,\n ConnectionStatus,\n DomainAttachment,\n encode,\n ProviderConnection,\n ProviderTarget,\n ProviderTargetEvidence,\n validate,\n} from \"../auth/connection.ts\";\n\nexport function decode(input: unknown): Promise<Connection.ProviderConnection> {\n return Effect.runPromise(Connection.decode(input));\n}\n\nexport type Method = Data.TaggedEnum<{\n Interactive: {\n readonly continuations: ContinuationStore;\n readonly flow: InteractiveFlow;\n readonly ttlMs?: number;\n };\n Token: {\n readonly authenticate: (token: Secret.Value) => Promise<Connect.Authentication>;\n readonly providerId: string;\n readonly requiredCapabilities: ReadonlyArray<ProviderAuthorization.Capability>;\n readonly token: Secret.Value;\n };\n}>;\nexport const Method = Data.taggedEnum<Method>();\n\nexport interface ContinuationStore {\n readonly consume: (id: string, now: Date) => Promise<Connect.Continuation | null>;\n readonly put: (continuation: Connect.Continuation) => Promise<void>;\n}\n\nexport interface InteractiveFlow {\n readonly complete: (payload: Secret.Value, callbackUrl: URL) => Promise<Connect.Authentication>;\n readonly method: \"integration\" | \"oauth2\";\n readonly providerId: string;\n readonly requiredCapabilities: ReadonlyArray<ProviderAuthorization.Capability>;\n readonly start: (continuationId: string) => Promise<Connect.InteractiveStart>;\n}\n\nconst connectionFailure = (operation: string, cause: unknown): Connect.Error =>\n cause instanceof Connect.Error\n ? cause\n : new Connect.Error({\n category: \"provider\",\n message: cause instanceof globalThis.Error ? cause.message : String(cause),\n operation,\n retry: \"unknown\",\n });\n\nconst effectMethod = (method: Method): Connect.Method =>\n method._tag === \"Interactive\"\n ? Connect.Method.Interactive({\n continuations: effectContinuations(method.continuations),\n flow: effectFlow(method.flow),\n ...(method.ttlMs === undefined ? {} : { ttlMs: method.ttlMs }),\n })\n : Connect.Method.Token({\n authenticate: (token) =>\n Effect.tryPromise({\n try: () => method.authenticate(token),\n catch: (cause) => connectionFailure(\"Connection.start\", cause),\n }),\n providerId: method.providerId,\n requiredCapabilities: method.requiredCapabilities,\n token: method.token,\n });\n\nconst effectContinuations = (store: ContinuationStore): Connect.ContinuationStore => ({\n consume: (id, now) =>\n Effect.tryPromise({\n try: () => store.consume(id, now),\n catch: (cause) => connectionFailure(\"ConnectionContinuations.consume\", cause),\n }),\n put: (continuation) =>\n Effect.tryPromise({\n try: () => store.put(continuation),\n catch: (cause) => connectionFailure(\"ConnectionContinuations.put\", cause),\n }),\n});\n\nconst effectFlow = (flow: InteractiveFlow): Connect.InteractiveFlow => ({\n complete: (payload, callbackUrl) =>\n Effect.tryPromise({\n try: () => flow.complete(payload, callbackUrl),\n catch: (cause) => connectionFailure(\"Connection.complete\", cause),\n }),\n method: flow.method,\n providerId: flow.providerId,\n requiredCapabilities: flow.requiredCapabilities,\n start: (continuationId) =>\n Effect.tryPromise({\n try: () => flow.start(continuationId),\n catch: (cause) => connectionFailure(\"Connection.start\", cause),\n }),\n});\n\n/** Adapts an Effect-native provider flow to the Promise facade. */\nexport const fromEffectFlow = (flow: Connect.InteractiveFlow): InteractiveFlow => ({\n complete: (payload, callbackUrl) => Effect.runPromise(flow.complete(payload, callbackUrl)),\n method: flow.method,\n providerId: flow.providerId,\n requiredCapabilities: flow.requiredCapabilities,\n start: (continuationId) =>\n Effect.runPromise(flow.start(continuationId).pipe(Effect.provide(webCryptoLayer))),\n});\n\n/** Adapts an Effect-native token method to the Promise facade. */\nexport function fromEffectTokenMethod(\n method: Extract<Connect.Method, { readonly _tag: \"Token\" }>,\n): Extract<Method, { readonly _tag: \"Token\" }> {\n return Method.Token({\n authenticate: (token) => Effect.runPromise(method.authenticate(token)),\n providerId: method.providerId,\n requiredCapabilities: method.requiredCapabilities,\n token: method.token,\n });\n}\n\nexport async function start(\n input: Connect.BaseInput & {\n readonly method: Method;\n readonly repository: Lifecycle.AsyncInterface;\n },\n): Promise<Connect.StartResult> {\n return Effect.runPromise(\n Connect.start({\n authorizedById: input.authorizedById,\n ...(input.authorizationId === undefined ? {} : { authorizationId: input.authorizationId }),\n method: effectMethod(input.method),\n ownerId: input.ownerId,\n }).pipe(\n Effect.provide(Layer.merge(Lifecycle.layerFromAsync(input.repository), webCryptoLayer)),\n ),\n );\n}\n\nexport async function complete(input: {\n readonly callbackUrl: URL;\n readonly continuationId: string;\n readonly continuations: ContinuationStore;\n readonly flow: InteractiveFlow;\n readonly repository: Lifecycle.AsyncInterface;\n}): Promise<Connection.ProviderConnection> {\n return Effect.runPromise(\n Connect.complete({\n callbackUrl: input.callbackUrl,\n continuationId: input.continuationId,\n continuations: effectContinuations(input.continuations),\n flow: effectFlow(input.flow),\n }).pipe(\n Effect.provide(Layer.merge(Lifecycle.layerFromAsync(input.repository), webCryptoLayer)),\n ),\n );\n}\n\nexport function attach(input: {\n readonly attachment: Connection.DomainAttachment;\n readonly connectionId: string;\n readonly ownerId: string;\n readonly repository: Lifecycle.AsyncInterface;\n}): Promise<Lifecycle.AttachmentResult> {\n return input.repository.attach({\n attachment: input.attachment,\n connectionId: input.connectionId,\n ownerId: input.ownerId,\n });\n}\n\nexport function detach(input: {\n readonly attachmentId: string;\n readonly ownerId: string;\n readonly repository: Lifecycle.AsyncInterface;\n}): Promise<Lifecycle.DetachResult> {\n return input.repository.detach({\n attachmentId: input.attachmentId,\n ownerId: input.ownerId,\n });\n}\n\nexport function disconnect(input: {\n readonly connectionId: string;\n readonly ownerId: string;\n readonly repository: Lifecycle.AsyncInterface;\n readonly revoke: (authorization: ProviderAuthorization.ProviderAuthorization) => Promise<void>;\n}): Promise<Lifecycle.DisconnectResult> {\n return input.repository.disconnect({\n connectionId: input.connectionId,\n ownerId: input.ownerId,\n revoke: input.revoke,\n });\n}\n\nexport { Error, StartResult } from \"../auth/connect.ts\";\nexport type {\n Authentication,\n AuthenticationFailure,\n BaseInput,\n CompleteInput,\n Continuation,\n Failure,\n InteractiveStart,\n} from \"../auth/connect.ts\";\n","import { Effect } from \"effect\";\n\nimport * as EffectSession from \"../provider/session.ts\";\nimport type * as Connection from \"../auth/connection.ts\";\nimport type * as DomainName from \"../domain/domain-name.ts\";\nimport * as EffectDnsProvider from \"../provider/provider.ts\";\nimport * as DnsProvider from \"./dns-provider.ts\";\n\nexport type { ListTargetsInput, Resolution } from \"../provider/session.ts\";\n\nexport interface Interface {\n readonly providerId: string;\n readonly listTargets: (\n input?: EffectSession.ListTargetsInput,\n ) => Promise<ReadonlyArray<Connection.ProviderTarget>>;\n readonly resolveTarget: (domain: DomainName.DomainName) => Promise<EffectSession.Resolution>;\n readonly forTarget: (target: Connection.ProviderTarget) => Promise<DnsProvider.Interface>;\n}\n\nexport const fromEffect = (session: EffectSession.Interface): Interface => ({\n providerId: session.providerId,\n listTargets: (input) => Effect.runPromise(session.listTargets(input)),\n resolveTarget: (domain) => Effect.runPromise(session.resolveTarget(domain)),\n forTarget: (target) =>\n Effect.runPromise(session.forTarget(target)).then(EffectDnsProvider.toAsync),\n});\n","import { Effect } from \"effect\";\n\nimport * as ProviderAuth from \"../auth/manifest.ts\";\n\nexport { Method, Schema } from \"../auth/manifest.ts\";\nexport type {\n AsyncOAuthSubjectResolver as OAuthSubjectResolver,\n Manifest,\n OAuthClientConfiguration,\n OAuthMethod,\n TokenValidation,\n} from \"../auth/manifest.ts\";\n\nexport function decode(input: unknown): Promise<ProviderAuth.Manifest> {\n return Effect.runPromise(ProviderAuth.decode(input));\n}\n","import { Effect } from \"effect\";\n\nimport type * as DomainName from \"../domain/domain-name.ts\";\nimport type * as DnsProvider from \"../provider/provider.ts\";\nimport * as Provider from \"../provider/provider.ts\";\nimport * as Discovery from \"../discovery/zone-discovery.ts\";\n\nexport interface Source {\n readonly listZones: (\n name: DomainName.DomainName,\n ) => Promise<ReadonlyArray<Omit<Discovery.Candidate, \"providerId\">>>;\n readonly provider: DnsProvider.AsyncInterface;\n}\n\nexport type Outcome =\n | { readonly _tag: \"NotFound\"; readonly domain: DomainName.DomainName }\n | { readonly _tag: \"Resolved\"; readonly candidate: Discovery.Candidate }\n | { readonly _tag: \"SelectionRequired\"; readonly candidates: ReadonlyArray<Discovery.Candidate> };\n\nexport function discover(input: {\n readonly domain: DomainName.DomainName;\n readonly sources: ReadonlyArray<Source>;\n}): Promise<Outcome> {\n return Effect.runPromise(\n Discovery.make(input.sources.map(toEffectSource))\n .discover(input.domain)\n .pipe(Effect.map(projectOutcome)),\n );\n}\n\nexport function toEffectSource(source: Source): Discovery.Source {\n return {\n listZones: (name) =>\n Effect.tryPromise({\n try: () => source.listZones(name),\n catch: (cause) =>\n new Provider.Error({\n cause,\n message: cause instanceof globalThis.Error ? cause.message : String(cause),\n operation: \"ZoneDiscovery.listZones\",\n providerId: source.provider.id,\n reason: \"transport\",\n }),\n }),\n provider: Provider.Service.of({\n id: source.provider.id,\n createRecord: (zone, record) =>\n Effect.tryPromise({\n try: () => source.provider.createRecord(zone, record),\n catch: (cause) => providerFailure(source.provider.id, \"createRecord\", cause),\n }),\n deleteRecord: (zone, providerRecordId) =>\n Effect.tryPromise({\n try: () => source.provider.deleteRecord(zone, providerRecordId),\n catch: (cause) => providerFailure(source.provider.id, \"deleteRecord\", cause),\n }),\n getRecord: (zone, providerRecordId) =>\n Effect.tryPromise({\n try: () => source.provider.getRecord(zone, providerRecordId),\n catch: (cause) => providerFailure(source.provider.id, \"getRecord\", cause),\n }),\n listRecords: (zone) =>\n Effect.tryPromise({\n try: () => source.provider.listRecords(zone),\n catch: (cause) => providerFailure(source.provider.id, \"listRecords\", cause),\n }),\n }),\n };\n}\n\nfunction projectOutcome(outcome: Discovery.Outcome): Outcome {\n switch (outcome._tag) {\n case \"NotFound\":\n return outcome;\n case \"Resolved\":\n return { _tag: \"Resolved\", candidate: outcome.candidate };\n case \"SelectionRequired\":\n return outcome;\n }\n}\n\nfunction providerFailure(providerId: string, operation: string, cause: unknown): Provider.Error {\n return cause instanceof Provider.Error\n ? cause\n : new Provider.Error({\n cause,\n message: cause instanceof globalThis.Error ? cause.message : String(cause),\n operation,\n providerId,\n });\n}\n\nexport { Candidate } from \"../discovery/zone-discovery.ts\";\n","export {\n A,\n Aaaa,\n Caa,\n Cname,\n data,\n equals,\n Mx,\n Ns,\n Opaque,\n Observed,\n parse,\n RequirementMetadata,\n Schema,\n Srv,\n Txt,\n Type,\n} from \"../domain/dns-record.ts\";\nexport type { DnsRecord, Encoded } from \"../domain/dns-record.ts\";\n","export { parse, Schema } from \"../domain/domain-name.ts\";\nexport type { DomainName } from \"../domain/domain-name.ts\";\n","import { Effect } from \"effect\";\n\nimport * as DnsPlan from \"../plan/types.ts\";\n\nexport { Authorization, encode, encodeReceipt, Operation, Receipt, Schema } from \"../plan/types.ts\";\nexport type { ApplyReceipt, DnsPlan, PlanAuthorization } from \"../plan/types.ts\";\n\nexport function decode(input: unknown): Promise<DnsPlan.DnsPlan> {\n return Effect.runPromise(DnsPlan.decode(input));\n}\n\nexport function decodeReceipt(input: unknown): Promise<DnsPlan.ApplyReceipt> {\n return Effect.runPromise(DnsPlan.decodeReceipt(input));\n}\n","import { Effect, Layer } from \"effect\";\n\nimport { webCryptoLayer } from \"../plan/canonical-json.ts\";\nimport * as DeletionEffect from \"../plan/deletion.ts\";\nimport type * as DnsPlan from \"../plan/types.ts\";\nimport * as DnsProvider from \"../provider/provider.ts\";\n\nexport function create(input: {\n readonly plan: DnsPlan.DnsPlan;\n readonly provider: DnsProvider.AsyncInterface;\n readonly receipt: DnsPlan.ApplyReceipt;\n readonly ttlMs?: number;\n}): Promise<DeletionEffect.Plan> {\n return Effect.runPromise(\n DeletionEffect.create({\n plan: input.plan,\n receipt: input.receipt,\n ...(input.ttlMs === undefined ? {} : { ttlMs: input.ttlMs }),\n }).pipe(\n Effect.provide(Layer.merge(DnsProvider.layerFromAsync(input.provider), webCryptoLayer)),\n ),\n );\n}\n\nexport function authorize(\n plan: DeletionEffect.Plan,\n operationIds?: ReadonlyArray<string>,\n): Promise<DeletionEffect.Authorization> {\n return Effect.runPromise(\n DeletionEffect.authorize(plan, operationIds).pipe(Effect.provide(webCryptoLayer)),\n );\n}\n\nexport function apply(input: {\n readonly authorization: DeletionEffect.Authorization;\n readonly plan: DeletionEffect.Plan;\n readonly priorReceipt?: DeletionEffect.Receipt;\n readonly provider: DnsProvider.AsyncInterface;\n}): Promise<DeletionEffect.Receipt> {\n return Effect.runPromise(\n DeletionEffect.apply({\n authorization: input.authorization,\n plan: input.plan,\n ...(input.priorReceipt === undefined ? {} : { priorReceipt: input.priorReceipt }),\n }).pipe(\n Effect.provide(Layer.merge(DnsProvider.layerFromAsync(input.provider), webCryptoLayer)),\n ),\n );\n}\n\nexport { Authorization, Error, Operation, PartialError, Plan, Receipt } from \"../plan/deletion.ts\";\nexport type {\n ApplyError,\n Authorization as DeletionAuthorization,\n CreateError,\n Operation as DeletionOperation,\n Plan as DeletionPlan,\n Receipt as DeletionReceipt,\n} from \"../plan/deletion.ts\";\n","import type * as oauth from \"oauth4webapi\";\nimport { Effect } from \"effect\";\n\nimport type * as ProviderAuth from \"../auth/manifest.ts\";\nimport type * as Secret from \"../auth/secret.ts\";\nimport type * as Client from \"../providers/cloudflare/client.ts\";\nimport * as EffectAuth from \"../providers/cloudflare/auth.ts\";\nimport type * as ProviderSession from \"../provider/session.ts\";\nimport * as Connection from \"./connection.ts\";\n\nexport const manifest = EffectAuth.manifest;\nexport const oauthMethod = EffectAuth.oauthMethod;\nexport function refreshCredential(\n options: EffectAuth.RefreshCredentialOptions,\n): Promise<ProviderSession.Credential> {\n return Effect.runPromise(EffectAuth.refreshCredential(options));\n}\nexport function restore(\n options: ProviderSession.RestoreInput & Pick<Client.Options, \"baseUrl\" | \"fetch\">,\n): Promise<Client.Interface> {\n return Effect.runPromise(EffectAuth.restore(options));\n}\nexport const tokenMethod = EffectAuth.tokenMethod;\nexport type {\n CredentialTarget,\n OAuthFlowOptions,\n OAuthMethodOptions,\n RefreshCredentialOptions,\n SubjectResolverOptions,\n TokenValidatorOptions,\n} from \"../providers/cloudflare/auth.ts\";\n\nexport function subjectResolver(\n options: EffectAuth.SubjectResolverOptions,\n): ProviderAuth.AsyncOAuthSubjectResolver {\n const resolve = EffectAuth.subjectResolver(options);\n return (tokens: oauth.TokenEndpointResponse, accessToken: Secret.Value) =>\n Effect.runPromise(resolve(tokens, accessToken));\n}\n\n/** Creates Cloudflare's OAuth implementation for the Promise connection facade. */\nexport function oauthFlow(options: EffectAuth.OAuthFlowOptions): Connection.InteractiveFlow {\n return Connection.fromEffectFlow(EffectAuth.oauthFlow(options));\n}\n\n/** Creates a Cloudflare token method for the Promise connection facade. */\nexport function tokenConnectionMethod(\n options: EffectAuth.TokenConnectionOptions,\n): Extract<Connection.Method, { readonly _tag: \"Token\" }> {\n return Connection.fromEffectTokenMethod(EffectAuth.tokenConnectionMethod(options));\n}\n\nexport function tokenValidator(\n options: EffectAuth.TokenValidatorOptions,\n): (token: Secret.Value) => Promise<ProviderAuth.TokenValidation> {\n const validate = EffectAuth.tokenValidator(options);\n return (token) => Effect.runPromise(validate(token));\n}\n","import { Effect } from \"effect\";\n\nimport type * as Connection from \"../auth/connection.ts\";\nimport type * as ProviderAuth from \"../auth/manifest.ts\";\nimport type * as DomainName from \"../domain/domain-name.ts\";\nimport type * as DnsProvider from \"../provider/provider.ts\";\nimport * as Cloudflare from \"../providers/cloudflare/index.ts\";\nimport type * as ProviderSession from \"../provider/session.ts\";\nimport type * as ZoneDiscovery from \"./zone-discovery.ts\";\n\nexport * as Auth from \"./cloudflare-auth.ts\";\nexport type {\n Account,\n Fetch,\n ListZonesInput,\n Options,\n Zone,\n} from \"../providers/cloudflare/client.ts\";\n\nexport interface Interface extends DnsProvider.AsyncInterface {\n readonly providerId: \"cloudflare\";\n readonly forTarget: (target: Connection.ProviderTarget) => Promise<DnsProvider.AsyncInterface>;\n readonly listAccounts: () => Promise<ReadonlyArray<Cloudflare.Account>>;\n readonly listZones: (\n input?: Cloudflare.Client.ListZonesInput,\n ) => Promise<ReadonlyArray<Cloudflare.Zone>>;\n readonly listTargets: (\n input?: ProviderSession.ListTargetsInput,\n ) => Promise<ReadonlyArray<Connection.ProviderTarget>>;\n readonly resolveTarget: (domain: DomainName.DomainName) => Promise<ProviderSession.Resolution>;\n readonly validateToken: () => Promise<ProviderAuth.TokenValidation>;\n}\n\n/** Creates a Promise-compatible facade over the Effect-native Cloudflare client. */\nexport function make(options: Cloudflare.Client.Options): Interface {\n const client = Cloudflare.make(options);\n return {\n id: client.id,\n providerId: client.providerId,\n createRecord: (zone, record) => Effect.runPromise(client.createRecord(zone, record)),\n deleteRecord: (zone, providerRecordId) =>\n Effect.runPromise(client.deleteRecord(zone, providerRecordId)),\n getRecord: (zone, providerRecordId) =>\n Effect.runPromise(client.getRecord(zone, providerRecordId)),\n listAccounts: () => Effect.runPromise(client.listAccounts()),\n listRecords: (zone) => Effect.runPromise(client.listRecords(zone)),\n listZones: (input) => Effect.runPromise(client.listZones(input)),\n listTargets: (input) => Effect.runPromise(client.listTargets(input)),\n resolveTarget: (domain) => Effect.runPromise(client.resolveTarget(domain)),\n forTarget: (target) =>\n Effect.runPromise(client.forTarget(target)).then((provider) => ({\n id: provider.id,\n createRecord: (zone, record) => Effect.runPromise(provider.createRecord(zone, record)),\n deleteRecord: (zone, providerRecordId) =>\n Effect.runPromise(provider.deleteRecord(zone, providerRecordId)),\n getRecord: (zone, providerRecordId) =>\n Effect.runPromise(provider.getRecord(zone, providerRecordId)),\n listRecords: (zone) => Effect.runPromise(provider.listRecords(zone)),\n })),\n validateToken: () => Effect.runPromise(client.validateToken()),\n };\n}\n\n/** Creates the optional Cloudflare discovery source for Promise consumers. */\nexport function discovery(options: Cloudflare.Client.Options): ZoneDiscovery.Source {\n const client = make(options);\n return {\n listZones: async (name) =>\n (await client.listZones({ name })).map((zone) => ({\n ...zone,\n status: zone.status === \"active\" || zone.status === \"pending\" ? zone.status : \"unknown\",\n })),\n provider: client,\n };\n}\n","import { Effect } from \"effect\";\n\nimport type * as Client from \"../providers/vercel/client.ts\";\nimport * as EffectAuth from \"../providers/vercel/auth.ts\";\nimport type * as ProviderSession from \"../provider/session.ts\";\nimport * as Connection from \"./connection.ts\";\n\nexport const integrationMethod = EffectAuth.integrationMethod;\nexport const manifest = EffectAuth.manifest;\nexport function restore(\n options: ProviderSession.RestoreInput & Pick<Client.Options, \"baseUrl\" | \"fetch\">,\n): Promise<Client.Interface> {\n return Effect.runPromise(EffectAuth.restore(options));\n}\nexport const tokenMethod = EffectAuth.tokenMethod;\nexport type {\n ExchangeCodeOptions,\n IntegrationCredential,\n IntegrationFlowOptions,\n IntegrationMethodOptions,\n} from \"../providers/vercel/auth.ts\";\n\nexport function exchangeCode(\n options: EffectAuth.ExchangeCodeOptions,\n): Promise<EffectAuth.IntegrationCredential> {\n return Effect.runPromise(EffectAuth.exchangeCode(options));\n}\n\n/** Creates Vercel Integration's implementation for the Promise connection facade. */\nexport function integrationFlow(\n options: EffectAuth.IntegrationFlowOptions,\n): Connection.InteractiveFlow {\n return Connection.fromEffectFlow(EffectAuth.integrationFlow(options));\n}\n\n/** Creates a Vercel token method for the Promise connection facade. */\nexport function tokenConnectionMethod(\n options: EffectAuth.TokenConnectionOptions,\n): Extract<Connection.Method, { readonly _tag: \"Token\" }> {\n return Connection.fromEffectTokenMethod(EffectAuth.tokenConnectionMethod(options));\n}\n","import { Effect } from \"effect\";\n\nimport type * as Connection from \"../auth/connection.ts\";\nimport type * as ProviderAuth from \"../auth/manifest.ts\";\nimport type * as DomainName from \"../domain/domain-name.ts\";\nimport type * as DnsProvider from \"../provider/provider.ts\";\nimport * as Vercel from \"../providers/vercel/index.ts\";\nimport type * as ProviderSession from \"../provider/session.ts\";\nimport type * as ZoneDiscovery from \"./zone-discovery.ts\";\n\nexport * as Auth from \"./vercel-auth.ts\";\nexport type {\n Account,\n AccountContext,\n Fetch,\n ListZonesInput,\n Options,\n Zone,\n} from \"../providers/vercel/client.ts\";\n\nexport interface Interface extends DnsProvider.AsyncInterface {\n readonly providerId: \"vercel\";\n readonly forTarget: (target: Connection.ProviderTarget) => Promise<DnsProvider.AsyncInterface>;\n readonly listAccounts: () => Promise<ReadonlyArray<Vercel.Account>>;\n readonly listZones: (input?: Vercel.Client.ListZonesInput) => Promise<ReadonlyArray<Vercel.Zone>>;\n readonly listTargets: (\n input?: ProviderSession.ListTargetsInput,\n ) => Promise<ReadonlyArray<Connection.ProviderTarget>>;\n readonly resolveTarget: (domain: DomainName.DomainName) => Promise<ProviderSession.Resolution>;\n readonly validateToken: () => Promise<ProviderAuth.TokenValidation>;\n}\n\n/** Creates a Promise-compatible facade over the Effect-native Vercel client. */\nexport function make(options: Vercel.Client.Options): Interface {\n const client = Vercel.make(options);\n return {\n id: client.id,\n providerId: client.providerId,\n createRecord: (zone, record) => Effect.runPromise(client.createRecord(zone, record)),\n deleteRecord: (zone, providerRecordId) =>\n Effect.runPromise(client.deleteRecord(zone, providerRecordId)),\n getRecord: (zone, providerRecordId) =>\n Effect.runPromise(client.getRecord(zone, providerRecordId)),\n listAccounts: () => Effect.runPromise(client.listAccounts()),\n listRecords: (zone) => Effect.runPromise(client.listRecords(zone)),\n listZones: (input) => Effect.runPromise(client.listZones(input)),\n listTargets: (input) => Effect.runPromise(client.listTargets(input)),\n resolveTarget: (domain) => Effect.runPromise(client.resolveTarget(domain)),\n forTarget: (target) =>\n Effect.runPromise(client.forTarget(target)).then((provider) => ({\n id: provider.id,\n createRecord: (zone, record) => Effect.runPromise(provider.createRecord(zone, record)),\n deleteRecord: (zone, providerRecordId) =>\n Effect.runPromise(provider.deleteRecord(zone, providerRecordId)),\n getRecord: (zone, providerRecordId) =>\n Effect.runPromise(provider.getRecord(zone, providerRecordId)),\n listRecords: (zone) => Effect.runPromise(provider.listRecords(zone)),\n })),\n validateToken: () => Effect.runPromise(client.validateToken()),\n };\n}\n\n/** Creates the optional Vercel discovery source for Promise consumers. */\nexport function discovery(options: Vercel.Client.Options): ZoneDiscovery.Source {\n const client = make(options);\n return {\n listZones: (name) => client.listZones({ name }),\n provider: client,\n };\n}\n","import { Effect, Layer } from \"effect\";\n\nimport type * as Connection from \"../auth/connection.ts\";\nimport type * as ProviderAuthorization from \"../auth/authorization.ts\";\nimport * as ConnectionAuthorization from \"../plan/connection-authorization.ts\";\nimport * as Lifecycle from \"./managed-dns-connections.ts\";\nimport { webCryptoLayer } from \"../plan/canonical-json.ts\";\nimport * as ProvisioningEffect from \"../plan/plan.ts\";\nimport type * as DnsPlan from \"../plan/types.ts\";\nimport * as DnsProvider from \"../provider/provider.ts\";\nimport * as ZoneDiscoveryEffect from \"../discovery/zone-discovery.ts\";\nimport * as ZoneDiscovery from \"./zone-discovery.ts\";\n\nexport interface ExactCreateInput extends ProvisioningEffect.ExactCreateInput {\n readonly provider: DnsProvider.AsyncInterface;\n}\n\nexport interface DiscoverCreateInput extends ProvisioningEffect.DiscoverCreateInput {\n readonly sources: ReadonlyArray<ZoneDiscovery.Source>;\n}\n\nexport function create(input: ExactCreateInput): Promise<ProvisioningEffect.ResolvedCreateResult>;\nexport function create(input: DiscoverCreateInput): Promise<ProvisioningEffect.CreateResult>;\nexport function create(\n input: ExactCreateInput | DiscoverCreateInput,\n): Promise<ProvisioningEffect.CreateResult> {\n if (\"sources\" in input) {\n const { sources, ...programInput } = input;\n return Effect.runPromise(\n ProvisioningEffect.create(programInput).pipe(\n Effect.provide(\n Layer.merge(\n Layer.succeed(\n ZoneDiscoveryEffect.Service,\n ZoneDiscoveryEffect.make(sources.map(ZoneDiscovery.toEffectSource)),\n ),\n webCryptoLayer,\n ),\n ),\n ),\n );\n }\n const { provider, ...programInput } = input;\n return Effect.runPromise(\n ProvisioningEffect.create(programInput).pipe(\n Effect.provide(Layer.merge(DnsProvider.layerFromAsync(provider), webCryptoLayer)),\n ),\n );\n}\n\nexport function authorize(\n plan: DnsPlan.DnsPlan,\n operationIds?: ReadonlyArray<string>,\n options: { readonly allowPartial?: boolean } = {},\n): Promise<DnsPlan.PlanAuthorization> {\n return Effect.runPromise(\n ProvisioningEffect.authorize(plan, operationIds, options).pipe(Effect.provide(webCryptoLayer)),\n );\n}\n\nexport function apply(input: {\n readonly authorization: DnsPlan.PlanAuthorization;\n readonly plan: DnsPlan.DnsPlan;\n readonly provider: DnsProvider.AsyncInterface;\n}): Promise<DnsPlan.ApplyReceipt> {\n return Effect.runPromise(\n ProvisioningEffect.apply({ authorization: input.authorization, plan: input.plan }).pipe(\n Effect.provide(Layer.merge(DnsProvider.layerFromAsync(input.provider), webCryptoLayer)),\n ),\n );\n}\n\nexport function authorizeForConnection(input: {\n readonly allowPartial?: boolean;\n readonly authorization: ProviderAuthorization.ProviderAuthorization;\n readonly attachment: Connection.DomainAttachment;\n readonly connection: Connection.ProviderConnection;\n readonly domain: string;\n readonly operationIds?: ReadonlyArray<string>;\n readonly plan: DnsPlan.DnsPlan;\n readonly repository: Lifecycle.AsyncInterface;\n}): Promise<DnsPlan.PlanAuthorization> {\n return Effect.runPromise(\n ConnectionAuthorization.authorize({\n attachment: input.attachment,\n authorization: input.authorization,\n connection: input.connection,\n domain: input.domain,\n ...(input.allowPartial === undefined ? {} : { allowPartial: input.allowPartial }),\n ...(input.operationIds === undefined ? {} : { operationIds: input.operationIds }),\n plan: input.plan,\n }).pipe(\n Effect.provide(Layer.merge(Lifecycle.layerFromAsync(input.repository), webCryptoLayer)),\n ),\n );\n}\n\nexport const renderManualInstructions = ProvisioningEffect.renderManualInstructions;\nexport { CreateResult, Target } from \"../plan/plan.ts\";\n","import { Data, Effect, Layer } from \"effect\";\n\nimport type * as DomainName from \"../domain/domain-name.ts\";\nimport type * as DnsRecord from \"../domain/dns-record.ts\";\nimport * as DnsProvider from \"../provider/provider.ts\";\nimport * as DnsResolver from \"../verification/resolver.ts\";\nimport * as DnsResolverPoolEffect from \"../verification/resolver-pool.ts\";\nimport * as VerificationEffect from \"../verification/verify.ts\";\nimport type * as DnsResolverPool from \"./resolver-pool.ts\";\n\nexport type PublicDns = VerificationEffect.PublicDns;\nexport const PublicDns = VerificationEffect.PublicDns;\n\nexport type Provider = Data.TaggedEnum<{\n Disabled: {};\n Enabled: {\n readonly provider: DnsProvider.AsyncInterface;\n readonly zone: DomainName.DomainName;\n };\n}>;\nexport const Provider = Data.taggedEnum<Provider>();\n\nexport interface Config {\n readonly provider?: Provider;\n readonly publicDns?: PublicDns;\n readonly record: DnsRecord.DnsRecord;\n readonly resolvers?: ReadonlyArray<DnsResolverPool.Entry>;\n}\n\nexport { ProviderObservation, PublicDnsObservation, Result } from \"../verification/verify.ts\";\n\nexport function observe(input: Config): Promise<VerificationEffect.Result> {\n const provider = input.provider ?? Provider.Disabled();\n let program =\n provider._tag === \"Enabled\"\n ? VerificationEffect.observe({\n record: input.record,\n ...(input.publicDns === undefined ? {} : { publicDns: input.publicDns }),\n provider: VerificationEffect.Provider.Enabled({ zone: provider.zone }),\n }).pipe(Effect.provide(DnsProvider.layerFromAsync(provider.provider)))\n : VerificationEffect.observe({\n record: input.record,\n ...(input.publicDns === undefined ? {} : { publicDns: input.publicDns }),\n provider: VerificationEffect.Provider.Disabled(),\n });\n if (input.resolvers !== undefined) {\n program = program.pipe(\n Effect.provide(\n Layer.succeed(\n DnsResolverPoolEffect.Service,\n DnsResolverPoolEffect.make(\n input.resolvers.map((entry) => ({\n id: entry.id,\n resolver: fromAsyncResolver(entry.resolver),\n ...(entry.timeoutMs === undefined ? {} : { timeoutMs: entry.timeoutMs }),\n })),\n ),\n ),\n ),\n );\n }\n return Effect.runPromise(program);\n}\n\nfunction fromAsyncResolver(resolver: DnsResolver.AsyncInterface): DnsResolver.Interface {\n return {\n resolve: (query) =>\n Effect.tryPromise({\n try: () => resolver.resolve(query),\n catch: (cause) =>\n new DnsResolver.Error({\n cause,\n message: cause instanceof globalThis.Error ? cause.message : String(cause),\n reason: \"transport\",\n }),\n }).pipe(\n Effect.flatMap((resolution) => {\n switch (resolution._tag) {\n case \"answer\":\n case \"nodata\":\n return Effect.succeed(resolution);\n case \"timeout\":\n return Effect.fail(\n new DnsResolver.Error({ message: \"DNS query timed out\", reason: \"timeout\" }),\n );\n case \"failure\":\n return Effect.fail(\n new DnsResolver.Error({ message: resolution.message, reason: \"transport\" }),\n );\n }\n }),\n ),\n };\n}\n","import * as CloudflareDnsOverHttps from \"../verification/cloudflare-doh.ts\";\nimport type * as DnsResolver from \"../verification/resolver.ts\";\n\nexport type Options = CloudflareDnsOverHttps.Options;\n\nexport function make(options: Options = {}): DnsResolver.AsyncInterface {\n return CloudflareDnsOverHttps.toAsync(options);\n}\n","import * as DnsOverHttps from \"../verification/doh.ts\";\nimport type * as DnsResolver from \"../verification/resolver.ts\";\n\nexport type Options = DnsOverHttps.Options;\n\nexport function make(options: Options): DnsResolver.AsyncInterface {\n return DnsOverHttps.toAsync(options);\n}\n","import * as GoogleDnsOverHttps from \"../verification/google-doh.ts\";\nimport type * as DnsResolver from \"../verification/resolver.ts\";\n\nexport type Options = GoogleDnsOverHttps.Options;\n\nexport function make(options: Options = {}): DnsResolver.AsyncInterface {\n return GoogleDnsOverHttps.toAsync(options);\n}\n","import { Effect } from \"effect\";\n\nimport * as DnsResolver from \"../verification/resolver.ts\";\nimport * as Pool from \"../verification/resolver-pool.ts\";\n\nexport interface Entry {\n readonly id: string;\n readonly resolver: DnsResolver.AsyncInterface;\n readonly timeoutMs?: number;\n}\n\nexport interface Interface {\n readonly observe: (query: DnsResolver.Query) => Promise<ReadonlyArray<Pool.Observation>>;\n}\n\nexport function make(entries: ReadonlyArray<Entry>): Interface {\n return toAsync(\n Pool.make(\n entries.map((entry) => ({\n id: entry.id,\n resolver: asyncResolver(entry.resolver),\n ...(entry.timeoutMs === undefined ? {} : { timeoutMs: entry.timeoutMs }),\n })),\n ),\n );\n}\n\nexport function defaultMake(options: Pool.DefaultOptions = {}): Interface {\n return toAsync(Pool.defaultMake(options));\n}\n\nexport { Observation, Policy } from \"../verification/resolver-pool.ts\";\n\nfunction toAsync(pool: Pool.Interface): Interface {\n return {\n observe: (query) => Effect.runPromise(pool.observe(query)),\n };\n}\n\nfunction asyncResolver(resolver: DnsResolver.AsyncInterface): DnsResolver.Interface {\n return {\n resolve: (query) =>\n Effect.tryPromise({\n try: () => resolver.resolve(query),\n catch: (cause) =>\n new DnsResolver.Error({\n cause,\n message: cause instanceof globalThis.Error ? cause.message : String(cause),\n reason: \"transport\",\n }),\n }).pipe(\n Effect.flatMap((resolution) => {\n switch (resolution._tag) {\n case \"answer\":\n case \"nodata\":\n return Effect.succeed(resolution);\n case \"timeout\":\n return Effect.fail(\n new DnsResolver.Error({ message: \"DNS query timed out\", reason: \"timeout\" }),\n );\n case \"failure\":\n return Effect.fail(\n new DnsResolver.Error({ message: resolution.message, reason: \"transport\" }),\n );\n }\n }),\n ),\n };\n}\n","import packageJson from \"../package.json\" with { type: \"json\" };\n\n/** The current package version from the package manifest. */\nexport const VERSION = packageJson.version;\n\nexport * as Connection from \"./promise/connection.ts\";\nexport * as ManagedDnsConnections from \"./promise/managed-dns-connections.ts\";\nexport * as Diagnostic from \"./auth/diagnostic.ts\";\nexport * as ProviderContext from \"./auth/provider-context.ts\";\nexport * as Secret from \"./auth/secret.ts\";\nexport type * as DnsProvider from \"./promise/dns-provider.ts\";\nexport * as ProviderSession from \"./promise/provider-session.ts\";\nexport type * as DnsResolver from \"./promise/dns-resolver.ts\";\nexport * as ProviderAuth from \"./promise/provider-auth.ts\";\nexport * as ProviderDiscovery from \"./discovery/selection.ts\";\nexport * as ZoneDiscovery from \"./promise/zone-discovery.ts\";\nexport * as Zones from \"./discovery/zones.ts\";\nexport * as DnsRecord from \"./promise/dns-record.ts\";\nexport * as DomainName from \"./promise/domain-name.ts\";\nexport * as InvalidInput from \"./invalid-input.ts\";\nexport * as DnsPlan from \"./promise/dns-plan.ts\";\nexport * as Deletion from \"./promise/deletion.ts\";\nexport * as Cloudflare from \"./promise/cloudflare.ts\";\nexport * as Vercel from \"./promise/vercel.ts\";\nexport * as Provisioning from \"./promise/provisioning.ts\";\nexport * as Verification from \"./promise/verification.ts\";\nexport * as CloudflareDnsOverHttps from \"./promise/cloudflare-doh.ts\";\nexport * as DnsOverHttps from \"./promise/doh.ts\";\nexport * as GoogleDnsOverHttps from \"./promise/google-doh.ts\";\nexport * as DnsResolverPool from \"./promise/resolver-pool.ts\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"promise.mjs","names":["decode","Connection.decode","Connect.Error","Connect.start","Lifecycle.layerFromAsync","Connect.complete","EffectDnsProvider.toAsync","decode","ProviderAuth.decode","Discovery.make","Provider.Error","DnsPlan.decode","DnsPlan.decodeReceipt","create","DeletionEffect.create","DnsProvider.layerFromAsync","authorize","DeletionEffect.authorize","apply","DeletionEffect.apply","manifest","EffectAuth.manifest","EffectAuth.oauthMethod","EffectAuth.refreshCredential","restore","EffectAuth.restore","tokenMethod","EffectAuth.tokenMethod","EffectAuth.subjectResolver","Connection.fromEffectFlow","EffectAuth.oauthFlow","tokenConnectionMethod","Connection.fromEffectTokenMethod","EffectAuth.tokenConnectionMethod","EffectAuth.tokenValidator","make","Cloudflare.make","discovery","EffectAuth.integrationMethod","EffectAuth.manifest","EffectAuth.restore","EffectAuth.tokenMethod","EffectAuth.exchangeCode","Connection.fromEffectFlow","EffectAuth.integrationFlow","Connection.fromEffectTokenMethod","EffectAuth.tokenConnectionMethod","make","Vercel.make","ProvisioningEffect.create","ZoneDiscoveryEffect.Service","ZoneDiscoveryEffect.make","ZoneDiscovery.toEffectSource","DnsProvider.layerFromAsync","ProvisioningEffect.authorize","ProvisioningEffect.apply","ConnectionAuthorization.authorize","Lifecycle.layerFromAsync","ProvisioningEffect.renderManualInstructions","VerificationEffect.PublicDns","VerificationEffect.observe","DnsProvider.layerFromAsync","DnsResolverPoolEffect.Service","DnsResolverPoolEffect.make","DnsResolver.Error","make","CloudflareDnsOverHttps.toAsync","make","DnsOverHttps.toAsync","make","GoogleDnsOverHttps.toAsync","Pool.make","Pool.defaultMake","DnsResolver.Error","packageJson.version"],"sources":["../src/promise/connection.ts","../src/promise/provider-session.ts","../src/promise/dns-resolver.ts","../src/promise/provider-auth.ts","../src/promise/zone-discovery.ts","../src/promise/dns-record.ts","../src/promise/domain-name.ts","../src/promise/dns-plan.ts","../src/promise/deletion.ts","../src/promise/cloudflare-auth.ts","../src/promise/cloudflare.ts","../src/promise/vercel-auth.ts","../src/promise/vercel.ts","../src/promise/provisioning.ts","../src/promise/verification.ts","../src/promise/cloudflare-doh.ts","../src/promise/doh.ts","../src/promise/google-doh.ts","../src/promise/resolver-pool.ts","../src/promise.ts"],"sourcesContent":["import { Data, Effect, Layer } from \"effect\";\n\nimport * as Connection from \"../auth/connection.ts\";\nimport * as Connect from \"../auth/connect.ts\";\nimport type * as ProviderAuthorization from \"../auth/authorization.ts\";\nimport { webCryptoLayer } from \"../plan/canonical-json.ts\";\nimport * as Lifecycle from \"./managed-dns-connections.ts\";\nimport type * as Secret from \"../auth/secret.ts\";\n\nexport {\n AuthorizationError,\n authorizationError,\n ConnectionStatus,\n DomainAttachment,\n encode,\n ProviderConnection,\n ProviderTarget,\n ProviderTargetEvidence,\n validate,\n} from \"../auth/connection.ts\";\n\nexport function decode(input: unknown): Promise<Connection.ProviderConnection> {\n return Effect.runPromise(Connection.decode(input));\n}\n\nexport type Method = Data.TaggedEnum<{\n Interactive: {\n readonly continuations: ContinuationStore;\n readonly flow: InteractiveFlow;\n readonly ttlMs?: number;\n };\n Token: {\n readonly authenticate: (token: Secret.Value) => Promise<Connect.Authentication>;\n readonly providerId: string;\n readonly requiredCapabilities: ReadonlyArray<ProviderAuthorization.Capability>;\n readonly token: Secret.Value;\n };\n}>;\nexport const Method = Data.taggedEnum<Method>();\n\nexport interface ContinuationStore {\n readonly consume: (id: string, now: Date) => Promise<Connect.Continuation | null>;\n readonly put: (continuation: Connect.Continuation) => Promise<void>;\n}\n\nexport interface InteractiveFlow {\n readonly complete: (payload: Secret.Value, callbackUrl: URL) => Promise<Connect.Authentication>;\n readonly method: \"integration\" | \"oauth2\";\n readonly providerId: string;\n readonly requiredCapabilities: ReadonlyArray<ProviderAuthorization.Capability>;\n readonly start: (continuationId: string) => Promise<Connect.InteractiveStart>;\n}\n\nconst connectionFailure = (operation: string, cause: unknown): Connect.Error =>\n cause instanceof Connect.Error\n ? cause\n : new Connect.Error({\n category: \"provider\",\n message: cause instanceof globalThis.Error ? cause.message : String(cause),\n operation,\n retry: \"unknown\",\n });\n\nconst effectMethod = (method: Method): Connect.Method =>\n method._tag === \"Interactive\"\n ? Connect.Method.Interactive({\n continuations: effectContinuations(method.continuations),\n flow: effectFlow(method.flow),\n ...(method.ttlMs === undefined ? {} : { ttlMs: method.ttlMs }),\n })\n : Connect.Method.Token({\n authenticate: (token) =>\n Effect.tryPromise({\n try: () => method.authenticate(token),\n catch: (cause) => connectionFailure(\"Connection.start\", cause),\n }),\n providerId: method.providerId,\n requiredCapabilities: method.requiredCapabilities,\n token: method.token,\n });\n\nconst effectContinuations = (store: ContinuationStore): Connect.ContinuationStore => ({\n consume: (id, now) =>\n Effect.tryPromise({\n try: () => store.consume(id, now),\n catch: (cause) => connectionFailure(\"ConnectionContinuations.consume\", cause),\n }),\n put: (continuation) =>\n Effect.tryPromise({\n try: () => store.put(continuation),\n catch: (cause) => connectionFailure(\"ConnectionContinuations.put\", cause),\n }),\n});\n\nconst effectFlow = (flow: InteractiveFlow): Connect.InteractiveFlow => ({\n complete: (payload, callbackUrl) =>\n Effect.tryPromise({\n try: () => flow.complete(payload, callbackUrl),\n catch: (cause) => connectionFailure(\"Connection.complete\", cause),\n }),\n method: flow.method,\n providerId: flow.providerId,\n requiredCapabilities: flow.requiredCapabilities,\n start: (continuationId) =>\n Effect.tryPromise({\n try: () => flow.start(continuationId),\n catch: (cause) => connectionFailure(\"Connection.start\", cause),\n }),\n});\n\n/** Adapts an Effect-native provider flow to the Promise facade. */\nexport const fromEffectFlow = (flow: Connect.InteractiveFlow): InteractiveFlow => ({\n complete: (payload, callbackUrl) => Effect.runPromise(flow.complete(payload, callbackUrl)),\n method: flow.method,\n providerId: flow.providerId,\n requiredCapabilities: flow.requiredCapabilities,\n start: (continuationId) =>\n Effect.runPromise(flow.start(continuationId).pipe(Effect.provide(webCryptoLayer))),\n});\n\n/** Adapts an Effect-native token method to the Promise facade. */\nexport function fromEffectTokenMethod(\n method: Extract<Connect.Method, { readonly _tag: \"Token\" }>,\n): Extract<Method, { readonly _tag: \"Token\" }> {\n return Method.Token({\n authenticate: (token) => Effect.runPromise(method.authenticate(token)),\n providerId: method.providerId,\n requiredCapabilities: method.requiredCapabilities,\n token: method.token,\n });\n}\n\nexport async function start(\n input: Connect.BaseInput & {\n readonly method: Method;\n readonly repository: Lifecycle.AsyncInterface;\n },\n): Promise<Connect.StartResult> {\n return Effect.runPromise(\n Connect.start({\n authorizedById: input.authorizedById,\n ...(input.authorizationId === undefined ? {} : { authorizationId: input.authorizationId }),\n method: effectMethod(input.method),\n ownerId: input.ownerId,\n }).pipe(\n Effect.provide(Layer.merge(Lifecycle.layerFromAsync(input.repository), webCryptoLayer)),\n ),\n );\n}\n\nexport async function complete(input: {\n readonly callbackUrl: URL;\n readonly continuationId: string;\n readonly continuations: ContinuationStore;\n readonly flow: InteractiveFlow;\n readonly repository: Lifecycle.AsyncInterface;\n}): Promise<Connection.ProviderConnection> {\n return Effect.runPromise(\n Connect.complete({\n callbackUrl: input.callbackUrl,\n continuationId: input.continuationId,\n continuations: effectContinuations(input.continuations),\n flow: effectFlow(input.flow),\n }).pipe(\n Effect.provide(Layer.merge(Lifecycle.layerFromAsync(input.repository), webCryptoLayer)),\n ),\n );\n}\n\nexport function attach(input: {\n readonly attachment: Connection.DomainAttachment;\n readonly connectionId: string;\n readonly ownerId: string;\n readonly repository: Lifecycle.AsyncInterface;\n}): Promise<Lifecycle.AttachmentResult> {\n return input.repository.attach({\n attachment: input.attachment,\n connectionId: input.connectionId,\n ownerId: input.ownerId,\n });\n}\n\nexport function detach(input: {\n readonly attachmentId: string;\n readonly ownerId: string;\n readonly repository: Lifecycle.AsyncInterface;\n}): Promise<Lifecycle.DetachResult> {\n return input.repository.detach({\n attachmentId: input.attachmentId,\n ownerId: input.ownerId,\n });\n}\n\nexport function disconnect(input: {\n readonly connectionId: string;\n readonly ownerId: string;\n readonly repository: Lifecycle.AsyncInterface;\n readonly revoke: (authorization: ProviderAuthorization.ProviderAuthorization) => Promise<void>;\n}): Promise<Lifecycle.DisconnectResult> {\n return input.repository.disconnect({\n connectionId: input.connectionId,\n ownerId: input.ownerId,\n revoke: input.revoke,\n });\n}\n\nexport { Error, StartResult } from \"../auth/connect.ts\";\nexport type {\n Authentication,\n AuthenticationFailure,\n BaseInput,\n CompleteInput,\n Continuation,\n Failure,\n InteractiveStart,\n} from \"../auth/connect.ts\";\n","import { Effect } from \"effect\";\n\nimport * as EffectSession from \"../provider/session.ts\";\nimport type * as Connection from \"../auth/connection.ts\";\nimport type * as DomainName from \"../domain/domain-name.ts\";\nimport * as EffectDnsProvider from \"../provider/provider.ts\";\nimport * as DnsProvider from \"./dns-provider.ts\";\n\nexport type { ListTargetsInput, Resolution } from \"../provider/session.ts\";\n\nexport interface Interface {\n readonly providerId: string;\n readonly listTargets: (\n input?: EffectSession.ListTargetsInput,\n ) => Promise<ReadonlyArray<Connection.ProviderTarget>>;\n readonly resolveTarget: (domain: DomainName.DomainName) => Promise<EffectSession.Resolution>;\n readonly forTarget: (target: Connection.ProviderTarget) => Promise<DnsProvider.Interface>;\n}\n\nexport const fromEffect = (session: EffectSession.Interface): Interface => ({\n providerId: session.providerId,\n listTargets: (input) => Effect.runPromise(session.listTargets(input)),\n resolveTarget: (domain) => Effect.runPromise(session.resolveTarget(domain)),\n forTarget: (target) =>\n Effect.runPromise(session.forTarget(target)).then(EffectDnsProvider.toAsync),\n});\n","import { AsyncResolution } from \"../verification/resolver.ts\";\nimport type { AsyncResolution as AsyncResolutionValue } from \"../verification/resolver.ts\";\n\nexport const Resolution = AsyncResolution;\nexport type Resolution = AsyncResolutionValue;\n\nexport type { Answer, AsyncInterface as Interface, Query } from \"../verification/resolver.ts\";\n","import { Effect } from \"effect\";\n\nimport * as ProviderAuth from \"../auth/manifest.ts\";\n\nexport { Method, Schema } from \"../auth/manifest.ts\";\nexport type {\n AsyncOAuthSubjectResolver as OAuthSubjectResolver,\n Manifest,\n OAuthClientConfiguration,\n OAuthMethod,\n TokenValidation,\n} from \"../auth/manifest.ts\";\n\nexport function decode(input: unknown): Promise<ProviderAuth.Manifest> {\n return Effect.runPromise(ProviderAuth.decode(input));\n}\n","import { Effect } from \"effect\";\n\nimport type * as DomainName from \"../domain/domain-name.ts\";\nimport type * as DnsProvider from \"../provider/provider.ts\";\nimport * as Provider from \"../provider/provider.ts\";\nimport * as Discovery from \"../discovery/zone-discovery.ts\";\n\nexport interface Source {\n readonly listZones: (\n name: DomainName.DomainName,\n ) => Promise<ReadonlyArray<Omit<Discovery.Candidate, \"providerId\">>>;\n readonly provider: DnsProvider.AsyncInterface;\n}\n\nexport type Outcome =\n | { readonly _tag: \"NotFound\"; readonly domain: DomainName.DomainName }\n | { readonly _tag: \"Resolved\"; readonly candidate: Discovery.Candidate }\n | { readonly _tag: \"SelectionRequired\"; readonly candidates: ReadonlyArray<Discovery.Candidate> };\n\nexport function discover(input: {\n readonly domain: DomainName.DomainName;\n readonly sources: ReadonlyArray<Source>;\n}): Promise<Outcome> {\n return Effect.runPromise(\n Discovery.make(input.sources.map(toEffectSource))\n .discover(input.domain)\n .pipe(Effect.map(projectOutcome)),\n );\n}\n\nexport function toEffectSource(source: Source): Discovery.Source {\n return {\n listZones: (name) =>\n Effect.tryPromise({\n try: () => source.listZones(name),\n catch: (cause) =>\n new Provider.Error({\n cause,\n message: cause instanceof globalThis.Error ? cause.message : String(cause),\n operation: \"ZoneDiscovery.listZones\",\n providerId: source.provider.id,\n reason: \"transport\",\n }),\n }),\n provider: Provider.Service.of({\n id: source.provider.id,\n createRecord: (zone, record) =>\n Effect.tryPromise({\n try: () => source.provider.createRecord(zone, record),\n catch: (cause) => providerFailure(source.provider.id, \"createRecord\", cause),\n }),\n deleteRecord: (zone, providerRecordId) =>\n Effect.tryPromise({\n try: () => source.provider.deleteRecord(zone, providerRecordId),\n catch: (cause) => providerFailure(source.provider.id, \"deleteRecord\", cause),\n }),\n getRecord: (zone, providerRecordId) =>\n Effect.tryPromise({\n try: () => source.provider.getRecord(zone, providerRecordId),\n catch: (cause) => providerFailure(source.provider.id, \"getRecord\", cause),\n }),\n listRecords: (zone) =>\n Effect.tryPromise({\n try: () => source.provider.listRecords(zone),\n catch: (cause) => providerFailure(source.provider.id, \"listRecords\", cause),\n }),\n }),\n };\n}\n\nfunction projectOutcome(outcome: Discovery.Outcome): Outcome {\n switch (outcome._tag) {\n case \"NotFound\":\n return outcome;\n case \"Resolved\":\n return { _tag: \"Resolved\", candidate: outcome.candidate };\n case \"SelectionRequired\":\n return outcome;\n }\n}\n\nfunction providerFailure(providerId: string, operation: string, cause: unknown): Provider.Error {\n return cause instanceof Provider.Error\n ? cause\n : new Provider.Error({\n cause,\n message: cause instanceof globalThis.Error ? cause.message : String(cause),\n operation,\n providerId,\n });\n}\n\nexport { Candidate } from \"../discovery/zone-discovery.ts\";\n","export {\n A,\n Aaaa,\n Caa,\n Cname,\n data,\n equals,\n Mx,\n Ns,\n Opaque,\n Observed,\n parse,\n RequirementMetadata,\n Schema,\n Srv,\n Txt,\n Type,\n} from \"../domain/dns-record.ts\";\nexport type { DnsRecord, Encoded } from \"../domain/dns-record.ts\";\n","export { parse, Schema } from \"../domain/domain-name.ts\";\nexport type { DomainName } from \"../domain/domain-name.ts\";\n","import { Effect } from \"effect\";\n\nimport * as DnsPlan from \"../plan/types.ts\";\n\nexport { Authorization, encode, encodeReceipt, Operation, Receipt, Schema } from \"../plan/types.ts\";\nexport type { ApplyReceipt, DnsPlan, PlanAuthorization } from \"../plan/types.ts\";\n\nexport function decode(input: unknown): Promise<DnsPlan.DnsPlan> {\n return Effect.runPromise(DnsPlan.decode(input));\n}\n\nexport function decodeReceipt(input: unknown): Promise<DnsPlan.ApplyReceipt> {\n return Effect.runPromise(DnsPlan.decodeReceipt(input));\n}\n","import { Effect, Layer } from \"effect\";\n\nimport { webCryptoLayer } from \"../plan/canonical-json.ts\";\nimport * as DeletionEffect from \"../plan/deletion.ts\";\nimport type * as DnsPlan from \"../plan/types.ts\";\nimport * as DnsProvider from \"../provider/provider.ts\";\n\nexport function create(input: {\n readonly plan: DnsPlan.DnsPlan;\n readonly provider: DnsProvider.AsyncInterface;\n readonly receipt: DnsPlan.ApplyReceipt;\n readonly ttlMs?: number;\n}): Promise<DeletionEffect.Plan> {\n return Effect.runPromise(\n DeletionEffect.create({\n plan: input.plan,\n receipt: input.receipt,\n ...(input.ttlMs === undefined ? {} : { ttlMs: input.ttlMs }),\n }).pipe(\n Effect.provide(Layer.merge(DnsProvider.layerFromAsync(input.provider), webCryptoLayer)),\n ),\n );\n}\n\nexport function authorize(\n plan: DeletionEffect.Plan,\n operationIds?: ReadonlyArray<string>,\n): Promise<DeletionEffect.Authorization> {\n return Effect.runPromise(\n DeletionEffect.authorize(plan, operationIds).pipe(Effect.provide(webCryptoLayer)),\n );\n}\n\nexport function apply(input: {\n readonly authorization: DeletionEffect.Authorization;\n readonly plan: DeletionEffect.Plan;\n readonly priorReceipt?: DeletionEffect.Receipt;\n readonly provider: DnsProvider.AsyncInterface;\n}): Promise<DeletionEffect.Receipt> {\n return Effect.runPromise(\n DeletionEffect.apply({\n authorization: input.authorization,\n plan: input.plan,\n ...(input.priorReceipt === undefined ? {} : { priorReceipt: input.priorReceipt }),\n }).pipe(\n Effect.provide(Layer.merge(DnsProvider.layerFromAsync(input.provider), webCryptoLayer)),\n ),\n );\n}\n\nexport { Authorization, Error, Operation, PartialError, Plan, Receipt } from \"../plan/deletion.ts\";\nexport type {\n ApplyError,\n Authorization as DeletionAuthorization,\n CreateError,\n Operation as DeletionOperation,\n Plan as DeletionPlan,\n Receipt as DeletionReceipt,\n} from \"../plan/deletion.ts\";\n","import type * as oauth from \"oauth4webapi\";\nimport { Effect } from \"effect\";\n\nimport type * as ProviderAuth from \"../auth/manifest.ts\";\nimport type * as Secret from \"../auth/secret.ts\";\nimport type * as Client from \"../providers/cloudflare/client.ts\";\nimport * as EffectAuth from \"../providers/cloudflare/auth.ts\";\nimport type * as ProviderSession from \"../provider/session.ts\";\nimport * as Connection from \"./connection.ts\";\n\nexport const manifest = EffectAuth.manifest;\nexport const oauthMethod = EffectAuth.oauthMethod;\nexport function refreshCredential(\n options: EffectAuth.RefreshCredentialOptions,\n): Promise<ProviderSession.Credential> {\n return Effect.runPromise(EffectAuth.refreshCredential(options));\n}\nexport function restore(\n options: ProviderSession.RestoreInput & Pick<Client.Options, \"baseUrl\" | \"fetch\">,\n): Promise<Client.Interface> {\n return Effect.runPromise(EffectAuth.restore(options));\n}\nexport const tokenMethod = EffectAuth.tokenMethod;\nexport type {\n CredentialTarget,\n OAuthFlowOptions,\n OAuthMethodOptions,\n RefreshCredentialOptions,\n SubjectResolverOptions,\n TokenValidatorOptions,\n} from \"../providers/cloudflare/auth.ts\";\n\nexport function subjectResolver(\n options: EffectAuth.SubjectResolverOptions,\n): ProviderAuth.AsyncOAuthSubjectResolver {\n const resolve = EffectAuth.subjectResolver(options);\n return (tokens: oauth.TokenEndpointResponse, accessToken: Secret.Value) =>\n Effect.runPromise(resolve(tokens, accessToken));\n}\n\n/** Creates Cloudflare's OAuth implementation for the Promise connection facade. */\nexport function oauthFlow(options: EffectAuth.OAuthFlowOptions): Connection.InteractiveFlow {\n return Connection.fromEffectFlow(EffectAuth.oauthFlow(options));\n}\n\n/** Creates a Cloudflare token method for the Promise connection facade. */\nexport function tokenConnectionMethod(\n options: EffectAuth.TokenConnectionOptions,\n): Extract<Connection.Method, { readonly _tag: \"Token\" }> {\n return Connection.fromEffectTokenMethod(EffectAuth.tokenConnectionMethod(options));\n}\n\nexport function tokenValidator(\n options: EffectAuth.TokenValidatorOptions,\n): (token: Secret.Value) => Promise<ProviderAuth.TokenValidation> {\n const validate = EffectAuth.tokenValidator(options);\n return (token) => Effect.runPromise(validate(token));\n}\n","import { Effect } from \"effect\";\n\nimport type * as Connection from \"../auth/connection.ts\";\nimport type * as ProviderAuth from \"../auth/manifest.ts\";\nimport type * as DomainName from \"../domain/domain-name.ts\";\nimport type * as DnsProvider from \"../provider/provider.ts\";\nimport * as Cloudflare from \"../providers/cloudflare/index.ts\";\nimport type * as ProviderSession from \"../provider/session.ts\";\nimport type * as ZoneDiscovery from \"./zone-discovery.ts\";\n\nexport * as Auth from \"./cloudflare-auth.ts\";\nexport type {\n Account,\n Fetch,\n ListZonesInput,\n Options,\n Zone,\n} from \"../providers/cloudflare/client.ts\";\n\nexport interface Interface extends DnsProvider.AsyncInterface {\n readonly providerId: \"cloudflare\";\n readonly forTarget: (target: Connection.ProviderTarget) => Promise<DnsProvider.AsyncInterface>;\n readonly listAccounts: () => Promise<ReadonlyArray<Cloudflare.Account>>;\n readonly listZones: (\n input?: Cloudflare.Client.ListZonesInput,\n ) => Promise<ReadonlyArray<Cloudflare.Zone>>;\n readonly listTargets: (\n input?: ProviderSession.ListTargetsInput,\n ) => Promise<ReadonlyArray<Connection.ProviderTarget>>;\n readonly resolveTarget: (domain: DomainName.DomainName) => Promise<ProviderSession.Resolution>;\n readonly validateToken: () => Promise<ProviderAuth.TokenValidation>;\n}\n\n/** Creates a Promise-compatible facade over the Effect-native Cloudflare client. */\nexport function make(options: Cloudflare.Client.Options): Interface {\n const client = Cloudflare.make(options);\n return {\n id: client.id,\n providerId: client.providerId,\n createRecord: (zone, record) => Effect.runPromise(client.createRecord(zone, record)),\n deleteRecord: (zone, providerRecordId) =>\n Effect.runPromise(client.deleteRecord(zone, providerRecordId)),\n getRecord: (zone, providerRecordId) =>\n Effect.runPromise(client.getRecord(zone, providerRecordId)),\n listAccounts: () => Effect.runPromise(client.listAccounts()),\n listRecords: (zone) => Effect.runPromise(client.listRecords(zone)),\n listZones: (input) => Effect.runPromise(client.listZones(input)),\n listTargets: (input) => Effect.runPromise(client.listTargets(input)),\n resolveTarget: (domain) => Effect.runPromise(client.resolveTarget(domain)),\n forTarget: (target) =>\n Effect.runPromise(client.forTarget(target)).then((provider) => ({\n id: provider.id,\n createRecord: (zone, record) => Effect.runPromise(provider.createRecord(zone, record)),\n deleteRecord: (zone, providerRecordId) =>\n Effect.runPromise(provider.deleteRecord(zone, providerRecordId)),\n getRecord: (zone, providerRecordId) =>\n Effect.runPromise(provider.getRecord(zone, providerRecordId)),\n listRecords: (zone) => Effect.runPromise(provider.listRecords(zone)),\n })),\n validateToken: () => Effect.runPromise(client.validateToken()),\n };\n}\n\n/** Creates the optional Cloudflare discovery source for Promise consumers. */\nexport function discovery(options: Cloudflare.Client.Options): ZoneDiscovery.Source {\n const client = make(options);\n return {\n listZones: async (name) =>\n (await client.listZones({ name })).map((zone) => ({\n ...zone,\n status: zone.status === \"active\" || zone.status === \"pending\" ? zone.status : \"unknown\",\n })),\n provider: client,\n };\n}\n","import { Effect } from \"effect\";\n\nimport type * as Client from \"../providers/vercel/client.ts\";\nimport * as EffectAuth from \"../providers/vercel/auth.ts\";\nimport type * as ProviderSession from \"../provider/session.ts\";\nimport * as Connection from \"./connection.ts\";\n\nexport const integrationMethod = EffectAuth.integrationMethod;\nexport const manifest = EffectAuth.manifest;\nexport function restore(\n options: ProviderSession.RestoreInput & Pick<Client.Options, \"baseUrl\" | \"fetch\">,\n): Promise<Client.Interface> {\n return Effect.runPromise(EffectAuth.restore(options));\n}\nexport const tokenMethod = EffectAuth.tokenMethod;\nexport type {\n ExchangeCodeOptions,\n IntegrationCredential,\n IntegrationFlowOptions,\n IntegrationMethodOptions,\n} from \"../providers/vercel/auth.ts\";\n\nexport function exchangeCode(\n options: EffectAuth.ExchangeCodeOptions,\n): Promise<EffectAuth.IntegrationCredential> {\n return Effect.runPromise(EffectAuth.exchangeCode(options));\n}\n\n/** Creates Vercel Integration's implementation for the Promise connection facade. */\nexport function integrationFlow(\n options: EffectAuth.IntegrationFlowOptions,\n): Connection.InteractiveFlow {\n return Connection.fromEffectFlow(EffectAuth.integrationFlow(options));\n}\n\n/** Creates a Vercel token method for the Promise connection facade. */\nexport function tokenConnectionMethod(\n options: EffectAuth.TokenConnectionOptions,\n): Extract<Connection.Method, { readonly _tag: \"Token\" }> {\n return Connection.fromEffectTokenMethod(EffectAuth.tokenConnectionMethod(options));\n}\n","import { Effect } from \"effect\";\n\nimport type * as Connection from \"../auth/connection.ts\";\nimport type * as ProviderAuth from \"../auth/manifest.ts\";\nimport type * as DomainName from \"../domain/domain-name.ts\";\nimport type * as DnsProvider from \"../provider/provider.ts\";\nimport * as Vercel from \"../providers/vercel/index.ts\";\nimport type * as ProviderSession from \"../provider/session.ts\";\nimport type * as ZoneDiscovery from \"./zone-discovery.ts\";\n\nexport * as Auth from \"./vercel-auth.ts\";\nexport { AccountContext } from \"../providers/vercel/client.ts\";\nexport type { Account, Fetch, ListZonesInput, Options, Zone } from \"../providers/vercel/client.ts\";\n\nexport interface Interface extends DnsProvider.AsyncInterface {\n readonly providerId: \"vercel\";\n readonly forTarget: (target: Connection.ProviderTarget) => Promise<DnsProvider.AsyncInterface>;\n readonly listAccounts: () => Promise<ReadonlyArray<Vercel.Account>>;\n readonly listZones: (input?: Vercel.Client.ListZonesInput) => Promise<ReadonlyArray<Vercel.Zone>>;\n readonly listTargets: (\n input?: ProviderSession.ListTargetsInput,\n ) => Promise<ReadonlyArray<Connection.ProviderTarget>>;\n readonly resolveTarget: (domain: DomainName.DomainName) => Promise<ProviderSession.Resolution>;\n readonly validateToken: () => Promise<ProviderAuth.TokenValidation>;\n}\n\n/** Creates a Promise-compatible facade over the Effect-native Vercel client. */\nexport function make(options: Vercel.Client.Options): Interface {\n const client = Vercel.make(options);\n return {\n id: client.id,\n providerId: client.providerId,\n createRecord: (zone, record) => Effect.runPromise(client.createRecord(zone, record)),\n deleteRecord: (zone, providerRecordId) =>\n Effect.runPromise(client.deleteRecord(zone, providerRecordId)),\n getRecord: (zone, providerRecordId) =>\n Effect.runPromise(client.getRecord(zone, providerRecordId)),\n listAccounts: () => Effect.runPromise(client.listAccounts()),\n listRecords: (zone) => Effect.runPromise(client.listRecords(zone)),\n listZones: (input) => Effect.runPromise(client.listZones(input)),\n listTargets: (input) => Effect.runPromise(client.listTargets(input)),\n resolveTarget: (domain) => Effect.runPromise(client.resolveTarget(domain)),\n forTarget: (target) =>\n Effect.runPromise(client.forTarget(target)).then((provider) => ({\n id: provider.id,\n createRecord: (zone, record) => Effect.runPromise(provider.createRecord(zone, record)),\n deleteRecord: (zone, providerRecordId) =>\n Effect.runPromise(provider.deleteRecord(zone, providerRecordId)),\n getRecord: (zone, providerRecordId) =>\n Effect.runPromise(provider.getRecord(zone, providerRecordId)),\n listRecords: (zone) => Effect.runPromise(provider.listRecords(zone)),\n })),\n validateToken: () => Effect.runPromise(client.validateToken()),\n };\n}\n\n/** Creates the optional Vercel discovery source for Promise consumers. */\nexport function discovery(options: Vercel.Client.Options): ZoneDiscovery.Source {\n const client = make(options);\n return {\n listZones: (name) => client.listZones({ name }),\n provider: client,\n };\n}\n","import { Effect, Layer } from \"effect\";\n\nimport type * as Connection from \"../auth/connection.ts\";\nimport type * as ProviderAuthorization from \"../auth/authorization.ts\";\nimport * as ConnectionAuthorization from \"../plan/connection-authorization.ts\";\nimport * as Lifecycle from \"./managed-dns-connections.ts\";\nimport { webCryptoLayer } from \"../plan/canonical-json.ts\";\nimport * as ProvisioningEffect from \"../plan/plan.ts\";\nimport type * as DnsPlan from \"../plan/types.ts\";\nimport * as DnsProvider from \"../provider/provider.ts\";\nimport * as ZoneDiscoveryEffect from \"../discovery/zone-discovery.ts\";\nimport * as ZoneDiscovery from \"./zone-discovery.ts\";\n\nexport interface ExactCreateInput extends ProvisioningEffect.ExactCreateInput {\n readonly provider: DnsProvider.AsyncInterface;\n}\n\nexport interface DiscoverCreateInput extends ProvisioningEffect.DiscoverCreateInput {\n readonly sources: ReadonlyArray<ZoneDiscovery.Source>;\n}\n\nexport function create(input: ExactCreateInput): Promise<ProvisioningEffect.ResolvedCreateResult>;\nexport function create(input: DiscoverCreateInput): Promise<ProvisioningEffect.CreateResult>;\nexport function create(\n input: ExactCreateInput | DiscoverCreateInput,\n): Promise<ProvisioningEffect.CreateResult> {\n if (\"sources\" in input) {\n const { sources, ...programInput } = input;\n return Effect.runPromise(\n ProvisioningEffect.create(programInput).pipe(\n Effect.provide(\n Layer.merge(\n Layer.succeed(\n ZoneDiscoveryEffect.Service,\n ZoneDiscoveryEffect.make(sources.map(ZoneDiscovery.toEffectSource)),\n ),\n webCryptoLayer,\n ),\n ),\n ),\n );\n }\n const { provider, ...programInput } = input;\n return Effect.runPromise(\n ProvisioningEffect.create(programInput).pipe(\n Effect.provide(Layer.merge(DnsProvider.layerFromAsync(provider), webCryptoLayer)),\n ),\n );\n}\n\nexport function authorize(\n plan: DnsPlan.DnsPlan,\n operationIds?: ReadonlyArray<string>,\n options: { readonly allowPartial?: boolean } = {},\n): Promise<DnsPlan.PlanAuthorization> {\n return Effect.runPromise(\n ProvisioningEffect.authorize(plan, operationIds, options).pipe(Effect.provide(webCryptoLayer)),\n );\n}\n\nexport function apply(input: {\n readonly authorization: DnsPlan.PlanAuthorization;\n readonly plan: DnsPlan.DnsPlan;\n readonly provider: DnsProvider.AsyncInterface;\n}): Promise<DnsPlan.ApplyReceipt> {\n return Effect.runPromise(\n ProvisioningEffect.apply({ authorization: input.authorization, plan: input.plan }).pipe(\n Effect.provide(Layer.merge(DnsProvider.layerFromAsync(input.provider), webCryptoLayer)),\n ),\n );\n}\n\nexport function authorizeForConnection(input: {\n readonly allowPartial?: boolean;\n readonly authorization: ProviderAuthorization.ProviderAuthorization;\n readonly attachment: Connection.DomainAttachment;\n readonly connection: Connection.ProviderConnection;\n readonly domain: string;\n readonly operationIds?: ReadonlyArray<string>;\n readonly plan: DnsPlan.DnsPlan;\n readonly repository: Lifecycle.AsyncInterface;\n}): Promise<DnsPlan.PlanAuthorization> {\n return Effect.runPromise(\n ConnectionAuthorization.authorize({\n attachment: input.attachment,\n authorization: input.authorization,\n connection: input.connection,\n domain: input.domain,\n ...(input.allowPartial === undefined ? {} : { allowPartial: input.allowPartial }),\n ...(input.operationIds === undefined ? {} : { operationIds: input.operationIds }),\n plan: input.plan,\n }).pipe(\n Effect.provide(Layer.merge(Lifecycle.layerFromAsync(input.repository), webCryptoLayer)),\n ),\n );\n}\n\nexport const renderManualInstructions = ProvisioningEffect.renderManualInstructions;\nexport { CreateResult, Target } from \"../plan/plan.ts\";\n","import { Data, Effect, Layer } from \"effect\";\n\nimport type * as DomainName from \"../domain/domain-name.ts\";\nimport type * as DnsRecord from \"../domain/dns-record.ts\";\nimport * as DnsProvider from \"../provider/provider.ts\";\nimport * as DnsResolver from \"../verification/resolver.ts\";\nimport * as DnsResolverPoolEffect from \"../verification/resolver-pool.ts\";\nimport * as VerificationEffect from \"../verification/verify.ts\";\nimport type * as DnsResolverPool from \"./resolver-pool.ts\";\n\nexport type PublicDns = VerificationEffect.PublicDns;\nexport const PublicDns = VerificationEffect.PublicDns;\n\nexport type Provider = Data.TaggedEnum<{\n Disabled: {};\n Enabled: {\n readonly provider: DnsProvider.AsyncInterface;\n readonly zone: DomainName.DomainName;\n };\n}>;\nexport const Provider = Data.taggedEnum<Provider>();\n\nexport interface Config {\n readonly provider?: Provider;\n readonly publicDns?: PublicDns;\n readonly record: DnsRecord.DnsRecord;\n readonly resolvers?: ReadonlyArray<DnsResolverPool.Entry>;\n}\n\nexport { ProviderObservation, PublicDnsObservation, Result } from \"../verification/verify.ts\";\n\nexport function observe(input: Config): Promise<VerificationEffect.Result> {\n const provider = input.provider ?? Provider.Disabled();\n let program =\n provider._tag === \"Enabled\"\n ? VerificationEffect.observe({\n record: input.record,\n ...(input.publicDns === undefined ? {} : { publicDns: input.publicDns }),\n provider: VerificationEffect.Provider.Enabled({ zone: provider.zone }),\n }).pipe(Effect.provide(DnsProvider.layerFromAsync(provider.provider)))\n : VerificationEffect.observe({\n record: input.record,\n ...(input.publicDns === undefined ? {} : { publicDns: input.publicDns }),\n provider: VerificationEffect.Provider.Disabled(),\n });\n if (input.resolvers !== undefined) {\n program = program.pipe(\n Effect.provide(\n Layer.succeed(\n DnsResolverPoolEffect.Service,\n DnsResolverPoolEffect.make(\n input.resolvers.map((entry) => ({\n id: entry.id,\n resolver: fromAsyncResolver(entry.resolver),\n ...(entry.timeoutMs === undefined ? {} : { timeoutMs: entry.timeoutMs }),\n })),\n ),\n ),\n ),\n );\n }\n return Effect.runPromise(program);\n}\n\nfunction fromAsyncResolver(resolver: DnsResolver.AsyncInterface): DnsResolver.Interface {\n return {\n resolve: (query) =>\n Effect.tryPromise({\n try: () => resolver.resolve(query),\n catch: (cause) =>\n new DnsResolver.Error({\n cause,\n message: cause instanceof globalThis.Error ? cause.message : String(cause),\n reason: \"transport\",\n }),\n }).pipe(\n Effect.flatMap((resolution) => {\n switch (resolution._tag) {\n case \"answer\":\n case \"nodata\":\n return Effect.succeed(resolution);\n case \"timeout\":\n return Effect.fail(\n new DnsResolver.Error({ message: \"DNS query timed out\", reason: \"timeout\" }),\n );\n case \"failure\":\n return Effect.fail(\n new DnsResolver.Error({ message: resolution.message, reason: \"transport\" }),\n );\n }\n }),\n ),\n };\n}\n","import * as CloudflareDnsOverHttps from \"../verification/cloudflare-doh.ts\";\nimport type * as DnsResolver from \"../verification/resolver.ts\";\n\nexport type Options = CloudflareDnsOverHttps.Options;\n\nexport function make(options: Options = {}): DnsResolver.AsyncInterface {\n return CloudflareDnsOverHttps.toAsync(options);\n}\n","import * as DnsOverHttps from \"../verification/doh.ts\";\nimport type * as DnsResolver from \"../verification/resolver.ts\";\n\nexport type Options = DnsOverHttps.Options;\n\nexport function make(options: Options): DnsResolver.AsyncInterface {\n return DnsOverHttps.toAsync(options);\n}\n","import * as GoogleDnsOverHttps from \"../verification/google-doh.ts\";\nimport type * as DnsResolver from \"../verification/resolver.ts\";\n\nexport type Options = GoogleDnsOverHttps.Options;\n\nexport function make(options: Options = {}): DnsResolver.AsyncInterface {\n return GoogleDnsOverHttps.toAsync(options);\n}\n","import { Effect } from \"effect\";\n\nimport * as DnsResolver from \"../verification/resolver.ts\";\nimport * as Pool from \"../verification/resolver-pool.ts\";\n\nexport interface Entry {\n readonly id: string;\n readonly resolver: DnsResolver.AsyncInterface;\n readonly timeoutMs?: number;\n}\n\nexport interface Interface {\n readonly observe: (query: DnsResolver.Query) => Promise<ReadonlyArray<Pool.Observation>>;\n}\n\nexport function make(entries: ReadonlyArray<Entry>): Interface {\n return toAsync(\n Pool.make(\n entries.map((entry) => ({\n id: entry.id,\n resolver: asyncResolver(entry.resolver),\n ...(entry.timeoutMs === undefined ? {} : { timeoutMs: entry.timeoutMs }),\n })),\n ),\n );\n}\n\nexport function defaultMake(options: Pool.DefaultOptions = {}): Interface {\n return toAsync(Pool.defaultMake(options));\n}\n\nexport { Observation, Policy } from \"../verification/resolver-pool.ts\";\n\nfunction toAsync(pool: Pool.Interface): Interface {\n return {\n observe: (query) => Effect.runPromise(pool.observe(query)),\n };\n}\n\nfunction asyncResolver(resolver: DnsResolver.AsyncInterface): DnsResolver.Interface {\n return {\n resolve: (query) =>\n Effect.tryPromise({\n try: () => resolver.resolve(query),\n catch: (cause) =>\n new DnsResolver.Error({\n cause,\n message: cause instanceof globalThis.Error ? cause.message : String(cause),\n reason: \"transport\",\n }),\n }).pipe(\n Effect.flatMap((resolution) => {\n switch (resolution._tag) {\n case \"answer\":\n case \"nodata\":\n return Effect.succeed(resolution);\n case \"timeout\":\n return Effect.fail(\n new DnsResolver.Error({ message: \"DNS query timed out\", reason: \"timeout\" }),\n );\n case \"failure\":\n return Effect.fail(\n new DnsResolver.Error({ message: resolution.message, reason: \"transport\" }),\n );\n }\n }),\n ),\n };\n}\n","import packageJson from \"../package.json\" with { type: \"json\" };\n\n/** The current package version from the package manifest. */\nexport const VERSION = packageJson.version;\n\nexport * as Connection from \"./promise/connection.ts\";\nexport * as ManagedDnsConnections from \"./promise/managed-dns-connections.ts\";\nexport * as Diagnostic from \"./auth/diagnostic.ts\";\nexport * as ProviderContext from \"./auth/provider-context.ts\";\nexport * as Secret from \"./auth/secret.ts\";\nexport type * as DnsProvider from \"./promise/dns-provider.ts\";\nexport * as ProviderSession from \"./promise/provider-session.ts\";\nexport * as DnsResolver from \"./promise/dns-resolver.ts\";\nexport * as ProviderAuth from \"./promise/provider-auth.ts\";\nexport * as ProviderDiscovery from \"./discovery/selection.ts\";\nexport * as ZoneDiscovery from \"./promise/zone-discovery.ts\";\nexport * as Zones from \"./discovery/zones.ts\";\nexport * as DnsRecord from \"./promise/dns-record.ts\";\nexport * as DomainName from \"./promise/domain-name.ts\";\nexport * as InvalidInput from \"./invalid-input.ts\";\nexport * as DnsPlan from \"./promise/dns-plan.ts\";\nexport * as Deletion from \"./promise/deletion.ts\";\nexport * as Cloudflare from \"./promise/cloudflare.ts\";\nexport * as Vercel from \"./promise/vercel.ts\";\nexport * as Provisioning from \"./promise/provisioning.ts\";\nexport * as Verification from \"./promise/verification.ts\";\nexport * as CloudflareDnsOverHttps from \"./promise/cloudflare-doh.ts\";\nexport * as DnsOverHttps from \"./promise/doh.ts\";\nexport * as GoogleDnsOverHttps from \"./promise/google-doh.ts\";\nexport * as DnsResolverPool from \"./promise/resolver-pool.ts\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAqBA,SAAgBA,SAAO,OAAwD;CAC7E,OAAO,OAAO,WAAWC,SAAkB,KAAK,CAAC;AACnD;AAeA,MAAa,SAAS,KAAK,WAAmB;AAe9C,MAAM,qBAAqB,WAAmB,UAC5C,iBAAiBC,QACb,QACA,IAAIA,MAAc;CAChB,UAAU;CACV,SAAS,iBAAiB,WAAW,QAAQ,MAAM,UAAU,OAAO,KAAK;CACzE;CACA,OAAO;AACT,CAAC;AAEP,MAAM,gBAAgB,WACpB,OAAO,SAAS,gBAAA,SACG,YAAY;CACzB,eAAe,oBAAoB,OAAO,aAAa;CACvD,MAAM,WAAW,OAAO,IAAI;CAC5B,GAAI,OAAO,UAAU,KAAA,IAAY,CAAC,IAAI,EAAE,OAAO,OAAO,MAAM;AAC9D,CAAC,IAAA,SACc,MAAM;CACnB,eAAe,UACb,OAAO,WAAW;EAChB,WAAW,OAAO,aAAa,KAAK;EACpC,QAAQ,UAAU,kBAAkB,oBAAoB,KAAK;CAC/D,CAAC;CACH,YAAY,OAAO;CACnB,sBAAsB,OAAO;CAC7B,OAAO,OAAO;AAChB,CAAC;AAEP,MAAM,uBAAuB,WAAyD;CACpF,UAAU,IAAI,QACZ,OAAO,WAAW;EAChB,WAAW,MAAM,QAAQ,IAAI,GAAG;EAChC,QAAQ,UAAU,kBAAkB,mCAAmC,KAAK;CAC9E,CAAC;CACH,MAAM,iBACJ,OAAO,WAAW;EAChB,WAAW,MAAM,IAAI,YAAY;EACjC,QAAQ,UAAU,kBAAkB,+BAA+B,KAAK;CAC1E,CAAC;AACL;AAEA,MAAM,cAAc,UAAoD;CACtE,WAAW,SAAS,gBAClB,OAAO,WAAW;EAChB,WAAW,KAAK,SAAS,SAAS,WAAW;EAC7C,QAAQ,UAAU,kBAAkB,uBAAuB,KAAK;CAClE,CAAC;CACH,QAAQ,KAAK;CACb,YAAY,KAAK;CACjB,sBAAsB,KAAK;CAC3B,QAAQ,mBACN,OAAO,WAAW;EAChB,WAAW,KAAK,MAAM,cAAc;EACpC,QAAQ,UAAU,kBAAkB,oBAAoB,KAAK;CAC/D,CAAC;AACL;;AAGA,MAAa,kBAAkB,UAAoD;CACjF,WAAW,SAAS,gBAAgB,OAAO,WAAW,KAAK,SAAS,SAAS,WAAW,CAAC;CACzF,QAAQ,KAAK;CACb,YAAY,KAAK;CACjB,sBAAsB,KAAK;CAC3B,QAAQ,mBACN,OAAO,WAAW,KAAK,MAAM,cAAc,CAAC,CAAC,KAAK,OAAO,QAAQ,cAAc,CAAC,CAAC;AACrF;;AAGA,SAAgB,sBACd,QAC6C;CAC7C,OAAO,OAAO,MAAM;EAClB,eAAe,UAAU,OAAO,WAAW,OAAO,aAAa,KAAK,CAAC;EACrE,YAAY,OAAO;EACnB,sBAAsB,OAAO;EAC7B,OAAO,OAAO;CAChB,CAAC;AACH;AAEA,eAAsB,MACpB,OAI8B;CAC9B,OAAO,OAAO,WACZC,QAAc;EACZ,gBAAgB,MAAM;EACtB,GAAI,MAAM,oBAAoB,KAAA,IAAY,CAAC,IAAI,EAAE,iBAAiB,MAAM,gBAAgB;EACxF,QAAQ,aAAa,MAAM,MAAM;EACjC,SAAS,MAAM;CACjB,CAAC,CAAC,CAAC,KACD,OAAO,QAAQ,MAAM,MAAMC,iBAAyB,MAAM,UAAU,GAAG,cAAc,CAAC,CACxF,CACF;AACF;AAEA,eAAsB,SAAS,OAMY;CACzC,OAAO,OAAO,WACZC,WAAiB;EACf,aAAa,MAAM;EACnB,gBAAgB,MAAM;EACtB,eAAe,oBAAoB,MAAM,aAAa;EACtD,MAAM,WAAW,MAAM,IAAI;CAC7B,CAAC,CAAC,CAAC,KACD,OAAO,QAAQ,MAAM,MAAMD,iBAAyB,MAAM,UAAU,GAAG,cAAc,CAAC,CACxF,CACF;AACF;AAEA,SAAgB,OAAO,OAKiB;CACtC,OAAO,MAAM,WAAW,OAAO;EAC7B,YAAY,MAAM;EAClB,cAAc,MAAM;EACpB,SAAS,MAAM;CACjB,CAAC;AACH;AAEA,SAAgB,OAAO,OAIa;CAClC,OAAO,MAAM,WAAW,OAAO;EAC7B,cAAc,MAAM;EACpB,SAAS,MAAM;CACjB,CAAC;AACH;AAEA,SAAgB,WAAW,OAKa;CACtC,OAAO,MAAM,WAAW,WAAW;EACjC,cAAc,MAAM;EACpB,SAAS,MAAM;EACf,QAAQ,MAAM;CAChB,CAAC;AACH;;;;ACzLA,MAAa,cAAc,aAAiD;CAC1E,YAAY,QAAQ;CACpB,cAAc,UAAU,OAAO,WAAW,QAAQ,YAAY,KAAK,CAAC;CACpE,gBAAgB,WAAW,OAAO,WAAW,QAAQ,cAAc,MAAM,CAAC;CAC1E,YAAY,WACV,OAAO,WAAW,QAAQ,UAAU,MAAM,CAAC,CAAC,CAAC,KAAKE,SAAyB;AAC/E;;;;ACtBA,MAAa,aAAa;;;;;;;;ACU1B,SAAgBC,SAAO,OAAgD;CACrE,OAAO,OAAO,WAAWC,SAAoB,KAAK,CAAC;AACrD;;;;;;;;ACIA,SAAgB,SAAS,OAGJ;CACnB,OAAO,OAAO,WACZC,OAAe,MAAM,QAAQ,IAAI,cAAc,CAAC,CAAC,CAC9C,SAAS,MAAM,MAAM,CAAC,CACtB,KAAK,OAAO,IAAI,cAAc,CAAC,CACpC;AACF;AAEA,SAAgB,eAAe,QAAkC;CAC/D,OAAO;EACL,YAAY,SACV,OAAO,WAAW;GAChB,WAAW,OAAO,UAAU,IAAI;GAChC,QAAQ,UACN,IAAIC,QAAe;IACjB;IACA,SAAS,iBAAiB,WAAW,QAAQ,MAAM,UAAU,OAAO,KAAK;IACzE,WAAW;IACX,YAAY,OAAO,SAAS;IAC5B,QAAQ;GACV,CAAC;EACL,CAAC;EACH,UAAA,UAA2B,GAAG;GAC5B,IAAI,OAAO,SAAS;GACpB,eAAe,MAAM,WACnB,OAAO,WAAW;IAChB,WAAW,OAAO,SAAS,aAAa,MAAM,MAAM;IACpD,QAAQ,UAAU,gBAAgB,OAAO,SAAS,IAAI,gBAAgB,KAAK;GAC7E,CAAC;GACH,eAAe,MAAM,qBACnB,OAAO,WAAW;IAChB,WAAW,OAAO,SAAS,aAAa,MAAM,gBAAgB;IAC9D,QAAQ,UAAU,gBAAgB,OAAO,SAAS,IAAI,gBAAgB,KAAK;GAC7E,CAAC;GACH,YAAY,MAAM,qBAChB,OAAO,WAAW;IAChB,WAAW,OAAO,SAAS,UAAU,MAAM,gBAAgB;IAC3D,QAAQ,UAAU,gBAAgB,OAAO,SAAS,IAAI,aAAa,KAAK;GAC1E,CAAC;GACH,cAAc,SACZ,OAAO,WAAW;IAChB,WAAW,OAAO,SAAS,YAAY,IAAI;IAC3C,QAAQ,UAAU,gBAAgB,OAAO,SAAS,IAAI,eAAe,KAAK;GAC5E,CAAC;EACL,CAAC;CACH;AACF;AAEA,SAAS,eAAe,SAAqC;CAC3D,QAAQ,QAAQ,MAAhB;EACE,KAAK,YACH,OAAO;EACT,KAAK,YACH,OAAO;GAAE,MAAM;GAAY,WAAW,QAAQ;EAAU;EAC1D,KAAK,qBACH,OAAO;CACX;AACF;AAEA,SAAS,gBAAgB,YAAoB,WAAmB,OAAgC;CAC9F,OAAO,iBAAiBA,UACpB,QACA,IAAIA,QAAe;EACjB;EACA,SAAS,iBAAiB,WAAW,QAAQ,MAAM,UAAU,OAAO,KAAK;EACzE;EACA;CACF,CAAC;AACP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AGnFA,SAAgB,OAAO,OAA0C;CAC/D,OAAO,OAAO,WAAWC,SAAe,KAAK,CAAC;AAChD;AAEA,SAAgB,cAAc,OAA+C;CAC3E,OAAO,OAAO,WAAWC,gBAAsB,KAAK,CAAC;AACvD;;;;;;;;;;;;;;ACNA,SAAgBC,SAAO,OAKU;CAC/B,OAAO,OAAO,WACZC,SAAsB;EACpB,MAAM,MAAM;EACZ,SAAS,MAAM;EACf,GAAI,MAAM,UAAU,KAAA,IAAY,CAAC,IAAI,EAAE,OAAO,MAAM,MAAM;CAC5D,CAAC,CAAC,CAAC,KACD,OAAO,QAAQ,MAAM,MAAMC,eAA2B,MAAM,QAAQ,GAAG,cAAc,CAAC,CACxF,CACF;AACF;AAEA,SAAgBC,YACd,MACA,cACuC;CACvC,OAAO,OAAO,WACZC,YAAyB,MAAM,YAAY,CAAC,CAAC,KAAK,OAAO,QAAQ,cAAc,CAAC,CAClF;AACF;AAEA,SAAgBC,QAAM,OAKc;CAClC,OAAO,OAAO,WACZC,QAAqB;EACnB,eAAe,MAAM;EACrB,MAAM,MAAM;EACZ,GAAI,MAAM,iBAAiB,KAAA,IAAY,CAAC,IAAI,EAAE,cAAc,MAAM,aAAa;CACjF,CAAC,CAAC,CAAC,KACD,OAAO,QAAQ,MAAM,MAAMJ,eAA2B,MAAM,QAAQ,GAAG,cAAc,CAAC,CACxF,CACF;AACF;;;;;;;;;;;;;;ACtCA,MAAaK,aAAWC;AACxB,MAAa,cAAcC;AAC3B,SAAgB,kBACd,SACqC;CACrC,OAAO,OAAO,WAAWC,oBAA6B,OAAO,CAAC;AAChE;AACA,SAAgBC,UACd,SAC2B;CAC3B,OAAO,OAAO,WAAWC,UAAmB,OAAO,CAAC;AACtD;AACA,MAAaC,gBAAcC;AAU3B,SAAgB,gBACd,SACwC;CACxC,MAAM,UAAUC,kBAA2B,OAAO;CAClD,QAAQ,QAAqC,gBAC3C,OAAO,WAAW,QAAQ,QAAQ,WAAW,CAAC;AAClD;;AAGA,SAAgB,UAAU,SAAkE;CAC1F,OAAOC,eAA0BC,YAAqB,OAAO,CAAC;AAChE;;AAGA,SAAgBC,wBACd,SACwD;CACxD,OAAOC,sBAAiCC,wBAAiC,OAAO,CAAC;AACnF;AAEA,SAAgB,eACd,SACgE;CAChE,MAAM,WAAWC,iBAA0B,OAAO;CAClD,QAAQ,UAAU,OAAO,WAAW,SAAS,KAAK,CAAC;AACrD;;;;;;;;;ACvBA,SAAgBC,OAAK,SAA+C;CAClE,MAAM,SAASC,OAAgB,OAAO;CACtC,OAAO;EACL,IAAI,OAAO;EACX,YAAY,OAAO;EACnB,eAAe,MAAM,WAAW,OAAO,WAAW,OAAO,aAAa,MAAM,MAAM,CAAC;EACnF,eAAe,MAAM,qBACnB,OAAO,WAAW,OAAO,aAAa,MAAM,gBAAgB,CAAC;EAC/D,YAAY,MAAM,qBAChB,OAAO,WAAW,OAAO,UAAU,MAAM,gBAAgB,CAAC;EAC5D,oBAAoB,OAAO,WAAW,OAAO,aAAa,CAAC;EAC3D,cAAc,SAAS,OAAO,WAAW,OAAO,YAAY,IAAI,CAAC;EACjE,YAAY,UAAU,OAAO,WAAW,OAAO,UAAU,KAAK,CAAC;EAC/D,cAAc,UAAU,OAAO,WAAW,OAAO,YAAY,KAAK,CAAC;EACnE,gBAAgB,WAAW,OAAO,WAAW,OAAO,cAAc,MAAM,CAAC;EACzE,YAAY,WACV,OAAO,WAAW,OAAO,UAAU,MAAM,CAAC,CAAC,CAAC,MAAM,cAAc;GAC9D,IAAI,SAAS;GACb,eAAe,MAAM,WAAW,OAAO,WAAW,SAAS,aAAa,MAAM,MAAM,CAAC;GACrF,eAAe,MAAM,qBACnB,OAAO,WAAW,SAAS,aAAa,MAAM,gBAAgB,CAAC;GACjE,YAAY,MAAM,qBAChB,OAAO,WAAW,SAAS,UAAU,MAAM,gBAAgB,CAAC;GAC9D,cAAc,SAAS,OAAO,WAAW,SAAS,YAAY,IAAI,CAAC;EACrE,EAAE;EACJ,qBAAqB,OAAO,WAAW,OAAO,cAAc,CAAC;CAC/D;AACF;;AAGA,SAAgBC,YAAU,SAA0D;CAClF,MAAM,SAASF,OAAK,OAAO;CAC3B,OAAO;EACL,WAAW,OAAO,UACf,MAAM,OAAO,UAAU,EAAE,KAAK,CAAC,EAAA,CAAG,KAAK,UAAU;GAChD,GAAG;GACH,QAAQ,KAAK,WAAW,YAAY,KAAK,WAAW,YAAY,KAAK,SAAS;EAChF,EAAE;EACJ,UAAU;CACZ;AACF;;;;;;;;;;;;ACnEA,MAAa,oBAAoBG;AACjC,MAAa,WAAWC;AACxB,SAAgB,QACd,SAC2B;CAC3B,OAAO,OAAO,WAAWC,UAAmB,OAAO,CAAC;AACtD;AACA,MAAa,cAAcC;AAQ3B,SAAgB,aACd,SAC2C;CAC3C,OAAO,OAAO,WAAWC,eAAwB,OAAO,CAAC;AAC3D;;AAGA,SAAgB,gBACd,SAC4B;CAC5B,OAAOC,eAA0BC,kBAA2B,OAAO,CAAC;AACtE;;AAGA,SAAgB,sBACd,SACwD;CACxD,OAAOC,sBAAiCC,wBAAiC,OAAO,CAAC;AACnF;;;;;;;;;;ACbA,SAAgBC,OAAK,SAA2C;CAC9D,MAAM,SAASC,OAAY,OAAO;CAClC,OAAO;EACL,IAAI,OAAO;EACX,YAAY,OAAO;EACnB,eAAe,MAAM,WAAW,OAAO,WAAW,OAAO,aAAa,MAAM,MAAM,CAAC;EACnF,eAAe,MAAM,qBACnB,OAAO,WAAW,OAAO,aAAa,MAAM,gBAAgB,CAAC;EAC/D,YAAY,MAAM,qBAChB,OAAO,WAAW,OAAO,UAAU,MAAM,gBAAgB,CAAC;EAC5D,oBAAoB,OAAO,WAAW,OAAO,aAAa,CAAC;EAC3D,cAAc,SAAS,OAAO,WAAW,OAAO,YAAY,IAAI,CAAC;EACjE,YAAY,UAAU,OAAO,WAAW,OAAO,UAAU,KAAK,CAAC;EAC/D,cAAc,UAAU,OAAO,WAAW,OAAO,YAAY,KAAK,CAAC;EACnE,gBAAgB,WAAW,OAAO,WAAW,OAAO,cAAc,MAAM,CAAC;EACzE,YAAY,WACV,OAAO,WAAW,OAAO,UAAU,MAAM,CAAC,CAAC,CAAC,MAAM,cAAc;GAC9D,IAAI,SAAS;GACb,eAAe,MAAM,WAAW,OAAO,WAAW,SAAS,aAAa,MAAM,MAAM,CAAC;GACrF,eAAe,MAAM,qBACnB,OAAO,WAAW,SAAS,aAAa,MAAM,gBAAgB,CAAC;GACjE,YAAY,MAAM,qBAChB,OAAO,WAAW,SAAS,UAAU,MAAM,gBAAgB,CAAC;GAC9D,cAAc,SAAS,OAAO,WAAW,SAAS,YAAY,IAAI,CAAC;EACrE,EAAE;EACJ,qBAAqB,OAAO,WAAW,OAAO,cAAc,CAAC;CAC/D;AACF;;AAGA,SAAgB,UAAU,SAAsD;CAC9E,MAAM,SAASD,OAAK,OAAO;CAC3B,OAAO;EACL,YAAY,SAAS,OAAO,UAAU,EAAE,KAAK,CAAC;EAC9C,UAAU;CACZ;AACF;;;;;;;;;;;;ACxCA,SAAgB,OACd,OAC0C;CAC1C,IAAI,aAAa,OAAO;EACtB,MAAM,EAAE,SAAS,GAAG,iBAAiB;EACrC,OAAO,OAAO,WACZE,SAA0B,YAAY,CAAC,CAAC,KACtC,OAAO,QACL,MAAM,MACJ,MAAM,QACJC,WACAC,OAAyB,QAAQ,IAAIC,cAA4B,CAAC,CACpE,GACA,cACF,CACF,CACF,CACF;CACF;CACA,MAAM,EAAE,UAAU,GAAG,iBAAiB;CACtC,OAAO,OAAO,WACZH,SAA0B,YAAY,CAAC,CAAC,KACtC,OAAO,QAAQ,MAAM,MAAMI,eAA2B,QAAQ,GAAG,cAAc,CAAC,CAClF,CACF;AACF;AAEA,SAAgB,UACd,MACA,cACA,UAA+C,CAAC,GACZ;CACpC,OAAO,OAAO,WACZC,YAA6B,MAAM,cAAc,OAAO,CAAC,CAAC,KAAK,OAAO,QAAQ,cAAc,CAAC,CAC/F;AACF;AAEA,SAAgB,MAAM,OAIY;CAChC,OAAO,OAAO,WACZC,QAAyB;EAAE,eAAe,MAAM;EAAe,MAAM,MAAM;CAAK,CAAC,CAAC,CAAC,KACjF,OAAO,QAAQ,MAAM,MAAMF,eAA2B,MAAM,QAAQ,GAAG,cAAc,CAAC,CACxF,CACF;AACF;AAEA,SAAgB,uBAAuB,OASA;CACrC,OAAO,OAAO,WACZG,YAAkC;EAChC,YAAY,MAAM;EAClB,eAAe,MAAM;EACrB,YAAY,MAAM;EAClB,QAAQ,MAAM;EACd,GAAI,MAAM,iBAAiB,KAAA,IAAY,CAAC,IAAI,EAAE,cAAc,MAAM,aAAa;EAC/E,GAAI,MAAM,iBAAiB,KAAA,IAAY,CAAC,IAAI,EAAE,cAAc,MAAM,aAAa;EAC/E,MAAM,MAAM;CACd,CAAC,CAAC,CAAC,KACD,OAAO,QAAQ,MAAM,MAAMC,iBAAyB,MAAM,UAAU,GAAG,cAAc,CAAC,CACxF,CACF;AACF;AAEA,MAAa,2BAA2BC;;;;;;;;;;;ACtFxC,MAAa,YAAYC;AASzB,MAAa,WAAW,KAAK,WAAqB;AAWlD,SAAgB,QAAQ,OAAmD;CACzE,MAAM,WAAW,MAAM,YAAY,SAAS,SAAS;CACrD,IAAI,UACF,SAAS,SAAS,YACdC,UAA2B;EACzB,QAAQ,MAAM;EACd,GAAI,MAAM,cAAc,KAAA,IAAY,CAAC,IAAI,EAAE,WAAW,MAAM,UAAU;EACtE,UAAA,WAAsC,QAAQ,EAAE,MAAM,SAAS,KAAK,CAAC;CACvE,CAAC,CAAC,CAAC,KAAK,OAAO,QAAQC,eAA2B,SAAS,QAAQ,CAAC,CAAC,IACrED,UAA2B;EACzB,QAAQ,MAAM;EACd,GAAI,MAAM,cAAc,KAAA,IAAY,CAAC,IAAI,EAAE,WAAW,MAAM,UAAU;EACtE,UAAA,WAAsC,SAAS;CACjD,CAAC;CACP,IAAI,MAAM,cAAc,KAAA,GACtB,UAAU,QAAQ,KAChB,OAAO,QACL,MAAM,QACJE,SACAC,OACE,MAAM,UAAU,KAAK,WAAW;EAC9B,IAAI,MAAM;EACV,UAAU,kBAAkB,MAAM,QAAQ;EAC1C,GAAI,MAAM,cAAc,KAAA,IAAY,CAAC,IAAI,EAAE,WAAW,MAAM,UAAU;CACxE,EAAE,CACJ,CACF,CACF,CACF;CAEF,OAAO,OAAO,WAAW,OAAO;AAClC;AAEA,SAAS,kBAAkB,UAA6D;CACtF,OAAO,EACL,UAAU,UACR,OAAO,WAAW;EAChB,WAAW,SAAS,QAAQ,KAAK;EACjC,QAAQ,UACN,IAAIC,QAAkB;GACpB;GACA,SAAS,iBAAiB,WAAW,QAAQ,MAAM,UAAU,OAAO,KAAK;GACzE,QAAQ;EACV,CAAC;CACL,CAAC,CAAC,CAAC,KACD,OAAO,SAAS,eAAe;EAC7B,QAAQ,WAAW,MAAnB;GACE,KAAK;GACL,KAAK,UACH,OAAO,OAAO,QAAQ,UAAU;GAClC,KAAK,WACH,OAAO,OAAO,KACZ,IAAIA,QAAkB;IAAE,SAAS;IAAuB,QAAQ;GAAU,CAAC,CAC7E;GACF,KAAK,WACH,OAAO,OAAO,KACZ,IAAIA,QAAkB;IAAE,SAAS,WAAW;IAAS,QAAQ;GAAY,CAAC,CAC5E;EACJ;CACF,CAAC,CACH,EACJ;AACF;;;;ACxFA,SAAgBC,OAAK,UAAmB,CAAC,GAA+B;CACtE,OAAOC,UAA+B,OAAO;AAC/C;;;;ACFA,SAAgBC,OAAK,SAA8C;CACjE,OAAOC,UAAqB,OAAO;AACrC;;;;ACFA,SAAgBC,OAAK,UAAmB,CAAC,GAA+B;CACtE,OAAOC,UAA2B,OAAO;AAC3C;;;;;;;;;ACQA,SAAgB,KAAK,SAA0C;CAC7D,OAAO,QACLC,OACE,QAAQ,KAAK,WAAW;EACtB,IAAI,MAAM;EACV,UAAU,cAAc,MAAM,QAAQ;EACtC,GAAI,MAAM,cAAc,KAAA,IAAY,CAAC,IAAI,EAAE,WAAW,MAAM,UAAU;CACxE,EAAE,CACJ,CACF;AACF;AAEA,SAAgB,YAAY,UAA+B,CAAC,GAAc;CACxE,OAAO,QAAQC,cAAiB,OAAO,CAAC;AAC1C;AAIA,SAAS,QAAQ,MAAiC;CAChD,OAAO,EACL,UAAU,UAAU,OAAO,WAAW,KAAK,QAAQ,KAAK,CAAC,EAC3D;AACF;AAEA,SAAS,cAAc,UAA6D;CAClF,OAAO,EACL,UAAU,UACR,OAAO,WAAW;EAChB,WAAW,SAAS,QAAQ,KAAK;EACjC,QAAQ,UACN,IAAIC,QAAkB;GACpB;GACA,SAAS,iBAAiB,WAAW,QAAQ,MAAM,UAAU,OAAO,KAAK;GACzE,QAAQ;EACV,CAAC;CACL,CAAC,CAAC,CAAC,KACD,OAAO,SAAS,eAAe;EAC7B,QAAQ,WAAW,MAAnB;GACE,KAAK;GACL,KAAK,UACH,OAAO,OAAO,QAAQ,UAAU;GAClC,KAAK,WACH,OAAO,OAAO,KACZ,IAAIA,QAAkB;IAAE,SAAS;IAAuB,QAAQ;GAAU,CAAC,CAC7E;GACF,KAAK,WACH,OAAO,OAAO,KACZ,IAAIA,QAAkB;IAAE,SAAS,WAAW;IAAS,QAAQ;GAAY,CAAC,CAC5E;EACJ;CACF,CAAC,CACH,EACJ;AACF;;;;ACjEA,MAAa,UAAUC"}