@hasna/domains 0.0.24 → 0.0.26

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.
@@ -1 +1 @@
1
- {"version":3,"file":"brandsight.d.ts","sourceRoot":"","sources":["../../src/lib/brandsight.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"brandsight.d.ts","sourceRoot":"","sources":["../../src/lib/brandsight.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,46 @@
1
+ // src/lib/capability.ts
2
+ var PROVIDER_CAPABILITIES = {
3
+ route53: { canBuy: true, canDns: true, gated: false, notes: "Full self-serve buy + hosted zones via AWS API; primary buy path." },
4
+ cloudflare: { canBuy: false, canDns: true, gated: false, notes: "DNS/zone management only; not a registrar." },
5
+ namecheap: { canBuy: true, canDns: true, gated: false, notes: "Buy + DNS via API; requires API access + whitelisted IP." },
6
+ godaddy: { canBuy: false, canDns: true, gated: true, notes: "Availability remains threshold-gated; this CLI supports sync/renew/DNS records where account access qualifies, but not direct automated purchase." },
7
+ brandsight: { canBuy: true, canDns: true, gated: true, notes: "GoDaddy Corporate Domains (enterprise/contract-only); this CLI supports portfolio, registration, renewal, nameserver, and DNS operations through the official v2 API when the account contract permits it." },
8
+ sedo: { canBuy: false, canDns: false, gated: true, notes: "Marketplace API only: search/portfolio/listings and recorded purchases; no registrar DNS or direct registration API in this CLI." }
9
+ };
10
+ var UNKNOWN = { canBuy: false, canDns: false, gated: true, notes: "Unknown provider." };
11
+ function getCapability(name) {
12
+ return PROVIDER_CAPABILITIES[name.toLowerCase()] ?? UNKNOWN;
13
+ }
14
+ function canBuy(name) {
15
+ const c = getCapability(name);
16
+ return c.canBuy && !c.gated;
17
+ }
18
+ function selectBuyRegistrar(preference) {
19
+ if (preference) {
20
+ const c = getCapability(preference);
21
+ if (!c.canBuy)
22
+ throw new Error(`Registrar '${preference}' cannot buy domains`);
23
+ if (c.gated)
24
+ throw new Error(`Registrar '${preference}' is gated/enterprise-only and not available for automated purchase: ${c.notes}`);
25
+ return preference.toLowerCase();
26
+ }
27
+ return "route53";
28
+ }
29
+ function selectDnsProvider(preference) {
30
+ if (preference) {
31
+ const c = getCapability(preference);
32
+ if (!c.canDns)
33
+ throw new Error(`Provider '${preference}' cannot manage DNS`);
34
+ if (c.gated)
35
+ throw new Error(`Provider '${preference}' DNS is gated and may require account approval: ${c.notes}`);
36
+ return preference.toLowerCase();
37
+ }
38
+ return "cloudflare";
39
+ }
40
+ export {
41
+ selectDnsProvider,
42
+ selectBuyRegistrar,
43
+ getCapability,
44
+ canBuy,
45
+ PROVIDER_CAPABILITIES
46
+ };
@@ -0,0 +1,139 @@
1
+ // src/lib/env-aliases.ts
2
+ function firstEnv(env, names) {
3
+ for (const key of names) {
4
+ const value = env[key];
5
+ if (value)
6
+ return { key, value };
7
+ }
8
+ return;
9
+ }
10
+ function hasEveryEnv(env, groups) {
11
+ return groups.every((names) => !!firstEnv(env, names));
12
+ }
13
+ function flattenEnvNames(groups) {
14
+ return Array.from(new Set(groups.flatMap((names) => [...names])));
15
+ }
16
+ var NAMECHEAP_ENV = {
17
+ apiKey: ["NAMECHEAP_API_KEY"],
18
+ username: ["NAMECHEAP_USERNAME"],
19
+ clientIp: ["NAMECHEAP_CLIENT_IP"]
20
+ };
21
+ var GODADDY_ENV = {
22
+ apiKey: ["GODADDY_API_KEY"],
23
+ apiSecret: ["GODADDY_API_SECRET"]
24
+ };
25
+ var BRANDSIGHT_ENV = {
26
+ apiKey: ["BRANDSIGHT_API_KEY"],
27
+ apiSecret: ["BRANDSIGHT_API_SECRET"],
28
+ customerId: ["BRANDSIGHT_CUSTOMER_ID"],
29
+ shopperId: ["BRANDSIGHT_SHOPPER_ID"],
30
+ accountId: ["BRANDSIGHT_ACCOUNT_ID"]
31
+ };
32
+ var SEDO_ENV = {
33
+ partnerId: ["SEDO_PARTNER_ID"],
34
+ signKey: ["SEDO_API_KEY", "SEDO_SIGN_KEY"],
35
+ username: ["SEDO_USERNAME", "SEDO_EMAIL"],
36
+ password: ["SEDO_PASSWORD"]
37
+ };
38
+ var CLOUDFLARE_ENV = {
39
+ apiToken: ["CLOUDFLARE_API_TOKEN"],
40
+ apiKey: ["CLOUDFLARE_API_KEY"],
41
+ email: ["CLOUDFLARE_EMAIL"],
42
+ accountId: ["CLOUDFLARE_ACCOUNT_ID"]
43
+ };
44
+ var ROUTE53_ENV = {
45
+ accessKeyId: ["ROUTE53_ACCESS_KEY_ID", "AWS_ACCESS_KEY_ID"],
46
+ secretAccessKey: ["ROUTE53_SECRET_ACCESS_KEY", "AWS_SECRET_ACCESS_KEY"],
47
+ sessionToken: ["ROUTE53_SESSION_TOKEN", "AWS_SESSION_TOKEN"],
48
+ profile: ["ROUTE53_AWS_PROFILE", "AWS_PROFILE"],
49
+ region: ["ROUTE53_REGION", "ROUTE53_AWS_REGION", "AWS_REGION"],
50
+ webIdentityTokenFile: ["AWS_WEB_IDENTITY_TOKEN_FILE"],
51
+ roleArn: ["AWS_ROLE_ARN"],
52
+ containerCredentials: [
53
+ "AWS_CONTAINER_CREDENTIALS_RELATIVE_URI",
54
+ "AWS_CONTAINER_CREDENTIALS_FULL_URI"
55
+ ]
56
+ };
57
+ function providerEnvNames(provider) {
58
+ switch (provider.toLowerCase()) {
59
+ case "namecheap":
60
+ return flattenEnvNames([NAMECHEAP_ENV.apiKey, NAMECHEAP_ENV.username, NAMECHEAP_ENV.clientIp]);
61
+ case "godaddy":
62
+ return flattenEnvNames([GODADDY_ENV.apiKey, GODADDY_ENV.apiSecret]);
63
+ case "brandsight":
64
+ return flattenEnvNames([
65
+ BRANDSIGHT_ENV.apiKey,
66
+ BRANDSIGHT_ENV.apiSecret,
67
+ BRANDSIGHT_ENV.customerId,
68
+ BRANDSIGHT_ENV.shopperId,
69
+ BRANDSIGHT_ENV.accountId
70
+ ]);
71
+ case "sedo":
72
+ return flattenEnvNames([SEDO_ENV.partnerId, SEDO_ENV.signKey, SEDO_ENV.username, SEDO_ENV.password]);
73
+ case "cloudflare":
74
+ return flattenEnvNames([CLOUDFLARE_ENV.apiToken, CLOUDFLARE_ENV.apiKey, CLOUDFLARE_ENV.email, CLOUDFLARE_ENV.accountId]);
75
+ case "route53":
76
+ return flattenEnvNames([
77
+ ROUTE53_ENV.profile,
78
+ ROUTE53_ENV.accessKeyId,
79
+ ROUTE53_ENV.secretAccessKey,
80
+ ROUTE53_ENV.sessionToken,
81
+ ROUTE53_ENV.region,
82
+ ROUTE53_ENV.webIdentityTokenFile,
83
+ ROUTE53_ENV.roleArn,
84
+ ROUTE53_ENV.containerCredentials
85
+ ]);
86
+ default:
87
+ return [];
88
+ }
89
+ }
90
+ function hasProviderCredentials(provider, env = process.env) {
91
+ switch (provider.toLowerCase()) {
92
+ case "namecheap":
93
+ return hasEveryEnv(env, [NAMECHEAP_ENV.apiKey, NAMECHEAP_ENV.username, NAMECHEAP_ENV.clientIp]);
94
+ case "godaddy":
95
+ return hasEveryEnv(env, [GODADDY_ENV.apiKey, GODADDY_ENV.apiSecret]);
96
+ case "brandsight":
97
+ return hasEveryEnv(env, [BRANDSIGHT_ENV.apiKey, BRANDSIGHT_ENV.apiSecret, BRANDSIGHT_ENV.customerId]);
98
+ case "sedo":
99
+ return hasEveryEnv(env, [SEDO_ENV.partnerId, SEDO_ENV.signKey, SEDO_ENV.username, SEDO_ENV.password]);
100
+ case "cloudflare": {
101
+ const tokenMode = !!firstEnv(env, CLOUDFLARE_ENV.apiToken);
102
+ const keyMode = hasEveryEnv(env, [CLOUDFLARE_ENV.apiKey, CLOUDFLARE_ENV.email]);
103
+ return tokenMode || keyMode;
104
+ }
105
+ case "route53": {
106
+ const profileMode = !!firstEnv(env, ROUTE53_ENV.profile);
107
+ const keyMode = hasEveryEnv(env, [ROUTE53_ENV.accessKeyId, ROUTE53_ENV.secretAccessKey]);
108
+ const webIdentityMode = hasEveryEnv(env, [ROUTE53_ENV.webIdentityTokenFile, ROUTE53_ENV.roleArn]);
109
+ const containerMode = !!firstEnv(env, ROUTE53_ENV.containerCredentials);
110
+ return profileMode || keyMode || webIdentityMode || containerMode;
111
+ }
112
+ default:
113
+ return false;
114
+ }
115
+ }
116
+
117
+ // src/lib/cloudflare-auth.ts
118
+ function resolveCloudflareConfig(env = process.env) {
119
+ const accountId = firstEnv(env, CLOUDFLARE_ENV.accountId)?.value;
120
+ const apiToken = firstEnv(env, CLOUDFLARE_ENV.apiToken)?.value;
121
+ if (apiToken)
122
+ return { apiToken, accountId };
123
+ const apiKey = firstEnv(env, CLOUDFLARE_ENV.apiKey)?.value;
124
+ const email = firstEnv(env, CLOUDFLARE_ENV.email)?.value;
125
+ if (apiKey && email)
126
+ return { apiKey, email, accountId };
127
+ return accountId ? { accountId } : {};
128
+ }
129
+ function cloudflareAuthHeaders(cfg) {
130
+ if (cfg.apiToken)
131
+ return { Authorization: `Bearer ${cfg.apiToken}` };
132
+ if (cfg.apiKey && cfg.email)
133
+ return { "X-Auth-Key": cfg.apiKey, "X-Auth-Email": cfg.email };
134
+ throw new Error("Cloudflare credentials not configured. Set CLOUDFLARE_API_TOKEN, or CLOUDFLARE_API_KEY + CLOUDFLARE_EMAIL.");
135
+ }
136
+ export {
137
+ resolveCloudflareConfig,
138
+ cloudflareAuthHeaders
139
+ };
@@ -0,0 +1,394 @@
1
+ // src/lib/env-aliases.ts
2
+ function firstEnv(env, names) {
3
+ for (const key of names) {
4
+ const value = env[key];
5
+ if (value)
6
+ return { key, value };
7
+ }
8
+ return;
9
+ }
10
+ function hasEveryEnv(env, groups) {
11
+ return groups.every((names) => !!firstEnv(env, names));
12
+ }
13
+ function flattenEnvNames(groups) {
14
+ return Array.from(new Set(groups.flatMap((names) => [...names])));
15
+ }
16
+ var NAMECHEAP_ENV = {
17
+ apiKey: ["NAMECHEAP_API_KEY"],
18
+ username: ["NAMECHEAP_USERNAME"],
19
+ clientIp: ["NAMECHEAP_CLIENT_IP"]
20
+ };
21
+ var GODADDY_ENV = {
22
+ apiKey: ["GODADDY_API_KEY"],
23
+ apiSecret: ["GODADDY_API_SECRET"]
24
+ };
25
+ var BRANDSIGHT_ENV = {
26
+ apiKey: ["BRANDSIGHT_API_KEY"],
27
+ apiSecret: ["BRANDSIGHT_API_SECRET"],
28
+ customerId: ["BRANDSIGHT_CUSTOMER_ID"],
29
+ shopperId: ["BRANDSIGHT_SHOPPER_ID"],
30
+ accountId: ["BRANDSIGHT_ACCOUNT_ID"]
31
+ };
32
+ var SEDO_ENV = {
33
+ partnerId: ["SEDO_PARTNER_ID"],
34
+ signKey: ["SEDO_API_KEY", "SEDO_SIGN_KEY"],
35
+ username: ["SEDO_USERNAME", "SEDO_EMAIL"],
36
+ password: ["SEDO_PASSWORD"]
37
+ };
38
+ var CLOUDFLARE_ENV = {
39
+ apiToken: ["CLOUDFLARE_API_TOKEN"],
40
+ apiKey: ["CLOUDFLARE_API_KEY"],
41
+ email: ["CLOUDFLARE_EMAIL"],
42
+ accountId: ["CLOUDFLARE_ACCOUNT_ID"]
43
+ };
44
+ var ROUTE53_ENV = {
45
+ accessKeyId: ["ROUTE53_ACCESS_KEY_ID", "AWS_ACCESS_KEY_ID"],
46
+ secretAccessKey: ["ROUTE53_SECRET_ACCESS_KEY", "AWS_SECRET_ACCESS_KEY"],
47
+ sessionToken: ["ROUTE53_SESSION_TOKEN", "AWS_SESSION_TOKEN"],
48
+ profile: ["ROUTE53_AWS_PROFILE", "AWS_PROFILE"],
49
+ region: ["ROUTE53_REGION", "ROUTE53_AWS_REGION", "AWS_REGION"],
50
+ webIdentityTokenFile: ["AWS_WEB_IDENTITY_TOKEN_FILE"],
51
+ roleArn: ["AWS_ROLE_ARN"],
52
+ containerCredentials: [
53
+ "AWS_CONTAINER_CREDENTIALS_RELATIVE_URI",
54
+ "AWS_CONTAINER_CREDENTIALS_FULL_URI"
55
+ ]
56
+ };
57
+ function providerEnvNames(provider) {
58
+ switch (provider.toLowerCase()) {
59
+ case "namecheap":
60
+ return flattenEnvNames([NAMECHEAP_ENV.apiKey, NAMECHEAP_ENV.username, NAMECHEAP_ENV.clientIp]);
61
+ case "godaddy":
62
+ return flattenEnvNames([GODADDY_ENV.apiKey, GODADDY_ENV.apiSecret]);
63
+ case "brandsight":
64
+ return flattenEnvNames([
65
+ BRANDSIGHT_ENV.apiKey,
66
+ BRANDSIGHT_ENV.apiSecret,
67
+ BRANDSIGHT_ENV.customerId,
68
+ BRANDSIGHT_ENV.shopperId,
69
+ BRANDSIGHT_ENV.accountId
70
+ ]);
71
+ case "sedo":
72
+ return flattenEnvNames([SEDO_ENV.partnerId, SEDO_ENV.signKey, SEDO_ENV.username, SEDO_ENV.password]);
73
+ case "cloudflare":
74
+ return flattenEnvNames([CLOUDFLARE_ENV.apiToken, CLOUDFLARE_ENV.apiKey, CLOUDFLARE_ENV.email, CLOUDFLARE_ENV.accountId]);
75
+ case "route53":
76
+ return flattenEnvNames([
77
+ ROUTE53_ENV.profile,
78
+ ROUTE53_ENV.accessKeyId,
79
+ ROUTE53_ENV.secretAccessKey,
80
+ ROUTE53_ENV.sessionToken,
81
+ ROUTE53_ENV.region,
82
+ ROUTE53_ENV.webIdentityTokenFile,
83
+ ROUTE53_ENV.roleArn,
84
+ ROUTE53_ENV.containerCredentials
85
+ ]);
86
+ default:
87
+ return [];
88
+ }
89
+ }
90
+ function hasProviderCredentials(provider, env = process.env) {
91
+ switch (provider.toLowerCase()) {
92
+ case "namecheap":
93
+ return hasEveryEnv(env, [NAMECHEAP_ENV.apiKey, NAMECHEAP_ENV.username, NAMECHEAP_ENV.clientIp]);
94
+ case "godaddy":
95
+ return hasEveryEnv(env, [GODADDY_ENV.apiKey, GODADDY_ENV.apiSecret]);
96
+ case "brandsight":
97
+ return hasEveryEnv(env, [BRANDSIGHT_ENV.apiKey, BRANDSIGHT_ENV.apiSecret, BRANDSIGHT_ENV.customerId]);
98
+ case "sedo":
99
+ return hasEveryEnv(env, [SEDO_ENV.partnerId, SEDO_ENV.signKey, SEDO_ENV.username, SEDO_ENV.password]);
100
+ case "cloudflare": {
101
+ const tokenMode = !!firstEnv(env, CLOUDFLARE_ENV.apiToken);
102
+ const keyMode = hasEveryEnv(env, [CLOUDFLARE_ENV.apiKey, CLOUDFLARE_ENV.email]);
103
+ return tokenMode || keyMode;
104
+ }
105
+ case "route53": {
106
+ const profileMode = !!firstEnv(env, ROUTE53_ENV.profile);
107
+ const keyMode = hasEveryEnv(env, [ROUTE53_ENV.accessKeyId, ROUTE53_ENV.secretAccessKey]);
108
+ const webIdentityMode = hasEveryEnv(env, [ROUTE53_ENV.webIdentityTokenFile, ROUTE53_ENV.roleArn]);
109
+ const containerMode = !!firstEnv(env, ROUTE53_ENV.containerCredentials);
110
+ return profileMode || keyMode || webIdentityMode || containerMode;
111
+ }
112
+ default:
113
+ return false;
114
+ }
115
+ }
116
+
117
+ // src/lib/cloudflare-auth.ts
118
+ function resolveCloudflareConfig(env = process.env) {
119
+ const accountId = firstEnv(env, CLOUDFLARE_ENV.accountId)?.value;
120
+ const apiToken = firstEnv(env, CLOUDFLARE_ENV.apiToken)?.value;
121
+ if (apiToken)
122
+ return { apiToken, accountId };
123
+ const apiKey = firstEnv(env, CLOUDFLARE_ENV.apiKey)?.value;
124
+ const email = firstEnv(env, CLOUDFLARE_ENV.email)?.value;
125
+ if (apiKey && email)
126
+ return { apiKey, email, accountId };
127
+ return accountId ? { accountId } : {};
128
+ }
129
+ function cloudflareAuthHeaders(cfg) {
130
+ if (cfg.apiToken)
131
+ return { Authorization: `Bearer ${cfg.apiToken}` };
132
+ if (cfg.apiKey && cfg.email)
133
+ return { "X-Auth-Key": cfg.apiKey, "X-Auth-Email": cfg.email };
134
+ throw new Error("Cloudflare credentials not configured. Set CLOUDFLARE_API_TOKEN, or CLOUDFLARE_API_KEY + CLOUDFLARE_EMAIL.");
135
+ }
136
+
137
+ // src/lib/cloudflare.ts
138
+ function getConfig() {
139
+ return resolveCloudflareConfig();
140
+ }
141
+ function checkCredentials(cfg) {
142
+ cloudflareAuthHeaders(cfg);
143
+ }
144
+ var CF_BASE = "https://api.cloudflare.com/client/v4";
145
+ async function cfFetch(path, opts = {}) {
146
+ const cfg = opts.config ?? getConfig();
147
+ checkCredentials(cfg);
148
+ const res = await fetch(`${CF_BASE}${path}`, {
149
+ method: opts.method ?? "GET",
150
+ headers: {
151
+ ...cloudflareAuthHeaders(cfg),
152
+ "Content-Type": "application/json"
153
+ },
154
+ body: opts.body ? JSON.stringify(opts.body) : undefined
155
+ });
156
+ const json = await res.json();
157
+ if (!json.success) {
158
+ const msg = json.errors?.[0]?.message ?? `Cloudflare API error (${res.status})`;
159
+ throw new Error(msg);
160
+ }
161
+ return json.result;
162
+ }
163
+ async function listZones(config) {
164
+ const zones = [];
165
+ let page = 1;
166
+ while (true) {
167
+ const result = await cfFetch(`/zones?per_page=50&page=${page}`, { config });
168
+ if (!result || result.length === 0)
169
+ break;
170
+ for (const z of result) {
171
+ zones.push({ id: z.id, name: z.name, status: z.status, nameservers: z.name_servers, original_nameservers: z.original_name_servers });
172
+ }
173
+ if (result.length < 50)
174
+ break;
175
+ page++;
176
+ }
177
+ return zones;
178
+ }
179
+ async function getZone(domain, config) {
180
+ const result = await cfFetch(`/zones?name=${encodeURIComponent(domain)}`, { config });
181
+ if (!result || result.length === 0)
182
+ return null;
183
+ const z = result[0];
184
+ return { id: z.id, name: z.name, status: z.status, nameservers: z.name_servers, original_nameservers: z.original_name_servers };
185
+ }
186
+ async function createZone(domain, config) {
187
+ const cfg = config ?? getConfig();
188
+ if (!cfg.accountId) {
189
+ throw new Error("CLOUDFLARE_ACCOUNT_ID is required to create a zone.");
190
+ }
191
+ const result = await cfFetch("/zones", { method: "POST", body: { name: domain, account: { id: cfg.accountId }, jump_start: false }, config: cfg });
192
+ return { id: result.id, name: result.name, status: result.status, nameservers: result.name_servers };
193
+ }
194
+ async function ensureZone(domain, config, deps) {
195
+ const get = deps?.getZone ?? getZone;
196
+ const create = deps?.createZone ?? createZone;
197
+ const existing = await get(domain, config);
198
+ const zone = existing ?? await create(domain, config);
199
+ if (!zone.nameservers || zone.nameservers.length === 0) {
200
+ throw new Error(`Cloudflare zone for ${domain} has no nameservers yet`);
201
+ }
202
+ return zone;
203
+ }
204
+ async function deleteZone(zoneId, config) {
205
+ await cfFetch(`/zones/${zoneId}`, { method: "DELETE", config });
206
+ }
207
+ async function listRecords(zoneId, config) {
208
+ const records = [];
209
+ let page = 1;
210
+ while (true) {
211
+ const result = await cfFetch(`/zones/${zoneId}/dns_records?per_page=100&page=${page}`, { config });
212
+ if (!result || result.length === 0)
213
+ break;
214
+ for (const r of result) {
215
+ records.push({ id: r.id, type: r.type, name: r.name, content: r.content, ttl: r.ttl, priority: r.priority, proxied: r.proxied });
216
+ }
217
+ if (result.length < 100)
218
+ break;
219
+ page++;
220
+ }
221
+ return records;
222
+ }
223
+ async function listRecordsByNameType(zoneId, type, name, config) {
224
+ const result = await cfFetch(`/zones/${zoneId}/dns_records?type=${encodeURIComponent(type)}&name=${encodeURIComponent(name)}`, { config });
225
+ return (result ?? []).map((r) => ({
226
+ id: r.id,
227
+ type: r.type,
228
+ name: r.name,
229
+ content: r.content,
230
+ ttl: r.ttl,
231
+ priority: r.priority,
232
+ proxied: r.proxied
233
+ }));
234
+ }
235
+ async function upsertRecord(zoneId, record, config) {
236
+ const existing = await listRecordsByNameType(zoneId, record.type, record.name, config);
237
+ const body = {
238
+ type: record.type,
239
+ name: record.name,
240
+ content: record.content,
241
+ ttl: record.ttl ?? 1,
242
+ priority: record.priority,
243
+ proxied: record.proxied ?? false
244
+ };
245
+ const sameRecord = existing.find((r) => r.content === record.content && (r.priority ?? undefined) === (record.priority ?? undefined) && (r.proxied ?? false) === (record.proxied ?? false));
246
+ if (sameRecord?.id) {
247
+ await cfFetch(`/zones/${zoneId}/dns_records/${sameRecord.id}`, { method: "PUT", body, config });
248
+ } else {
249
+ await cfFetch(`/zones/${zoneId}/dns_records`, { method: "POST", body, config });
250
+ }
251
+ }
252
+ async function replaceRecordsByNameType(zoneId, records, config) {
253
+ if (records.length === 0)
254
+ return;
255
+ const { type, name } = records[0];
256
+ const existing = await listRecordsByNameType(zoneId, type, name, config);
257
+ for (const record of existing) {
258
+ if (record.id)
259
+ await deleteRecord(zoneId, record.id, config);
260
+ }
261
+ for (const record of records) {
262
+ await cfFetch(`/zones/${zoneId}/dns_records`, {
263
+ method: "POST",
264
+ body: {
265
+ type: record.type,
266
+ name: record.name,
267
+ content: record.content,
268
+ ttl: record.ttl ?? 1,
269
+ priority: record.priority,
270
+ proxied: record.proxied ?? false
271
+ },
272
+ config
273
+ });
274
+ }
275
+ }
276
+ async function deleteRecord(zoneId, recordId, config) {
277
+ await cfFetch(`/zones/${zoneId}/dns_records/${recordId}`, { method: "DELETE", config });
278
+ }
279
+ async function deleteRecordByNameType(zoneId, name, type, config) {
280
+ const existing = await cfFetch(`/zones/${zoneId}/dns_records?type=${type}&name=${encodeURIComponent(name)}`, { config });
281
+ for (const r of existing ?? []) {
282
+ await deleteRecord(zoneId, r.id, config);
283
+ }
284
+ }
285
+ function zoneToDomainInfo(zone) {
286
+ return {
287
+ domain: zone.name,
288
+ registrar: "Cloudflare DNS",
289
+ created: "",
290
+ expires: "",
291
+ nameservers: zone.nameservers,
292
+ status: zone.status === "active" ? "active" : "discovered",
293
+ auto_renew: false
294
+ };
295
+ }
296
+ function withCloudflareMetadata(existing, zone) {
297
+ return {
298
+ ...existing,
299
+ cloudflare: {
300
+ zone_id: zone.id,
301
+ zone_status: zone.status,
302
+ source: "cloudflare:zones",
303
+ synced_at: new Date().toISOString()
304
+ }
305
+ };
306
+ }
307
+ function createCloudflareProvider(config) {
308
+ const cfg = config ?? getConfig();
309
+ return {
310
+ name: "cloudflare",
311
+ async listDomains() {
312
+ const zones = await listZones(cfg);
313
+ return zones.map(zoneToDomainInfo);
314
+ },
315
+ async syncToLocalDb(dbFns) {
316
+ const zones = await listZones(cfg);
317
+ let synced = 0;
318
+ let created = 0;
319
+ let updated = 0;
320
+ const errors = [];
321
+ for (const zone of zones) {
322
+ try {
323
+ const info = zoneToDomainInfo(zone);
324
+ const existing = dbFns.getDomainByName(zone.name);
325
+ if (existing) {
326
+ dbFns.updateDomain(existing.id, {
327
+ ...existing.registrar === "Cloudflare DNS" ? { registrar: null } : {},
328
+ status: existing.status === "discovered" && info.status === "active" ? "active" : existing.status,
329
+ nameservers: zone.nameservers,
330
+ metadata: withCloudflareMetadata(existing.metadata, zone)
331
+ });
332
+ updated++;
333
+ } else {
334
+ dbFns.createDomain({
335
+ name: zone.name,
336
+ status: info.status === "active" ? "active" : "discovered",
337
+ auto_renew: false,
338
+ nameservers: zone.nameservers,
339
+ notes: "Discovered from Cloudflare zones; registrar ownership was not inferred.",
340
+ metadata: withCloudflareMetadata({}, zone)
341
+ });
342
+ created++;
343
+ }
344
+ synced++;
345
+ } catch (err) {
346
+ errors.push(`${zone.name}: ${err instanceof Error ? err.message : String(err)}`);
347
+ }
348
+ }
349
+ return { synced, created, updated, errors };
350
+ },
351
+ async getDnsRecords(domain) {
352
+ const zone = await getZone(domain, cfg);
353
+ if (!zone)
354
+ return [];
355
+ const records = await listRecords(zone.id, cfg);
356
+ return records.map((r) => ({
357
+ type: r.type,
358
+ name: r.name,
359
+ value: r.content,
360
+ ttl: r.ttl === 1 ? 0 : r.ttl,
361
+ priority: r.priority
362
+ }));
363
+ },
364
+ async setDnsRecords(domain, records) {
365
+ const zone = await getZone(domain, cfg);
366
+ if (!zone)
367
+ throw new Error(`No Cloudflare zone found for ${domain}`);
368
+ const grouped = new Map;
369
+ for (const r of records) {
370
+ const key = `${r.type}|${r.name}`;
371
+ const existing = grouped.get(key) ?? [];
372
+ existing.push({ type: r.type, name: r.name, content: r.value, ttl: r.ttl || 1, priority: r.priority });
373
+ grouped.set(key, existing);
374
+ }
375
+ for (const group of grouped.values()) {
376
+ await replaceRecordsByNameType(zone.id, group, cfg);
377
+ }
378
+ return true;
379
+ }
380
+ };
381
+ }
382
+ export {
383
+ upsertRecord,
384
+ listZones,
385
+ listRecords,
386
+ getZone,
387
+ getConfig,
388
+ ensureZone,
389
+ deleteZone,
390
+ deleteRecordByNameType,
391
+ deleteRecord,
392
+ createZone,
393
+ createCloudflareProvider
394
+ };
@@ -1 +1 @@
1
- {"version":3,"file":"creds-check.d.ts","sourceRoot":"","sources":["../../src/lib/creds-check.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAUD,wBAAgB,4BAA4B,CAC1C,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAqD,GAC1F,UAAU,EAAE,CA+Dd"}
1
+ {"version":3,"file":"creds-check.d.ts","sourceRoot":"","sources":["../../src/lib/creds-check.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAQH,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAUD,wBAAgB,4BAA4B,CAC1C,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAqD,GAC1F,UAAU,EAAE,CA+Ed"}
@@ -0,0 +1,12 @@
1
+ // src/lib/delegate.ts
2
+ async function delegateDomainToCloudflare(domain, deps) {
3
+ const zone = await deps.createCloudflareZone(domain);
4
+ if (!zone.nameservers || zone.nameservers.length === 0) {
5
+ throw new Error(`Cloudflare zone for ${domain} returned no nameservers; cannot delegate`);
6
+ }
7
+ const { operationId } = await deps.updateNameservers(domain, zone.nameservers);
8
+ return { zoneId: zone.id, nameservers: zone.nameservers, operationId };
9
+ }
10
+ export {
11
+ delegateDomainToCloudflare
12
+ };
@@ -0,0 +1,29 @@
1
+ import type { ProviderDnsRecord } from "./registrar.js";
2
+ export interface DesiredDnsState {
3
+ domain?: string;
4
+ records: ProviderDnsRecord[];
5
+ }
6
+ export type DnsPlanOperationType = "create" | "delete" | "update" | "unchanged";
7
+ export interface DnsPlanOperation {
8
+ op: DnsPlanOperationType;
9
+ record: ProviderDnsRecord;
10
+ current?: ProviderDnsRecord;
11
+ }
12
+ export interface DnsPlan {
13
+ domain: string;
14
+ creates: number;
15
+ updates: number;
16
+ deletes: number;
17
+ unchanged: number;
18
+ operations: DnsPlanOperation[];
19
+ }
20
+ export type DnsApplyBlockReason = "confirmation-required" | "delete-confirmation-required" | "delete-apply-unsupported";
21
+ export declare function normalizeDnsRecord(record: ProviderDnsRecord, domain: string): ProviderDnsRecord;
22
+ export declare function parseDesiredDnsState(input: string, domainHint?: string): DesiredDnsState;
23
+ export declare function createDnsPlan(domain: string, current: ProviderDnsRecord[], desired: ProviderDnsRecord[]): DnsPlan;
24
+ export declare function planHasChanges(plan: DnsPlan): boolean;
25
+ export declare function getDnsApplyBlockReason(plan: DnsPlan, opts: {
26
+ yes?: boolean;
27
+ allowDelete?: boolean;
28
+ }): DnsApplyBlockReason | undefined;
29
+ //# sourceMappingURL=dns-plan.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dns-plan.d.ts","sourceRoot":"","sources":["../../src/lib/dns-plan.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAExD,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,iBAAiB,EAAE,CAAC;CAC9B;AAED,MAAM,MAAM,oBAAoB,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;AAEhF,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,oBAAoB,CAAC;IACzB,MAAM,EAAE,iBAAiB,CAAC;IAC1B,OAAO,CAAC,EAAE,iBAAiB,CAAC;CAC7B;AAED,MAAM,WAAW,OAAO;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,gBAAgB,EAAE,CAAC;CAChC;AAED,MAAM,MAAM,mBAAmB,GAAG,uBAAuB,GAAG,8BAA8B,GAAG,0BAA0B,CAAC;AAMxH,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,GAAG,iBAAiB,CAiB/F;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,eAAe,CA6BxF;AAUD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,iBAAiB,EAAE,EAAE,OAAO,EAAE,iBAAiB,EAAE,GAAG,OAAO,CAgCjH;AAED,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAErD;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAC;IAAC,WAAW,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,mBAAmB,GAAG,SAAS,CAMrI"}
@@ -34,6 +34,16 @@ export declare const CLOUDFLARE_ENV: {
34
34
  readonly email: readonly ["CLOUDFLARE_EMAIL"];
35
35
  readonly accountId: readonly ["CLOUDFLARE_ACCOUNT_ID"];
36
36
  };
37
+ export declare const ROUTE53_ENV: {
38
+ readonly accessKeyId: readonly ["ROUTE53_ACCESS_KEY_ID", "AWS_ACCESS_KEY_ID"];
39
+ readonly secretAccessKey: readonly ["ROUTE53_SECRET_ACCESS_KEY", "AWS_SECRET_ACCESS_KEY"];
40
+ readonly sessionToken: readonly ["ROUTE53_SESSION_TOKEN", "AWS_SESSION_TOKEN"];
41
+ readonly profile: readonly ["ROUTE53_AWS_PROFILE", "AWS_PROFILE"];
42
+ readonly region: readonly ["ROUTE53_REGION", "ROUTE53_AWS_REGION", "AWS_REGION"];
43
+ readonly webIdentityTokenFile: readonly ["AWS_WEB_IDENTITY_TOKEN_FILE"];
44
+ readonly roleArn: readonly ["AWS_ROLE_ARN"];
45
+ readonly containerCredentials: readonly ["AWS_CONTAINER_CREDENTIALS_RELATIVE_URI", "AWS_CONTAINER_CREDENTIALS_FULL_URI"];
46
+ };
37
47
  export declare function providerEnvNames(provider: string): string[];
38
48
  export declare function hasProviderCredentials(provider: string, env?: Env): boolean;
39
49
  //# sourceMappingURL=env-aliases.d.ts.map