@hasna/domains 0.0.12 → 0.0.14
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/doctor.d.ts.map +1 -1
- package/dist/cli/commands/domain.d.ts.map +1 -1
- package/dist/cli/commands/provision.d.ts +3 -0
- package/dist/cli/commands/provision.d.ts.map +1 -0
- package/dist/cli/index.js +478 -255
- package/dist/index.d.ts +6 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +178 -9
- package/dist/lib/brandsight.d.ts +20 -0
- package/dist/lib/brandsight.d.ts.map +1 -1
- package/dist/lib/capability.d.ts +30 -0
- package/dist/lib/capability.d.ts.map +1 -0
- package/dist/lib/cloudflare-auth.d.ts +15 -0
- package/dist/lib/cloudflare-auth.d.ts.map +1 -0
- package/dist/lib/cloudflare.d.ts +13 -4
- package/dist/lib/cloudflare.d.ts.map +1 -1
- package/dist/lib/creds-check.d.ts +13 -0
- package/dist/lib/creds-check.d.ts.map +1 -0
- package/dist/lib/delegate.d.ts +28 -0
- package/dist/lib/delegate.d.ts.map +1 -0
- package/dist/lib/domain-daemon.d.ts +30 -0
- package/dist/lib/domain-daemon.d.ts.map +1 -0
- package/dist/lib/godaddy.d.ts +12 -0
- package/dist/lib/godaddy.d.ts.map +1 -1
- package/dist/lib/ns-drift.d.ts +29 -0
- package/dist/lib/ns-drift.d.ts.map +1 -0
- package/dist/lib/provision-state.d.ts +29 -0
- package/dist/lib/provision-state.d.ts.map +1 -0
- package/dist/lib/registration-poll.d.ts +24 -0
- package/dist/lib/registration-poll.d.ts.map +1 -0
- package/dist/lib/route53.d.ts +17 -0
- package/dist/lib/route53.d.ts.map +1 -1
- package/dist/mcp/index.js +42 -9
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -7,5 +7,10 @@ export { createAlert, getAlert, listAlerts, deleteAlert, type Alert, type Create
|
|
|
7
7
|
export { whoisLookup, checkDnsPropagation, checkSsl, exportZoneFile, importZoneFile, discoverSubdomains, validateDns, exportPortfolio, checkAllDomains, type WhoisResult, type DnsPropagationResult, type SslCheckResult, type ZoneImportResult, type SubdomainResult, type DnsValidationIssue, type DnsValidationResult, type BulkCheckResult, } from "./db/domains.js";
|
|
8
8
|
export { getDatabase, closeDatabase } from "./db/database.js";
|
|
9
9
|
export { getProvider, getAvailableProviders, syncAll, autoDetectRegistrar, type RegistrarProvider, type ProviderDnsRecord, type ProviderDomainInfo, type ProviderAvailability, type ProviderInfo, type SyncAllResult, } from "./lib/registrar.js";
|
|
10
|
-
export { checkAvailability as r53CheckAvailability, registerDomain as r53RegisterDomain, getRegistrationStatus as r53GetRegistrationStatus, listRegisteredDomains as r53ListRegisteredDomains, createHostedZone as r53CreateHostedZone, listHostedZones as r53ListHostedZones, getHostedZone as r53GetHostedZone, deleteHostedZone as r53DeleteHostedZone, findHostedZoneByDomain as r53FindHostedZoneByDomain, listRecords as r53ListRecords, upsertRecord as r53UpsertRecord, upsertRecords as r53UpsertRecords, deleteRecord as r53DeleteRecord, createRoute53Provider, getConfig as r53GetConfig, type Route53Config, type DomainContactInfo, type DomainAvailability, type RegisteredDomain, type HostedZoneInfo, type Route53Record, type Route53RecordInput, } from "./lib/route53.js";
|
|
10
|
+
export { checkAvailability as r53CheckAvailability, registerDomain as r53RegisterDomain, getRegistrationStatus as r53GetRegistrationStatus, updateNameservers as r53UpdateNameservers, listRegisteredDomains as r53ListRegisteredDomains, createHostedZone as r53CreateHostedZone, listHostedZones as r53ListHostedZones, getHostedZone as r53GetHostedZone, deleteHostedZone as r53DeleteHostedZone, findHostedZoneByDomain as r53FindHostedZoneByDomain, listRecords as r53ListRecords, upsertRecord as r53UpsertRecord, upsertRecords as r53UpsertRecords, deleteRecord as r53DeleteRecord, createRoute53Provider, getConfig as r53GetConfig, type Route53Config, type DomainContactInfo, type DomainAvailability, type RegisteredDomain, type HostedZoneInfo, type Route53Record, type Route53RecordInput, } from "./lib/route53.js";
|
|
11
|
+
export { createZone as cfCreateZone, getZone as cfGetZone, ensureZone as cfEnsureZone, upsertRecord as cfUpsertRecord, type CloudflareZone, } from "./lib/cloudflare.js";
|
|
12
|
+
export { resolveCloudflareConfig, cloudflareAuthHeaders, type CloudflareConfig } from "./lib/cloudflare-auth.js";
|
|
13
|
+
export { delegateDomainToCloudflare, type DelegateResult } from "./lib/delegate.js";
|
|
14
|
+
export { PROVIDER_CAPABILITIES, getCapability, canBuy, selectBuyRegistrar, selectDnsProvider, type ProviderCapability, } from "./lib/capability.js";
|
|
15
|
+
export { classifyRegistrationStatus, pollRegistrationUntilDone, type RegVerdict, type PollResult as RegistrationPollResult, } from "./lib/registration-poll.js";
|
|
11
16
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EACL,eAAe,EACf,qBAAqB,EACrB,kBAAkB,EAClB,YAAY,EACZ,SAAS,EACT,qBAAqB,EACrB,gBAAgB,EAChB,WAAW,EACX,YAAY,EACZ,iBAAiB,EACjB,2BAA2B,EAC3B,oBAAoB,EACpB,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,cAAc,EACd,YAAY,EACZ,eAAe,EACf,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,kBAAkB,EAClB,oBAAoB,EACpB,KAAK,MAAM,EACX,KAAK,YAAY,EACjB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,WAAW,EAChB,KAAK,WAAW,EAChB,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,eAAe,EACpB,KAAK,0BAA0B,EAC/B,KAAK,eAAe,EACpB,KAAK,aAAa,EAClB,KAAK,yBAAyB,GAC/B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,eAAe,EACf,YAAY,EACZ,cAAc,EACd,eAAe,EACf,eAAe,EACf,KAAK,SAAS,EACd,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,GAC1B,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,WAAW,EACX,QAAQ,EACR,UAAU,EACV,WAAW,EACX,KAAK,KAAK,EACV,KAAK,gBAAgB,GACtB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EACL,WAAW,EACX,mBAAmB,EACnB,QAAQ,EACR,cAAc,EACd,cAAc,EACd,kBAAkB,EAClB,WAAW,EACX,eAAe,EACf,eAAe,EACf,KAAK,WAAW,EAChB,KAAK,oBAAoB,EACzB,KAAK,cAAc,EACnB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EACxB,KAAK,eAAe,GACrB,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAG9D,OAAO,EACL,WAAW,EACX,qBAAqB,EACrB,OAAO,EACP,mBAAmB,EACnB,KAAK,iBAAiB,EACtB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,oBAAoB,EACzB,KAAK,YAAY,EACjB,KAAK,aAAa,GACnB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EACL,iBAAiB,IAAI,oBAAoB,EACzC,cAAc,IAAI,iBAAiB,EACnC,qBAAqB,IAAI,wBAAwB,EACjD,qBAAqB,IAAI,wBAAwB,EACjD,gBAAgB,IAAI,mBAAmB,EACvC,eAAe,IAAI,kBAAkB,EACrC,aAAa,IAAI,gBAAgB,EACjC,gBAAgB,IAAI,mBAAmB,EACvC,sBAAsB,IAAI,yBAAyB,EACnD,WAAW,IAAI,cAAc,EAC7B,YAAY,IAAI,eAAe,EAC/B,aAAa,IAAI,gBAAgB,EACjC,YAAY,IAAI,eAAe,EAC/B,qBAAqB,EACrB,SAAS,IAAI,YAAY,EACzB,KAAK,aAAa,EAClB,KAAK,iBAAiB,EACtB,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EACrB,KAAK,cAAc,EACnB,KAAK,aAAa,EAClB,KAAK,kBAAkB,GACxB,MAAM,kBAAkB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
@@ -15823,7 +15823,7 @@ var require_package = __commonJS((exports, module) => {
|
|
|
15823
15823
|
|
|
15824
15824
|
// node_modules/@aws-sdk/util-user-agent-node/dist-cjs/index.js
|
|
15825
15825
|
var require_dist_cjs41 = __commonJS((exports) => {
|
|
15826
|
-
var __dirname = "/
|
|
15826
|
+
var __dirname = "/home/hasna/workspace/hasna/opensource/open-domains/node_modules/@aws-sdk/util-user-agent-node/dist-cjs";
|
|
15827
15827
|
var node_os = __require("os");
|
|
15828
15828
|
var node_process = __require("process");
|
|
15829
15829
|
var utilConfigProvider = require_dist_cjs33();
|
|
@@ -29640,6 +29640,7 @@ var _Ex = "Expiry";
|
|
|
29640
29640
|
var _F2 = "Fax";
|
|
29641
29641
|
var _FC = "FilterCondition";
|
|
29642
29642
|
var _FCi = "FilterConditions";
|
|
29643
|
+
var _FIAK = "FIAuthKey";
|
|
29643
29644
|
var _FN = "FirstName";
|
|
29644
29645
|
var _Fl2 = "Flags";
|
|
29645
29646
|
var _GDD = "GetDomainDetail";
|
|
@@ -29713,6 +29714,9 @@ var _TTD = "TagsToDelete";
|
|
|
29713
29714
|
var _Tl = "Tld";
|
|
29714
29715
|
var _Ty = "Type";
|
|
29715
29716
|
var _UD = "UpdatedDate";
|
|
29717
|
+
var _UDN = "UpdateDomainNameservers";
|
|
29718
|
+
var _UDNR = "UpdateDomainNameserversRequest";
|
|
29719
|
+
var _UDNRp = "UpdateDomainNameserversResponse";
|
|
29716
29720
|
var _UTLD = "UnsupportedTLD";
|
|
29717
29721
|
var _V2 = "Value";
|
|
29718
29722
|
var _Va = "Values";
|
|
@@ -29803,6 +29807,7 @@ var ContactNumber = [0, n02, _CNo2, 8, 0];
|
|
|
29803
29807
|
var CountryCode = [0, n02, _CC2, 8, 0];
|
|
29804
29808
|
var Email = [0, n02, _E, 8, 0];
|
|
29805
29809
|
var ExtraParamValue = [0, n02, _EPV, 8, 0];
|
|
29810
|
+
var FIAuthKey = [0, n02, _FIAK, 8, 0];
|
|
29806
29811
|
var State = [0, n02, _S2, 8, 0];
|
|
29807
29812
|
var ZipCode = [0, n02, _ZC, 8, 0];
|
|
29808
29813
|
var CheckDomainAvailabilityRequest$ = [
|
|
@@ -29999,6 +30004,23 @@ var SortCondition$ = [
|
|
|
29999
30004
|
[0, 0],
|
|
30000
30005
|
2
|
|
30001
30006
|
];
|
|
30007
|
+
var UpdateDomainNameserversRequest$ = [
|
|
30008
|
+
3,
|
|
30009
|
+
n02,
|
|
30010
|
+
_UDNR,
|
|
30011
|
+
0,
|
|
30012
|
+
[_DN, _Na2, _FIAK],
|
|
30013
|
+
[0, () => NameserverList, [() => FIAuthKey, 0]],
|
|
30014
|
+
2
|
|
30015
|
+
];
|
|
30016
|
+
var UpdateDomainNameserversResponse$ = [
|
|
30017
|
+
3,
|
|
30018
|
+
n02,
|
|
30019
|
+
_UDNRp,
|
|
30020
|
+
0,
|
|
30021
|
+
[_OI],
|
|
30022
|
+
[0]
|
|
30023
|
+
];
|
|
30002
30024
|
var DnssecKeyList = [
|
|
30003
30025
|
1,
|
|
30004
30026
|
n02,
|
|
@@ -30098,6 +30120,14 @@ var RegisterDomain$ = [
|
|
|
30098
30120
|
() => RegisterDomainRequest$,
|
|
30099
30121
|
() => RegisterDomainResponse$
|
|
30100
30122
|
];
|
|
30123
|
+
var UpdateDomainNameservers$ = [
|
|
30124
|
+
9,
|
|
30125
|
+
n02,
|
|
30126
|
+
_UDN,
|
|
30127
|
+
0,
|
|
30128
|
+
() => UpdateDomainNameserversRequest$,
|
|
30129
|
+
() => UpdateDomainNameserversResponse$
|
|
30130
|
+
];
|
|
30101
30131
|
|
|
30102
30132
|
// node_modules/@aws-sdk/client-route-53-domains/dist-es/runtimeConfig.shared.js
|
|
30103
30133
|
var getRuntimeConfig3 = (config) => {
|
|
@@ -30302,6 +30332,14 @@ class RegisterDomainCommand extends import_smithy_client23.Command.classBuilder(
|
|
|
30302
30332
|
}).s("Route53Domains_v20140515", "RegisterDomain", {}).n("Route53DomainsClient", "RegisterDomainCommand").sc(RegisterDomain$).build() {
|
|
30303
30333
|
}
|
|
30304
30334
|
|
|
30335
|
+
// node_modules/@aws-sdk/client-route-53-domains/dist-es/commands/UpdateDomainNameserversCommand.js
|
|
30336
|
+
var import_middleware_endpoint15 = __toESM(require_dist_cjs39(), 1);
|
|
30337
|
+
var import_smithy_client24 = __toESM(require_dist_cjs27(), 1);
|
|
30338
|
+
class UpdateDomainNameserversCommand extends import_smithy_client24.Command.classBuilder().ep(commonParams2).m(function(Command, cs, config, o3) {
|
|
30339
|
+
return [import_middleware_endpoint15.getEndpointPlugin(config, Command.getEndpointParameterInstructions())];
|
|
30340
|
+
}).s("Route53Domains_v20140515", "UpdateDomainNameservers", {}).n("Route53DomainsClient", "UpdateDomainNameserversCommand").sc(UpdateDomainNameservers$).build() {
|
|
30341
|
+
}
|
|
30342
|
+
|
|
30305
30343
|
// src/lib/route53.ts
|
|
30306
30344
|
function getConfig2() {
|
|
30307
30345
|
return {
|
|
@@ -30401,6 +30439,17 @@ async function getDomainDetail(domain, config) {
|
|
|
30401
30439
|
nameservers: (result.Nameservers ?? []).map((ns) => ns.Name ?? "").filter(Boolean)
|
|
30402
30440
|
};
|
|
30403
30441
|
}
|
|
30442
|
+
async function updateNameservers(domain, nameservers, config, client) {
|
|
30443
|
+
if (!nameservers.length) {
|
|
30444
|
+
throw new Error("updateNameservers requires at least one nameserver");
|
|
30445
|
+
}
|
|
30446
|
+
const domains = client ?? makeClients(config).domains;
|
|
30447
|
+
const result = await domains.send(new UpdateDomainNameserversCommand({
|
|
30448
|
+
DomainName: domain,
|
|
30449
|
+
Nameservers: nameservers.map((name) => ({ Name: name }))
|
|
30450
|
+
}));
|
|
30451
|
+
return { operationId: result.OperationId ?? "" };
|
|
30452
|
+
}
|
|
30404
30453
|
async function listRegisteredDomains(config) {
|
|
30405
30454
|
const { domains } = makeClients(config);
|
|
30406
30455
|
const all = [];
|
|
@@ -30684,17 +30733,38 @@ function createRoute53Provider(config) {
|
|
|
30684
30733
|
};
|
|
30685
30734
|
}
|
|
30686
30735
|
|
|
30736
|
+
// src/lib/cloudflare-auth.ts
|
|
30737
|
+
function resolveCloudflareConfig(env = process.env) {
|
|
30738
|
+
const accountId = env["CLOUDFLARE_ACCOUNT_ID"] || env["HASNAXYZ_CLOUDFLARE_LIVE_ACCOUNT_ID"] || undefined;
|
|
30739
|
+
if (env["CLOUDFLARE_API_TOKEN"]) {
|
|
30740
|
+
return { apiToken: env["CLOUDFLARE_API_TOKEN"], accountId };
|
|
30741
|
+
}
|
|
30742
|
+
if (env["CLOUDFLARE_API_KEY"] && env["CLOUDFLARE_EMAIL"]) {
|
|
30743
|
+
return { apiKey: env["CLOUDFLARE_API_KEY"], email: env["CLOUDFLARE_EMAIL"], accountId };
|
|
30744
|
+
}
|
|
30745
|
+
if (env["HASNAXYZ_CLOUDFLARE_LIVE_API_KEY"] && env["HASNAXYZ_CLOUDFLARE_LIVE_EMAIL"]) {
|
|
30746
|
+
return {
|
|
30747
|
+
apiKey: env["HASNAXYZ_CLOUDFLARE_LIVE_API_KEY"],
|
|
30748
|
+
email: env["HASNAXYZ_CLOUDFLARE_LIVE_EMAIL"],
|
|
30749
|
+
accountId
|
|
30750
|
+
};
|
|
30751
|
+
}
|
|
30752
|
+
return accountId ? { accountId } : {};
|
|
30753
|
+
}
|
|
30754
|
+
function cloudflareAuthHeaders(cfg) {
|
|
30755
|
+
if (cfg.apiToken)
|
|
30756
|
+
return { Authorization: `Bearer ${cfg.apiToken}` };
|
|
30757
|
+
if (cfg.apiKey && cfg.email)
|
|
30758
|
+
return { "X-Auth-Key": cfg.apiKey, "X-Auth-Email": cfg.email };
|
|
30759
|
+
throw new Error("Cloudflare credentials not configured. Set CLOUDFLARE_API_TOKEN, or CLOUDFLARE_API_KEY + CLOUDFLARE_EMAIL.");
|
|
30760
|
+
}
|
|
30761
|
+
|
|
30687
30762
|
// src/lib/cloudflare.ts
|
|
30688
30763
|
function getConfig3() {
|
|
30689
|
-
return
|
|
30690
|
-
apiToken: process.env["CLOUDFLARE_API_TOKEN"],
|
|
30691
|
-
accountId: process.env["CLOUDFLARE_ACCOUNT_ID"]
|
|
30692
|
-
};
|
|
30764
|
+
return resolveCloudflareConfig();
|
|
30693
30765
|
}
|
|
30694
30766
|
function checkCredentials2(cfg) {
|
|
30695
|
-
|
|
30696
|
-
throw new Error("Cloudflare credentials not configured. Set CLOUDFLARE_API_TOKEN environment variable.");
|
|
30697
|
-
}
|
|
30767
|
+
cloudflareAuthHeaders(cfg);
|
|
30698
30768
|
}
|
|
30699
30769
|
var CF_BASE = "https://api.cloudflare.com/client/v4";
|
|
30700
30770
|
async function cfFetch(path, opts = {}) {
|
|
@@ -30703,7 +30773,7 @@ async function cfFetch(path, opts = {}) {
|
|
|
30703
30773
|
const res = await fetch(`${CF_BASE}${path}`, {
|
|
30704
30774
|
method: opts.method ?? "GET",
|
|
30705
30775
|
headers: {
|
|
30706
|
-
|
|
30776
|
+
...cloudflareAuthHeaders(cfg),
|
|
30707
30777
|
"Content-Type": "application/json"
|
|
30708
30778
|
},
|
|
30709
30779
|
body: opts.body ? JSON.stringify(opts.body) : undefined
|
|
@@ -30722,6 +30792,24 @@ async function getZone(domain, config) {
|
|
|
30722
30792
|
const z2 = result[0];
|
|
30723
30793
|
return { id: z2.id, name: z2.name, status: z2.status, nameservers: z2.name_servers, original_nameservers: z2.original_name_servers };
|
|
30724
30794
|
}
|
|
30795
|
+
async function createZone(domain, config) {
|
|
30796
|
+
const cfg = config ?? getConfig3();
|
|
30797
|
+
if (!cfg.accountId) {
|
|
30798
|
+
throw new Error("CLOUDFLARE_ACCOUNT_ID is required to create a zone.");
|
|
30799
|
+
}
|
|
30800
|
+
const result = await cfFetch("/zones", { method: "POST", body: { name: domain, account: { id: cfg.accountId }, jump_start: false }, config: cfg });
|
|
30801
|
+
return { id: result.id, name: result.name, status: result.status, nameservers: result.name_servers };
|
|
30802
|
+
}
|
|
30803
|
+
async function ensureZone(domain, config, deps) {
|
|
30804
|
+
const get = deps?.getZone ?? getZone;
|
|
30805
|
+
const create = deps?.createZone ?? createZone;
|
|
30806
|
+
const existing = await get(domain, config);
|
|
30807
|
+
const zone = existing ?? await create(domain, config);
|
|
30808
|
+
if (!zone.nameservers || zone.nameservers.length === 0) {
|
|
30809
|
+
throw new Error(`Cloudflare zone for ${domain} has no nameservers yet`);
|
|
30810
|
+
}
|
|
30811
|
+
return zone;
|
|
30812
|
+
}
|
|
30725
30813
|
async function listRecords2(zoneId, config) {
|
|
30726
30814
|
const records = [];
|
|
30727
30815
|
let page = 1;
|
|
@@ -31231,6 +31319,72 @@ function autoDetectRegistrar(domain, getDomainByName2) {
|
|
|
31231
31319
|
return "brandsight";
|
|
31232
31320
|
return null;
|
|
31233
31321
|
}
|
|
31322
|
+
// src/lib/delegate.ts
|
|
31323
|
+
async function delegateDomainToCloudflare(domain, deps) {
|
|
31324
|
+
const zone = await deps.createCloudflareZone(domain);
|
|
31325
|
+
if (!zone.nameservers || zone.nameservers.length === 0) {
|
|
31326
|
+
throw new Error(`Cloudflare zone for ${domain} returned no nameservers; cannot delegate`);
|
|
31327
|
+
}
|
|
31328
|
+
const { operationId } = await deps.updateNameservers(domain, zone.nameservers);
|
|
31329
|
+
return { zoneId: zone.id, nameservers: zone.nameservers, operationId };
|
|
31330
|
+
}
|
|
31331
|
+
// src/lib/capability.ts
|
|
31332
|
+
var PROVIDER_CAPABILITIES = {
|
|
31333
|
+
route53: { canBuy: true, canDns: true, gated: false, notes: "Full self-serve buy + hosted zones via AWS API; primary buy path." },
|
|
31334
|
+
cloudflare: { canBuy: false, canDns: true, gated: false, notes: "DNS/zone management only; not a registrar. Always our DNS." },
|
|
31335
|
+
namecheap: { canBuy: true, canDns: true, gated: false, notes: "Buy + DNS via API; requires API access + whitelisted IP." },
|
|
31336
|
+
godaddy: { canBuy: true, canDns: true, gated: true, notes: "Domains API gated behind account thresholds (>=10 / Discount Domain Club) since 2024; purchase + DNS writes unreliable." },
|
|
31337
|
+
brandsight: { canBuy: true, canDns: true, gated: true, notes: "GoDaddy Corporate Domains (enterprise/contract-only); credentials issued to onboarded clients, not self-serve." }
|
|
31338
|
+
};
|
|
31339
|
+
var UNKNOWN = { canBuy: false, canDns: false, gated: true, notes: "Unknown provider." };
|
|
31340
|
+
function getCapability(name) {
|
|
31341
|
+
return PROVIDER_CAPABILITIES[name.toLowerCase()] ?? UNKNOWN;
|
|
31342
|
+
}
|
|
31343
|
+
function canBuy(name) {
|
|
31344
|
+
const c3 = getCapability(name);
|
|
31345
|
+
return c3.canBuy && !c3.gated;
|
|
31346
|
+
}
|
|
31347
|
+
function selectBuyRegistrar(preference) {
|
|
31348
|
+
if (preference) {
|
|
31349
|
+
const c3 = getCapability(preference);
|
|
31350
|
+
if (!c3.canBuy)
|
|
31351
|
+
throw new Error(`Registrar '${preference}' cannot buy domains`);
|
|
31352
|
+
if (c3.gated)
|
|
31353
|
+
throw new Error(`Registrar '${preference}' is gated/enterprise-only and not available for automated purchase: ${c3.notes}`);
|
|
31354
|
+
return preference.toLowerCase();
|
|
31355
|
+
}
|
|
31356
|
+
return "route53";
|
|
31357
|
+
}
|
|
31358
|
+
function selectDnsProvider() {
|
|
31359
|
+
return "cloudflare";
|
|
31360
|
+
}
|
|
31361
|
+
// src/lib/registration-poll.ts
|
|
31362
|
+
function classifyRegistrationStatus(status) {
|
|
31363
|
+
const s3 = status.toUpperCase();
|
|
31364
|
+
if (s3 === "SUCCESSFUL")
|
|
31365
|
+
return "success";
|
|
31366
|
+
if (s3 === "ERROR" || s3 === "FAILED")
|
|
31367
|
+
return "failed";
|
|
31368
|
+
return "pending";
|
|
31369
|
+
}
|
|
31370
|
+
async function pollRegistrationUntilDone(operationId, opts) {
|
|
31371
|
+
const maxAttempts = opts.maxAttempts ?? 60;
|
|
31372
|
+
const intervalMs = opts.intervalMs ?? 1e4;
|
|
31373
|
+
const sleep = opts.sleep ?? ((ms) => new Promise((r3) => setTimeout(r3, ms)));
|
|
31374
|
+
let attempts = 0;
|
|
31375
|
+
while (attempts < maxAttempts) {
|
|
31376
|
+
const { status, message } = await opts.getStatus(operationId);
|
|
31377
|
+
attempts++;
|
|
31378
|
+
const verdict = classifyRegistrationStatus(status);
|
|
31379
|
+
if (verdict === "success")
|
|
31380
|
+
return { status: "success", attempts, message };
|
|
31381
|
+
if (verdict === "failed")
|
|
31382
|
+
return { status: "failed", attempts, message };
|
|
31383
|
+
if (attempts < maxAttempts)
|
|
31384
|
+
await sleep(intervalMs);
|
|
31385
|
+
}
|
|
31386
|
+
return { status: "timeout", attempts };
|
|
31387
|
+
}
|
|
31234
31388
|
export {
|
|
31235
31389
|
whoisLookup,
|
|
31236
31390
|
validateDns,
|
|
@@ -31238,10 +31392,14 @@ export {
|
|
|
31238
31392
|
updateDomain,
|
|
31239
31393
|
updateDnsRecord,
|
|
31240
31394
|
syncAll,
|
|
31395
|
+
selectDnsProvider,
|
|
31396
|
+
selectBuyRegistrar,
|
|
31241
31397
|
searchDomains,
|
|
31398
|
+
resolveCloudflareConfig,
|
|
31242
31399
|
recordDomainPurchase,
|
|
31243
31400
|
upsertRecords as r53UpsertRecords,
|
|
31244
31401
|
upsertRecord as r53UpsertRecord,
|
|
31402
|
+
updateNameservers as r53UpdateNameservers,
|
|
31245
31403
|
registerDomain as r53RegisterDomain,
|
|
31246
31404
|
listRegisteredDomains as r53ListRegisteredDomains,
|
|
31247
31405
|
listRecords as r53ListRecords,
|
|
@@ -31254,6 +31412,7 @@ export {
|
|
|
31254
31412
|
deleteHostedZone as r53DeleteHostedZone,
|
|
31255
31413
|
createHostedZone as r53CreateHostedZone,
|
|
31256
31414
|
checkAvailability3 as r53CheckAvailability,
|
|
31415
|
+
pollRegistrationUntilDone,
|
|
31257
31416
|
markDomainPremium,
|
|
31258
31417
|
listSslExpiring,
|
|
31259
31418
|
listExpiring,
|
|
@@ -31274,6 +31433,7 @@ export {
|
|
|
31274
31433
|
getDomain,
|
|
31275
31434
|
getDnsRecord,
|
|
31276
31435
|
getDatabase,
|
|
31436
|
+
getCapability,
|
|
31277
31437
|
getByRegistrar,
|
|
31278
31438
|
getAvailableProviders,
|
|
31279
31439
|
getAlert,
|
|
@@ -31283,17 +31443,26 @@ export {
|
|
|
31283
31443
|
deleteDomain,
|
|
31284
31444
|
deleteDnsRecord,
|
|
31285
31445
|
deleteAlert,
|
|
31446
|
+
delegateDomainToCloudflare,
|
|
31286
31447
|
createRoute53Provider,
|
|
31287
31448
|
createDomainOffer,
|
|
31288
31449
|
createDomain,
|
|
31289
31450
|
createDnsRecord,
|
|
31290
31451
|
createAlert,
|
|
31291
31452
|
countDomains,
|
|
31453
|
+
cloudflareAuthHeaders,
|
|
31292
31454
|
closeDatabase,
|
|
31455
|
+
classifyRegistrationStatus,
|
|
31293
31456
|
checkSsl,
|
|
31294
31457
|
checkDnsPropagation,
|
|
31295
31458
|
checkAllDomains,
|
|
31459
|
+
upsertRecord2 as cfUpsertRecord,
|
|
31460
|
+
getZone as cfGetZone,
|
|
31461
|
+
ensureZone as cfEnsureZone,
|
|
31462
|
+
createZone as cfCreateZone,
|
|
31463
|
+
canBuy,
|
|
31296
31464
|
autoDetectRegistrar,
|
|
31465
|
+
PROVIDER_CAPABILITIES,
|
|
31297
31466
|
DOMAIN_STATUSES,
|
|
31298
31467
|
DOMAIN_OFFER_STATUSES,
|
|
31299
31468
|
DOMAIN_EMAIL_TYPES
|
package/dist/lib/brandsight.d.ts
CHANGED
|
@@ -11,9 +11,29 @@
|
|
|
11
11
|
*/
|
|
12
12
|
export interface BrandsightConfig {
|
|
13
13
|
apiKey: string;
|
|
14
|
+
apiSecret?: string;
|
|
15
|
+
customerId?: string;
|
|
16
|
+
shopperId?: string;
|
|
14
17
|
accountId?: string;
|
|
15
18
|
baseUrl?: string;
|
|
16
19
|
}
|
|
20
|
+
/**
|
|
21
|
+
* Resolve Brandsight (GoDaddy Corporate Domains) credentials from env, including
|
|
22
|
+
* the HASNAXYZ vault names which carry the full GoDaddy-style credential set
|
|
23
|
+
* (api_key + api_secret + customer_id + shopper_id). Pure / testable.
|
|
24
|
+
*/
|
|
25
|
+
export declare function resolveBrandsightConfig(env?: Record<string, string | undefined>): BrandsightConfig;
|
|
26
|
+
export interface BrandsightCapability {
|
|
27
|
+
configured: boolean;
|
|
28
|
+
gated: boolean;
|
|
29
|
+
notes: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Brandsight is GoDaddy Corporate Domains — an enterprise/contract-only
|
|
33
|
+
* registrar. Even with credentials present, automated self-serve purchase is
|
|
34
|
+
* gated, so callers must not attempt it blindly.
|
|
35
|
+
*/
|
|
36
|
+
export declare function brandsightCapability(env?: Record<string, string | undefined>): BrandsightCapability;
|
|
17
37
|
export interface BrandsightDomain {
|
|
18
38
|
domain: string;
|
|
19
39
|
status: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brandsight.d.ts","sourceRoot":"","sources":["../../src/lib/brandsight.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAQH,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,OAAO,CAAC;IACpB,MAAM,EAAE,OAAO,CAAC;IAChB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,WAAW,GAAG,WAAW,GAAG,SAAS,GAAG,eAAe,CAAC;IAC9D,aAAa,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,eAAe,EAAE,CAAC;IAC1B,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,iBAAiB,EAAE,CAAC;IAC7B,IAAI,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IACnD,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,OAAO,CAAC;CACf;AAED,qBAAa,kBAAmB,SAAQ,KAAK;IAGlC,UAAU,CAAC,EAAE,MAAM;IACnB,YAAY,CAAC,EAAE,MAAM;gBAF5B,OAAO,EAAE,MAAM,EACR,UAAU,CAAC,EAAE,MAAM,YAAA,EACnB,YAAY,CAAC,EAAE,MAAM,YAAA;CAK/B;AAMD,KAAK,OAAO,GAAG,OAAO,UAAU,CAAC,KAAK,CAAC;AAIvC,wBAAgB,SAAS,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI,CAElD;AAED,wBAAgB,SAAS,IAAI,MAAM,CAQlC;AAED,wBAAgB,SAAS,IAAI,gBAAgB,CAK5C;AAoID,wBAAsB,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAYjF;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,CAAC,CAYrH;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAYjF;AAED,wBAAsB,mBAAmB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAYnF;AAMD,wBAAsB,WAAW,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAKxF;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,gBAAgB,GAAG,IAAI,CAAC,CAK/G;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,sBAAsB,CAAC,CAKlH;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,SAAI,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAOvI;AAED,wBAAsB,aAAa,CACjC,KAAK,EAAE;IAAE,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,OAAO,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;IAAC,YAAY,EAAE,CAAC,KAAK,EAAE,OAAO,kBAAkB,EAAE,iBAAiB,KAAK,OAAO,kBAAkB,EAAE,MAAM,CAAC;IAAC,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,kBAAkB,EAAE,iBAAiB,KAAK,OAAO,kBAAkB,EAAE,MAAM,GAAG,IAAI,CAAC;CAAE,EAC9T,MAAM,CAAC,EAAE,gBAAgB,GACxB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAmCjF;AAMD,OAAO,KAAK,EAAE,iBAAiB,EAAkG,MAAM,gBAAgB,CAAC;AAExJ,wBAAgB,wBAAwB,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,iBAAiB,CAoDrF"}
|
|
1
|
+
{"version":3,"file":"brandsight.d.ts","sourceRoot":"","sources":["../../src/lib/brandsight.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Registrar / DNS provider capability matrix (2026) and auto-selection.
|
|
3
|
+
*
|
|
4
|
+
* Captures what each provider can actually do via API, so callers never attempt
|
|
5
|
+
* a gated path silently. Findings (research, 2026):
|
|
6
|
+
* - Route53 Domains: full self-serve buy API, not volume-gated → primary buy.
|
|
7
|
+
* - GoDaddy retail: Domains API gated behind account thresholds (≥10 / DDC)
|
|
8
|
+
* since 2024; purchase + DNS writes unreliable → gated.
|
|
9
|
+
* - Brandsight / GoDaddy Corporate Domains: enterprise-contract-only → gated.
|
|
10
|
+
* - Cloudflare: DNS only (no registration) → always our DNS.
|
|
11
|
+
* - Namecheap: buy + DNS via API (sandbox/whitelist required) → usable.
|
|
12
|
+
*/
|
|
13
|
+
export interface ProviderCapability {
|
|
14
|
+
canBuy: boolean;
|
|
15
|
+
canDns: boolean;
|
|
16
|
+
/** True when the API path exists but requires special access we may not have. */
|
|
17
|
+
gated: boolean;
|
|
18
|
+
notes: string;
|
|
19
|
+
}
|
|
20
|
+
export declare const PROVIDER_CAPABILITIES: Record<string, ProviderCapability>;
|
|
21
|
+
export declare function getCapability(name: string): ProviderCapability;
|
|
22
|
+
export declare function canBuy(name: string): boolean;
|
|
23
|
+
/**
|
|
24
|
+
* Choose the registrar to buy through. Defaults to Route53 (the only reliable
|
|
25
|
+
* self-serve API). An explicit preference is honored only if it is non-gated.
|
|
26
|
+
*/
|
|
27
|
+
export declare function selectBuyRegistrar(preference?: string): string;
|
|
28
|
+
/** DNS is always Cloudflare, regardless of where the domain was bought. */
|
|
29
|
+
export declare function selectDnsProvider(): string;
|
|
30
|
+
//# sourceMappingURL=capability.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"capability.d.ts","sourceRoot":"","sources":["../../src/lib/capability.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,OAAO,CAAC;IAChB,iFAAiF;IACjF,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAMpE,CAAC;AAIF,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,kBAAkB,CAE9D;AAED,wBAAgB,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAG5C;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ9D;AAED,2EAA2E;AAC3E,wBAAgB,iBAAiB,IAAI,MAAM,CAE1C"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloudflare auth resolution for open-domains — supports BOTH a scoped API
|
|
3
|
+
* token and a Global API Key + email (our vault stores the latter:
|
|
4
|
+
* HASNAXYZ_CLOUDFLARE_LIVE_API_KEY / _EMAIL). Pure + testable.
|
|
5
|
+
*/
|
|
6
|
+
export interface CloudflareConfig {
|
|
7
|
+
apiToken?: string;
|
|
8
|
+
apiKey?: string;
|
|
9
|
+
email?: string;
|
|
10
|
+
accountId?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function resolveCloudflareConfig(env?: Record<string, string | undefined>): CloudflareConfig;
|
|
13
|
+
/** The auth headers to send for a given config. */
|
|
14
|
+
export declare function cloudflareAuthHeaders(cfg: CloudflareConfig): Record<string, string>;
|
|
15
|
+
//# sourceMappingURL=cloudflare-auth.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cloudflare-auth.d.ts","sourceRoot":"","sources":["../../src/lib/cloudflare-auth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,uBAAuB,CACrC,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAqD,GAC1F,gBAAgB,CAqBlB;AAED,mDAAmD;AACnD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,gBAAgB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAMnF"}
|
package/dist/lib/cloudflare.d.ts
CHANGED
|
@@ -6,10 +6,8 @@
|
|
|
6
6
|
* CLOUDFLARE_ACCOUNT_ID — Account ID (required for zone creation)
|
|
7
7
|
*/
|
|
8
8
|
import type { DnsProvider } from "./registrar.js";
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
accountId?: string;
|
|
12
|
-
}
|
|
9
|
+
import { type CloudflareConfig } from "./cloudflare-auth.js";
|
|
10
|
+
export type { CloudflareConfig };
|
|
13
11
|
export interface CloudflareZone {
|
|
14
12
|
id: string;
|
|
15
13
|
name: string;
|
|
@@ -30,6 +28,17 @@ export declare function getConfig(): CloudflareConfig;
|
|
|
30
28
|
export declare function listZones(config?: CloudflareConfig): Promise<CloudflareZone[]>;
|
|
31
29
|
export declare function getZone(domain: string, config?: CloudflareConfig): Promise<CloudflareZone | null>;
|
|
32
30
|
export declare function createZone(domain: string, config?: CloudflareConfig): Promise<CloudflareZone>;
|
|
31
|
+
/**
|
|
32
|
+
* Find-or-create a Cloudflare zone and return its assigned nameservers.
|
|
33
|
+
* Idempotent: reuses an existing zone for the domain if present. The returned
|
|
34
|
+
* nameservers are what the registrar should be delegated to (always-Cloudflare).
|
|
35
|
+
*
|
|
36
|
+
* `deps` is injectable for testing; defaults to the real getZone/createZone.
|
|
37
|
+
*/
|
|
38
|
+
export declare function ensureZone(domain: string, config?: CloudflareConfig, deps?: {
|
|
39
|
+
getZone: (d: string, c?: CloudflareConfig) => Promise<CloudflareZone | null>;
|
|
40
|
+
createZone: (d: string, c?: CloudflareConfig) => Promise<CloudflareZone>;
|
|
41
|
+
}): Promise<CloudflareZone>;
|
|
33
42
|
export declare function deleteZone(zoneId: string, config?: CloudflareConfig): Promise<void>;
|
|
34
43
|
export declare function listRecords(zoneId: string, config?: CloudflareConfig): Promise<CloudflareRecord[]>;
|
|
35
44
|
export declare function upsertRecord(zoneId: string, record: CloudflareRecord, config?: CloudflareConfig): Promise<void>;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cloudflare.d.ts","sourceRoot":"","sources":["../../src/lib/cloudflare.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAqB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"cloudflare.d.ts","sourceRoot":"","sources":["../../src/lib/cloudflare.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAqB,MAAM,gBAAgB,CAAC;AACrE,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;;;;;;GAMG;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;AAED,wBAAsB,YAAY,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAE,MAAM,CAAC,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAqBrH;AAED,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;AAID,wBAAgB,wBAAwB,CAAC,MAAM,CAAC,EAAE,gBAAgB,GAAG,WAAW,CA4B/E"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Provisioning credential status — reports, per provider, whether usable
|
|
3
|
+
* credentials are present (across all supported auth modes incl. HASNAXYZ vault
|
|
4
|
+
* env names). Pure (env injected) + used by `domains doctor`.
|
|
5
|
+
*/
|
|
6
|
+
export interface CredStatus {
|
|
7
|
+
provider: string;
|
|
8
|
+
configured: boolean;
|
|
9
|
+
mode: string;
|
|
10
|
+
detail: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function checkProvisioningCredentials(env?: Record<string, string | undefined>): CredStatus[];
|
|
13
|
+
//# sourceMappingURL=creds-check.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"creds-check.d.ts","sourceRoot":"","sources":["../../src/lib/creds-check.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,4BAA4B,CAC1C,GAAG,GAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAqD,GAC1F,UAAU,EAAE,CAqCd"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cloudflare delegation — the always-Cloudflare-DNS rule in one place.
|
|
3
|
+
*
|
|
4
|
+
* After a domain is registered with ANY registrar, DNS is managed in Cloudflare:
|
|
5
|
+
* create (or reuse) a Cloudflare zone, then point the registrar's nameservers at
|
|
6
|
+
* the zone's assigned Cloudflare nameservers.
|
|
7
|
+
*
|
|
8
|
+
* Dependency-injected so it is fully unit-testable; the CLI wires the real
|
|
9
|
+
* Cloudflare `createZone` and Route53 `updateNameservers`.
|
|
10
|
+
*/
|
|
11
|
+
export interface DelegateDeps {
|
|
12
|
+
/** Create or reuse a Cloudflare zone; returns its id + assigned nameservers. */
|
|
13
|
+
createCloudflareZone: (domain: string) => Promise<{
|
|
14
|
+
id: string;
|
|
15
|
+
nameservers: string[];
|
|
16
|
+
}>;
|
|
17
|
+
/** Point the registrar's nameservers at the given set. */
|
|
18
|
+
updateNameservers: (domain: string, nameservers: string[]) => Promise<{
|
|
19
|
+
operationId: string;
|
|
20
|
+
}>;
|
|
21
|
+
}
|
|
22
|
+
export interface DelegateResult {
|
|
23
|
+
zoneId: string;
|
|
24
|
+
nameservers: string[];
|
|
25
|
+
operationId: string;
|
|
26
|
+
}
|
|
27
|
+
export declare function delegateDomainToCloudflare(domain: string, deps: DelegateDeps): Promise<DelegateResult>;
|
|
28
|
+
//# sourceMappingURL=delegate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"delegate.d.ts","sourceRoot":"","sources":["../../src/lib/delegate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,WAAW,YAAY;IAC3B,gFAAgF;IAChF,oBAAoB,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACzF,0DAA0D;IAC1D,iBAAiB,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC;QAAE,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAChG;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,YAAY,GACjB,OAAO,CAAC,cAAc,CAAC,CAOzB"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Domain provisioning daemon — reconciles a set of domains toward `ready`.
|
|
3
|
+
*
|
|
4
|
+
* Each tick: gather live signals per domain, derive its lifecycle state, and run
|
|
5
|
+
* the next action (register / create_cf_zone / delegate_ns / check_ns_propagation
|
|
6
|
+
* / verify_dns / finalize). Signals + actions are injected so the loop is fully
|
|
7
|
+
* testable; the CLI wires real Route53/Cloudflare/DNS calls. State is derived
|
|
8
|
+
* live (no separate persistence needed), so a restart simply re-derives.
|
|
9
|
+
*/
|
|
10
|
+
import { type DomainSignals, type DomainProvAction } from "./provision-state.js";
|
|
11
|
+
export interface DomainReconcileDeps {
|
|
12
|
+
gatherSignals: (domain: string) => Promise<DomainSignals>;
|
|
13
|
+
runAction: (domain: string, action: DomainProvAction) => Promise<void>;
|
|
14
|
+
log?: (event: string, detail: Record<string, unknown>) => void;
|
|
15
|
+
}
|
|
16
|
+
export interface DomainReconcileSummary {
|
|
17
|
+
processed: number;
|
|
18
|
+
advanced: number;
|
|
19
|
+
ready: number;
|
|
20
|
+
errors: number;
|
|
21
|
+
}
|
|
22
|
+
export declare function reconcileDomainTick(domains: string[], deps: DomainReconcileDeps): Promise<DomainReconcileSummary>;
|
|
23
|
+
export interface DomainDaemonOptions extends DomainReconcileDeps {
|
|
24
|
+
intervalSec?: number;
|
|
25
|
+
maxTicks?: number;
|
|
26
|
+
shouldStop?: () => boolean;
|
|
27
|
+
sleep?: (ms: number) => Promise<void>;
|
|
28
|
+
}
|
|
29
|
+
export declare function runDomainDaemon(domains: () => Promise<string[]>, opts: DomainDaemonOptions): Promise<DomainReconcileSummary>;
|
|
30
|
+
//# sourceMappingURL=domain-daemon.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"domain-daemon.d.ts","sourceRoot":"","sources":["../../src/lib/domain-daemon.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAIL,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACtB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,WAAW,mBAAmB;IAClC,aAAa,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC;IAC1D,SAAS,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IACvE,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CAChE;AAED,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,MAAM,EAAE,EACjB,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,sBAAsB,CAAC,CAyBjC;AAED,MAAM,WAAW,mBAAoB,SAAQ,mBAAmB;IAC9D,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,OAAO,CAAC;IAC3B,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC,EAChC,IAAI,EAAE,mBAAmB,GACxB,OAAO,CAAC,sBAAsB,CAAC,CAiBjC"}
|
package/dist/lib/godaddy.d.ts
CHANGED
|
@@ -66,5 +66,17 @@ export declare function syncToLocalDb(dbFns: {
|
|
|
66
66
|
createDomain: (input: CreateDomainInput) => Domain;
|
|
67
67
|
updateDomain: (id: string, input: UpdateDomainInput) => Domain | null;
|
|
68
68
|
}): Promise<GoDaddySyncResult>;
|
|
69
|
+
export interface GodaddyCapability {
|
|
70
|
+
configured: boolean;
|
|
71
|
+
gated: boolean;
|
|
72
|
+
notes: string;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* GoDaddy retail Domains API capability. Since 2024 GoDaddy gated the Domains
|
|
76
|
+
* API behind account thresholds (>=10 domains / Discount Domain Club): the
|
|
77
|
+
* availability endpoint often still works, but production purchase and DNS
|
|
78
|
+
* writes require a qualifying account. We therefore treat purchase/DNS as gated.
|
|
79
|
+
*/
|
|
80
|
+
export declare function godaddyCapability(env?: Record<string, string | undefined>): GodaddyCapability;
|
|
69
81
|
export {};
|
|
70
82
|
//# sourceMappingURL=godaddy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"godaddy.d.ts","sourceRoot":"","sources":["../../src/lib/godaddy.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAMrF,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,mBAAoB,SAAQ,aAAa;IACxD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,qBAAa,eAAgB,SAAQ,KAAK;IAG/B,UAAU,CAAC,EAAE,MAAM;IACnB,OAAO,CAAC,EAAE,OAAO;gBAFxB,OAAO,EAAE,MAAM,EACR,UAAU,CAAC,EAAE,MAAM,YAAA,EACnB,OAAO,CAAC,EAAE,OAAO,YAAA;CAK3B;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAMD,KAAK,OAAO,GAAG,OAAO,UAAU,CAAC,KAAK,CAAC;AAIvC,wBAAgB,SAAS,CAAC,EAAE,EAAE,OAAO,GAAG,IAAI,GAAG,IAAI,CAElD;AAsED,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,aAAa,EAAE,CAAC,CAEnE;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAEhF;AAED,wBAAsB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,oBAAoB,CAAC,CAM/E;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAK9F;AAED,wBAAsB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAE9F;AAED,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAKpF;AAsBD,wBAAsB,aAAa,CAAC,KAAK,EAAE;IACzC,eAAe,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IACjD,YAAY,EAAE,CAAC,KAAK,EAAE,iBAAiB,KAAK,MAAM,CAAC;IACnD,YAAY,EAAE,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,iBAAiB,KAAK,MAAM,GAAG,IAAI,CAAC;CACvE,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA6D7B"}
|
|
1
|
+
{"version":3,"file":"godaddy.d.ts","sourceRoot":"","sources":["../../src/lib/godaddy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NS drift reconciler — enforces the always-Cloudflare-DNS invariant across the
|
|
3
|
+
* portfolio: every domain's nameservers must point to Cloudflare. Detects drift
|
|
4
|
+
* (registrar NS not Cloudflare) and can re-delegate. Pure detection + an
|
|
5
|
+
* injected reconcile loop, so it is fully testable.
|
|
6
|
+
*/
|
|
7
|
+
export declare function isCloudflareNs(ns: string[]): boolean;
|
|
8
|
+
export interface NsDriftVerdict {
|
|
9
|
+
domain: string;
|
|
10
|
+
drifted: boolean;
|
|
11
|
+
reason: string;
|
|
12
|
+
}
|
|
13
|
+
export declare function classifyNsDrift(domain: string, registrarNs: string[]): NsDriftVerdict;
|
|
14
|
+
export interface NsReconcileDeps {
|
|
15
|
+
getRegistrarNs: (domain: string) => Promise<string[]>;
|
|
16
|
+
getCloudflareNs: (domain: string) => Promise<string[]>;
|
|
17
|
+
setRegistrarNs: (domain: string, ns: string[]) => Promise<void>;
|
|
18
|
+
log?: (event: string, detail: Record<string, unknown>) => void;
|
|
19
|
+
}
|
|
20
|
+
export interface NsReconcileSummary {
|
|
21
|
+
checked: number;
|
|
22
|
+
drifted: NsDriftVerdict[];
|
|
23
|
+
fixed: string[];
|
|
24
|
+
errors: number;
|
|
25
|
+
}
|
|
26
|
+
export declare function reconcileNsDrift(domains: string[], deps: NsReconcileDeps, opts?: {
|
|
27
|
+
fix?: boolean;
|
|
28
|
+
}): Promise<NsReconcileSummary>;
|
|
29
|
+
//# sourceMappingURL=ns-drift.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ns-drift.d.ts","sourceRoot":"","sources":["../../src/lib/ns-drift.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,GAAG,OAAO,CAEpD;AAED,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,cAAc,CAIrF;AAED,MAAM,WAAW,eAAe;IAC9B,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACtD,eAAe,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE,CAAC,CAAC;IACvD,cAAc,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,EAAE,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;IAChE,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;CAChE;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,cAAc,EAAE,CAAC;IAC1B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,MAAM,EAAE,EACjB,IAAI,EAAE,eAAe,EACrB,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,OAAO,CAAA;CAAO,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CAwB7B"}
|