@stacksjs/buddy 0.70.206 → 0.70.207
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/commands/deploy.js +6 -46
- package/package.json +2 -2
package/dist/commands/deploy.js
CHANGED
|
@@ -1299,25 +1299,6 @@ async function reconcileConfigDns(sites, logger) {
|
|
|
1299
1299
|
logger.warn(`DNS (config/dns.ts) reconcile for ${domain} failed: ${err instanceof Error ? err.message : String(err)}`);
|
|
1300
1300
|
}
|
|
1301
1301
|
}
|
|
1302
|
-
async function verifyDnsRecord(provider, domain, fqdn, ip, recordType = "A") {
|
|
1303
|
-
try {
|
|
1304
|
-
if (typeof provider?.listRecords !== "function")
|
|
1305
|
-
return !0;
|
|
1306
|
-
const res = await provider.listRecords(domain);
|
|
1307
|
-
if (!res?.success || !Array.isArray(res.records))
|
|
1308
|
-
return !0;
|
|
1309
|
-
return res.records.some((r) => {
|
|
1310
|
-
const name = typeof r?.name === "string" ? r.name.replace(/\.$/, "") : "";
|
|
1311
|
-
return r?.type === recordType && name === fqdn && r?.content === ip;
|
|
1312
|
-
});
|
|
1313
|
-
} catch {
|
|
1314
|
-
return !0;
|
|
1315
|
-
}
|
|
1316
|
-
}
|
|
1317
|
-
const IPV6_EXCLUDED_HOSTS = new Set(["mail", "smtp", "imap", "mx"]);
|
|
1318
|
-
function skipIpv6ForHost(fqdn) {
|
|
1319
|
-
return IPV6_EXCLUDED_HOSTS.has(fqdn.split(".")[0] ?? "");
|
|
1320
|
-
}
|
|
1321
1302
|
async function reconcileHetznerDns(sites, ip, logger, ipv6) {
|
|
1322
1303
|
const domains = new Set;
|
|
1323
1304
|
for (const site of Object.values(sites))
|
|
@@ -1343,7 +1324,7 @@ async function reconcileHetznerDns(sites, ip, logger, ipv6) {
|
|
|
1343
1324
|
const {
|
|
1344
1325
|
createDnsProvider,
|
|
1345
1326
|
detectDnsProvider,
|
|
1346
|
-
|
|
1327
|
+
reconcileAddressRecords
|
|
1347
1328
|
} = await import("@stacksjs/ts-cloud");
|
|
1348
1329
|
logger.info("Reconciling DNS records...");
|
|
1349
1330
|
const resolveA = async (fqdn) => {
|
|
@@ -1382,32 +1363,11 @@ async function reconcileHetznerDns(sites, ip, logger, ipv6) {
|
|
|
1382
1363
|
continue;
|
|
1383
1364
|
}
|
|
1384
1365
|
for (const sub of ["", "www"]) {
|
|
1385
|
-
const fqdn = sub ? `${sub}.${domain}` : domain,
|
|
1386
|
-
|
|
1387
|
-
logger.
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
const cleanupWarnings = await removeStaleServerAddressRecords(provider, domain, fqdn, ip);
|
|
1391
|
-
for (const warning of cleanupWarnings)
|
|
1392
|
-
logger.warn(` DNS: ${fqdn} cleanup: ${warning}`);
|
|
1393
|
-
if (await verifyDnsRecord(provider, domain, fqdn, ip))
|
|
1394
|
-
logger.success(` DNS: ${fqdn} \u2192 ${ip} (${provider.name})`);
|
|
1395
|
-
else
|
|
1396
|
-
logger.warn(` DNS: ${fqdn} \u2192 ${ip} reported success at ${provider.name} but no matching A record exists \u2014 create it manually: A ${fqdn} \u2192 ${ip}`);
|
|
1397
|
-
if (!ipv6 || skipIpv6ForHost(fqdn))
|
|
1398
|
-
continue;
|
|
1399
|
-
const v6res = await provider.upsertRecord(domain, { name: fqdn, type: "AAAA", content: ipv6, ttl: 600 });
|
|
1400
|
-
if (v6res?.success === !1) {
|
|
1401
|
-
logger.warn(` DNS: ${fqdn} \u2192 ${ipv6} failed: ${v6res.error || v6res.message || "unknown error"}`);
|
|
1402
|
-
continue;
|
|
1403
|
-
}
|
|
1404
|
-
const v6Cleanup = await removeStaleServerAddressRecords(provider, domain, fqdn, ipv6, "AAAA");
|
|
1405
|
-
for (const warning of v6Cleanup)
|
|
1406
|
-
logger.warn(` DNS: ${fqdn} cleanup: ${warning}`);
|
|
1407
|
-
if (await verifyDnsRecord(provider, domain, fqdn, ipv6, "AAAA"))
|
|
1408
|
-
logger.success(` DNS: ${fqdn} \u2192 ${ipv6} (${provider.name})`);
|
|
1409
|
-
else
|
|
1410
|
-
logger.warn(` DNS: ${fqdn} \u2192 ${ipv6} reported success at ${provider.name} but no matching AAAA record exists \u2014 create it manually: AAAA ${fqdn} \u2192 ${ipv6}`);
|
|
1366
|
+
const fqdn = sub ? `${sub}.${domain}` : domain, report = await reconcileAddressRecords({ provider, zone: domain, fqdn, ipv4: ip, ipv6 });
|
|
1367
|
+
for (const record of report.published)
|
|
1368
|
+
logger.success(` DNS: ${record.fqdn} \u2192 ${record.content} (${provider.name})`);
|
|
1369
|
+
for (const warning of report.warnings)
|
|
1370
|
+
logger.warn(` DNS: ${warning}`);
|
|
1411
1371
|
}
|
|
1412
1372
|
} catch (err) {
|
|
1413
1373
|
logger.warn(` DNS: ${domain} reconciliation failed: ${err?.message || err}`);
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@stacksjs/buddy",
|
|
3
3
|
"type": "module",
|
|
4
4
|
"sideEffects": false,
|
|
5
|
-
"version": "0.70.
|
|
5
|
+
"version": "0.70.207",
|
|
6
6
|
"description": "Meet Buddy. The Stacks runtime.",
|
|
7
7
|
"author": "Chris Breuer",
|
|
8
8
|
"contributors": [
|
|
@@ -137,7 +137,7 @@
|
|
|
137
137
|
"@stacksjs/ui": "^0.70.180",
|
|
138
138
|
"@stacksjs/utils": "^0.70.180",
|
|
139
139
|
"@stacksjs/validation": "^0.70.180",
|
|
140
|
-
"@stacksjs/ts-cloud": "^0.7.
|
|
140
|
+
"@stacksjs/ts-cloud": "^0.7.86",
|
|
141
141
|
"ajv": "^8.20.0",
|
|
142
142
|
"ajv-formats": "^3.0.1"
|
|
143
143
|
},
|