@stacksjs/buddy 0.70.206 → 0.70.208

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.
@@ -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
- removeStaleServerAddressRecords
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, res = await provider.upsertRecord(domain, { name: fqdn, type: "A", content: ip, ttl: 600 });
1386
- if (res?.success === !1) {
1387
- logger.warn(` DNS: ${fqdn} \u2192 ${ip} failed: ${res.error || res.message || "unknown error"}`);
1388
- continue;
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.206",
5
+ "version": "0.70.208",
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.85",
140
+ "@stacksjs/ts-cloud": "^0.7.86",
141
141
  "ajv": "^8.20.0",
142
142
  "ajv-formats": "^3.0.1"
143
143
  },