@drawcall/market 0.1.2 → 0.1.4
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/dist/cli-client.d.ts +17 -0
- package/dist/cli-client.d.ts.map +1 -0
- package/dist/cli-client.js +23 -0
- package/dist/cli-client.js.map +1 -0
- package/dist/cli.js +63 -48
- package/dist/cli.js.map +1 -1
- package/dist/client.d.ts +4 -3
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +11 -12
- package/dist/client.js.map +1 -1
- package/dist/commands/generate.d.ts +9 -0
- package/dist/commands/generate.d.ts.map +1 -0
- package/dist/commands/generate.js +31 -0
- package/dist/commands/generate.js.map +1 -0
- package/dist/commands/install.d.ts +9 -0
- package/dist/commands/install.d.ts.map +1 -0
- package/dist/commands/install.js +85 -0
- package/dist/commands/install.js.map +1 -0
- package/dist/commands/login.d.ts +10 -0
- package/dist/commands/login.d.ts.map +1 -0
- package/dist/commands/login.js +92 -0
- package/dist/commands/login.js.map +1 -0
- package/dist/commands/logout.d.ts +2 -0
- package/dist/commands/logout.d.ts.map +1 -0
- package/dist/commands/logout.js +12 -0
- package/dist/commands/logout.js.map +1 -0
- package/dist/commands/search.d.ts +7 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +32 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/config.d.ts +12 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +47 -0
- package/dist/config.js.map +1 -0
- package/dist/contract.d.ts +25 -0
- package/dist/contract.d.ts.map +1 -1
- package/dist/contract.js +20 -24
- package/dist/contract.js.map +1 -1
- package/dist/generate.d.ts +20 -0
- package/dist/generate.d.ts.map +1 -0
- package/dist/generate.js +33 -0
- package/dist/generate.js.map +1 -0
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/package.json +3 -1
- package/src/cli-client.ts +40 -0
- package/src/cli.ts +78 -53
- package/src/client.ts +14 -12
- package/src/commands/generate.ts +55 -0
- package/src/commands/install.ts +118 -0
- package/src/commands/login.ts +113 -0
- package/src/commands/logout.ts +11 -0
- package/src/commands/search.ts +41 -0
- package/src/config.ts +53 -0
- package/src/contract.ts +33 -23
- package/src/generate.ts +62 -0
- package/src/index.ts +5 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,OAAO,GAAG,MAAM,KAAK,CAAA;AACrB,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAA;AAG/C,MAAM,YAAY,GAAG,EAAE,CAAA;AAOvB,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAa,EAAE,IAA0B;IAC3E,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,cAAc,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,CAAA;IACnD,IAAI,OAAO,CAAA;IACX,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;YAChC,MAAM,EAAE,KAAK;YACb,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,YAAY;YACnB,IAAI,EAAE,CAAC;YACP,IAAI,EAAE,WAAW;SAClB,CAAC,CAAA;IACJ,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;IACD,OAAO,CAAC,IAAI,EAAE,CAAA;IAEd,IAAI,OAAO,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAA;QACrC,OAAM;IACR,CAAC;IAED,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QACxE,OAAO,CAAC,GAAG,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,IAAI,EAAE,CAAC,CAAA;IACjF,CAAC;AACH,CAAC"}
|
package/dist/config.d.ts
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
declare const configSchema: z.ZodObject<{
|
|
3
|
+
apiKey: z.ZodString;
|
|
4
|
+
baseUrl: z.ZodOptional<z.ZodString>;
|
|
5
|
+
}, z.core.$strip>;
|
|
6
|
+
export type Config = z.infer<typeof configSchema>;
|
|
7
|
+
export declare function loadConfig(): Promise<Config | null>;
|
|
8
|
+
export declare function saveConfig(config: Config): Promise<void>;
|
|
9
|
+
export declare function clearConfig(): Promise<boolean>;
|
|
10
|
+
export declare function getConfigPath(): string;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,QAAA,MAAM,YAAY;;;iBAGhB,CAAA;AAEF,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAA;AAcjD,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQzD;AAED,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAK9D;AAED,wBAAsB,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC,CAOpD;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
|
package/dist/config.js
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import * as fs from 'fs/promises';
|
|
2
|
+
import * as os from 'os';
|
|
3
|
+
import * as path from 'path';
|
|
4
|
+
import { z } from 'zod';
|
|
5
|
+
const configSchema = z.object({
|
|
6
|
+
apiKey: z.string().startsWith('mk_'),
|
|
7
|
+
baseUrl: z.string().url().optional(),
|
|
8
|
+
});
|
|
9
|
+
function configDir() {
|
|
10
|
+
if (process.platform === 'win32' && process.env.APPDATA) {
|
|
11
|
+
return path.join(process.env.APPDATA, 'drawcall-market');
|
|
12
|
+
}
|
|
13
|
+
const base = process.env.XDG_CONFIG_HOME ?? path.join(os.homedir(), '.config');
|
|
14
|
+
return path.join(base, 'drawcall-market');
|
|
15
|
+
}
|
|
16
|
+
function configPath() {
|
|
17
|
+
return path.join(configDir(), 'config.json');
|
|
18
|
+
}
|
|
19
|
+
export async function loadConfig() {
|
|
20
|
+
try {
|
|
21
|
+
const raw = await fs.readFile(configPath(), 'utf-8');
|
|
22
|
+
const parsed = configSchema.safeParse(JSON.parse(raw));
|
|
23
|
+
return parsed.success ? parsed.data : null;
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
return null;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export async function saveConfig(config) {
|
|
30
|
+
const dir = configDir();
|
|
31
|
+
await fs.mkdir(dir, { recursive: true });
|
|
32
|
+
const file = configPath();
|
|
33
|
+
await fs.writeFile(file, JSON.stringify(config, null, 2) + '\n', { mode: 0o600 });
|
|
34
|
+
}
|
|
35
|
+
export async function clearConfig() {
|
|
36
|
+
try {
|
|
37
|
+
await fs.unlink(configPath());
|
|
38
|
+
return true;
|
|
39
|
+
}
|
|
40
|
+
catch {
|
|
41
|
+
return false;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
export function getConfigPath() {
|
|
45
|
+
return configPath();
|
|
46
|
+
}
|
|
47
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAA;AACjC,OAAO,KAAK,EAAE,MAAM,IAAI,CAAA;AACxB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAA;AAC5B,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAEvB,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5B,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,UAAU,CAAC,KAAK,CAAC;IACpC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;CACrC,CAAC,CAAA;AAIF,SAAS,SAAS;IAChB,IAAI,OAAO,CAAC,QAAQ,KAAK,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC;QACxD,OAAO,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAA;IAC1D,CAAC;IACD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAA;IAC9E,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,iBAAiB,CAAC,CAAA;AAC3C,CAAC;AAED,SAAS,UAAU;IACjB,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,aAAa,CAAC,CAAA;AAC9C,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU;IAC9B,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,EAAE,EAAE,OAAO,CAAC,CAAA;QACpD,MAAM,MAAM,GAAG,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAA;QACtD,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAA;IAC5C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,MAAc;IAC7C,MAAM,GAAG,GAAG,SAAS,EAAE,CAAA;IACvB,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;IACxC,MAAM,IAAI,GAAG,UAAU,EAAE,CAAA;IACzB,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;AACnF,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,CAAA;QAC7B,OAAO,IAAI,CAAA;IACb,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAA;IACd,CAAC;AACH,CAAC;AAED,MAAM,UAAU,aAAa;IAC3B,OAAO,UAAU,EAAE,CAAA;AACrB,CAAC"}
|
package/dist/contract.d.ts
CHANGED
|
@@ -80,6 +80,14 @@ export interface FileTreeEntry {
|
|
|
80
80
|
path: string;
|
|
81
81
|
size: number;
|
|
82
82
|
}
|
|
83
|
+
export interface GenerateJobStatus {
|
|
84
|
+
jobId: string;
|
|
85
|
+
state: 'queued' | 'running' | 'done' | 'failed';
|
|
86
|
+
message: string | null;
|
|
87
|
+
assetName: string | null;
|
|
88
|
+
version: string | null;
|
|
89
|
+
error: string | null;
|
|
90
|
+
}
|
|
83
91
|
export declare const contract: {
|
|
84
92
|
asset: {
|
|
85
93
|
getByName: import("@orpc/contract").ContractProcedureBuilderWithInputOutput<z.ZodObject<{
|
|
@@ -193,6 +201,23 @@ export declare const contract: {
|
|
|
193
201
|
tag: {
|
|
194
202
|
list: import("@orpc/contract").ContractProcedureBuilderWithOutput<import("@orpc/contract").Schema<unknown, unknown>, z.ZodCustom<TagWithCount[], TagWithCount[]>, Record<never, never>, Record<never, never>>;
|
|
195
203
|
};
|
|
204
|
+
generate: {
|
|
205
|
+
start: import("@orpc/contract").ContractProcedureBuilderWithInputOutput<z.ZodObject<{
|
|
206
|
+
description: z.ZodString;
|
|
207
|
+
type: z.ZodOptional<z.ZodEnum<{
|
|
208
|
+
generic: "generic";
|
|
209
|
+
model: "model";
|
|
210
|
+
hdri: "hdri";
|
|
211
|
+
material: "material";
|
|
212
|
+
music: "music";
|
|
213
|
+
}>>;
|
|
214
|
+
}, z.core.$strip>, z.ZodObject<{
|
|
215
|
+
jobId: z.ZodString;
|
|
216
|
+
}, z.core.$strip>, Record<never, never>, Record<never, never>>;
|
|
217
|
+
status: import("@orpc/contract").ContractProcedureBuilderWithInputOutput<z.ZodObject<{
|
|
218
|
+
jobId: z.ZodString;
|
|
219
|
+
}, z.core.$strip>, z.ZodCustom<GenerateJobStatus, GenerateJobStatus>, Record<never, never>, Record<never, never>>;
|
|
220
|
+
};
|
|
196
221
|
};
|
|
197
222
|
export type AppContract = typeof contract;
|
|
198
223
|
//# sourceMappingURL=contract.d.ts.map
|
package/dist/contract.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;
|
|
1
|
+
{"version":3,"file":"contract.d.ts","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"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"}
|
package/dist/contract.js
CHANGED
|
@@ -1,15 +1,13 @@
|
|
|
1
1
|
import { oc } from '@orpc/contract';
|
|
2
2
|
import { z } from 'zod';
|
|
3
|
-
import { assetNameSchema, semverSchema, listAssetsSchema, updateProfileSchema, uploadGenericSchema, uploadTypedSchema, uploadMaterialSchema, } from './schemas.js';
|
|
3
|
+
import { assetNameSchema, assetTypeSchema, semverSchema, listAssetsSchema, updateProfileSchema, uploadGenericSchema, uploadTypedSchema, uploadMaterialSchema, } from './schemas.js';
|
|
4
4
|
// ─── Contract ─────────────────────────────────────────────────────────────────
|
|
5
5
|
export const contract = {
|
|
6
6
|
asset: {
|
|
7
7
|
getByName: oc
|
|
8
8
|
.input(z.object({ name: assetNameSchema }))
|
|
9
9
|
.output(z.custom()),
|
|
10
|
-
list: oc
|
|
11
|
-
.input(listAssetsSchema)
|
|
12
|
-
.output(z.custom()),
|
|
10
|
+
list: oc.input(listAssetsSchema).output(z.custom()),
|
|
13
11
|
getVersionTree: oc
|
|
14
12
|
.input(z.object({ name: z.string(), version: semverSchema }))
|
|
15
13
|
.output(z.custom()),
|
|
@@ -30,35 +28,33 @@ export const contract = {
|
|
|
30
28
|
music: oc
|
|
31
29
|
.input(uploadTypedSchema.extend({ file: z.instanceof(File) }))
|
|
32
30
|
.output(z.custom()),
|
|
33
|
-
material: oc
|
|
34
|
-
.input(uploadMaterialSchema)
|
|
35
|
-
.output(z.custom()),
|
|
31
|
+
material: oc.input(uploadMaterialSchema).output(z.custom()),
|
|
36
32
|
},
|
|
37
33
|
admin: {
|
|
38
|
-
listUnapproved: oc
|
|
39
|
-
.output(z.custom()),
|
|
34
|
+
listUnapproved: oc.output(z.custom()),
|
|
40
35
|
approve: oc
|
|
41
36
|
.input(z.object({ assetName: z.string(), version: z.string() }))
|
|
42
37
|
.output(z.object({ success: z.boolean() })),
|
|
43
|
-
backfillEmbeddings: oc
|
|
44
|
-
.output(z.object({ indexed: z.number() })),
|
|
38
|
+
backfillEmbeddings: oc.output(z.object({ indexed: z.number() })),
|
|
45
39
|
},
|
|
46
40
|
user: {
|
|
47
|
-
getProfile: oc
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
getApiKey: oc
|
|
53
|
-
.output(z.custom()),
|
|
54
|
-
regenerateApiKey: oc
|
|
55
|
-
.output(z.object({ key: z.string(), prefix: z.string() })),
|
|
56
|
-
myAssets: oc
|
|
57
|
-
.output(z.custom()),
|
|
41
|
+
getProfile: oc.output(z.custom()),
|
|
42
|
+
updateProfile: oc.input(updateProfileSchema).output(z.custom()),
|
|
43
|
+
getApiKey: oc.output(z.custom()),
|
|
44
|
+
regenerateApiKey: oc.output(z.object({ key: z.string(), prefix: z.string() })),
|
|
45
|
+
myAssets: oc.output(z.custom()),
|
|
58
46
|
},
|
|
59
47
|
tag: {
|
|
60
|
-
list: oc
|
|
61
|
-
|
|
48
|
+
list: oc.output(z.custom()),
|
|
49
|
+
},
|
|
50
|
+
generate: {
|
|
51
|
+
start: oc
|
|
52
|
+
.input(z.object({
|
|
53
|
+
description: z.string().min(3).max(1000),
|
|
54
|
+
type: assetTypeSchema.optional(),
|
|
55
|
+
}))
|
|
56
|
+
.output(z.object({ jobId: z.string() })),
|
|
57
|
+
status: oc.input(z.object({ jobId: z.string() })).output(z.custom()),
|
|
62
58
|
},
|
|
63
59
|
};
|
|
64
60
|
//# sourceMappingURL=contract.js.map
|
package/dist/contract.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAA;AACnC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EACL,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,cAAc,CAAA;
|
|
1
|
+
{"version":3,"file":"contract.js","sourceRoot":"","sources":["../src/contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,EAAE,EAAE,MAAM,gBAAgB,CAAA;AACnC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AACvB,OAAO,EACL,eAAe,EACf,eAAe,EACf,YAAY,EACZ,gBAAgB,EAChB,mBAAmB,EACnB,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,GACrB,MAAM,cAAc,CAAA;AA2GrB,iFAAiF;AAEjF,MAAM,CAAC,MAAM,QAAQ,GAAG;IACtB,KAAK,EAAE;QACL,SAAS,EAAE,EAAE;aACV,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC;aAC1C,MAAM,CAAC,CAAC,CAAC,MAAM,EAAmC,CAAC;QAEtD,IAAI,EAAE,EAAE,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAgC,CAAC;QAEjF,cAAc,EAAE,EAAE;aACf,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,CAAC,CAAC;aAC5D,MAAM,CAAC,CAAC,CAAC,MAAM,EAAmB,CAAC;QAEtC,UAAU,EAAE,EAAE;aACX,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;aAC9E,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;KAC9B;IAED,MAAM,EAAE;QACN,OAAO,EAAE,EAAE;aACR,KAAK,CAAC,mBAAmB,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aAC/D,MAAM,CAAC,CAAC,CAAC,MAAM,EAAgB,CAAC;QAEnC,KAAK,EAAE,EAAE;aACN,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aAC7D,MAAM,CAAC,CAAC,CAAC,MAAM,EAAgB,CAAC;QAEnC,IAAI,EAAE,EAAE;aACL,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aAC7D,MAAM,CAAC,CAAC,CAAC,MAAM,EAAgB,CAAC;QAEnC,KAAK,EAAE,EAAE;aACN,KAAK,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aAC7D,MAAM,CAAC,CAAC,CAAC,MAAM,EAAgB,CAAC;QAEnC,QAAQ,EAAE,EAAE,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAgB,CAAC;KAC1E;IAED,KAAK,EAAE;QACL,cAAc,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAoB,CAAC;QAEvD,OAAO,EAAE,EAAE;aACR,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;aAC/D,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAE7C,kBAAkB,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;KACjE;IAED,IAAI,EAAE;QACJ,UAAU,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAe,CAAC;QAE9C,aAAa,EAAE,EAAE,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAQ,CAAC;QAErE,SAAS,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAA8C,CAAC;QAE5E,gBAAgB,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAE9E,QAAQ,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAuB,CAAC;KACrD;IAED,GAAG,EAAE;QACH,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAkB,CAAC;KAC5C;IAED,QAAQ,EAAE;QACR,KAAK,EAAE,EAAE;aACN,KAAK,CACJ,CAAC,CAAC,MAAM,CAAC;YACP,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC;YACxC,IAAI,EAAE,eAAe,CAAC,QAAQ,EAAE;SACjC,CAAC,CACH;aACA,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAE1C,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAqB,CAAC;KACxF;CACF,CAAA"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { MarketClient } from './client.js';
|
|
2
|
+
import type { AssetType } from './schemas.js';
|
|
3
|
+
export declare class GenerateError extends Error {
|
|
4
|
+
constructor(message: string);
|
|
5
|
+
}
|
|
6
|
+
export interface GenerateInput {
|
|
7
|
+
description: string;
|
|
8
|
+
type?: AssetType;
|
|
9
|
+
}
|
|
10
|
+
export interface GenerateResult {
|
|
11
|
+
assetName: string;
|
|
12
|
+
version: string;
|
|
13
|
+
}
|
|
14
|
+
export interface GenerateOptions {
|
|
15
|
+
onProgress?: (message: string) => void;
|
|
16
|
+
pollIntervalMs?: number;
|
|
17
|
+
timeoutMs?: number;
|
|
18
|
+
}
|
|
19
|
+
export declare function generateAndWait(client: MarketClient, input: GenerateInput, opts?: GenerateOptions): Promise<GenerateResult>;
|
|
20
|
+
//# sourceMappingURL=generate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAE7C,qBAAa,aAAc,SAAQ,KAAK;gBAC1B,OAAO,EAAE,MAAM;CAI5B;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,CAAC,EAAE,SAAS,CAAA;CACjB;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAA;IACjB,OAAO,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;IACtC,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,wBAAsB,eAAe,CACnC,MAAM,EAAE,YAAY,EACpB,KAAK,EAAE,aAAa,EACpB,IAAI,GAAE,eAAoB,GACzB,OAAO,CAAC,cAAc,CAAC,CA2BzB"}
|
package/dist/generate.js
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
export class GenerateError extends Error {
|
|
2
|
+
constructor(message) {
|
|
3
|
+
super(message);
|
|
4
|
+
this.name = 'GenerateError';
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
export async function generateAndWait(client, input, opts = {}) {
|
|
8
|
+
const pollIntervalMs = opts.pollIntervalMs ?? 1500;
|
|
9
|
+
const timeoutMs = opts.timeoutMs ?? 60_000;
|
|
10
|
+
const report = opts.onProgress ?? (() => { });
|
|
11
|
+
const { jobId } = await client.generate.start(input);
|
|
12
|
+
const deadline = Date.now() + timeoutMs;
|
|
13
|
+
while (Date.now() < deadline) {
|
|
14
|
+
const status = await client.generate.status({ jobId });
|
|
15
|
+
if (status.message)
|
|
16
|
+
report(status.message);
|
|
17
|
+
if (status.state === 'done') {
|
|
18
|
+
if (!status.assetName || !status.version) {
|
|
19
|
+
throw new GenerateError('Generation completed without an asset name.');
|
|
20
|
+
}
|
|
21
|
+
return { assetName: status.assetName, version: status.version };
|
|
22
|
+
}
|
|
23
|
+
if (status.state === 'failed') {
|
|
24
|
+
throw new GenerateError(status.error ?? 'Generation failed.');
|
|
25
|
+
}
|
|
26
|
+
await sleep(pollIntervalMs);
|
|
27
|
+
}
|
|
28
|
+
throw new GenerateError(`Generation timed out after ${timeoutMs}ms.`);
|
|
29
|
+
}
|
|
30
|
+
function sleep(ms) {
|
|
31
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=generate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../src/generate.ts"],"names":[],"mappings":"AAGA,MAAM,OAAO,aAAc,SAAQ,KAAK;IACtC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAA;QACd,IAAI,CAAC,IAAI,GAAG,eAAe,CAAA;IAC7B,CAAC;CACF;AAkBD,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,MAAoB,EACpB,KAAoB,EACpB,OAAwB,EAAE;IAE1B,MAAM,cAAc,GAAG,IAAI,CAAC,cAAc,IAAI,IAAI,CAAA;IAClD,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,IAAI,MAAM,CAAA;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,IAAI,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;IAE5C,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAEpD,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAA;IACvC,OAAO,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAA;QACtD,IAAI,MAAM,CAAC,OAAO;YAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAA;QAE1C,IAAI,MAAM,CAAC,KAAK,KAAK,MAAM,EAAE,CAAC;YAC5B,IAAI,CAAC,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACzC,MAAM,IAAI,aAAa,CAAC,6CAA6C,CAAC,CAAA;YACxE,CAAC;YACD,OAAO,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC,OAAO,EAAE,CAAA;QACjE,CAAC;QAED,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,MAAM,IAAI,aAAa,CAAC,MAAM,CAAC,KAAK,IAAI,oBAAoB,CAAC,CAAA;QAC/D,CAAC;QAED,MAAM,KAAK,CAAC,cAAc,CAAC,CAAA;IAC7B,CAAC;IAED,MAAM,IAAI,aAAa,CAAC,8BAA8B,SAAS,KAAK,CAAC,CAAA;AACvE,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;AAC1D,CAAC"}
|
package/dist/index.d.ts
CHANGED
|
@@ -4,9 +4,11 @@ export { contract } from './contract.js';
|
|
|
4
4
|
export type { AppContract } from './contract.js';
|
|
5
5
|
export { internalContract } from './internal-contract.js';
|
|
6
6
|
export type { InternalContract } from './internal-contract.js';
|
|
7
|
-
export type { Asset, AssetVersion, AssetWithVersionsAndTags, AssetWithVersions, AssetListItem, PaginatedList, User, UnapprovedItem, TagWithCount, FileTreeEntry, } from './contract.js';
|
|
7
|
+
export type { Asset, AssetVersion, AssetWithVersionsAndTags, AssetWithVersions, AssetListItem, PaginatedList, User, UnapprovedItem, TagWithCount, FileTreeEntry, GenerateJobStatus, } from './contract.js';
|
|
8
8
|
export { resolve, ResolutionError } from './resolve.js';
|
|
9
9
|
export type { ResolvedAsset, ResolveResult } from './resolve.js';
|
|
10
|
+
export { generateAndWait, GenerateError } from './generate.js';
|
|
11
|
+
export type { GenerateInput, GenerateResult, GenerateOptions } from './generate.js';
|
|
10
12
|
export { ASSET_TYPES, assetTypeSchema, semverSchema, assetNameSchema, npmDependenciesSchema, assetDependenciesSchema, uploadGenericSchema, uploadTypedSchema, uploadMaterialSchema, updateProfileSchema, listAssetsSchema, } from './schemas.js';
|
|
11
13
|
export type { AssetType } from './schemas.js';
|
|
12
14
|
export { MAX_FILE_SIZE, ALLOWED_EXTENSIONS, ASSET_TYPE_LABELS } from './constants.js';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AACtE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAGpF,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAG9D,YAAY,EACV,KAAK,EACL,YAAY,EACZ,wBAAwB,EACxB,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,IAAI,EACJ,cAAc,EACd,YAAY,EACZ,aAAa,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AACtE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA;AAGpF,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AACxC,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AACzD,YAAY,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAG9D,YAAY,EACV,KAAK,EACL,YAAY,EACZ,wBAAwB,EACxB,iBAAiB,EACjB,aAAa,EACb,aAAa,EACb,IAAI,EACJ,cAAc,EACd,YAAY,EACZ,aAAa,EACb,iBAAiB,GAClB,MAAM,eAAe,CAAA;AAGtB,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AACvD,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAGhE,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC9D,YAAY,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAGnF,OAAO,EACL,WAAW,EACX,eAAe,EACf,YAAY,EACZ,eAAe,EACf,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,cAAc,CAAA;AACrB,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAG7C,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA"}
|
package/dist/index.js
CHANGED
|
@@ -5,6 +5,8 @@ export { contract } from './contract.js';
|
|
|
5
5
|
export { internalContract } from './internal-contract.js';
|
|
6
6
|
// Resolve
|
|
7
7
|
export { resolve, ResolutionError } from './resolve.js';
|
|
8
|
+
// Generate
|
|
9
|
+
export { generateAndWait, GenerateError } from './generate.js';
|
|
8
10
|
// Schemas
|
|
9
11
|
export { ASSET_TYPES, assetTypeSchema, semverSchema, assetNameSchema, npmDependenciesSchema, assetDependenciesSchema, uploadGenericSchema, uploadTypedSchema, uploadMaterialSchema, updateProfileSchema, listAssetsSchema, } from './schemas.js';
|
|
10
12
|
// Constants
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,SAAS;AACT,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAGtE,YAAY;AACZ,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,SAAS;AACT,OAAO,EAAE,kBAAkB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA;AAGtE,YAAY;AACZ,OAAO,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAA;AAExC,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAA;AAkBzD,UAAU;AACV,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAGvD,WAAW;AACX,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAG9D,UAAU;AACV,OAAO,EACL,WAAW,EACX,eAAe,EACf,YAAY,EACZ,eAAe,EACf,qBAAqB,EACrB,uBAAuB,EACvB,mBAAmB,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,mBAAmB,EACnB,gBAAgB,GACjB,MAAM,cAAc,CAAA;AAGrB,YAAY;AACZ,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@drawcall/market",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.4",
|
|
4
4
|
"repository": {
|
|
5
5
|
"type": "git",
|
|
6
6
|
"url": "https://github.com/drawcall-ai/market",
|
|
@@ -20,6 +20,8 @@
|
|
|
20
20
|
"chalk": "^5.6.2",
|
|
21
21
|
"commander": "^14.0.3",
|
|
22
22
|
"nypm": "^0.6.0",
|
|
23
|
+
"open": "^10.1.0",
|
|
24
|
+
"ora": "^8.1.1",
|
|
23
25
|
"semver": "^7.7.0",
|
|
24
26
|
"zod": "^4.3.6"
|
|
25
27
|
},
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { createMarketClient, type MarketClient } from './client.js'
|
|
2
|
+
import { loadConfig } from './config.js'
|
|
3
|
+
|
|
4
|
+
const DEFAULT_BASE_URL = 'https://api.market.drawcall.ai'
|
|
5
|
+
|
|
6
|
+
export class NotLoggedInError extends Error {
|
|
7
|
+
constructor() {
|
|
8
|
+
super('Not logged in. Run `market login` first.')
|
|
9
|
+
this.name = 'NotLoggedInError'
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export interface CliClientOptions {
|
|
14
|
+
/** Override the API base URL. Takes precedence over config and defaults. */
|
|
15
|
+
baseUrl?: string
|
|
16
|
+
/** Require authentication. When true, throws NotLoggedInError if no key is available. */
|
|
17
|
+
requireAuth?: boolean
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
export interface CliClient {
|
|
21
|
+
client: MarketClient
|
|
22
|
+
baseUrl: string
|
|
23
|
+
apiKey: string | undefined
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export async function getCliClient(opts: CliClientOptions = {}): Promise<CliClient> {
|
|
27
|
+
const config = await loadConfig()
|
|
28
|
+
const apiKey = process.env.MARKET_API_KEY ?? config?.apiKey
|
|
29
|
+
const baseUrl = opts.baseUrl ?? process.env.MARKET_API_URL ?? config?.baseUrl ?? DEFAULT_BASE_URL
|
|
30
|
+
|
|
31
|
+
if (opts.requireAuth && !apiKey) {
|
|
32
|
+
throw new NotLoggedInError()
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
return {
|
|
36
|
+
client: createMarketClient({ baseUrl, apiKey }),
|
|
37
|
+
baseUrl,
|
|
38
|
+
apiKey,
|
|
39
|
+
}
|
|
40
|
+
}
|
package/src/cli.ts
CHANGED
|
@@ -1,72 +1,97 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import { Command } from 'commander'
|
|
3
|
+
import { Command, Option } from 'commander'
|
|
4
4
|
import chalk from 'chalk'
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
5
|
+
import { ASSET_TYPES, type AssetType } from './schemas.js'
|
|
6
|
+
import { installCommand } from './commands/install.js'
|
|
7
|
+
import { searchCommand } from './commands/search.js'
|
|
8
|
+
import { generateCommand } from './commands/generate.js'
|
|
9
|
+
import { login } from './commands/login.js'
|
|
10
|
+
import { logout } from './commands/logout.js'
|
|
11
|
+
import { NotLoggedInError } from './cli-client.js'
|
|
8
12
|
|
|
9
13
|
const program = new Command()
|
|
10
14
|
|
|
15
|
+
const DEFAULT_BASE_URL = 'https://api.market.drawcall.ai'
|
|
16
|
+
|
|
17
|
+
const typeOption = new Option('--type <type>', 'Filter by asset type').choices([...ASSET_TYPES])
|
|
18
|
+
|
|
19
|
+
const apiOption = new Option('--api <url>', 'API base URL').default(
|
|
20
|
+
process.env.MARKET_API_URL,
|
|
21
|
+
'from MARKET_API_URL / config / default',
|
|
22
|
+
)
|
|
23
|
+
|
|
11
24
|
program.name('market').description('Install assets from the drawcall.ai market').version('0.1.0')
|
|
12
25
|
|
|
26
|
+
program
|
|
27
|
+
.command('login')
|
|
28
|
+
.description('Authenticate with the market via your browser')
|
|
29
|
+
.addOption(apiOption)
|
|
30
|
+
.action(async (opts: { api?: string }) => {
|
|
31
|
+
await login({ baseUrl: opts.api ?? DEFAULT_BASE_URL })
|
|
32
|
+
})
|
|
33
|
+
|
|
34
|
+
program
|
|
35
|
+
.command('logout')
|
|
36
|
+
.description('Remove the local API key')
|
|
37
|
+
.action(async () => {
|
|
38
|
+
await logout()
|
|
39
|
+
})
|
|
40
|
+
|
|
13
41
|
program
|
|
14
42
|
.command('install')
|
|
15
|
-
.description(
|
|
16
|
-
|
|
43
|
+
.description(
|
|
44
|
+
'Install assets. Each arg is tried as an exact name, then a semantic search, then auto-generated.',
|
|
45
|
+
)
|
|
46
|
+
.argument('<assets...>', 'Asset names or natural-language descriptions')
|
|
47
|
+
.addOption(typeOption)
|
|
48
|
+
.addOption(apiOption)
|
|
17
49
|
.option('--unapproved', 'Include unapproved versions', false)
|
|
18
|
-
.option('--api <url>', 'API base URL', process.env.MARKET_API_URL ?? 'http://localhost:8787')
|
|
19
50
|
.option('--cwd <dir>', 'Project directory', process.cwd())
|
|
20
|
-
.action(
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
})
|
|
31
|
-
|
|
32
|
-
// Resolve
|
|
33
|
-
console.log(chalk.bold('Resolving dependencies...\n'))
|
|
34
|
-
|
|
35
|
-
let resolution: ResolveResult
|
|
36
|
-
try {
|
|
37
|
-
resolution = await resolve(client.asset, requests, {
|
|
38
|
-
includeUnapproved: opts.unapproved,
|
|
51
|
+
.action(
|
|
52
|
+
async (
|
|
53
|
+
args: string[],
|
|
54
|
+
opts: { type?: AssetType; api?: string; unapproved: boolean; cwd: string },
|
|
55
|
+
) => {
|
|
56
|
+
await installCommand(args, {
|
|
57
|
+
type: opts.type,
|
|
58
|
+
baseUrl: opts.api,
|
|
59
|
+
unapproved: opts.unapproved,
|
|
60
|
+
cwd: opts.cwd,
|
|
39
61
|
})
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
console.error(chalk.red('Resolution failed:\n') + err.message)
|
|
43
|
-
process.exit(1)
|
|
44
|
-
}
|
|
45
|
-
throw err
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
console.log(chalk.green(` ${resolution.assets.length} asset(s) resolved:\n`))
|
|
49
|
-
for (const asset of resolution.assets) {
|
|
50
|
-
console.log(` ${chalk.cyan(asset.name)}${chalk.dim('@' + asset.version)}`)
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
const npmCount = Object.keys(resolution.npmDependencies).length
|
|
54
|
-
if (npmCount > 0) {
|
|
55
|
-
console.log(chalk.green(`\n ${npmCount} npm dependenc${npmCount === 1 ? 'y' : 'ies'}:\n`))
|
|
56
|
-
for (const [pkg, range] of Object.entries(resolution.npmDependencies)) {
|
|
57
|
-
console.log(` ${pkg} ${chalk.dim(range)}`)
|
|
58
|
-
}
|
|
59
|
-
}
|
|
62
|
+
},
|
|
63
|
+
)
|
|
60
64
|
|
|
61
|
-
|
|
62
|
-
|
|
65
|
+
program
|
|
66
|
+
.command('search')
|
|
67
|
+
.description('Search the market. Prints up to 10 ranked results.')
|
|
68
|
+
.argument('<query>', 'Natural-language query')
|
|
69
|
+
.addOption(typeOption)
|
|
70
|
+
.addOption(apiOption)
|
|
71
|
+
.action(async (query: string, opts: { type?: AssetType; api?: string }) => {
|
|
72
|
+
await searchCommand(query, { type: opts.type, baseUrl: opts.api })
|
|
73
|
+
})
|
|
63
74
|
|
|
64
|
-
|
|
75
|
+
program
|
|
76
|
+
.command('generate')
|
|
77
|
+
.description('Generate a new asset from a description and install it.')
|
|
78
|
+
.argument('<description>', 'Description of the asset to generate')
|
|
79
|
+
.addOption(typeOption)
|
|
80
|
+
.addOption(apiOption)
|
|
81
|
+
.option('--cwd <dir>', 'Project directory', process.cwd())
|
|
82
|
+
.action(async (description: string, opts: { type?: AssetType; api?: string; cwd: string }) => {
|
|
83
|
+
await generateCommand(description, {
|
|
84
|
+
type: opts.type,
|
|
85
|
+
baseUrl: opts.api,
|
|
65
86
|
cwd: opts.cwd,
|
|
66
|
-
onProgress: (msg) => console.log(chalk.dim(` ${msg}`)),
|
|
67
87
|
})
|
|
68
|
-
|
|
69
|
-
console.log(chalk.bold.green('\nDone!'))
|
|
70
88
|
})
|
|
71
89
|
|
|
72
|
-
program.
|
|
90
|
+
program.parseAsync().catch((err) => {
|
|
91
|
+
// Commands that own a spinner print the error via spinner.fail() and rethrow,
|
|
92
|
+
// so we only print here when nothing else did.
|
|
93
|
+
if (err instanceof NotLoggedInError) {
|
|
94
|
+
console.error(chalk.red(err.message))
|
|
95
|
+
}
|
|
96
|
+
process.exit(1)
|
|
97
|
+
})
|
package/src/client.ts
CHANGED
|
@@ -7,32 +7,34 @@ import type { InternalContract } from './internal-contract.js'
|
|
|
7
7
|
export type MarketClient = ContractRouterClient<AppContract>
|
|
8
8
|
export type InternalClient = ContractRouterClient<InternalContract>
|
|
9
9
|
|
|
10
|
+
const DEFAULT_BASE_URL = 'https://api.market.drawcall.ai'
|
|
11
|
+
|
|
10
12
|
export interface MarketClientOptions {
|
|
11
|
-
baseUrl
|
|
13
|
+
baseUrl?: string
|
|
12
14
|
fetch?: typeof globalThis.fetch
|
|
15
|
+
apiKey?: string
|
|
13
16
|
}
|
|
14
17
|
|
|
15
|
-
function
|
|
16
|
-
|
|
17
|
-
// In browser environments, use the current origin for relative URLs
|
|
18
|
-
if (typeof globalThis !== 'undefined' && 'location' in globalThis) {
|
|
19
|
-
return `${(globalThis as unknown as { location: { origin: string } }).location.origin}${path}`
|
|
20
|
-
}
|
|
21
|
-
throw new Error('baseUrl is required in non-browser environments')
|
|
18
|
+
function buildHeaders(apiKey?: string): Record<string, string> | undefined {
|
|
19
|
+
return apiKey ? { 'x-api-key': apiKey } : undefined
|
|
22
20
|
}
|
|
23
21
|
|
|
24
|
-
export function createMarketClient(opts: MarketClientOptions): MarketClient {
|
|
22
|
+
export function createMarketClient(opts: MarketClientOptions = {}): MarketClient {
|
|
23
|
+
const baseUrl = opts.baseUrl || DEFAULT_BASE_URL
|
|
25
24
|
const link = new RPCLink({
|
|
26
|
-
url:
|
|
25
|
+
url: new URL('/api/rpc', baseUrl).href,
|
|
27
26
|
fetch: opts.fetch,
|
|
27
|
+
headers: buildHeaders(opts.apiKey),
|
|
28
28
|
})
|
|
29
29
|
return createORPCClient<MarketClient>(link)
|
|
30
30
|
}
|
|
31
31
|
|
|
32
|
-
export function createInternalClient(opts: MarketClientOptions): InternalClient {
|
|
32
|
+
export function createInternalClient(opts: MarketClientOptions = {}): InternalClient {
|
|
33
|
+
const baseUrl = opts.baseUrl || DEFAULT_BASE_URL
|
|
33
34
|
const link = new RPCLink({
|
|
34
|
-
url:
|
|
35
|
+
url: new URL('/api/internal-rpc', baseUrl).href,
|
|
35
36
|
fetch: opts.fetch,
|
|
37
|
+
headers: buildHeaders(opts.apiKey),
|
|
36
38
|
})
|
|
37
39
|
return createORPCClient<InternalClient>(link)
|
|
38
40
|
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import chalk from 'chalk'
|
|
2
|
+
import ora from 'ora'
|
|
3
|
+
import { getCliClient } from '../cli-client.js'
|
|
4
|
+
import { generateAndWait } from '../generate.js'
|
|
5
|
+
import { resolve } from '../resolve.js'
|
|
6
|
+
import { install as runInstall } from '../install.js'
|
|
7
|
+
import type { AssetType } from '../schemas.js'
|
|
8
|
+
|
|
9
|
+
export interface GenerateCommandOptions {
|
|
10
|
+
type?: AssetType
|
|
11
|
+
cwd?: string
|
|
12
|
+
baseUrl?: string
|
|
13
|
+
unapproved?: boolean
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export async function generateCommand(
|
|
17
|
+
description: string,
|
|
18
|
+
opts: GenerateCommandOptions,
|
|
19
|
+
): Promise<void> {
|
|
20
|
+
const { client } = await getCliClient({ baseUrl: opts.baseUrl, requireAuth: true })
|
|
21
|
+
|
|
22
|
+
const spinner = ora(`Generating "${description}"`).start()
|
|
23
|
+
try {
|
|
24
|
+
const generated = await generateAndWait(
|
|
25
|
+
client,
|
|
26
|
+
{ description, type: opts.type },
|
|
27
|
+
{
|
|
28
|
+
onProgress: (msg) => {
|
|
29
|
+
spinner.text = msg
|
|
30
|
+
},
|
|
31
|
+
},
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
spinner.text = `Resolving ${generated.assetName}@${generated.version}`
|
|
35
|
+
const resolution = await resolve(
|
|
36
|
+
client.asset,
|
|
37
|
+
[{ name: generated.assetName, range: generated.version }],
|
|
38
|
+
{ includeUnapproved: opts.unapproved ?? false },
|
|
39
|
+
)
|
|
40
|
+
|
|
41
|
+
await runInstall(client, resolution, {
|
|
42
|
+
cwd: opts.cwd,
|
|
43
|
+
onProgress: (msg) => {
|
|
44
|
+
spinner.text = msg
|
|
45
|
+
},
|
|
46
|
+
})
|
|
47
|
+
|
|
48
|
+
spinner.succeed(
|
|
49
|
+
`Installed ${chalk.cyan(generated.assetName)}${chalk.dim('@' + generated.version)}`,
|
|
50
|
+
)
|
|
51
|
+
} catch (err) {
|
|
52
|
+
spinner.fail(err instanceof Error ? err.message : String(err))
|
|
53
|
+
throw err
|
|
54
|
+
}
|
|
55
|
+
}
|