@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.
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Domain provisioning state machine (open-domains side) — pure transitions plus
3
+ * a `deriveDomainState` that maps live signals (registered? zone? NS delegated?
4
+ * propagated? active?) to the current lifecycle state. The CLI `provision-status`
5
+ * command derives state live so no extra persistence is required, while the
6
+ * daemon advances domains transition-by-transition.
7
+ */
8
+ export type DomainProvState = "requested" | "registered" | "cf_zone_ready" | "ns_delegated" | "ns_propagated" | "dns_managed" | "ready" | "failed";
9
+ export type DomainProvAction = "register" | "create_cf_zone" | "delegate_ns" | "check_ns_propagation" | "verify_dns" | "finalize";
10
+ interface Step {
11
+ action: DomainProvAction;
12
+ next: DomainProvState;
13
+ }
14
+ export declare const DOMAIN_FLOW: Record<Exclude<DomainProvState, "ready" | "failed">, Step>;
15
+ export declare function isDomainTerminal(s: DomainProvState): boolean;
16
+ export declare function domainActionFor(s: DomainProvState): DomainProvAction | null;
17
+ export declare function domainNext(s: DomainProvState): DomainProvState | null;
18
+ export declare function domainHappyPath(): DomainProvState[];
19
+ export interface DomainSignals {
20
+ registered?: boolean;
21
+ zoneExists?: boolean;
22
+ registrarNsAreCloudflare?: boolean;
23
+ publicNsAreCloudflare?: boolean;
24
+ zoneActive?: boolean;
25
+ }
26
+ /** Map observed live signals to the furthest lifecycle state reached. */
27
+ export declare function deriveDomainState(sig: DomainSignals): DomainProvState;
28
+ export {};
29
+ //# sourceMappingURL=provision-state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"provision-state.d.ts","sourceRoot":"","sources":["../../src/lib/provision-state.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,MAAM,eAAe,GACvB,WAAW,GACX,YAAY,GACZ,eAAe,GACf,cAAc,GACd,eAAe,GACf,aAAa,GACb,OAAO,GACP,QAAQ,CAAC;AAEb,MAAM,MAAM,gBAAgB,GACxB,UAAU,GACV,gBAAgB,GAChB,aAAa,GACb,sBAAsB,GACtB,YAAY,GACZ,UAAU,CAAC;AAEf,UAAU,IAAI;IAAG,MAAM,EAAE,gBAAgB,CAAC;IAAC,IAAI,EAAE,eAAe,CAAA;CAAE;AAElE,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,OAAO,CAAC,eAAe,EAAE,OAAO,GAAG,QAAQ,CAAC,EAAE,IAAI,CAOlF,CAAC;AAIF,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,eAAe,GAAG,OAAO,CAE5D;AACD,wBAAgB,eAAe,CAAC,CAAC,EAAE,eAAe,GAAG,gBAAgB,GAAG,IAAI,CAG3E;AACD,wBAAgB,UAAU,CAAC,CAAC,EAAE,eAAe,GAAG,eAAe,GAAG,IAAI,CAGrE;AACD,wBAAgB,eAAe,IAAI,eAAe,EAAE,CAEnD;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,wBAAwB,CAAC,EAAE,OAAO,CAAC;IACnC,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,yEAAyE;AACzE,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,aAAa,GAAG,eAAe,CAOrE"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Route53 domain-registration polling — pure, reusable by the buy command and
3
+ * the domain provisioning daemon. The AWS status string is classified into a
4
+ * terminal/pending verdict; pollRegistrationUntilDone drives it to completion
5
+ * with an injectable status getter + sleep (so it is fully unit-testable).
6
+ */
7
+ export type RegVerdict = "pending" | "success" | "failed";
8
+ export declare function classifyRegistrationStatus(status: string): RegVerdict;
9
+ export interface PollResult {
10
+ status: "success" | "failed" | "timeout";
11
+ attempts: number;
12
+ message?: string;
13
+ }
14
+ export interface PollOptions {
15
+ getStatus: (operationId: string) => Promise<{
16
+ status: string;
17
+ message?: string;
18
+ }>;
19
+ maxAttempts?: number;
20
+ intervalMs?: number;
21
+ sleep?: (ms: number) => Promise<void>;
22
+ }
23
+ export declare function pollRegistrationUntilDone(operationId: string, opts: PollOptions): Promise<PollResult>;
24
+ //# sourceMappingURL=registration-poll.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registration-poll.d.ts","sourceRoot":"","sources":["../../src/lib/registration-poll.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;AAE1D,wBAAgB,0BAA0B,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,CAKrE;AAED,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,SAAS,CAAC;IACzC,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,WAAW;IAC1B,SAAS,EAAE,CAAC,WAAW,EAAE,MAAM,KAAK,OAAO,CAAC;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAClF,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,CAAC;CACvC;AAED,wBAAsB,yBAAyB,CAC7C,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,WAAW,GAChB,OAAO,CAAC,UAAU,CAAC,CAerB"}
@@ -85,6 +85,22 @@ export interface DomainDetail extends RegisteredDomain {
85
85
  nameservers: string[];
86
86
  }
