@hasna/domains 0.0.36 → 0.0.38
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/dist/cli/commands/alerts.d.ts.map +1 -1
- package/dist/cli/commands/brandsight.d.ts.map +1 -1
- package/dist/cli/commands/config.d.ts.map +1 -1
- package/dist/cli/commands/db.d.ts.map +1 -1
- package/dist/cli/commands/dns.d.ts +4 -1
- package/dist/cli/commands/dns.d.ts.map +1 -1
- package/dist/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/domain.d.ts.map +1 -1
- package/dist/cli/commands/history.d.ts.map +1 -1
- package/dist/cli/commands/interactive.d.ts +7 -1
- package/dist/cli/commands/interactive.d.ts.map +1 -1
- package/dist/cli/commands/mcp-install.d.ts.map +1 -1
- package/dist/cli/commands/monitor.d.ts.map +1 -1
- package/dist/cli/commands/outreach.d.ts.map +1 -1
- package/dist/cli/commands/owner.d.ts.map +1 -1
- package/dist/cli/commands/provider.d.ts.map +1 -1
- package/dist/cli/commands/providers.d.ts.map +1 -1
- package/dist/cli/commands/provision.d.ts.map +1 -1
- package/dist/cli/commands/reconcile-expiry.d.ts.map +1 -1
- package/dist/cli/commands/research.d.ts.map +1 -1
- package/dist/cli/commands/route53.d.ts.map +1 -1
- package/dist/cli/commands/sedo.d.ts.map +1 -1
- package/dist/cli/commands/serve.d.ts.map +1 -1
- package/dist/cli/commands/ssl.d.ts.map +1 -1
- package/dist/cli/commands/wallet.d.ts.map +1 -1
- package/dist/cli/commands/zone.d.ts.map +1 -1
- package/dist/cli/index.js +906 -749
- package/dist/db/dns-tools.d.ts.map +1 -1
- package/dist/index.js +74 -16
- package/dist/lib/cloudflare.d.ts.map +1 -1
- package/dist/lib/cloudflare.js +57 -7
- package/dist/lib/dns-plan.d.ts +1 -0
- package/dist/lib/dns-plan.d.ts.map +1 -1
- package/dist/lib/registrar.d.ts +4 -0
- package/dist/lib/registrar.d.ts.map +1 -1
- package/dist/lib/registrar.js +58 -7
- package/dist/lib/route53.d.ts.map +1 -1
- package/dist/lib/route53.js +1 -0
- package/dist/lib/stdout.d.ts +54 -0
- package/dist/lib/stdout.d.ts.map +1 -0
- package/dist/mcp/index.js +74 -16
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dns-tools.d.ts","sourceRoot":"","sources":["../../src/db/dns-tools.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAGlD,qBAAa,sBAAuB,SAAQ,KAAK;gBACnC,OAAO,EAAE,MAAM;CAI5B;AA0DD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEzD;AAuBD,MAAM,WAAW,UAAU;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IACjC,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;IACxB,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAA;KAAE,EAAE,CAAC;CACjE;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;IACxB,WAAW,CAAC,EAAE,cAAc,EAAE,CAAC;IAC/B,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC;IACrB,KAAK,CAAC,EAAE;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACvD,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB;
|
|
1
|
+
{"version":3,"file":"dns-tools.d.ts","sourceRoot":"","sources":["../../src/db/dns-tools.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -12578,7 +12578,7 @@ var init_bowser = __esm(() => {
|
|
|
12578
12578
|
|
|
12579
12579
|
// node_modules/@aws-sdk/core/dist-cjs/submodules/client/index.js
|
|
12580
12580
|
var require_client2 = __commonJS((exports) => {
|
|
12581
|
-
var __dirname = "/home/hasna/.hasna/repos/worktrees/
|
|
12581
|
+
var __dirname = "/home/hasna/.hasna/repos/worktrees/domains/0a933b3e-a459-4bcb-b94d-6ab12a2ec235/node_modules/@aws-sdk/core/dist-cjs/submodules/client";
|
|
12582
12582
|
var retry = require_retry();
|
|
12583
12583
|
var protocols = require_protocols();
|
|
12584
12584
|
var lambdaInvokeStore = require_invoke_store();
|
|
@@ -38339,6 +38339,9 @@ function normalizeDnsRecordType(value) {
|
|
|
38339
38339
|
}
|
|
38340
38340
|
return recordType3;
|
|
38341
38341
|
}
|
|
38342
|
+
function getVcardPropertyValue(entry) {
|
|
38343
|
+
return entry.length >= 4 ? entry[3] : entry[2];
|
|
38344
|
+
}
|
|
38342
38345
|
async function rdapLookup(domainName) {
|
|
38343
38346
|
const domain = normalizeDomainName(domainName);
|
|
38344
38347
|
const url = `https://rdap.org/domain/${encodeURIComponent(domain)}`;
|
|
@@ -38387,17 +38390,19 @@ function extractRegistrantFromRdap(rdap) {
|
|
|
38387
38390
|
for (const entry of vcard) {
|
|
38388
38391
|
if (!Array.isArray(entry) || entry.length < 3)
|
|
38389
38392
|
continue;
|
|
38390
|
-
const [prop
|
|
38393
|
+
const [prop] = entry;
|
|
38394
|
+
const value = getVcardPropertyValue(entry);
|
|
38391
38395
|
if (prop === "fn")
|
|
38392
|
-
result.name =
|
|
38396
|
+
result.name = typeof value === "string" ? value : null;
|
|
38393
38397
|
else if (prop === "email")
|
|
38394
|
-
result.email =
|
|
38398
|
+
result.email = typeof value === "string" ? value : null;
|
|
38395
38399
|
else if (prop === "tel")
|
|
38396
|
-
result.phone =
|
|
38400
|
+
result.phone = typeof value === "string" ? value : null;
|
|
38397
38401
|
else if (prop === "org") {
|
|
38398
|
-
|
|
38402
|
+
const organization = Array.isArray(value) ? value[0] : value;
|
|
38403
|
+
result.organization = typeof organization === "string" ? organization : null;
|
|
38399
38404
|
} else if (prop === "n" && !result.name) {
|
|
38400
|
-
const parts = Array.isArray(
|
|
38405
|
+
const parts = Array.isArray(value) ? value.filter((part) => typeof part === "string" && part.length > 0) : typeof value === "string" ? [value] : [];
|
|
38401
38406
|
result.name = parts.reverse().join(" ").trim() || null;
|
|
38402
38407
|
}
|
|
38403
38408
|
}
|
|
@@ -38414,8 +38419,10 @@ function extractRegistrarFromRdap(rdap) {
|
|
|
38414
38419
|
if (entity.vcardArray?.[1]) {
|
|
38415
38420
|
const vcard = entity.vcardArray[1];
|
|
38416
38421
|
for (const entry of vcard) {
|
|
38417
|
-
if (Array.isArray(entry) && entry[0] === "fn")
|
|
38418
|
-
|
|
38422
|
+
if (Array.isArray(entry) && entry[0] === "fn") {
|
|
38423
|
+
const value = getVcardPropertyValue(entry);
|
|
38424
|
+
return typeof value === "string" ? value : null;
|
|
38425
|
+
}
|
|
38419
38426
|
}
|
|
38420
38427
|
}
|
|
38421
38428
|
if (entity.remarks) {
|
|
@@ -46779,6 +46786,7 @@ function createRoute53Provider(config2) {
|
|
|
46779
46786
|
}
|
|
46780
46787
|
return {
|
|
46781
46788
|
name: "route53",
|
|
46789
|
+
dnsWriteScope: "changed-groups",
|
|
46782
46790
|
async listDomains() {
|
|
46783
46791
|
return listDomainInventory();
|
|
46784
46792
|
},
|
|
@@ -47152,16 +47160,51 @@ async function upsertRecord2(zoneId, record, config2) {
|
|
|
47152
47160
|
await cfFetch(`/zones/${zoneId}/dns_records`, { method: "POST", body, config: config2 });
|
|
47153
47161
|
}
|
|
47154
47162
|
}
|
|
47155
|
-
|
|
47163
|
+
function sameRecordIdentity(a4, b4) {
|
|
47164
|
+
return a4.type === b4.type && a4.name === b4.name && a4.content === b4.content && (a4.priority ?? undefined) === (b4.priority ?? undefined);
|
|
47165
|
+
}
|
|
47166
|
+
function resolveDesiredProxied(records, existing) {
|
|
47167
|
+
const omitted = records.filter((record) => record.proxied === undefined);
|
|
47168
|
+
if (omitted.length === 0)
|
|
47169
|
+
return records;
|
|
47170
|
+
const { type, name } = records[0];
|
|
47171
|
+
if (omitted.length === records.length) {
|
|
47172
|
+
const proxyStates = new Set(existing.map((record) => record.proxied));
|
|
47173
|
+
if (proxyStates.size > 1) {
|
|
47174
|
+
throw new Error(`Cannot safely preserve Cloudflare proxied state for ${type} ${name}: ` + "existing records have mixed proxied values while desired records omit proxied; " + "set proxied explicitly on every desired record");
|
|
47175
|
+
}
|
|
47176
|
+
const inherited = existing[0]?.proxied;
|
|
47177
|
+
return inherited === undefined ? records : records.map((record) => ({ ...record, proxied: inherited }));
|
|
47178
|
+
}
|
|
47179
|
+
const existingHasProxyState = existing.some((record) => record.proxied !== undefined);
|
|
47180
|
+
return records.map((record) => {
|
|
47181
|
+
if (record.proxied !== undefined)
|
|
47182
|
+
return record;
|
|
47183
|
+
const matches = existing.filter((candidate) => sameRecordIdentity(candidate, record));
|
|
47184
|
+
if (matches.length === 1 && matches[0].proxied !== undefined) {
|
|
47185
|
+
return { ...record, proxied: matches[0].proxied };
|
|
47186
|
+
}
|
|
47187
|
+
if (!existingHasProxyState)
|
|
47188
|
+
return record;
|
|
47189
|
+
throw new Error(`Cannot safely preserve Cloudflare proxied state for ${type} ${name} record ${record.content}: ` + "omitted proxied does not resolve to exactly one existing value; " + "set proxied explicitly on this desired record");
|
|
47190
|
+
});
|
|
47191
|
+
}
|
|
47192
|
+
async function prepareRecordsByNameType(zoneId, records, config2) {
|
|
47156
47193
|
if (records.length === 0)
|
|
47157
47194
|
return;
|
|
47158
47195
|
const { type, name } = records[0];
|
|
47159
47196
|
const existing = await listRecordsByNameType(zoneId, type, name, config2);
|
|
47160
|
-
|
|
47197
|
+
if (existing.length === records.length && records.every((record) => existing.some((candidate) => sameRecordIdentity(candidate, record) && candidate.ttl === record.ttl && (record.proxied === undefined || candidate.proxied === record.proxied)))) {
|
|
47198
|
+
return;
|
|
47199
|
+
}
|
|
47200
|
+
return { existing, desired: resolveDesiredProxied(records, existing) };
|
|
47201
|
+
}
|
|
47202
|
+
async function replaceRecordsByNameType(zoneId, replacement, config2) {
|
|
47203
|
+
for (const record of replacement.existing) {
|
|
47161
47204
|
if (record.id)
|
|
47162
47205
|
await deleteRecord2(zoneId, record.id, config2);
|
|
47163
47206
|
}
|
|
47164
|
-
for (const record of
|
|
47207
|
+
for (const record of replacement.desired) {
|
|
47165
47208
|
await cfFetch(`/zones/${zoneId}/dns_records`, {
|
|
47166
47209
|
method: "POST",
|
|
47167
47210
|
body: {
|
|
@@ -47170,7 +47213,7 @@ async function replaceRecordsByNameType(zoneId, records, config2) {
|
|
|
47170
47213
|
content: record.content,
|
|
47171
47214
|
ttl: record.ttl ?? 1,
|
|
47172
47215
|
priority: record.priority,
|
|
47173
|
-
proxied: record.proxied
|
|
47216
|
+
...record.proxied === undefined ? {} : { proxied: record.proxied }
|
|
47174
47217
|
},
|
|
47175
47218
|
config: config2
|
|
47176
47219
|
});
|
|
@@ -47205,6 +47248,7 @@ function createCloudflareProvider(config2) {
|
|
|
47205
47248
|
const cfg = config2 ?? getConfig3();
|
|
47206
47249
|
return {
|
|
47207
47250
|
name: "cloudflare",
|
|
47251
|
+
dnsWriteScope: "changed-groups",
|
|
47208
47252
|
async listDomains() {
|
|
47209
47253
|
const zones = await listZones(cfg);
|
|
47210
47254
|
return zones.map(zoneToDomainInfo);
|
|
@@ -47255,7 +47299,8 @@ function createCloudflareProvider(config2) {
|
|
|
47255
47299
|
name: r4.name,
|
|
47256
47300
|
value: r4.content,
|
|
47257
47301
|
ttl: r4.ttl === 1 ? 0 : r4.ttl,
|
|
47258
|
-
priority: r4.priority
|
|
47302
|
+
priority: r4.priority,
|
|
47303
|
+
...r4.proxied === undefined ? {} : { proxied: r4.proxied }
|
|
47259
47304
|
}));
|
|
47260
47305
|
},
|
|
47261
47306
|
async setDnsRecords(domain, records) {
|
|
@@ -47266,11 +47311,24 @@ function createCloudflareProvider(config2) {
|
|
|
47266
47311
|
for (const r4 of records) {
|
|
47267
47312
|
const key = `${r4.type}|${r4.name}`;
|
|
47268
47313
|
const existing = grouped.get(key) ?? [];
|
|
47269
|
-
existing.push({
|
|
47314
|
+
existing.push({
|
|
47315
|
+
type: r4.type,
|
|
47316
|
+
name: r4.name,
|
|
47317
|
+
content: r4.value,
|
|
47318
|
+
ttl: r4.ttl || 1,
|
|
47319
|
+
priority: r4.priority,
|
|
47320
|
+
...r4.proxied === undefined ? {} : { proxied: r4.proxied }
|
|
47321
|
+
});
|
|
47270
47322
|
grouped.set(key, existing);
|
|
47271
47323
|
}
|
|
47324
|
+
const replacements = [];
|
|
47272
47325
|
for (const group of grouped.values()) {
|
|
47273
|
-
await
|
|
47326
|
+
const replacement = await prepareRecordsByNameType(zone.id, group, cfg);
|
|
47327
|
+
if (replacement)
|
|
47328
|
+
replacements.push(replacement);
|
|
47329
|
+
}
|
|
47330
|
+
for (const replacement of replacements) {
|
|
47331
|
+
await replaceRecordsByNameType(zone.id, replacement, cfg);
|
|
47274
47332
|
}
|
|
47275
47333
|
return true;
|
|
47276
47334
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloudflare.d.ts","sourceRoot":"","sources":["../../src/lib/cloudflare.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAEV,WAAW,EACX,uBAAuB,EAIxB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EAAE,gBAAgB,EAAE,CAAC;AAIjC,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAID,wBAAgB,SAAS,IAAI,gBAAgB,CAE5C;AAqCD,wBAAsB,SAAS,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAkBpF;AAED,wBAAsB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAQvG;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,CAUnG;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,gBAAgB,EACzB,IAAI,CAAC,EAAE;IACL,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,gBAAgB,KAAK,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC7E,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,gBAAgB,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;CAC1E,GACA,OAAO,CAAC,cAAc,CAAC,CASzB;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAEzF;AAID,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAkBxG;AAkBD,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBrH;
|
|
1
|
+
{"version":3,"file":"cloudflare.d.ts","sourceRoot":"","sources":["../../src/lib/cloudflare.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAEV,WAAW,EACX,uBAAuB,EAIxB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAGL,KAAK,gBAAgB,EACtB,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EAAE,gBAAgB,EAAE,CAAC;AAIjC,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,oBAAoB,CAAC,EAAE,MAAM,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAID,wBAAgB,SAAS,IAAI,gBAAgB,CAE5C;AAqCD,wBAAsB,SAAS,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAkBpF;AAED,wBAAsB,OAAO,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAQvG;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,cAAc,CAAC,CAUnG;AAED;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,gBAAgB,EACzB,IAAI,CAAC,EAAE;IACL,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,gBAAgB,KAAK,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAAC;IAC7E,UAAU,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,gBAAgB,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;CAC1E,GACA,OAAO,CAAC,cAAc,CAAC,CASzB;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAEzF;AAID,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAkBxG;AAkBD,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAsBrH;AA+FD,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAE7G;AAED,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAQjI;AA4BD,wBAAgB,wBAAwB,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,WAAW,GAAG,uBAAuB,CA6FzG"}
|
package/dist/lib/cloudflare.js
CHANGED
|
@@ -249,16 +249,51 @@ async function upsertRecord(zoneId, record, config) {
|
|
|
249
249
|
await cfFetch(`/zones/${zoneId}/dns_records`, { method: "POST", body, config });
|
|
250
250
|
}
|
|
251
251
|
}
|
|
252
|
-
|
|
252
|
+
function sameRecordIdentity(a, b) {
|
|
253
|
+
return a.type === b.type && a.name === b.name && a.content === b.content && (a.priority ?? undefined) === (b.priority ?? undefined);
|
|
254
|
+
}
|
|
255
|
+
function resolveDesiredProxied(records, existing) {
|
|
256
|
+
const omitted = records.filter((record) => record.proxied === undefined);
|
|
257
|
+
if (omitted.length === 0)
|
|
258
|
+
return records;
|
|
259
|
+
const { type, name } = records[0];
|
|
260
|
+
if (omitted.length === records.length) {
|
|
261
|
+
const proxyStates = new Set(existing.map((record) => record.proxied));
|
|
262
|
+
if (proxyStates.size > 1) {
|
|
263
|
+
throw new Error(`Cannot safely preserve Cloudflare proxied state for ${type} ${name}: ` + "existing records have mixed proxied values while desired records omit proxied; " + "set proxied explicitly on every desired record");
|
|
264
|
+
}
|
|
265
|
+
const inherited = existing[0]?.proxied;
|
|
266
|
+
return inherited === undefined ? records : records.map((record) => ({ ...record, proxied: inherited }));
|
|
267
|
+
}
|
|
268
|
+
const existingHasProxyState = existing.some((record) => record.proxied !== undefined);
|
|
269
|
+
return records.map((record) => {
|
|
270
|
+
if (record.proxied !== undefined)
|
|
271
|
+
return record;
|
|
272
|
+
const matches = existing.filter((candidate) => sameRecordIdentity(candidate, record));
|
|
273
|
+
if (matches.length === 1 && matches[0].proxied !== undefined) {
|
|
274
|
+
return { ...record, proxied: matches[0].proxied };
|
|
275
|
+
}
|
|
276
|
+
if (!existingHasProxyState)
|
|
277
|
+
return record;
|
|
278
|
+
throw new Error(`Cannot safely preserve Cloudflare proxied state for ${type} ${name} record ${record.content}: ` + "omitted proxied does not resolve to exactly one existing value; " + "set proxied explicitly on this desired record");
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
async function prepareRecordsByNameType(zoneId, records, config) {
|
|
253
282
|
if (records.length === 0)
|
|
254
283
|
return;
|
|
255
284
|
const { type, name } = records[0];
|
|
256
285
|
const existing = await listRecordsByNameType(zoneId, type, name, config);
|
|
257
|
-
|
|
286
|
+
if (existing.length === records.length && records.every((record) => existing.some((candidate) => sameRecordIdentity(candidate, record) && candidate.ttl === record.ttl && (record.proxied === undefined || candidate.proxied === record.proxied)))) {
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
return { existing, desired: resolveDesiredProxied(records, existing) };
|
|
290
|
+
}
|
|
291
|
+
async function replaceRecordsByNameType(zoneId, replacement, config) {
|
|
292
|
+
for (const record of replacement.existing) {
|
|
258
293
|
if (record.id)
|
|
259
294
|
await deleteRecord(zoneId, record.id, config);
|
|
260
295
|
}
|
|
261
|
-
for (const record of
|
|
296
|
+
for (const record of replacement.desired) {
|
|
262
297
|
await cfFetch(`/zones/${zoneId}/dns_records`, {
|
|
263
298
|
method: "POST",
|
|
264
299
|
body: {
|
|
@@ -267,7 +302,7 @@ async function replaceRecordsByNameType(zoneId, records, config) {
|
|
|
267
302
|
content: record.content,
|
|
268
303
|
ttl: record.ttl ?? 1,
|
|
269
304
|
priority: record.priority,
|
|
270
|
-
proxied: record.proxied
|
|
305
|
+
...record.proxied === undefined ? {} : { proxied: record.proxied }
|
|
271
306
|
},
|
|
272
307
|
config
|
|
273
308
|
});
|
|
@@ -308,6 +343,7 @@ function createCloudflareProvider(config) {
|
|
|
308
343
|
const cfg = config ?? getConfig();
|
|
309
344
|
return {
|
|
310
345
|
name: "cloudflare",
|
|
346
|
+
dnsWriteScope: "changed-groups",
|
|
311
347
|
async listDomains() {
|
|
312
348
|
const zones = await listZones(cfg);
|
|
313
349
|
return zones.map(zoneToDomainInfo);
|
|
@@ -358,7 +394,8 @@ function createCloudflareProvider(config) {
|
|
|
358
394
|
name: r.name,
|
|
359
395
|
value: r.content,
|
|
360
396
|
ttl: r.ttl === 1 ? 0 : r.ttl,
|
|
361
|
-
priority: r.priority
|
|
397
|
+
priority: r.priority,
|
|
398
|
+
...r.proxied === undefined ? {} : { proxied: r.proxied }
|
|
362
399
|
}));
|
|
363
400
|
},
|
|
364
401
|
async setDnsRecords(domain, records) {
|
|
@@ -369,11 +406,24 @@ function createCloudflareProvider(config) {
|
|
|
369
406
|
for (const r of records) {
|
|
370
407
|
const key = `${r.type}|${r.name}`;
|
|
371
408
|
const existing = grouped.get(key) ?? [];
|
|
372
|
-
existing.push({
|
|
409
|
+
existing.push({
|
|
410
|
+
type: r.type,
|
|
411
|
+
name: r.name,
|
|
412
|
+
content: r.value,
|
|
413
|
+
ttl: r.ttl || 1,
|
|
414
|
+
priority: r.priority,
|
|
415
|
+
...r.proxied === undefined ? {} : { proxied: r.proxied }
|
|
416
|
+
});
|
|
373
417
|
grouped.set(key, existing);
|
|
374
418
|
}
|
|
419
|
+
const replacements = [];
|
|
375
420
|
for (const group of grouped.values()) {
|
|
376
|
-
await
|
|
421
|
+
const replacement = await prepareRecordsByNameType(zone.id, group, cfg);
|
|
422
|
+
if (replacement)
|
|
423
|
+
replacements.push(replacement);
|
|
424
|
+
}
|
|
425
|
+
for (const replacement of replacements) {
|
|
426
|
+
await replaceRecordsByNameType(zone.id, replacement, cfg);
|
|
377
427
|
}
|
|
378
428
|
return true;
|
|
379
429
|
}
|
package/dist/lib/dns-plan.d.ts
CHANGED
|
@@ -22,6 +22,7 @@ export declare function normalizeDnsRecord(record: ProviderDnsRecord, domain: st
|
|
|
22
22
|
export declare function parseDesiredDnsState(input: string, domainHint?: string): DesiredDnsState;
|
|
23
23
|
export declare function createDnsPlan(domain: string, current: ProviderDnsRecord[], desired: ProviderDnsRecord[]): DnsPlan;
|
|
24
24
|
export declare function planHasChanges(plan: DnsPlan): boolean;
|
|
25
|
+
export declare function selectChangedDnsRecords(plan: DnsPlan, desired: ProviderDnsRecord[]): ProviderDnsRecord[];
|
|
25
26
|
export declare function getDnsApplyBlockReason(plan: DnsPlan, opts: {
|
|
26
27
|
yes?: boolean;
|
|
27
28
|
allowDelete?: boolean;
|
|
@@ -1 +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,
|
|
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,CAmB/F;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,eAAe,CA8BxF;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;AAMD,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB,EAAE,GAAG,iBAAiB,EAAE,CASxG;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"}
|
package/dist/lib/registrar.d.ts
CHANGED
|
@@ -10,6 +10,7 @@ export interface ProviderDnsRecord {
|
|
|
10
10
|
value: string;
|
|
11
11
|
ttl: number;
|
|
12
12
|
priority?: number;
|
|
13
|
+
proxied?: boolean;
|
|
13
14
|
}
|
|
14
15
|
export interface ProviderDomainInfo {
|
|
15
16
|
domain: string;
|
|
@@ -92,8 +93,11 @@ export interface RegistrarProvider extends DomainInventoryProvider {
|
|
|
92
93
|
updateNameservers?(domain: string, nameservers: string[]): Promise<ProviderNameserverUpdateResult>;
|
|
93
94
|
}
|
|
94
95
|
/** Handles DNS zone and record management */
|
|
96
|
+
export type DnsWriteScope = "full-zone" | "changed-groups";
|
|
95
97
|
export interface DnsProvider {
|
|
96
98
|
name: string;
|
|
99
|
+
/** Omission is conservative: setDnsRecords receives the complete desired zone. */
|
|
100
|
+
dnsWriteScope?: DnsWriteScope;
|
|
97
101
|
getDnsRecords(domain: string): Promise<ProviderDnsRecord[]>;
|
|
98
102
|
setDnsRecords(domain: string, records: ProviderDnsRecord[]): Promise<boolean>;
|
|
99
103
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registrar.d.ts","sourceRoot":"","sources":["../../src/lib/registrar.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"registrar.d.ts","sourceRoot":"","sources":["../../src/lib/registrar.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/registrar.js
CHANGED
|
@@ -249,16 +249,51 @@ async function upsertRecord(zoneId, record, config) {
|
|
|
249
249
|
await cfFetch(`/zones/${zoneId}/dns_records`, { method: "POST", body, config });
|
|
250
250
|
}
|
|
251
251
|
}
|
|
252
|
-
|
|
252
|
+
function sameRecordIdentity(a, b) {
|
|
253
|
+
return a.type === b.type && a.name === b.name && a.content === b.content && (a.priority ?? undefined) === (b.priority ?? undefined);
|
|
254
|
+
}
|
|
255
|
+
function resolveDesiredProxied(records, existing) {
|
|
256
|
+
const omitted = records.filter((record) => record.proxied === undefined);
|
|
257
|
+
if (omitted.length === 0)
|
|
258
|
+
return records;
|
|
259
|
+
const { type, name } = records[0];
|
|
260
|
+
if (omitted.length === records.length) {
|
|
261
|
+
const proxyStates = new Set(existing.map((record) => record.proxied));
|
|
262
|
+
if (proxyStates.size > 1) {
|
|
263
|
+
throw new Error(`Cannot safely preserve Cloudflare proxied state for ${type} ${name}: ` + "existing records have mixed proxied values while desired records omit proxied; " + "set proxied explicitly on every desired record");
|
|
264
|
+
}
|
|
265
|
+
const inherited = existing[0]?.proxied;
|
|
266
|
+
return inherited === undefined ? records : records.map((record) => ({ ...record, proxied: inherited }));
|
|
267
|
+
}
|
|
268
|
+
const existingHasProxyState = existing.some((record) => record.proxied !== undefined);
|
|
269
|
+
return records.map((record) => {
|
|
270
|
+
if (record.proxied !== undefined)
|
|
271
|
+
return record;
|
|
272
|
+
const matches = existing.filter((candidate) => sameRecordIdentity(candidate, record));
|
|
273
|
+
if (matches.length === 1 && matches[0].proxied !== undefined) {
|
|
274
|
+
return { ...record, proxied: matches[0].proxied };
|
|
275
|
+
}
|
|
276
|
+
if (!existingHasProxyState)
|
|
277
|
+
return record;
|
|
278
|
+
throw new Error(`Cannot safely preserve Cloudflare proxied state for ${type} ${name} record ${record.content}: ` + "omitted proxied does not resolve to exactly one existing value; " + "set proxied explicitly on this desired record");
|
|
279
|
+
});
|
|
280
|
+
}
|
|
281
|
+
async function prepareRecordsByNameType(zoneId, records, config) {
|
|
253
282
|
if (records.length === 0)
|
|
254
283
|
return;
|
|
255
284
|
const { type, name } = records[0];
|
|
256
285
|
const existing = await listRecordsByNameType(zoneId, type, name, config);
|
|
257
|
-
|
|
286
|
+
if (existing.length === records.length && records.every((record) => existing.some((candidate) => sameRecordIdentity(candidate, record) && candidate.ttl === record.ttl && (record.proxied === undefined || candidate.proxied === record.proxied)))) {
|
|
287
|
+
return;
|
|
288
|
+
}
|
|
289
|
+
return { existing, desired: resolveDesiredProxied(records, existing) };
|
|
290
|
+
}
|
|
291
|
+
async function replaceRecordsByNameType(zoneId, replacement, config) {
|
|
292
|
+
for (const record of replacement.existing) {
|
|
258
293
|
if (record.id)
|
|
259
294
|
await deleteRecord(zoneId, record.id, config);
|
|
260
295
|
}
|
|
261
|
-
for (const record of
|
|
296
|
+
for (const record of replacement.desired) {
|
|
262
297
|
await cfFetch(`/zones/${zoneId}/dns_records`, {
|
|
263
298
|
method: "POST",
|
|
264
299
|
body: {
|
|
@@ -267,7 +302,7 @@ async function replaceRecordsByNameType(zoneId, records, config) {
|
|
|
267
302
|
content: record.content,
|
|
268
303
|
ttl: record.ttl ?? 1,
|
|
269
304
|
priority: record.priority,
|
|
270
|
-
proxied: record.proxied
|
|
305
|
+
...record.proxied === undefined ? {} : { proxied: record.proxied }
|
|
271
306
|
},
|
|
272
307
|
config
|
|
273
308
|
});
|
|
@@ -308,6 +343,7 @@ function createCloudflareProvider(config) {
|
|
|
308
343
|
const cfg = config ?? getConfig();
|
|
309
344
|
return {
|
|
310
345
|
name: "cloudflare",
|
|
346
|
+
dnsWriteScope: "changed-groups",
|
|
311
347
|
async listDomains() {
|
|
312
348
|
const zones = await listZones(cfg);
|
|
313
349
|
return zones.map(zoneToDomainInfo);
|
|
@@ -358,7 +394,8 @@ function createCloudflareProvider(config) {
|
|
|
358
394
|
name: r.name,
|
|
359
395
|
value: r.content,
|
|
360
396
|
ttl: r.ttl === 1 ? 0 : r.ttl,
|
|
361
|
-
priority: r.priority
|
|
397
|
+
priority: r.priority,
|
|
398
|
+
...r.proxied === undefined ? {} : { proxied: r.proxied }
|
|
362
399
|
}));
|
|
363
400
|
},
|
|
364
401
|
async setDnsRecords(domain, records) {
|
|
@@ -369,11 +406,24 @@ function createCloudflareProvider(config) {
|
|
|
369
406
|
for (const r of records) {
|
|
370
407
|
const key = `${r.type}|${r.name}`;
|
|
371
408
|
const existing = grouped.get(key) ?? [];
|
|
372
|
-
existing.push({
|
|
409
|
+
existing.push({
|
|
410
|
+
type: r.type,
|
|
411
|
+
name: r.name,
|
|
412
|
+
content: r.value,
|
|
413
|
+
ttl: r.ttl || 1,
|
|
414
|
+
priority: r.priority,
|
|
415
|
+
...r.proxied === undefined ? {} : { proxied: r.proxied }
|
|
416
|
+
});
|
|
373
417
|
grouped.set(key, existing);
|
|
374
418
|
}
|
|
419
|
+
const replacements = [];
|
|
375
420
|
for (const group of grouped.values()) {
|
|
376
|
-
await
|
|
421
|
+
const replacement = await prepareRecordsByNameType(zone.id, group, cfg);
|
|
422
|
+
if (replacement)
|
|
423
|
+
replacements.push(replacement);
|
|
424
|
+
}
|
|
425
|
+
for (const replacement of replacements) {
|
|
426
|
+
await replaceRecordsByNameType(zone.id, replacement, cfg);
|
|
377
427
|
}
|
|
378
428
|
return true;
|
|
379
429
|
}
|
|
@@ -910,6 +960,7 @@ function createRoute53Provider(config) {
|
|
|
910
960
|
}
|
|
911
961
|
return {
|
|
912
962
|
name: "route53",
|
|
963
|
+
dnsWriteScope: "changed-groups",
|
|
913
964
|
async listDomains() {
|
|
914
965
|
return listDomainInventory();
|
|
915
966
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"route53.d.ts","sourceRoot":"","sources":["../../src/lib/route53.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"route53.d.ts","sourceRoot":"","sources":["../../src/lib/route53.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA6BH,OAAO,KAAK,EACV,YAAY,EAOb,MAAM,gBAAgB,CAAC;AAIxB,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,GAAG,EAAE,MAAM,CAAC;IACZ,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,uBAAuB;IACtC,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,0BAA0B;IACzC,SAAS,EAAE,MAAM,CAAC;IAClB,sBAAsB,EAAE,OAAO,CAAC;IAChC,0BAA0B,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3C;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,iFAAiF;IACjF,YAAY,CAAC,EAAE,kBAAkB,CAAC;CACnC;AAED,MAAM,WAAW,kBAAkB;IACjC,8EAA8E;IAC9E,cAAc,EAAE,MAAM,CAAC;IACvB,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,kGAAkG;IAClG,YAAY,CAAC,EAAE,kBAAkB,CAAC;CACnC;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAID,wBAAgB,SAAS,IAAI,aAAa,CAQzC;AAoBD,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA6B3G;AA0BD,wBAAsB,WAAW,CAC/B,GAAG,EAAE,MAAM,EACX,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAQjC;AAED,wBAAsB,aAAa,CACjC,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,eAAe,EAAE,CAAC,CAgB5B;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,iBAAiB,EAC1B,aAAa,SAAI,EACjB,SAAS,UAAO,EAChB,MAAM,CAAC,EAAE,aAAa,EACtB,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAsBlC;AAmBD,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,iBAAiB,EAC1B,aAAa,SAAI,EACjB,SAAS,UAAO,EAChB,MAAM,CAAC,EAAE,aAAa,EACtB,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAuBlC;AAED,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,sBAAsB,CAAC,CAUjC;AAED,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,GAAG,IAAI,CAAC;IAC3B,aAAa,EAAE,OAAO,GAAG,IAAI,CAAC;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,iBAAiB,EAAE,OAAO,GAAG,IAAI,CAAC;CACnC;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CA6BnG;AA4BD,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,MAAM,EACd,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,0BAA0B,CAAC,CA0BrC;AAED,gFAAgF;AAChF,KAAK,kBAAkB,GAAG;IAAE,IAAI,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC;AAExF;;;;;GAKG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EAAE,EACrB,MAAM,CAAC,EAAE,aAAa,EACtB,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAYlC;AAED,wBAAsB,qBAAqB,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAmB/F;AA4BD,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,aAAa,EACtB,OAAO,CAAC,EAAE;IAAE,eAAe,CAAC,EAAE,MAAM,CAAA;CAAE,GACrC,OAAO,CAAC,cAAc,CAAC,CAmBzB;AAED,wBAAsB,eAAe,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAoBvF;AAED,wBAAsB,aAAa,CACjC,YAAY,EAAE,MAAM,EACpB,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,cAAc,GAAG;IAAE,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAatD;AAED,wBAAsB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CA8ClG;AAED,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAWnH;AAED,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EAAE,EACrB,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAqBhC;AA6CD,wBAAsB,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CA2BxG;AAED,wBAAsB,YAAY,CAChC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,kBAAkB,EAC1B,MAAM,CAAC,EAAE,aAAa,EACtB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,mBAAmB,CAAC,CAY9B;AAED,wBAAsB,YAAY,CAChC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,kBAAkB,EAC1B,MAAM,CAAC,EAAE,aAAa,EACtB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,mBAAmB,CAAC,CAY9B;AAED,wBAAsB,aAAa,CACjC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,kBAAkB,EAAE,EAC7B,MAAM,CAAC,EAAE,aAAa,EACtB,OAAO,CAAC,EAAE,oBAAoB,GAC7B,OAAO,CAAC,mBAAmB,CAAC,CAiB9B;AAID,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,YAAY,CAsM1E"}
|
package/dist/lib/route53.js
CHANGED
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/** Bytes accepted per attempt. Throws an errno-bearing Error on failure. */
|
|
2
|
+
export interface SyncWriter {
|
|
3
|
+
(chunk: Uint8Array): number;
|
|
4
|
+
}
|
|
5
|
+
export type WriteOutcome = "complete" | "reader-closed";
|
|
6
|
+
/**
|
|
7
|
+
* Write every byte in `bytes`, or stop because the reader closed the pipe.
|
|
8
|
+
*
|
|
9
|
+
* `writer` is injectable so the partial-write, back-pressure and reader-closed
|
|
10
|
+
* paths can be exercised without needing a real full pipe, which is not
|
|
11
|
+
* reproducible on demand in a unit test.
|
|
12
|
+
*/
|
|
13
|
+
export declare function writeAllBytesSync(bytes: Uint8Array, writer: SyncWriter): WriteOutcome;
|
|
14
|
+
export declare function writeAllSync(text: string, writer: SyncWriter): WriteOutcome;
|
|
15
|
+
/** Write `text` to stdout, completing the write before returning. */
|
|
16
|
+
export declare function writeStdout(text: string, writer?: SyncWriter): WriteOutcome;
|
|
17
|
+
/** Write arbitrary bytes to stdout without text encoding or a trailing newline. */
|
|
18
|
+
export declare function writeStdoutBytes(bytes: Uint8Array, writer?: SyncWriter): WriteOutcome;
|
|
19
|
+
/**
|
|
20
|
+
* Render arguments exactly as `console.log` would, plus the trailing newline.
|
|
21
|
+
*
|
|
22
|
+
* Exported so the formatting contract can be asserted directly. 739 call sites
|
|
23
|
+
* were converted mechanically and many of them pass more than one argument or a
|
|
24
|
+
* `%s`/`%d`/`%o` specifier; a replacement that only handled a single string
|
|
25
|
+
* would change their output silently, which would be a worse regression than
|
|
26
|
+
* the truncation being fixed. Testing that through the real fd would measure
|
|
27
|
+
* the writer instead of the formatter, so the seam is here.
|
|
28
|
+
*/
|
|
29
|
+
export declare function formatLine(...args: unknown[]): string;
|
|
30
|
+
/**
|
|
31
|
+
* Drop-in replacement for `console.log`, with the write actually completed.
|
|
32
|
+
*
|
|
33
|
+
* Variadic and `util.format`-based so it matches `console.log` argument for
|
|
34
|
+
* argument (`%s`/`%d`/`%o` substitution, space-joined extras, object
|
|
35
|
+
* inspection).
|
|
36
|
+
*/
|
|
37
|
+
export declare function printLine(...args: unknown[]): WriteOutcome;
|
|
38
|
+
/** `console.error` equivalent: completed write to stderr. */
|
|
39
|
+
export declare function printErrorLine(...args: unknown[]): WriteOutcome;
|
|
40
|
+
/**
|
|
41
|
+
* Emit a machine-readable JSON document on stdout.
|
|
42
|
+
*
|
|
43
|
+
* Every `--json` surface is a single write of an unbounded document, so every
|
|
44
|
+
* one of them can exceed a pipe buffer once the portfolio grows. Measured on
|
|
45
|
+
* an 800-row fixture, before this module existed: `domain list --all --json`
|
|
46
|
+
* delivered 65,536 of 822,523 bytes, `domain expiring --json` 65,536 of
|
|
47
|
+
* 784,003, and `domain export --format json` 131,072 of 572,803 — one or two
|
|
48
|
+
* buffers depending on how fast the reader drained, which is why the cut is not
|
|
49
|
+
* a constant anyone can test against.
|
|
50
|
+
*/
|
|
51
|
+
export declare function printJson(value: unknown, writer?: SyncWriter): WriteOutcome;
|
|
52
|
+
/** Single-line JSON, for streams where one record per line is the contract. */
|
|
53
|
+
export declare function printJsonLine(value: unknown, writer?: SyncWriter): WriteOutcome;
|
|
54
|
+
//# sourceMappingURL=stdout.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdout.d.ts","sourceRoot":"","sources":["../../src/lib/stdout.ts"],"names":[],"mappings":"AA8EA,4EAA4E;AAC5E,MAAM,WAAW,UAAU;IACzB,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAAC;CAC7B;AAgBD,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,eAAe,CAAC;AAExD;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,GAAG,YAAY,CA2BrF;AAED,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,YAAY,CAE3E;AAOD,qEAAqE;AACrE,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,UAAyB,GAAG,YAAY,CAEzF;AAED,mFAAmF;AACnF,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,UAAU,EACjB,MAAM,GAAE,UAAyB,GAChC,YAAY,CAEd;AAED;;;;;;;;;GASG;AACH,wBAAgB,UAAU,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,MAAM,CAErD;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,YAAY,CAE1D;AAED,6DAA6D;AAC7D,wBAAgB,cAAc,CAAC,GAAG,IAAI,EAAE,OAAO,EAAE,GAAG,YAAY,CAE/D;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,GAAE,UAAyB,GAAG,YAAY,CAEzF;AAED,+EAA+E;AAC/E,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,GAAE,UAAyB,GAAG,YAAY,CAE7F"}
|