@vivipilot/cli 0.1.0 → 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.
Files changed (67) hide show
  1. package/dist/chunk-FGUKEVKT.js +1 -0
  2. package/dist/chunk-FN7FHZ3D.js +1 -0
  3. package/dist/chunk-JJDAKVXA.js +8 -0
  4. package/dist/chunk-L3C7EOPY.js +2 -0
  5. package/dist/chunk-ZIATVRTF.js +3 -0
  6. package/dist/chunk-ZZ72PPC3.js +1 -0
  7. package/dist/cli.d.ts +5 -4
  8. package/dist/cli.js +57 -495
  9. package/dist/config-DAG58pP-.d.ts +16 -0
  10. package/dist/index.d.ts +121 -7
  11. package/dist/index.js +1 -7
  12. package/dist/manifest-TDCIHZ46.js +1 -0
  13. package/dist/mcp-DTGU64NI.js +1 -0
  14. package/dist/render-CVXYAUBY.js +1 -0
  15. package/package.json +6 -2
  16. package/dist/api.d.ts +0 -86
  17. package/dist/api.d.ts.map +0 -1
  18. package/dist/api.js +0 -77
  19. package/dist/api.js.map +0 -1
  20. package/dist/args.d.ts +0 -11
  21. package/dist/args.d.ts.map +0 -1
  22. package/dist/args.js +0 -53
  23. package/dist/args.js.map +0 -1
  24. package/dist/browser.d.ts +0 -31
  25. package/dist/browser.d.ts.map +0 -1
  26. package/dist/browser.js +0 -162
  27. package/dist/browser.js.map +0 -1
  28. package/dist/cli.d.ts.map +0 -1
  29. package/dist/cli.js.map +0 -1
  30. package/dist/config.d.ts +0 -15
  31. package/dist/config.d.ts.map +0 -1
  32. package/dist/config.js +0 -58
  33. package/dist/config.js.map +0 -1
  34. package/dist/errors.d.ts +0 -6
  35. package/dist/errors.d.ts.map +0 -1
  36. package/dist/errors.js +0 -12
  37. package/dist/errors.js.map +0 -1
  38. package/dist/index.d.ts.map +0 -1
  39. package/dist/index.js.map +0 -1
  40. package/dist/manifest.d.ts +0 -40
  41. package/dist/manifest.d.ts.map +0 -1
  42. package/dist/manifest.js +0 -90
  43. package/dist/manifest.js.map +0 -1
  44. package/dist/mcp.d.ts +0 -13
  45. package/dist/mcp.d.ts.map +0 -1
  46. package/dist/mcp.js +0 -392
  47. package/dist/mcp.js.map +0 -1
  48. package/dist/render.d.ts +0 -21
  49. package/dist/render.d.ts.map +0 -1
  50. package/dist/render.js +0 -369
  51. package/dist/render.js.map +0 -1
  52. package/src/api.ts +0 -163
  53. package/src/args.test.ts +0 -21
  54. package/src/args.ts +0 -64
  55. package/src/browser.test.ts +0 -103
  56. package/src/browser.ts +0 -174
  57. package/src/cli.ts +0 -656
  58. package/src/config.test.ts +0 -30
  59. package/src/config.ts +0 -71
  60. package/src/errors.ts +0 -14
  61. package/src/index.ts +0 -25
  62. package/src/manifest.test.ts +0 -105
  63. package/src/manifest.ts +0 -126
  64. package/src/mcp.test.ts +0 -48
  65. package/src/mcp.ts +0 -438
  66. package/src/render.ts +0 -424
  67. package/tsconfig.json +0 -26