87
87
  export declare function getDomainDetail(domain: string, config?: Route53Config): Promise<DomainDetail>;
88
+ /** Minimal Route53 Domains client surface — lets tests inject a fake `send`. */
89
+ type Route53DomainsSend = {
90
+ send: (cmd: unknown) => Promise<{
91
+ OperationId?: string;
92
+ }>;
93
+ };
94
+ /**
95
+ * Point a domain's nameservers at a new set (the Cloudflare zone NS).
96
+ *
97
+ * Enforces the always-Cloudflare-DNS rule: after a domain is registered with
98
+ * ANY registrar, delegate DNS to Cloudflare by calling this with the Cloudflare
99
+ * zone's nameservers. Returns the async operation id (poll getOperationDetail).
100
+ */
101
+ export declare function updateNameservers(domain: string, nameservers: string[], config?: Route53Config, client?: Route53DomainsSend): Promise<{
102
+ operationId: string;
103
+ }>;
88
104
  export declare function listRegisteredDomains(config?: Route53Config): Promise<RegisteredDomain[]>;
89
105
  export declare function createHostedZone(domain: string, comment?: string, config?: Route53Config): Promise<HostedZoneInfo>;
90
106
  export declare function listHostedZones(config?: Route53Config): Promise<HostedZoneInfo[]>;
