@unstoppabledomains/ud-cli 0.1.0

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.
Files changed (79) hide show
  1. package/README.md +344 -0
  2. package/dist/commands/api-commands.d.ts +9 -0
  3. package/dist/commands/api-commands.d.ts.map +1 -0
  4. package/dist/commands/api-commands.js +303 -0
  5. package/dist/commands/api-commands.js.map +1 -0
  6. package/dist/commands/auth.d.ts +3 -0
  7. package/dist/commands/auth.d.ts.map +1 -0
  8. package/dist/commands/auth.js +97 -0
  9. package/dist/commands/auth.js.map +1 -0
  10. package/dist/commands/cart.d.ts +10 -0
  11. package/dist/commands/cart.d.ts.map +1 -0
  12. package/dist/commands/cart.js +125 -0
  13. package/dist/commands/cart.js.map +1 -0
  14. package/dist/commands/config.d.ts +3 -0
  15. package/dist/commands/config.d.ts.map +1 -0
  16. package/dist/commands/config.js +90 -0
  17. package/dist/commands/config.js.map +1 -0
  18. package/dist/commands/env.d.ts +3 -0
  19. package/dist/commands/env.d.ts.map +1 -0
  20. package/dist/commands/env.js +29 -0
  21. package/dist/commands/env.js.map +1 -0
  22. package/dist/generated/openapi-spec.json +5903 -0
  23. package/dist/index.d.ts +2 -0
  24. package/dist/index.d.ts.map +1 -0
  25. package/dist/index.js +3 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/lib/api.d.ts +7 -0
  28. package/dist/lib/api.d.ts.map +1 -0
  29. package/dist/lib/api.js +162 -0
  30. package/dist/lib/api.js.map +1 -0
  31. package/dist/lib/command-hooks.d.ts +49 -0
  32. package/dist/lib/command-hooks.d.ts.map +1 -0
  33. package/dist/lib/command-hooks.js +150 -0
  34. package/dist/lib/command-hooks.js.map +1 -0
  35. package/dist/lib/command-registry.d.ts +30 -0
  36. package/dist/lib/command-registry.d.ts.map +1 -0
  37. package/dist/lib/command-registry.js +322 -0
  38. package/dist/lib/command-registry.js.map +1 -0
  39. package/dist/lib/config.d.ts +19 -0
  40. package/dist/lib/config.d.ts.map +1 -0
  41. package/dist/lib/config.js +95 -0
  42. package/dist/lib/config.js.map +1 -0
  43. package/dist/lib/credentials.d.ts +16 -0
  44. package/dist/lib/credentials.d.ts.map +1 -0
  45. package/dist/lib/credentials.js +126 -0
  46. package/dist/lib/credentials.js.map +1 -0
  47. package/dist/lib/formatter.d.ts +34 -0
  48. package/dist/lib/formatter.d.ts.map +1 -0
  49. package/dist/lib/formatter.js +691 -0
  50. package/dist/lib/formatter.js.map +1 -0
  51. package/dist/lib/oauth.d.ts +8 -0
  52. package/dist/lib/oauth.d.ts.map +1 -0
  53. package/dist/lib/oauth.js +212 -0
  54. package/dist/lib/oauth.js.map +1 -0
  55. package/dist/lib/param-builder.d.ts +28 -0
  56. package/dist/lib/param-builder.d.ts.map +1 -0
  57. package/dist/lib/param-builder.js +178 -0
  58. package/dist/lib/param-builder.js.map +1 -0
  59. package/dist/lib/prompt.d.ts +17 -0
  60. package/dist/lib/prompt.d.ts.map +1 -0
  61. package/dist/lib/prompt.js +53 -0
  62. package/dist/lib/prompt.js.map +1 -0
  63. package/dist/lib/spec-parser.d.ts +76 -0
  64. package/dist/lib/spec-parser.d.ts.map +1 -0
  65. package/dist/lib/spec-parser.js +201 -0
  66. package/dist/lib/spec-parser.js.map +1 -0
  67. package/dist/lib/spinner.d.ts +16 -0
  68. package/dist/lib/spinner.d.ts.map +1 -0
  69. package/dist/lib/spinner.js +23 -0
  70. package/dist/lib/spinner.js.map +1 -0
  71. package/dist/lib/types.d.ts +63 -0
  72. package/dist/lib/types.d.ts.map +1 -0
  73. package/dist/lib/types.js +11 -0
  74. package/dist/lib/types.js.map +1 -0
  75. package/dist/program.d.ts +3 -0
  76. package/dist/program.d.ts.map +1 -0
  77. package/dist/program.js +47 -0
  78. package/dist/program.js.map +1 -0
  79. package/package.json +70 -0