package/dist/index.d.ts CHANGED
@@ -1,7 +1,121 @@
1
- export { parseArgv, flagBoolean, flagNumber, flagString, type ParsedArgs } from "./args.js";
2
- export { DEFAULT_API_URL, defaultConfigPath, deleteConfig, readConfig, resolveApiKey, resolveApiUrl, resolvePublicKeys, writeConfig, type CliConfig, type Env, } from "./config.js";
3
- export { VivipilotApiClient, type BalanceResponse, type EstimateRequest, type EstimateResponse, type GenerateRequest, type GenerateResponse, type StatusResponse, } from "./api.js";
4
- export { readManifestFile, verifyManifestFile } from "./manifest.js";
5
- export { startMcpServer, type McpServerOptions } from "./mcp.js";
6
- export { CliError, isCliError } from "./errors.js";
7
- //# sourceMappingURL=index.d.ts.map
1
+ import { C as CliConfig, E as Env } from './config-DAG58pP-.js';
2
+ export { D as DEFAULT_API_URL, d as defaultConfigPath, a as deleteConfig, r as readConfig, b as resolveApiKey, c as resolveApiUrl, e as resolvePublicKeys, w as writeConfig } from './config-DAG58pP-.js';
3
+ import { RenderManifestVerificationResult } from '@vivipilot/render-manifest';
4
+
5
+ type FlagValue = string | boolean;
6
+ type ParsedArgs = {
7
+ command: string | undefined;
8
+ flags: Record<string, FlagValue>;
9
+ positionals: string[];
10
+ };
11
+ declare function parseArgv(argv: readonly string[]): ParsedArgs;
12
+ declare function flagString(parsed: ParsedArgs, names: readonly string[]): string | undefined;
13
+ declare function flagBoolean(parsed: ParsedArgs, names: readonly string[]): boolean;
14
+ declare function flagNumber(parsed: ParsedArgs, names: readonly string[]): number | undefined;
15
+
16
+ type ApiClientOptions = {
17
+ config: CliConfig;
18
+ env?: Env;
19
+ fetchImpl?: typeof fetch;
20
+ };
21
+ type BalanceResponse = {
22
+ balance: number;
23
+ paidBalance?: number;
24
+ currency?: "credits";
25
+ topupUrl?: string;
26
+ };
27
+ type EstimateRequest = {
28
+ prompt: string;
29
+ canvas?: {
30
+ width?: number;
31
+ height?: number;
32
+ fps?: number;
33
+ };
34
+ durationSeconds?: number;
35
+ enginePreference?: "pixi" | "three" | "auto";
36
+ };
37
+ type EstimateResponse = {
38
+ estimatedCredits: number;
39
+ engine: string;
40
+ paidOnly: true;
41
+ warnings?: string[];
42
+ };
43
+ type GenerateRequest = EstimateRequest & {
44
+ outputFormat?: "manifest";
45
+ };
46
+ type GenerateResponse = {
47
+ generationId: string;
48
+ manifest: unknown;
49
+ creditsCharged?: number;
50
+ };
51
+ type StartGenerateResponse = {
52
+ generationId: string;
53
+ status: string;
54
+ estimatedCredits: number;
55
+ engine: string;
56
+ paidOnly: true;
57
+ idempotentReplay?: boolean;
58
+ };
59
+ type ProgressResponse = {
60
+ generationId: string;
61
+ status: "pending" | "running" | "completed" | "failed" | "refunded";
62
+ workflowStatus: string | null;
63
+ workflowStage: string | null;
64
+ progressMessage: string | null;
65
+ creditsCharged: number | null;
66
+ estimatedCredits: number | null;
67
+ engine: string | null;
68
+ manifest: {
69
+ manifestId: string;
70
+ manifestHash: string;
71
+ } | null;
72
+ manifestData: unknown;
73
+ error: string | null;
74
+ };
75
+ type StatusResponse = {
76
+ generationId: string;
77
+ status: "pending" | "running" | "completed" | "failed";
78
+ manifest?: unknown;
79
+ error?: string;
80
+ };
81
+ declare class VivipilotApiClient {
82
+ private readonly config;
83
+ private readonly env;
84
+ private readonly fetchImpl;
85
+ constructor(options: ApiClientOptions);
86
+ private apiUrl;
87
+ private apiKey;
88
+ private requestJson;
89
+ whoami(): Promise<unknown>;
90
+ balance(): Promise<BalanceResponse>;
91
+ estimate(request: EstimateRequest): Promise<EstimateResponse>;
92
+ /** Original synchronous generate — blocks until completion */
93
+ generate(request: GenerateRequest, idempotencyKey: string): Promise<GenerateResponse>;
94
+ /** Start generation asynchronously — returns immediately with generationId */
95
+ startGenerate(request: GenerateRequest, idempotencyKey: string): Promise<StartGenerateResponse>;
96
+ /** Poll generation status with workflow progress info */
97
+ generationProgress(generationId: string): Promise<ProgressResponse>;
98
+ generationStatus(generationId: string): Promise<StatusResponse>;
99
+ }
100
+
101
+ declare function readManifestFile(path: string): Promise<unknown>;
102
+ declare function verifyManifestFile(path: string, config: CliConfig, env?: Env): Promise<RenderManifestVerificationResult>;
103
+
104
+ type StdioLike = {
105
+ stdin: NodeJS.ReadableStream;
106
+ stdout: NodeJS.WritableStream;
107
+ stderr: NodeJS.WritableStream;
108
+ };
109
+ type McpServerOptions = {
110
+ config: CliConfig;
111
+ env?: Env;
112
+ } & StdioLike;
113
+ declare function startMcpServer(options: McpServerOptions): Promise<void>;
114
+
115
+ declare class CliError extends Error {
116
+ readonly exitCode: number;
117
+ constructor(message: string, exitCode?: number);
118
+ }
119
+ declare function isCliError(error: unknown): error is CliError;
120
+
121
+ export { type BalanceResponse, CliConfig, CliError, Env, type EstimateRequest, type EstimateResponse, type GenerateRequest, type GenerateResponse, type McpServerOptions, type ParsedArgs, type StatusResponse, VivipilotApiClient, flagBoolean, flagNumber, flagString, isCliError, parseArgv, readManifestFile, startMcpServer, verifyManifestFile };
package/dist/index.js CHANGED
@@ -1,7 +1 @@
1
- export { parseArgv, flagBoolean, flagNumber, flagString } from "./args.js";
2
- export { DEFAULT_API_URL, defaultConfigPath, deleteConfig, readConfig, resolveApiKey, resolveApiUrl, resolvePublicKeys, writeConfig, } from "./config.js";
3
- export { VivipilotApiClient, } from "./api.js";
4
- export { readManifestFile, verifyManifestFile } from "./manifest.js";
5
- export { startMcpServer } from "./mcp.js";
6
- export { CliError, isCliError } from "./errors.js";
7
- //# sourceMappingURL=index.js.map
1
+ import{a as e,b as r,c as t,d as o}from"./chunk-ZZ72PPC3.js";import{a as C,b as A}from"./chunk-FN7FHZ3D.js";import{a as R}from"./chunk-ZIATVRTF.js";import{a as v}from"./chunk-FGUKEVKT.js";import{a as p,b as i,c as s,d as a,e as l,f as n,g as f,h as y,i as g,j as m}from"./chunk-L3C7EOPY.js";export{g as CliError,p as DEFAULT_API_URL,v as VivipilotApiClient,i as defaultConfigPath,l as deleteConfig,t as flagBoolean,o as flagNumber,r as flagString,m as isCliError,e as parseArgv,s as readConfig,C as readManifestFile,f as resolveApiKey,n as resolveApiUrl,y as resolvePublicKeys,R as startMcpServer,A as verifyManifestFile,a as writeConfig};
@@ -0,0 +1 @@
1
+ import{a,b,c,d,e}from"./chunk-FN7FHZ3D.js";import"./chunk-L3C7EOPY.js";export{d as assertNotRevoked,c as checkManifestRevocationOnline,e as checkRenderEntitlement,a as readManifestFile,b as verifyManifestFile};
@@ -0,0 +1 @@
1
+ import{a}from"./chunk-ZIATVRTF.js";import"./chunk-FGUKEVKT.js";import"./chunk-L3C7EOPY.js";export{a as startMcpServer};
@@ -0,0 +1 @@
1
+ import{a}from"./chunk-JJDAKVXA.js";import"./chunk-FN7FHZ3D.js";import"./chunk-L3C7EOPY.js";export{a as renderManifest};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vivipilot/cli",
3
- "version": "0.1.0",
3
+ "version": "0.1.4",
4
4
  "description": "Vivipilot paid-only CLI and MCP entrypoint for local rendering workflows",
