domainkit 0.8.0 → 0.9.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.
- package/README.md +213 -41
- package/dist/Approval.mjs +34 -0
- package/dist/Approval.mjs.map +1 -0
- package/dist/Cleanup.mjs +97 -0
- package/dist/Cleanup.mjs.map +1 -0
- package/dist/Cloudflare.mjs +225 -0
- package/dist/Cloudflare.mjs.map +1 -0
- package/dist/Connect.mjs +463 -0
- package/dist/Connect.mjs.map +1 -0
- package/dist/Custody.mjs +64 -0
- package/dist/Custody.mjs.map +1 -0
- package/dist/DnsRecord.mjs +213 -0
- package/dist/DnsRecord.mjs.map +1 -0
- package/dist/DomainKit.mjs +34 -0
- package/dist/DomainKit.mjs.map +1 -0
- package/dist/DomainName.mjs +100 -0
- package/dist/DomainName.mjs.map +1 -0
- package/dist/Plan.mjs +102 -0
- package/dist/Plan.mjs.map +1 -0
- package/dist/Principal.mjs +23 -0
- package/dist/Principal.mjs.map +1 -0
- package/dist/Provider.mjs +130 -0
- package/dist/Provider.mjs.map +1 -0
- package/dist/Providers.mjs +40 -0
- package/dist/Providers.mjs.map +1 -0
- package/dist/Provision.mjs +93 -0
- package/dist/Provision.mjs.map +1 -0
- package/dist/Reason.mjs +162 -0
- package/dist/Reason.mjs.map +1 -0
- package/dist/Receipt.mjs +71 -0
- package/dist/Receipt.mjs.map +1 -0
- package/dist/Resolver.mjs +75 -0
- package/dist/Resolver.mjs.map +1 -0
- package/dist/Server.mjs +516 -0
- package/dist/Server.mjs.map +1 -0
- package/dist/Storage.mjs +236 -0
- package/dist/Storage.mjs.map +1 -0
- package/dist/Testing.mjs +226 -0
- package/dist/Testing.mjs.map +1 -0
- package/dist/Transport.mjs +187 -0
- package/dist/Transport.mjs.map +1 -0
- package/dist/Vercel.mjs +116 -0
- package/dist/Vercel.mjs.map +1 -0
- package/dist/Verify.mjs +292 -0
- package/dist/Verify.mjs.map +1 -0
- package/dist/{rolldown-runtime-D7D4PA-g.mjs → _virtual/_rolldown/runtime.mjs} +1 -1
- package/dist/entry/client.mjs +2 -0
- package/dist/entry/server.mjs +2 -0
- package/dist/entry/testing.mjs +3 -0
- package/dist/index.mjs +33 -462
- package/dist/index.mjs.map +1 -1
- package/dist/internal/aes.mjs +61 -0
- package/dist/internal/aes.mjs.map +1 -0
- package/dist/internal/attempts.mjs +284 -0
- package/dist/internal/attempts.mjs.map +1 -0
- package/dist/internal/cloudflare/client.mjs +100 -0
- package/dist/internal/cloudflare/client.mjs.map +1 -0
- package/dist/internal/cloudflare/protocol.mjs +59 -0
- package/dist/internal/cloudflare/protocol.mjs.map +1 -0
- package/dist/internal/cloudflare/records.mjs +156 -0
- package/dist/internal/cloudflare/records.mjs.map +1 -0
- package/dist/internal/config.mjs +13 -0
- package/dist/internal/config.mjs.map +1 -0
- package/dist/internal/conformance/provider.mjs +207 -0
- package/dist/internal/conformance/provider.mjs.map +1 -0
- package/dist/internal/conformance/storage.mjs +428 -0
- package/dist/internal/conformance/storage.mjs.map +1 -0
- package/dist/internal/digest.mjs +25 -0
- package/dist/internal/digest.mjs.map +1 -0
- package/dist/internal/doh.mjs +153 -0
- package/dist/internal/doh.mjs.map +1 -0
- package/dist/internal/error.mjs +69 -0
- package/dist/internal/error.mjs.map +1 -0
- package/dist/internal/http.mjs +90 -0
- package/dist/internal/http.mjs.map +1 -0
- package/dist/internal/ids.mjs +8 -0
- package/dist/internal/ids.mjs.map +1 -0
- package/dist/internal/oauth.mjs +113 -0
- package/dist/internal/oauth.mjs.map +1 -0
- package/dist/internal/planner.mjs +88 -0
- package/dist/internal/planner.mjs.map +1 -0
- package/dist/internal/provider-async.mjs +83 -0
- package/dist/internal/provider-async.mjs.map +1 -0
- package/dist/internal/storage-memory.mjs +302 -0
- package/dist/internal/storage-memory.mjs.map +1 -0
- package/dist/internal/vercel/client.mjs +122 -0
- package/dist/internal/vercel/client.mjs.map +1 -0
- package/dist/internal/vercel/protocol.mjs +80 -0
- package/dist/internal/vercel/protocol.mjs.map +1 -0
- package/dist/internal/vercel/records.mjs +151 -0
- package/dist/internal/vercel/records.mjs.map +1 -0
- package/dist/package.mjs +6 -0
- package/dist/package.mjs.map +1 -0
- package/dist/types/Approval.d.ts +26 -0
- package/dist/types/Cleanup.d.ts +41 -0
- package/dist/types/Cloudflare.d.ts +36 -0
- package/dist/types/Connect.d.ts +506 -0
- package/dist/types/Custody.d.ts +38 -0
- package/dist/types/DnsRecord.d.ts +158 -0
- package/dist/types/DomainKit.d.ts +31 -0
- package/dist/types/DomainName.d.ts +27 -0
- package/dist/types/Plan.d.ts +76 -0
- package/dist/types/Principal.d.ts +18 -0
- package/dist/types/Provider.d.ts +248 -0
- package/dist/types/Providers.d.ts +16 -0
- package/dist/types/Provision.d.ts +75 -0
- package/dist/types/Reason.d.ts +118 -0
- package/dist/types/Receipt.d.ts +55 -0
- package/dist/types/Resolver.d.ts +135 -0
- package/dist/types/Server.d.ts +6523 -0
- package/dist/types/Storage.d.ts +314 -0
- package/dist/types/Testing.d.ts +84 -0
- package/dist/types/Transport.d.ts +124 -0
- package/dist/types/Vercel.d.ts +25 -0
- package/dist/types/Verify.d.ts +109 -0
- package/dist/types/entry/client.d.ts +2 -0
- package/dist/types/entry/server.d.ts +2 -0
- package/dist/types/entry/testing.d.ts +3 -0
- package/dist/types/index.d.ts +21 -0
- package/dist/types/internal/aes.d.ts +8 -0
- package/dist/types/internal/attempts.d.ts +40 -0
- package/dist/types/internal/cloudflare/client.d.ts +23 -0
- package/dist/types/internal/cloudflare/protocol.d.ts +71 -0
- package/dist/types/internal/cloudflare/records.d.ts +8 -0
- package/dist/types/internal/config.d.ts +4 -0
- package/dist/types/internal/conformance/provider.d.ts +12 -0
- package/dist/types/internal/conformance/storage.d.ts +14 -0
- package/dist/types/internal/digest.d.ts +10 -0
- package/dist/types/internal/doh.d.ts +19 -0
- package/dist/types/internal/error.d.ts +24 -0
- package/dist/types/internal/http.d.ts +27 -0
- package/dist/types/internal/ids.d.ts +3 -0
- package/dist/types/internal/oauth.d.ts +58 -0
- package/dist/types/internal/planner.d.ts +22 -0
- package/dist/types/internal/provider-async.d.ts +78 -0
- package/dist/types/internal/storage-memory.d.ts +2 -0
- package/dist/types/internal/vercel/client.d.ts +29 -0
- package/dist/types/internal/vercel/protocol.d.ts +124 -0
- package/dist/types/internal/vercel/records.d.ts +7 -0
- package/package.json +88 -12
- package/dist/canonical-json-CQYKsZw7.mjs +0 -310
- package/dist/canonical-json-CQYKsZw7.mjs.map +0 -1
- package/dist/connect-D-X8T9W8.d.mts +0 -1597
- package/dist/connect-oI8hcMxc.mjs +0 -185
- package/dist/connect-oI8hcMxc.mjs.map +0 -1
- package/dist/connection-Dp6ZdSo8.d.mts +0 -186
- package/dist/connection-api-lqG1nBtD.d.mts +0 -26
- package/dist/index.d.mts +0 -1551
- package/dist/managed-dns-connections-C3A_GBaz.mjs +0 -99
- package/dist/managed-dns-connections-C3A_GBaz.mjs.map +0 -1
- package/dist/promise.d.mts +0 -378
- package/dist/promise.mjs +0 -598
- package/dist/promise.mjs.map +0 -1
- package/dist/resolver-BeGz1ukw.mjs +0 -921
- package/dist/resolver-BeGz1ukw.mjs.map +0 -1
- package/dist/resolver-xoSwyXDJ.d.mts +0 -3734
- package/dist/server.d.mts +0 -128
- package/dist/server.mjs +0 -319
- package/dist/server.mjs.map +0 -1
- package/dist/testing.d.mts +0 -62
- package/dist/testing.mjs +0 -507
- package/dist/testing.mjs.map +0 -1
- package/dist/verify-DvGPb5C9.mjs +0 -2402
- package/dist/verify-DvGPb5C9.mjs.map +0 -1
- package/dist/verify-FpunAcM7.d.mts +0 -1335
package/dist/index.mjs
CHANGED
|
@@ -1,468 +1,39 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
ownerId: input.ownerId,
|
|
22
|
-
revoke: input.revokeAuthorization
|
|
23
|
-
});
|
|
24
|
-
});
|
|
25
|
-
}
|
|
26
|
-
//#endregion
|
|
27
|
-
//#region src/auth/connection-api.ts
|
|
28
|
-
var connection_api_exports = /* @__PURE__ */ __exportAll({
|
|
29
|
-
AuthorizationError: () => AuthorizationError,
|
|
30
|
-
ConnectionStatus: () => ConnectionStatus,
|
|
31
|
-
DomainAttachment: () => DomainAttachment,
|
|
32
|
-
Error: () => Error$1,
|
|
33
|
-
Method: () => Method$1,
|
|
34
|
-
ProviderConnection: () => ProviderConnection,
|
|
35
|
-
ProviderTarget: () => ProviderTarget,
|
|
36
|
-
ProviderTargetEvidence: () => ProviderTargetEvidence,
|
|
37
|
-
StartResult: () => StartResult,
|
|
38
|
-
attach: () => attach,
|
|
39
|
-
authorizationError: () => authorizationError,
|
|
40
|
-
complete: () => complete,
|
|
41
|
-
decode: () => decode,
|
|
42
|
-
detach: () => detach,
|
|
43
|
-
disconnect: () => disconnect,
|
|
44
|
-
encode: () => encode,
|
|
45
|
-
project: () => project,
|
|
46
|
-
start: () => start,
|
|
47
|
-
validate: () => validate
|
|
48
|
-
});
|
|
49
|
-
//#endregion
|
|
50
|
-
//#region src/auth/lifecycle-api.ts
|
|
51
|
-
var lifecycle_api_exports = /* @__PURE__ */ __exportAll({
|
|
52
|
-
AggregateSchema: () => AggregateSchema,
|
|
53
|
-
Authorization: () => authorization_exports,
|
|
54
|
-
Error: () => Error,
|
|
55
|
-
Service: () => Service$1,
|
|
56
|
-
StoredConnection: () => StoredConnection
|
|
57
|
-
});
|
|
58
|
-
//#endregion
|
|
59
|
-
//#region src/providers/cloudflare/index.ts
|
|
60
|
-
var cloudflare_exports = /* @__PURE__ */ __exportAll({
|
|
61
|
-
Auth: () => auth_exports,
|
|
62
|
-
Client: () => client_exports,
|
|
63
|
-
discovery: () => discovery,
|
|
64
|
-
make: () => make
|
|
65
|
-
});
|
|
66
|
-
//#endregion
|
|
67
|
-
//#region src/providers/vercel/index.ts
|
|
68
|
-
var vercel_exports = /* @__PURE__ */ __exportAll({
|
|
69
|
-
AccountContext: () => AccountContext,
|
|
70
|
-
Auth: () => auth_exports$1,
|
|
71
|
-
Client: () => client_exports$1,
|
|
72
|
-
discovery: () => discovery$1,
|
|
73
|
-
make: () => make$1
|
|
74
|
-
});
|
|
75
|
-
//#endregion
|
|
76
|
-
//#region src/transport.ts
|
|
77
|
-
var transport_exports = /* @__PURE__ */ __exportAll({
|
|
78
|
-
ApplyResult: () => ApplyResult,
|
|
79
|
-
AuthenticationMethod: () => AuthenticationMethod,
|
|
80
|
-
AuthenticationParameter: () => AuthenticationParameter,
|
|
81
|
-
CleanupOperation: () => CleanupOperation,
|
|
82
|
-
CleanupPlan: () => CleanupPlan,
|
|
83
|
-
CleanupResult: () => CleanupResult,
|
|
84
|
-
Connected: () => Connected,
|
|
85
|
-
ConnectionResult: () => ConnectionResult,
|
|
86
|
-
ConnectionSnapshot: () => ConnectionSnapshot,
|
|
87
|
-
DetachResult: () => DetachResult,
|
|
88
|
-
Disconnected: () => Disconnected,
|
|
89
|
-
DnsRecord: () => DnsRecord,
|
|
90
|
-
DomainAttachment: () => DomainAttachment,
|
|
91
|
-
Failure: () => Failure,
|
|
92
|
-
Method: () => Method,
|
|
93
|
-
Observation: () => Observation,
|
|
94
|
-
ObservationEvidence: () => ObservationEvidence,
|
|
95
|
-
OperationResult: () => OperationResult,
|
|
96
|
-
PlanOperation: () => PlanOperation,
|
|
97
|
-
Provider: () => Provider,
|
|
98
|
-
ProviderConnection: () => ProviderConnection,
|
|
99
|
-
ProviderTarget: () => ProviderTarget,
|
|
100
|
-
ProviderTargetEvidence: () => ProviderTargetEvidence,
|
|
101
|
-
ProvisioningPlan: () => ProvisioningPlan,
|
|
102
|
-
Redirect: () => Redirect,
|
|
103
|
-
ReusableConnection: () => ReusableConnection,
|
|
104
|
-
Service: () => Service,
|
|
105
|
-
Unsupported: () => Unsupported,
|
|
106
|
-
fromAsync: () => fromAsync,
|
|
107
|
-
fromDnsRecord: () => fromDnsRecord,
|
|
108
|
-
layerFromAsync: () => layerFromAsync,
|
|
109
|
-
toAsync: () => toAsync
|
|
110
|
-
});
|
|
111
|
-
/** A user-presentable failure at the application transport boundary. */
|
|
112
|
-
var Failure = class extends Schema.TaggedError()("Failure", {
|
|
113
|
-
message: Schema.String,
|
|
114
|
-
operation: Schema.String,
|
|
115
|
-
retry: Schema.Literals([
|
|
116
|
-
"never",
|
|
117
|
-
"after-user-action",
|
|
118
|
-
"safe",
|
|
119
|
-
"unknown"
|
|
120
|
-
])
|
|
121
|
-
}) {};
|
|
122
|
-
const AuthenticationParameter = Schema.Struct({
|
|
123
|
-
description: Schema.optionalKey(Schema.String),
|
|
124
|
-
key: Schema.String,
|
|
125
|
-
label: Schema.String,
|
|
126
|
-
placeholder: Schema.optionalKey(Schema.String),
|
|
127
|
-
required: Schema.optionalKey(Schema.Boolean)
|
|
128
|
-
});
|
|
129
|
-
const AuthenticationMethodSchema = Schema.TaggedUnion({
|
|
130
|
-
Integration: { label: Schema.String },
|
|
131
|
-
OAuth: { label: Schema.String },
|
|
132
|
-
Token: {
|
|
133
|
-
label: Schema.String,
|
|
134
|
-
parameters: Schema.optionalKey(Schema.Array(AuthenticationParameter)),
|
|
135
|
-
placeholder: Schema.optionalKey(Schema.String)
|
|
136
|
-
}
|
|
137
|
-
});
|
|
138
|
-
/** Authentication method schema and constructors for trusted host transport responses. */
|
|
139
|
-
const AuthenticationMethod = {
|
|
140
|
-
Schema: AuthenticationMethodSchema,
|
|
141
|
-
Integration: (input) => AuthenticationMethodSchema.cases.Integration.make(input),
|
|
142
|
-
OAuth: (input) => AuthenticationMethodSchema.cases.OAuth.make(input),
|
|
143
|
-
Token: (input) => AuthenticationMethodSchema.cases.Token.make(input)
|
|
144
|
-
};
|
|
145
|
-
const Method = Data.taggedEnum();
|
|
146
|
-
const Provider = Schema.Struct({
|
|
147
|
-
authentication: Schema.Array(AuthenticationMethod.Schema),
|
|
148
|
-
id: Schema.String,
|
|
149
|
-
name: Schema.String
|
|
150
|
-
});
|
|
151
|
-
const ConnectedSchema = Schema.TaggedStruct("Connected", {
|
|
152
|
-
attachment: DomainAttachment,
|
|
153
|
-
connection: ProviderConnection,
|
|
154
|
-
provider: Provider
|
|
155
|
-
});
|
|
156
|
-
/** Constructs a connected transport snapshot from trusted host data. */
|
|
157
|
-
function Connected(input) {
|
|
158
|
-
return ConnectedSchema.make(input);
|
|
159
|
-
}
|
|
160
|
-
(function(_Connected) {
|
|
161
|
-
_Connected.Schema = ConnectedSchema;
|
|
162
|
-
})(Connected || (Connected = {}));
|
|
163
|
-
const ReusableConnection = Schema.Struct({
|
|
164
|
-
connection: ProviderConnection,
|
|
165
|
-
targets: Schema.Array(ProviderTarget)
|
|
166
|
-
});
|
|
167
|
-
const DisconnectedSchema = Schema.TaggedStruct("Disconnected", {
|
|
168
|
-
domain: Schema.String,
|
|
169
|
-
provider: Provider,
|
|
170
|
-
reusableConnections: Schema.Array(ReusableConnection)
|
|
171
|
-
});
|
|
172
|
-
/** Constructs a disconnected transport snapshot from trusted host data. */
|
|
173
|
-
function Disconnected(input) {
|
|
174
|
-
return DisconnectedSchema.make(input);
|
|
175
|
-
}
|
|
176
|
-
(function(_Disconnected) {
|
|
177
|
-
_Disconnected.Schema = DisconnectedSchema;
|
|
178
|
-
})(Disconnected || (Disconnected = {}));
|
|
179
|
-
const UnsupportedSchema = Schema.TaggedStruct("Unsupported", { domain: Schema.String });
|
|
180
|
-
/** Constructs an unsupported transport snapshot from trusted host data. */
|
|
181
|
-
function Unsupported(input) {
|
|
182
|
-
return UnsupportedSchema.make(input);
|
|
183
|
-
}
|
|
184
|
-
(function(_Unsupported) {
|
|
185
|
-
_Unsupported.Schema = UnsupportedSchema;
|
|
186
|
-
})(Unsupported || (Unsupported = {}));
|
|
187
|
-
const ConnectionSnapshot = Schema.Union([
|
|
188
|
-
ConnectedSchema,
|
|
189
|
-
DisconnectedSchema,
|
|
190
|
-
UnsupportedSchema
|
|
191
|
-
]).pipe(Schema.toTaggedUnion("_tag"));
|
|
192
|
-
const RedirectSchema = Schema.TaggedStruct("Redirect", { authorizationUrl: Schema.String });
|
|
193
|
-
/** Constructs an OAuth redirect response from trusted host data. */
|
|
194
|
-
function Redirect(input) {
|
|
195
|
-
return RedirectSchema.make(input);
|
|
196
|
-
}
|
|
197
|
-
(function(_Redirect) {
|
|
198
|
-
_Redirect.Schema = RedirectSchema;
|
|
199
|
-
})(Redirect || (Redirect = {}));
|
|
200
|
-
const ConnectionResult = Schema.Union([ConnectedSchema, RedirectSchema]).pipe(Schema.toTaggedUnion("_tag"));
|
|
201
|
-
const DetachResultSchema = Schema.TaggedStruct("Detached", {
|
|
202
|
-
attachment: DomainAttachment,
|
|
203
|
-
connection: ProviderConnection,
|
|
204
|
-
remainingAttachments: Schema.Int
|
|
205
|
-
});
|
|
206
|
-
/** Constructs a detach response from trusted host data. */
|
|
207
|
-
function DetachResult(input) {
|
|
208
|
-
return DetachResultSchema.make(input);
|
|
209
|
-
}
|
|
210
|
-
(function(_DetachResult) {
|
|
211
|
-
_DetachResult.Schema = DetachResultSchema;
|
|
212
|
-
})(DetachResult || (DetachResult = {}));
|
|
213
|
-
/** A presentation projection of a DNS requirement. */
|
|
214
|
-
const DnsRecord = Schema.Struct({
|
|
215
|
-
id: Schema.String,
|
|
216
|
-
name: Schema.String,
|
|
217
|
-
priority: Schema.optionalKey(Schema.Int),
|
|
218
|
-
type: Schema.String,
|
|
219
|
-
value: Schema.String
|
|
220
|
-
});
|
|
221
|
-
/** Projects DomainKit's operational record into its application transport representation. */
|
|
222
|
-
const fromDnsRecord = (id, record) => {
|
|
223
|
-
switch (record._tag) {
|
|
224
|
-
case "A":
|
|
225
|
-
case "AAAA": return {
|
|
226
|
-
id,
|
|
227
|
-
name: record.name,
|
|
228
|
-
type: record._tag,
|
|
229
|
-
value: record.address
|
|
230
|
-
};
|
|
231
|
-
case "CNAME":
|
|
232
|
-
case "NS": return {
|
|
233
|
-
id,
|
|
234
|
-
name: record.name,
|
|
235
|
-
type: record._tag,
|
|
236
|
-
value: record.target
|
|
237
|
-
};
|
|
238
|
-
case "TXT": return {
|
|
239
|
-
id,
|
|
240
|
-
name: record.name,
|
|
241
|
-
type: record._tag,
|
|
242
|
-
value: record.value
|
|
243
|
-
};
|
|
244
|
-
case "MX": return {
|
|
245
|
-
id,
|
|
246
|
-
name: record.name,
|
|
247
|
-
priority: record.priority,
|
|
248
|
-
type: record._tag,
|
|
249
|
-
value: record.exchange
|
|
250
|
-
};
|
|
251
|
-
case "CAA": return {
|
|
252
|
-
id,
|
|
253
|
-
name: record.name,
|
|
254
|
-
type: record._tag,
|
|
255
|
-
value: `${record.flags} ${record.tag} ${record.value}`
|
|
256
|
-
};
|
|
257
|
-
case "SRV": return {
|
|
258
|
-
id,
|
|
259
|
-
name: record.name,
|
|
260
|
-
priority: record.priority,
|
|
261
|
-
type: record._tag,
|
|
262
|
-
value: `${record.weight} ${record.port} ${record.target}`
|
|
263
|
-
};
|
|
264
|
-
}
|
|
265
|
-
};
|
|
266
|
-
const PlanOperationSchema = Schema.TaggedUnion({
|
|
267
|
-
Conflict: {
|
|
268
|
-
id: Schema.String,
|
|
269
|
-
reason: Schema.String,
|
|
270
|
-
record: DnsRecord
|
|
271
|
-
},
|
|
272
|
-
Create: {
|
|
273
|
-
id: Schema.String,
|
|
274
|
-
record: DnsRecord
|
|
275
|
-
},
|
|
276
|
-
Noop: {
|
|
277
|
-
id: Schema.String,
|
|
278
|
-
record: DnsRecord
|
|
279
|
-
}
|
|
280
|
-
});
|
|
281
|
-
/** Provisioning operation schema and constructors for trusted host responses. */
|
|
282
|
-
const PlanOperation = {
|
|
283
|
-
Schema: PlanOperationSchema,
|
|
284
|
-
Conflict: (input) => PlanOperationSchema.cases.Conflict.make(input),
|
|
285
|
-
Create: (input) => PlanOperationSchema.cases.Create.make(input),
|
|
286
|
-
Noop: (input) => PlanOperationSchema.cases.Noop.make(input)
|
|
287
|
-
};
|
|
288
|
-
const ProvisioningPlanSchema = Schema.TaggedStruct("Plan", {
|
|
289
|
-
digest: Schema.String,
|
|
290
|
-
expiresAt: Schema.String,
|
|
291
|
-
operations: Schema.Array(PlanOperation.Schema)
|
|
292
|
-
});
|
|
293
|
-
/** Constructs a provisioning plan response from trusted host data. */
|
|
294
|
-
function ProvisioningPlan(input) {
|
|
295
|
-
return ProvisioningPlanSchema.make(input);
|
|
296
|
-
}
|
|
297
|
-
(function(_ProvisioningPlan) {
|
|
298
|
-
_ProvisioningPlan.Schema = ProvisioningPlanSchema;
|
|
299
|
-
})(ProvisioningPlan || (ProvisioningPlan = {}));
|
|
300
|
-
const OperationResultSchema = Schema.TaggedUnion({
|
|
301
|
-
Applied: { operationId: Schema.String },
|
|
302
|
-
Failed: {
|
|
303
|
-
message: Schema.String,
|
|
304
|
-
operationId: Schema.String
|
|
305
|
-
},
|
|
306
|
-
Unchanged: { operationId: Schema.String }
|
|
307
|
-
});
|
|
308
|
-
/** Per-operation result schema and constructors for trusted host responses. */
|
|
309
|
-
const OperationResult = {
|
|
310
|
-
Schema: OperationResultSchema,
|
|
311
|
-
Applied: (input) => OperationResultSchema.cases.Applied.make(input),
|
|
312
|
-
Failed: (input) => OperationResultSchema.cases.Failed.make(input),
|
|
313
|
-
Unchanged: (input) => OperationResultSchema.cases.Unchanged.make(input)
|
|
314
|
-
};
|
|
315
|
-
const ApplyOutcomeFields = {
|
|
316
|
-
operationId: Schema.String,
|
|
317
|
-
receiptId: Schema.String,
|
|
318
|
-
results: Schema.Array(OperationResult.Schema)
|
|
319
|
-
};
|
|
320
|
-
const ApplyResultSchema = Schema.TaggedUnion({
|
|
321
|
-
Applied: ApplyOutcomeFields,
|
|
322
|
-
Partial: ApplyOutcomeFields,
|
|
323
|
-
Stale: { message: Schema.String }
|
|
324
|
-
});
|
|
325
|
-
/** Apply result schema and constructors for trusted host responses. */
|
|
326
|
-
const ApplyResult = {
|
|
327
|
-
Schema: ApplyResultSchema,
|
|
328
|
-
Applied: (input) => ApplyResultSchema.cases.Applied.make(input),
|
|
329
|
-
Partial: (input) => ApplyResultSchema.cases.Partial.make(input),
|
|
330
|
-
Stale: (input) => ApplyResultSchema.cases.Stale.make(input)
|
|
331
|
-
};
|
|
332
|
-
const ObservationEvidenceSchema = Schema.TaggedUnion({
|
|
333
|
-
Found: { recordId: Schema.String },
|
|
334
|
-
Mismatch: {
|
|
335
|
-
message: Schema.String,
|
|
336
|
-
recordId: Schema.String
|
|
337
|
-
},
|
|
338
|
-
Missing: { recordId: Schema.String },
|
|
339
|
-
Unavailable: {
|
|
340
|
-
message: Schema.String,
|
|
341
|
-
recordId: Schema.String
|
|
342
|
-
}
|
|
343
|
-
});
|
|
344
|
-
/** DNS observation evidence schema and constructors for trusted host responses. */
|
|
345
|
-
const ObservationEvidence = {
|
|
346
|
-
Schema: ObservationEvidenceSchema,
|
|
347
|
-
Found: (input) => ObservationEvidenceSchema.cases.Found.make(input),
|
|
348
|
-
Mismatch: (input) => ObservationEvidenceSchema.cases.Mismatch.make(input),
|
|
349
|
-
Missing: (input) => ObservationEvidenceSchema.cases.Missing.make(input),
|
|
350
|
-
Unavailable: (input) => ObservationEvidenceSchema.cases.Unavailable.make(input)
|
|
351
|
-
};
|
|
352
|
-
const ObservationSchema = Schema.TaggedStruct("Observation", {
|
|
353
|
-
provider: Schema.Array(ObservationEvidence.Schema),
|
|
354
|
-
publicDns: Schema.Array(ObservationEvidence.Schema)
|
|
355
|
-
});
|
|
356
|
-
/** Constructs a DNS observation response from trusted host data. */
|
|
357
|
-
function Observation(input) {
|
|
358
|
-
return ObservationSchema.make(input);
|
|
359
|
-
}
|
|
360
|
-
(function(_Observation) {
|
|
361
|
-
_Observation.Schema = ObservationSchema;
|
|
362
|
-
})(Observation || (Observation = {}));
|
|
363
|
-
const CleanupOperationSchema = Schema.TaggedUnion({
|
|
364
|
-
AlreadyAbsent: {
|
|
365
|
-
id: Schema.String,
|
|
366
|
-
record: DnsRecord
|
|
367
|
-
},
|
|
368
|
-
Blocked: {
|
|
369
|
-
id: Schema.String,
|
|
370
|
-
reason: Schema.String,
|
|
371
|
-
record: DnsRecord
|
|
372
|
-
},
|
|
373
|
-
Delete: {
|
|
374
|
-
id: Schema.String,
|
|
375
|
-
record: DnsRecord
|
|
376
|
-
}
|
|
377
|
-
});
|
|
378
|
-
/** Cleanup operation schema and constructors for trusted host responses. */
|
|
379
|
-
const CleanupOperation = {
|
|
380
|
-
Schema: CleanupOperationSchema,
|
|
381
|
-
AlreadyAbsent: (input) => CleanupOperationSchema.cases.AlreadyAbsent.make(input),
|
|
382
|
-
Blocked: (input) => CleanupOperationSchema.cases.Blocked.make(input),
|
|
383
|
-
Delete: (input) => CleanupOperationSchema.cases.Delete.make(input)
|
|
384
|
-
};
|
|
385
|
-
const CleanupPlanSchema = Schema.TaggedStruct("CleanupPlan", {
|
|
386
|
-
digest: Schema.String,
|
|
387
|
-
expiresAt: Schema.String,
|
|
388
|
-
operations: Schema.Array(CleanupOperation.Schema)
|
|
389
|
-
});
|
|
390
|
-
/** Constructs a cleanup plan response from trusted host data. */
|
|
391
|
-
function CleanupPlan(input) {
|
|
392
|
-
return CleanupPlanSchema.make(input);
|
|
393
|
-
}
|
|
394
|
-
(function(_CleanupPlan) {
|
|
395
|
-
_CleanupPlan.Schema = CleanupPlanSchema;
|
|
396
|
-
})(CleanupPlan || (CleanupPlan = {}));
|
|
397
|
-
const CleanupOutcomeFields = {
|
|
398
|
-
operationId: Schema.String,
|
|
399
|
-
results: Schema.Array(OperationResult.Schema)
|
|
400
|
-
};
|
|
401
|
-
const CleanupResultSchema = Schema.TaggedUnion({
|
|
402
|
-
Cleaned: CleanupOutcomeFields,
|
|
403
|
-
Partial: CleanupOutcomeFields,
|
|
404
|
-
Stale: { message: Schema.String }
|
|
405
|
-
});
|
|
406
|
-
/** Cleanup result schema and constructors for trusted host responses. */
|
|
407
|
-
const CleanupResult = {
|
|
408
|
-
Schema: CleanupResultSchema,
|
|
409
|
-
Cleaned: (input) => CleanupResultSchema.cases.Cleaned.make(input),
|
|
410
|
-
Partial: (input) => CleanupResultSchema.cases.Partial.make(input),
|
|
411
|
-
Stale: (input) => CleanupResultSchema.cases.Stale.make(input)
|
|
412
|
-
};
|
|
413
|
-
var Service = class extends Context.Service()("@domainkit/Transport") {};
|
|
414
|
-
/** Converts a Promise-shaped host implementation into the canonical Effect service. */
|
|
415
|
-
const fromAsync = (transport, options = {}) => {
|
|
416
|
-
const attempt = (operation, evaluate) => Effect.tryPromise({
|
|
417
|
-
try: evaluate,
|
|
418
|
-
catch: (cause) => options.onError?.(operation, cause) ?? (cause instanceof Failure ? cause : new Failure({
|
|
419
|
-
message: cause instanceof globalThis.Error ? cause.message : String(cause),
|
|
420
|
-
operation,
|
|
421
|
-
retry: "unknown"
|
|
422
|
-
}))
|
|
423
|
-
});
|
|
424
|
-
return Service.of({
|
|
425
|
-
cleanup: {
|
|
426
|
-
apply: (input) => attempt("cleanup.apply", () => transport.cleanup.apply(input)),
|
|
427
|
-
plan: (input) => attempt("cleanup.plan", () => transport.cleanup.plan(input))
|
|
428
|
-
},
|
|
429
|
-
connection: {
|
|
430
|
-
attach: (input) => attempt("connection.attach", () => transport.connection.attach(input)),
|
|
431
|
-
connect: (input) => attempt("connection.connect", () => transport.connection.connect(input)),
|
|
432
|
-
inspect: (input) => attempt("connection.inspect", () => transport.connection.inspect(input)),
|
|
433
|
-
detach: (input) => attempt("connection.detach", () => transport.connection.detach(input))
|
|
434
|
-
},
|
|
435
|
-
provisioning: {
|
|
436
|
-
apply: (input) => attempt("provisioning.apply", () => transport.provisioning.apply(input)),
|
|
437
|
-
plan: (input) => attempt("provisioning.plan", () => transport.provisioning.plan(input))
|
|
438
|
-
},
|
|
439
|
-
verification: { observe: (input) => attempt("verification.observe", () => transport.verification.observe(input)) }
|
|
440
|
-
});
|
|
441
|
-
};
|
|
442
|
-
const layerFromAsync = (transport, options) => Layer.succeed(Service, fromAsync(transport, options));
|
|
443
|
-
/** Converts an environment-free Effect service into its Promise-shaped host seam. */
|
|
444
|
-
const toAsync = (transport) => ({
|
|
445
|
-
cleanup: {
|
|
446
|
-
apply: (input) => Effect.runPromise(transport.cleanup.apply(input)),
|
|
447
|
-
plan: (input) => Effect.runPromise(transport.cleanup.plan(input))
|
|
448
|
-
},
|
|
449
|
-
connection: {
|
|
450
|
-
attach: (input) => Effect.runPromise(transport.connection.attach(input)),
|
|
451
|
-
connect: (input) => Effect.runPromise(transport.connection.connect(input)),
|
|
452
|
-
inspect: (input) => Effect.runPromise(transport.connection.inspect(input)),
|
|
453
|
-
detach: (input) => Effect.runPromise(transport.connection.detach(input))
|
|
454
|
-
},
|
|
455
|
-
provisioning: {
|
|
456
|
-
apply: (input) => Effect.runPromise(transport.provisioning.apply(input)),
|
|
457
|
-
plan: (input) => Effect.runPromise(transport.provisioning.plan(input))
|
|
458
|
-
},
|
|
459
|
-
verification: { observe: (input) => Effect.runPromise(transport.verification.observe(input)) }
|
|
460
|
-
});
|
|
461
|
-
//#endregion
|
|
1
|
+
import { DomainName_exports } from "./DomainName.mjs";
|
|
2
|
+
import { DnsRecord_exports } from "./DnsRecord.mjs";
|
|
3
|
+
import { Plan_exports } from "./Plan.mjs";
|
|
4
|
+
import { Reason_exports } from "./Reason.mjs";
|
|
5
|
+
import { Approval_exports } from "./Approval.mjs";
|
|
6
|
+
import { Custody_exports } from "./Custody.mjs";
|
|
7
|
+
import { Principal_exports } from "./Principal.mjs";
|
|
8
|
+
import { Provider_exports } from "./Provider.mjs";
|
|
9
|
+
import { Providers_exports } from "./Providers.mjs";
|
|
10
|
+
import { Resolver_exports } from "./Resolver.mjs";
|
|
11
|
+
import { Receipt_exports } from "./Receipt.mjs";
|
|
12
|
+
import { Storage_exports } from "./Storage.mjs";
|
|
13
|
+
import { Connect_exports } from "./Connect.mjs";
|
|
14
|
+
import { Provision_exports } from "./Provision.mjs";
|
|
15
|
+
import { Cleanup_exports } from "./Cleanup.mjs";
|
|
16
|
+
import { Cloudflare_exports } from "./Cloudflare.mjs";
|
|
17
|
+
import { Verify_exports } from "./Verify.mjs";
|
|
18
|
+
import { DomainKit_exports } from "./DomainKit.mjs";
|
|
19
|
+
import { Vercel_exports } from "./Vercel.mjs";
|
|
20
|
+
import { version } from "./package.mjs";
|
|
462
21
|
//#region src/index.ts
|
|
22
|
+
/**
|
|
23
|
+
* domainkit — the Effect-native root. One module per concept: services expose `Service` (the tag)
|
|
24
|
+
* and `Interface` (its shape), value modules expose `Model` (the schema).
|
|
25
|
+
*
|
|
26
|
+
* Lifecycle services: Connect, Provision, Cleanup, Verify.
|
|
27
|
+
* Host seams: Storage, Custody, Principal.
|
|
28
|
+
* Providers: Provider, Providers, Cloudflare, Vercel.
|
|
29
|
+
* Values: DomainName, DnsRecord, Plan, Approval, Receipt.
|
|
30
|
+
* Everything else: Reason, Resolver, DomainKit (the composed layer and `DomainKit.Error`).
|
|
31
|
+
*
|
|
32
|
+
* Subpath: domainkit/testing.
|
|
33
|
+
*/
|
|
463
34
|
/** The current package version from the package manifest. */
|
|
464
35
|
const VERSION = version;
|
|
465
36
|
//#endregion
|
|
466
|
-
export {
|
|
37
|
+
export { Approval_exports as Approval, Cleanup_exports as Cleanup, Cloudflare_exports as Cloudflare, Connect_exports as Connect, Custody_exports as Custody, DnsRecord_exports as DnsRecord, DomainKit_exports as DomainKit, DomainName_exports as DomainName, Plan_exports as Plan, Principal_exports as Principal, Provider_exports as Provider, Providers_exports as Providers, Provision_exports as Provision, Reason_exports as Reason, Receipt_exports as Receipt, Resolver_exports as Resolver, Storage_exports as Storage, VERSION, Vercel_exports as Vercel, Verify_exports as Verify };
|
|
467
38
|
|
|
468
39
|
//# sourceMappingURL=index.mjs.map
|
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.mjs","names":["Lifecycle.Service","S","Connection.DomainAttachment","Connection.ProviderConnection","Connection.ProviderTarget","packageJson.version"],"sources":["../src/auth/connection-lifecycle.ts","../src/auth/connection-api.ts","../src/auth/lifecycle-api.ts","../src/providers/cloudflare/index.ts","../src/providers/vercel/index.ts","../src/transport.ts","../src/index.ts"],"sourcesContent":["import { Effect } from \"effect\";\n\nimport * as Connection from \"./connection.ts\";\nimport * as Lifecycle from \"./lifecycle-repository.ts\";\nimport * as ProviderAuthorization from \"./authorization.ts\";\n\n/** Attach one exact provider target to one organization domain. */\nexport const attach = Effect.fn(\"ManagedDnsConnections.attach\")(function* (input: {\n readonly attachment: Connection.DomainAttachment;\n readonly connectionId: string;\n readonly ownerId: string;\n}) {\n const service = yield* Lifecycle.Service;\n return yield* service.attach(input);\n});\n\n/** Remove one domain attachment while retaining the organization connection. */\nexport const detach = Effect.fn(\"ManagedDnsConnections.detach\")(function* (input: {\n readonly attachmentId: string;\n readonly ownerId: string;\n}) {\n const service = yield* Lifecycle.Service;\n return yield* service.detach(input);\n});\n\n/** Disconnect one organization connection, revoking the shared authorization only when final. */\nexport function disconnect<E>(input: {\n readonly connectionId: string;\n readonly ownerId: string;\n readonly revokeAuthorization: (\n authorization: ProviderAuthorization.ProviderAuthorization,\n ) => Effect.Effect<void, E>;\n}): Effect.Effect<Lifecycle.DisconnectResult, Lifecycle.Error | E, Lifecycle.Service> {\n return Effect.gen(function* () {\n const service = yield* Lifecycle.Service;\n return yield* service.disconnect({\n connectionId: input.connectionId,\n ownerId: input.ownerId,\n revoke: input.revokeAuthorization,\n });\n });\n}\n","export {\n AuthorizationError,\n authorizationError,\n ConnectionStatus,\n decode,\n DomainAttachment,\n encode,\n ProviderConnection,\n ProviderTarget,\n ProviderTargetEvidence,\n project,\n validate,\n} from \"./connection.ts\";\nexport { attach, detach, disconnect } from \"./connection-lifecycle.ts\";\nexport type { AttachmentResult, DetachResult, DisconnectResult } from \"./lifecycle-repository.ts\";\nexport { complete, Error, Method, start, StartResult } from \"./connect.ts\";\nexport type {\n Authentication,\n AuthenticationFailure,\n BaseInput,\n CompleteInput,\n Continuation,\n ContinuationStore,\n Failure,\n InteractiveFlow,\n InteractiveStart,\n Method as ConnectionMethod,\n StartResult as ConnectionStartResult,\n} from \"./connect.ts\";\n","/** Public surface for the cohesive managed-DNS persistence capability. */\nexport { AggregateSchema, Error, Service } from \"./lifecycle-repository.ts\";\nexport * as Authorization from \"./authorization.ts\";\nexport { StoredConnection } from \"./connection.ts\";\nexport type { StoredCredential } from \"./connection.ts\";\nexport type {\n Aggregate,\n AttachmentResult,\n ConnectInput,\n DetachResult,\n DisconnectResult,\n Interface,\n} from \"./lifecycle-repository.ts\";\n","export * as Auth from \"./auth.ts\";\nexport * as Client from \"./client.ts\";\n\nexport { discovery, make } from \"./client.ts\";\nexport type { Account, Fetch, Interface, ListZonesInput, Options, Zone } from \"./client.ts\";\n","export * as Auth from \"./auth.ts\";\nexport * as Client from \"./client.ts\";\n\nexport { AccountContext, discovery, make } from \"./client.ts\";\nexport type { Account, Fetch, Interface, ListZonesInput, Options, Zone } from \"./client.ts\";\n","import { Context, Data, Effect, Layer, Schema as S } from \"effect\";\n\nimport * as Connection from \"./auth/connection.ts\";\nimport type * as DomainDnsRecord from \"./domain/dns-record.ts\";\n\nexport {\n DomainAttachment,\n ProviderConnection,\n ProviderTarget,\n ProviderTargetEvidence,\n} from \"./auth/connection.ts\";\n\n/** A user-presentable failure at the application transport boundary. */\nexport class Failure extends S.TaggedError<Failure>()(\"Failure\", {\n message: S.String,\n operation: S.String,\n retry: S.Literals([\"never\", \"after-user-action\", \"safe\", \"unknown\"]),\n}) {}\n\nexport const AuthenticationParameter = S.Struct({\n description: S.optionalKey(S.String),\n key: S.String,\n label: S.String,\n placeholder: S.optionalKey(S.String),\n required: S.optionalKey(S.Boolean),\n});\nexport type AuthenticationParameter = typeof AuthenticationParameter.Type;\n\nconst AuthenticationMethodSchema = S.TaggedUnion({\n Integration: { label: S.String },\n OAuth: { label: S.String },\n Token: {\n label: S.String,\n parameters: S.optionalKey(S.Array(AuthenticationParameter)),\n placeholder: S.optionalKey(S.String),\n },\n});\n\n/** Authentication method schema and constructors for trusted host transport responses. */\nexport const AuthenticationMethod = {\n Schema: AuthenticationMethodSchema,\n Integration: (input: Parameters<typeof AuthenticationMethodSchema.cases.Integration.make>[0]) =>\n AuthenticationMethodSchema.cases.Integration.make(input),\n OAuth: (input: Parameters<typeof AuthenticationMethodSchema.cases.OAuth.make>[0]) =>\n AuthenticationMethodSchema.cases.OAuth.make(input),\n Token: (input: Parameters<typeof AuthenticationMethodSchema.cases.Token.make>[0]) =>\n AuthenticationMethodSchema.cases.Token.make(input),\n};\nexport type AuthenticationMethod = typeof AuthenticationMethodSchema.Type;\n\n/** The authentication choice supplied to a connection request. */\nexport type Method = Data.TaggedEnum<{\n Integration: {};\n OAuth: {};\n Token: {\n readonly parameters?: Readonly<Record<string, string>>;\n readonly token: string;\n };\n}>;\nexport const Method = Data.taggedEnum<Method>();\n\nexport const Provider = S.Struct({\n authentication: S.Array(AuthenticationMethod.Schema),\n id: S.String,\n name: S.String,\n});\nexport type Provider = typeof Provider.Type;\n\nconst ConnectedSchema = S.TaggedStruct(\"Connected\", {\n attachment: Connection.DomainAttachment,\n connection: Connection.ProviderConnection,\n provider: Provider,\n});\n/** Constructs a connected transport snapshot from trusted host data. */\nexport function Connected(input: Parameters<typeof ConnectedSchema.make>[0]): Connected {\n return ConnectedSchema.make(input);\n}\nexport namespace Connected {\n export const Schema = ConnectedSchema;\n}\nexport type Connected = typeof ConnectedSchema.Type;\n\nexport const ReusableConnection = S.Struct({\n connection: Connection.ProviderConnection,\n targets: S.Array(Connection.ProviderTarget),\n});\nexport type ReusableConnection = typeof ReusableConnection.Type;\n\nconst DisconnectedSchema = S.TaggedStruct(\"Disconnected\", {\n domain: S.String,\n provider: Provider,\n reusableConnections: S.Array(ReusableConnection),\n});\n/** Constructs a disconnected transport snapshot from trusted host data. */\nexport function Disconnected(input: Parameters<typeof DisconnectedSchema.make>[0]): Disconnected {\n return DisconnectedSchema.make(input);\n}\nexport namespace Disconnected {\n export const Schema = DisconnectedSchema;\n}\nexport type Disconnected = typeof DisconnectedSchema.Type;\n\nconst UnsupportedSchema = S.TaggedStruct(\"Unsupported\", { domain: S.String });\n/** Constructs an unsupported transport snapshot from trusted host data. */\nexport function Unsupported(input: Parameters<typeof UnsupportedSchema.make>[0]): Unsupported {\n return UnsupportedSchema.make(input);\n}\nexport namespace Unsupported {\n export const Schema = UnsupportedSchema;\n}\nexport type Unsupported = typeof UnsupportedSchema.Type;\n\nexport const ConnectionSnapshot = S.Union([\n ConnectedSchema,\n DisconnectedSchema,\n UnsupportedSchema,\n]).pipe(S.toTaggedUnion(\"_tag\"));\nexport type ConnectionSnapshot = typeof ConnectionSnapshot.Type;\n\nconst RedirectSchema = S.TaggedStruct(\"Redirect\", { authorizationUrl: S.String });\n/** Constructs an OAuth redirect response from trusted host data. */\nexport function Redirect(input: Parameters<typeof RedirectSchema.make>[0]): Redirect {\n return RedirectSchema.make(input);\n}\nexport namespace Redirect {\n export const Schema = RedirectSchema;\n}\nexport type Redirect = typeof RedirectSchema.Type;\n\nexport const ConnectionResult = S.Union([ConnectedSchema, RedirectSchema]).pipe(\n S.toTaggedUnion(\"_tag\"),\n);\nexport type ConnectionResult = typeof ConnectionResult.Type;\n\nconst DetachResultSchema = S.TaggedStruct(\"Detached\", {\n attachment: Connection.DomainAttachment,\n connection: Connection.ProviderConnection,\n remainingAttachments: S.Int,\n});\n/** Constructs a detach response from trusted host data. */\nexport function DetachResult(input: Parameters<typeof DetachResultSchema.make>[0]): DetachResult {\n return DetachResultSchema.make(input);\n}\nexport namespace DetachResult {\n export const Schema = DetachResultSchema;\n}\nexport type DetachResult = typeof DetachResultSchema.Type;\n\n/** A presentation projection of a DNS requirement. */\nexport const DnsRecord = S.Struct({\n id: S.String,\n name: S.String,\n priority: S.optionalKey(S.Int),\n type: S.String,\n value: S.String,\n});\nexport type DnsRecord = typeof DnsRecord.Type;\n\n/** Projects DomainKit's operational record into its application transport representation. */\nexport const fromDnsRecord = (id: string, record: DomainDnsRecord.DnsRecord): DnsRecord => {\n switch (record._tag) {\n case \"A\":\n case \"AAAA\":\n return { id, name: record.name, type: record._tag, value: record.address };\n case \"CNAME\":\n case \"NS\":\n return { id, name: record.name, type: record._tag, value: record.target };\n case \"TXT\":\n return { id, name: record.name, type: record._tag, value: record.value };\n case \"MX\":\n return {\n id,\n name: record.name,\n priority: record.priority,\n type: record._tag,\n value: record.exchange,\n };\n case \"CAA\":\n return {\n id,\n name: record.name,\n type: record._tag,\n value: `${record.flags} ${record.tag} ${record.value}`,\n };\n case \"SRV\":\n return {\n id,\n name: record.name,\n priority: record.priority,\n type: record._tag,\n value: `${record.weight} ${record.port} ${record.target}`,\n };\n }\n};\n\nconst PlanOperationSchema = S.TaggedUnion({\n Conflict: { id: S.String, reason: S.String, record: DnsRecord },\n Create: { id: S.String, record: DnsRecord },\n Noop: { id: S.String, record: DnsRecord },\n});\n/** Provisioning operation schema and constructors for trusted host responses. */\nexport const PlanOperation = {\n Schema: PlanOperationSchema,\n Conflict: (input: Parameters<typeof PlanOperationSchema.cases.Conflict.make>[0]) =>\n PlanOperationSchema.cases.Conflict.make(input),\n Create: (input: Parameters<typeof PlanOperationSchema.cases.Create.make>[0]) =>\n PlanOperationSchema.cases.Create.make(input),\n Noop: (input: Parameters<typeof PlanOperationSchema.cases.Noop.make>[0]) =>\n PlanOperationSchema.cases.Noop.make(input),\n};\nexport type PlanOperation = typeof PlanOperationSchema.Type;\n\nconst ProvisioningPlanSchema = S.TaggedStruct(\"Plan\", {\n digest: S.String,\n expiresAt: S.String,\n operations: S.Array(PlanOperation.Schema),\n});\n/** Constructs a provisioning plan response from trusted host data. */\nexport function ProvisioningPlan(\n input: Parameters<typeof ProvisioningPlanSchema.make>[0],\n): ProvisioningPlan {\n return ProvisioningPlanSchema.make(input);\n}\nexport namespace ProvisioningPlan {\n export const Schema = ProvisioningPlanSchema;\n}\nexport type ProvisioningPlan = typeof ProvisioningPlanSchema.Type;\n\nconst OperationResultSchema = S.TaggedUnion({\n Applied: { operationId: S.String },\n Failed: { message: S.String, operationId: S.String },\n Unchanged: { operationId: S.String },\n});\n/** Per-operation result schema and constructors for trusted host responses. */\nexport const OperationResult = {\n Schema: OperationResultSchema,\n Applied: (input: Parameters<typeof OperationResultSchema.cases.Applied.make>[0]) =>\n OperationResultSchema.cases.Applied.make(input),\n Failed: (input: Parameters<typeof OperationResultSchema.cases.Failed.make>[0]) =>\n OperationResultSchema.cases.Failed.make(input),\n Unchanged: (input: Parameters<typeof OperationResultSchema.cases.Unchanged.make>[0]) =>\n OperationResultSchema.cases.Unchanged.make(input),\n};\nexport type OperationResult = typeof OperationResultSchema.Type;\n\nconst ApplyOutcomeFields = {\n operationId: S.String,\n receiptId: S.String,\n results: S.Array(OperationResult.Schema),\n};\nconst ApplyResultSchema = S.TaggedUnion({\n Applied: ApplyOutcomeFields,\n Partial: ApplyOutcomeFields,\n Stale: { message: S.String },\n});\n/** Apply result schema and constructors for trusted host responses. */\nexport const ApplyResult = {\n Schema: ApplyResultSchema,\n Applied: (input: Parameters<typeof ApplyResultSchema.cases.Applied.make>[0]) =>\n ApplyResultSchema.cases.Applied.make(input),\n Partial: (input: Parameters<typeof ApplyResultSchema.cases.Partial.make>[0]) =>\n ApplyResultSchema.cases.Partial.make(input),\n Stale: (input: Parameters<typeof ApplyResultSchema.cases.Stale.make>[0]) =>\n ApplyResultSchema.cases.Stale.make(input),\n};\nexport type ApplyResult = typeof ApplyResultSchema.Type;\n\nconst ObservationEvidenceSchema = S.TaggedUnion({\n Found: { recordId: S.String },\n Mismatch: { message: S.String, recordId: S.String },\n Missing: { recordId: S.String },\n Unavailable: { message: S.String, recordId: S.String },\n});\n/** DNS observation evidence schema and constructors for trusted host responses. */\nexport const ObservationEvidence = {\n Schema: ObservationEvidenceSchema,\n Found: (input: Parameters<typeof ObservationEvidenceSchema.cases.Found.make>[0]) =>\n ObservationEvidenceSchema.cases.Found.make(input),\n Mismatch: (input: Parameters<typeof ObservationEvidenceSchema.cases.Mismatch.make>[0]) =>\n ObservationEvidenceSchema.cases.Mismatch.make(input),\n Missing: (input: Parameters<typeof ObservationEvidenceSchema.cases.Missing.make>[0]) =>\n ObservationEvidenceSchema.cases.Missing.make(input),\n Unavailable: (input: Parameters<typeof ObservationEvidenceSchema.cases.Unavailable.make>[0]) =>\n ObservationEvidenceSchema.cases.Unavailable.make(input),\n};\nexport type ObservationEvidence = typeof ObservationEvidenceSchema.Type;\n\nconst ObservationSchema = S.TaggedStruct(\"Observation\", {\n provider: S.Array(ObservationEvidence.Schema),\n publicDns: S.Array(ObservationEvidence.Schema),\n});\n/** Constructs a DNS observation response from trusted host data. */\nexport function Observation(input: Parameters<typeof ObservationSchema.make>[0]): Observation {\n return ObservationSchema.make(input);\n}\nexport namespace Observation {\n export const Schema = ObservationSchema;\n}\nexport type Observation = typeof ObservationSchema.Type;\n\nconst CleanupOperationSchema = S.TaggedUnion({\n AlreadyAbsent: { id: S.String, record: DnsRecord },\n Blocked: { id: S.String, reason: S.String, record: DnsRecord },\n Delete: { id: S.String, record: DnsRecord },\n});\n/** Cleanup operation schema and constructors for trusted host responses. */\nexport const CleanupOperation = {\n Schema: CleanupOperationSchema,\n AlreadyAbsent: (input: Parameters<typeof CleanupOperationSchema.cases.AlreadyAbsent.make>[0]) =>\n CleanupOperationSchema.cases.AlreadyAbsent.make(input),\n Blocked: (input: Parameters<typeof CleanupOperationSchema.cases.Blocked.make>[0]) =>\n CleanupOperationSchema.cases.Blocked.make(input),\n Delete: (input: Parameters<typeof CleanupOperationSchema.cases.Delete.make>[0]) =>\n CleanupOperationSchema.cases.Delete.make(input),\n};\nexport type CleanupOperation = typeof CleanupOperationSchema.Type;\n\nconst CleanupPlanSchema = S.TaggedStruct(\"CleanupPlan\", {\n digest: S.String,\n expiresAt: S.String,\n operations: S.Array(CleanupOperation.Schema),\n});\n/** Constructs a cleanup plan response from trusted host data. */\nexport function CleanupPlan(input: Parameters<typeof CleanupPlanSchema.make>[0]): CleanupPlan {\n return CleanupPlanSchema.make(input);\n}\nexport namespace CleanupPlan {\n export const Schema = CleanupPlanSchema;\n}\nexport type CleanupPlan = typeof CleanupPlanSchema.Type;\n\nconst CleanupOutcomeFields = {\n operationId: S.String,\n results: S.Array(OperationResult.Schema),\n};\nconst CleanupResultSchema = S.TaggedUnion({\n Cleaned: CleanupOutcomeFields,\n Partial: CleanupOutcomeFields,\n Stale: { message: S.String },\n});\n/** Cleanup result schema and constructors for trusted host responses. */\nexport const CleanupResult = {\n Schema: CleanupResultSchema,\n Cleaned: (input: Parameters<typeof CleanupResultSchema.cases.Cleaned.make>[0]) =>\n CleanupResultSchema.cases.Cleaned.make(input),\n Partial: (input: Parameters<typeof CleanupResultSchema.cases.Partial.make>[0]) =>\n CleanupResultSchema.cases.Partial.make(input),\n Stale: (input: Parameters<typeof CleanupResultSchema.cases.Stale.make>[0]) =>\n CleanupResultSchema.cases.Stale.make(input),\n};\nexport type CleanupResult = typeof CleanupResultSchema.Type;\n\nexport interface ConnectInput {\n readonly domain: string;\n readonly method: Method;\n readonly providerId: string;\n}\n\nexport interface InspectInput {\n readonly domain: string;\n}\n\nexport interface AttachInput {\n readonly connectionId: string;\n readonly domain: string;\n readonly target: Connection.ProviderTarget;\n}\n\nexport interface DetachInput {\n readonly attachmentId: string;\n readonly preserveDns: true;\n}\n\nexport interface ProvisioningPlanInput {\n readonly attachmentId: string;\n readonly domain: string;\n readonly records: ReadonlyArray<DnsRecord>;\n}\n\nexport interface ProvisioningApplyInput {\n readonly attachmentId: string;\n readonly domain: string;\n readonly planDigest: string;\n}\n\nexport interface ObserveInput {\n readonly attachmentId?: string;\n readonly domain: string;\n readonly records: ReadonlyArray<DnsRecord>;\n readonly sources: {\n readonly provider: boolean;\n readonly publicDns: boolean;\n };\n}\n\nexport interface CleanupPlanInput {\n readonly attachmentId: string;\n readonly domain: string;\n readonly receiptId: string;\n}\n\nexport interface CleanupApplyInput extends CleanupPlanInput {\n readonly planDigest: string;\n}\n\n/** Application-facing DNS connection and provisioning capability. */\nexport interface Interface {\n readonly cleanup: {\n readonly apply: (input: CleanupApplyInput) => Effect.Effect<CleanupResult, Failure>;\n readonly plan: (input: CleanupPlanInput) => Effect.Effect<CleanupPlan, Failure>;\n };\n readonly connection: {\n readonly attach: (input: AttachInput) => Effect.Effect<Connected, Failure>;\n readonly connect: (input: ConnectInput) => Effect.Effect<ConnectionResult, Failure>;\n readonly inspect: (input: InspectInput) => Effect.Effect<ConnectionSnapshot, Failure>;\n readonly detach: (input: DetachInput) => Effect.Effect<DetachResult, Failure>;\n };\n readonly provisioning: {\n readonly apply: (input: ProvisioningApplyInput) => Effect.Effect<ApplyResult, Failure>;\n readonly plan: (input: ProvisioningPlanInput) => Effect.Effect<ProvisioningPlan, Failure>;\n };\n readonly verification: {\n readonly observe: (input: ObserveInput) => Effect.Effect<Observation, Failure>;\n };\n}\n\nexport class Service extends Context.Service<Service, Interface>()(\"@domainkit/Transport\") {}\n\n/** Promise-shaped host seam for foreign runtimes and framework actions. */\nexport interface AsyncInterface {\n readonly cleanup: {\n readonly apply: (input: CleanupApplyInput) => Promise<CleanupResult>;\n readonly plan: (input: CleanupPlanInput) => Promise<CleanupPlan>;\n };\n readonly connection: {\n readonly attach: (input: AttachInput) => Promise<Connected>;\n readonly connect: (input: ConnectInput) => Promise<ConnectionResult>;\n readonly inspect: (input: InspectInput) => Promise<ConnectionSnapshot>;\n readonly detach: (input: DetachInput) => Promise<DetachResult>;\n };\n readonly provisioning: {\n readonly apply: (input: ProvisioningApplyInput) => Promise<ApplyResult>;\n readonly plan: (input: ProvisioningPlanInput) => Promise<ProvisioningPlan>;\n };\n readonly verification: {\n readonly observe: (input: ObserveInput) => Promise<Observation>;\n };\n}\n\nexport interface AsyncOptions {\n readonly onError?: (operation: string, cause: unknown) => Failure;\n}\n\n/** Converts a Promise-shaped host implementation into the canonical Effect service. */\nexport const fromAsync = (transport: AsyncInterface, options: AsyncOptions = {}): Interface => {\n const attempt = <A>(operation: string, evaluate: () => Promise<A>) =>\n Effect.tryPromise({\n try: evaluate,\n catch: (cause) =>\n options.onError?.(operation, cause) ??\n (cause instanceof Failure\n ? cause\n : new Failure({\n message: cause instanceof globalThis.Error ? cause.message : String(cause),\n operation,\n retry: \"unknown\",\n })),\n });\n return Service.of({\n cleanup: {\n apply: (input) => attempt(\"cleanup.apply\", () => transport.cleanup.apply(input)),\n plan: (input) => attempt(\"cleanup.plan\", () => transport.cleanup.plan(input)),\n },\n connection: {\n attach: (input) => attempt(\"connection.attach\", () => transport.connection.attach(input)),\n connect: (input) => attempt(\"connection.connect\", () => transport.connection.connect(input)),\n inspect: (input) => attempt(\"connection.inspect\", () => transport.connection.inspect(input)),\n detach: (input) => attempt(\"connection.detach\", () => transport.connection.detach(input)),\n },\n provisioning: {\n apply: (input) => attempt(\"provisioning.apply\", () => transport.provisioning.apply(input)),\n plan: (input) => attempt(\"provisioning.plan\", () => transport.provisioning.plan(input)),\n },\n verification: {\n observe: (input) =>\n attempt(\"verification.observe\", () => transport.verification.observe(input)),\n },\n });\n};\n\nexport const layerFromAsync = (\n transport: AsyncInterface,\n options?: AsyncOptions,\n): Layer.Layer<Service> => Layer.succeed(Service, fromAsync(transport, options));\n\n/** Converts an environment-free Effect service into its Promise-shaped host seam. */\nexport const toAsync = (transport: Interface): AsyncInterface => ({\n cleanup: {\n apply: (input) => Effect.runPromise(transport.cleanup.apply(input)),\n plan: (input) => Effect.runPromise(transport.cleanup.plan(input)),\n },\n connection: {\n attach: (input) => Effect.runPromise(transport.connection.attach(input)),\n connect: (input) => Effect.runPromise(transport.connection.connect(input)),\n inspect: (input) => Effect.runPromise(transport.connection.inspect(input)),\n detach: (input) => Effect.runPromise(transport.connection.detach(input)),\n },\n provisioning: {\n apply: (input) => Effect.runPromise(transport.provisioning.apply(input)),\n plan: (input) => Effect.runPromise(transport.provisioning.plan(input)),\n },\n verification: {\n observe: (input) => Effect.runPromise(transport.verification.observe(input)),\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 \"./auth/connection-api.ts\";\nexport * as ManagedDnsConnections from \"./auth/lifecycle-api.ts\";\nexport * as Diagnostic from \"./auth/diagnostic.ts\";\nexport * as ProviderAuth from \"./auth/manifest.ts\";\nexport * as ProviderContext from \"./auth/provider-context.ts\";\nexport * as Secret from \"./auth/secret.ts\";\nexport * as ProviderDiscovery from \"./discovery/selection.ts\";\nexport * as ZoneDiscovery from \"./discovery/zone-discovery.ts\";\nexport * as Zones from \"./discovery/zones.ts\";\nexport * as DnsRecord from \"./domain/dns-record.ts\";\nexport * as DomainName from \"./domain/domain-name.ts\";\nexport * as InvalidInput from \"./invalid-input.ts\";\nexport * as DnsProvider from \"./provider/provider.ts\";\nexport * as ProviderSession from \"./provider/session.ts\";\nexport * as ConnectionAuthorization from \"./plan/connection-authorization.ts\";\nexport * as Digest from \"./plan/canonical-json.ts\";\nexport * as Deletion from \"./plan/deletion.ts\";\nexport * as Provisioning from \"./plan/plan.ts\";\nexport * as DnsPlan from \"./plan/types.ts\";\nexport * as Cloudflare from \"./providers/cloudflare/index.ts\";\nexport * as Vercel from \"./providers/vercel/index.ts\";\nexport * as Transport from \"./transport.ts\";\nexport * as CloudflareDnsOverHttps from \"./verification/cloudflare-doh.ts\";\nexport * as DnsData from \"./verification/dns-data.ts\";\nexport * as DnsOverHttps from \"./verification/doh.ts\";\nexport * as GoogleDnsOverHttps from \"./verification/google-doh.ts\";\nexport * as DnsResolverPool from \"./verification/resolver-pool.ts\";\nexport * as DnsResolver from \"./verification/resolver.ts\";\nexport * as Verification from \"./verification/verify.ts\";\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.mjs","names":["packageJson.version"],"sources":["../src/index.ts"],"sourcesContent":["/**\n * domainkit — the Effect-native root. One module per concept: services expose `Service` (the tag)\n * and `Interface` (its shape), value modules expose `Model` (the schema).\n *\n * Lifecycle services: Connect, Provision, Cleanup, Verify.\n * Host seams: Storage, Custody, Principal.\n * Providers: Provider, Providers, Cloudflare, Vercel.\n * Values: DomainName, DnsRecord, Plan, Approval, Receipt.\n * Everything else: Reason, Resolver, DomainKit (the composed layer and `DomainKit.Error`).\n *\n * Subpath: domainkit/testing.\n */\nimport 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 Approval from \"./Approval.ts\";\nexport * as Cleanup from \"./Cleanup.ts\";\nexport * as Cloudflare from \"./Cloudflare.ts\";\nexport * as Connect from \"./Connect.ts\";\nexport * as Custody from \"./Custody.ts\";\nexport * as DnsRecord from \"./DnsRecord.ts\";\nexport * as DomainKit from \"./DomainKit.ts\";\nexport * as DomainName from \"./DomainName.ts\";\nexport * as Plan from \"./Plan.ts\";\nexport * as Principal from \"./Principal.ts\";\nexport * as Provider from \"./Provider.ts\";\nexport * as Providers from \"./Providers.ts\";\nexport * as Provision from \"./Provision.ts\";\nexport * as Reason from \"./Reason.ts\";\nexport * as Receipt from \"./Receipt.ts\";\nexport * as Resolver from \"./Resolver.ts\";\nexport * as Storage from \"./Storage.ts\";\nexport * as Vercel from \"./Vercel.ts\";\nexport * as Verify from \"./Verify.ts\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAeA,MAAa,UAAUA"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { CryptoFailed } from "../Reason.mjs";
|
|
2
|
+
import { DomainKitError } from "./error.mjs";
|
|
3
|
+
import { Effect, Redacted } from "effect";
|
|
4
|
+
//#region src/internal/aes.ts
|
|
5
|
+
const version = "v1";
|
|
6
|
+
const ivBytes = 12;
|
|
7
|
+
const cryptoFailed = (operation) => () => new DomainKitError({ reason: new CryptoFailed({ operation }) });
|
|
8
|
+
/** Accepts a 32-byte key as base64, base64url, or hex. */
|
|
9
|
+
const decodeKey = (encoded) => {
|
|
10
|
+
const trimmed = encoded.trim();
|
|
11
|
+
if (/^[0-9a-fA-F]{64}$/.test(trimmed)) return Uint8Array.from(trimmed.match(/../g) ?? [], (byte) => Number.parseInt(byte, 16));
|
|
12
|
+
try {
|
|
13
|
+
const bytes = fromBase64(trimmed);
|
|
14
|
+
return bytes.length === 32 ? bytes : null;
|
|
15
|
+
} catch {
|
|
16
|
+
return null;
|
|
17
|
+
}
|
|
18
|
+
};
|
|
19
|
+
const importKey = (raw) => Effect.tryPromise({
|
|
20
|
+
try: () => crypto.subtle.importKey("raw", raw, { name: "AES-GCM" }, false, ["encrypt", "decrypt"]),
|
|
21
|
+
catch: cryptoFailed("seal")
|
|
22
|
+
});
|
|
23
|
+
const seal = (key, plaintext) => Effect.tryPromise({
|
|
24
|
+
try: async () => {
|
|
25
|
+
const iv = crypto.getRandomValues(new Uint8Array(ivBytes));
|
|
26
|
+
const ciphertext = new Uint8Array(await crypto.subtle.encrypt({
|
|
27
|
+
name: "AES-GCM",
|
|
28
|
+
iv
|
|
29
|
+
}, key, new TextEncoder().encode(Redacted.value(plaintext))));
|
|
30
|
+
return `${version}.${toBase64Url(iv)}.${toBase64Url(ciphertext)}`;
|
|
31
|
+
},
|
|
32
|
+
catch: cryptoFailed("seal")
|
|
33
|
+
});
|
|
34
|
+
const open = (key, envelope) => Effect.tryPromise({
|
|
35
|
+
try: async () => {
|
|
36
|
+
const [tag, iv, ciphertext] = envelope.split(".");
|
|
37
|
+
if (tag !== version || iv === void 0 || ciphertext === void 0) throw new Error("unsupported envelope");
|
|
38
|
+
const plaintext = await crypto.subtle.decrypt({
|
|
39
|
+
name: "AES-GCM",
|
|
40
|
+
iv: fromBase64(iv)
|
|
41
|
+
}, key, fromBase64(ciphertext));
|
|
42
|
+
return Redacted.make(new TextDecoder().decode(plaintext));
|
|
43
|
+
},
|
|
44
|
+
catch: cryptoFailed("open")
|
|
45
|
+
});
|
|
46
|
+
const generateKey = () => toBase64Url(crypto.getRandomValues(/* @__PURE__ */ new Uint8Array(32)));
|
|
47
|
+
function toBase64Url(bytes) {
|
|
48
|
+
let binary = "";
|
|
49
|
+
for (const byte of bytes) binary += String.fromCharCode(byte);
|
|
50
|
+
return btoa(binary).replaceAll("+", "-").replaceAll("/", "_").replace(/=+$/, "");
|
|
51
|
+
}
|
|
52
|
+
function fromBase64(value) {
|
|
53
|
+
const normalized = value.replaceAll("-", "+").replaceAll("_", "/");
|
|
54
|
+
const padded = normalized + "=".repeat((4 - normalized.length % 4) % 4);
|
|
55
|
+
const binary = atob(padded);
|
|
56
|
+
return Uint8Array.from(binary, (character) => character.charCodeAt(0));
|
|
57
|
+
}
|
|
58
|
+
//#endregion
|
|
59
|
+
export { decodeKey, generateKey, importKey, open, seal };
|
|
60
|
+
|
|
61
|
+
//# sourceMappingURL=aes.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"aes.mjs","names":["Errors.DomainKitError","Reason.CryptoFailed"],"sources":["../../src/internal/aes.ts"],"sourcesContent":["import { Effect, Redacted } from \"effect\";\n\nimport * as Errors from \"./error.ts\";\nimport * as Reason from \"../Reason.ts\";\n\nconst version = \"v1\";\nconst ivBytes = 12;\n\nconst cryptoFailed = (operation: \"seal\" | \"open\") => () =>\n new Errors.DomainKitError({\n reason: new Reason.CryptoFailed({ operation }),\n });\n\n/** Accepts a 32-byte key as base64, base64url, or hex. */\nexport const decodeKey = (encoded: string): Uint8Array<ArrayBuffer> | null => {\n const trimmed = encoded.trim();\n if (/^[0-9a-fA-F]{64}$/.test(trimmed)) {\n return Uint8Array.from(trimmed.match(/../g) ?? [], (byte) => Number.parseInt(byte, 16));\n }\n try {\n const bytes = fromBase64(trimmed);\n return bytes.length === 32 ? bytes : null;\n } catch {\n return null;\n }\n};\n\nexport const importKey = (\n raw: Uint8Array<ArrayBuffer>,\n): Effect.Effect<CryptoKey, Errors.DomainKitError> =>\n Effect.tryPromise({\n try: () =>\n crypto.subtle.importKey(\"raw\", raw, { name: \"AES-GCM\" }, false, [\"encrypt\", \"decrypt\"]),\n catch: cryptoFailed(\"seal\"),\n });\n\nexport const seal = (\n key: CryptoKey,\n plaintext: Redacted.Redacted<string>,\n): Effect.Effect<string, Errors.DomainKitError> =>\n Effect.tryPromise({\n try: async () => {\n const iv = crypto.getRandomValues(new Uint8Array(ivBytes));\n const ciphertext = new Uint8Array(\n await crypto.subtle.encrypt(\n { name: \"AES-GCM\", iv },\n key,\n new TextEncoder().encode(Redacted.value(plaintext)),\n ),\n );\n return `${version}.${toBase64Url(iv)}.${toBase64Url(ciphertext)}`;\n },\n catch: cryptoFailed(\"seal\"),\n });\n\nexport const open = (\n key: CryptoKey,\n envelope: string,\n): Effect.Effect<Redacted.Redacted<string>, Errors.DomainKitError> =>\n Effect.tryPromise({\n try: async () => {\n const [tag, iv, ciphertext] = envelope.split(\".\");\n if (tag !== version || iv === undefined || ciphertext === undefined) {\n throw new Error(\"unsupported envelope\");\n }\n const plaintext = await crypto.subtle.decrypt(\n { name: \"AES-GCM\", iv: fromBase64(iv) },\n key,\n fromBase64(ciphertext),\n );\n return Redacted.make(new TextDecoder().decode(plaintext));\n },\n catch: cryptoFailed(\"open\"),\n });\n\nexport const generateKey = (): string => toBase64Url(crypto.getRandomValues(new Uint8Array(32)));\n\nfunction toBase64Url(bytes: Uint8Array<ArrayBuffer>): string {\n let binary = \"\";\n for (const byte of bytes) binary += String.fromCharCode(byte);\n return btoa(binary).replaceAll(\"+\", \"-\").replaceAll(\"/\", \"_\").replace(/=+$/, \"\");\n}\n\nfunction fromBase64(value: string): Uint8Array<ArrayBuffer> {\n const normalized = value.replaceAll(\"-\", \"+\").replaceAll(\"_\", \"/\");\n const padded = normalized + \"=\".repeat((4 - (normalized.length % 4)) % 4);\n const binary = atob(padded);\n return Uint8Array.from(binary, (character) => character.charCodeAt(0));\n}\n"],"mappings":";;;;AAKA,MAAM,UAAU;AAChB,MAAM,UAAU;AAEhB,MAAM,gBAAgB,oBACpB,IAAIA,eAAsB,EACxB,QAAQ,IAAIC,aAAoB,EAAE,UAAU,CAAC,EAC/C,CAAC;;AAGH,MAAa,aAAa,YAAoD;CAC5E,MAAM,UAAU,QAAQ,KAAK;CAC7B,IAAI,oBAAoB,KAAK,OAAO,GAClC,OAAO,WAAW,KAAK,QAAQ,MAAM,KAAK,KAAK,CAAC,IAAI,SAAS,OAAO,SAAS,MAAM,EAAE,CAAC;CAExF,IAAI;EACF,MAAM,QAAQ,WAAW,OAAO;EAChC,OAAO,MAAM,WAAW,KAAK,QAAQ;CACvC,QAAQ;EACN,OAAO;CACT;AACF;AAEA,MAAa,aACX,QAEA,OAAO,WAAW;CAChB,WACE,OAAO,OAAO,UAAU,OAAO,KAAK,EAAE,MAAM,UAAU,GAAG,OAAO,CAAC,WAAW,SAAS,CAAC;CACxF,OAAO,aAAa,MAAM;AAC5B,CAAC;AAEH,MAAa,QACX,KACA,cAEA,OAAO,WAAW;CAChB,KAAK,YAAY;EACf,MAAM,KAAK,OAAO,gBAAgB,IAAI,WAAW,OAAO,CAAC;EACzD,MAAM,aAAa,IAAI,WACrB,MAAM,OAAO,OAAO,QAClB;GAAE,MAAM;GAAW;EAAG,GACtB,KACA,IAAI,YAAY,CAAC,CAAC,OAAO,SAAS,MAAM,SAAS,CAAC,CACpD,CACF;EACA,OAAO,GAAG,QAAQ,GAAG,YAAY,EAAE,EAAE,GAAG,YAAY,UAAU;CAChE;CACA,OAAO,aAAa,MAAM;AAC5B,CAAC;AAEH,MAAa,QACX,KACA,aAEA,OAAO,WAAW;CAChB,KAAK,YAAY;EACf,MAAM,CAAC,KAAK,IAAI,cAAc,SAAS,MAAM,GAAG;EAChD,IAAI,QAAQ,WAAW,OAAO,KAAA,KAAa,eAAe,KAAA,GACxD,MAAM,IAAI,MAAM,sBAAsB;EAExC,MAAM,YAAY,MAAM,OAAO,OAAO,QACpC;GAAE,MAAM;GAAW,IAAI,WAAW,EAAE;EAAE,GACtC,KACA,WAAW,UAAU,CACvB;EACA,OAAO,SAAS,KAAK,IAAI,YAAY,CAAC,CAAC,OAAO,SAAS,CAAC;CAC1D;CACA,OAAO,aAAa,MAAM;AAC5B,CAAC;AAEH,MAAa,oBAA4B,YAAY,OAAO,gCAAgB,IAAI,WAAW,EAAE,CAAC,CAAC;AAE/F,SAAS,YAAY,OAAwC;CAC3D,IAAI,SAAS;CACb,KAAK,MAAM,QAAQ,OAAO,UAAU,OAAO,aAAa,IAAI;CAC5D,OAAO,KAAK,MAAM,CAAC,CAAC,WAAW,KAAK,GAAG,CAAC,CAAC,WAAW,KAAK,GAAG,CAAC,CAAC,QAAQ,OAAO,EAAE;AACjF;AAEA,SAAS,WAAW,OAAwC;CAC1D,MAAM,aAAa,MAAM,WAAW,KAAK,GAAG,CAAC,CAAC,WAAW,KAAK,GAAG;CACjE,MAAM,SAAS,aAAa,IAAI,QAAQ,IAAK,WAAW,SAAS,KAAM,CAAC;CACxE,MAAM,SAAS,KAAK,MAAM;CAC1B,OAAO,WAAW,KAAK,SAAS,cAAc,UAAU,WAAW,CAAC,CAAC;AACvE"}
|