@@ -0,0 +1,76 @@
1
+ /**
2
+ * Parses the OpenAPI spec JSON into typed CommandSpec[] used by the command framework.
3
+ */
4
+ export interface ParamSpec {
5
+ name: string;
6
+ type: 'string' | 'number' | 'boolean' | 'array' | 'object';
7
+ required: boolean;
8
+ description?: string;
9
+ enum?: (string | number | boolean)[];
10
+ default?: unknown;
11
+ minimum?: number;
12
+ maximum?: number;
13
+ items?: ParamSpec;
14
+ properties?: ParamSpec[];
15
+ }
16
+ export type ResponsePattern = 'bulk' | 'paginated-page' | 'paginated-offset' | 'simple';
17
+ export interface CommandSpec {
18
+ toolName: string;
19
+ operationId: string;
20
+ summary: string;
21
+ description: string;
22
+ params: ParamSpec[];
23
+ responsePattern: ResponsePattern;
24
+ /** Dotted field paths extracted from the response schema (e.g., "listing.price"). */
25
+ responseFields: string[];
26
+ }
27
+ interface SchemaObject {
28
+ type?: string | string[];
29
+ properties?: Record<string, SchemaObject>;
30
+ required?: string[];
31
+ items?: SchemaObject;
32
+ $ref?: string;
33
+ enum?: (string | number | boolean)[];
34
+ default?: unknown;
35
+ description?: string;
36
+ minimum?: number;
37
+ maximum?: number;
38
+ minLength?: number;
39
+ maxLength?: number;
40
+ minItems?: number;
41
+ maxItems?: number;
42
+ oneOf?: SchemaObject[];
43
+ anyOf?: SchemaObject[];
44
+ format?: string;
45
+ }
46
+ interface OperationObject {
47
+ operationId: string;
48
+ summary?: string;
49
+ description?: string;
50
+ requestBody?: {
51
+ required?: boolean;
52
+ content?: {
53
+ 'application/json'?: {
54
+ schema?: SchemaObject;
55
+ };
56
+ };
57
+ };
58
+ responses?: Record<string, {
59
+ content?: {
60
+ 'application/json'?: {
61
+ schema?: SchemaObject;
62
+ };
63
+ };
64
+ }>;
65
+ }
66
+ interface OpenAPISpec {
67
+ paths: Record<string, {
68
+ post?: OperationObject;
69
+ }>;
70
+ components?: {
71
+ schemas?: Record<string, SchemaObject>;
72
+ };
73
+ }
74
+ export declare function parseSpec(raw: OpenAPISpec): CommandSpec[];
75
+ export {};
76
+ //# sourceMappingURL=spec-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-parser.d.ts","sourceRoot":"","sources":["../../src/lib/spec-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,201 @@
1
+ /**
2
+ * Parses the OpenAPI spec JSON into typed CommandSpec[] used by the command framework.
3
+ */
4
+ // --- Ref resolution ---
5
+ function resolveRef(spec, ref) {
6
+ // e.g. "#/components/schemas/SearchDomainsResponse"
7
+ const parts = ref.replace('#/', '').split('/');
8
+ let current = spec;
9
+ for (const part of parts) {
10
+ current = current[part];
11
+ if (current === undefined) {
12
+ throw new Error(`Cannot resolve $ref: ${ref}`);
13
+ }
14
+ }
15
+ return current;
16
+ }
17
+ function resolveSchema(spec, schema) {
18
+ if (schema.$ref) {
19
+ return resolveSchema(spec, resolveRef(spec, schema.$ref));
20
+ }
21
+ return schema;
22
+ }
23
+ // --- Schema → ParamSpec conversion ---
24
+ function schemaToParamSpec(spec, name, schema, required) {
25
+ const resolved = resolveSchema(spec, schema);
26
+ // Handle oneOf/anyOf — pick the simplest type (prefer string)
27
+ if (resolved.oneOf || resolved.anyOf) {
28
+ const variants = resolved.oneOf ?? resolved.anyOf ?? [];
29
+ const stringVariant = variants.find((v) => {
30
+ const r = resolveSchema(spec, v);
31
+ return r.type === 'string';
32
+ });
33
+ if (stringVariant) {
34
+ return schemaToParamSpec(spec, name, { ...resolved, ...resolveSchema(spec, stringVariant), oneOf: undefined, anyOf: undefined }, required);
35
+ }
36
+ // Fall back to first variant
37
+ if (variants.length > 0) {
38
+ return schemaToParamSpec(spec, name, { ...resolved, ...resolveSchema(spec, variants[0]), oneOf: undefined, anyOf: undefined }, required);
39
+ }
40
+ }
41
+ const rawType = Array.isArray(resolved.type) ? resolved.type[0] : resolved.type;
42
+ const type = normalizeType(rawType);
43
+ const param = {
44
+ name,
45
+ type,
46
+ required,
47
+ description: resolved.description ?? schema.description,
48
+ enum: resolved.enum,
49
+ default: resolved.default,
50
+ minimum: resolved.minimum,
51
+ maximum: resolved.maximum,
52
+ };
53
+ if (type === 'array' && resolved.items) {
54
+ const itemSchema = resolveSchema(spec, resolved.items);
55
+ param.items = schemaToParamSpec(spec, name + '[]', itemSchema, false);
56
+ }
57
+ if (type === 'object' && resolved.properties) {
58
+ param.properties = Object.entries(resolved.properties).map(([propName, propSchema]) => schemaToParamSpec(spec, propName, propSchema, (resolved.required ?? []).includes(propName)));
59
+ }
60
+ return param;
61
+ }
62
+ function normalizeType(type) {
63
+ switch (type) {
64
+ case 'integer':
65
+ case 'number':
66
+ return 'number';
67
+ case 'boolean':
68
+ return 'boolean';
69
+ case 'array':
70
+ return 'array';
71
+ case 'object':
72
+ return 'object';
73
+ default:
74
+ return 'string';
75
+ }
76
+ }
77
+ // --- Response pattern detection ---
78
+ function detectResponsePattern(spec, operation) {
79
+ const responseSchema = operation.responses?.['200']?.content?.['application/json']?.schema;
80
+ if (!responseSchema)
81
+ return 'simple';
82
+ const resolved = resolveSchema(spec, responseSchema);
83
+ const props = resolved.properties ?? {};
84
+ // Bulk pattern: has successCount/failureCount
85
+ if (props.successCount && props.failureCount) {
86
+ return 'bulk';
87
+ }
88
+ // Paginated pattern: check pagination sub-object
89
+ if (props.pagination) {
90
+ const pag = resolveSchema(spec, props.pagination);
91
+ const pagProps = pag.properties ?? {};
92
+ if (pagProps.page)
93
+ return 'paginated-page';
94
+ if (pagProps.offset || pagProps.nextOffset)
95
+ return 'paginated-offset';
96
+ }
97
+ return 'simple';
98
+ }
99
+ // --- Response field extraction ---
100
+ /** Keys that typically hold the primary data array in API responses. */
101
+ const DATA_ARRAY_KEYS = ['results', 'domains', 'tlds', 'records', 'items', 'contacts', 'offers', 'leads', 'messages', 'listings', 'savedCards', 'configs', 'pushedDomains', 'failedDomains', 'addedProducts'];
102
+ /**
103
+ * Extract dotted field paths from the response schema.
104
+ * Finds the primary data array and walks its item schema to produce
105
+ * paths like "listing.price", "autoRenewal.status".
106
+ */
107
+ function extractResponseFields(spec, operation) {
108
+ const responseSchema = operation.responses?.['200']?.content?.['application/json']?.schema;
109
+ if (!responseSchema)
110
+ return [];
111
+ const resolved = resolveSchema(spec, responseSchema);
112
+ const props = resolved.properties ?? {};
113
+ // Find the primary data array and extract field paths from its items
114
+ for (const key of DATA_ARRAY_KEYS) {
115
+ if (props[key]) {
116
+ const arrSchema = resolveSchema(spec, props[key]);
117
+ const rawType = Array.isArray(arrSchema.type) ? arrSchema.type[0] : arrSchema.type;
118
+ if (rawType === 'array' && arrSchema.items) {
119
+ const itemSchema = resolveSchema(spec, arrSchema.items);
120
+ return collectFieldPaths(spec, itemSchema, '', 3);
121
+ }
122
+ }
123
+ }
124
+ // No data array found — extract top-level scalar/object fields (skip pagination, meta keys)
125
+ const skipKeys = new Set(['pagination', 'truncated', 'truncationMessage', 'successCount', 'failureCount']);
126
+ return collectFieldPaths(spec, resolved, '', 3).filter((f) => !skipKeys.has(f.split('.')[0]));
127
+ }
128
+ /**
129
+ * Recursively collect dotted field paths from a schema object.
130
+ * Stops at the given depth to avoid excessive nesting.
131
+ */
132
+ function collectFieldPaths(spec, schema, prefix, maxDepth) {
133
+ if (maxDepth <= 0)
134
+ return [];
135
+ const resolved = resolveSchema(spec, schema);
136
+ // Handle oneOf/anyOf — pick the object variant if available
137
+ if (resolved.oneOf || resolved.anyOf) {
138
+ const variants = resolved.oneOf ?? resolved.anyOf ?? [];
139
+ const objVariant = variants.find((v) => {
140
+ const r = resolveSchema(spec, v);
141
+ return r.type === 'object' || r.properties;
142
+ });
143
+ if (objVariant) {
144
+ return collectFieldPaths(spec, objVariant, prefix, maxDepth);
145
+ }
146
+ // Non-object union — treat as leaf
147
+ return prefix ? [prefix] : [];
148
+ }
149
+ const props = resolved.properties;
150
+ if (!props) {
151
+ return prefix ? [prefix] : [];
152
+ }
153
+ const paths = [];
154
+ for (const [key, propSchema] of Object.entries(props)) {
155
+ const fullPath = prefix ? `${prefix}.${key}` : key;
156
+ const propResolved = resolveSchema(spec, propSchema);
157
+ const rawType = Array.isArray(propResolved.type) ? propResolved.type[0] : propResolved.type;
158
+ if ((rawType === 'object' || propResolved.properties) && !propResolved.enum) {
159
+ // Recurse into nested objects
160
+ paths.push(...collectFieldPaths(spec, propResolved, fullPath, maxDepth - 1));
161
+ }
162
+ else {
163
+ // Leaf field (string, number, boolean, array of primitives, enum)
164
+ paths.push(fullPath);
165
+ }
166
+ }
167
+ return paths;
168
+ }
169
+ // --- Main parser ---
170
+ export function parseSpec(raw) {
171
+ const specs = [];
172
+ for (const [path, methods] of Object.entries(raw.paths)) {
173
+ const operation = methods.post;
174
+ if (!operation)
175
+ continue;
176
+ // Extract tool name from path: /mcp/v1/actions/ud_domains_search → ud_domains_search
177
+ const toolName = path.split('/actions/')[1];
178
+ if (!toolName)
179
+ continue;
180
+ const reqSchema = operation.requestBody?.content?.['application/json']?.schema;
181
+ const resolved = reqSchema ? resolveSchema(raw, reqSchema) : undefined;
182
+ const params = [];
183
+ if (resolved?.properties) {
184
+ const requiredSet = new Set(resolved.required ?? []);
185
+ for (const [propName, propSchema] of Object.entries(resolved.properties)) {
186
+ params.push(schemaToParamSpec(raw, propName, propSchema, requiredSet.has(propName)));
187
+ }
188
+ }
189
+ specs.push({
190
+ toolName,
191
+ operationId: operation.operationId,
192
+ summary: operation.summary ?? '',
193
+ description: operation.description ?? '',
194
+ params,
195
+ responsePattern: detectResponsePattern(raw, operation),
196
+ responseFields: extractResponseFields(raw, operation),
197
+ });
198
+ }
199
+ return specs;
200
+ }
201
+ //# sourceMappingURL=spec-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-parser.js","sourceRoot":"","sources":["../../src/lib/spec-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Thin ora wrapper that no-ops when output is not interactive.
3
+ */
4
+ import type { OutputFormat } from './types.js';
5
+ interface SpinnerLike {
6
+ start(text?: string): SpinnerLike;
7
+ stop(): SpinnerLike;
8
+ succeed(text?: string): SpinnerLike;
9
+ fail(text?: string): SpinnerLike;
10
+ }
11
+ export declare function createSpinner(text: string, options: {
12
+ quiet?: boolean;
13
+ format?: OutputFormat;
14
+ }): Promise<SpinnerLike>;
15
+ export {};
16
+ //# sourceMappingURL=spinner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner.d.ts","sourceRoot":"","sources":["../../src/lib/spinner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAE/C,UAAU,WAAW;IACnB,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;IAClC,IAAI,IAAI,WAAW,CAAC;IACpB,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;IACpC,IAAI,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,WAAW,CAAC;CAClC;AASD,wBAAsB,aAAa,CACjC,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,YAAY,CAAA;CAAE,GAClD,OAAO,CAAC,WAAW,CAAC,CAYtB"}
@@ -0,0 +1,23 @@
1
+ /**
2
+ * Thin ora wrapper that no-ops when output is not interactive.
3
+ */
4
+ const noopSpinner = {
5
+ start() { return this; },
6
+ stop() { return this; },
7
+ succeed() { return this; },
8
+ fail() { return this; },
9
+ };
10
+ export async function createSpinner(text, options) {
11
+ // No spinner for non-TTY, quiet mode, or machine-readable formats
12
+ if (options.quiet || options.format === 'json' || options.format === 'csv' || !process.stdout.isTTY) {
13
+ return noopSpinner;
14
+ }
15
+ try {
16
+ const ora = (await import('ora')).default;
17
+ return ora(text);
18
+ }
19
+ catch {
20
+ return noopSpinner;
21
+ }
22
+ }
23
+ //# sourceMappingURL=spinner.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spinner.js","sourceRoot":"","sources":["../../src/lib/spinner.ts"],"names":[],"mappings":"AAAA;;GAEG;AAWH,MAAM,WAAW,GAAgB;IAC/B,KAAK,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;IACxB,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;IACvB,OAAO,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;IAC1B,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,CAAC;CACxB,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,IAAY,EACZ,OAAmD;IAEnD,kEAAkE;IAClE,IAAI,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QACpG,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,CAAC,MAAM,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC;QAC1C,OAAO,GAAG,CAAC,IAAI,CAAC,CAAC;IACnB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,WAAW,CAAC;IACrB,CAAC;AACH,CAAC"}
@@ -0,0 +1,63 @@
1
+ export type Environment = 'production' | 'staging';
2
+ export type OutputFormat = 'table' | 'json' | 'csv';
3
+ export interface TokenData {
4
+ accessToken: string;
5
+ refreshToken: string;
6
+ expiresAt: number;
7
+ scope?: string;
8
+ }
9
+ export interface AuthStatus {
10
+ authenticated: boolean;
11
+ method?: 'api-key' | 'oauth';
12
+ environment: Environment;
13
+ message: string;
14
+ }
15
+ export interface OAuthServerMetadata {
16
+ issuer: string;
17
+ authorization_endpoint: string;
18
+ token_endpoint: string;
19
+ registration_endpoint?: string;
20
+ revocation_endpoint?: string;
21
+ scopes_supported?: string[];
22
+ response_types_supported: string[];
23
+ grant_types_supported: string[];
24
+ code_challenge_methods_supported?: string[];
25
+ }
26
+ export interface OAuthTokenResponse {
27
+ access_token: string;
28
+ token_type: string;
29
+ expires_in: number;
30
+ refresh_token: string;
31
+ scope: string;
32
+ }
33
+ export interface OAuthClientRegistration {
34
+ client_id: string;
35
+ client_name: string;
36
+ redirect_uris: string[];
37
+ token_endpoint_auth_method: string;
38
+ grant_types: string[];
39
+ response_types: string[];
40
+ }
41
+ export interface EnvironmentConfig {
42
+ authMethod?: 'api-key' | 'oauth';
43
+ oauth?: {
44
+ clientId?: string;
45
+ registrationAccessToken?: string;
46
+ };
47
+ }
48
+ export interface CommandDefaults {
49
+ fields?: string;
50
+ format?: OutputFormat;
51
+ quiet?: boolean;
52
+ }
53
+ export interface AppConfig {
54
+ environment: Environment;
55
+ environments: Record<Environment, EnvironmentConfig>;
56
+ defaults: Record<string, CommandDefaults>;
57
+ }
58
+ export declare class ApiError extends Error {
59
+ statusCode: number;
60
+ code?: string | undefined;
61
+ constructor(message: string, statusCode: number, code?: string | undefined);
62
+ }
63
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,11 @@
1
+ export class ApiError extends Error {
2
+ statusCode;
3
+ code;
4
+ constructor(message, statusCode, code) {
5
+ super(message);
6
+ this.statusCode = statusCode;
7
+ this.code = code;
8
+ this.name = 'ApiError';
9
+ }
10
+ }
11
+ //# sourceMappingURL=types.js.map
@@ -0,0 +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"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const program: Command;
3
+ //# sourceMappingURL=program.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,47 @@
1
+ import { createRequire } from 'node:module';
2
+ import { Command } from 'commander';
3
+ import { setEnvOverride } from './lib/config.js';
4
+ import { registerAuthCommands } from './commands/auth.js';
5
+ import { registerEnvCommands } from './commands/env.js';
6
+ import { registerApiCommands } from './commands/api-commands.js';
7
+ import { registerSmartCartAdd } from './commands/cart.js';
8
+ import { registerConfigCommands } from './commands/config.js';
9
+ function getVersion() {
10
+ // typeof avoids ReferenceError when __PKG_VERSION__ is not injected (ESM/dev)
11
+ if (typeof __PKG_VERSION__ === 'string')
12
+ return __PKG_VERSION__;
13
+ const req = createRequire(import.meta.url);
14
+ return req('../package.json').version;
15
+ }
16
+ const VALID_ENVS = ['production', 'staging'];
17
+ const VALID_FORMATS = ['table', 'json', 'csv'];
18
+ export const program = new Command();
19
+ program
20
+ .configureHelp({ showGlobalOptions: true })
21
+ .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')
30
+ .hook('preAction', (thisCommand) => {
31
+ const opts = thisCommand.opts();
32
+ if (opts.env) {
33
+ if (!VALID_ENVS.includes(opts.env)) {
34
+ thisCommand.error(`Invalid environment: ${opts.env}. Must be one of: ${VALID_ENVS.join(', ')}`);
35
+ }
36
+ setEnvOverride(opts.env);
37
+ }
38
+ if (opts.format && !VALID_FORMATS.includes(opts.format)) {
39
+ thisCommand.error(`Invalid format: ${opts.format}. Must be one of: ${VALID_FORMATS.join(', ')}`);
40
+ }
41
+ });
42
+ registerAuthCommands(program);
43
+ registerEnvCommands(program);
44
+ registerConfigCommands(program);
45
+ registerApiCommands(program);
46
+ registerSmartCartAdd(program);
47
+ //# sourceMappingURL=program.js.map
@@ -0,0 +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"}
package/package.json ADDED
@@ -0,0 +1,70 @@
1
+ {
2
+ "name": "@unstoppabledomains/ud-cli",
3
+ "version": "0.1.0",
4
+ "description": "CLI tool for managing Unstoppable Domains — domain portfolio, DNS records, marketplace listings, and more.",
5
+ "type": "module",
6
+ "bin": {
7
+ "ud": "./dist/index.js"
8
+ },
9
+ "files": [
10
+ "dist/",
11
+ "README.md"
12
+ ],
13
+ "engines": {
14
+ "node": ">=22"
15
+ },
16
+ "repository": {
17
+ "type": "git",
18
+ "url": "https://github.com/unstoppabledomains/ud-cli.git"
19
+ },
20
+ "publishConfig": {
21
+ "access": "public"
22
+ },
23
+ "scripts": {
24
+ "build": "tsc",
25
+ "bundle": "node esbuild.config.mjs",
26
+ "build:binaries": "npm run bundle && pkg dist/ud-cli.cjs --targets node22-macos-arm64,node22-macos-x64,node22-linux-x64,node22-linux-arm64,node22-win-x64 --out-path bin/ && node scripts/rename-binaries.mjs",
27
+ "prepublishOnly": "npm run build",
28
+ "typecheck": "tsc --noEmit",
29
+ "lint": "eslint src/ tests/",
30
+ "lint:fix": "eslint src/ tests/ --fix",
31
+ "format": "prettier --write 'src/**/*.ts' 'tests/**/*.ts'",
32
+ "test": "node --experimental-vm-modules node_modules/.bin/jest",
33
+ "dev": "tsx src/index.ts",
34
+ "fetch-spec": "tsx scripts/fetch-spec.ts"
35
+ },
36
+ "pkg": {
37
+ "targets": [
38
+ "node22-macos-arm64",
39
+ "node22-macos-x64",
40
+ "node22-linux-x64",
41
+ "node22-linux-arm64",
42
+ "node22-win-x64"
43
+ ],
44
+ "outputPath": "bin",
45
+ "assets": []
46
+ },
47
+ "dependencies": {
48
+ "chalk": "^5.4.1",
49
+ "cli-table3": "^0.6.5",
50
+ "commander": "^13.1.0",
51
+ "conf": "^13.1.0",
52
+ "keytar": "^7.9.0",
53
+ "open": "^10.1.0",
54
+ "ora": "^9.3.0"
55
+ },
56
+ "devDependencies": {
57
+ "@types/jest": "^29.5.14",
58
+ "@types/node": "^22.13.0",
59
+ "@yao-pkg/pkg": "^6.3.0",
60
+ "esbuild": "^0.25.0",
61
+ "eslint": "^9.21.0",
62
+ "eslint-config-prettier": "^10.0.1",
63
+ "jest": "^29.7.0",
64
+ "prettier": "^3.5.3",
65
+ "ts-jest": "^29.2.6",
66
+ "tsx": "^4.19.0",
67
+ "typescript": "^5.7.0",
68
+ "typescript-eslint": "^8.25.0"
69
+ }
70
+ }