@unstoppabledomains/ud-cli 0.1.1-rc.2 → 0.1.1

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
@@ -1,20 +1,35 @@
1
1
  # ud-cli
2
2
 
3
- CLI tool for managing Unstoppable Domains — domain portfolio, DNS records, marketplace listings, and more.
3
+ Unstoppable Domains CLI Search, register, and manage your domains from the command line.
4
4
 
5
5
  ## Quick Start
6
6
 
7
7
  ```bash
8
- # Install globally from npm
8
+ # Install (macOS / Linux) — may prompt for sudo
9
+ curl -fsSL https://raw.githubusercontent.com/unstoppabledomains/ud-cli/main/install.sh | sh
10
+
11
+ # Or install via npm
9
12
  npm install -g @unstoppabledomains/ud-cli
10
13
 
11
14
  # Authenticate (opens browser for OAuth)
12
15
  ud auth login
13
16
 
14
17
  # You're ready — try it out
15
- ud domains list
18
+ ud domains search mybusiness
16
19
  ```
17
20
 
21
+ ## Updating
22
+
23
+ ```bash
24
+ # Check for updates
25
+ ud update check
26
+
27
+ # Update to the latest version
28
+ ud update
29
+ ```
30
+
31
+ The CLI also checks for updates automatically once every 24 hours and prints a notification if a newer version is available.
32
+
18
33
  ## Authentication
19
34
 
20
35
  ### OAuth (default, browser-based)
