domainkit 0.5.0 → 0.7.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.
- package/README.md +13 -12
- package/dist/canonical-json-CQYKsZw7.mjs +310 -0
- package/dist/canonical-json-CQYKsZw7.mjs.map +1 -0
- package/dist/connect-10vHuShV.d.mts +1401 -0
- package/dist/connect-oI8hcMxc.mjs +185 -0
- package/dist/connect-oI8hcMxc.mjs.map +1 -0
- package/dist/connection-C0xsU41C.d.mts +186 -0
- package/dist/connection-api-DW7xUJdj.d.mts +26 -0
- package/dist/index.d.mts +7 -26
- package/dist/index.mjs +12 -5
- package/dist/index.mjs.map +1 -1
- package/dist/managed-dns-connections-C3A_GBaz.mjs +99 -0
- package/dist/managed-dns-connections-C3A_GBaz.mjs.map +1 -0
- package/dist/promise.d.mts +104 -223
- package/dist/promise.mjs +45 -126
- package/dist/promise.mjs.map +1 -1
- package/dist/{resolver-tZU6gEVq.mjs → resolver-DPJs8h0a.mjs} +54 -250
- package/dist/resolver-DPJs8h0a.mjs.map +1 -0
- package/dist/{resolver-BGBLnPjJ.d.mts → resolver-DRrLm_hB.d.mts} +911 -1140
- package/dist/server.d.mts +128 -0
- package/dist/server.mjs +319 -0
- package/dist/server.mjs.map +1 -0
- package/dist/testing.d.mts +5 -4
- package/dist/testing.mjs +13 -18
- package/dist/testing.mjs.map +1 -1
- package/dist/{verify-6xK05pwL.d.mts → verify-C3V_GtzL.d.mts} +45 -20
- package/dist/{verify-B2fPyjde.mjs → verify-DDnK8U7C.mjs} +138 -323
- package/dist/verify-DDnK8U7C.mjs.map +1 -0
- package/package.json +8 -2
- package/dist/resolver-tZU6gEVq.mjs.map +0 -1
- package/dist/verify-B2fPyjde.mjs.map +0 -1
package/dist/promise.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"promise.mjs","names":["Lifecycle.Error","Lifecycle.Service","toAsync","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","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/managed-dns-connections.ts","../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 { Effect, Layer } from \"effect\";\n\nimport type * as ProviderAuthorization from \"../auth/authorization.ts\";\nimport type * as Connection from \"../auth/connection.ts\";\nimport * as Lifecycle from \"../auth/lifecycle-repository.ts\";\n\nexport interface AsyncInterface {\n readonly attach: (input: {\n readonly attachment: Connection.DomainAttachment;\n readonly connectionId: string;\n readonly ownerId: string;\n }) => Promise<Lifecycle.AttachmentResult>;\n readonly connect: (input: Lifecycle.ConnectInput) => Promise<Lifecycle.Aggregate>;\n readonly detach: (input: {\n readonly attachmentId: string;\n readonly ownerId: string;\n }) => Promise<Lifecycle.DetachResult>;\n readonly disconnect: (input: {\n readonly connectionId: string;\n readonly ownerId: string;\n readonly revoke: (authorization: ProviderAuthorization.ProviderAuthorization) => Promise<void>;\n }) => Promise<Lifecycle.DisconnectResult>;\n readonly findConnection: (\n ownerId: string,\n authorizationId: string,\n ) => Promise<Connection.StoredConnection | null>;\n readonly get: (authorizationId: string) => Promise<Lifecycle.Aggregate | null>;\n readonly getAttachment: (attachmentId: string) => Promise<Connection.DomainAttachment | null>;\n readonly getByConnectionId: (connectionId: string) => Promise<Lifecycle.Aggregate | null>;\n readonly listAttachments: (\n connectionId: string,\n ownerId: string,\n ) => Promise<ReadonlyArray<Connection.DomainAttachment>>;\n readonly promoteEvidence: (\n authorizationId: string,\n evidence: ReadonlyArray<ProviderAuthorization.CapabilityEvidence>,\n ) => Promise<Lifecycle.Aggregate>;\n readonly recover: (input: {\n readonly authorizationId: string;\n readonly revoke: (authorization: ProviderAuthorization.ProviderAuthorization) => Promise<void>;\n }) => Promise<Lifecycle.DisconnectResult>;\n readonly rotate: (\n authorizationId: string,\n credential: Connection.StoredCredential,\n expiresAt: Date | null,\n ) => Promise<Lifecycle.Aggregate>;\n}\n\nconst failure = (operation: string, cause: unknown): Lifecycle.Error =>\n cause instanceof Lifecycle.Error\n ? cause\n : new Lifecycle.Error({\n category: \"storage\",\n message: cause instanceof globalThis.Error ? cause.message : String(cause),\n operation,\n retry: \"safe\",\n });\n\nexport const layerFromAsync = (repository: AsyncInterface): Layer.Layer<Lifecycle.Service> =>\n Layer.succeed(Lifecycle.Service, {\n attach: (input) =>\n Effect.tryPromise({\n try: () => repository.attach(input),\n catch: (cause) => failure(\"ManagedDnsConnections.attach\", cause),\n }),\n connect: (input) =>\n Effect.tryPromise({\n try: () => repository.connect(input),\n catch: (cause) => failure(\"ManagedDnsConnections.connect\", cause),\n }),\n detach: (input) =>\n Effect.tryPromise({\n try: () => repository.detach(input),\n catch: (cause) => failure(\"ManagedDnsConnections.detach\", cause),\n }),\n disconnect: ({ connectionId, ownerId, revoke }) =>\n Effect.tryPromise({\n try: () =>\n repository.disconnect({\n connectionId,\n ownerId,\n revoke: (authorization) => Effect.runPromise(revoke(authorization)),\n }),\n catch: (cause) => failure(\"ManagedDnsConnections.disconnect\", cause),\n }),\n findConnection: (ownerId, authorizationId) =>\n Effect.tryPromise({\n try: () => repository.findConnection(ownerId, authorizationId),\n catch: (cause) => failure(\"ManagedDnsConnections.findConnection\", cause),\n }),\n get: (authorizationId) =>\n Effect.tryPromise({\n try: () => repository.get(authorizationId),\n catch: (cause) => failure(\"ManagedDnsConnections.get\", cause),\n }),\n getAttachment: (attachmentId) =>\n Effect.tryPromise({\n try: () => repository.getAttachment(attachmentId),\n catch: (cause) => failure(\"ManagedDnsConnections.getAttachment\", cause),\n }),\n getByConnectionId: (connectionId) =>\n Effect.tryPromise({\n try: () => repository.getByConnectionId(connectionId),\n catch: (cause) => failure(\"ManagedDnsConnections.getByConnectionId\", cause),\n }),\n listAttachments: (connectionId, ownerId) =>\n Effect.tryPromise({\n try: () => repository.listAttachments(connectionId, ownerId),\n catch: (cause) => failure(\"ManagedDnsConnections.listAttachments\", cause),\n }),\n promoteEvidence: (authorizationId, evidence) =>\n Effect.tryPromise({\n try: () => repository.promoteEvidence(authorizationId, evidence),\n catch: (cause) => failure(\"ManagedDnsConnections.promoteEvidence\", cause),\n }),\n recover: ({ authorizationId, revoke }) =>\n Effect.tryPromise({\n try: () =>\n repository.recover({\n authorizationId,\n revoke: (authorization) => Effect.runPromise(revoke(authorization)),\n }),\n catch: (cause) => failure(\"ManagedDnsConnections.recover\", cause),\n }),\n rotate: (authorizationId, credential, expiresAt) =>\n Effect.tryPromise({\n try: () => repository.rotate(authorizationId, credential, expiresAt),\n catch: (cause) => failure(\"ManagedDnsConnections.rotate\", cause),\n }),\n });\n\nexport const toAsync = (service: Lifecycle.Interface): AsyncInterface => ({\n attach: (input) => Effect.runPromise(service.attach(input)),\n connect: (input) => Effect.runPromise(service.connect(input)),\n detach: (input) => Effect.runPromise(service.detach(input)),\n disconnect: ({ connectionId, ownerId, revoke }) =>\n Effect.runPromise(\n service.disconnect({\n connectionId,\n ownerId,\n revoke: (authorization) => Effect.promise(() => revoke(authorization)),\n }),\n ),\n findConnection: (ownerId, authorizationId) =>\n Effect.runPromise(service.findConnection(ownerId, authorizationId)),\n get: (authorizationId) => Effect.runPromise(service.get(authorizationId)),\n getAttachment: (attachmentId) => Effect.runPromise(service.getAttachment(attachmentId)),\n getByConnectionId: (connectionId) => Effect.runPromise(service.getByConnectionId(connectionId)),\n listAttachments: (connectionId, ownerId) =>\n Effect.runPromise(service.listAttachments(connectionId, ownerId)),\n promoteEvidence: (authorizationId, evidence) =>\n Effect.runPromise(service.promoteEvidence(authorizationId, evidence)),\n recover: ({ authorizationId, revoke }) =>\n Effect.runPromise(\n service.recover({\n authorizationId,\n revoke: (authorization) => Effect.promise(() => revoke(authorization)),\n }),\n ),\n rotate: (authorizationId, credential, expiresAt) =>\n Effect.runPromise(service.rotate(authorizationId, credential, expiresAt)),\n});\n\nexport const from = (repository: AsyncInterface): AsyncInterface => repository;\n\nexport { Error } from \"../auth/lifecycle-repository.ts\";\nexport type {\n AttachmentResult,\n DetachResult,\n DisconnectResult,\n} from \"../auth/lifecycle-repository.ts\";\n","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 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 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":"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"}
|