@hasna/domains 0.0.3 → 0.0.5

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.
Files changed (37) hide show
  1. package/dist/cli/commands/config.d.ts +3 -0
  2. package/dist/cli/commands/config.d.ts.map +1 -0
  3. package/dist/cli/commands/dns.d.ts.map +1 -1
  4. package/dist/cli/commands/doctor.d.ts +3 -0
  5. package/dist/cli/commands/doctor.d.ts.map +1 -0
  6. package/dist/cli/commands/domain.d.ts +3 -0
  7. package/dist/cli/commands/domain.d.ts.map +1 -0
  8. package/dist/cli/commands/mcp-install.d.ts +3 -0
  9. package/dist/cli/commands/mcp-install.d.ts.map +1 -0
  10. package/dist/cli/commands/monitor.d.ts +3 -0
  11. package/dist/cli/commands/monitor.d.ts.map +1 -0
  12. package/dist/cli/commands/provider.d.ts +3 -0
  13. package/dist/cli/commands/provider.d.ts.map +1 -0
  14. package/dist/cli/commands/route53.d.ts.map +1 -1
  15. package/dist/cli/commands/serve.d.ts +3 -0
  16. package/dist/cli/commands/serve.d.ts.map +1 -0
  17. package/dist/cli/commands/ssl.d.ts +3 -0
  18. package/dist/cli/commands/ssl.d.ts.map +1 -0
  19. package/dist/cli/commands/zone.d.ts +3 -0
  20. package/dist/cli/commands/zone.d.ts.map +1 -0
  21. package/dist/cli/index.js +1674 -895
  22. package/dist/db/dns-tools.d.ts.map +1 -1
  23. package/dist/index.js +420 -92
  24. package/dist/lib/brandsight.d.ts +42 -2
  25. package/dist/lib/brandsight.d.ts.map +1 -1
  26. package/dist/lib/cloudflare.d.ts +39 -0
  27. package/dist/lib/cloudflare.d.ts.map +1 -0
  28. package/dist/lib/config.d.ts +49 -0
  29. package/dist/lib/config.d.ts.map +1 -0
  30. package/dist/lib/registrar.d.ts +22 -4
  31. package/dist/lib/registrar.d.ts.map +1 -1
  32. package/dist/lib/route53.d.ts +2 -2
  33. package/dist/lib/route53.d.ts.map +1 -1
  34. package/dist/lib/version.d.ts +3 -0
  35. package/dist/lib/version.d.ts.map +1 -0
  36. package/dist/mcp/index.js +23080 -20411
  37. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -1161,7 +1161,7 @@ var require_headStream = __commonJS((exports) => {
1161
1161
  if ((0, stream_type_check_1.isReadableStream)(stream)) {
1162
1162
  return (0, headStream_browser_1.headStream)(stream, bytes);
1163
1163
  }
1164
- return new Promise((resolve2, reject) => {
1164
+ return new Promise((resolve3, reject) => {
1165
1165
  const collector = new Collector;
1166
1166
  collector.limit = bytes;
1167
1167
  stream.pipe(collector);
@@ -1172,7 +1172,7 @@ var require_headStream = __commonJS((exports) => {
1172
1172
  collector.on("error", reject);
1173
1173
  collector.on("finish", function() {
1174
1174
  const bytes2 = new Uint8Array(Buffer.concat(this.buffers));
1175
- resolve2(bytes2);
1175
+ resolve3(bytes2);
1176
1176
  });
1177
1177
  });
1178
1178
  };
@@ -1368,21 +1368,21 @@ var require_dist_cjs13 = __commonJS((exports) => {
1368
1368
  let sendBody = true;
1369
1369
  if (!externalAgent && expect === "100-continue") {
1370
1370
  sendBody = await Promise.race([
1371
- new Promise((resolve2) => {
1372
- timeoutId = Number(timing.setTimeout(() => resolve2(true), Math.max(MIN_WAIT_TIME, maxContinueTimeoutMs)));
1371
+ new Promise((resolve3) => {
1372
+ timeoutId = Number(timing.setTimeout(() => resolve3(true), Math.max(MIN_WAIT_TIME, maxContinueTimeoutMs)));
1373
1373
  }),
1374
- new Promise((resolve2) => {
1374
+ new Promise((resolve3) => {
1375
1375
  httpRequest.on("continue", () => {
1376
1376
  timing.clearTimeout(timeoutId);
1377
- resolve2(true);
1377
+ resolve3(true);
1378
1378
  });
1379
1379
  httpRequest.on("response", () => {
1380
1380
  timing.clearTimeout(timeoutId);
1381
- resolve2(false);
1381
+ resolve3(false);
1382
1382
  });
1383
1383
  httpRequest.on("error", () => {
1384
1384
  timing.clearTimeout(timeoutId);
1385
- resolve2(false);
1385
+ resolve3(false);
1386
1386
  });
1387
1387
  })
1388
1388
  ]);
@@ -1457,13 +1457,13 @@ or increase socketAcquisitionWarningTimeout=(millis) in the NodeHttpHandler conf
1457
1457
  return socketWarningTimestamp;
1458
1458
  }
1459
1459
  constructor(options) {
1460
- this.configProvider = new Promise((resolve2, reject) => {
1460
+ this.configProvider = new Promise((resolve3, reject) => {
1461
1461
  if (typeof options === "function") {
1462
1462
  options().then((_options) => {
1463
- resolve2(this.resolveDefaultConfig(_options));
1463
+ resolve3(this.resolveDefaultConfig(_options));
1464
1464
  }).catch(reject);
1465
1465
  } else {
1466
- resolve2(this.resolveDefaultConfig(options));
1466
+ resolve3(this.resolveDefaultConfig(options));
1467
1467
  }
1468
1468
  });
1469
1469
  }
@@ -1483,7 +1483,7 @@ or increase socketAcquisitionWarningTimeout=(millis) in the NodeHttpHandler conf
1483
1483
  return new Promise((_resolve, _reject) => {
1484
1484
  let writeRequestBodyPromise = undefined;
1485
1485
  const timeouts = [];
1486
- const resolve2 = async (arg) => {
1486
+ const resolve3 = async (arg) => {
1487
1487
  await writeRequestBodyPromise;
1488
1488
  timeouts.forEach(timing.clearTimeout);
1489
1489
  _resolve(arg);
@@ -1547,7 +1547,7 @@ or increase socketAcquisitionWarningTimeout=(millis) in the NodeHttpHandler conf
1547
1547
  headers: getTransformedHeaders(res.headers),
1548
1548
  body: res
1549
1549
  });
1550
- resolve2({ response: httpResponse });
1550
+ resolve3({ response: httpResponse });
1551
1551
  });
1552
1552
  req.on("error", (err) => {
1553
1553
  if (NODEJS_TIMEOUT_ERROR_CODES.includes(err.code)) {
@@ -1759,13 +1759,13 @@ or increase socketAcquisitionWarningTimeout=(millis) in the NodeHttpHandler conf
1759
1759
  return new NodeHttp2Handler(instanceOrOptions);
1760
1760
  }
1761
1761
  constructor(options) {
1762
- this.configProvider = new Promise((resolve2, reject) => {
1762
+ this.configProvider = new Promise((resolve3, reject) => {
1763
1763
  if (typeof options === "function") {
1764
1764
  options().then((opts) => {
1765
- resolve2(opts || {});
1765
+ resolve3(opts || {});
1766
1766
  }).catch(reject);
1767
1767
  } else {
1768
- resolve2(options || {});
1768
+ resolve3(options || {});
1769
1769
  }
1770
1770
  });
1771
1771
  }
@@ -1785,7 +1785,7 @@ or increase socketAcquisitionWarningTimeout=(millis) in the NodeHttpHandler conf
1785
1785
  return new Promise((_resolve, _reject) => {
1786
1786
  let fulfilled = false;
1787
1787
  let writeRequestBodyPromise = undefined;
1788
- const resolve2 = async (arg) => {
1788
+ const resolve3 = async (arg) => {
1789
1789
  await writeRequestBodyPromise;
1790
1790
  _resolve(arg);
1791
1791
  };
@@ -1840,7 +1840,7 @@ or increase socketAcquisitionWarningTimeout=(millis) in the NodeHttpHandler conf
1840
1840
  body: req
1841
1841
  });
1842
1842
  fulfilled = true;
1843
- resolve2({ response: httpResponse });
1843
+ resolve3({ response: httpResponse });
1844
1844
  if (disableConcurrentStreams) {
1845
1845
  session.close();
1846
1846
  this.connectionManager.deleteSession(authority, session);
@@ -1917,7 +1917,7 @@ or increase socketAcquisitionWarningTimeout=(millis) in the NodeHttpHandler conf
1917
1917
  if (isReadableStreamInstance(stream)) {
1918
1918
  return collectReadableStream(stream);
1919
1919
  }
1920
- return new Promise((resolve2, reject) => {
1920
+ return new Promise((resolve3, reject) => {
1921
1921
  const collector = new Collector;
1922
1922
  stream.pipe(collector);
1923
1923
  stream.on("error", (err) => {
@@ -1927,7 +1927,7 @@ or increase socketAcquisitionWarningTimeout=(millis) in the NodeHttpHandler conf
1927
1927
  collector.on("error", reject);
1928
1928
  collector.on("finish", function() {
1929
1929
  const bytes = new Uint8Array(Buffer.concat(this.bufferedBytes));
1930
- resolve2(bytes);
1930
+ resolve3(bytes);
1931
1931
  });
1932
1932
  });
1933
1933
  };
@@ -1968,7 +1968,7 @@ var require_dist_cjs14 = __commonJS((exports) => {
1968
1968
  return new Request(url, requestOptions);
1969
1969
  }
1970
1970
  function requestTimeout(timeoutInMs = 0) {
1971
- return new Promise((resolve2, reject) => {
1971
+ return new Promise((resolve3, reject) => {
1972
1972
  if (timeoutInMs) {
1973
1973
  setTimeout(() => {
1974
1974
  const timeoutError = new Error(`Request did not complete within ${timeoutInMs} ms`);
@@ -2084,7 +2084,7 @@ var require_dist_cjs14 = __commonJS((exports) => {
2084
2084
  requestTimeout(requestTimeoutInMs)
2085
2085
  ];
2086
2086
  if (abortSignal) {
2087
- raceOfPromises.push(new Promise((resolve2, reject) => {
2087
+ raceOfPromises.push(new Promise((resolve3, reject) => {
2088
2088
  const onAbort = () => {
2089
2089
  const abortError = buildAbortError(abortSignal);
2090
2090
  reject(abortError);
@@ -2164,7 +2164,7 @@ var require_dist_cjs14 = __commonJS((exports) => {
2164
2164
  return collected;
2165
2165
  }
2166
2166
  function readToBase64(blob) {
2167
- return new Promise((resolve2, reject) => {
2167
+ return new Promise((resolve3, reject) => {
2168
2168
  const reader = new FileReader;
2169
2169
  reader.onloadend = () => {
2170
2170
  if (reader.readyState !== 2) {
@@ -2173,7 +2173,7 @@ var require_dist_cjs14 = __commonJS((exports) => {
2173
2173
  const result = reader.result ?? "";
2174
2174
  const commaIndex = result.indexOf(",");
2175
2175
  const dataOffset = commaIndex > -1 ? commaIndex + 1 : result.length;
2176
- resolve2(result.substring(dataOffset));
2176
+ resolve3(result.substring(dataOffset));
2177
2177
  };
2178
2178
  reader.onabort = () => reject(new Error("Read aborted"));
2179
2179
  reader.onerror = () => reject(reader.error);
@@ -3380,11 +3380,11 @@ var require_tslib = __commonJS((exports, module) => {
3380
3380
  };
3381
3381
  __awaiter = function(thisArg, _arguments, P, generator) {
3382
3382
  function adopt(value) {
3383
- return value instanceof P ? value : new P(function(resolve2) {
3384
- resolve2(value);
3383
+ return value instanceof P ? value : new P(function(resolve3) {
3384
+ resolve3(value);
3385
3385
  });
3386
3386
  }
3387
- return new (P || (P = Promise))(function(resolve2, reject) {
3387
+ return new (P || (P = Promise))(function(resolve3, reject) {
3388
3388
  function fulfilled(value) {
3389
3389
  try {
3390
3390
  step(generator.next(value));
@@ -3400,7 +3400,7 @@ var require_tslib = __commonJS((exports, module) => {
3400
3400
  }
3401
3401
  }
3402
3402
  function step(result) {
3403
- result.done ? resolve2(result.value) : adopt(result.value).then(fulfilled, rejected);
3403
+ result.done ? resolve3(result.value) : adopt(result.value).then(fulfilled, rejected);
3404
3404
  }
3405
3405
  step((generator = generator.apply(thisArg, _arguments || [])).next());
3406
3406
  });
@@ -3629,14 +3629,14 @@ var require_tslib = __commonJS((exports, module) => {
3629
3629
  }, i);
3630
3630
  function verb(n) {
3631
3631
  i[n] = o[n] && function(v) {
3632
- return new Promise(function(resolve2, reject) {
3633
- v = o[n](v), settle(resolve2, reject, v.done, v.value);
3632
+ return new Promise(function(resolve3, reject) {
3633
+ v = o[n](v), settle(resolve3, reject, v.done, v.value);
3634
3634
  });
3635
3635
  };
3636
3636
  }
3637
- function settle(resolve2, reject, d, v) {
3637
+ function settle(resolve3, reject, d, v) {
3638
3638
  Promise.resolve(v).then(function(v2) {
3639
- resolve2({ value: v2, done: d });
3639
+ resolve3({ value: v2, done: d });
3640
3640
  }, reject);
3641
3641
  }
3642
3642
  };
@@ -13322,7 +13322,7 @@ var require_dist_cjs31 = __commonJS((exports) => {
13322
13322
  this.refillTokenBucket();
13323
13323
  if (amount > this.currentCapacity) {
13324
13324
  const delay = (amount - this.currentCapacity) / this.fillRate * 1000;
13325
- await new Promise((resolve2) => DefaultRateLimiter.setTimeoutFn(resolve2, delay));
13325
+ await new Promise((resolve3) => DefaultRateLimiter.setTimeoutFn(resolve3, delay));
13326
13326
  }
13327
13327
  this.currentCapacity = this.currentCapacity - amount;
13328
13328
  }
@@ -13616,7 +13616,7 @@ var require_dist_cjs32 = __commonJS((exports) => {
13616
13616
  }
13617
13617
  }
13618
13618
  }
13619
- var USER_AGENT = "user-agent";
13619
+ var USER_AGENT2 = "user-agent";
13620
13620
  var X_AMZ_USER_AGENT = "x-amz-user-agent";
13621
13621
  var SPACE = " ";
13622
13622
  var UA_NAME_SEPARATOR = "/";
@@ -13664,9 +13664,9 @@ var require_dist_cjs32 = __commonJS((exports) => {
13664
13664
  ].join(SPACE);
13665
13665
  if (options.runtime !== "browser") {
13666
13666
  if (normalUAValue) {
13667
- headers[X_AMZ_USER_AGENT] = headers[X_AMZ_USER_AGENT] ? `${headers[USER_AGENT]} ${normalUAValue}` : normalUAValue;
13667
+ headers[X_AMZ_USER_AGENT] = headers[X_AMZ_USER_AGENT] ? `${headers[USER_AGENT2]} ${normalUAValue}` : normalUAValue;
13668
13668
  }
13669
- headers[USER_AGENT] = sdkUserAgentValue;
13669
+ headers[USER_AGENT2] = sdkUserAgentValue;
13670
13670
  } else {
13671
13671
  headers[X_AMZ_USER_AGENT] = sdkUserAgentValue;
13672
13672
  }
@@ -14768,7 +14768,7 @@ var require_dist_cjs40 = __commonJS((exports) => {
14768
14768
  const delayFromResponse = getDelayFromRetryAfterHeader(err.$response);
14769
14769
  const delay = Math.max(delayFromResponse || 0, delayFromDecider);
14770
14770
  totalDelay += delay;
14771
- await new Promise((resolve2) => setTimeout(resolve2, delay));
14771
+ await new Promise((resolve3) => setTimeout(resolve3, delay));
14772
14772
  continue;
14773
14773
  }
14774
14774
  if (!err.$metadata) {
@@ -14920,7 +14920,7 @@ var require_dist_cjs40 = __commonJS((exports) => {
14920
14920
  attempts = retryToken.getRetryCount();
14921
14921
  const delay = retryToken.getRetryDelay();
14922
14922
  totalRetryDelay += delay;
14923
- await new Promise((resolve2) => setTimeout(resolve2, delay));
14923
+ await new Promise((resolve3) => setTimeout(resolve3, delay));
14924
14924
  }
14925
14925
  }
14926
14926
  } else {
@@ -15043,7 +15043,7 @@ var init_dist_es = __esm(() => {
15043
15043
  import { Buffer as Buffer2 } from "buffer";
15044
15044
  import { request } from "http";
15045
15045
  function httpRequest(options) {
15046
- return new Promise((resolve2, reject) => {
15046
+ return new Promise((resolve3, reject) => {
15047
15047
  const req = request({
15048
15048
  method: "GET",
15049
15049
  ...options,
@@ -15068,7 +15068,7 @@ function httpRequest(options) {
15068
15068
  chunks.push(chunk);
15069
15069
  });
15070
15070
  res.on("end", () => {
15071
- resolve2(Buffer2.concat(chunks));
15071
+ resolve3(Buffer2.concat(chunks));
15072
15072
  req.destroy();
15073
15073
  });
15074
15074
  });
@@ -15529,7 +15529,7 @@ var retryWrapper = (toRetry, maxRetries, delayMs) => {
15529
15529
  try {
15530
15530
  return await toRetry();
15531
15531
  } catch (e) {
15532
- await new Promise((resolve2) => setTimeout(resolve2, delayMs));
15532
+ await new Promise((resolve3) => setTimeout(resolve3, delayMs));
15533
15533
  }
15534
15534
  }
15535
15535
  return await toRetry();
@@ -15839,12 +15839,12 @@ var require_dist_cjs41 = __commonJS((exports) => {
15839
15839
  }
15840
15840
  return ["md/nodejs", node_process.versions.node];
15841
15841
  };
15842
- var getNodeModulesParentDirs = (dirname3) => {
15842
+ var getNodeModulesParentDirs = (dirname4) => {
15843
15843
  const cwd = process.cwd();
15844
- if (!dirname3) {
15844
+ if (!dirname4) {
15845
15845
  return [cwd];
15846
15846
  }
15847
- const normalizedPath = node_path.normalize(dirname3);
15847
+ const normalizedPath = node_path.normalize(dirname4);
15848
15848
  const parts = normalizedPath.split(node_path.sep);
15849
15849
  const nodeModulesIndex = parts.indexOf("node_modules");
15850
15850
  const parentDir = nodeModulesIndex !== -1 ? parts.slice(0, nodeModulesIndex).join(node_path.sep) : normalizedPath;
@@ -15891,8 +15891,8 @@ var require_dist_cjs41 = __commonJS((exports) => {
15891
15891
  tscVersion = null;
15892
15892
  return;
15893
15893
  }
15894
- const dirname3 = typeof __dirname !== "undefined" ? __dirname : undefined;
15895
- const nodeModulesParentDirs = getNodeModulesParentDirs(dirname3);
15894
+ const dirname4 = typeof __dirname !== "undefined" ? __dirname : undefined;
15895
+ const nodeModulesParentDirs = getNodeModulesParentDirs(dirname4);
15896
15896
  let versionFromApp;
15897
15897
  for (const nodeModulesParentDir of nodeModulesParentDirs) {
15898
15898
  try {
@@ -21635,7 +21635,7 @@ var require_signin = __commonJS((exports) => {
21635
21635
  import { createHash, createPrivateKey, createPublicKey, sign } from "crypto";
21636
21636
  import { promises as fs2 } from "fs";
21637
21637
  import { homedir as homedir6 } from "os";
21638
- import { dirname as dirname3, join as join7 } from "path";
21638
+ import { dirname as dirname4, join as join7 } from "path";
21639
21639
  var import_property_provider18, import_protocol_http2, import_shared_ini_file_loader6, LoginCredentialsFetcher;
21640
21640
  var init_LoginCredentialsFetcher = __esm(() => {
21641
21641
  import_property_provider18 = __toESM(require_dist_cjs23(), 1);
@@ -21788,7 +21788,7 @@ var init_LoginCredentialsFetcher = __esm(() => {
21788
21788
  }
21789
21789
  async saveToken(token) {
21790
21790
  const tokenFilePath = this.getTokenFilePath();
21791
- const directory = dirname3(tokenFilePath);
21791
+ const directory = dirname4(tokenFilePath);
21792
21792
  try {
21793
21793
  await fs2.mkdir(directory, { recursive: true });
21794
21794
  } catch (error) {}
@@ -22104,7 +22104,7 @@ var fromWebToken = (init) => async (awsIdentityProperties) => {
22104
22104
  };
22105
22105
 
22106
22106
  // node_modules/@aws-sdk/credential-provider-web-identity/dist-es/fromTokenFile.js
22107
- import { readFileSync as readFileSync2 } from "fs";
22107
+ import { readFileSync as readFileSync3 } from "fs";
22108
22108
  var import_client12, import_property_provider21, import_shared_ini_file_loader10, ENV_TOKEN_FILE = "AWS_WEB_IDENTITY_TOKEN_FILE", ENV_ROLE_ARN = "AWS_ROLE_ARN", ENV_ROLE_SESSION_NAME = "AWS_ROLE_SESSION_NAME", fromTokenFile = (init = {}) => async (awsIdentityProperties) => {
22109
22109
  init.logger?.debug("@aws-sdk/credential-provider-web-identity - fromTokenFile");
22110
22110
  const webIdentityTokenFile = init?.webIdentityTokenFile ?? process.env[ENV_TOKEN_FILE];
@@ -22117,7 +22117,7 @@ var import_client12, import_property_provider21, import_shared_ini_file_loader10
22117
22117
  }
22118
22118
  const credentials = await fromWebToken({
22119
22119
  ...init,
22120
- webIdentityToken: import_shared_ini_file_loader10.externalDataInterceptor?.getTokenRecord?.()[webIdentityTokenFile] ?? readFileSync2(webIdentityTokenFile, { encoding: "ascii" }),
22120
+ webIdentityToken: import_shared_ini_file_loader10.externalDataInterceptor?.getTokenRecord?.()[webIdentityTokenFile] ?? readFileSync3(webIdentityTokenFile, { encoding: "ascii" }),
22121
22121
  roleArn,
22122
22122
  roleSessionName
22123
22123
  })(awsIdentityProperties);
@@ -32133,6 +32133,28 @@ function deleteAlert(id) {
32133
32133
  }
32134
32134
  // src/db/dns-tools.ts
32135
32135
  import { execSync } from "child_process";
32136
+
32137
+ // src/lib/version.ts
32138
+ import { readFileSync as readFileSync2 } from "fs";
32139
+ import { dirname as dirname3, resolve as resolve2 } from "path";
32140
+ import { fileURLToPath } from "url";
32141
+ var cachedVersion = null;
32142
+ function getPackageVersion() {
32143
+ if (cachedVersion)
32144
+ return cachedVersion;
32145
+ try {
32146
+ const moduleDir = dirname3(fileURLToPath(import.meta.url));
32147
+ const packageJsonPath = resolve2(moduleDir, "../../package.json");
32148
+ const pkg = JSON.parse(readFileSync2(packageJsonPath, "utf8"));
32149
+ cachedVersion = pkg.version ?? "0.0.0";
32150
+ } catch {
32151
+ cachedVersion = "0.0.0";
32152
+ }
32153
+ return cachedVersion;
32154
+ }
32155
+ var USER_AGENT = `open-domains/${getPackageVersion()}`;
32156
+
32157
+ // src/db/dns-tools.ts
32136
32158
  function whoisLookup(domainName) {
32137
32159
  let raw;
32138
32160
  try {
@@ -32346,7 +32368,7 @@ async function discoverSubdomains(domain) {
32346
32368
  const url = `https://crt.sh/?q=%25.${encodeURIComponent(domain)}&output=json`;
32347
32369
  const response = await fetch(url, {
32348
32370
  signal: AbortSignal.timeout(15000),
32349
- headers: { "User-Agent": "open-domains/0.0.1" }
32371
+ headers: { "User-Agent": USER_AGENT }
32350
32372
  });
32351
32373
  if (!response.ok) {
32352
32374
  return {
@@ -39662,6 +39684,283 @@ function createRoute53Provider(config) {
39662
39684
  };
39663
39685
  }
39664
39686
 
39687
+ // src/lib/cloudflare.ts
39688
+ function getConfig3() {
39689
+ return {
39690
+ apiToken: process.env["CLOUDFLARE_API_TOKEN"],
39691
+ accountId: process.env["CLOUDFLARE_ACCOUNT_ID"]
39692
+ };
39693
+ }
39694
+ function checkCredentials2(cfg) {
39695
+ if (!cfg.apiToken) {
39696
+ throw new Error("Cloudflare credentials not configured. Set CLOUDFLARE_API_TOKEN environment variable.");
39697
+ }
39698
+ }
39699
+ var CF_BASE = "https://api.cloudflare.com/client/v4";
39700
+ async function cfFetch(path, opts = {}) {
39701
+ const cfg = opts.config ?? getConfig3();
39702
+ checkCredentials2(cfg);
39703
+ const res = await fetch(`${CF_BASE}${path}`, {
39704
+ method: opts.method ?? "GET",
39705
+ headers: {
39706
+ Authorization: `Bearer ${cfg.apiToken}`,
39707
+ "Content-Type": "application/json"
39708
+ },
39709
+ body: opts.body ? JSON.stringify(opts.body) : undefined
39710
+ });
39711
+ const json = await res.json();
39712
+ if (!json.success) {
39713
+ const msg = json.errors?.[0]?.message ?? `Cloudflare API error (${res.status})`;
39714
+ throw new Error(msg);
39715
+ }
39716
+ return json.result;
39717
+ }
39718
+ async function getZone(domain, config) {
39719
+ const result = await cfFetch(`/zones?name=${encodeURIComponent(domain)}`, { config });
39720
+ if (!result || result.length === 0)
39721
+ return null;
39722
+ const z2 = result[0];
39723
+ return { id: z2.id, name: z2.name, status: z2.status, nameservers: z2.name_servers, original_nameservers: z2.original_name_servers };
39724
+ }
39725
+ async function listRecords2(zoneId, config) {
39726
+ const records = [];
39727
+ let page = 1;
39728
+ while (true) {
39729
+ const result = await cfFetch(`/zones/${zoneId}/dns_records?per_page=100&page=${page}`, { config });
39730
+ if (!result || result.length === 0)
39731
+ break;
39732
+ for (const r3 of result) {
39733
+ records.push({ id: r3.id, type: r3.type, name: r3.name, content: r3.content, ttl: r3.ttl, priority: r3.priority, proxied: r3.proxied });
39734
+ }
39735
+ if (result.length < 100)
39736
+ break;
39737
+ page++;
39738
+ }
39739
+ return records;
39740
+ }
39741
+ async function upsertRecord2(zoneId, record, config) {
39742
+ const existing = await cfFetch(`/zones/${zoneId}/dns_records?type=${record.type}&name=${encodeURIComponent(record.name)}`, { config });
39743
+ const body = {
39744
+ type: record.type,
39745
+ name: record.name,
39746
+ content: record.content,
39747
+ ttl: record.ttl ?? 1,
39748
+ priority: record.priority,
39749
+ proxied: record.proxied ?? false
39750
+ };
39751
+ if (existing && existing.length > 0) {
39752
+ await cfFetch(`/zones/${zoneId}/dns_records/${existing[0].id}`, { method: "PUT", body, config });
39753
+ } else {
39754
+ await cfFetch(`/zones/${zoneId}/dns_records`, { method: "POST", body, config });
39755
+ }
39756
+ }
39757
+ function createCloudflareProvider(config) {
39758
+ const cfg = config ?? getConfig3();
39759
+ return {
39760
+ name: "cloudflare",
39761
+ async getDnsRecords(domain) {
39762
+ const zone = await getZone(domain, cfg);
39763
+ if (!zone)
39764
+ return [];
39765
+ const records = await listRecords2(zone.id, cfg);
39766
+ return records.map((r3) => ({
39767
+ type: r3.type,
39768
+ name: r3.name,
39769
+ value: r3.content,
39770
+ ttl: r3.ttl === 1 ? 0 : r3.ttl,
39771
+ priority: r3.priority
39772
+ }));
39773
+ },
39774
+ async setDnsRecords(domain, records) {
39775
+ const zone = await getZone(domain, cfg);
39776
+ if (!zone)
39777
+ throw new Error(`No Cloudflare zone found for ${domain}`);
39778
+ for (const r3 of records) {
39779
+ await upsertRecord2(zone.id, { type: r3.type, name: r3.name, content: r3.value, ttl: r3.ttl || 1, priority: r3.priority }, cfg);
39780
+ }
39781
+ return true;
39782
+ }
39783
+ };
39784
+ }
39785
+
39786
+ // src/lib/brandsight.ts
39787
+ class BrandsightApiError extends Error {
39788
+ statusCode;
39789
+ responseBody;
39790
+ constructor(message, statusCode, responseBody) {
39791
+ super(message);
39792
+ this.statusCode = statusCode;
39793
+ this.responseBody = responseBody;
39794
+ this.name = "BrandsightApiError";
39795
+ }
39796
+ }
39797
+ var _fetchFn = null;
39798
+ function getConfig4() {
39799
+ return {
39800
+ apiKey: process.env["BRANDSIGHT_API_KEY"] ?? "",
39801
+ accountId: process.env["BRANDSIGHT_ACCOUNT_ID"]
39802
+ };
39803
+ }
39804
+ var BRANDSIGHT_BASE = "https://api.brandsight.com/v1";
39805
+ async function apiRequest3(method, path, apiKey, body, baseUrl = BRANDSIGHT_BASE) {
39806
+ const fetchFn = _fetchFn || globalThis.fetch;
39807
+ const url = `${baseUrl}${path}`;
39808
+ const headers = {
39809
+ Authorization: `Bearer ${apiKey}`,
39810
+ "Content-Type": "application/json",
39811
+ Accept: "application/json",
39812
+ "User-Agent": USER_AGENT
39813
+ };
39814
+ try {
39815
+ const response = await fetchFn(url, {
39816
+ method,
39817
+ headers,
39818
+ body: body ? JSON.stringify(body) : undefined,
39819
+ signal: AbortSignal.timeout(15000)
39820
+ });
39821
+ if (!response.ok) {
39822
+ throw new BrandsightApiError(`Brandsight API ${method} ${path} failed with status ${response.status}`, response.status, await response.text());
39823
+ }
39824
+ const data = await response.json();
39825
+ return { data, stub: false };
39826
+ } catch (error) {
39827
+ if (error instanceof BrandsightApiError)
39828
+ throw error;
39829
+ return { data: null, stub: true };
39830
+ }
39831
+ }
39832
+ async function apiGet(path, apiKey, baseUrl = BRANDSIGHT_BASE) {
39833
+ const fetchFn = _fetchFn || globalThis.fetch;
39834
+ const url = `${baseUrl}${path}`;
39835
+ const headers = {
39836
+ Authorization: `Bearer ${apiKey}`,
39837
+ "Content-Type": "application/json",
39838
+ Accept: "application/json",
39839
+ "User-Agent": USER_AGENT
39840
+ };
39841
+ try {
39842
+ const response = await fetchFn(url, {
39843
+ method: "GET",
39844
+ headers,
39845
+ signal: AbortSignal.timeout(15000)
39846
+ });
39847
+ if (!response.ok) {
39848
+ throw new BrandsightApiError(`Brandsight API GET ${path} failed with status ${response.status}`, response.status, await response.text());
39849
+ }
39850
+ const data = await response.json();
39851
+ return { data, stub: false };
39852
+ } catch (error) {
39853
+ if (error instanceof BrandsightApiError)
39854
+ throw error;
39855
+ return { data: null, stub: true };
39856
+ }
39857
+ }
39858
+ async function listDomains2(config) {
39859
+ const cfg = config ?? getConfig4();
39860
+ const result = await apiGet("/portfolio/domains", cfg.apiKey);
39861
+ if (result.stub)
39862
+ return [];
39863
+ return result.data.domains ?? [];
39864
+ }
39865
+ async function getDomainInfo3(domain, config) {
39866
+ const cfg = config ?? getConfig4();
39867
+ const result = await apiGet(`/portfolio/domains/${encodeURIComponent(domain)}`, cfg.apiKey);
39868
+ if (result.stub)
39869
+ return null;
39870
+ return result.data;
39871
+ }
39872
+ async function checkAvailability4(domain, config) {
39873
+ const cfg = config ?? getConfig4();
39874
+ const result = await apiGet(`/domains/check?domain=${encodeURIComponent(domain)}`, cfg.apiKey);
39875
+ if (result.stub)
39876
+ return { domain, available: false };
39877
+ return result.data;
39878
+ }
39879
+ async function renewDomain3(domain, years = 1, config) {
39880
+ const cfg = config ?? getConfig4();
39881
+ const result = await apiRequest3("POST", `/portfolio/domains/${encodeURIComponent(domain)}/renew`, cfg.apiKey, { years });
39882
+ if (result.stub)
39883
+ return { success: false };
39884
+ return { success: true, orderId: result.data.orderId };
39885
+ }
39886
+ async function syncToLocalDb3(dbFns, config) {
39887
+ const domains = await listDomains2(config);
39888
+ let synced = 0, created = 0, updated = 0;
39889
+ const errors = [];
39890
+ for (const d3 of domains) {
39891
+ try {
39892
+ const existing = dbFns.getDomainByName(d3.domain);
39893
+ if (existing) {
39894
+ dbFns.updateDomain(existing.id, {
39895
+ registrar: "Brandsight",
39896
+ expires_at: d3.expires || undefined,
39897
+ auto_renew: d3.auto_renew,
39898
+ status: "active",
39899
+ nameservers: d3.nameservers
39900
+ });
39901
+ updated++;
39902
+ } else {
39903
+ dbFns.createDomain({
39904
+ name: d3.domain,
39905
+ registrar: "Brandsight",
39906
+ expires_at: d3.expires || undefined,
39907
+ auto_renew: d3.auto_renew,
39908
+ status: "active",
39909
+ nameservers: d3.nameservers
39910
+ });
39911
+ created++;
39912
+ }
39913
+ synced++;
39914
+ } catch (err) {
39915
+ errors.push(`${d3.domain}: ${err instanceof Error ? err.message : String(err)}`);
39916
+ }
39917
+ }
39918
+ return { synced, created, updated, errors };
39919
+ }
39920
+ function createBrandsightProvider(config) {
39921
+ const cfg = config ?? getConfig4();
39922
+ return {
39923
+ name: "brandsight",
39924
+ async listDomains() {
39925
+ const domains = await listDomains2(cfg);
39926
+ return domains.map((d3) => ({
39927
+ domain: d3.domain,
39928
+ registrar: "Brandsight",
39929
+ created: "",
39930
+ expires: d3.expires,
39931
+ nameservers: d3.nameservers,
39932
+ status: d3.status === "ACTIVE" ? "active" : d3.status.toLowerCase(),
39933
+ auto_renew: d3.auto_renew
39934
+ }));
39935
+ },
39936
+ async getDomainInfo(domain) {
39937
+ const d3 = await getDomainInfo3(domain, cfg);
39938
+ if (!d3)
39939
+ throw new Error(`Domain not found in Brandsight: ${domain}`);
39940
+ return {
39941
+ domain: d3.domain,
39942
+ registrar: "Brandsight",
39943
+ created: "",
39944
+ expires: d3.expires,
39945
+ nameservers: d3.nameservers,
39946
+ status: d3.status === "ACTIVE" ? "active" : d3.status.toLowerCase(),
39947
+ auto_renew: d3.auto_renew
39948
+ };
39949
+ },
39950
+ async renewDomain(domain) {
39951
+ const result = await renewDomain3(domain, 1, cfg);
39952
+ return { domain, success: result.success, orderId: result.orderId };
39953
+ },
39954
+ async checkAvailability(domain) {
39955
+ const result = await checkAvailability4(domain, cfg);
39956
+ return { domain: result.domain, available: result.available };
39957
+ },
39958
+ async syncToLocalDb(dbFns) {
39959
+ return syncToLocalDb3(dbFns, cfg);
39960
+ }
39961
+ };
39962
+ }
39963
+
39665
39964
  // src/lib/registrar.ts
39666
39965
  function createNamecheapProvider() {
39667
39966
  return {
@@ -39814,52 +40113,80 @@ function createGoDaddyProvider() {
39814
40113
  }
39815
40114
  };
39816
40115
  }
39817
- function getProvider(name) {
39818
- switch (name) {
39819
- case "namecheap":
39820
- return createNamecheapProvider();
39821
- case "godaddy":
39822
- return createGoDaddyProvider();
39823
- case "route53":
39824
- return createRoute53Provider();
39825
- default:
39826
- throw new Error(`Unknown registrar provider: ${name}`);
39827
- }
39828
- }
39829
- function getAvailableProviders() {
39830
- return [
39831
- {
40116
+ var providerRegistry = new Map([
40117
+ ["namecheap", {
40118
+ info: {
39832
40119
  name: "namecheap",
39833
- configured: !!(process.env["NAMECHEAP_API_KEY"] && process.env["NAMECHEAP_USERNAME"] && process.env["NAMECHEAP_CLIENT_IP"]),
40120
+ type: "full",
40121
+ configured: false,
39834
40122
  envVars: ["NAMECHEAP_API_KEY", "NAMECHEAP_USERNAME", "NAMECHEAP_CLIENT_IP"]
39835
40123
  },
39836
- {
40124
+ createRegistrar: createNamecheapProvider,
40125
+ createDns: createNamecheapProvider
40126
+ }],
40127
+ ["godaddy", {
40128
+ info: {
39837
40129
  name: "godaddy",
39838
- configured: !!(process.env["GODADDY_API_KEY"] && process.env["GODADDY_API_SECRET"]),
40130
+ type: "full",
40131
+ configured: false,
39839
40132
  envVars: ["GODADDY_API_KEY", "GODADDY_API_SECRET"]
39840
40133
  },
39841
- {
40134
+ createRegistrar: createGoDaddyProvider,
40135
+ createDns: createGoDaddyProvider
40136
+ }],
40137
+ ["route53", {
40138
+ info: {
39842
40139
  name: "route53",
39843
- configured: !!(process.env["AWS_ACCESS_KEY_ID"] && process.env["AWS_SECRET_ACCESS_KEY"]),
40140
+ type: "full",
40141
+ configured: false,
39844
40142
  envVars: ["AWS_ACCESS_KEY_ID", "AWS_SECRET_ACCESS_KEY", "AWS_REGION"]
39845
40143
  },
39846
- {
40144
+ createRegistrar: () => createRoute53Provider(),
40145
+ createDns: () => createRoute53Provider()
40146
+ }],
40147
+ ["cloudflare", {
40148
+ info: {
40149
+ name: "cloudflare",
40150
+ type: "dns",
40151
+ configured: false,
40152
+ envVars: ["CLOUDFLARE_API_TOKEN", "CLOUDFLARE_ACCOUNT_ID"]
40153
+ },
40154
+ createDns: createCloudflareProvider
40155
+ }],
40156
+ ["brandsight", {
40157
+ info: {
39847
40158
  name: "brandsight",
39848
- configured: !!process.env["BRANDSIGHT_API_KEY"],
39849
- envVars: ["BRANDSIGHT_API_KEY"]
39850
- }
39851
- ];
40159
+ type: "registrar",
40160
+ configured: false,
40161
+ envVars: ["BRANDSIGHT_API_KEY", "BRANDSIGHT_ACCOUNT_ID"]
40162
+ },
40163
+ createRegistrar: createBrandsightProvider
40164
+ }]
40165
+ ]);
40166
+ function isConfigured(envVars) {
40167
+ return envVars.slice(0, 2).every((v3) => !!process.env[v3]);
40168
+ }
40169
+ function getAvailableProviders() {
40170
+ return Array.from(providerRegistry.values()).map((e3) => ({
40171
+ ...e3.info,
40172
+ configured: isConfigured(e3.info.envVars)
40173
+ }));
40174
+ }
40175
+ function getRegistrarProvider(name) {
40176
+ const entry = providerRegistry.get(name);
40177
+ if (!entry?.createRegistrar)
40178
+ throw new Error(`No registrar provider: ${name}`);
40179
+ return entry.createRegistrar();
40180
+ }
40181
+ function getProvider(name) {
40182
+ return getRegistrarProvider(name);
39852
40183
  }
39853
40184
  async function syncAll(dbFns) {
39854
- const available = getAvailableProviders().filter((p3) => p3.configured && (p3.name === "namecheap" || p3.name === "godaddy" || p3.name === "route53"));
39855
- const result = {
39856
- providers: [],
39857
- totalSynced: 0,
39858
- totalErrors: []
39859
- };
40185
+ const available = getAvailableProviders().filter((p3) => p3.configured && (p3.type === "registrar" || p3.type === "full") && p3.name !== "brandsight");
40186
+ const result = { providers: [], totalSynced: 0, totalErrors: [] };
39860
40187
  for (const info of available) {
39861
40188
  try {
39862
- const provider = getProvider(info.name);
40189
+ const provider = getRegistrarProvider(info.name);
39863
40190
  const syncResult = await provider.syncToLocalDb(dbFns);
39864
40191
  result.providers.push({ name: info.name, result: syncResult });
39865
40192
  result.totalSynced += syncResult.synced;
@@ -39867,25 +40194,26 @@ async function syncAll(dbFns) {
39867
40194
  } catch (error) {
39868
40195
  const msg = `[${info.name}] Sync failed: ${error instanceof Error ? error.message : String(error)}`;
39869
40196
  result.totalErrors.push(msg);
39870
- result.providers.push({
39871
- name: info.name,
39872
- result: { synced: 0, created: 0, updated: 0, errors: [msg] }
39873
- });
40197
+ result.providers.push({ name: info.name, result: { synced: 0, created: 0, updated: 0, errors: [msg] } });
39874
40198
  }
39875
40199
  }
39876
40200
  return result;
39877
40201
  }
39878
40202
  function autoDetectRegistrar(domain, getDomainByName2) {
39879
40203
  const dbDomain = getDomainByName2(domain);
39880
- if (!dbDomain || !dbDomain.registrar)
40204
+ if (!dbDomain?.registrar)
39881
40205
  return null;
39882
- const registrar = dbDomain.registrar.toLowerCase();
39883
- if (registrar.includes("namecheap"))
40206
+ const r3 = dbDomain.registrar.toLowerCase();
40207
+ if (r3.includes("namecheap"))
39884
40208
  return "namecheap";
39885
- if (registrar.includes("godaddy"))
40209
+ if (r3.includes("godaddy"))
39886
40210
  return "godaddy";
39887
- if (registrar.includes("route 53") || registrar.includes("route53") || registrar.includes("aws"))
40211
+ if (r3.includes("route 53") || r3.includes("route53") || r3.includes("aws"))
39888
40212
  return "route53";
40213
+ if (r3.includes("cloudflare"))
40214
+ return "cloudflare";
40215
+ if (r3.includes("brandsight"))
40216
+ return "brandsight";
39889
40217
  return null;
39890
40218
  }
39891
40219
  export {