@drawcall/market 0.1.5 → 0.1.6

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 (99) hide show
  1. package/dist/asset-implementation.d.ts +88 -0
  2. package/dist/asset-implementation.d.ts.map +1 -0
  3. package/dist/asset-implementation.js +2 -0
  4. package/dist/asset-implementation.js.map +1 -0
  5. package/dist/cli-client.d.ts +2 -2
  6. package/dist/cli-client.d.ts.map +1 -1
  7. package/dist/cli-client.js +4 -4
  8. package/dist/cli-client.js.map +1 -1
  9. package/dist/cli.js +104 -22
  10. package/dist/cli.js.map +1 -1
  11. package/dist/client.d.ts +1 -3
  12. package/dist/client.d.ts.map +1 -1
  13. package/dist/client.js +4 -12
  14. package/dist/client.js.map +1 -1
  15. package/dist/commands/generate.d.ts.map +1 -1
  16. package/dist/commands/generate.js +9 -4
  17. package/dist/commands/generate.js.map +1 -1
  18. package/dist/commands/install.d.ts.map +1 -1
  19. package/dist/commands/install.js +30 -28
  20. package/dist/commands/install.js.map +1 -1
  21. package/dist/commands/logout.js +3 -3
  22. package/dist/commands/logout.js.map +1 -1
  23. package/dist/commands/preview.d.ts +9 -0
  24. package/dist/commands/preview.d.ts.map +1 -0
  25. package/dist/commands/preview.js +50 -0
  26. package/dist/commands/preview.js.map +1 -0
  27. package/dist/commands/search.d.ts +4 -1
  28. package/dist/commands/search.d.ts.map +1 -1
  29. package/dist/commands/search.js +20 -10
  30. package/dist/commands/search.js.map +1 -1
  31. package/dist/commands/upload.d.ts +9 -0
  32. package/dist/commands/upload.d.ts.map +1 -0
  33. package/dist/commands/upload.js +220 -0
  34. package/dist/commands/upload.js.map +1 -0
  35. package/dist/config.d.ts +4 -7
  36. package/dist/config.d.ts.map +1 -1
  37. package/dist/config.js +8 -4
  38. package/dist/config.js.map +1 -1
  39. package/dist/constants.d.ts.map +1 -1
  40. package/dist/constants.js +2 -10
  41. package/dist/constants.js.map +1 -1
  42. package/dist/contract.d.ts +37 -134
  43. package/dist/contract.d.ts.map +1 -1
  44. package/dist/contract.js +10 -48
  45. package/dist/contract.js.map +1 -1
  46. package/dist/generate.d.ts +0 -2
  47. package/dist/generate.d.ts.map +1 -1
  48. package/dist/generate.js +5 -22
  49. package/dist/generate.js.map +1 -1
  50. package/dist/index.d.ts +5 -6
  51. package/dist/index.d.ts.map +1 -1
  52. package/dist/index.js +2 -3
  53. package/dist/index.js.map +1 -1
  54. package/dist/install.d.ts +1 -1
  55. package/dist/install.d.ts.map +1 -1
  56. package/dist/install.js +14 -11
  57. package/dist/install.js.map +1 -1
  58. package/dist/output.d.ts +26 -0
  59. package/dist/output.d.ts.map +1 -0
  60. package/dist/output.js +52 -0
  61. package/dist/output.js.map +1 -0
  62. package/dist/resolve.d.ts.map +1 -1
  63. package/dist/resolve.js +15 -26
  64. package/dist/resolve.js.map +1 -1
  65. package/dist/schemas.d.ts +31 -39
  66. package/dist/schemas.d.ts.map +1 -1
  67. package/dist/schemas.js +23 -25
  68. package/dist/schemas.js.map +1 -1
  69. package/package.json +13 -4
  70. package/src/asset-implementation.ts +114 -0
  71. package/src/cli-client.ts +7 -6
  72. package/src/cli.ts +144 -29
  73. package/src/client.ts +5 -15
  74. package/src/commands/generate.ts +9 -6
  75. package/src/commands/install.ts +34 -31
  76. package/src/commands/logout.ts +3 -3
  77. package/src/commands/preview.ts +69 -0
  78. package/src/commands/search.ts +27 -11
  79. package/src/commands/upload.ts +262 -0
  80. package/src/config.ts +11 -5
  81. package/src/constants.ts +2 -10
  82. package/src/contract.ts +22 -120
  83. package/src/generate.ts +5 -29
  84. package/src/index.ts +23 -14
  85. package/src/install.ts +24 -14
  86. package/src/output.ts +76 -0
  87. package/src/resolve.ts +22 -38
  88. package/src/schemas.ts +26 -27
  89. package/tsconfig.json +2 -1
  90. package/dist/commands/login.d.ts +0 -10
  91. package/dist/commands/login.d.ts.map +0 -1
  92. package/dist/commands/login.js +0 -92
  93. package/dist/commands/login.js.map +0 -1
  94. package/dist/internal-contract.d.ts +0 -19
  95. package/dist/internal-contract.d.ts.map +0 -1
  96. package/dist/internal-contract.js +0 -19
  97. package/dist/internal-contract.js.map +0 -1
  98. package/src/commands/login.ts +0 -113
  99. package/src/internal-contract.ts +0 -26
