domainkit 0.1.1 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (67) hide show
  1. package/README.md +87 -83
  2. package/dist/{client-BnD7QLRF.mjs → auth-6-KRy1gN.mjs} +235 -131
  3. package/dist/auth-6-KRy1gN.mjs.map +1 -0
  4. package/dist/{auth-B0owkrpk.mjs → auth-B4jq3yk3.mjs} +212 -20
  5. package/dist/auth-B4jq3yk3.mjs.map +1 -0
  6. package/dist/authorization-CQSKKMrW.mjs +255 -0
  7. package/dist/authorization-CQSKKMrW.mjs.map +1 -0
  8. package/dist/canonical-json-CpvqGMcr.mjs +57 -0
  9. package/dist/canonical-json-CpvqGMcr.mjs.map +1 -0
  10. package/dist/{cloudflare-D0-J2MfP.mjs → cloudflare-Bg_p-M2c.mjs} +26 -3
  11. package/dist/cloudflare-Bg_p-M2c.mjs.map +1 -0
  12. package/dist/cloudflare-FDl5q7Dm.d.mts +32 -0
  13. package/dist/cloudflare.d.mts +3 -3
  14. package/dist/cloudflare.mjs +2 -2
  15. package/dist/connection-BXoSrhZs.mjs +58 -0
  16. package/dist/connection-BXoSrhZs.mjs.map +1 -0
  17. package/dist/connection-CEqadXSm.d.mts +182 -0
  18. package/dist/connection-X3rZhrBZ.mjs +186 -0
  19. package/dist/connection-X3rZhrBZ.mjs.map +1 -0
  20. package/dist/connection-api-DftK7eHo.d.mts +7 -0
  21. package/dist/{dns-record-C_KwGPLf.mjs → dns-record-BLeqo56C.mjs} +23 -3
  22. package/dist/dns-record-BLeqo56C.mjs.map +1 -0
  23. package/dist/effect-cloudflare.d.mts +2 -2
  24. package/dist/effect-cloudflare.mjs +2 -2
  25. package/dist/effect-vercel.d.mts +2 -2
  26. package/dist/effect-vercel.mjs +2 -2
  27. package/dist/effect.d.mts +9 -46
  28. package/dist/effect.mjs +29 -7
  29. package/dist/effect.mjs.map +1 -1
  30. package/dist/{index-D2howbNz.d.mts → index-B1opsgls.d.mts} +53 -6
  31. package/dist/{index-CEzk2gbZ.d.mts → index-Ewc__bQu.d.mts} +58 -7
  32. package/dist/index.d.mts +169 -113
  33. package/dist/index.mjs +201 -139
  34. package/dist/index.mjs.map +1 -1
  35. package/dist/{resolver-BHPsADzE.d.mts → resolver-BbVzTbCX.d.mts} +630 -273
  36. package/dist/resolver-CxE-VDw4.mjs +598 -0
  37. package/dist/resolver-CxE-VDw4.mjs.map +1 -0
  38. package/dist/testing.d.mts +53 -44
  39. package/dist/testing.mjs +379 -107
  40. package/dist/testing.mjs.map +1 -1
  41. package/dist/{vercel-DD89DCqH.mjs → vercel-BIFpZRPu.mjs} +23 -3
  42. package/dist/vercel-BIFpZRPu.mjs.map +1 -0
  43. package/dist/vercel-DgJaUX9D.d.mts +31 -0
  44. package/dist/vercel.d.mts +3 -3
  45. package/dist/vercel.mjs +2 -2
  46. package/dist/verify-7_EbKbFM.d.mts +805 -0
  47. package/dist/verify-Q5RYpnuw.mjs +642 -0
  48. package/dist/verify-Q5RYpnuw.mjs.map +1 -0
  49. package/dist/zone-discovery-BA5I24vu.d.mts +1390 -0
  50. package/dist/zones-DKHTpX9C.mjs +19 -0
  51. package/dist/zones-DKHTpX9C.mjs.map +1 -0
  52. package/package.json +1 -1
  53. package/dist/auth-B0owkrpk.mjs.map +0 -1
  54. package/dist/client-BnD7QLRF.mjs.map +0 -1
  55. package/dist/cloudflare-CprjjXfm.d.mts +0 -23
  56. package/dist/cloudflare-D0-J2MfP.mjs.map +0 -1
  57. package/dist/dns-record-C_KwGPLf.mjs.map +0 -1
  58. package/dist/manifest-CP85ePFn.d.mts +0 -583
  59. package/dist/receipt-CGSnfZQ6.mjs +0 -28
  60. package/dist/receipt-CGSnfZQ6.mjs.map +0 -1
  61. package/dist/resolver-tEXpKxmH.mjs +0 -200
  62. package/dist/resolver-tEXpKxmH.mjs.map +0 -1
  63. package/dist/vercel-D-E2aqb1.d.mts +0 -22
  64. package/dist/vercel-DD89DCqH.mjs.map +0 -1
  65. package/dist/verify-B80xCBh2.d.mts +0 -1407
  66. package/dist/verify-BXOvXE20.mjs +0 -1388
  67. package/dist/verify-BXOvXE20.mjs.map +0 -1
