@hasna/domains 0.0.16 → 0.0.18

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/README.md CHANGED
@@ -78,7 +78,12 @@ domains sync --provider namecheap
78
78
  domains sync --provider godaddy
79
79
  domains sync --all
80
80
  domains renew example.com --provider namecheap
81
- domains check example.com
81
+
82
+ # Availability checks — pick the registrar with --provider
83
+ domains check example.com # default registrar (config default-registrar, else namecheap)
84
+ domains check --provider route53 example.com # AWS Route 53 availability
85
+ domains check --provider godaddy example.com
86
+ domains r53 check example.com # Route 53-specific subcommand (same backend)
82
87
 
83
88
  # Brand monitoring
84
89
  domains monitor mybrand
@@ -86,6 +91,13 @@ domains similar example.com
86
91
  domains threats example.com
87
92
  ```
88
93
 
94
+ > **Prefer the `domains` CLI over raw `aws` commands.** For Route 53 availability,
95
+ > registration status, and DNS, use `domains check --provider route53`,
96
+ > `domains r53 status`, and `domains dns …` instead of `aws route53domains …` /
97
+ > `aws route53 …`. The CLI applies the configured purchase profile, records the
98
+ > result in the local portfolio DB, and works the same across registrars — raw
99
+ > `aws` calls bypass all of that.
100
+
89
101
  ## MCP Server
90
102
 
91
103
  ```bash
@@ -1,3 +1,4 @@
1
1
  import type { Command } from "commander";
2
+ export declare function assertInteractiveTty(): void;
2
3
  export declare function registerInteractiveCommand(program: Command): void;
3
4
  //# sourceMappingURL=interactive.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/interactive.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAgBjE"}