@@ -9,7 +9,7 @@ export function registerAuthCommands(program) {
9
9
  auth
10
10
  .command('login')
11
11
  .description('Authenticate with Unstoppable Domains')
12
- .option('-m, --method <method>', 'auth method (oauth or api-key)', 'oauth')
12
+ .option('-m, --method <method>', 'Auth method (oauth or api-key)', 'oauth')
13
13
  .option('-k, --key <key>', 'API key (for api-key method)')
14
14
  .action(async (options) => {
15
15
  const env = getActiveEnv();
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function registerUpdateCommands(program: Command): void;
3
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAiE7D"}
@@ -0,0 +1,63 @@
1
+ import chalk from 'chalk';
2
+ import ora from 'ora';
3
+ import { checkForUpdate, isBinaryInstall, selfUpdate, } from '../lib/update.js';
4
+ export function registerUpdateCommands(program) {
5
+ const update = program
6
+ .command('update')
7
+ .description('Update ud-cli to the latest version')
8
+ .action(async () => {
9
+ const spinner = ora('Checking for updates…').start();
10
+ let info;
11
+ try {
12
+ info = await checkForUpdate();
13
+ }
14
+ catch (err) {
15
+ spinner.fail('Failed to check for updates.');
16
+ console.error(chalk.red(err instanceof Error ? err.message : String(err)));
17
+ process.exitCode = 1;
18
+ return;
19
+ }
20
+ if (!info.updateAvailable) {
21
+ spinner.succeed(`Already up to date (${chalk.bold(info.current)}).`);
22
+ return;
23
+ }
24
+ spinner.info(`Update available: ${chalk.dim(info.current)} → ${chalk.bold(info.latest)}`);
25
+ if (!isBinaryInstall()) {
26
+ console.log();
27
+ console.log('This installation is managed by npm. Run:');
28
+ console.log(chalk.cyan(' npm update -g @unstoppabledomains/ud-cli'));
29
+ return;
30
+ }
31
+ const dlSpinner = ora(`Downloading v${info.latest}…`).start();
32
+ try {
33
+ const result = await selfUpdate(info.latest);
34
+ dlSpinner.succeed(`Updated successfully: ${chalk.dim(result.previousVersion)} → ${chalk.bold(result.newVersion)}`);
35
+ }
36
+ catch (err) {
37
+ dlSpinner.fail('Update failed.');
38
+ console.error(chalk.red(err instanceof Error ? err.message : String(err)));
39
+ process.exitCode = 1;
40
+ }
41
+ });
42
+ update
43
+ .command('check')
44
+ .description('Check if a newer version is available')
45
+ .action(async () => {
46
+ try {
47
+ const info = await checkForUpdate();
48
+ if (info.updateAvailable) {
49
+ console.log(`Update available: ${chalk.dim(info.current)} → ${chalk.bold(info.latest)}`);
50
+ console.log(chalk.dim('Run "ud update" to upgrade.'));
51
+ }
52
+ else {
53
+ console.log(`Up to date: ${chalk.bold(info.current)}`);
54
+ }
55
+ }
56
+ catch (err) {
57
+ console.error(chalk.red('Failed to check for updates.'));
58
+ console.error(chalk.red(err instanceof Error ? err.message : String(err)));
59
+ process.exitCode = 1;
60
+ }
61
+ });
62
+ }
63
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/commands/update.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AA0B7F,QAAA,MAAM,MAAM,iBAGV,CAAC;AAKH,wBAAgB,cAAc,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAErD;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED,wBAAgB,YAAY,IAAI,WAAW,CAE1C;AAED,wBAAgB,aAAa,IAAI,WAAW,CAE3C;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAEpD;AAED,wBAAgB,UAAU,CAAC,GAAG,CAAC,EAAE,WAAW,GAAG,MAAM,CAEpD;AAED,wBAAgB,UAAU,CAAC,GAAG,CAAC,EAAE,WAAW,GAAG,MAAM,CAEpD;AAED,wBAAgB,YAAY,CAAC,GAAG,CAAC,EAAE,WAAW,GAAG,iBAAiB,CAGjE;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,iBAAiB,CAAC,EAAE,GAAG,CAAC,EAAE,WAAW,GAAG,IAAI,CAI3F;AAED,wBAAgB,cAAc,CAAC,GAAG,CAAC,EAAE,WAAW,GAAG,IAAI,CAGtD;AAMD,wBAAgB,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAEhE;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe,CAEvE;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,eAAe,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAIhH;AAED,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,eAAe,GAAG,IAAI,CAc1F;AAED,OAAO,EAAE,MAAM,EAAE,CAAC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,EAAE,SAAS,EAAE,eAAe,EAAE,WAAW,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AA8B7F,QAAA,MAAM,MAAM,iBAGV,CAAC;AAKH,wBAAgB,cAAc,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAErD;AAED,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED,wBAAgB,YAAY,IAAI,WAAW,CAE1C;AAED,wBAAgB,aAAa,IAAI,WAAW,CAE3C;AAED,wBAAgB,aAAa,CAAC,GAAG,EAAE,WAAW,GAAG,IAAI,CAEpD;AAED,wBAAgB,UAAU,CAAC,GAAG,CAAC,EAAE,WAAW,GAAG,MAAM,CAEpD;AAED,wBAAgB,UAAU,CAAC,GAAG,CAAC,EAAE,WAAW,GAAG,MAAM,CAEpD;AAED,wBAAgB,YAAY,CAAC,GAAG,CAAC,EAAE,WAAW,GAAG,iBAAiB,CAGjE;AAED,wBAAgB,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,iBAAiB,CAAC,EAAE,GAAG,CAAC,EAAE,WAAW,GAAG,IAAI,CAI3F;AAED,wBAAgB,cAAc,CAAC,GAAG,CAAC,EAAE,WAAW,GAAG,IAAI,CAGtD;AAMD,wBAAgB,cAAc,IAAI,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAEhE;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,eAAe,CAEvE;AAED,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,eAAe,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,GAAG,IAAI,CAIhH;AAED,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,eAAe,GAAG,IAAI,CAc1F;AAED,OAAO,EAAE,MAAM,EAAE,CAAC"}
@@ -20,6 +20,10 @@ const schema = {
20
20
  type: 'object',
21
21
  default: {},
22
22
  },
23
+ lastUpdateCheck: {
24
+ type: 'number',
25
+ default: 0,
26
+ },
23
27
  };
24
28
  const config = new Conf({
25
29
  projectName: process.env.NODE_ENV === 'test' ? 'ud-cli-test' : 'ud-cli',
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
@@ -54,6 +54,7 @@ export interface AppConfig {
54
54
  environment: Environment;
55
55
  environments: Record<Environment, EnvironmentConfig>;
56
56
  defaults: Record<string, CommandDefaults>;
57
+ lastUpdateCheck: number;
57
58
  }
58
59
  export declare class ApiError extends Error {
59
60
  statusCode: number;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG,SAAS,CAAC;AAEnD,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AAEpD,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,sBAAsB,EAAE,MAAM,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,wBAAwB,EAAE,MAAM,EAAE,CAAC;IACnC,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,gCAAgC,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7C;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,0BAA0B,EAAE,MAAM,CAAC;IACnC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IACjC,KAAK,CAAC,EAAE;QACN,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,uBAAuB,CAAC,EAAE,MAAM,CAAC;KAClC,CAAC;CACH;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;IACrD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;CAC3C;AAED,qBAAa,QAAS,SAAQ,KAAK;IAGxB,UAAU,EAAE,MAAM;IAClB,IAAI,CAAC,EAAE,MAAM;gBAFpB,OAAO,EAAE,MAAM,EACR,UAAU,EAAE,MAAM,EAClB,IAAI,CAAC,EAAE,MAAM,YAAA;CAKvB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,WAAW,GAAG,YAAY,GAAG,SAAS,CAAC;AAEnD,MAAM,MAAM,YAAY,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AAEpD,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,UAAU;IACzB,aAAa,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IAC7B,WAAW,EAAE,WAAW,CAAC;IACzB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,sBAAsB,EAAE,MAAM,CAAC;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,qBAAqB,CAAC,EAAE,MAAM,CAAC;IAC/B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,wBAAwB,EAAE,MAAM,EAAE,CAAC;IACnC,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,gCAAgC,CAAC,EAAE,MAAM,EAAE,CAAC;CAC7C;AAED,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,uBAAuB;IACtC,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,EAAE,CAAC;IACxB,0BAA0B,EAAE,MAAM,CAAC;IACnC,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,cAAc,EAAE,MAAM,EAAE,CAAC;CAC1B;AAED,MAAM,WAAW,iBAAiB;IAChC,UAAU,CAAC,EAAE,SAAS,GAAG,OAAO,CAAC;IACjC,KAAK,CAAC,EAAE;QACN,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,uBAAuB,CAAC,EAAE,MAAM,CAAC;KAClC,CAAC;CACH;AAED,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,YAAY,CAAC;IACtB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACxB,WAAW,EAAE,WAAW,CAAC;IACzB,YAAY,EAAE,MAAM,CAAC,WAAW,EAAE,iBAAiB,CAAC,CAAC;IACrD,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC;IAC1C,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,qBAAa,QAAS,SAAQ,KAAK;IAGxB,UAAU,EAAE,MAAM;IAClB,IAAI,CAAC,EAAE,MAAM;gBAFpB,OAAO,EAAE,MAAM,EACR,UAAU,EAAE,MAAM,EAClB,IAAI,CAAC,EAAE,MAAM,YAAA;CAKvB"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAmEA,MAAM,OAAO,QAAS,SAAQ,KAAK;IAGxB;IACA;IAHT,YACE,OAAe,EACR,UAAkB,EAClB,IAAa;QAEpB,KAAK,CAAC,OAAO,CAAC,CAAC;QAHR,eAAU,GAAV,UAAU,CAAQ;QAClB,SAAI,GAAJ,IAAI,CAAS;QAGpB,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;CACF"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/lib/types.ts"],"names":[],"mappings":"AAoEA,MAAM,OAAO,QAAS,SAAQ,KAAK;IAGxB;IACA;IAHT,YACE,OAAe,EACR,UAAkB,EAClB,IAAa;QAEpB,KAAK,CAAC,OAAO,CAAC,CAAC;QAHR,eAAU,GAAV,UAAU,CAAQ;QAClB,SAAI,GAAJ,IAAI,CAAS;QAGpB,IAAI,CAAC,IAAI,GAAG,UAAU,CAAC;IACzB,CAAC;CACF"}
@@ -0,0 +1,25 @@
1
+ export declare function getCurrentVersion(): string;
2
+ export declare function getLatestVersion(options?: {
3
+ timeoutMs?: number;
4
+ }): Promise<string>;
5
+ /** Compare two semver strings. Returns true if latest > current. */
6
+ export declare function isNewer(current: string, latest: string): boolean;
7
+ /** @yao-pkg/pkg injects `process.pkg` when running as a standalone binary bundle. */
8
+ export declare function isBinaryInstall(): boolean;
9
+ export declare function getBinaryName(): string;
10
+ export declare function getDownloadUrl(version: string): string;
11
+ export declare function shouldCheckForUpdate(): boolean;
12
+ export declare function recordUpdateCheck(): void;
13
+ export interface UpdateInfo {
14
+ current: string;
15
+ latest: string;
16
+ updateAvailable: boolean;
17
+ }
18
+ export declare function checkForUpdate(options?: {
19
+ timeoutMs?: number;
20
+ }): Promise<UpdateInfo>;
21
+ export declare function selfUpdate(knownLatest?: string): Promise<{
22
+ previousVersion: string;
23
+ newVersion: string;
24
+ }>;
25
+ //# sourceMappingURL=update.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.d.ts","sourceRoot":"","sources":["../../src/lib/update.ts"],"names":[],"mappings":"AAmBA,wBAAgB,iBAAiB,IAAI,MAAM,CAI1C;AAED,wBAAsB,gBAAgB,CAAC,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,MAAM,CAAC,CAgBxF;AAKD,oEAAoE;AACpE,wBAAgB,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAUhE;AAMD,qFAAqF;AACrF,wBAAgB,eAAe,IAAI,OAAO,CAEzC;AAiBD,wBAAgB,aAAa,IAAI,MAAM,CAQtC;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAEtD;AAMD,wBAAgB,oBAAoB,IAAI,OAAO,CAG9C;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAExC;AAMD,MAAM,WAAW,UAAU;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,OAAO,CAAC;CAC1B;AAED,wBAAsB,cAAc,CAAC,OAAO,CAAC,EAAE;IAAE,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,UAAU,CAAC,CAI1F;AAED,wBAAsB,UAAU,CAC9B,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC;IAAE,eAAe,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,CAAC,CA0E1D"}
@@ -0,0 +1,160 @@
1
+ import { createRequire } from 'node:module';
2
+ import { createHash } from 'node:crypto';
3
+ import { chmod, rename, unlink, writeFile } from 'node:fs/promises';
4
+ import { execFile } from 'node:child_process';
5
+ import { promisify } from 'node:util';
6
+ import { config } from './config.js';
7
+ const execFileAsync = promisify(execFile);
8
+ const GITHUB_REPO = 'unstoppabledomains/ud-cli';
9
+ const RELEASES_LATEST_URL = `https://api.github.com/repos/${GITHUB_REPO}/releases/latest`;
10
+ const CHECK_INTERVAL_MS = 24 * 60 * 60 * 1000; // 24 hours
11
+ // ---------------------------------------------------------------------------
12
+ // Version helpers
13
+ // ---------------------------------------------------------------------------
14
+ export function getCurrentVersion() {
15
+ if (typeof __PKG_VERSION__ === 'string')
16
+ return __PKG_VERSION__;
17
+ const req = createRequire(import.meta.url);
18
+ return req('../../package.json').version;
19
+ }
20
+ export async function getLatestVersion(options) {
21
+ const fetchOptions = {
22
+ headers: {
23
+ Accept: 'application/vnd.github.v3+json',
24
+ 'User-Agent': 'ud-cli',
25
+ },
26
+ };
27
+ if (options?.timeoutMs) {
28
+ fetchOptions.signal = AbortSignal.timeout(options.timeoutMs);
29
+ }
30
+ const res = await fetch(RELEASES_LATEST_URL, fetchOptions);
31
+ if (!res.ok) {
32
+ throw new Error(`GitHub API returned ${res.status}: ${res.statusText}`);
33
+ }
34
+ const data = (await res.json());
35
+ return data.tag_name.replace(/^v/, '');
36
+ }
37
+ /** Strip pre-release and build metadata (e.g. "1.0.0-beta.1+build" → "1.0.0"). */
38
+ const normalize = (v) => v.replace(/[-+].*$/, '');
39
+ /** Compare two semver strings. Returns true if latest > current. */
40
+ export function isNewer(current, latest) {
41
+ const c = normalize(current).split('.').map(Number);
42
+ const l = normalize(latest).split('.').map(Number);
43
+ for (let i = 0; i < Math.max(c.length, l.length); i++) {
44
+ const cv = c[i] ?? 0;
45
+ const lv = l[i] ?? 0;
46
+ if (lv > cv)
47
+ return true;
48
+ if (lv < cv)
49
+ return false;
50
+ }
51
+ return false;
52
+ }
53
+ // ---------------------------------------------------------------------------
54
+ // Install-method detection
55
+ // ---------------------------------------------------------------------------
56
+ /** @yao-pkg/pkg injects `process.pkg` when running as a standalone binary bundle. */
57
+ export function isBinaryInstall() {
58
+ return !!process.pkg;
59
+ }
60
+ // ---------------------------------------------------------------------------
61
+ // Platform / binary naming
62
+ // ---------------------------------------------------------------------------
63
+ const PLATFORM_MAP = {
64
+ darwin: 'macos',
65
+ linux: 'linux',
66
+ win32: 'win',
67
+ };
68
+ const ARCH_MAP = {
69
+ arm64: 'arm64',
70
+ x64: 'x64',
71
+ };
72
+ export function getBinaryName() {
73
+ const os = PLATFORM_MAP[process.platform];
74
+ const arch = ARCH_MAP[process.arch];
75
+ if (!os || !arch) {
76
+ throw new Error(`Unsupported platform: ${process.platform}-${process.arch}`);
77
+ }
78
+ const ext = process.platform === 'win32' ? '.exe' : '';
79
+ return `ud-${os}-${arch}${ext}`;
80
+ }
81
+ export function getDownloadUrl(version) {
82
+ return `https://github.com/${GITHUB_REPO}/releases/download/v${version}/${getBinaryName()}`;
83
+ }
84
+ // ---------------------------------------------------------------------------
85
+ // Update check throttling
86
+ // ---------------------------------------------------------------------------
87
+ export function shouldCheckForUpdate() {
88
+ const last = config.get('lastUpdateCheck');
89
+ return Date.now() - last > CHECK_INTERVAL_MS;
90
+ }
91
+ export function recordUpdateCheck() {
92
+ config.set('lastUpdateCheck', Date.now());
93
+ }
94
+ export async function checkForUpdate(options) {
95
+ const current = getCurrentVersion();
96
+ const latest = await getLatestVersion(options);
97
+ return { current, latest, updateAvailable: isNewer(current, latest) };
98
+ }
99
+ export async function selfUpdate(knownLatest) {
100
+ const current = getCurrentVersion();
101
+ const latest = knownLatest ?? (await getLatestVersion());
102
+ if (!isNewer(current, latest)) {
103
+ return { previousVersion: current, newVersion: current };
104
+ }
105
+ if (process.platform === 'win32') {
106
+ throw new Error('Self-update is not supported on Windows. Download the latest release from:\n' +
107
+ ` https://github.com/${GITHUB_REPO}/releases`);
108
+ }
109
+ const url = getDownloadUrl(latest);
110
+ const res = await fetch(url, {
111
+ headers: { 'User-Agent': 'ud-cli' },
112
+ });
113
+ if (!res.ok) {
114
+ throw new Error(`Failed to download binary: ${res.status} ${res.statusText}`);
115
+ }
116
+ const buffer = Buffer.from(await res.arrayBuffer());
117
+ const MIN_BINARY_SIZE = 1 * 1024 * 1024; // 1 MB
118
+ if (buffer.length < MIN_BINARY_SIZE) {
119
+ throw new Error(`Downloaded binary is suspiciously small (${buffer.length} bytes). Aborting.`);
120
+ }
121
+ // Verify SHA256 checksum if checksums.txt is published alongside the release
122
+ const checksumUrl = `https://github.com/${GITHUB_REPO}/releases/download/v${latest}/checksums.txt`;
123
+ const checksumRes = await fetch(checksumUrl, { headers: { 'User-Agent': 'ud-cli' } });
124
+ if (checksumRes.ok) {
125
+ const checksums = await checksumRes.text();
126
+ const binaryName = getBinaryName();
127
+ const expectedLine = checksums.split('\n').find((l) => l.includes(binaryName));
128
+ const expected = expectedLine?.split(/\s+/)[0];
129
+ const actual = createHash('sha256').update(buffer).digest('hex');
130
+ if (expected && actual !== expected) {
131
+ throw new Error('Binary integrity check failed — SHA256 mismatch. Download may be corrupted.');
132
+ }
133
+ }
134
+ // Place temp file next to the binary so rename() is an atomic same-filesystem move
135
+ const tempPath = `${process.execPath}.update`;
136
+ try {
137
+ await writeFile(tempPath, buffer);
138
+ await chmod(tempPath, 0o755);
139
+ // Strip macOS quarantine attribute
140
+ if (process.platform === 'darwin') {
141
+ try {
142
+ await execFileAsync('xattr', ['-d', 'com.apple.quarantine', tempPath]);
143
+ }
144
+ catch {
145
+ // Attribute may not be set — ignore
146
+ }
147
+ }
148
+ await rename(tempPath, process.execPath);
149
+ }
150
+ catch (err) {
151
+ // Clean up temp file on failure
152
+ await unlink(tempPath).catch(() => { });
153
+ if (err instanceof Error && 'code' in err && err.code === 'EACCES') {
154
+ throw new Error(`Permission denied. Try running with elevated privileges:\n sudo ud update`);
155
+ }
156
+ throw err;
157
+ }
158
+ return { previousVersion: current, newVersion: latest };
159
+ }
160
+ //# sourceMappingURL=update.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"update.js","sourceRoot":"","sources":["../../src/lib/update.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAuBpC,eAAO,MAAM,OAAO,SAAgB,CAAC"}
1
+ {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwBpC,eAAO,MAAM,OAAO,SAAgB,CAAC"}
package/dist/program.js CHANGED
@@ -6,6 +6,7 @@ import { registerEnvCommands } from './commands/env.js';
6
6
  import { registerApiCommands } from './commands/api-commands.js';
7
7
  import { registerSmartCartAdd } from './commands/cart.js';
8
8
  import { registerConfigCommands } from './commands/config.js';
9
+ import { registerUpdateCommands } from './commands/update.js';
9
10
  function getVersion() {
10
11
  // typeof avoids ReferenceError when __PKG_VERSION__ is not injected (ESM/dev)
11
12
  if (typeof __PKG_VERSION__ === 'string')
@@ -19,14 +20,16 @@ export const program = new Command();
19
20
  program
20
21
  .configureHelp({ showGlobalOptions: true })
21
22
  .name('ud')
22
- .description('Unstoppable Domains CLI')
23
- .version(getVersion())
24
- .option('--env <environment>', 'override active environment (production or staging)')
25
- .option('--format <format>', 'output format (table, json, csv)')
26
- .option('--quiet', 'suppress output except errors')
27
- .option('--verbose', 'show detailed output')
28
- .option('--fields [columns]', 'show available fields, or specify columns to display (e.g., name,expiresAt,listing.price)')
29
- .option('--profile <name>', 'configuration profile to use')
23
+ .description('Unstoppable Domains CLI — Search, register, and manage your domains from the command line.')
24
+ .version(getVersion(), '-V, --version', 'Output the version number')
25
+ .helpOption('-h, --help', 'Display help for command')
26
+ .helpCommand('help [command]', 'Display help for command')
27
+ .option('--env <environment>', 'Override active environment (production or staging)')
28
+ .option('--format <format>', 'Output format (table, json, csv)')
29
+ .option('--quiet', 'Suppress output except errors')
30
+ .option('--verbose', 'Show detailed output')
31
+ .option('--fields [columns]', 'Show available fields, or specify columns to display (e.g., name,expiresAt,listing.price)')
32
+ .option('--profile <name>', 'Configuration profile to use')
30
33
  .hook('preAction', (thisCommand) => {
31
34
  const opts = thisCommand.opts();
32
35
  if (opts.env) {
@@ -42,6 +45,36 @@ program
42
45
  registerAuthCommands(program);
43
46
  registerEnvCommands(program);
44
47
  registerConfigCommands(program);
48
+ registerUpdateCommands(program);
45
49
  registerApiCommands(program);
46
50
  registerSmartCartAdd(program);
51
+ // --- Background update check (once per 24 h, after command execution) ---
52
+ program.hook('postAction', async (_thisCommand, actionCommand) => {
53
+ // postAction fires for every command in the chain; only run for the leaf action
54
+ if (actionCommand !== _thisCommand)
55
+ return;
56
+ // Skip during update commands (they already check) — covers both
57
+ // "ud update" (name=update) and "ud update check" (parent.name=update)
58
+ if (actionCommand.name() === 'update' || actionCommand.parent?.name() === 'update')
59
+ return;
60
+ // Skip in non-TTY (piped output)
61
+ if (!process.stderr.isTTY)
62
+ return;
63
+ // Lazy-import to avoid loading update module on every invocation
64
+ const { shouldCheckForUpdate, checkForUpdate, recordUpdateCheck } = await import('./lib/update.js');
65
+ if (!shouldCheckForUpdate())
66
+ return;
67
+ try {
68
+ const result = await checkForUpdate({ timeoutMs: 5000 });
69
+ recordUpdateCheck();
70
+ if (result.updateAvailable) {
71
+ const chalk = (await import('chalk')).default;
72
+ process.stderr.write(chalk.yellow(`\nUpdate available: ${result.current} → ${result.latest}`) +
73
+ chalk.dim(' — run "ud update" to upgrade\n'));
74
+ }
75
+ }
76
+ catch {
77
+ // Silently ignore — update check failures should never break the CLI
78
+ }
79
+ });
47
80
  //# sourceMappingURL=program.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AACjD,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAC1D,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAO9D,SAAS,UAAU;IACjB,8EAA8E;IAC9E,IAAI,OAAO,eAAe,KAAK,QAAQ;QAAE,OAAO,eAAe,CAAC;IAChE,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC3C,OAAQ,GAAG,CAAC,iBAAiB,CAAyB,CAAC,OAAO,CAAC;AACjE,CAAC;AAED,MAAM,UAAU,GAAG,CAAC,YAAY,EAAE,SAAS,CAAC,CAAC;AAC7C,MAAM,aAAa,GAAmB,CAAC,OAAO,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;AAE/D,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAErC,OAAO;KACJ,aAAa,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC;KAC1C,IAAI,CAAC,IAAI,CAAC;KACV,WAAW,CAAC,yBAAyB,CAAC;KACtC,OAAO,CAAC,UAAU,EAAE,CAAC;KACrB,MAAM,CAAC,qBAAqB,EAAE,qDAAqD,CAAC;KACpF,MAAM,CAAC,mBAAmB,EAAE,kCAAkC,CAAC;KAC/D,MAAM,CAAC,SAAS,EAAE,+BAA+B,CAAC;KAClD,MAAM,CAAC,WAAW,EAAE,sBAAsB,CAAC;KAC3C,MAAM,CAAC,oBAAoB,EAAE,2FAA2F,CAAC;KACzH,MAAM,CAAC,kBAAkB,EAAE,8BAA8B,CAAC;KAC1D,IAAI,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,EAAE;IACjC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,EAAqC,CAAC;IACnE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;YACnC,WAAW,CAAC,KAAK,CAAC,wBAAwB,IAAI,CAAC,GAAG,qBAAqB,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClG,CAAC;QACD,cAAc,CAAC,IAAI,CAAC,GAAkB,CAAC,CAAC;IAC1C,CAAC;IACD,IAAI,IAAI,CAAC,MAAM,IAAI,CAAE,aAA0B,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QACtE,WAAW,CAAC,KAAK,CAAC,mBAAmB,IAAI,CAAC,MAAM,qBAAqB,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnG,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,oBAAoB,CAAC,OAAO,CAAC,CAAC;AAC9B,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,sBAAsB,CAAC,OAAO,CAAC,CAAC;AAChC,mBAAmB,CAAC,OAAO,CAAC,CAAC;AAC7B,oBAAoB,CAAC,OAAO,CAAC,CAAC"}
1
+ {"version":3,"file":"program.js","sourceRoot":"","sources":["../src/program.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@unstoppabledomains/ud-cli",
3
- "version": "0.1.1-rc.2",
4
- "description": "CLI tool for managing Unstoppable Domains — domain portfolio, DNS records, marketplace listings, and more.",
3
+ "version": "0.1.1",
4
+ "description": "Unstoppable Domains CLI Search, register, and manage your domains from the command line.",
5
5
  "type": "module",
6
6
  "bin": {
7
7
  "ud": "./dist/index.js"