@@ -0,0 +1,88 @@
1
+ import type { AssetSearchResult, AssetVersion, GenerateAssetResult, PaginatedList } from './contract.js';
2
+ import type { AssetType } from './schemas.js';
3
+ export interface AssetSearchInput {
4
+ page: number;
5
+ limit: number;
6
+ type?: AssetType;
7
+ query?: string;
8
+ includeUnapproved: boolean;
9
+ sort: 'newest' | 'alphabetical' | 'relevance';
10
+ }
11
+ export interface AssetExactInput {
12
+ name: string;
13
+ type?: AssetType;
14
+ includeUnapproved: boolean;
15
+ }
16
+ export interface AssetUploadZipInput {
17
+ name: string;
18
+ type: AssetType;
19
+ version: string;
20
+ description?: string;
21
+ npmDependencies: Record<string, string>;
22
+ assetDependencies: Record<string, string>;
23
+ tags: string[];
24
+ zip: File;
25
+ }
26
+ export interface AssetDownloadZipInput {
27
+ name: string;
28
+ version: string;
29
+ }
30
+ export interface AssetGenerateInput {
31
+ description: string;
32
+ type?: AssetType;
33
+ }
34
+ export interface AssetImplementationContext {
35
+ catalog: AssetCatalog;
36
+ blobs: BlobStore;
37
+ searchIndex?: AssetSearchIndex;
38
+ renderModelPreview?: (files: Record<string, Uint8Array>, model: {
39
+ path: string;
40
+ bytes: Uint8Array;
41
+ }) => Promise<{
42
+ bytes: Uint8Array;
43
+ contentType: string;
44
+ }>;
45
+ }
46
+ export interface AssetCatalog {
47
+ search(input: AssetSearchInput): Promise<PaginatedList<AssetSearchResult>>;
48
+ exact(input: AssetExactInput): Promise<AssetSearchResult | null>;
49
+ saveVersion(input: SaveAssetVersionInput): Promise<AssetVersion>;
50
+ getVersion(input: AssetDownloadZipInput): Promise<AssetVersion | null>;
51
+ }
52
+ export interface SaveAssetVersionInput {
53
+ name: string;
54
+ type: AssetType;
55
+ version: string;
56
+ description?: string;
57
+ ownerId: string;
58
+ approved: boolean;
59
+ npmDependencies: Record<string, string>;
60
+ assetDependencies: Record<string, string>;
61
+ sourceKey: string;
62
+ }
63
+ export interface BlobStore {
64
+ put(key: string, data: ArrayBuffer, contentType?: string): Promise<void>;
65
+ get(key: string): Promise<Blob | null>;
66
+ }
67
+ export interface AssetSearchIndexEntry {
68
+ name: string;
69
+ description: string;
70
+ vector: number[];
71
+ }
72
+ export interface AssetSearchIndex {
73
+ list(type: AssetType): Promise<AssetSearchIndexEntry[]>;
74
+ upsert(type: AssetType, entry: AssetSearchIndexEntry): Promise<void>;
75
+ }
76
+ export interface AssetImplementation {
77
+ type: AssetType;
78
+ search(context: AssetImplementationContext, input: AssetSearchInput): Promise<PaginatedList<AssetSearchResult>>;
79
+ exact(context: AssetImplementationContext, input: AssetExactInput): Promise<AssetSearchResult | null>;
80
+ uploadZip(context: AssetImplementationContext, input: AssetUploadZipInput, owner: {
81
+ id: string;
82
+ role: string;
83
+ }): Promise<AssetVersion>;
84
+ downloadZip(context: AssetImplementationContext, input: AssetDownloadZipInput): Promise<Blob>;
85
+ downloadPreviewImage?(context: AssetImplementationContext, input: AssetDownloadZipInput): Promise<Blob>;
86
+ generate(context: AssetImplementationContext, input: AssetGenerateInput): Promise<GenerateAssetResult>;
87
+ }
88
+ //# sourceMappingURL=asset-implementation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asset-implementation.d.ts","sourceRoot":"","sources":["../src/asset-implementation.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=asset-implementation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asset-implementation.js","sourceRoot":"","sources":["../src/asset-implementation.ts"],"names":[],"mappings":""}
@@ -5,13 +5,13 @@ export declare class NotLoggedInError extends Error {
5
5
  export interface CliClientOptions {
6
6
  /** Override the API base URL. Takes precedence over config and defaults. */
7
7
  baseUrl?: string;
8
- /** Require authentication. When true, throws NotLoggedInError if no key is available. */
8
+ /** Require authentication. When true, throws NotLoggedInError if no token is available. */
9
9
  requireAuth?: boolean;
10
10
  }
11
11
  export interface CliClient {
12
12
  client: MarketClient;
13
13
  baseUrl: string;
14
- apiKey: string | undefined;
14
+ authToken: string | undefined;
15
15
  }
16
16
  export declare function getCliClient(opts?: CliClientOptions): Promise<CliClient>;
17
17
  //# sourceMappingURL=cli-client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli-client.d.ts","sourceRoot":"","sources":["../src/cli-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,aAAa,CAAA;AAKnE,qBAAa,gBAAiB,SAAQ,KAAK;;CAK1C;AAED,MAAM,WAAW,gBAAgB;IAC/B,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,yFAAyF;IACzF,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,YAAY,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,MAAM,EAAE,MAAM,GAAG,SAAS,CAAA;CAC3B;AAED,wBAAsB,YAAY,CAAC,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,SAAS,CAAC,CAclF"}
1
+ {"version":3,"file":"cli-client.d.ts","sourceRoot":"","sources":["../src/cli-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,aAAa,CAAA;AAKnE,qBAAa,gBAAiB,SAAQ,KAAK;;CAK1C;AAED,MAAM,WAAW,gBAAgB;IAC/B,4EAA4E;IAC5E,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,2FAA2F;IAC3F,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,YAAY,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,SAAS,EAAE,MAAM,GAAG,SAAS,CAAA;CAC9B;AAED,wBAAsB,YAAY,CAAC,IAAI,GAAE,gBAAqB,GAAG,OAAO,CAAC,SAAS,CAAC,CAelF"}
@@ -9,15 +9,15 @@ export class NotLoggedInError extends Error {
9
9
  }
10
10
  export async function getCliClient(opts = {}) {
11
11
  const config = await loadConfig();
12
- const apiKey = process.env.MARKET_API_KEY ?? config?.apiKey;
12
+ const authToken = process.env.DRAWCALL_AUTH_TOKEN ?? process.env.MARKET_API_KEY ?? config?.authToken;
13
13
  const baseUrl = opts.baseUrl ?? process.env.MARKET_API_URL ?? config?.baseUrl ?? DEFAULT_BASE_URL;
14
- if (opts.requireAuth && !apiKey) {
14
+ if (opts.requireAuth && !authToken) {
15
15
  throw new NotLoggedInError();
16
16
  }
17
17
  return {
18
- client: createMarketClient({ baseUrl, apiKey }),
18
+ client: createMarketClient({ baseUrl, authToken }),
19
19
  baseUrl,
20
- apiKey,
20
+ authToken,
21
21
  };
22
22
  }
23
23
  //# sourceMappingURL=cli-client.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"cli-client.js","sourceRoot":"","sources":["../src/cli-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAqB,MAAM,aAAa,CAAA;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,MAAM,gBAAgB,GAAG,gCAAgC,CAAA;AAEzD,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACzC;QACE,KAAK,CAAC,0CAA0C,CAAC,CAAA;QACjD,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAA;IAChC,CAAC;CACF;AAeD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAyB,EAAE;IAC5D,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAA;IACjC,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,MAAM,EAAE,MAAM,CAAA;IAC3D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,MAAM,EAAE,OAAO,IAAI,gBAAgB,CAAA;IAEjG,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC;QAChC,MAAM,IAAI,gBAAgB,EAAE,CAAA;IAC9B,CAAC;IAED,OAAO;QACL,MAAM,EAAE,kBAAkB,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAC/C,OAAO;QACP,MAAM;KACP,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"cli-client.js","sourceRoot":"","sources":["../src/cli-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAqB,MAAM,aAAa,CAAA;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAExC,MAAM,gBAAgB,GAAG,gCAAgC,CAAA;AAEzD,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACzC;QACE,KAAK,CAAC,0CAA0C,CAAC,CAAA;QACjD,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAA;IAChC,CAAC;CACF;AAeD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAyB,EAAE;IAC5D,MAAM,MAAM,GAAG,MAAM,UAAU,EAAE,CAAA;IACjC,MAAM,SAAS,GACb,OAAO,CAAC,GAAG,CAAC,mBAAmB,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,MAAM,EAAE,SAAS,CAAA;IACpF,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,MAAM,EAAE,OAAO,IAAI,gBAAgB,CAAA;IAEjG,IAAI,IAAI,CAAC,WAAW,IAAI,CAAC,SAAS,EAAE,CAAC;QACnC,MAAM,IAAI,gBAAgB,EAAE,CAAA;IAC9B,CAAC;IAED,OAAO;QACL,MAAM,EAAE,kBAAkB,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;QAClD,OAAO;QACP,SAAS;KACV,CAAA;AACH,CAAC"}
package/dist/cli.js CHANGED
@@ -1,39 +1,53 @@
1
1
  #!/usr/bin/env node
2
2
  import { Command, Option } from 'commander';
3
3
  import chalk from 'chalk';
4
+ import open from 'open';
5
+ import * as oauthClient from 'openid-client';
4
6
  import { ASSET_TYPES } from './schemas.js';
5
7
  import { installCommand } from './commands/install.js';
6
8
  import { searchCommand } from './commands/search.js';
7
9
  import { generateCommand } from './commands/generate.js';
8
- import { login } from './commands/login.js';
10
+ import { previewCommand } from './commands/preview.js';
11
+ import { uploadCommand } from './commands/upload.js';
9
12
  import { logout } from './commands/logout.js';
10
- import { NotLoggedInError } from './cli-client.js';
13
+ import { createMarketClient } from './client.js';
14
+ import { saveConfig, getConfigPath } from './config.js';
15
+ import { errorResult, loginResult } from './output.js';
11
16
  const program = new Command();
12
17
  const DEFAULT_BASE_URL = 'https://api.market.drawcall.ai';
13
- const typeOption = new Option('--type <type>', 'Filter by asset type').choices([...ASSET_TYPES]);
14
- const apiOption = new Option('--api <url>', 'API base URL').default(process.env.MARKET_API_URL, 'from MARKET_API_URL / config / default');
15
- program.name('market').description('Install assets from the drawcall.ai market').version('0.1.0');
18
+ const AUTH_ISSUER_URL = 'https://auth.drawcall.ai/api/auth';
19
+ const DEVICE_CLIENT_ID = 'market-cli';
20
+ const typeOption = new Option('--type <type>', 'Asset type').choices([...ASSET_TYPES]);
21
+ const apiOption = new Option('--api <url>', 'API URL').default(process.env.MARKET_API_URL, 'from MARKET_API_URL / config / default');
22
+ program.name('market').description('Find and install Drawcall Market assets').version('0.1.0');
16
23
  program
17
24
  .command('login')
18
- .description('Authenticate with the market via your browser')
25
+ .description('Sign in')
19
26
  .addOption(apiOption)
20
27
  .action(async (opts) => {
21
- await login({ baseUrl: opts.api ?? DEFAULT_BASE_URL });
28
+ const baseUrl = opts.api ?? DEFAULT_BASE_URL;
29
+ const token = await runDeviceLogin();
30
+ const client = createMarketClient({ baseUrl, authToken: token });
31
+ const profile = await client.user.getProfile();
32
+ if (!profile)
33
+ throw new Error('The Market API did not accept the auth token.');
34
+ await saveConfig({ authToken: token, baseUrl });
35
+ console.log(loginResult(profile.email, getConfigPath()));
22
36
  });
23
37
  program
24
38
  .command('logout')
25
- .description('Remove the local API key')
39
+ .description('Sign out')
26
40
  .action(async () => {
27
41
  await logout();
28
42
  });
29
43
  program
30
44
  .command('install')
31
- .description('Install assets. Each arg is tried as an exact name, then a semantic search, then auto-generated.')
32
- .argument('<assets...>', 'Asset names or natural-language descriptions')
45
+ .description('Install by name or prompt')
46
+ .argument('<assets...>', 'Names or prompts')
33
47
  .addOption(typeOption)
34
48
  .addOption(apiOption)
35
49
  .option('--unapproved', 'Include unapproved versions', false)
36
- .option('--cwd <dir>', 'Project directory', process.cwd())
50
+ .option('--cwd <dir>', 'Project directory')
37
51
  .action(async (args, opts) => {
38
52
  await installCommand(args, {
39
53
  type: opts.type,
@@ -44,20 +58,68 @@ program
44
58
  });
45
59
  program
46
60
  .command('search')
47
- .description('Search the market. Prints up to 10 ranked results.')
48
- .argument('<query>', 'Natural-language query')
61
+ .description('Find assets')
62
+ .argument('<query>', 'Search query')
49
63
  .addOption(typeOption)
50
64
  .addOption(apiOption)
65
+ .option('--unapproved', 'Include unapproved versions', false)
66
+ .option('--limit <n>', 'Max results, 1-5', parseSearchLimit, 5)
67
+ .option('--verbose', 'Show longer descriptions', false)
51
68
  .action(async (query, opts) => {
52
- await searchCommand(query, { type: opts.type, baseUrl: opts.api });
69
+ if (!opts.type) {
70
+ console.error(errorResult(`Search requires --type. Available types: ${ASSET_TYPES.join(', ')}`));
71
+ process.exit(1);
72
+ }
73
+ await searchCommand(query, {
74
+ type: opts.type,
75
+ baseUrl: opts.api,
76
+ unapproved: opts.unapproved,
77
+ limit: opts.limit,
78
+ verbose: opts.verbose,
79
+ });
80
+ });
81
+ program
82
+ .command('upload')
83
+ .description('Publish one model')
84
+ .argument('<name>', 'Asset name')
85
+ .argument('<file-filter>', '.glb/.gltf path or glob')
86
+ .argument('<description>', 'Short description')
87
+ .addOption(typeOption)
88
+ .addOption(apiOption)
89
+ .option('--version <version>', 'Explicit semver version')
90
+ .option('--cwd <dir>', 'Project directory')
91
+ .action(async (name, fileFilter, description, opts) => {
92
+ await uploadCommand(name, fileFilter, description, {
93
+ type: opts.type,
94
+ version: opts.version,
95
+ baseUrl: opts.api,
96
+ cwd: opts.cwd,
97
+ });
98
+ });
99
+ program
100
+ .command('preview')
101
+ .description('Save preview image')
102
+ .argument('<name>', 'Asset name')
103
+ .argument('[version]', 'Semver version')
104
+ .addOption(typeOption)
105
+ .addOption(apiOption)
106
+ .option('--unapproved', 'Include unapproved versions', false)
107
+ .option('--out <file>', 'Output PNG path')
108
+ .action(async (name, version, opts) => {
109
+ await previewCommand(name, version, {
110
+ type: opts.type,
111
+ baseUrl: opts.api,
112
+ unapproved: opts.unapproved,
113
+ out: opts.out,
114
+ });
53
115
  });
54
116
  program
55
117
  .command('generate')
56
- .description('Generate a new asset from a description and install it.')
57
- .argument('<description>', 'Description of the asset to generate')
118
+ .description('Generate and install')
119
+ .argument('<description>', 'Asset prompt')
58
120
  .addOption(typeOption)
59
121
  .addOption(apiOption)
60
- .option('--cwd <dir>', 'Project directory', process.cwd())
122
+ .option('--cwd <dir>', 'Project directory')
61
123
  .action(async (description, opts) => {
62
124
  await generateCommand(description, {
63
125
  type: opts.type,
@@ -65,12 +127,32 @@ program
65
127
  cwd: opts.cwd,
66
128
  });
67
129
  });
130
+ if (process.argv.length <= 2) {
131
+ program.outputHelp();
132
+ process.exit(0);
133
+ }
68
134
  program.parseAsync().catch((err) => {
69
- // Commands that own a spinner print the error via spinner.fail() and rethrow,
70
- // so we only print here when nothing else did.
71
- if (err instanceof NotLoggedInError) {
72
- console.error(chalk.red(err.message));
73
- }
135
+ const message = err instanceof Error ? err.message : String(err);
136
+ console.error(errorResult(message));
74
137
  process.exit(1);
75
138
  });
139
+ function parseSearchLimit(value) {
140
+ const parsed = Number.parseInt(value, 10);
141
+ if (!Number.isInteger(parsed) || parsed < 1) {
142
+ throw new Error('--limit must be a positive integer');
143
+ }
144
+ return Math.min(parsed, 5);
145
+ }
146
+ async function runDeviceLogin() {
147
+ const config = await oauthClient.discovery(new URL(AUTH_ISSUER_URL), DEVICE_CLIENT_ID, undefined, oauthClient.None());
148
+ const code = await oauthClient.initiateDeviceAuthorization(config, { scope: 'market' });
149
+ const verificationUri = code.verification_uri_complete ?? code.verification_uri;
150
+ console.log(`Open ${chalk.cyan(verificationUri)}`);
151
+ console.log(`Code: ${chalk.bold(code.user_code)}`);
152
+ await open(verificationUri).catch(() => undefined);
153
+ const tokens = await oauthClient.pollDeviceAuthorizationGrant(config, code);
154
+ if (!tokens.access_token)
155
+ throw new Error('Device login completed without an access token.');
156
+ return tokens.access_token;
157
+ }
76
158
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/client.d.ts CHANGED
@@ -1,13 +1,11 @@
1
1
  import type { ContractRouterClient } from '@orpc/contract';
2
2
  import type { AppContract } from './contract.js';
3
- import type { InternalContract } from './internal-contract.js';
4
3
  export type MarketClient = ContractRouterClient<AppContract>;
5
- export type InternalClient = ContractRouterClient<InternalContract>;
6
4
  export interface MarketClientOptions {
7
5
  baseUrl?: string;
8
6
  fetch?: typeof globalThis.fetch;
7
+ authToken?: string;
9
8
  apiKey?: string;
10
9
  }
11
10
  export declare function createMarketClient(opts?: MarketClientOptions): MarketClient;
12
- export declare function createInternalClient(opts?: MarketClientOptions): InternalClient;
13
11
  //# sourceMappingURL=client.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAE9D,MAAM,MAAM,YAAY,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAA;AAC5D,MAAM,MAAM,cAAc,GAAG,oBAAoB,CAAC,gBAAgB,CAAC,CAAA;AAInE,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAA;IAC/B,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAMD,wBAAgB,kBAAkB,CAAC,IAAI,GAAE,mBAAwB,GAAG,YAAY,CAQ/E;AAED,wBAAgB,oBAAoB,CAAC,IAAI,GAAE,mBAAwB,GAAG,cAAc,CAQnF"}
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAA;AAC1D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAEhD,MAAM,MAAM,YAAY,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAA;AAI5D,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAA;IAC/B,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAMD,wBAAgB,kBAAkB,CAAC,IAAI,GAAE,mBAAwB,GAAG,YAAY,CAS/E"}
package/dist/client.js CHANGED
@@ -1,24 +1,16 @@
1
1
  import { createORPCClient } from '@orpc/client';
2
2
  import { RPCLink } from '@orpc/client/fetch';
3
3
  const DEFAULT_BASE_URL = 'https://api.market.drawcall.ai';
4
- function buildHeaders(apiKey) {
5
- return apiKey ? { 'x-api-key': apiKey } : undefined;
4
+ function buildHeaders(authToken) {
5
+ return authToken ? { authorization: `Bearer ${authToken}` } : undefined;
6
6
  }
7
7
  export function createMarketClient(opts = {}) {
8
8
  const baseUrl = opts.baseUrl || DEFAULT_BASE_URL;
9
+ const authToken = opts.authToken ?? opts.apiKey;
9
10
  const link = new RPCLink({
10
11
  url: new URL('/api/rpc', baseUrl).href,
11
12
  fetch: opts.fetch,
12
- headers: buildHeaders(opts.apiKey),
13
- });
14
- return createORPCClient(link);
15
- }
16
- export function createInternalClient(opts = {}) {
17
- const baseUrl = opts.baseUrl || DEFAULT_BASE_URL;
18
- const link = new RPCLink({
19
- url: new URL('/api/internal-rpc', baseUrl).href,
20
- fetch: opts.fetch,
21
- headers: buildHeaders(opts.apiKey),
13
+ headers: buildHeaders(authToken),
22
14
  });
23
15
  return createORPCClient(link);
24
16
  }
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAQ5C,MAAM,gBAAgB,GAAG,gCAAgC,CAAA;AAQzD,SAAS,YAAY,CAAC,MAAe;IACnC,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;AACrD,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAA4B,EAAE;IAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,gBAAgB,CAAA;IAChD,MAAM,IAAI,GAAG,IAAI,OAAO,CAAC;QACvB,GAAG,EAAE,IAAI,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI;QACtC,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;KACnC,CAAC,CAAA;IACF,OAAO,gBAAgB,CAAe,IAAI,CAAC,CAAA;AAC7C,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,OAA4B,EAAE;IACjE,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,gBAAgB,CAAA;IAChD,MAAM,IAAI,GAAG,IAAI,OAAO,CAAC;QACvB,GAAG,EAAE,IAAI,GAAG,CAAC,mBAAmB,EAAE,OAAO,CAAC,CAAC,IAAI;QAC/C,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,OAAO,EAAE,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC;KACnC,CAAC,CAAA;IACF,OAAO,gBAAgB,CAAiB,IAAI,CAAC,CAAA;AAC/C,CAAC"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../src/client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAM5C,MAAM,gBAAgB,GAAG,gCAAgC,CAAA;AASzD,SAAS,YAAY,CAAC,SAAkB;IACtC,OAAO,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,UAAU,SAAS,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;AACzE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAA4B,EAAE;IAC/D,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,gBAAgB,CAAA;IAChD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,CAAA;IAC/C,MAAM,IAAI,GAAG,IAAI,OAAO,CAAC;QACvB,GAAG,EAAE,IAAI,GAAG,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,IAAI;QACtC,KAAK,EAAE,IAAI,CAAC,KAAK;QACjB,OAAO,EAAE,YAAY,CAAC,SAAS,CAAC;KACjC,CAAC,CAAA;IACF,OAAO,gBAAgB,CAAe,IAAI,CAAC,CAAA;AAC7C,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAE9C,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAoCf"}
1
+ {"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAA;AAE9C,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,UAAU,CAAC,EAAE,OAAO,CAAA;CACrB;AAED,wBAAsB,eAAe,CACnC,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,sBAAsB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAuCf"}
@@ -1,12 +1,16 @@
1
- import chalk from 'chalk';
2
1
  import ora from 'ora';
3
2
  import { getCliClient } from '../cli-client.js';
4
3
  import { generateAndWait } from '../generate.js';
5
4
  import { resolve } from '../resolve.js';
6
5
  import { install as runInstall } from '../install.js';
6
+ import { generatedInstallResult } from '../output.js';
7
7
  export async function generateCommand(description, opts) {
8
8
  const { client } = await getCliClient({ baseUrl: opts.baseUrl, requireAuth: true });
9
- const spinner = ora(`Generating "${description}"`).start();
9
+ const spinner = ora({
10
+ text: `Generating "${description}"`,
11
+ isEnabled: Boolean(process.stderr.isTTY),
12
+ isSilent: !process.stderr.isTTY,
13
+ }).start();
10
14
  try {
11
15
  const generated = await generateAndWait(client, { description, type: opts.type }, {
12
16
  onProgress: (msg) => {
@@ -21,10 +25,11 @@ export async function generateCommand(description, opts) {
21
25
  spinner.text = msg;
22
26
  },
23
27
  });
24
- spinner.succeed(`Installed ${chalk.cyan(generated.assetName)}${chalk.dim('@' + generated.version)}`);
28
+ spinner.stop();
29
+ console.log(generatedInstallResult(generated.assetName, generated.version));
25
30
  }
26
31
  catch (err) {
27
- spinner.fail(err instanceof Error ? err.message : String(err));
32
+ spinner.stop();
28
33
  throw err;
29
34
  }
30
35
  }
@@ -1 +1 @@
1
- {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,GAAG,MAAM,KAAK,CAAA;AACrB,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,eAAe,CAAA;AAUrD,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,WAAmB,EACnB,IAA4B;IAE5B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,YAAY,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAA;IAEnF,MAAM,OAAO,GAAG,GAAG,CAAC,eAAe,WAAW,GAAG,CAAC,CAAC,KAAK,EAAE,CAAA;IAC1D,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,eAAe,CACrC,MAAM,EACN,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAChC;YACE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE;gBAClB,OAAO,CAAC,IAAI,GAAG,GAAG,CAAA;YACpB,CAAC;SACF,CACF,CAAA;QAED,OAAO,CAAC,IAAI,GAAG,aAAa,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,OAAO,EAAE,CAAA;QACtE,MAAM,UAAU,GAAG,MAAM,OAAO,CAC9B,MAAM,CAAC,KAAK,EACZ,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,EACzD,EAAE,iBAAiB,EAAE,IAAI,CAAC,UAAU,IAAI,KAAK,EAAE,CAChD,CAAA;QAED,MAAM,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE;YACnC,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE;gBAClB,OAAO,CAAC,IAAI,GAAG,GAAG,CAAA;YACpB,CAAC;SACF,CAAC,CAAA;QAEF,OAAO,CAAC,OAAO,CACb,aAAa,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,GAAG,SAAS,CAAC,OAAO,CAAC,EAAE,CACpF,CAAA;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;QAC9D,MAAM,GAAG,CAAA;IACX,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"generate.js","sourceRoot":"","sources":["../../src/commands/generate.ts"],"names":[],"mappings":"AAAA,OAAO,GAAG,MAAM,KAAK,CAAA;AACrB,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAA;AAChD,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,eAAe,CAAA;AACrD,OAAO,EAAE,sBAAsB,EAAE,MAAM,cAAc,CAAA;AAUrD,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,WAAmB,EACnB,IAA4B;IAE5B,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,YAAY,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAA;IAEnF,MAAM,OAAO,GAAG,GAAG,CAAC;QAClB,IAAI,EAAE,eAAe,WAAW,GAAG;QACnC,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;QACxC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;KAChC,CAAC,CAAC,KAAK,EAAE,CAAA;IACV,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,MAAM,eAAe,CACrC,MAAM,EACN,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,EAChC;YACE,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE;gBAClB,OAAO,CAAC,IAAI,GAAG,GAAG,CAAA;YACpB,CAAC;SACF,CACF,CAAA;QAED,OAAO,CAAC,IAAI,GAAG,aAAa,SAAS,CAAC,SAAS,IAAI,SAAS,CAAC,OAAO,EAAE,CAAA;QACtE,MAAM,UAAU,GAAG,MAAM,OAAO,CAC9B,MAAM,CAAC,KAAK,EACZ,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,SAAS,EAAE,KAAK,EAAE,SAAS,CAAC,OAAO,EAAE,CAAC,EACzD,EAAE,iBAAiB,EAAE,IAAI,CAAC,UAAU,IAAI,KAAK,EAAE,CAChD,CAAA;QAED,MAAM,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE;YACnC,GAAG,EAAE,IAAI,CAAC,GAAG;YACb,UAAU,EAAE,CAAC,GAAG,EAAE,EAAE;gBAClB,OAAO,CAAC,IAAI,GAAG,GAAG,CAAA;YACpB,CAAC;SACF,CAAC,CAAA;QAEF,OAAO,CAAC,IAAI,EAAE,CAAA;QACd,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,SAAS,CAAC,SAAS,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC,CAAA;IAC7E,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,IAAI,EAAE,CAAA;QACd,MAAM,GAAG,CAAA;IACX,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAKA,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,eAAe,CAAA;AAI/D,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAOD,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAgC/F"}
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAIA,OAAO,EAAmB,KAAK,SAAS,EAAE,MAAM,eAAe,CAAA;AAK/D,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,SAAS,CAAA;IAChB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAOD,wBAAsB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmC/F"}
@@ -1,19 +1,22 @@
1
- import chalk from 'chalk';
2
1
  import ora from 'ora';
3
2
  import { resolve } from '../resolve.js';
4
3
  import { install as runInstall } from '../install.js';
5
4
  import { generateAndWait } from '../generate.js';
6
5
  import { assetNameSchema } from '../schemas.js';
7
6
  import { getCliClient } from '../cli-client.js';
7
+ import { compact, generatedInstallResult, installResult } from '../output.js';
8
8
  export async function installCommand(args, opts) {
9
- const { client, apiKey } = await getCliClient({ baseUrl: opts.baseUrl });
10
- const canGenerate = Boolean(apiKey);
11
- const spinner = ora().start();
9
+ const { client, authToken } = await getCliClient({ baseUrl: opts.baseUrl });
10
+ const canGenerate = Boolean(authToken);
11
+ const spinner = ora({
12
+ isEnabled: Boolean(process.stderr.isTTY),
13
+ isSilent: !process.stderr.isTTY,
14
+ }).start();
12
15
  try {
13
16
  const requests = [];
14
17
  for (const arg of args) {
15
18
  spinner.text = `Resolving "${truncate(arg, 40)}"`;
16
- requests.push(await resolveArg(client, arg, opts.type, spinner, canGenerate));
19
+ requests.push(await resolveArg(client, arg, opts.type, spinner, canGenerate, opts.unapproved ?? false));
17
20
  }
18
21
  spinner.text = 'Resolving dependency tree';
19
22
  const resolution = await resolve(client.asset, requests, {
@@ -25,58 +28,57 @@ export async function installCommand(args, opts) {
25
28
  spinner.text = msg;
26
29
  },
27
30
  });
28
- spinner.succeed(`Installed ${resolution.assets.length} asset(s): ` +
29
- resolution.assets.map((a) => chalk.cyan(a.name) + chalk.dim('@' + a.version)).join(', '));
31
+ spinner.stop();
32
+ console.log(installResult(resolution.assets));
30
33
  }
31
34
  catch (err) {
32
- spinner.fail(err instanceof Error ? err.message : String(err));
35
+ spinner.stop();
33
36
  throw err;
34
37
  }
35
38
  }
36
- /**
37
- * Fallthrough: exact-name → top-1 search hit → auto-generate (auth only).
38
- */
39
- async function resolveArg(client, arg, type, spinner, canGenerate) {
40
- // 1. Try parsing as asset-name[@range] and looking up exact
39
+ async function resolveArg(client, arg, type, spinner, canGenerate, includeUnapproved) {
41
40
  const parsed = parseNameAndRange(arg);
42
41
  if (parsed) {
43
- const existing = await client.asset.getByName({ name: parsed.name });
42
+ const existing = await client.asset.exact({
43
+ name: parsed.name,
44
+ type,
45
+ includeUnapproved,
46
+ });
44
47
  if (existing)
45
48
  return parsed;
46
49
  }
47
- // 2. Semantic search — top-1
48
50
  spinner.text = `Searching "${truncate(arg, 40)}"`;
49
- const results = await client.asset.list({
50
- search: arg,
51
+ const results = await client.asset.search({
52
+ query: arg,
51
53
  type,
54
+ includeUnapproved,
52
55
  limit: 1,
53
56
  page: 1,
54
57
  sort: 'relevance',
55
58
  });
56
59
  if (results.items.length > 0) {
57
60
  const hit = results.items[0];
58
- spinner.info(`Matched "${chalk.cyan(hit.name)}" ${chalk.dim(`(${hit.type})`)} for "${arg}"`);
59
- spinner.start();
61
+ if (process.stderr.isTTY) {
62
+ spinner.info(`Matched "${compact(arg, 48)}" to ${hit.name} (${hit.type})`);
63
+ spinner.start();
64
+ }
60
65
  return { name: hit.name, range: '*' };
61
66
  }
62
- // 3. Auto-generate (requires auth)
63
67
  if (!canGenerate) {
64
68
  throw new Error(`No matches for "${arg}". Run \`market login\` to enable auto-generation of missing assets.`);
65
69
  }
66
- spinner.text = `No matches generating "${truncate(arg, 40)}"`;
70
+ spinner.text = `No matches; generating "${truncate(arg, 40)}"`;
67
71
  const generated = await generateAndWait(client, { description: arg, type }, {
68
72
  onProgress: (msg) => {
69
73
  spinner.text = msg;
70
74
  },
71
75
  });
72
- spinner.info(`Generated ${chalk.cyan(generated.assetName)}${chalk.dim('@' + generated.version)} for "${arg}"`);
73
- spinner.start();
76
+ if (process.stderr.isTTY) {
77
+ spinner.info(`${generatedInstallResult(generated.assetName, generated.version)} for "${compact(arg, 48)}"`);
78
+ spinner.start();
79
+ }
74
80
  return { name: generated.assetName, range: generated.version };
75
81
  }
76
- /**
77
- * Returns { name, range } if the arg parses as `<asset-name>[@<range>]`.
78
- * Returns null if the name portion fails the asset-name schema (e.g. has spaces).
79
- */
80
82
  function parseNameAndRange(arg) {
81
83
  const atIdx = arg.indexOf('@');
82
84
  const name = atIdx >= 0 ? arg.slice(0, atIdx) : arg;
@@ -84,6 +86,6 @@ function parseNameAndRange(arg) {
84
86
  return assetNameSchema.safeParse(name).success ? { name, range } : null;
85
87
  }
86
88
  function truncate(s, max) {
87
- return s.length > max ? s.slice(0, max - 1) + '' : s;
89
+ return s.length > max ? s.slice(0, max - 3) + '...' : s;
88
90
  }
89
91
  //# sourceMappingURL=install.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,12 @@
1
- import chalk from 'chalk';
2
1
  import { clearConfig, getConfigPath } from '../config.js';
2
+ import { logoutResult } from '../output.js';
3
3
  export async function logout() {
4
4
  const existed = await clearConfig();
5
5
  if (existed) {
6
- console.log(chalk.green('Logged out.') + chalk.dim(` (${getConfigPath()} removed)`));
6
+ console.log(logoutResult(getConfigPath()));
7
7
  }
8
8
  else {
9
- console.log(chalk.dim('Already logged out.'));
9
+ console.log(logoutResult());
10
10
  }
11
11
  }
12
12
  //# sourceMappingURL=logout.js.map