package/dist/index.mjs CHANGED
@@ -1,66 +1,97 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-D7D4PA-g.mjs";
2
- import { D as parse$1, O as Error$1, _ as equals, a as Mx, c as Opaque, d as Srv, f as Txt, i as Cname, k as invalid_input_exports, l as RequirementMetadata, m as data, n as Aaaa, o as Ns, p as Type, r as Caa, s as Observed, t as A, u as Schema$1, v as parse, w as Schema$2, x as layerFromAsync, y as Error$2 } from "./dns-record-C_KwGPLf.mjs";
3
- import { u as zones_exports } from "./auth-B0owkrpk.mjs";
4
- import { t as cloudflare_exports } from "./cloudflare-D0-J2MfP.mjs";
5
- import { $ as Error$3, A as decodeReceipt$1, D as Receipt, E as Operation, F as connect$1, G as revoke$1, H as complete$1, J as Capability, L as Method, M as encodeReceipt, O as Schema$6, P as selection_exports, Q as encode$1, R as Schema$5, S as create$3, T as Authorization, V as begin$1, W as refresh$1, Y as Schema$4, Z as decode$5, at as Schema$3, b as apply$3, c as Authorization$1, ct as decode$4, d as PartialError, f as Plan, g as create$2, h as authorize$2, i as toAsync, it as Grant, j as encode$2, k as decode$7, l as Error$4, lt as encode, m as apply$2, nt as updateGrant$1, o as toAsync$1, ot as assertGrant, p as Receipt$1, q as webCryptoLayer, rt as AuthorizationError, t as record$1, tt as detach$1, u as Operation$1, ut as version, v as authorize$4, w as renderManualInstructions$1, x as authorize$3, z as decode$6 } from "./verify-BXOvXE20.mjs";
6
- import { b as layerFromAsync$1, f as layerFromAsync$2, g as layerFromAsync$3, r as layerFromAsync$5, s as layerFromAsync$4 } from "./resolver-tEXpKxmH.mjs";
7
- import { l as secret_exports } from "./client-BnD7QLRF.mjs";
8
- import { n as vercel_exports } from "./vercel-DD89DCqH.mjs";
9
- import { Effect, Layer } from "effect";
10
- //#region src/promise/connection.ts
11
- var connection_exports = /* @__PURE__ */ __exportAll({
12
- AuthorizationError: () => AuthorizationError,
13
- Grant: () => Grant,
14
- Schema: () => Schema$3,
15
- assertGrant: () => assertGrant,
16
- decode: () => decode$3,
17
- encode: () => encode
2
+ import { A as invalid_input_exports, O as parse$1, S as layerFromAsync, T as Schema$2, _ as equals, a as Mx, b as Service, c as Opaque, d as Srv, f as Txt, i as Cname, l as RequirementMetadata, m as data, n as Aaaa, o as Ns, p as Type, r as Caa, s as Observed, t as A, u as Schema$1, v as parse, y as Error } from "./dns-record-BLeqo56C.mjs";
3
+ import { a as Schema$3, c as encode, d as provider_context_exports, i as EvidenceSchema, m as secret_exports, n as CapabilityEvidence, r as Evidence, s as decode$3, t as Capability } from "./authorization-CQSKKMrW.mjs";
4
+ import { n as zones_exports } from "./zones-DKHTpX9C.mjs";
5
+ import { i as webCryptoLayer } from "./canonical-json-CpvqGMcr.mjs";
6
+ import { i as authorization_lifecycle_exports, t as connection_exports } from "./connection-X3rZhrBZ.mjs";
7
+ import { t as cloudflare_exports } from "./cloudflare-Bg_p-M2c.mjs";
8
+ import { C as selection_exports, E as decode$4, O as diagnostic_exports, T as Schema$4, _ as toAsync$1, a as Result, c as Observation, d as defaultMake$1, f as make$4, h as toAsync$3, i as PublicDnsObservation, k as version, l as Policy, n as ProviderObservation, o as observe$1, r as PublicDns$1, t as Provider$1, u as Service$1, w as Method, x as authorize$2, y as toAsync$2 } from "./verify-Q5RYpnuw.mjs";
9
+ import { A as decodeReceipt$1, D as Receipt, E as Operation, F as Service$2, I as make$5, M as encodeReceipt, O as Schema$5, P as Candidate, S as create$3, T as Authorization, a as Authorization$1, b as apply$3, c as PartialError, d as apply$2, f as authorize$3, g as CreateResult, j as encode$1, k as decode$5, l as Plan, o as Error$1, p as create$2, s as Operation$1, t as Error$2, u as Receipt$1, w as renderManualInstructions$1, x as authorize$4, y as Target } from "./resolver-CxE-VDw4.mjs";
10
+ import { r as vercel_exports } from "./vercel-BIFpZRPu.mjs";
11
+ import { Data, Effect, Layer } from "effect";
12
+ //#region src/promise/provider-auth.ts
13
+ var provider_auth_exports = /* @__PURE__ */ __exportAll({
14
+ Method: () => Method,
15
+ Schema: () => Schema$4,
16
+ decode: () => decode$2
18
17
  });
19
- function decode$3(input) {
18
+ function decode$2(input) {
20
19
  return Effect.runPromise(decode$4(input));
21
20
  }
22
21
  //#endregion
23
- //#region src/promise/connection-lifecycle.ts
24
- var connection_lifecycle_exports = /* @__PURE__ */ __exportAll({
25
- Error: () => Error$3,
26
- detach: () => detach,
27
- updateGrant: () => updateGrant
28
- });
29
- function updateGrant(input) {
30
- return Effect.runPromise(updateGrant$1({
31
- connection: input.connection,
32
- grant: input.grant
33
- }).pipe(Effect.provide(layerFromAsync$1(input.connectionStore))));
34
- }
35
- function detach(input) {
36
- return Effect.runPromise(detach$1({
37
- connectionId: input.connectionId,
38
- revokeAuthorization: (authorization) => Effect.tryPromise({
39
- try: () => input.revokeAuthorization(authorization),
40
- catch: (cause) => new Error$3({ message: cause instanceof globalThis.Error ? cause.message : String(cause) })
41
- })
42
- }).pipe(Effect.provide(Layer.mergeAll(layerFromAsync$2(input.authorizationStore), layerFromAsync$1(input.connectionStore), layerFromAsync$3(input.credentialStore)))));
43
- }
44
- //#endregion
45
22
  //#region src/promise/provider-authorization.ts
46
23
  var provider_authorization_exports = /* @__PURE__ */ __exportAll({
47
24
  Capability: () => Capability,
48
- Schema: () => Schema$4,
49
- decode: () => decode$2,
50
- encode: () => encode$1
25
+ CapabilityEvidence: () => CapabilityEvidence,
26
+ Evidence: () => Evidence,
27
+ EvidenceSchema: () => EvidenceSchema,
28
+ Schema: () => Schema$3,
29
+ decode: () => decode$1,
30
+ encode: () => encode
51
31
  });
52
- function decode$2(input) {
53
- return Effect.runPromise(decode$5(input));
32
+ function decode$1(input) {
33
+ return Effect.runPromise(decode$3(input));
54
34
  }
55
35
  //#endregion
56
- //#region src/promise/provider-auth.ts
57
- var provider_auth_exports = /* @__PURE__ */ __exportAll({
58
- Method: () => Method,
59
- Schema: () => Schema$5,
60
- decode: () => decode$1
36
+ //#region src/promise/zone-discovery.ts
37
+ var zone_discovery_exports = /* @__PURE__ */ __exportAll({
38
+ Candidate: () => Candidate,
39
+ discover: () => discover,
40
+ toEffectSource: () => toEffectSource
61
41
  });
62
- function decode$1(input) {
63
- return Effect.runPromise(decode$6(input));
42
+ function discover(input) {
43
+ return Effect.runPromise(make$5(input.sources.map(toEffectSource)).discover(input.domain).pipe(Effect.map(projectOutcome)));
44
+ }
45
+ function toEffectSource(source) {
46
+ return {
47
+ listZones: (name) => Effect.tryPromise({
48
+ try: () => source.listZones(name),
49
+ catch: (cause) => new Error({
50
+ cause,
51
+ message: cause instanceof globalThis.Error ? cause.message : String(cause),
52
+ operation: "ZoneDiscovery.listZones",
53
+ providerId: source.provider.id,
54
+ reason: "transport"
55
+ })
56
+ }),
57
+ provider: Service.of({
58
+ id: source.provider.id,
59
+ createRecord: (zone, record) => Effect.tryPromise({
60
+ try: () => source.provider.createRecord(zone, record),
61
+ catch: (cause) => providerFailure(source.provider.id, "createRecord", cause)
62
+ }),
63
+ deleteRecord: (zone, providerRecordId) => Effect.tryPromise({
64
+ try: () => source.provider.deleteRecord(zone, providerRecordId),
65
+ catch: (cause) => providerFailure(source.provider.id, "deleteRecord", cause)
66
+ }),
67
+ getRecord: (zone, providerRecordId) => Effect.tryPromise({
68
+ try: () => source.provider.getRecord(zone, providerRecordId),
69
+ catch: (cause) => providerFailure(source.provider.id, "getRecord", cause)
70
+ }),
71
+ listRecords: (zone) => Effect.tryPromise({
72
+ try: () => source.provider.listRecords(zone),
73
+ catch: (cause) => providerFailure(source.provider.id, "listRecords", cause)
74
+ })
75
+ })
76
+ };
77
+ }
78
+ function projectOutcome(outcome) {
79
+ switch (outcome._tag) {
80
+ case "NotFound": return outcome;
81
+ case "Resolved": return {
82
+ _tag: "Resolved",
83
+ candidate: outcome.candidate
84
+ };
85
+ case "SelectionRequired": return outcome;
86
+ }
87
+ }
88
+ function providerFailure(providerId, operation, cause) {
89
+ return cause instanceof Error ? cause : new Error({
90
+ cause,
91
+ message: cause instanceof globalThis.Error ? cause.message : String(cause),
92
+ operation,
93
+ providerId
94
+ });
64
95
  }
65
96
  //#endregion
66
97
  //#region src/promise/dns-record.ts
@@ -94,14 +125,14 @@ var dns_plan_exports = /* @__PURE__ */ __exportAll({
94
125
  Authorization: () => Authorization,
95
126
  Operation: () => Operation,
96
127
  Receipt: () => Receipt,
97
- Schema: () => Schema$6,
128
+ Schema: () => Schema$5,
98
129
  decode: () => decode,
99
130
  decodeReceipt: () => decodeReceipt,
100
- encode: () => encode$2,
131
+ encode: () => encode$1,
101
132
  encodeReceipt: () => encodeReceipt
102
133
  });
103
134
  function decode(input) {
104
- return Effect.runPromise(decode$7(input));
135
+ return Effect.runPromise(decode$5(input));
105
136
  }
106
137
  function decodeReceipt(input) {
107
138
  return Effect.runPromise(decodeReceipt$1(input));
@@ -110,7 +141,7 @@ function decodeReceipt(input) {
110
141
  //#region src/promise/deletion.ts
111
142
  var deletion_exports = /* @__PURE__ */ __exportAll({
112
143
  Authorization: () => Authorization$1,
113
- Error: () => Error$4,
144
+ Error: () => Error$1,
114
145
  Operation: () => Operation$1,
115
146
  PartialError: () => PartialError,
116
147
  Plan: () => Plan,
@@ -127,7 +158,7 @@ function create$1(input) {
127
158
  }).pipe(Effect.provide(Layer.merge(layerFromAsync(input.provider), webCryptoLayer))));
128
159
  }
129
160
  function authorize$1(plan, operationIds) {
130
- return Effect.runPromise(authorize$2(plan, operationIds).pipe(Effect.provide(webCryptoLayer)));
161
+ return Effect.runPromise(authorize$3(plan, operationIds).pipe(Effect.provide(webCryptoLayer)));
131
162
  }
132
163
  function apply$1(input) {
133
164
  return Effect.runPromise(apply$2({
@@ -137,56 +168,10 @@ function apply$1(input) {
137
168
  }).pipe(Effect.provide(Layer.merge(layerFromAsync(input.provider), webCryptoLayer))));
138
169
  }
139
170
  //#endregion
140
- //#region src/promise/oauth.ts
141
- var oauth_exports = /* @__PURE__ */ __exportAll({
142
- begin: () => begin,
143
- complete: () => complete,
144
- refresh: () => refresh,
145
- revoke: () => revoke
146
- });
147
- function begin(input) {
148
- const { stateStore, ...programInput } = input;
149
- return Effect.runPromise(begin$1(programInput).pipe(Effect.provide(Layer.merge(layerFromAsync$4(stateStore), webCryptoLayer))));
150
- }
151
- function complete(input) {
152
- return Effect.runPromise(complete$1({
153
- callbackUrl: input.callbackUrl,
154
- client: input.client,
155
- ...input.fetch === void 0 ? {} : { fetch: input.fetch },
156
- providerId: input.providerId,
157
- resolveSubject: (tokens, accessToken) => Effect.tryPromise({
158
- try: () => input.resolveSubject(tokens, accessToken),
159
- catch: (cause) => providerFailure(input.providerId, "resolveSubject", cause)
160
- })
161
- }).pipe(Effect.provide(Layer.mergeAll(layerFromAsync$4(input.stateStore), layerFromAsync$2(input.authorizationStore), layerFromAsync$1(input.connectionStore), layerFromAsync$3(input.credentialStore), webCryptoLayer))));
162
- }
163
- function refresh(input) {
164
- return Effect.runPromise(refresh$1({
165
- client: input.client,
166
- authorization: input.authorization,
167
- ...input.fetch === void 0 ? {} : { fetch: input.fetch },
168
- method: input.method
169
- }).pipe(Effect.provide(layerFromAsync$3(input.credentialStore))));
170
- }
171
- function revoke(input) {
172
- return Effect.runPromise(revoke$1({
173
- client: input.client,
174
- authorization: input.authorization,
175
- ...input.fetch === void 0 ? {} : { fetch: input.fetch },
176
- method: input.method
177
- }).pipe(Effect.provide(layerFromAsync$3(input.credentialStore))));
178
- }
179
- function providerFailure(providerId, operation, cause) {
180
- return cause instanceof Error$1 || cause instanceof Error$2 ? cause : new Error$2({
181
- cause,
182
- message: cause instanceof Error ? cause.message : "Provider callback failed",
183
- operation,
184
- providerId
185
- });
186
- }
187
- //#endregion
188
171
  //#region src/promise/provisioning.ts
189
172
  var provisioning_exports = /* @__PURE__ */ __exportAll({
173
+ CreateResult: () => CreateResult,
174
+ Target: () => Target,
190
175
  apply: () => apply,
191
176
  authorize: () => authorize,
192
177
  authorizeForConnection: () => authorizeForConnection,
@@ -194,11 +179,15 @@ var provisioning_exports = /* @__PURE__ */ __exportAll({
194
179
  renderManualInstructions: () => renderManualInstructions
195
180
  });
196
181
  function create(input) {
182
+ if ("sources" in input) {
183
+ const { sources, ...programInput } = input;
184
+ return Effect.runPromise(create$3(programInput).pipe(Effect.provide(Layer.merge(Layer.succeed(Service$2, make$5(sources.map(toEffectSource))), webCryptoLayer))));
185
+ }
197
186
  const { provider, ...programInput } = input;
198
187
  return Effect.runPromise(create$3(programInput).pipe(Effect.provide(Layer.merge(layerFromAsync(provider), webCryptoLayer))));
199
188
  }
200
189
  function authorize(plan, operationIds, options = {}) {
201
- return Effect.runPromise(authorize$3(plan, operationIds, options).pipe(Effect.provide(webCryptoLayer)));
190
+ return Effect.runPromise(authorize$4(plan, operationIds, options).pipe(Effect.provide(webCryptoLayer)));
202
191
  }
203
192
  function apply(input) {
204
193
  return Effect.runPromise(apply$3({
@@ -207,56 +196,129 @@ function apply(input) {
207
196
  }).pipe(Effect.provide(Layer.merge(layerFromAsync(input.provider), webCryptoLayer))));
208
197
  }
209
198
  function authorizeForConnection(input) {
210
- return Effect.runPromise(authorize$4(input).pipe(Effect.provide(webCryptoLayer)));
199
+ return Effect.runPromise(authorize$2(input).pipe(Effect.provide(webCryptoLayer)));
211
200
  }
212
201
  const renderManualInstructions = renderManualInstructions$1;
213
202
  //#endregion
214
- //#region src/promise/token.ts
215
- var token_exports = /* @__PURE__ */ __exportAll({ connect: () => connect });
216
- function connect(input) {
217
- return Effect.runPromise(connect$1({
218
- grant: input.grant,
219
- ownerId: input.ownerId,
220
- providerId: input.providerId,
221
- subjectId: input.subjectId,
222
- token: input.token,
223
- validate: (token) => Effect.tryPromise({
224
- try: () => input.validate(token),
225
- catch: (cause) => cause instanceof Error$1 || cause instanceof Error$2 ? cause : new Error$2({
226
- cause,
227
- message: cause instanceof Error ? cause.message : "Token validation failed",
228
- operation: "validateToken",
229
- providerId: input.providerId
230
- })
231
- })
232
- }).pipe(Effect.provide(Layer.mergeAll(layerFromAsync$1(input.connectionStore), layerFromAsync$2(input.authorizationStore), layerFromAsync$3(input.credentialStore), webCryptoLayer))));
233
- }
234
- //#endregion
235
203
  //#region src/promise/verification.ts
236
- var verification_exports = /* @__PURE__ */ __exportAll({ record: () => record });
237
- function record(input) {
238
- return Effect.runPromise(record$1({
204
+ var verification_exports = /* @__PURE__ */ __exportAll({
205
+ Provider: () => Provider,
206
+ ProviderObservation: () => ProviderObservation,
207
+ PublicDns: () => PublicDns,
208
+ PublicDnsObservation: () => PublicDnsObservation,
209
+ Result: () => Result,
210
+ observe: () => observe
211
+ });
212
+ const PublicDns = PublicDns$1;
213
+ const Provider = Data.taggedEnum();
214
+ function observe(input) {
215
+ const provider = input.provider ?? Provider.Disabled();
216
+ let program = provider._tag === "Enabled" ? observe$1({
217
+ record: input.record,
218
+ ...input.publicDns === void 0 ? {} : { publicDns: input.publicDns },
219
+ provider: Provider$1.Enabled({ zone: provider.zone })
220
+ }).pipe(Effect.provide(layerFromAsync(provider.provider))) : observe$1({
239
221
  record: input.record,
240
- zone: input.zone
241
- }).pipe(Effect.provide(Layer.merge(layerFromAsync(input.provider), layerFromAsync$5(input.resolver)))));
222
+ ...input.publicDns === void 0 ? {} : { publicDns: input.publicDns },
223
+ provider: Provider$1.Disabled()
224
+ });
225
+ if (input.resolvers !== void 0) program = program.pipe(Effect.provide(Layer.succeed(Service$1, make$4(input.resolvers.map((entry) => ({
226
+ id: entry.id,
227
+ resolver: fromAsyncResolver(entry.resolver),
228
+ ...entry.timeoutMs === void 0 ? {} : { timeoutMs: entry.timeoutMs }
229
+ }))))));
230
+ return Effect.runPromise(program);
231
+ }
232
+ function fromAsyncResolver(resolver) {
233
+ return { resolve: (query) => Effect.tryPromise({
234
+ try: () => resolver.resolve(query),
235
+ catch: (cause) => new Error$2({
236
+ cause,
237
+ message: cause instanceof globalThis.Error ? cause.message : String(cause),
238
+ reason: "transport"
239
+ })
240
+ }).pipe(Effect.flatMap((resolution) => {
241
+ switch (resolution._tag) {
242
+ case "answer":
243
+ case "nodata": return Effect.succeed(resolution);
244
+ case "timeout": return Effect.fail(new Error$2({
245
+ message: "DNS query timed out",
246
+ reason: "timeout"
247
+ }));
248
+ case "failure": return Effect.fail(new Error$2({
249
+ message: resolution.message,
250
+ reason: "transport"
251
+ }));
252
+ }
253
+ })) };
242
254
  }
243
255
  //#endregion
244
256
  //#region src/promise/cloudflare-doh.ts
245
- var cloudflare_doh_exports = /* @__PURE__ */ __exportAll({ make: () => make$1 });
246
- function make$1(options = {}) {
247
- return toAsync(options);
257
+ var cloudflare_doh_exports = /* @__PURE__ */ __exportAll({ make: () => make$3 });
258
+ function make$3(options = {}) {
259
+ return toAsync$1(options);
248
260
  }
249
261
  //#endregion
250
262
  //#region src/promise/doh.ts
251
- var doh_exports = /* @__PURE__ */ __exportAll({ make: () => make });
252
- function make(options) {
253
- return toAsync$1(options);
263
+ var doh_exports = /* @__PURE__ */ __exportAll({ make: () => make$2 });
264
+ function make$2(options) {
265
+ return toAsync$2(options);
266
+ }
267
+ //#endregion
268
+ //#region src/promise/google-doh.ts
269
+ var google_doh_exports = /* @__PURE__ */ __exportAll({ make: () => make$1 });
270
+ function make$1(options = {}) {
271
+ return toAsync$3(options);
272
+ }
273
+ //#endregion
274
+ //#region src/promise/resolver-pool.ts
275
+ var resolver_pool_exports = /* @__PURE__ */ __exportAll({
276
+ Observation: () => Observation,
277
+ Policy: () => Policy,
278
+ defaultMake: () => defaultMake,
279
+ make: () => make
280
+ });
281
+ function make(entries) {
282
+ return toAsync(make$4(entries.map((entry) => ({
283
+ id: entry.id,
284
+ resolver: asyncResolver(entry.resolver),
285
+ ...entry.timeoutMs === void 0 ? {} : { timeoutMs: entry.timeoutMs }
286
+ }))));
287
+ }
288
+ function defaultMake(options = {}) {
289
+ return toAsync(defaultMake$1(options));
290
+ }
291
+ function toAsync(pool) {
292
+ return { observe: (query) => Effect.runPromise(pool.observe(query)) };
293
+ }
294
+ function asyncResolver(resolver) {
295
+ return { resolve: (query) => Effect.tryPromise({
296
+ try: () => resolver.resolve(query),
297
+ catch: (cause) => new Error$2({
298
+ cause,
299
+ message: cause instanceof globalThis.Error ? cause.message : String(cause),
300
+ reason: "transport"
301
+ })
302
+ }).pipe(Effect.flatMap((resolution) => {
303
+ switch (resolution._tag) {
304
+ case "answer":
305
+ case "nodata": return Effect.succeed(resolution);
306
+ case "timeout": return Effect.fail(new Error$2({
307
+ message: "DNS query timed out",
308
+ reason: "timeout"
309
+ }));
310
+ case "failure": return Effect.fail(new Error$2({
311
+ message: resolution.message,
312
+ reason: "transport"
313
+ }));
314
+ }
315
+ })) };
254
316
  }
255
317
  //#endregion
256
318
  //#region src/index.ts
257
319
  /** The current package version from the package manifest. */
258
320
  const VERSION = version;
259
321
  //#endregion
260
- export { cloudflare_exports as Cloudflare, cloudflare_doh_exports as CloudflareDnsOverHttps, connection_exports as Connection, connection_lifecycle_exports as ConnectionLifecycle, deletion_exports as Deletion, doh_exports as DnsOverHttps, dns_plan_exports as DnsPlan, dns_record_exports as DnsRecord, domain_name_exports as DomainName, invalid_input_exports as InvalidInput, oauth_exports as OAuth, provider_auth_exports as ProviderAuth, provider_authorization_exports as ProviderAuthorization, selection_exports as ProviderDiscovery, provisioning_exports as Provisioning, secret_exports as Secret, token_exports as TokenConnection, VERSION, vercel_exports as Vercel, verification_exports as Verification, zones_exports as Zones };
322
+ export { authorization_lifecycle_exports as AuthorizationLifecycle, 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, provider_auth_exports as ProviderAuth, provider_authorization_exports as ProviderAuthorization, provider_context_exports as ProviderContext, selection_exports as ProviderDiscovery, 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 };
261
323
 
262
324
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.mjs","names":["decode","Connection.decode","Lifecycle.updateGrant","ConnectionStore.layerFromAsync","Lifecycle.detach","Lifecycle.Error","ProviderAuthorizationStore.layerFromAsync","CredentialStore.layerFromAsync","decode","ProviderAuthorization.decode","decode","ProviderAuth.decode","DnsPlan.decode","DnsPlan.decodeReceipt","create","DeletionEffect.create","DnsProvider.layerFromAsync","authorize","DeletionEffect.authorize","apply","DeletionEffect.apply","OAuthEffect.begin","OAuthStateStore.layerFromAsync","OAuthEffect.complete","ProviderAuthorizationStore.layerFromAsync","ConnectionStore.layerFromAsync","CredentialStore.layerFromAsync","OAuthEffect.refresh","OAuthEffect.revoke","InvalidInputError","DnsProvider.Error","ProvisioningEffect.create","DnsProvider.layerFromAsync","ProvisioningEffect.authorize","ProvisioningEffect.apply","ConnectionAuthorization.authorize","ProvisioningEffect.renderManualInstructions","TokenEffect.connect","InvalidInputError","DnsProvider.Error","ConnectionStore.layerFromAsync","ProviderAuthorizationStore.layerFromAsync","CredentialStore.layerFromAsync","VerificationEffect.record","DnsProvider.layerFromAsync","DnsResolver.layerFromAsync","make","CloudflareDnsOverHttps.toAsync","DnsOverHttps.toAsync","packageJson.version"],"sources":["../src/promise/connection.ts","../src/promise/connection-lifecycle.ts","../src/promise/provider-authorization.ts","../src/promise/provider-auth.ts","../src/promise/dns-record.ts","../src/promise/domain-name.ts","../src/promise/dns-plan.ts","../src/promise/deletion.ts","../src/promise/oauth.ts","../src/promise/provisioning.ts","../src/promise/token.ts","../src/promise/verification.ts","../src/promise/cloudflare-doh.ts","../src/promise/doh.ts","../src/index.ts"],"sourcesContent":["import { Effect } from \"effect\";\n\nimport * as Connection from \"../auth/connection.ts\";\n\nexport { assertGrant, AuthorizationError, encode, Grant, Schema } from \"../auth/connection.ts\";\nexport type { Connection, OAuthContinuation, StoredCredential } from \"../auth/connection.ts\";\n\nexport function decode(input: unknown): Promise<Connection.Connection> {\n return Effect.runPromise(Connection.decode(input));\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 Lifecycle from \"../auth/connection-lifecycle.ts\";\nimport * as ConnectionStore from \"../stores/connection.ts\";\nimport * as CredentialStore from \"../stores/credential.ts\";\nimport * as ProviderAuthorizationStore from \"../stores/authorization.ts\";\n\nexport function updateGrant(input: {\n readonly connection: Parameters<typeof Lifecycle.updateGrant>[0][\"connection\"];\n readonly connectionStore: ConnectionStore.AsyncInterface;\n readonly grant: Parameters<typeof Lifecycle.updateGrant>[0][\"grant\"];\n}): Promise<Connection.Connection> {\n return Effect.runPromise(\n Lifecycle.updateGrant({ connection: input.connection, grant: input.grant }).pipe(\n Effect.provide(ConnectionStore.layerFromAsync(input.connectionStore)),\n ),\n );\n}\n\nexport function detach(input: {\n readonly authorizationStore: ProviderAuthorizationStore.AsyncInterface;\n readonly connectionId: string;\n readonly connectionStore: ConnectionStore.AsyncInterface;\n readonly credentialStore: CredentialStore.AsyncInterface;\n readonly revokeAuthorization: (\n authorization: ProviderAuthorization.ProviderAuthorization,\n ) => Promise<void>;\n}): Promise<Lifecycle.DetachResult> {\n return Effect.runPromise(\n Lifecycle.detach({\n connectionId: input.connectionId,\n revokeAuthorization: (authorization) =>\n Effect.tryPromise({\n try: () => input.revokeAuthorization(authorization),\n catch: (cause) =>\n new Lifecycle.Error({\n message: cause instanceof globalThis.Error ? cause.message : String(cause),\n }),\n }),\n }).pipe(\n Effect.provide(\n Layer.mergeAll(\n ProviderAuthorizationStore.layerFromAsync(input.authorizationStore),\n ConnectionStore.layerFromAsync(input.connectionStore),\n CredentialStore.layerFromAsync(input.credentialStore),\n ),\n ),\n ),\n );\n}\n\nexport { Error } from \"../auth/connection-lifecycle.ts\";\nexport type { DetachResult } from \"../auth/connection-lifecycle.ts\";\n","import { Effect } from \"effect\";\n\nimport * as ProviderAuthorization from \"../auth/authorization.ts\";\n\nexport { Capability, encode, Schema } from \"../auth/authorization.ts\";\nexport type { ProviderAuthorization } from \"../auth/authorization.ts\";\n\nexport function decode(input: unknown): Promise<ProviderAuthorization.ProviderAuthorization> {\n return Effect.runPromise(ProviderAuthorization.decode(input));\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","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 { Effect, Layer } from \"effect\";\n\nimport * as Connection from \"../auth/connection.ts\";\nimport * as ProviderAuthorization from \"../auth/authorization.ts\";\nimport * as OAuthEffect from \"../auth/oauth.ts\";\nimport type * as ProviderAuth from \"../auth/manifest.ts\";\nimport { Error as InvalidInputError } from \"../invalid-input.ts\";\nimport { webCryptoLayer } from \"../plan/canonical-json.ts\";\nimport * as DnsProvider from \"../provider/provider.ts\";\nimport * as ConnectionStore from \"../stores/connection.ts\";\nimport * as CredentialStore from \"../stores/credential.ts\";\nimport * as ProviderAuthorizationStore from \"../stores/authorization.ts\";\nimport * as OAuthStateStore from \"../stores/oauth-state.ts\";\n\nexport interface BeginInput extends OAuthEffect.BeginInput {\n readonly stateStore: OAuthStateStore.AsyncInterface;\n}\n\nexport function begin(input: BeginInput): Promise<{ readonly authorizationUrl: URL }> {\n const { stateStore, ...programInput } = input;\n return Effect.runPromise(\n OAuthEffect.begin(programInput).pipe(\n Effect.provide(Layer.merge(OAuthStateStore.layerFromAsync(stateStore), webCryptoLayer)),\n ),\n );\n}\n\nexport function complete(input: {\n readonly callbackUrl: URL;\n readonly client: ProviderAuth.OAuthClientConfiguration;\n readonly connectionStore: ConnectionStore.AsyncInterface;\n readonly credentialStore: CredentialStore.AsyncInterface;\n readonly authorizationStore: ProviderAuthorizationStore.AsyncInterface;\n readonly fetch?: OAuthEffect.Fetch;\n readonly providerId: string;\n readonly resolveSubject: ProviderAuth.AsyncOAuthSubjectResolver;\n readonly stateStore: OAuthStateStore.AsyncInterface;\n}): Promise<{\n readonly authorization: ProviderAuthorization.ProviderAuthorization;\n readonly connection: Connection.Connection;\n}> {\n return Effect.runPromise(\n OAuthEffect.complete({\n callbackUrl: input.callbackUrl,\n client: input.client,\n ...(input.fetch === undefined ? {} : { fetch: input.fetch }),\n providerId: input.providerId,\n resolveSubject: (tokens, accessToken) =>\n Effect.tryPromise({\n try: () => input.resolveSubject(tokens, accessToken),\n catch: (cause) => providerFailure(input.providerId, \"resolveSubject\", cause),\n }),\n }).pipe(\n Effect.provide(\n Layer.mergeAll(\n OAuthStateStore.layerFromAsync(input.stateStore),\n ProviderAuthorizationStore.layerFromAsync(input.authorizationStore),\n ConnectionStore.layerFromAsync(input.connectionStore),\n CredentialStore.layerFromAsync(input.credentialStore),\n webCryptoLayer,\n ),\n ),\n ),\n );\n}\n\nexport function refresh(input: {\n readonly authorization: ProviderAuthorization.ProviderAuthorization;\n readonly client: ProviderAuth.OAuthClientConfiguration;\n readonly credentialStore: CredentialStore.AsyncInterface;\n readonly fetch?: OAuthEffect.Fetch;\n readonly method: ProviderAuth.OAuthMethod;\n}): Promise<void> {\n return Effect.runPromise(\n OAuthEffect.refresh({\n client: input.client,\n authorization: input.authorization,\n ...(input.fetch === undefined ? {} : { fetch: input.fetch }),\n method: input.method,\n }).pipe(Effect.provide(CredentialStore.layerFromAsync(input.credentialStore))),\n );\n}\n\nexport function revoke(input: {\n readonly authorization: ProviderAuthorization.ProviderAuthorization;\n readonly client: ProviderAuth.OAuthClientConfiguration;\n readonly credentialStore: CredentialStore.AsyncInterface;\n readonly fetch?: OAuthEffect.Fetch;\n readonly method: ProviderAuth.OAuthMethod;\n}): Promise<void> {\n return Effect.runPromise(\n OAuthEffect.revoke({\n client: input.client,\n authorization: input.authorization,\n ...(input.fetch === undefined ? {} : { fetch: input.fetch }),\n method: input.method,\n }).pipe(Effect.provide(CredentialStore.layerFromAsync(input.credentialStore))),\n );\n}\n\nfunction providerFailure(\n providerId: string,\n operation: string,\n cause: unknown,\n): DnsProvider.Error | InvalidInputError {\n return cause instanceof InvalidInputError || cause instanceof DnsProvider.Error\n ? cause\n : new DnsProvider.Error({\n cause,\n message: cause instanceof Error ? cause.message : \"Provider callback failed\",\n operation,\n providerId,\n });\n}\n\nexport type Fetch = OAuthEffect.Fetch;\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 { 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\";\n\nexport interface CreateInput extends ProvisioningEffect.CreateInput {\n readonly provider: DnsProvider.AsyncInterface;\n}\n\nexport function create(input: CreateInput): Promise<DnsPlan.DnsPlan> {\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 connection: Connection.Connection;\n readonly domain: string;\n readonly operationIds?: ReadonlyArray<string>;\n readonly plan: DnsPlan.DnsPlan;\n}): Promise<DnsPlan.PlanAuthorization> {\n return Effect.runPromise(\n ConnectionAuthorization.authorize(input).pipe(Effect.provide(webCryptoLayer)),\n );\n}\n\nexport const renderManualInstructions = ProvisioningEffect.renderManualInstructions;\n","import { Effect, Layer } from \"effect\";\n\nimport * as Connection from \"../auth/connection.ts\";\nimport * as ProviderAuthorization from \"../auth/authorization.ts\";\nimport type * as ProviderAuth from \"../auth/manifest.ts\";\nimport { Value as Secret } from \"../auth/secret.ts\";\nimport * as TokenEffect from \"../auth/token.ts\";\nimport { Error as InvalidInputError } from \"../invalid-input.ts\";\nimport { webCryptoLayer } from \"../plan/canonical-json.ts\";\nimport * as DnsProvider from \"../provider/provider.ts\";\nimport * as ConnectionStore from \"../stores/connection.ts\";\nimport * as CredentialStore from \"../stores/credential.ts\";\nimport * as ProviderAuthorizationStore from \"../stores/authorization.ts\";\n\nexport function connect(input: {\n readonly connectionStore: ConnectionStore.AsyncInterface;\n readonly credentialStore: CredentialStore.AsyncInterface;\n readonly authorizationStore: ProviderAuthorizationStore.AsyncInterface;\n readonly grant: Connection.Grant;\n readonly ownerId: string;\n readonly providerId: string;\n readonly subjectId: string;\n readonly token: Secret;\n readonly validate: (token: Secret) => Promise<ProviderAuth.TokenValidation>;\n}): Promise<{\n readonly authorization: ProviderAuthorization.ProviderAuthorization;\n readonly connection: Connection.Connection;\n}> {\n return Effect.runPromise(\n TokenEffect.connect({\n grant: input.grant,\n ownerId: input.ownerId,\n providerId: input.providerId,\n subjectId: input.subjectId,\n token: input.token,\n validate: (token) =>\n Effect.tryPromise({\n try: () => input.validate(token),\n catch: (cause) =>\n cause instanceof InvalidInputError || cause instanceof DnsProvider.Error\n ? cause\n : new DnsProvider.Error({\n cause,\n message: cause instanceof Error ? cause.message : \"Token validation failed\",\n operation: \"validateToken\",\n providerId: input.providerId,\n }),\n }),\n }).pipe(\n Effect.provide(\n Layer.mergeAll(\n ConnectionStore.layerFromAsync(input.connectionStore),\n ProviderAuthorizationStore.layerFromAsync(input.authorizationStore),\n CredentialStore.layerFromAsync(input.credentialStore),\n webCryptoLayer,\n ),\n ),\n ),\n );\n}\n","import { 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 VerificationEffect from \"../verification/verify.ts\";\n\nexport function record(input: {\n readonly provider: DnsProvider.AsyncInterface;\n readonly record: DnsRecord.DnsRecord;\n readonly resolver: DnsResolver.AsyncInterface;\n readonly zone: DomainName.DomainName;\n}): Promise<VerificationEffect.Result> {\n return Effect.runPromise(\n VerificationEffect.record({ record: input.record, zone: input.zone }).pipe(\n Effect.provide(\n Layer.merge(\n DnsProvider.layerFromAsync(input.provider),\n DnsResolver.layerFromAsync(input.resolver),\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 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 ConnectionLifecycle from \"./promise/connection-lifecycle.ts\";\nexport * as ProviderAuthorization from \"./promise/provider-authorization.ts\";\nexport * as ProviderAuth from \"./promise/provider-auth.ts\";\nexport * as Secret from \"./auth/secret.ts\";\nexport * as ProviderDiscovery from \"./discovery/selection.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 type * as DnsProvider from \"./promise/dns-provider.ts\";\nexport * as Cloudflare from \"./promise/cloudflare.ts\";\nexport * as Vercel from \"./promise/vercel.ts\";\nexport type * as DnsResolver from \"./promise/dns-resolver.ts\";\nexport * as OAuth from \"./promise/oauth.ts\";\nexport * as Provisioning from \"./promise/provisioning.ts\";\nexport type * as Stores from \"./promise/stores.ts\";\nexport * as TokenConnection from \"./promise/token.ts\";\nexport * as Verification from \"./promise/verification.ts\";\nexport * as CloudflareDnsOverHttps from \"./promise/cloudflare-doh.ts\";\nexport * as DnsOverHttps from \"./promise/doh.ts\";\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.mjs","names":["decode","ProviderAuth.decode","decode","ProviderAuthorization.decode","Discovery.make","Provider.Error","DnsPlan.decode","DnsPlan.decodeReceipt","create","DeletionEffect.create","DnsProvider.layerFromAsync","authorize","DeletionEffect.authorize","apply","DeletionEffect.apply","ProvisioningEffect.create","ZoneDiscoveryEffect.Service","ZoneDiscoveryEffect.make","ZoneDiscovery.toEffectSource","DnsProvider.layerFromAsync","ProvisioningEffect.authorize","ProvisioningEffect.apply","ConnectionAuthorization.authorize","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/provider-auth.ts","../src/promise/provider-authorization.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/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/index.ts"],"sourcesContent":["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 * as ProviderAuthorization from \"../auth/authorization.ts\";\n\nexport {\n Capability,\n CapabilityEvidence,\n encode,\n Evidence,\n EvidenceSchema,\n Schema,\n} from \"../auth/authorization.ts\";\nexport type { ProviderAuthorization } from \"../auth/authorization.ts\";\n\nexport function decode(input: unknown): Promise<ProviderAuthorization.ProviderAuthorization> {\n return Effect.runPromise(ProviderAuthorization.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 { 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 { 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 connection: Connection.Connection;\n readonly domain: string;\n readonly operationIds?: ReadonlyArray<string>;\n readonly plan: DnsPlan.DnsPlan;\n}): Promise<DnsPlan.PlanAuthorization> {\n return Effect.runPromise(\n ConnectionAuthorization.authorize(input).pipe(Effect.provide(webCryptoLayer)),\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 AuthorizationLifecycle from \"./promise/authorization-lifecycle.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 type * as DnsResolver from \"./promise/dns-resolver.ts\";\nexport * as ProviderAuth from \"./promise/provider-auth.ts\";\nexport * as ProviderAuthorization from \"./promise/provider-authorization.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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"}