5
5
  "type": "module",
6
6
  "bin": {
@@ -8,6 +8,9 @@
8
8
  },
9
9
  "main": "dist/cli.js",
10
10
  "types": "dist/index.d.ts",
11
+ "files": [
12
+ "dist"
13
+ ],
11
14
  "exports": {
12
15
  ".": {
13
16
  "types": "./dist/index.d.ts",
@@ -19,7 +22,7 @@
19
22
  }
20
23
  },
21
24
  "scripts": {
22
- "build": "tsc",
25
+ "build": "tsup",
23
26
  "typecheck": "tsc --noEmit",
24
27
  "test": "vitest run"
25
28
  },
@@ -36,6 +39,7 @@
36
39
  },
37
40
  "devDependencies": {
38
41
  "@types/node": "^25.2.0",
42
+ "tsup": "^8.5.1",
39
43
  "typescript": "^5.3.0",
40
44
  "vitest": "4.0.18"
41
45
  }
package/dist/api.d.ts DELETED
@@ -1,86 +0,0 @@
1
- import { type CliConfig, type Env } from "./config.js";
2
- export type ApiClientOptions = {
3
- config: CliConfig;
4
- env?: Env;
5
- fetchImpl?: typeof fetch;
6
- };
7
- export type BalanceResponse = {
8
- balance: number;
9
- paidBalance?: number;
10
- currency?: "credits";
11
- topupUrl?: string;
12
- };
13
- export type EstimateRequest = {
14
- prompt: string;
15
- canvas?: {
16
- width?: number;
17
- height?: number;
18
- fps?: number;
19
- };
20
- durationSeconds?: number;
21
- enginePreference?: "pixi" | "three" | "auto";
22
- };
23
- export type EstimateResponse = {
24
- estimatedCredits: number;
25
- engine: string;
26
- paidOnly: true;
27
- warnings?: string[];
28
- };
29
- export type GenerateRequest = EstimateRequest & {
30
- outputFormat?: "manifest";
31
- };
32
- export type GenerateResponse = {
33
- generationId: string;
34
- manifest: unknown;
35
- creditsCharged?: number;
36
- };
37
- export type StartGenerateResponse = {
38
- generationId: string;
39
- status: string;
40
- estimatedCredits: number;
41
- engine: string;
42
- paidOnly: true;
43
- idempotentReplay?: boolean;
44
- };
45
- export type ProgressResponse = {
46
- generationId: string;
47
- status: "pending" | "running" | "completed" | "failed" | "refunded";
48
- workflowStatus: string | null;
49
- workflowStage: string | null;
50
- progressMessage: string | null;
51
- creditsCharged: number | null;
52
- estimatedCredits: number | null;
53
- engine: string | null;
54
- manifest: {
55
- manifestId: string;
56
- manifestHash: string;
57
- } | null;
58
- manifestData: unknown;
59
- error: string | null;
60
- };
61
- export type StatusResponse = {
62
- generationId: string;
63
- status: "pending" | "running" | "completed" | "failed";
64
- manifest?: unknown;
65
- error?: string;
66
- };
67
- export declare class VivipilotApiClient {
68
- private readonly config;
69
- private readonly env;
70
- private readonly fetchImpl;
71
- constructor(options: ApiClientOptions);
72
- private apiUrl;
73
- private apiKey;
74
- private requestJson;
75
- whoami(): Promise<unknown>;
76
- balance(): Promise<BalanceResponse>;
77
- estimate(request: EstimateRequest): Promise<EstimateResponse>;
78
- /** Original synchronous generate — blocks until completion */
79
- generate(request: GenerateRequest, idempotencyKey: string): Promise<GenerateResponse>;
80
- /** Start generation asynchronously — returns immediately with generationId */
81
- startGenerate(request: GenerateRequest, idempotencyKey: string): Promise<StartGenerateResponse>;
82
- /** Poll generation status with workflow progress info */
83
- generationProgress(generationId: string): Promise<ProgressResponse>;
84
- generationStatus(generationId: string): Promise<StatusResponse>;
85
- }
86
- //# sourceMappingURL=api.d.ts.map
package/dist/api.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"api.d.ts","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
package/dist/api.js DELETED
@@ -1,77 +0,0 @@
1
- import { CliError } from "./errors.js";
2
- import { resolveApiKey, resolveApiUrl } from "./config.js";
3
- export class VivipilotApiClient {
4
- config;
5
- env;
6
- fetchImpl;
7
- constructor(options) {
8
- this.config = options.config;
9
- this.env = options.env ?? process.env;
10
- this.fetchImpl = options.fetchImpl ?? fetch;
11
- }
12
- apiUrl() {
13
- return resolveApiUrl(this.config, this.env);
14
- }
15
- apiKey() {
16
- const apiKey = resolveApiKey(this.config, this.env);
17
- if (!apiKey) {
18
- throw new CliError("Vivipilot CLI/MCP generation is paid-only. Set VIVIPILOT_API_KEY or run `vivipilot login --api-key <key>`.", 2);
19
- }
20
- return apiKey;
21
- }
22
- async requestJson(path, init = {}) {
23
- const headers = new Headers(init.headers);
24
- headers.set("accept", "application/json");
25
- headers.set("authorization", `Bearer ${this.apiKey()}`);
26
- headers.set("x-vivipilot-client", "@vivipilot/cli");
27
- if (init.body && !headers.has("content-type"))
28
- headers.set("content-type", "application/json");
29
- const response = await this.fetchImpl(`${this.apiUrl()}${path}`, { ...init, headers });
30
- const text = await response.text();
31
- const payload = text.length > 0 ? JSON.parse(text) : {};
32
- if (!response.ok) {
33
- const message = payload && typeof payload === "object" && "error" in payload
34
- ? String(payload.error)
35
- : `Vivipilot API request failed with status ${response.status}`;
36
- const suffix = response.status === 402 ? " Run `vivipilot topup` to buy credits." : "";
37
- throw new CliError(`${message}${suffix}`, response.status === 401 ? 2 : 1);
38
- }
39
- return payload;
40
- }
41
- async whoami() {
42
- return this.requestJson("/api/v1/me");
43
- }
44
- async balance() {
45
- return this.requestJson("/api/v1/credits/balance");
46
- }
47
- async estimate(request) {
48
- return this.requestJson("/api/v1/layouts/estimate", {
49
- method: "POST",
50
- body: JSON.stringify(request),
51
- });
52
- }
53
- /** Original synchronous generate — blocks until completion */
54
- async generate(request, idempotencyKey) {
55
- return this.requestJson("/api/v1/layouts/generate", {
56
- method: "POST",
57
- headers: { "idempotency-key": idempotencyKey },
58
- body: JSON.stringify({ ...request, outputFormat: "manifest" }),
59
- });
60
- }
61
- /** Start generation asynchronously — returns immediately with generationId */
62
- async startGenerate(request, idempotencyKey) {
63
- return this.requestJson("/api/v1/layouts/generate/start", {
64
- method: "POST",
65
- headers: { "idempotency-key": idempotencyKey },
66
- body: JSON.stringify({ ...request, outputFormat: "manifest" }),
67
- });
68
- }
69
- /** Poll generation status with workflow progress info */
70
- async generationProgress(generationId) {
71
- return this.requestJson(`/api/v1/layouts/${encodeURIComponent(generationId)}?progress=true`);
72
- }
73
- async generationStatus(generationId) {
74
- return this.requestJson(`/api/v1/layouts/${encodeURIComponent(generationId)}`);
75
- }
76
- }
77
- //# sourceMappingURL=api.js.map
package/dist/api.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"api.js","sourceRoot":"","sources":["../src/api.ts"],"names":[],"mappings":"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"}
package/dist/args.d.ts DELETED
@@ -1,11 +0,0 @@
1
- export type FlagValue = string | boolean;
2
- export type ParsedArgs = {
3
- command: string | undefined;
4
- flags: Record<string, FlagValue>;
5
- positionals: string[];
6
- };
7
- export declare function parseArgv(argv: readonly string[]): ParsedArgs;
8
- export declare function flagString(parsed: ParsedArgs, names: readonly string[]): string | undefined;
9
- export declare function flagBoolean(parsed: ParsedArgs, names: readonly string[]): boolean;
10
- export declare function flagNumber(parsed: ParsedArgs, names: readonly string[]): number | undefined;
11
- //# sourceMappingURL=args.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC;AAEzC,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IACjC,WAAW,EAAE,MAAM,EAAE,CAAC;CACvB,CAAC;AAMF,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,UAAU,CA+B7D;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAM3F;AAED,wBAAgB,WAAW,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAEjF;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAK3F"}
package/dist/args.js DELETED
@@ -1,53 +0,0 @@
1
- function normalizeFlagName(value) {
2
- return value.replace(/^-+/, "").trim();
3
- }
4
- export function parseArgv(argv) {
5
- const [command, ...tokens] = argv;
6
- const flags = {};
7
- const positionals = [];
8
- for (let index = 0; index < tokens.length; index++) {
9
- const token = tokens[index];
10
- if (token === "--") {
11
- positionals.push(...tokens.slice(index + 1));
12
- break;
13
- }
14
- if (token.startsWith("--")) {
15
- const equalsIndex = token.indexOf("=");
16
- if (equalsIndex > -1) {
17
- flags[normalizeFlagName(token.slice(0, equalsIndex))] = token.slice(equalsIndex + 1);
18
- continue;
19
- }
20
- const name = normalizeFlagName(token);
21
- const next = tokens[index + 1];
22
- if (next && !next.startsWith("-")) {
23
- flags[name] = next;
24
- index++;
25
- }
26
- else {
27
- flags[name] = true;
28
- }
29
- continue;
30
- }
31
- positionals.push(token);
32
- }
33
- return { command, flags, positionals };
34
- }
35
- export function flagString(parsed, names) {
36
- for (const name of names) {
37
- const value = parsed.flags[name];
38
- if (typeof value === "string" && value.length > 0)
39
- return value;
40
- }
41
- return undefined;
42
- }
43
- export function flagBoolean(parsed, names) {
44
- return names.some((name) => parsed.flags[name] === true || parsed.flags[name] === "true");
45
- }
46
- export function flagNumber(parsed, names) {
47
- const value = flagString(parsed, names);
48
- if (value === undefined)
49
- return undefined;
50
- const parsedNumber = Number(value);
51
- return Number.isFinite(parsedNumber) ? parsedNumber : undefined;
52
- }
53
- //# sourceMappingURL=args.js.map
package/dist/args.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"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"}
package/dist/browser.d.ts DELETED
@@ -1,31 +0,0 @@
1
- export type BrowserResolution = {
2
- executablePath: string;
3
- source: "env" | "chrome-headless-shell" | "system-chrome" | "system-chromium";
4
- };
5
- export declare class BrowserNotFoundError extends Error {
6
- constructor(message: string);
7
- }
8
- /**
9
- * Resolve a browser binary for headless rendering.
10
- *
11
- * Priority:
12
- * 1. `VIVIPILOT_HEADLESS_BROWSER` env var (explicit override)
13
- * 2. `chrome-headless-shell` in PATH or common install locations
14
- * 3. System Chrome / Chromium in common install locations
15
- *
16
- * Returns the path + source. Throws `BrowserNotFoundError` when no browser is found.
17
- */
18
- export declare function resolveHeadlessBrowser(env?: NodeJS.ProcessEnv): Promise<BrowserResolution>;
19
- /**
20
- * Build the Chrome/Chromium CLI flags for headless rendering with WebGL/WebGPU support.
21
- * These flags ensure the GPU is available (or SwiftShader fallback) so Pixi v8 can
22
- * initialise its renderer inside a headless browser.
23
- */
24
- export declare function headlessBrowserArgs(renderUrl: string, options?: {
25
- windowSize?: {
26
- width: number;
27
- height: number;
28
- };
29
- extraArgs?: string[];
30
- }): string[];
31
- //# sourceMappingURL=browser.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"browser.d.ts","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"AAKA,MAAM,MAAM,iBAAiB,GAAG;IAC/B,cAAc,EAAE,MAAM,CAAC;IACvB,MAAM,EAAE,KAAK,GAAG,uBAAuB,GAAG,eAAe,GAAG,iBAAiB,CAAC;CAC9E,CAAC;AAEF,qBAAa,oBAAqB,SAAQ,KAAK;gBAClC,OAAO,EAAE,MAAM;CAI3B;AAED;;;;;;;;;GASG;AACH,wBAAsB,sBAAsB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAkB7G;AAyFD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;IAChE,UAAU,CAAC,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB,GAAG,MAAM,EAAE,CA+BX"}
package/dist/browser.js DELETED
@@ -1,162 +0,0 @@
1
- import { existsSync } from "node:fs";
2
- import { access, constants } from "node:fs/promises";
3
- import { homedir } from "node:os";
4
- import { join } from "node:path";
5
- export class BrowserNotFoundError extends Error {
6
- constructor(message) {
7
- super(message);
8
- this.name = "BrowserNotFoundError";
9
- }
10
- }
11
- /**
12
- * Resolve a browser binary for headless rendering.
13
- *
14
- * Priority:
15
- * 1. `VIVIPILOT_HEADLESS_BROWSER` env var (explicit override)
16
- * 2. `chrome-headless-shell` in PATH or common install locations
17
- * 3. System Chrome / Chromium in common install locations
18
- *
19
- * Returns the path + source. Throws `BrowserNotFoundError` when no browser is found.
20
- */
21
- export async function resolveHeadlessBrowser(env = process.env) {
22
- const envPath = env.VIVIPILOT_HEADLESS_BROWSER;
23
- if (envPath && await isExecutable(envPath)) {
24
- return { executablePath: envPath, source: "env" };
25
- }
26
- const shell = await findChromeHeadlessShell();
27
- if (shell)
28
- return { executablePath: shell, source: "chrome-headless-shell" };
29
- const chrome = await findSystemChrome();
30
- if (chrome)
31
- return { executablePath: chrome, source: "system-chrome" };
32
- const chromium = await findSystemChromium();
33
- if (chromium)
34
- return { executablePath: chromium, source: "system-chromium" };
35
- throw new BrowserNotFoundError("No headless browser found. Install chrome-headless-shell or Chrome/Chromium, or set VIVIPILOT_HEADLESS_BROWSER to the binary path.");
36
- }
37
- async function isExecutable(path) {
38
- try {
39
- await access(path, constants.X_OK);
40
- return true;
41
- }
42
- catch {
43
- return false;
44
- }
45
- }
46
- async function findChromeHeadlessShell() {
47
- const candidates = [
48
- process.env.PUPPETEER_EXECUTABLE_PATH,
49
- join(homedir(), ".cache", "puppeteer", "chrome-headless-shell"),
50
- "/usr/bin/chrome-headless-shell",
51
- "/usr/local/bin/chrome-headless-shell",
52
- "/snap/bin/chrome-headless-shell",
53
- join(homedir(), ".local", "share", "chrome-headless-shell", "chrome-headless-shell"),
54
- "/opt/chrome-headless-shell/chrome-headless-shell",
55
- // macOS
56
- "/Applications/Google Chrome Headless Shell.app/Contents/MacOS/Google Chrome Headless Shell",
57
- // Windows
58
- join(homedir(), "AppData", "Local", "chrome-headless-shell", "chrome-headless-shell.exe"),
59
- ];
60
- for (const candidate of candidates) {
61
- if (!candidate)
62
- continue;
63
- if (await isExecutable(candidate))
64
- return candidate;
65
- // Some install dirs contain a versioned subfolder
66
- if (existsSync(candidate) && !candidate.endsWith("chrome-headless-shell") && !candidate.endsWith(".exe")) {
67
- // Search for the binary inside versioned subdirs
68
- const { readdirSync } = await import("node:fs");
69
- try {
70
- const entries = readdirSync(candidate, { withFileTypes: true });
71
- for (const entry of entries) {
72
- if (!entry.isDirectory())
73
- continue;
74
- const inner = join(candidate, entry.name, "chrome-headless-shell");
75
- if (await isExecutable(inner))
76
- return inner;
77
- const innerExe = join(candidate, entry.name, "chrome-headless-shell.exe");
78
- if (await isExecutable(innerExe))
79
- return innerExe;
80
- }
81
- }
82
- catch { /* ignore */ }
83
- }
84
- }
85
- return null;
86
- }
87
- async function findSystemChrome() {
88
- const candidates = [
89
- "/usr/bin/google-chrome",
90
- "/usr/bin/google-chrome-stable",
91
- "/usr/bin/google-chrome-unstable",
92
- "/usr/local/bin/google-chrome",
93
- "/opt/google/chrome/chrome",
94
- "/snap/bin/google-chrome",
95
- // macOS
96
- "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome",
97
- // Windows
98
- join(homedir(), "AppData", "Local", "Google", "Chrome", "Application", "chrome.exe"),
99
- "C:\\Program Files\\Google\\Chrome\\Application\\chrome.exe",
100
- "C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe",
101
- ];
102
- for (const candidate of candidates) {
103
- if (await isExecutable(candidate))
104
- return candidate;
105
- }
106
- return null;
107
- }
108
- async function findSystemChromium() {
109
- const candidates = [
110
- "/usr/bin/chromium",
111
- "/usr/bin/chromium-browser",
112
- "/usr/local/bin/chromium",
113
- "/snap/bin/chromium",
114
- "/usr/bin/brave-browser",
115
- "/usr/bin/brave",
116
- "/Applications/Chromium.app/Contents/MacOS/Chromium",
117
- join(homedir(), "AppData", "Local", "Chromium", "Application", "chromium.exe"),
118
- "C:\\Program Files\\Chromium\\Application\\chromium.exe",
119
- ];
120
- for (const candidate of candidates) {
121
- if (await isExecutable(candidate))
122
- return candidate;
123
- }
124
- return null;
125
- }
126
- /**
127
- * Build the Chrome/Chromium CLI flags for headless rendering with WebGL/WebGPU support.
128
- * These flags ensure the GPU is available (or SwiftShader fallback) so Pixi v8 can
129
- * initialise its renderer inside a headless browser.
130
- */
131
- export function headlessBrowserArgs(renderUrl, options) {
132
- const width = options?.windowSize?.width ?? 1920;
133
- const height = options?.windowSize?.height ?? 1080;
134
- return [
135
- "--headless=new",
136
- "--no-sandbox",
137
- "--disable-gpu-sandbox",
138
- "--disable-dev-shm-usage",
139
- "--disable-extensions",
140
- "--disable-background-networking",
141
- "--disable-sync",
142
- "--disable-translate",
143
- "--disable-default-apps",
144
- "--disable-popup-blocking",
145
- "--disable-component-update",
146
- "--disable-metrics",
147
- "--no-first-run",
148
- "--mute-audio",
149
- "--enable-logging=stderr",
150
- "--log-level=0",
151
- "--v=1",
152
- `--window-size=${width},${height}`,
153
- "--enable-features=Vulkan",
154
- "--use-gl=angle",
155
- "--use-angle=swiftshader",
156
- "--enable-unsafe-swiftshader",
157
- "--ignore-gpu-blocklist",
158
- ...(options?.extraArgs ?? []),
159
- renderUrl,
160
- ];
161
- }
162
- //# sourceMappingURL=browser.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"browser.js","sourceRoot":"","sources":["../src/browser.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAMA,OAAO,EAQL,KAAK,GAAG,EACT,MAAM,aAAa,CAAC;AAMrB,KAAK,YAAY,GAAG;IAClB,KAAK,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;CAC5B,CAAC;AAEF,KAAK,KAAK,GAAG;IACX,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,YAAY,CAAC;CACtB,CAAC;AAojBF,wBAAsB,MAAM,CAAC,IAAI,WAAwB,EAAE,GAAG,GAAE,GAAiB,EAAE,EAAE,GAAE,KAA0D,GAAG,OAAO,CAAC,IAAI,CAAC,CAqDhK"}