1
+ {"version":3,"file":"interactive.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/interactive.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,wBAAgB,oBAAoB,IAAI,IAAI,CAQ3C;AAED,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CASjE"}
@@ -1 +1 @@
1
- {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/providers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBzC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAoM/D"}
1
+ {"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/providers.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuBzC,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuM/D"}
package/dist/cli/index.js CHANGED
@@ -37509,6 +37509,7 @@ Registrar / DNS Providers:`);
37509
37509
  }
37510
37510
 
37511
37511
  // src/cli/commands/providers.ts
37512
+ init_config();
37512
37513
  init_domains();
37513
37514
  function registerProviderCommands(program2) {
37514
37515
  program2.command("providers").description("Show which registrar providers are configured").option("--json", "Output as JSON", false).action((opts) => {
@@ -37659,17 +37660,14 @@ function registerProviderCommands(program2) {
37659
37660
  process.exit(1);
37660
37661
  }
37661
37662
  });
37662
- program2.command("check").description("Check domain availability").argument("<name>", "Domain name (e.g. example.com)").option("--json", "Output as JSON", false).action(async (name, opts) => {
37663
+ program2.command("check").description("Check domain availability via a registrar provider (route53, namecheap, godaddy)").argument("<name>", "Domain name (e.g. example.com)").option("--provider <name>", "Registrar provider \u2014 defaults to config default-registrar, else namecheap").option("--json", "Output as JSON", false).action(async (name, opts) => {
37663
37664
  try {
37664
- const result = await checkAvailability(name);
37665
+ const providerName = opts.provider ?? loadConfig3().default_registrar ?? "namecheap";
37666
+ const result = providerName === "namecheap" ? await checkAvailability(name) : await getRegistrarProvider(providerName).checkAvailability(name);
37665
37667
  if (opts.json) {
37666
- console.log(JSON.stringify(result, null, 2));
37668
+ console.log(JSON.stringify({ provider: providerName, ...result }, null, 2));
37667
37669
  } else {
37668
- if (result.available) {
37669
- console.log(`${result.domain} is AVAILABLE`);
37670
- } else {
37671
- console.log(`${result.domain} is NOT available`);
37672
- }
37670
+ console.log(`${result.domain} is ${result.available ? "AVAILABLE" : "NOT available"} (via ${providerName})`);
37673
37671
  }
37674
37672
  } catch (error) {
37675
37673
  console.error(`Availability check failed: ${error instanceof Error ? error.message : String(error)}`);
@@ -39959,8 +39957,13 @@ function formatDate(iso) {
39959
39957
  function daysUntil(iso) {
39960
39958
  if (!iso)
39961
39959
  return "\u2014";
39962
- const ms = new Date(iso).getTime() - Date.now();
39960
+ const parsed = new Date(iso).getTime();
39961
+ if (!Number.isFinite(parsed))
39962
+ return "\u2014";
39963
+ const ms = parsed - Date.now();
39963
39964
  const days = Math.ceil(ms / (1000 * 60 * 60 * 24));
39965
+ if (!Number.isFinite(days))
39966
+ return "\u2014";
39964
39967
  if (days < 0)
39965
39968
  return "expired";
39966
39969
  if (days === 0)
@@ -39994,6 +39997,20 @@ function filterLabel(filter) {
39994
39997
  return "Premium";
39995
39998
  }
39996
39999
  }
40000
+ function resolveInitialFilter(initialStatus) {
40001
+ if (initialStatus === "active")
40002
+ return "active";
40003
+ if (initialStatus === "premium")
40004
+ return "premium";
40005
+ if (initialStatus === "expiring")
40006
+ return "expiring";
40007
+ return "all";
40008
+ }
40009
+ function clampSelectedIndex(index, length) {
40010
+ if (length <= 0)
40011
+ return 0;
40012
+ return Math.max(0, Math.min(index, length - 1));
40013
+ }
39997
40014
 
39998
40015
  // src/cli/tui/Header.tsx
39999
40016
  import { jsxDEV } from "react/jsx-dev-runtime";
@@ -40038,18 +40055,24 @@ function Header({ count, filter, view }) {
40038
40055
  import { Box as Box2, Text as Text2 } from "ink";
40039
40056
  import { jsxDEV as jsxDEV2 } from "react/jsx-dev-runtime";
40040
40057
  var VISIBLE_ROWS = 16;
40041
- function DomainTable({ domains, selectedIndex, compact = false }) {
40058
+ function DomainTable({
40059
+ domains,
40060
+ selectedIndex,
40061
+ compact = false,
40062
+ emptyMessage = "No domains match this filter. Press [f] to change filter or [r] to refresh."
40063
+ }) {
40042
40064
  if (domains.length === 0) {
40043
40065
  return /* @__PURE__ */ jsxDEV2(Box2, {
40044
40066
  flexDirection: "column",
40045
40067
  paddingLeft: compact ? 0 : 1,
40046
40068
  children: /* @__PURE__ */ jsxDEV2(Text2, {
40047
40069
  dimColor: true,
40048
- children: "No domains match this filter. Press [f] to change filter or [r] to refresh."
40070
+ children: emptyMessage
40049
40071
  }, undefined, false, undefined, this)
40050
40072
  }, undefined, false, undefined, this);
40051
40073
  }
40052
- const start = Math.max(0, Math.min(selectedIndex - Math.floor(VISIBLE_ROWS / 2), Math.max(0, domains.length - VISIBLE_ROWS)));
40074
+ const safeSelectedIndex = clampSelectedIndex(selectedIndex, domains.length);
40075
+ const start = Math.max(0, Math.min(safeSelectedIndex - Math.floor(VISIBLE_ROWS / 2), Math.max(0, domains.length - VISIBLE_ROWS)));
40053
40076
  const visible = domains.slice(start, start + VISIBLE_ROWS);
40054
40077
  return /* @__PURE__ */ jsxDEV2(Box2, {
40055
40078
  flexDirection: "column",
@@ -40083,7 +40106,7 @@ function DomainTable({ domains, selectedIndex, compact = false }) {
40083
40106
  }, undefined, true, undefined, this),
40084
40107
  visible.map((domain, offset) => {
40085
40108
  const index = start + offset;
40086
- const selected = index === selectedIndex;
40109
+ const selected = index === safeSelectedIndex;
40087
40110
  const statusColor = STATUS_COLORS[domain.status] ?? "white";
40088
40111
  return /* @__PURE__ */ jsxDEV2(Box2, {
40089
40112
  children: [
@@ -40346,6 +40369,7 @@ function SearchView({
40346
40369
  onSelect(results[selectedIndex]);
40347
40370
  }
40348
40371
  });
40372
+ const emptyMessage = query.trim().length < 2 ? "Type at least 2 characters to search." : "No matching domains. Refine your query or press [esc] to go back.";
40349
40373
  return /* @__PURE__ */ jsxDEV4(Box4, {
40350
40374
  flexDirection: "column",
40351
40375
  children: [
@@ -40375,13 +40399,14 @@ function SearchView({
40375
40399
  }, undefined, true, undefined, this),
40376
40400
  /* @__PURE__ */ jsxDEV4(Text4, {
40377
40401
  dimColor: true,
40378
- children: "[enter] open \xB7 [esc] back"
40402
+ children: "[enter] open \xB7 [esc] back \xB7 [q] quit \xB7 \u2191\u2193 navigate results"
40379
40403
  }, undefined, false, undefined, this),
40380
40404
  /* @__PURE__ */ jsxDEV4(Box4, {
40381
40405
  marginTop: 1,
40382
40406
  children: /* @__PURE__ */ jsxDEV4(DomainTable, {
40383
40407
  domains: results,
40384
- selectedIndex
40408
+ selectedIndex,
40409
+ emptyMessage
40385
40410
  }, undefined, false, undefined, this)
40386
40411
  }, undefined, false, undefined, this)
40387
40412
  ]
@@ -40405,7 +40430,7 @@ function loadDomainsForFilter(activeFilter) {
40405
40430
  function App({ initialStatus }) {
40406
40431
  const { exit } = useApp();
40407
40432
  const [view, setView] = useState2("list");
40408
- const initialFilter = initialStatus === "active" ? "active" : initialStatus === "premium" ? "premium" : "all";
40433
+ const initialFilter = resolveInitialFilter(initialStatus);
40409
40434
  const [filter, setFilter] = useState2(initialFilter);
40410
40435
  const [selectedIndex, setSelectedIndex] = useState2(0);
40411
40436
  const [details, setDetails] = useState2(null);
@@ -40415,13 +40440,13 @@ function App({ initialStatus }) {
40415
40440
  const refresh = useCallback(() => {
40416
40441
  const next = loadDomainsForFilter(filter);
40417
40442
  setDomains(next);
40418
- setSelectedIndex((current) => Math.min(current, Math.max(0, next.length - 1)));
40443
+ setSelectedIndex((current) => clampSelectedIndex(current, next.length));
40419
40444
  return next;
40420
40445
  }, [filter]);
40421
40446
  useEffect(() => {
40422
40447
  refresh();
40423
40448
  }, [refresh]);
40424
- const selectedDomain = domains[selectedIndex] ?? null;
40449
+ const selectedDomain = domains[clampSelectedIndex(selectedIndex, domains.length)] ?? null;
40425
40450
  const previewDetails = useMemo(() => {
40426
40451
  if (!selectedDomain)
40427
40452
  return null;
@@ -40433,15 +40458,17 @@ function App({ initialStatus }) {
40433
40458
  return listDnsRecords(selectedDomain.id);
40434
40459
  }, [selectedDomain]);
40435
40460
  useInput2((input, key) => {
40436
- if (input === "q" && view !== "search") {
40461
+ if (input === "q") {
40437
40462
  exit();
40438
40463
  return;
40439
40464
  }
40440
40465
  if (view === "list") {
40441
40466
  if (key.upArrow || input === "k") {
40442
- setSelectedIndex((index) => Math.max(0, index - 1));
40467
+ setSelectedIndex((index) => clampSelectedIndex(index - 1, domains.length));
40443
40468
  } else if (key.downArrow || input === "j") {
40444
- setSelectedIndex((index) => Math.min(domains.length - 1, index + 1));
40469
+ if (domains.length === 0)
40470
+ return;
40471
+ setSelectedIndex((index) => clampSelectedIndex(index + 1, domains.length));
40445
40472
  } else if (key.return && selectedDomain) {
40446
40473
  const full = getDomainDetails(selectedDomain.id);
40447
40474
  if (full) {
@@ -40457,16 +40484,19 @@ function App({ initialStatus }) {
40457
40484
  const index = DOMAIN_FILTERS.indexOf(current);
40458
40485
  return DOMAIN_FILTERS[(index + 1) % DOMAIN_FILTERS.length];
40459
40486
  });
40487
+ setSelectedIndex(0);
40460
40488
  } else if (input === "r") {
40461
40489
  refresh();
40462
40490
  }
40463
40491
  return;
40464
40492
  }
40465
40493
  if (view === "search") {
40466
- if (key.upArrow || input === "k") {
40467
- setSearchIndex((index) => Math.max(0, index - 1));
40468
- } else if (key.downArrow || input === "j") {
40469
- setSearchIndex((index) => Math.min(searchResults.length - 1, index + 1));
40494
+ if (key.upArrow) {
40495
+ setSearchIndex((index) => clampSelectedIndex(index - 1, searchResults.length));
40496
+ } else if (key.downArrow) {
40497
+ if (searchResults.length === 0)
40498
+ return;
40499
+ setSearchIndex((index) => clampSelectedIndex(index + 1, searchResults.length));
40470
40500
  }
40471
40501
  return;
40472
40502
  }
@@ -40498,6 +40528,7 @@ function App({ initialStatus }) {
40498
40528
  }
40499
40529
  }, []);
40500
40530
  const detailDns = details ? listDnsRecords(details.domain.id) : [];
40531
+ const listSelectedIndex = clampSelectedIndex(selectedIndex, domains.length);
40501
40532
  return /* @__PURE__ */ jsxDEV5(Box5, {
40502
40533
  flexDirection: "column",
40503
40534
  padding: 1,
@@ -40512,7 +40543,7 @@ function App({ initialStatus }) {
40512
40543
  children: [
40513
40544
  /* @__PURE__ */ jsxDEV5(DomainTable, {
40514
40545
  domains,
40515
- selectedIndex
40546
+ selectedIndex: listSelectedIndex
40516
40547
  }, undefined, false, undefined, this),
40517
40548
  previewDetails && /* @__PURE__ */ jsxDEV5(Box5, {
40518
40549
  marginTop: 1,
@@ -40545,7 +40576,7 @@ function App({ initialStatus }) {
40545
40576
  }, undefined, false, undefined, this),
40546
40577
  view === "search" && /* @__PURE__ */ jsxDEV5(SearchView, {
40547
40578
  results: searchResults,
40548
- selectedIndex: searchIndex,
40579
+ selectedIndex: clampSelectedIndex(searchIndex, searchResults.length),
40549
40580
  onSearch: handleSearch,
40550
40581
  onSelect: handleSearchSelect,
40551
40582
  onBack: () => setView("list")
@@ -40556,13 +40587,16 @@ function App({ initialStatus }) {
40556
40587
 
40557
40588
  // src/cli/commands/interactive.tsx
40558
40589
  import { jsxDEV as jsxDEV6 } from "react/jsx-dev-runtime";
40590
+ function assertInteractiveTty() {
40591
+ if (!process.stdin.isTTY || !process.stdout.isTTY) {
40592
+ console.error(chalk.red("Interactive mode requires a TTY terminal."));
40593
+ console.error(chalk.dim("Use `domains domain list` or `domains domain get <name>` for non-interactive use."));
40594
+ process.exit(1);
40595
+ }
40596
+ }
40559
40597
  function registerInteractiveCommand(program2) {
40560
- program2.command("interactive").description("Launch interactive domain portfolio browser (Ink TUI)").option("--status <status>", "Initial filter status (e.g. active, premium)").action((opts) => {
40561
- if (!process.stdin.isTTY || !process.stdout.isTTY) {
40562
- console.error(chalk.red("Interactive mode requires a TTY terminal."));
40563
- console.error(chalk.dim("Use `domains domain list` or `domains domain get <name>` for non-interactive use."));
40564
- process.exit(1);
40565
- }
40598
+ program2.command("interactive").description("Launch interactive domain portfolio browser (Ink TUI)").option("--status <status>", "Initial filter status (e.g. active, premium, expiring)").action((opts) => {
40599
+ assertInteractiveTty();
40566
40600
  render(/* @__PURE__ */ jsxDEV6(App, {
40567
40601
  initialStatus: opts.status
40568
40602
  }, undefined, false, undefined, this));
@@ -1 +1 @@
1
- {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../../src/cli/tui/App.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoD,MAAM,OAAO,CAAC;AAmBzE,MAAM,WAAW,QAAQ;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAeD,wBAAgB,GAAG,CAAC,EAAE,aAAa,EAAE,EAAE,QAAQ,qBAqJ9C"}
1
+ {"version":3,"file":"App.d.ts","sourceRoot":"","sources":["../../../src/cli/tui/App.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAoD,MAAM,OAAO,CAAC;AAmBzE,MAAM,WAAW,QAAQ;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAeD,wBAAgB,GAAG,CAAC,EAAE,aAAa,EAAE,EAAE,QAAQ,qBAoJ9C"}
@@ -4,7 +4,8 @@ interface DomainTableProps {
4
4
  domains: Domain[];
5
5
  selectedIndex: number;
6
6
  compact?: boolean;
7
+ emptyMessage?: string;
7
8
  }
8
- export declare function DomainTable({ domains, selectedIndex, compact }: DomainTableProps): React.JSX.Element;
9
+ export declare function DomainTable({ domains, selectedIndex, compact, emptyMessage, }: DomainTableProps): React.JSX.Element;
9
10
  export {};
10
11
  //# sourceMappingURL=DomainTable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"DomainTable.d.ts","sourceRoot":"","sources":["../../../src/cli/tui/DomainTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAWlD,UAAU,gBAAgB;IACxB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,aAAa,EAAE,OAAe,EAAE,EAAE,gBAAgB,qBA2DxF"}
1
+ {"version":3,"file":"DomainTable.d.ts","sourceRoot":"","sources":["../../../src/cli/tui/DomainTable.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAYlD,UAAU,gBAAgB;IACxB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,WAAW,CAAC,EAC1B,OAAO,EACP,aAAa,EACb,OAAe,EACf,YAA4F,GAC7F,EAAE,gBAAgB,qBA6DlB"}
@@ -1 +1 @@
1
- {"version":3,"file":"SearchView.d.ts","sourceRoot":"","sources":["../../../src/cli/tui/SearchView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAGxC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAGlD,UAAU,eAAe;IACvB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,wBAAgB,UAAU,CAAC,EACzB,OAAO,EACP,aAAa,EACb,QAAQ,EACR,QAAQ,EACR,MAAM,GACP,EAAE,eAAe,qBAgCjB"}
1
+ {"version":3,"file":"SearchView.d.ts","sourceRoot":"","sources":["../../../src/cli/tui/SearchView.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAmB,MAAM,OAAO,CAAC;AAGxC,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAGlD,UAAU,eAAe;IACvB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC,QAAQ,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;IACnC,MAAM,EAAE,MAAM,IAAI,CAAC;CACpB;AAED,wBAAgB,UAAU,CAAC,EACzB,OAAO,EACP,aAAa,EACb,QAAQ,EACR,QAAQ,EACR,MAAM,GACP,EAAE,eAAe,qBAyCjB"}
@@ -14,4 +14,6 @@ export declare function stripAnsi(value: string | undefined): string;
14
14
  export type DomainFilter = "all" | "active" | "expiring" | "premium";
15
15
  export declare const DOMAIN_FILTERS: DomainFilter[];
16
16
  export declare function filterLabel(filter: DomainFilter): string;
17
+ export declare function resolveInitialFilter(initialStatus?: string): DomainFilter;
18
+ export declare function clampSelectedIndex(index: number, length: number): number;
17
19
  //# sourceMappingURL=format.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../src/cli/tui/format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEhE,eAAO,MAAM,UAAU;;;;;CAKb,CAAC;AAEX,wBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAGxD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAGjE;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAOhE;AAED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAatD,CAAC;AAEF,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAE3D;AAED,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;AAErE,eAAO,MAAM,cAAc,EAAE,YAAY,EAA6C,CAAC;AAEvF,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAWxD"}
1
+ {"version":3,"file":"format.d.ts","sourceRoot":"","sources":["../../../src/cli/tui/format.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAEhE,eAAO,MAAM,UAAU;;;;;CAKb,CAAC;AAEX,wBAAgB,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAGxD;AAED,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAGjE;AAED,wBAAgB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAUhE;AAED,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,YAAY,EAAE,MAAM,CAatD,CAAC;AAEF,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAErD;AAED,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,CAE3D;AAED,MAAM,MAAM,YAAY,GAAG,KAAK,GAAG,QAAQ,GAAG,UAAU,GAAG,SAAS,CAAC;AAErE,eAAO,MAAM,cAAc,EAAE,YAAY,EAA6C,CAAC;AAEvF,wBAAgB,WAAW,CAAC,MAAM,EAAE,YAAY,GAAG,MAAM,CAWxD;AAED,wBAAgB,oBAAoB,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,YAAY,CAKzE;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAGxE"}
@@ -0,0 +1,2 @@
1
+ export declare const tuiTestTempDir: string;
2
+ //# sourceMappingURL=tui-test-setup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tui-test-setup.d.ts","sourceRoot":"","sources":["../../../src/cli/tui/tui-test-setup.ts"],"names":[],"mappings":"AAOA,eAAO,MAAM,cAAc,QAAU,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hasna/domains",
3
- "version": "0.0.16",
3
+ "version": "0.0.18",
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",