@hasna/domains
Version:
Domain portfolio, registrar, marketplace, and DNS management for AI agents — CLI + MCP + HTTP API + SDK, shared account API and PostgreSQL
140 lines (138 loc) • 5.06 kB
JavaScript
// src/lib/env-aliases.ts
function firstEnv(env, names) {
for (const key of names) {
const value = env[key];
if (value)
return { key, value };
}
return;
}
function hasEveryEnv(env, groups) {
return groups.every((names) => !!firstEnv(env, names));
}
function flattenEnvNames(groups) {
return Array.from(new Set(groups.flatMap((names) => [...names])));
}
var NAMECHEAP_ENV = {
apiKey: ["NAMECHEAP_API_KEY"],
username: ["NAMECHEAP_USERNAME"],
clientIp: ["NAMECHEAP_CLIENT_IP"]
};
var GODADDY_ENV = {
apiKey: ["GODADDY_API_KEY"],
apiSecret: ["GODADDY_API_SECRET"]
};
var BRANDSIGHT_ENV = {
apiKey: ["BRANDSIGHT_API_KEY"],
apiSecret: ["BRANDSIGHT_API_SECRET"],
customerId: ["BRANDSIGHT_CUSTOMER_ID"],
shopperId: ["BRANDSIGHT_SHOPPER_ID"],
accountId: ["BRANDSIGHT_ACCOUNT_ID"]
};
var SEDO_ENV = {
partnerId: ["SEDO_PARTNER_ID"],
signKey: ["SEDO_API_KEY", "SEDO_SIGN_KEY"],
username: ["SEDO_USERNAME", "SEDO_EMAIL"],
password: ["SEDO_PASSWORD"]
};
var CLOUDFLARE_ENV = {
apiToken: ["CLOUDFLARE_API_TOKEN"],
apiKey: ["CLOUDFLARE_API_KEY"],
email: ["CLOUDFLARE_EMAIL"],
accountId: ["CLOUDFLARE_ACCOUNT_ID"]
};
var ROUTE53_ENV = {
accessKeyId: ["ROUTE53_ACCESS_KEY_ID", "AWS_ACCESS_KEY_ID"],
secretAccessKey: ["ROUTE53_SECRET_ACCESS_KEY", "AWS_SECRET_ACCESS_KEY"],
sessionToken: ["ROUTE53_SESSION_TOKEN", "AWS_SESSION_TOKEN"],
profile: ["ROUTE53_AWS_PROFILE", "AWS_PROFILE"],
region: ["ROUTE53_REGION", "ROUTE53_AWS_REGION", "AWS_REGION"],
webIdentityTokenFile: ["AWS_WEB_IDENTITY_TOKEN_FILE"],
roleArn: ["AWS_ROLE_ARN"],
containerCredentials: [
"AWS_CONTAINER_CREDENTIALS_RELATIVE_URI",
"AWS_CONTAINER_CREDENTIALS_FULL_URI"
]
};
function providerEnvNames(provider) {
switch (provider.toLowerCase()) {
case "namecheap":
return flattenEnvNames([NAMECHEAP_ENV.apiKey, NAMECHEAP_ENV.username, NAMECHEAP_ENV.clientIp]);
case "godaddy":
return flattenEnvNames([GODADDY_ENV.apiKey, GODADDY_ENV.apiSecret]);
case "brandsight":
return flattenEnvNames([
BRANDSIGHT_ENV.apiKey,
BRANDSIGHT_ENV.apiSecret,
BRANDSIGHT_ENV.customerId,
BRANDSIGHT_ENV.shopperId,
BRANDSIGHT_ENV.accountId
]);
case "sedo":
return flattenEnvNames([SEDO_ENV.partnerId, SEDO_ENV.signKey, SEDO_ENV.username, SEDO_ENV.password]);
case "cloudflare":
return flattenEnvNames([CLOUDFLARE_ENV.apiToken, CLOUDFLARE_ENV.apiKey, CLOUDFLARE_ENV.email, CLOUDFLARE_ENV.accountId]);
case "route53":
return flattenEnvNames([
ROUTE53_ENV.profile,
ROUTE53_ENV.accessKeyId,
ROUTE53_ENV.secretAccessKey,
ROUTE53_ENV.sessionToken,
ROUTE53_ENV.region,
ROUTE53_ENV.webIdentityTokenFile,
ROUTE53_ENV.roleArn,
ROUTE53_ENV.containerCredentials
]);
default:
return [];
}
}
function hasProviderCredentials(provider, env = process.env) {
switch (provider.toLowerCase()) {
case "namecheap":
return hasEveryEnv(env, [NAMECHEAP_ENV.apiKey, NAMECHEAP_ENV.username, NAMECHEAP_ENV.clientIp]);
case "godaddy":
return hasEveryEnv(env, [GODADDY_ENV.apiKey, GODADDY_ENV.apiSecret]);
case "brandsight":
return hasEveryEnv(env, [BRANDSIGHT_ENV.apiKey, BRANDSIGHT_ENV.apiSecret, BRANDSIGHT_ENV.customerId]);
case "sedo":
return hasEveryEnv(env, [SEDO_ENV.partnerId, SEDO_ENV.signKey, SEDO_ENV.username, SEDO_ENV.password]);
case "cloudflare": {
const tokenMode = !!firstEnv(env, CLOUDFLARE_ENV.apiToken);
const keyMode = hasEveryEnv(env, [CLOUDFLARE_ENV.apiKey, CLOUDFLARE_ENV.email]);
return tokenMode || keyMode;
}
case "route53": {
const profileMode = !!firstEnv(env, ROUTE53_ENV.profile);
const keyMode = hasEveryEnv(env, [ROUTE53_ENV.accessKeyId, ROUTE53_ENV.secretAccessKey]);
const webIdentityMode = hasEveryEnv(env, [ROUTE53_ENV.webIdentityTokenFile, ROUTE53_ENV.roleArn]);
const containerMode = !!firstEnv(env, ROUTE53_ENV.containerCredentials);
return profileMode || keyMode || webIdentityMode || containerMode;
}
default:
return false;
}
}
// src/lib/cloudflare-auth.ts
function resolveCloudflareConfig(env = process.env) {
const accountId = firstEnv(env, CLOUDFLARE_ENV.accountId)?.value;
const apiToken = firstEnv(env, CLOUDFLARE_ENV.apiToken)?.value;
if (apiToken)
return { apiToken, accountId };
const apiKey = firstEnv(env, CLOUDFLARE_ENV.apiKey)?.value;
const email = firstEnv(env, CLOUDFLARE_ENV.email)?.value;
if (apiKey && email)
return { apiKey, email, accountId };
return accountId ? { accountId } : {};
}
function cloudflareAuthHeaders(cfg) {
if (cfg.apiToken)
return { Authorization: `Bearer ${cfg.apiToken}` };
if (cfg.apiKey && cfg.email)
return { "X-Auth-Key": cfg.apiKey, "X-Auth-Email": cfg.email };
throw new Error("Cloudflare credentials not configured. Set CLOUDFLARE_API_TOKEN, or CLOUDFLARE_API_KEY + CLOUDFLARE_EMAIL.");
}
export {
cloudflareAuthHeaders,
resolveCloudflareConfig
};