@@ -98,4 +114,5 @@ export declare function upsertRecord(hostedZoneId: string, record: Route53Record
98
114
  export declare function deleteRecord(hostedZoneId: string, record: Route53RecordInput, config?: Route53Config): Promise<void>;
99
115
  export declare function upsertRecords(hostedZoneId: string, records: Route53RecordInput[], config?: Route53Config): Promise<void>;
100
116
  export declare function createRoute53Provider(config?: Route53Config): FullProvider;
117
+ export {};
101
118
  //# sourceMappingURL=route53.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"route53.d.ts","sourceRoot":"","sources":["../../src/lib/route53.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"route53.d.ts","sourceRoot":"","sources":["../../src/lib/route53.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAuBH,OAAO,KAAK,EACV,YAAY,EAOb,MAAM,gBAAgB,CAAC;AAIxB,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,cAAc,EAAE,MAAM,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,CAAC;IACrB,QAAQ,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,kBAAkB;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,gBAAgB;IAC/B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,OAAO,CAAC;IACpB,aAAa,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,iFAAiF;IACjF,YAAY,CAAC,EAAE,kBAAkB,CAAC;CACnC;AAED,MAAM,WAAW,kBAAkB;IACjC,8EAA8E;IAC9E,cAAc,EAAE,MAAM,CAAC;IACvB,+DAA+D;IAC/D,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,kGAAkG;IAClG,YAAY,CAAC,EAAE,kBAAkB,CAAC;CACnC;AAID,wBAAgB,SAAS,IAAI,aAAa,CAMzC;AAgCD,wBAAsB,iBAAiB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,kBAAkB,CAAC,CAgC3G;AAED,wBAAsB,cAAc,CAClC,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,iBAAiB,EAC1B,aAAa,SAAI,EACjB,SAAS,UAAO,EAChB,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAgClC;AAED,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,EACnB,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAUhE;AAED,MAAM,WAAW,YAAa,SAAQ,gBAAgB;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB;AAED,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,CAAC,CAWnG;AAED,gFAAgF;AAChF,KAAK,kBAAkB,GAAG;IAAE,IAAI,EAAE,CAAC,GAAG,EAAE,OAAO,KAAK,OAAO,CAAC;QAAE,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;CAAE,CAAC;AAExF;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACrC,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EAAE,EACrB,MAAM,CAAC,EAAE,aAAa,EACtB,MAAM,CAAC,EAAE,kBAAkB,GAC1B,OAAO,CAAC;IAAE,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC,CAYlC;AAED,wBAAsB,qBAAqB,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,gBAAgB,EAAE,CAAC,CAmB/F;AAaD,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,MAAM,EACd,OAAO,CAAC,EAAE,MAAM,EAChB,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,cAAc,CAAC,CAmBzB;AAED,wBAAsB,eAAe,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAmBvF;AAED,wBAAsB,aAAa,CACjC,YAAY,EAAE,MAAM,EACpB,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,cAAc,GAAG;IAAE,YAAY,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAYtD;AAED,wBAAsB,gBAAgB,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAGlG;AAED,wBAAsB,sBAAsB,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAInH;AA6CD,wBAAsB,WAAW,CAAC,YAAY,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC,CA2BxG;AAED,wBAAsB,YAAY,CAChC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,kBAAkB,EAC1B,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC,CAUf;AAED,wBAAsB,YAAY,CAChC,YAAY,EAAE,MAAM,EACpB,MAAM,EAAE,kBAAkB,EAC1B,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC,CAUf;AAED,wBAAsB,aAAa,CACjC,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,kBAAkB,EAAE,EAC7B,MAAM,CAAC,EAAE,aAAa,GACrB,OAAO,CAAC,IAAI,CAAC,CAaf;AAID,wBAAgB,qBAAqB,CAAC,MAAM,CAAC,EAAE,aAAa,GAAG,YAAY,CAwH1E"}
package/dist/mcp/index.js CHANGED
@@ -16073,7 +16073,7 @@ var require_package = __commonJS((exports, module) => {
16073
16073
 
16074
16074
  // node_modules/@aws-sdk/util-user-agent-node/dist-cjs/index.js
16075
16075
  var require_dist_cjs41 = __commonJS((exports) => {
16076
- var __dirname = "/Users/hasna/Workspace/hasna/opensource/open-domains/node_modules/@aws-sdk/util-user-agent-node/dist-cjs";
16076
+ var __dirname = "/home/hasna/workspace/hasna/opensource/open-domains/node_modules/@aws-sdk/util-user-agent-node/dist-cjs";
16077
16077
  var node_os = __require("os");
16078
16078
  var node_process = __require("process");
16079
16079
  var utilConfigProvider = require_dist_cjs33();
@@ -30795,6 +30795,7 @@ var exports_route53 = {};
30795
30795
  __export(exports_route53, {
30796
30796
  upsertRecords: () => upsertRecords,
30797
30797
  upsertRecord: () => upsertRecord,
30798
+ updateNameservers: () => updateNameservers,
30798
30799
  registerDomain: () => registerDomain,
30799
30800
  listRegisteredDomains: () => listRegisteredDomains,
30800
30801
  listRecords: () => listRecords,
@@ -30908,6 +30909,17 @@ async function getDomainDetail(domain, config) {
30908
30909
  nameservers: (result.Nameservers ?? []).map((ns) => ns.Name ?? "").filter(Boolean)
30909
30910
  };
30910
30911
  }
30912
+ async function updateNameservers(domain, nameservers, config, client) {
30913
+ if (!nameservers.length) {
30914
+ throw new Error("updateNameservers requires at least one nameserver");
30915
+ }
30916
+ const domains = client ?? makeClients(config).domains;
30917
+ const result = await domains.send(new UpdateDomainNameserversCommand({
30918
+ DomainName: domain,
30919
+ Nameservers: nameservers.map((name) => ({ Name: name }))
30920
+ }));
30921
+ return { operationId: result.OperationId ?? "" };
30922
+ }
30911
30923
  async function listRegisteredDomains(config) {
30912
30924
  const { domains } = makeClients(config);
30913
30925
  const all = [];
@@ -36950,17 +36962,38 @@ async function syncToLocalDb2(dbFns) {
36950
36962
  // src/lib/registrar.ts
36951
36963
  init_route53();
36952
36964
 
36965
+ // src/lib/cloudflare-auth.ts
36966
+ function resolveCloudflareConfig(env = process.env) {
36967
+ const accountId = env["CLOUDFLARE_ACCOUNT_ID"] || env["HASNAXYZ_CLOUDFLARE_LIVE_ACCOUNT_ID"] || undefined;
36968
+ if (env["CLOUDFLARE_API_TOKEN"]) {
36969
+ return { apiToken: env["CLOUDFLARE_API_TOKEN"], accountId };
36970
+ }
36971
+ if (env["CLOUDFLARE_API_KEY"] && env["CLOUDFLARE_EMAIL"]) {
36972
+ return { apiKey: env["CLOUDFLARE_API_KEY"], email: env["CLOUDFLARE_EMAIL"], accountId };
36973
+ }
36974
+ if (env["HASNAXYZ_CLOUDFLARE_LIVE_API_KEY"] && env["HASNAXYZ_CLOUDFLARE_LIVE_EMAIL"]) {
36975
+ return {
36976
+ apiKey: env["HASNAXYZ_CLOUDFLARE_LIVE_API_KEY"],
36977
+ email: env["HASNAXYZ_CLOUDFLARE_LIVE_EMAIL"],
36978
+ accountId
36979
+ };
36980
+ }
36981
+ return accountId ? { accountId } : {};
36982
+ }
36983
+ function cloudflareAuthHeaders(cfg) {
36984
+ if (cfg.apiToken)
36985
+ return { Authorization: `Bearer ${cfg.apiToken}` };
36986
+ if (cfg.apiKey && cfg.email)
36987
+ return { "X-Auth-Key": cfg.apiKey, "X-Auth-Email": cfg.email };
36988
+ throw new Error("Cloudflare credentials not configured. Set CLOUDFLARE_API_TOKEN, or CLOUDFLARE_API_KEY + CLOUDFLARE_EMAIL.");
36989
+ }
36990
+
36953
36991
  // src/lib/cloudflare.ts
36954
36992
  function getConfig3() {
36955
- return {
36956
- apiToken: process.env["CLOUDFLARE_API_TOKEN"],
36957
- accountId: process.env["CLOUDFLARE_ACCOUNT_ID"]
36958
- };
36993
+ return resolveCloudflareConfig();
36959
36994
  }
36960
36995
  function checkCredentials2(cfg) {
36961
- if (!cfg.apiToken) {
36962
- throw new Error("Cloudflare credentials not configured. Set CLOUDFLARE_API_TOKEN environment variable.");
36963
- }
36996
+ cloudflareAuthHeaders(cfg);
36964
36997
  }
36965
36998
  var CF_BASE = "https://api.cloudflare.com/client/v4";
36966
36999
  async function cfFetch(path, opts = {}) {
@@ -36969,7 +37002,7 @@ async function cfFetch(path, opts = {}) {
36969
37002
  const res = await fetch(`${CF_BASE}${path}`, {
36970
37003
  method: opts.method ?? "GET",
36971
37004
  headers: {
36972
- Authorization: `Bearer ${cfg.apiToken}`,
37005
+ ...cloudflareAuthHeaders(cfg),
36973
37006
  "Content-Type": "application/json"
36974
37007
  },
36975
37008
  body: opts.body ? JSON.stringify(opts.body) : undefined
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hasna/domains",
3
- "version": "0.0.12",
3
+ "version": "0.0.14",
4
4
  "description": "Domain portfolio and DNS management for AI agents — CLI + MCP server with SQLite",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",