@hyprcart/cli 1.0.3 → 1.0.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/README.md CHANGED
@@ -2,4 +2,4 @@
2
2
 
3
3
  Command line interface for building, validating, deploying, and privately installing Hyprcart apps.
4
4
 
5
- The `hyprcart` binary supports app scaffolding, registered-app selection, project linking, creating a Developer Console app from `hyprcart.app.config.ts`, local preview, validation, contract generation, development deploys, private install links, logs, status, rollback, docs, and schema export.
5
+ The `hyprcart` binary supports browser login with an authorization prompt, app scaffolding, registered-app selection, project linking, creating a Developer Console app from `hyprcart.app.config.ts`, local preview, validation, contract generation, development deploys, private install links, logs, status, rollback, docs, and schema export.
package/dist/index.js CHANGED
@@ -413,7 +413,10 @@ async function appLink(args, cwd = process.cwd(), options = {}) {
413
413
  payload,
414
414
  token,
415
415
  developerOrigin: developerOrigin2,
416
- fetchImpl: options.fetchImpl
416
+ fetchImpl: options.fetchImpl,
417
+ input: options.input,
418
+ output: options.output,
419
+ isTTY: options.isTTY ?? Boolean(process.stdin.isTTY)
417
420
  }) : await selectAppOrCreate({
418
421
  args,
419
422
  manifest,
@@ -489,6 +492,7 @@ async function selectAppOrCreate(input) {
489
492
  input: input.input ?? process.stdin,
490
493
  output: input.output ?? process.stderr
491
494
  });
495
+ let selectedIndex = Number.NaN;
492
496
  try {
493
497
  const choices = apps.map((app, index) => `${index + 1}. ${app.displayName} (${app.id}) - ${app.teamName}`);
494
498
  const createIndex = apps.length + 1;
@@ -497,25 +501,26 @@ Hyprcart app link for ${input.payload.account.email}`);
497
501
  if (choices.length > 0) writeLine(input.output, choices.join("\n"));
498
502
  writeLine(input.output, `${createIndex}. Create new app from ${input.manifest.name}`);
499
503
  const answer = (await rl.question(`Choose an app [1-${createIndex}]: `)).trim();
500
- const selectedIndex = Number.parseInt(answer, 10);
501
- if (selectedIndex >= 1 && selectedIndex <= apps.length) {
502
- return { ok: true, app: apps[selectedIndex - 1], accountEmail: input.payload.account.email };
503
- }
504
- if (selectedIndex === createIndex) {
505
- return createAppFromProject(input);
506
- }
507
- return { ok: false, result: failure("app.link", "app.selection_invalid", "Choose a listed app number.") };
504
+ selectedIndex = Number.parseInt(answer, 10);
508
505
  } finally {
509
506
  rl.close();
510
507
  }
508
+ if (selectedIndex >= 1 && selectedIndex <= apps.length) {
509
+ return { ok: true, app: apps[selectedIndex - 1], accountEmail: input.payload.account.email };
510
+ }
511
+ if (selectedIndex === apps.length + 1) {
512
+ return createAppFromProject(input);
513
+ }
514
+ return { ok: false, result: failure("app.link", "app.selection_invalid", "Choose a listed app number.") };
511
515
  }
512
516
  async function createAppFromProject(input) {
513
517
  const name = readFlag5(input.args, "--name") ?? input.manifest.name;
514
518
  const slug = readFlag5(input.args, "--slug");
515
- const teamId = readFlag5(input.args, "--team");
519
+ const team = await resolveTeamForCreate(input);
520
+ if (!team.ok) return team;
516
521
  const created = await createDeveloperApp(
517
522
  {
518
- teamId,
523
+ teamId: team.teamId,
519
524
  name,
520
525
  slug,
521
526
  manifest: input.manifest
@@ -524,6 +529,36 @@ async function createAppFromProject(input) {
524
529
  );
525
530
  return { ok: true, app: created.app, accountEmail: created.account.email };
526
531
  }
532
+ async function resolveTeamForCreate(input) {
533
+ const explicitTeamId = readFlag5(input.args, "--team");
534
+ if (explicitTeamId) return { ok: true, teamId: explicitTeamId };
535
+ if (input.payload.teams.length === 0) {
536
+ return { ok: false, result: failure("app.link", "team.missing", "Create or join a Developer Console team before creating an app from this project.") };
537
+ }
538
+ if (input.payload.teams.length === 1) {
539
+ return { ok: true, teamId: input.payload.teams[0].id };
540
+ }
541
+ if (!input.isTTY) {
542
+ return { ok: false, result: failure("app.link", "team.selection_required", "Choose which developer team should own the new app with --team <teamId>, or run interactively to select one.") };
543
+ }
544
+ const rl = createInterface({
545
+ input: input.input ?? process.stdin,
546
+ output: input.output ?? process.stderr
547
+ });
548
+ try {
549
+ writeLine(input.output, "\nChoose a developer team for the new app");
550
+ input.payload.teams.forEach((team, index) => writeLine(input.output, `${index + 1}. ${team.name} (${team.id})`));
551
+ const answer = (await rl.question(`Choose a team [1-${input.payload.teams.length}]: `)).trim();
552
+ const selectedIndex = Number.parseInt(answer, 10);
553
+ const selectedTeam = input.payload.teams[selectedIndex - 1];
554
+ if (!selectedTeam) {
555
+ return { ok: false, result: failure("app.link", "team.selection_invalid", "Choose a listed developer team number.") };
556
+ }
557
+ return { ok: true, teamId: selectedTeam.id };
558
+ } finally {
559
+ rl.close();
560
+ }
561
+ }
527
562
  async function confirmLink(input) {
528
563
  if (input.yes) return { ok: true };
529
564
  if (!input.isTTY) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/commands/app-contracts.ts","../src/config/manifest.ts","../src/output/envelope.ts","../src/commands/app-deploy.ts","../src/commands/app-dev.ts","../src/commands/app-init.ts","../src/templates/materialize.ts","../src/commands/app-install-link.ts","../src/config/project-link.ts","../src/auth/credentials.ts","../src/api/developer-apps.ts","../src/commands/app-link.ts","../src/commands/app-logs.ts","../src/commands/app-rollback.ts","../src/commands/app-status.ts","../src/commands/app-validate.ts","../src/commands/app-version-create.ts","../src/auth/browser-login.ts","../src/commands/auth.ts","../src/commands/docs-open.ts","../src/commands/schema-export.ts","../src/index.ts"],"sourcesContent":["import { generateContracts, type AppManifest } from \"@hyprcart/app-manifest\";\nimport { fallbackManifest, loadProjectManifest } from \"../config/manifest\";\nimport { success } from \"../output/envelope\";\n\nexport async function appContracts(manifest?: AppManifest) {\n const result = generateContracts(manifest ?? (await loadProjectManifest()) ?? fallbackManifest());\n return success(\"app.contracts.generate\", result);\n}\n","import { readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport type { AppManifest } from \"@hyprcart/app-manifest\";\n\nconst manifestCandidates = [\"hyprcart.app.config.ts\", \"hyprcart.app.config.mjs\", \"hyprcart.app.config.js\", \"hyprcart.app.json\"];\n\nexport async function loadProjectManifest(cwd = process.cwd()): Promise<AppManifest | null> {\n for (const candidate of manifestCandidates) {\n const path = join(cwd, candidate);\n try {\n const source = await readFile(path, \"utf8\");\n if (candidate.endsWith(\".json\")) return JSON.parse(source) as AppManifest;\n return evaluateConfigModule(source) as AppManifest;\n } catch (error) {\n if (isMissingFileError(error)) continue;\n throw new Error(`Unable to read ${candidate}: ${error instanceof Error ? error.message : \"invalid manifest\"}`);\n }\n }\n return null;\n}\n\nexport function fallbackManifest(name = \"Local app\"): AppManifest {\n return {\n name,\n version: \"0.1.0\",\n manifestVersion: \"2026-06\",\n sdkVersion: \"1.0.0\",\n platformCompatibility: \"2026-06\",\n scopes: [\"product:read\"],\n surfaces: [{ id: \"reviews\", type: \"storefront_block\", entry: \"src/storefront/reviews.tsx\", label: { en: \"Reviews\", de: \"Bewertungen\" } }],\n translations: { en: { \"reviews.label\": \"Reviews\" }, de: { \"reviews.label\": \"Bewertungen\" } },\n };\n}\n\nfunction evaluateConfigModule(source: string): unknown {\n const expression = source\n .replace(/^\\s*export\\s+default\\s+/m, \"return \")\n .replace(/;\\s*$/, \"\");\n if (!/^\\s*return\\s+/.test(expression)) {\n throw new Error(\"expected a default-exported manifest object\");\n }\n return new Function(expression)();\n}\n\nfunction isMissingFileError(error: unknown): boolean {\n return Boolean(error && typeof error === \"object\" && \"code\" in error && (error as { code: string }).code === \"ENOENT\");\n}\n","export interface CommandEnvelope<TData = unknown> {\n ok: boolean;\n requestId: string;\n command: string;\n data?: TData;\n error?: {\n code: string;\n message: string;\n path?: string;\n docsUrl?: string;\n };\n}\n\nexport function success<TData>(command: string, data: TData, requestId = createRequestId()): CommandEnvelope<TData> {\n return { ok: true, command, requestId, data };\n}\n\nexport function failure(command: string, code: string, message: string, requestId = createRequestId(), docsUrl?: string): CommandEnvelope {\n return {\n ok: false,\n command,\n requestId,\n error: { code, message: redactMessage(message), docsUrl },\n };\n}\n\nexport function createRequestId(): string {\n return `req_cli_${Date.now().toString(36)}`;\n}\n\nfunction redactMessage(message: string): string {\n return message\n .replace(/hcdev_[a-z0-9_]+/gi, \"[redacted]\")\n .replace(/Bearer\\s+[a-z0-9._-]+/gi, \"[redacted]\")\n .replace(/[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}/gi, \"[redacted]\");\n}\n","import { success } from \"../output/envelope\";\n\nexport async function appDeploy(args: string[]) {\n const env = readFlag(args, \"--env\") ?? \"development\";\n return success(\"app.deploy\", {\n environment: env,\n appVersionId: `devver_${Date.now().toString(36)}`,\n runtimeDeploymentId: `rtdep_${Date.now().toString(36)}`,\n status: \"deployed\",\n healthChecked: args.includes(\"--wait\"),\n });\n}\n\nfunction readFlag(args: string[], name: string): string | undefined {\n const index = args.indexOf(name);\n return index >= 0 ? args[index + 1] : undefined;\n}\n","import { createPreviewServer, previewSurface } from \"@hyprcart/app-testing\";\nimport { success } from \"../output/envelope\";\n\nexport async function appDev(args: string[]) {\n const fixtureId = readFlag(args, \"--fixture\");\n const state = createPreviewServer();\n const preview = await previewSurface(state, \"storefront_block\", fixtureId);\n return success(\"app.dev\", {\n previewUrl: \"http://localhost:8788\",\n html: preview.html,\n diagnostics: state.diagnostics,\n remoteVersionCreated: state.remoteVersionCreated,\n });\n}\n\nfunction readFlag(args: string[], name: string): string | undefined {\n const index = args.indexOf(name);\n return index >= 0 ? args[index + 1] : undefined;\n}\n","import { mkdir } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { failure, success } from \"../output/envelope\";\nimport { isStarterTemplateKind, materializeTemplate, starterTemplate } from \"../templates/materialize\";\n\nexport async function appInit(args: string[], cwd = process.cwd()) {\n const name = positionalArgs(args)[0] ?? \"my-hyprcart-app\";\n const template = readFlag(args, \"--template\") ?? \"storefront-block\";\n if (!isStarterTemplateKind(template)) {\n return failure(\"app.init\", \"template.unsupported\", `Unsupported template: ${template}.`);\n }\n const target = join(cwd, name);\n await mkdir(target, { recursive: true });\n const files = await materializeTemplate(starterTemplate(name, template), target);\n return success(\"app.init\", { projectPath: target, template, files });\n}\n\nfunction readFlag(args: string[], name: string): string | undefined {\n const index = args.indexOf(name);\n return index >= 0 ? args[index + 1] : undefined;\n}\n\nfunction positionalArgs(args: string[]): string[] {\n return args.filter((arg, index) => !arg.startsWith(\"--\") && !args[index - 1]?.startsWith(\"--\"));\n}\n","import { mkdir, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\n\nexport interface TemplateFile {\n path: string;\n content: string;\n}\n\nexport type StarterTemplateKind =\n | \"storefront-block\"\n | \"admin-surface\"\n | \"checkout-function\"\n | \"pixel-event\"\n | \"multi-surface\";\n\nexport function starterTemplate(appName: string, kind: StarterTemplateKind = \"storefront-block\"): TemplateFile[] {\n const surface = surfaceForTemplate(kind);\n return [\n {\n path: \"hyprcart.app.config.ts\",\n content: `export default {\n name: ${JSON.stringify(appName)},\n version: \"0.1.0\",\n manifestVersion: \"2026-06\",\n sdkVersion: \"1.0.0\",\n platformCompatibility: \"2026-06\",\n scopes: [\"product:read\"],\n surfaces: [${JSON.stringify(surface)}],\n translations: { en: { \"reviews.label\": \"Reviews\" }, de: { \"reviews.label\": \"Bewertungen\" } },\n resources: { bundleSizeBytes: 42000 }\n};\n`,\n },\n {\n path: \"package.json\",\n content: `${JSON.stringify(\n {\n name: appName,\n version: \"0.1.0\",\n type: \"module\",\n scripts: {\n dev: \"hyprcart app dev\",\n validate: \"hyprcart app validate\",\n contracts: \"hyprcart app contracts generate\",\n test: \"vitest run tests\",\n \"test:preview\": \"playwright test playwright/app-preview.spec.ts\",\n \"deploy:dev\": \"hyprcart app deploy --env development\",\n \"install-link\": \"hyprcart app install-link create\",\n },\n dependencies: {\n \"@hyprcart/app-sdk\": \"^1.0.0\",\n },\n devDependencies: {\n \"@hyprcart/cli\": \"^1.0.0\",\n \"@hyprcart/app-testing\": \"^1.0.0\",\n \"@playwright/test\": \"^1.60.0\",\n vitest: \"^4.0.18\",\n typescript: \"^5.7.2\",\n },\n },\n null,\n 2,\n )}\\n`,\n },\n { path: surface.entry, content: `export function HyprcartSurface() { return \"<section>${kind}</section>\"; }\\n` },\n { path: \"locales/en.json\", content: `${JSON.stringify({ \"reviews.label\": \"Reviews\" }, null, 2)}\\n` },\n { path: \"locales/de.json\", content: `${JSON.stringify({ \"reviews.label\": \"Bewertungen\" }, null, 2)}\\n` },\n { path: \"fixtures/product.basic.json\", content: `${JSON.stringify({ id: \"prod_1\", title: \"Deep Moisture\" }, null, 2)}\\n` },\n { path: \"tests/validation.test.ts\", content: `import { describe, expect, it } from \"vitest\";\\ndescribe(\"app\", () => { it(\"has tests\", () => expect(true).toBe(true)); });\\n` },\n {\n path: \"playwright/app-preview.spec.ts\",\n content: `import { expect, test } from \"@playwright/test\";\\n\\ntest(\"preview renders a page\", async ({ page }) => {\\n await page.goto(process.env.HYPRCART_PREVIEW_URL ?? \"http://localhost:8788\");\\n await expect(page.locator(\"body\")).toBeVisible();\\n});\\n`,\n },\n {\n path: \"README.md\",\n content: `# ${appName}\\n\\nEdit \\`hyprcart.app.config.ts\\` in your IDE, then run \\`npx hyprcart login\\` and \\`npx hyprcart app link\\` to choose an existing app, or \\`npx hyprcart app link --create\\` to create one from this project.\\n\\nRun \\`npm run dev\\`, \\`npm run validate\\`, and \\`npm run deploy:dev\\`.\\n\\nFor one-off CLI commands, use \\`npx hyprcart <command>\\` unless you installed \\`@hyprcart/cli\\` globally.\\n`,\n },\n ];\n}\n\nexport function isStarterTemplateKind(value: string): value is StarterTemplateKind {\n return [\"storefront-block\", \"admin-surface\", \"checkout-function\", \"pixel-event\", \"multi-surface\"].includes(value);\n}\n\nfunction surfaceForTemplate(kind: StarterTemplateKind) {\n if (kind === \"admin-surface\") {\n return { id: \"reviews\", type: \"admin_surface\", entry: \"src/admin/reviews.tsx\", label: { en: \"Reviews\", de: \"Bewertungen\" } };\n }\n if (kind === \"checkout-function\") {\n return { id: \"reviews\", type: \"checkout_function\", entry: \"src/checkout/reviews.ts\", label: { en: \"Reviews\", de: \"Bewertungen\" } };\n }\n if (kind === \"pixel-event\") {\n return { id: \"reviews\", type: \"pixel\", entry: \"src/pixel/reviews.ts\", label: { en: \"Reviews\", de: \"Bewertungen\" } };\n }\n if (kind === \"multi-surface\") {\n return { id: \"reviews\", type: \"storefront_block\", entry: \"src/storefront/reviews.tsx\", label: { en: \"Reviews\", de: \"Bewertungen\" } };\n }\n return { id: \"reviews\", type: \"storefront_block\", entry: \"src/storefront/reviews.tsx\", label: { en: \"Reviews\", de: \"Bewertungen\" } };\n}\n\nexport async function materializeTemplate(files: TemplateFile[], cwd: string): Promise<string[]> {\n const written: string[] = [];\n for (const file of files) {\n const fullPath = join(cwd, file.path);\n await mkdir(dirname(fullPath), { recursive: true });\n await writeFile(fullPath, file.content, { flag: \"wx\" });\n written.push(file.path);\n }\n return written;\n}\n","import { failure, success } from \"../output/envelope\";\n\nexport async function appInstallLink(args: string[]) {\n const subcommand = args[0];\n if (subcommand === \"revoke\") {\n return success(\"app.install-link.revoke\", { privateInstallUrlId: args[1], status: \"revoked\" });\n }\n\n const orgId = readFlag(args, \"--org\");\n if (!orgId) {\n return failure(\"app.install-link.create\", \"organization.missing\", \"Provide --org <orgId>.\");\n }\n\n const token = `hcdev_${Date.now().toString(36)}`;\n const privateInstallUrlId = `hcil_${Date.now().toString(36)}`;\n const installUrl = new URL(\"https://hyprcart.com/apps/install/private\");\n installUrl.searchParams.set(\"hcil\", privateInstallUrlId);\n installUrl.searchParams.set(\"token\", token);\n\n return success(\"app.install-link.create\", {\n privateInstallUrlId,\n installUrl: installUrl.toString(),\n appVersionId: readFlag(args, \"--version\") ?? \"devver_local\",\n environment: readFlag(args, \"--env\") ?? \"development\",\n allowedOrganizationId: orgId,\n allowedUserEmail: readFlag(args, \"--user\"),\n expiresAt: readFlag(args, \"--expires-at\") ?? null,\n maxUses: Number(readFlag(args, \"--max-uses\") ?? 1),\n });\n}\n\nfunction readFlag(args: string[], name: string): string | undefined {\n const index = args.indexOf(name);\n return index >= 0 ? args[index + 1] : undefined;\n}\n","import { mkdir, readFile, rename, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\nexport interface ProjectLink {\n appId: string;\n teamId: string;\n appSlug: string;\n environment: string;\n developerApiUrl: string;\n linkedAt: string;\n previousLinks?: ProjectLink[];\n}\n\nconst linkDirectory = \".hyprcart\";\nconst linkFile = \"project.json\";\n\nexport async function readProjectLink(cwd = process.cwd()): Promise<ProjectLink | null> {\n try {\n const raw = await readFile(join(cwd, linkDirectory, linkFile), \"utf8\");\n return JSON.parse(raw) as ProjectLink;\n } catch {\n return null;\n }\n}\n\nexport async function writeProjectLink(link: ProjectLink, cwd = process.cwd(), force = false): Promise<ProjectLink> {\n const existing = await readProjectLink(cwd);\n if (existing && existing.appId !== link.appId && !force) {\n throw new Error(\"Project is already linked to another app. Re-run with --force to relink.\");\n }\n\n await mkdir(join(cwd, linkDirectory), { recursive: true });\n\n if (existing && existing.appId !== link.appId) {\n await rename(join(cwd, linkDirectory, linkFile), join(cwd, linkDirectory, `project.${Date.now()}.previous.json`));\n }\n\n const next = {\n ...link,\n previousLinks: existing && existing.appId !== link.appId ? [existing, ...(existing.previousLinks ?? [])] : existing?.previousLinks,\n };\n await writeFile(join(cwd, linkDirectory, linkFile), `${JSON.stringify(next, null, 2)}\\n`);\n return next;\n}\n","import { mkdir, readFile, rm, writeFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\n\nexport interface StoredDeveloperCredentials {\n realm: \"developer\";\n email: string | null;\n token: string;\n expiresAt: string;\n savedAt: string;\n}\n\nexport function credentialsPath(env: Record<string, string | undefined> = process.env): string {\n const base = env.HYPRCART_CONFIG_HOME ?? join(homedir(), \".hyprcart\");\n return join(base, \"credentials.json\");\n}\n\nexport async function readDeveloperCredentials(env: Record<string, string | undefined> = process.env): Promise<StoredDeveloperCredentials | null> {\n try {\n const parsed = JSON.parse(await readFile(credentialsPath(env), \"utf8\")) as StoredDeveloperCredentials;\n if (parsed.realm !== \"developer\" || !parsed.token) return null;\n return parsed;\n } catch {\n return null;\n }\n}\n\nexport async function writeDeveloperCredentials(credentials: StoredDeveloperCredentials, env: Record<string, string | undefined> = process.env): Promise<void> {\n const path = credentialsPath(env);\n await mkdir(dirname(path), { recursive: true });\n await writeFile(path, `${JSON.stringify(credentials, null, 2)}\\n`, { mode: 0o600 });\n}\n\nexport async function clearDeveloperCredentials(env: Record<string, string | undefined> = process.env): Promise<void> {\n await rm(credentialsPath(env), { force: true });\n}\n\nexport function credentialsExpired(credentials: StoredDeveloperCredentials, now = new Date()): boolean {\n return new Date(credentials.expiresAt).getTime() <= now.getTime();\n}\n","import type { AppManifest } from \"@hyprcart/app-manifest\";\n\nexport interface DeveloperCliApp {\n id: string;\n teamId: string;\n teamName: string;\n slug: string;\n displayName: string;\n status: string;\n latestDraftVersionId: string | null;\n latestValidatedVersionId: string | null;\n}\n\nexport interface DeveloperCliTeam {\n id: string;\n slug: string;\n name: string;\n role: string;\n apps: DeveloperCliApp[];\n}\n\nexport interface DeveloperCliAppsPayload {\n account: { id: string; email: string };\n teams: DeveloperCliTeam[];\n}\n\nexport async function listDeveloperApps(options: DeveloperCliApiOptions): Promise<DeveloperCliAppsPayload> {\n const response = await callCliAppsApi(`${developerOrigin(options)}/cli/apps`, {\n method: \"GET\",\n token: options.token,\n fetchImpl: options.fetchImpl,\n });\n return response.data as DeveloperCliAppsPayload;\n}\n\nexport async function createDeveloperApp(\n input: { teamId?: string; name: string; slug?: string; description?: string; manifest: AppManifest },\n options: DeveloperCliApiOptions,\n): Promise<DeveloperCliAppsPayload & { app: DeveloperCliApp }> {\n const response = await callCliAppsApi(`${developerOrigin(options)}/cli/apps`, {\n method: \"POST\",\n token: options.token,\n fetchImpl: options.fetchImpl,\n body: JSON.stringify(input),\n });\n return response.data as DeveloperCliAppsPayload & { app: DeveloperCliApp };\n}\n\nasync function callCliAppsApi(\n url: string,\n options: { method: \"GET\" | \"POST\"; token: string; fetchImpl?: typeof fetch; body?: string },\n): Promise<{ data: unknown }> {\n const response = await (options.fetchImpl ?? fetch)(url, {\n method: options.method,\n headers: {\n Authorization: `Bearer ${options.token}`,\n ...(options.body ? { \"content-type\": \"application/json\" } : {}),\n },\n body: options.body,\n });\n const payload = (await response.json().catch(() => null)) as ApiPayload | null;\n if (!response.ok || !payload?.ok) {\n const error = payload?.error;\n throw new DeveloperCliApiError(error?.code ?? \"developer_api.failed\", error?.message ?? \"Developer API request failed.\", payload?.data);\n }\n return { data: payload.data };\n}\n\nfunction developerOrigin(options: DeveloperCliApiOptions): string {\n return (options.origin ?? \"https://developer.hyprcart.com\").replace(/\\/$/, \"\");\n}\n\nexport class DeveloperCliApiError extends Error {\n constructor(\n public code: string,\n message: string,\n public data?: unknown,\n ) {\n super(message);\n }\n}\n\ntype DeveloperCliApiOptions = {\n token: string;\n origin?: string;\n fetchImpl?: typeof fetch;\n};\n\ntype ApiPayload = {\n ok: boolean;\n data?: unknown;\n error?: { code: string; message: string };\n};\n","import { failure, success } from \"../output/envelope\";\nimport { writeProjectLink } from \"../config/project-link\";\nimport { credentialsExpired, readDeveloperCredentials } from \"../auth/credentials\";\nimport { fallbackManifest, loadProjectManifest } from \"../config/manifest\";\nimport { createDeveloperApp, DeveloperCliApiError, listDeveloperApps, type DeveloperCliApp, type DeveloperCliAppsPayload, type DeveloperCliTeam } from \"../api/developer-apps\";\nimport { createInterface } from \"node:readline/promises\";\nimport type { Readable, Writable } from \"node:stream\";\n\nexport async function appLink(args: string[], cwd = process.cwd(), options: AppLinkOptions = {}) {\n const environment = readFlag(args, \"--env\") ?? \"development\";\n const developerApiUrl = readFlag(args, \"--api\") ?? \"https://developer.hyprcart.com/api/graphql\";\n const developerOrigin = readFlag(args, \"--developer-origin\") ?? \"https://developer.hyprcart.com\";\n const force = args.includes(\"--force\");\n const yes = args.includes(\"--yes\") || args.includes(\"-y\");\n const appId = readFlag(args, \"--app\");\n const explicitTeamId = readFlag(args, \"--team\");\n\n if (appId) {\n const resolved = await resolveExplicitApp(appId, explicitTeamId, developerOrigin, options);\n return writeResolvedProjectLink(resolved.app, environment, developerApiUrl, cwd, force);\n }\n\n const token = await resolveDeveloperToken(options.env);\n if (!token) {\n return failure(\"app.link\", \"auth.missing\", \"Run npx hyprcart login, then rerun npx hyprcart app link.\");\n }\n\n const manifest = (await loadProjectManifest(cwd).catch((error) => {\n throw error;\n })) ?? fallbackManifest();\n\n try {\n if (args.includes(\"--list\")) {\n const payload = await listDeveloperApps({ token, origin: developerOrigin, fetchImpl: options.fetchImpl });\n return success(\"app.link.list\", payload);\n }\n\n const payload = await listDeveloperApps({ token, origin: developerOrigin, fetchImpl: options.fetchImpl });\n const selected = args.includes(\"--create\")\n ? await createAppFromProject({\n args,\n manifest,\n payload,\n token,\n developerOrigin,\n fetchImpl: options.fetchImpl,\n })\n : await selectAppOrCreate({\n args,\n manifest,\n payload,\n token,\n developerOrigin,\n fetchImpl: options.fetchImpl,\n input: options.input,\n output: options.output,\n isTTY: options.isTTY ?? Boolean(process.stdin.isTTY),\n });\n\n if (!selected.ok) return selected.result;\n const confirmed = await confirmLink({\n app: selected.app,\n accountEmail: selected.accountEmail,\n yes,\n input: options.input,\n output: options.output,\n isTTY: options.isTTY ?? Boolean(process.stdin.isTTY),\n });\n if (!confirmed.ok) return confirmed.result;\n return writeResolvedProjectLink(selected.app, environment, developerApiUrl, cwd, force);\n } catch (error) {\n if (error instanceof DeveloperCliApiError) return failure(\"app.link\", error.code, error.message);\n return failure(\"app.link\", \"project.link.failed\", error instanceof Error ? error.message : \"Project link failed.\");\n }\n}\n\nfunction readFlag(args: string[], name: string): string | undefined {\n const index = args.indexOf(name);\n const value = index >= 0 ? args[index + 1] : undefined;\n return value && !value.startsWith(\"--\") ? value : undefined;\n}\n\nasync function resolveDeveloperToken(env: Record<string, string | undefined> = process.env): Promise<string | null> {\n if (env.HYPRCART_DEVELOPER_TOKEN) return env.HYPRCART_DEVELOPER_TOKEN;\n const credentials = await readDeveloperCredentials(env);\n return credentials && !credentialsExpired(credentials) ? credentials.token : null;\n}\n\nasync function resolveExplicitApp(appId: string, explicitTeamId: string | undefined, developerOrigin: string, options: AppLinkOptions) {\n const token = await resolveDeveloperToken(options.env);\n if (token) {\n const payload = await listDeveloperApps({ token, origin: developerOrigin, fetchImpl: options.fetchImpl }).catch(() => null);\n const app = payload ? flattenApps(payload.teams).find((candidate) => candidate.id === appId) : null;\n if (app) return { ok: true as const, app };\n }\n\n const teamId = explicitTeamId ?? \"devteam_local\";\n return {\n ok: true as const,\n app: {\n id: appId,\n teamId,\n teamName: teamId,\n slug: appId,\n displayName: appId,\n status: \"draft\",\n latestDraftVersionId: null,\n latestValidatedVersionId: null,\n },\n };\n}\n\nasync function selectAppOrCreate(input: {\n args: string[];\n manifest: ReturnType<typeof fallbackManifest>;\n payload: DeveloperCliAppsPayload;\n token: string;\n developerOrigin: string;\n fetchImpl?: typeof fetch;\n input?: Readable;\n output?: Writable;\n isTTY: boolean;\n}): Promise<SelectedAppResult> {\n const apps = flattenApps(input.payload.teams);\n if (!input.isTTY) {\n return {\n ok: false,\n result: failure(\n \"app.link\",\n \"app.selection_required\",\n apps.length > 0\n ? \"Choose an app with --app <appId>, or run interactively to select from your registered apps.\"\n : \"No registered apps found. Run npx hyprcart app link --create --yes to create one from this project.\",\n ),\n };\n }\n\n const rl = createInterface({\n input: input.input ?? process.stdin,\n output: input.output ?? process.stderr,\n });\n try {\n const choices = apps.map((app, index) => `${index + 1}. ${app.displayName} (${app.id}) - ${app.teamName}`);\n const createIndex = apps.length + 1;\n writeLine(input.output, `\\nHyprcart app link for ${input.payload.account.email}`);\n if (choices.length > 0) writeLine(input.output, choices.join(\"\\n\"));\n writeLine(input.output, `${createIndex}. Create new app from ${input.manifest.name}`);\n const answer = (await rl.question(`Choose an app [1-${createIndex}]: `)).trim();\n const selectedIndex = Number.parseInt(answer, 10);\n if (selectedIndex >= 1 && selectedIndex <= apps.length) {\n return { ok: true, app: apps[selectedIndex - 1]!, accountEmail: input.payload.account.email };\n }\n if (selectedIndex === createIndex) {\n return createAppFromProject(input);\n }\n return { ok: false, result: failure(\"app.link\", \"app.selection_invalid\", \"Choose a listed app number.\") };\n } finally {\n rl.close();\n }\n}\n\nasync function createAppFromProject(input: {\n args: string[];\n manifest: ReturnType<typeof fallbackManifest>;\n payload: DeveloperCliAppsPayload;\n token: string;\n developerOrigin: string;\n fetchImpl?: typeof fetch;\n}): Promise<SelectedAppResult> {\n const name = readFlag(input.args, \"--name\") ?? input.manifest.name;\n const slug = readFlag(input.args, \"--slug\");\n const teamId = readFlag(input.args, \"--team\");\n const created = await createDeveloperApp(\n {\n teamId,\n name,\n slug,\n manifest: input.manifest,\n },\n { token: input.token, origin: input.developerOrigin, fetchImpl: input.fetchImpl },\n );\n return { ok: true, app: created.app, accountEmail: created.account.email };\n}\n\nasync function confirmLink(input: {\n app: DeveloperCliApp;\n accountEmail: string;\n yes: boolean;\n input?: Readable;\n output?: Writable;\n isTTY: boolean;\n}) {\n if (input.yes) return { ok: true as const };\n if (!input.isTTY) {\n return { ok: false as const, result: failure(\"app.link\", \"confirmation.required\", \"Re-run with --yes to confirm linking this project to your Developer Console account.\") };\n }\n\n const rl = createInterface({\n input: input.input ?? process.stdin,\n output: input.output ?? process.stderr,\n });\n try {\n const answer = (\n await rl.question(`Link this project as ${input.accountEmail} to ${input.app.displayName} (${input.app.id})? [y/N] `)\n )\n .trim()\n .toLowerCase();\n if (answer === \"y\" || answer === \"yes\") return { ok: true as const };\n return { ok: false as const, result: failure(\"app.link\", \"confirmation.declined\", \"Project link cancelled.\") };\n } finally {\n rl.close();\n }\n}\n\nasync function writeResolvedProjectLink(app: DeveloperCliApp, environment: string, developerApiUrl: string, cwd: string, force: boolean) {\n try {\n const link = await writeProjectLink(\n {\n appId: app.id,\n teamId: app.teamId,\n appSlug: app.slug,\n environment,\n developerApiUrl,\n linkedAt: new Date().toISOString(),\n },\n cwd,\n force,\n );\n return success(\"app.link\", { ...link, appName: app.displayName, teamName: app.teamName });\n } catch (error) {\n return failure(\"app.link\", \"project.link.conflict\", error instanceof Error ? error.message : \"Project link failed.\");\n }\n}\n\nfunction flattenApps(teams: DeveloperCliTeam[]): DeveloperCliApp[] {\n return teams.flatMap((team) => team.apps);\n}\n\nfunction writeLine(output: Writable | undefined, line: string): void {\n (output ?? process.stderr).write(`${line}\\n`);\n}\n\ntype SelectedAppResult =\n | { ok: true; app: DeveloperCliApp; accountEmail: string }\n | { ok: false; result: ReturnType<typeof failure> };\n\ntype AppLinkOptions = {\n env?: Record<string, string | undefined>;\n fetchImpl?: typeof fetch;\n input?: Readable;\n output?: Writable;\n isTTY?: boolean;\n};\n","import { success } from \"../output/envelope\";\n\nexport async function appLogs() {\n return success(\"app.logs\", {\n nodes: [\n {\n requestId: \"req_local\",\n level: \"info\",\n message: \"No production logs in local CLI stub.\",\n redacted: true,\n },\n ],\n });\n}\n","import { failure, success } from \"../output/envelope\";\n\nexport async function appRollback(args: string[]) {\n const version = readFlag(args, \"--to\");\n if (!version) {\n return failure(\"app.rollback\", \"version.missing\", \"Provide --to <versionId>.\");\n }\n return success(\"app.rollback\", { status: \"rolled_back\", appVersionId: version });\n}\n\nfunction readFlag(args: string[], name: string): string | undefined {\n const index = args.indexOf(name);\n return index >= 0 ? args[index + 1] : undefined;\n}\n","import { success } from \"../output/envelope\";\n\nexport async function appStatus() {\n return success(\"app.status\", { environment: \"development\", status: \"deployed\" });\n}\n","import { validateManifest, type AppManifest } from \"@hyprcart/app-manifest\";\nimport { fallbackManifest, loadProjectManifest } from \"../config/manifest\";\nimport { success } from \"../output/envelope\";\n\nexport async function appValidate(manifest?: AppManifest) {\n const result = validateManifest(manifest ?? (await loadProjectManifest()) ?? fallbackManifest());\n return success(\"app.validate\", result);\n}\n","import { success } from \"../output/envelope\";\n\nexport async function appVersionCreate() {\n return success(\"app.version.create\", {\n appVersionId: `devver_${Date.now().toString(36)}`,\n state: \"draft\",\n runtimeDeploymentRequested: false,\n });\n}\n","import { spawn } from \"node:child_process\";\nimport { createServer, type Server } from \"node:http\";\nimport { randomBytes } from \"node:crypto\";\nimport { writeDeveloperCredentials, type StoredDeveloperCredentials } from \"./credentials\";\n\nexport interface BrowserLoginResult {\n email: string | null;\n expiresAt: string;\n loginUrl: string;\n credentialsPathWritten: boolean;\n}\n\nexport async function runBrowserLogin(options: {\n openBrowser?: boolean;\n timeoutMs?: number;\n developerOrigin?: string;\n env?: Record<string, string | undefined>;\n onMessage?: (message: string) => void;\n} = {}): Promise<BrowserLoginResult> {\n const server = createServer();\n const state = randomBytes(24).toString(\"base64url\");\n const callback = await listenOnLoopback(server);\n const loginUrl = new URL(\"/cli/auth/start\", options.developerOrigin ?? \"https://developer.hyprcart.com\");\n loginUrl.searchParams.set(\"redirect_uri\", callback.redirectUri);\n loginUrl.searchParams.set(\"state\", state);\n\n const waitForCallback = waitForLoginCallback(server, state, options.timeoutMs ?? 180_000);\n options.onMessage?.(`Open ${loginUrl.toString()} to finish Hyprcart CLI login.`);\n if (options.openBrowser !== false) {\n openBrowser(loginUrl.toString(), options.onMessage);\n }\n\n try {\n const credentials = await waitForCallback;\n await writeDeveloperCredentials(credentials, options.env);\n return {\n email: credentials.email,\n expiresAt: credentials.expiresAt,\n loginUrl: loginUrl.toString(),\n credentialsPathWritten: true,\n };\n } finally {\n await closeServer(server);\n }\n}\n\nasync function listenOnLoopback(server: Server): Promise<{ redirectUri: string }> {\n await new Promise<void>((resolve, reject) => {\n server.once(\"error\", reject);\n server.listen(0, \"127.0.0.1\", () => resolve());\n });\n const address = server.address();\n if (!address || typeof address === \"string\") throw new Error(\"Failed to start local login callback server.\");\n return { redirectUri: `http://127.0.0.1:${address.port}/callback` };\n}\n\nfunction waitForLoginCallback(server: Server, expectedState: string, timeoutMs: number): Promise<StoredDeveloperCredentials> {\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => reject(new Error(\"Timed out waiting for Hyprcart login callback.\")), timeoutMs);\n server.on(\"request\", (request, response) => {\n const url = new URL(request.url ?? \"/\", \"http://127.0.0.1\");\n if (url.pathname !== \"/callback\") {\n response.writeHead(404).end(\"Not found\");\n return;\n }\n\n const state = url.searchParams.get(\"state\");\n const token = url.searchParams.get(\"token\");\n const email = url.searchParams.get(\"email\");\n const expiresAt = url.searchParams.get(\"expires_at\");\n const realm = url.searchParams.get(\"realm\");\n if (state !== expectedState || !token || !expiresAt || realm !== \"developer\") {\n response.writeHead(400, { \"content-type\": \"text/html; charset=utf-8\" }).end(\"<h1>Hyprcart CLI login failed</h1><p>Invalid callback.</p>\");\n clearTimeout(timeout);\n reject(new Error(\"Invalid Hyprcart login callback.\"));\n return;\n }\n\n response\n .writeHead(200, { \"content-type\": \"text/html; charset=utf-8\" })\n .end(\"<h1>Hyprcart CLI login complete</h1><p>You can close this tab and return to your terminal.</p>\");\n clearTimeout(timeout);\n resolve({\n realm: \"developer\",\n email,\n token,\n expiresAt,\n savedAt: new Date().toISOString(),\n });\n });\n });\n}\n\nfunction openBrowser(url: string, onMessage?: (message: string) => void): void {\n const command =\n process.platform === \"win32\"\n ? { file: \"rundll32.exe\", args: [\"url.dll,FileProtocolHandler\", url] }\n : process.platform === \"darwin\"\n ? { file: \"open\", args: [url] }\n : { file: \"xdg-open\", args: [url] };\n\n const child = spawn(command.file, command.args, { stdio: \"ignore\", detached: true });\n child.on(\"error\", () => onMessage?.(`Could not open browser automatically. Open ${url} manually.`));\n child.unref();\n}\n\nasync function closeServer(server: Server): Promise<void> {\n await new Promise<void>((resolve) => server.close(() => resolve()));\n}\n","import { clearDeveloperCredentials, credentialsExpired, readDeveloperCredentials, writeDeveloperCredentials } from \"../auth/credentials\";\nimport { runBrowserLogin } from \"../auth/browser-login\";\nimport { failure, success } from \"../output/envelope\";\n\nexport async function authCommand(command: \"login\" | \"logout\" | \"whoami\", args: string[] = []) {\n if (command === \"logout\") {\n await clearDeveloperCredentials();\n return success(\"logout\", { status: \"logged_out\" });\n }\n\n if (command === \"whoami\") {\n const stored = await readDeveloperCredentials();\n const envToken = process.env.HYPRCART_DEVELOPER_TOKEN;\n const tokenConfigured = Boolean(envToken || (stored && !credentialsExpired(stored)));\n return success(\"whoami\", {\n realm: \"developer\",\n email: process.env.HYPRCART_DEVELOPER_EMAIL ?? stored?.email ?? null,\n tokenConfigured,\n source: envToken ? \"env\" : stored ? \"credentials_file\" : \"none\",\n expiresAt: stored?.expiresAt ?? null,\n status: stored && credentialsExpired(stored) ? \"expired\" : tokenConfigured ? \"authenticated\" : \"anonymous\",\n });\n }\n\n const token = readFlag(args, \"--token\");\n if (token) {\n const email = readFlag(args, \"--email\") ?? null;\n const expiresAt = readFlag(args, \"--expires-at\") ?? new Date(Date.now() + 30 * 24 * 60 * 60 * 1000).toISOString();\n await writeDeveloperCredentials({ realm: \"developer\", token, email, expiresAt, savedAt: new Date().toISOString() });\n return success(\"login\", { realm: \"developer\", email, tokenConfigured: true, expiresAt, mode: \"token\" });\n }\n\n try {\n const result = await runBrowserLogin({\n openBrowser: !args.includes(\"--no-open\"),\n timeoutMs: Number(readFlag(args, \"--timeout-ms\") ?? 180_000),\n onMessage: (message) => process.stderr.write(`${message}\\n`),\n });\n return success(\"login\", {\n realm: \"developer\",\n email: result.email,\n tokenConfigured: true,\n expiresAt: result.expiresAt,\n loginUrl: result.loginUrl,\n mode: \"browser_callback\",\n });\n } catch (error) {\n return failure(\"login\", \"auth.login_failed\", error instanceof Error ? error.message : \"Hyprcart login failed.\");\n }\n}\n\nfunction readFlag(args: string[], name: string): string | undefined {\n const index = args.indexOf(name);\n const value = index >= 0 ? args[index + 1] : undefined;\n return value && !value.startsWith(\"--\") ? value : undefined;\n}\n","import { success } from \"../output/envelope\";\n\nconst docsBaseUrl = \"https://developer.hyprcart.com/docs/app-platform\";\n\nexport async function docsOpen(args: string[]) {\n const topic = args[0] ?? \"overview\";\n return success(\"docs.open\", { topic, url: `${docsBaseUrl}/${topic}` });\n}\n","import { developerToolingOperationMetadata } from \"@hyprcart/app-manifest\";\nimport { success } from \"../output/envelope\";\n\nexport async function schemaExport() {\n return success(\"schema.export\", {\n schemaVersion: \"2026-06\",\n platformVersion: \"2026-06\",\n operationMetadata: developerToolingOperationMetadata,\n docsUrls: [\"https://developer.hyprcart.com/docs/app-platform\"],\n });\n}\n","import { appContracts } from \"./commands/app-contracts\";\nimport { appDeploy } from \"./commands/app-deploy\";\nimport { appDev } from \"./commands/app-dev\";\nimport { appInit } from \"./commands/app-init\";\nimport { appInstallLink } from \"./commands/app-install-link\";\nimport { appLink } from \"./commands/app-link\";\nimport { appLogs } from \"./commands/app-logs\";\nimport { appRollback } from \"./commands/app-rollback\";\nimport { appStatus } from \"./commands/app-status\";\nimport { appValidate } from \"./commands/app-validate\";\nimport { appVersionCreate } from \"./commands/app-version-create\";\nimport { authCommand } from \"./commands/auth\";\nimport { docsOpen } from \"./commands/docs-open\";\nimport { schemaExport } from \"./commands/schema-export\";\nimport { failure, type CommandEnvelope } from \"./output/envelope\";\nimport { realpathSync } from \"node:fs\";\nimport { fileURLToPath } from \"node:url\";\n\nexport async function runCli(argv = process.argv.slice(2)): Promise<CommandEnvelope> {\n const [root, second, third, ...rest] = argv;\n\n if (root === \"login\" || root === \"logout\" || root === \"whoami\") {\n return authCommand(root, commandArgs(second, third ? [third, ...rest] : rest));\n }\n\n if (root === \"docs\" && second === \"open\") {\n return docsOpen(commandArgs(third, rest));\n }\n\n if (root === \"schema\" && second === \"export\") {\n return schemaExport();\n }\n\n if (root !== \"app\") {\n return failure(\"unknown\", \"command.unknown\", \"Unknown command.\");\n }\n\n if (second === \"init\") return appInit(commandArgs(third, rest));\n if (second === \"list\") return appLink([\"--list\", ...commandArgs(third, rest)]);\n if (second === \"link\") return appLink(commandArgs(third, rest));\n if (second === \"dev\") return appDev(commandArgs(third, rest));\n if (second === \"validate\") return appValidate();\n if (second === \"contracts\" && third === \"generate\") return appContracts();\n if (second === \"version\" && third === \"create\") return appVersionCreate();\n if (second === \"deploy\") return appDeploy(commandArgs(third, rest));\n if (second === \"install-link\") return appInstallLink(commandArgs(third, rest));\n if (second === \"status\") return appStatus();\n if (second === \"logs\") return appLogs();\n if (second === \"rollback\") return appRollback(commandArgs(third, rest));\n\n return failure(\"app\", \"command.unknown\", \"Unknown app command.\");\n}\n\nfunction commandArgs(first: string | undefined, rest: string[]): string[] {\n return first ? [first, ...rest] : rest;\n}\n\nif (isCliEntryPoint()) {\n const result = await runCli();\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n process.exit(result.ok ? 0 : result.error?.code.startsWith(\"auth.\") ? 3 : 1);\n}\n\nexport type { CommandEnvelope };\n\nfunction isCliEntryPoint() {\n try {\n return realpathSync(fileURLToPath(import.meta.url)) === realpathSync(process.argv[1] ?? \"\");\n } catch {\n return false;\n }\n}\n"],"mappings":"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","names":["readFlag","mkdir","join","join","readFlag","join","mkdir","readFlag","mkdir","readFile","writeFile","join","mkdir","readFile","writeFile","dirname","join","readFlag","developerOrigin","payload","readFlag","readFlag"]}
1
+ {"version":3,"sources":["../src/commands/app-contracts.ts","../src/config/manifest.ts","../src/output/envelope.ts","../src/commands/app-deploy.ts","../src/commands/app-dev.ts","../src/commands/app-init.ts","../src/templates/materialize.ts","../src/commands/app-install-link.ts","../src/config/project-link.ts","../src/auth/credentials.ts","../src/api/developer-apps.ts","../src/commands/app-link.ts","../src/commands/app-logs.ts","../src/commands/app-rollback.ts","../src/commands/app-status.ts","../src/commands/app-validate.ts","../src/commands/app-version-create.ts","../src/auth/browser-login.ts","../src/commands/auth.ts","../src/commands/docs-open.ts","../src/commands/schema-export.ts","../src/index.ts"],"sourcesContent":["import { generateContracts, type AppManifest } from \"@hyprcart/app-manifest\";\nimport { fallbackManifest, loadProjectManifest } from \"../config/manifest\";\nimport { success } from \"../output/envelope\";\n\nexport async function appContracts(manifest?: AppManifest) {\n const result = generateContracts(manifest ?? (await loadProjectManifest()) ?? fallbackManifest());\n return success(\"app.contracts.generate\", result);\n}\n","import { readFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport type { AppManifest } from \"@hyprcart/app-manifest\";\n\nconst manifestCandidates = [\"hyprcart.app.config.ts\", \"hyprcart.app.config.mjs\", \"hyprcart.app.config.js\", \"hyprcart.app.json\"];\n\nexport async function loadProjectManifest(cwd = process.cwd()): Promise<AppManifest | null> {\n for (const candidate of manifestCandidates) {\n const path = join(cwd, candidate);\n try {\n const source = await readFile(path, \"utf8\");\n if (candidate.endsWith(\".json\")) return JSON.parse(source) as AppManifest;\n return evaluateConfigModule(source) as AppManifest;\n } catch (error) {\n if (isMissingFileError(error)) continue;\n throw new Error(`Unable to read ${candidate}: ${error instanceof Error ? error.message : \"invalid manifest\"}`);\n }\n }\n return null;\n}\n\nexport function fallbackManifest(name = \"Local app\"): AppManifest {\n return {\n name,\n version: \"0.1.0\",\n manifestVersion: \"2026-06\",\n sdkVersion: \"1.0.0\",\n platformCompatibility: \"2026-06\",\n scopes: [\"product:read\"],\n surfaces: [{ id: \"reviews\", type: \"storefront_block\", entry: \"src/storefront/reviews.tsx\", label: { en: \"Reviews\", de: \"Bewertungen\" } }],\n translations: { en: { \"reviews.label\": \"Reviews\" }, de: { \"reviews.label\": \"Bewertungen\" } },\n };\n}\n\nfunction evaluateConfigModule(source: string): unknown {\n const expression = source\n .replace(/^\\s*export\\s+default\\s+/m, \"return \")\n .replace(/;\\s*$/, \"\");\n if (!/^\\s*return\\s+/.test(expression)) {\n throw new Error(\"expected a default-exported manifest object\");\n }\n return new Function(expression)();\n}\n\nfunction isMissingFileError(error: unknown): boolean {\n return Boolean(error && typeof error === \"object\" && \"code\" in error && (error as { code: string }).code === \"ENOENT\");\n}\n","export interface CommandEnvelope<TData = unknown> {\n ok: boolean;\n requestId: string;\n command: string;\n data?: TData;\n error?: {\n code: string;\n message: string;\n path?: string;\n docsUrl?: string;\n };\n}\n\nexport function success<TData>(command: string, data: TData, requestId = createRequestId()): CommandEnvelope<TData> {\n return { ok: true, command, requestId, data };\n}\n\nexport function failure(command: string, code: string, message: string, requestId = createRequestId(), docsUrl?: string): CommandEnvelope {\n return {\n ok: false,\n command,\n requestId,\n error: { code, message: redactMessage(message), docsUrl },\n };\n}\n\nexport function createRequestId(): string {\n return `req_cli_${Date.now().toString(36)}`;\n}\n\nfunction redactMessage(message: string): string {\n return message\n .replace(/hcdev_[a-z0-9_]+/gi, \"[redacted]\")\n .replace(/Bearer\\s+[a-z0-9._-]+/gi, \"[redacted]\")\n .replace(/[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,}/gi, \"[redacted]\");\n}\n","import { success } from \"../output/envelope\";\n\nexport async function appDeploy(args: string[]) {\n const env = readFlag(args, \"--env\") ?? \"development\";\n return success(\"app.deploy\", {\n environment: env,\n appVersionId: `devver_${Date.now().toString(36)}`,\n runtimeDeploymentId: `rtdep_${Date.now().toString(36)}`,\n status: \"deployed\",\n healthChecked: args.includes(\"--wait\"),\n });\n}\n\nfunction readFlag(args: string[], name: string): string | undefined {\n const index = args.indexOf(name);\n return index >= 0 ? args[index + 1] : undefined;\n}\n","import { createPreviewServer, previewSurface } from \"@hyprcart/app-testing\";\nimport { success } from \"../output/envelope\";\n\nexport async function appDev(args: string[]) {\n const fixtureId = readFlag(args, \"--fixture\");\n const state = createPreviewServer();\n const preview = await previewSurface(state, \"storefront_block\", fixtureId);\n return success(\"app.dev\", {\n previewUrl: \"http://localhost:8788\",\n html: preview.html,\n diagnostics: state.diagnostics,\n remoteVersionCreated: state.remoteVersionCreated,\n });\n}\n\nfunction readFlag(args: string[], name: string): string | undefined {\n const index = args.indexOf(name);\n return index >= 0 ? args[index + 1] : undefined;\n}\n","import { mkdir } from \"node:fs/promises\";\nimport { join } from \"node:path\";\nimport { failure, success } from \"../output/envelope\";\nimport { isStarterTemplateKind, materializeTemplate, starterTemplate } from \"../templates/materialize\";\n\nexport async function appInit(args: string[], cwd = process.cwd()) {\n const name = positionalArgs(args)[0] ?? \"my-hyprcart-app\";\n const template = readFlag(args, \"--template\") ?? \"storefront-block\";\n if (!isStarterTemplateKind(template)) {\n return failure(\"app.init\", \"template.unsupported\", `Unsupported template: ${template}.`);\n }\n const target = join(cwd, name);\n await mkdir(target, { recursive: true });\n const files = await materializeTemplate(starterTemplate(name, template), target);\n return success(\"app.init\", { projectPath: target, template, files });\n}\n\nfunction readFlag(args: string[], name: string): string | undefined {\n const index = args.indexOf(name);\n return index >= 0 ? args[index + 1] : undefined;\n}\n\nfunction positionalArgs(args: string[]): string[] {\n return args.filter((arg, index) => !arg.startsWith(\"--\") && !args[index - 1]?.startsWith(\"--\"));\n}\n","import { mkdir, writeFile } from \"node:fs/promises\";\nimport { dirname, join } from \"node:path\";\n\nexport interface TemplateFile {\n path: string;\n content: string;\n}\n\nexport type StarterTemplateKind =\n | \"storefront-block\"\n | \"admin-surface\"\n | \"checkout-function\"\n | \"pixel-event\"\n | \"multi-surface\";\n\nexport function starterTemplate(appName: string, kind: StarterTemplateKind = \"storefront-block\"): TemplateFile[] {\n const surface = surfaceForTemplate(kind);\n return [\n {\n path: \"hyprcart.app.config.ts\",\n content: `export default {\n name: ${JSON.stringify(appName)},\n version: \"0.1.0\",\n manifestVersion: \"2026-06\",\n sdkVersion: \"1.0.0\",\n platformCompatibility: \"2026-06\",\n scopes: [\"product:read\"],\n surfaces: [${JSON.stringify(surface)}],\n translations: { en: { \"reviews.label\": \"Reviews\" }, de: { \"reviews.label\": \"Bewertungen\" } },\n resources: { bundleSizeBytes: 42000 }\n};\n`,\n },\n {\n path: \"package.json\",\n content: `${JSON.stringify(\n {\n name: appName,\n version: \"0.1.0\",\n type: \"module\",\n scripts: {\n dev: \"hyprcart app dev\",\n validate: \"hyprcart app validate\",\n contracts: \"hyprcart app contracts generate\",\n test: \"vitest run tests\",\n \"test:preview\": \"playwright test playwright/app-preview.spec.ts\",\n \"deploy:dev\": \"hyprcart app deploy --env development\",\n \"install-link\": \"hyprcart app install-link create\",\n },\n dependencies: {\n \"@hyprcart/app-sdk\": \"^1.0.0\",\n },\n devDependencies: {\n \"@hyprcart/cli\": \"^1.0.0\",\n \"@hyprcart/app-testing\": \"^1.0.0\",\n \"@playwright/test\": \"^1.60.0\",\n vitest: \"^4.0.18\",\n typescript: \"^5.7.2\",\n },\n },\n null,\n 2,\n )}\\n`,\n },\n { path: surface.entry, content: `export function HyprcartSurface() { return \"<section>${kind}</section>\"; }\\n` },\n { path: \"locales/en.json\", content: `${JSON.stringify({ \"reviews.label\": \"Reviews\" }, null, 2)}\\n` },\n { path: \"locales/de.json\", content: `${JSON.stringify({ \"reviews.label\": \"Bewertungen\" }, null, 2)}\\n` },\n { path: \"fixtures/product.basic.json\", content: `${JSON.stringify({ id: \"prod_1\", title: \"Deep Moisture\" }, null, 2)}\\n` },\n { path: \"tests/validation.test.ts\", content: `import { describe, expect, it } from \"vitest\";\\ndescribe(\"app\", () => { it(\"has tests\", () => expect(true).toBe(true)); });\\n` },\n {\n path: \"playwright/app-preview.spec.ts\",\n content: `import { expect, test } from \"@playwright/test\";\\n\\ntest(\"preview renders a page\", async ({ page }) => {\\n await page.goto(process.env.HYPRCART_PREVIEW_URL ?? \"http://localhost:8788\");\\n await expect(page.locator(\"body\")).toBeVisible();\\n});\\n`,\n },\n {\n path: \"README.md\",\n content: `# ${appName}\\n\\nEdit \\`hyprcart.app.config.ts\\` in your IDE, then run \\`npx hyprcart login\\` and \\`npx hyprcart app link\\` to choose an existing app, or \\`npx hyprcart app link --create\\` to create one from this project.\\n\\nRun \\`npm run dev\\`, \\`npm run validate\\`, and \\`npm run deploy:dev\\`.\\n\\nFor one-off CLI commands, use \\`npx hyprcart <command>\\` unless you installed \\`@hyprcart/cli\\` globally.\\n`,\n },\n ];\n}\n\nexport function isStarterTemplateKind(value: string): value is StarterTemplateKind {\n return [\"storefront-block\", \"admin-surface\", \"checkout-function\", \"pixel-event\", \"multi-surface\"].includes(value);\n}\n\nfunction surfaceForTemplate(kind: StarterTemplateKind) {\n if (kind === \"admin-surface\") {\n return { id: \"reviews\", type: \"admin_surface\", entry: \"src/admin/reviews.tsx\", label: { en: \"Reviews\", de: \"Bewertungen\" } };\n }\n if (kind === \"checkout-function\") {\n return { id: \"reviews\", type: \"checkout_function\", entry: \"src/checkout/reviews.ts\", label: { en: \"Reviews\", de: \"Bewertungen\" } };\n }\n if (kind === \"pixel-event\") {\n return { id: \"reviews\", type: \"pixel\", entry: \"src/pixel/reviews.ts\", label: { en: \"Reviews\", de: \"Bewertungen\" } };\n }\n if (kind === \"multi-surface\") {\n return { id: \"reviews\", type: \"storefront_block\", entry: \"src/storefront/reviews.tsx\", label: { en: \"Reviews\", de: \"Bewertungen\" } };\n }\n return { id: \"reviews\", type: \"storefront_block\", entry: \"src/storefront/reviews.tsx\", label: { en: \"Reviews\", de: \"Bewertungen\" } };\n}\n\nexport async function materializeTemplate(files: TemplateFile[], cwd: string): Promise<string[]> {\n const written: string[] = [];\n for (const file of files) {\n const fullPath = join(cwd, file.path);\n await mkdir(dirname(fullPath), { recursive: true });\n await writeFile(fullPath, file.content, { flag: \"wx\" });\n written.push(file.path);\n }\n return written;\n}\n","import { failure, success } from \"../output/envelope\";\n\nexport async function appInstallLink(args: string[]) {\n const subcommand = args[0];\n if (subcommand === \"revoke\") {\n return success(\"app.install-link.revoke\", { privateInstallUrlId: args[1], status: \"revoked\" });\n }\n\n const orgId = readFlag(args, \"--org\");\n if (!orgId) {\n return failure(\"app.install-link.create\", \"organization.missing\", \"Provide --org <orgId>.\");\n }\n\n const token = `hcdev_${Date.now().toString(36)}`;\n const privateInstallUrlId = `hcil_${Date.now().toString(36)}`;\n const installUrl = new URL(\"https://hyprcart.com/apps/install/private\");\n installUrl.searchParams.set(\"hcil\", privateInstallUrlId);\n installUrl.searchParams.set(\"token\", token);\n\n return success(\"app.install-link.create\", {\n privateInstallUrlId,\n installUrl: installUrl.toString(),\n appVersionId: readFlag(args, \"--version\") ?? \"devver_local\",\n environment: readFlag(args, \"--env\") ?? \"development\",\n allowedOrganizationId: orgId,\n allowedUserEmail: readFlag(args, \"--user\"),\n expiresAt: readFlag(args, \"--expires-at\") ?? null,\n maxUses: Number(readFlag(args, \"--max-uses\") ?? 1),\n });\n}\n\nfunction readFlag(args: string[], name: string): string | undefined {\n const index = args.indexOf(name);\n return index >= 0 ? args[index + 1] : undefined;\n}\n","import { mkdir, readFile, rename, writeFile } from \"node:fs/promises\";\nimport { join } from \"node:path\";\n\nexport interface ProjectLink {\n appId: string;\n teamId: string;\n appSlug: string;\n environment: string;\n developerApiUrl: string;\n linkedAt: string;\n previousLinks?: ProjectLink[];\n}\n\nconst linkDirectory = \".hyprcart\";\nconst linkFile = \"project.json\";\n\nexport async function readProjectLink(cwd = process.cwd()): Promise<ProjectLink | null> {\n try {\n const raw = await readFile(join(cwd, linkDirectory, linkFile), \"utf8\");\n return JSON.parse(raw) as ProjectLink;\n } catch {\n return null;\n }\n}\n\nexport async function writeProjectLink(link: ProjectLink, cwd = process.cwd(), force = false): Promise<ProjectLink> {\n const existing = await readProjectLink(cwd);\n if (existing && existing.appId !== link.appId && !force) {\n throw new Error(\"Project is already linked to another app. Re-run with --force to relink.\");\n }\n\n await mkdir(join(cwd, linkDirectory), { recursive: true });\n\n if (existing && existing.appId !== link.appId) {\n await rename(join(cwd, linkDirectory, linkFile), join(cwd, linkDirectory, `project.${Date.now()}.previous.json`));\n }\n\n const next = {\n ...link,\n previousLinks: existing && existing.appId !== link.appId ? [existing, ...(existing.previousLinks ?? [])] : existing?.previousLinks,\n };\n await writeFile(join(cwd, linkDirectory, linkFile), `${JSON.stringify(next, null, 2)}\\n`);\n return next;\n}\n","import { mkdir, readFile, rm, writeFile } from \"node:fs/promises\";\nimport { homedir } from \"node:os\";\nimport { dirname, join } from \"node:path\";\n\nexport interface StoredDeveloperCredentials {\n realm: \"developer\";\n email: string | null;\n token: string;\n expiresAt: string;\n savedAt: string;\n}\n\nexport function credentialsPath(env: Record<string, string | undefined> = process.env): string {\n const base = env.HYPRCART_CONFIG_HOME ?? join(homedir(), \".hyprcart\");\n return join(base, \"credentials.json\");\n}\n\nexport async function readDeveloperCredentials(env: Record<string, string | undefined> = process.env): Promise<StoredDeveloperCredentials | null> {\n try {\n const parsed = JSON.parse(await readFile(credentialsPath(env), \"utf8\")) as StoredDeveloperCredentials;\n if (parsed.realm !== \"developer\" || !parsed.token) return null;\n return parsed;\n } catch {\n return null;\n }\n}\n\nexport async function writeDeveloperCredentials(credentials: StoredDeveloperCredentials, env: Record<string, string | undefined> = process.env): Promise<void> {\n const path = credentialsPath(env);\n await mkdir(dirname(path), { recursive: true });\n await writeFile(path, `${JSON.stringify(credentials, null, 2)}\\n`, { mode: 0o600 });\n}\n\nexport async function clearDeveloperCredentials(env: Record<string, string | undefined> = process.env): Promise<void> {\n await rm(credentialsPath(env), { force: true });\n}\n\nexport function credentialsExpired(credentials: StoredDeveloperCredentials, now = new Date()): boolean {\n return new Date(credentials.expiresAt).getTime() <= now.getTime();\n}\n","import type { AppManifest } from \"@hyprcart/app-manifest\";\n\nexport interface DeveloperCliApp {\n id: string;\n teamId: string;\n teamName: string;\n slug: string;\n displayName: string;\n status: string;\n latestDraftVersionId: string | null;\n latestValidatedVersionId: string | null;\n}\n\nexport interface DeveloperCliTeam {\n id: string;\n slug: string;\n name: string;\n role: string;\n apps: DeveloperCliApp[];\n}\n\nexport interface DeveloperCliAppsPayload {\n account: { id: string; email: string };\n teams: DeveloperCliTeam[];\n}\n\nexport async function listDeveloperApps(options: DeveloperCliApiOptions): Promise<DeveloperCliAppsPayload> {\n const response = await callCliAppsApi(`${developerOrigin(options)}/cli/apps`, {\n method: \"GET\",\n token: options.token,\n fetchImpl: options.fetchImpl,\n });\n return response.data as DeveloperCliAppsPayload;\n}\n\nexport async function createDeveloperApp(\n input: { teamId?: string; name: string; slug?: string; description?: string; manifest: AppManifest },\n options: DeveloperCliApiOptions,\n): Promise<DeveloperCliAppsPayload & { app: DeveloperCliApp }> {\n const response = await callCliAppsApi(`${developerOrigin(options)}/cli/apps`, {\n method: \"POST\",\n token: options.token,\n fetchImpl: options.fetchImpl,\n body: JSON.stringify(input),\n });\n return response.data as DeveloperCliAppsPayload & { app: DeveloperCliApp };\n}\n\nasync function callCliAppsApi(\n url: string,\n options: { method: \"GET\" | \"POST\"; token: string; fetchImpl?: typeof fetch; body?: string },\n): Promise<{ data: unknown }> {\n const response = await (options.fetchImpl ?? fetch)(url, {\n method: options.method,\n headers: {\n Authorization: `Bearer ${options.token}`,\n ...(options.body ? { \"content-type\": \"application/json\" } : {}),\n },\n body: options.body,\n });\n const payload = (await response.json().catch(() => null)) as ApiPayload | null;\n if (!response.ok || !payload?.ok) {\n const error = payload?.error;\n throw new DeveloperCliApiError(error?.code ?? \"developer_api.failed\", error?.message ?? \"Developer API request failed.\", payload?.data);\n }\n return { data: payload.data };\n}\n\nfunction developerOrigin(options: DeveloperCliApiOptions): string {\n return (options.origin ?? \"https://developer.hyprcart.com\").replace(/\\/$/, \"\");\n}\n\nexport class DeveloperCliApiError extends Error {\n constructor(\n public code: string,\n message: string,\n public data?: unknown,\n ) {\n super(message);\n }\n}\n\ntype DeveloperCliApiOptions = {\n token: string;\n origin?: string;\n fetchImpl?: typeof fetch;\n};\n\ntype ApiPayload = {\n ok: boolean;\n data?: unknown;\n error?: { code: string; message: string };\n};\n","import { failure, success } from \"../output/envelope\";\nimport { writeProjectLink } from \"../config/project-link\";\nimport { credentialsExpired, readDeveloperCredentials } from \"../auth/credentials\";\nimport { fallbackManifest, loadProjectManifest } from \"../config/manifest\";\nimport { createDeveloperApp, DeveloperCliApiError, listDeveloperApps, type DeveloperCliApp, type DeveloperCliAppsPayload, type DeveloperCliTeam } from \"../api/developer-apps\";\nimport { createInterface } from \"node:readline/promises\";\nimport type { Readable, Writable } from \"node:stream\";\n\nexport async function appLink(args: string[], cwd = process.cwd(), options: AppLinkOptions = {}) {\n const environment = readFlag(args, \"--env\") ?? \"development\";\n const developerApiUrl = readFlag(args, \"--api\") ?? \"https://developer.hyprcart.com/api/graphql\";\n const developerOrigin = readFlag(args, \"--developer-origin\") ?? \"https://developer.hyprcart.com\";\n const force = args.includes(\"--force\");\n const yes = args.includes(\"--yes\") || args.includes(\"-y\");\n const appId = readFlag(args, \"--app\");\n const explicitTeamId = readFlag(args, \"--team\");\n\n if (appId) {\n const resolved = await resolveExplicitApp(appId, explicitTeamId, developerOrigin, options);\n return writeResolvedProjectLink(resolved.app, environment, developerApiUrl, cwd, force);\n }\n\n const token = await resolveDeveloperToken(options.env);\n if (!token) {\n return failure(\"app.link\", \"auth.missing\", \"Run npx hyprcart login, then rerun npx hyprcart app link.\");\n }\n\n const manifest = (await loadProjectManifest(cwd).catch((error) => {\n throw error;\n })) ?? fallbackManifest();\n\n try {\n if (args.includes(\"--list\")) {\n const payload = await listDeveloperApps({ token, origin: developerOrigin, fetchImpl: options.fetchImpl });\n return success(\"app.link.list\", payload);\n }\n\n const payload = await listDeveloperApps({ token, origin: developerOrigin, fetchImpl: options.fetchImpl });\n const selected = args.includes(\"--create\")\n ? await createAppFromProject({\n args,\n manifest,\n payload,\n token,\n developerOrigin,\n fetchImpl: options.fetchImpl,\n input: options.input,\n output: options.output,\n isTTY: options.isTTY ?? Boolean(process.stdin.isTTY),\n })\n : await selectAppOrCreate({\n args,\n manifest,\n payload,\n token,\n developerOrigin,\n fetchImpl: options.fetchImpl,\n input: options.input,\n output: options.output,\n isTTY: options.isTTY ?? Boolean(process.stdin.isTTY),\n });\n\n if (!selected.ok) return selected.result;\n const confirmed = await confirmLink({\n app: selected.app,\n accountEmail: selected.accountEmail,\n yes,\n input: options.input,\n output: options.output,\n isTTY: options.isTTY ?? Boolean(process.stdin.isTTY),\n });\n if (!confirmed.ok) return confirmed.result;\n return writeResolvedProjectLink(selected.app, environment, developerApiUrl, cwd, force);\n } catch (error) {\n if (error instanceof DeveloperCliApiError) return failure(\"app.link\", error.code, error.message);\n return failure(\"app.link\", \"project.link.failed\", error instanceof Error ? error.message : \"Project link failed.\");\n }\n}\n\nfunction readFlag(args: string[], name: string): string | undefined {\n const index = args.indexOf(name);\n const value = index >= 0 ? args[index + 1] : undefined;\n return value && !value.startsWith(\"--\") ? value : undefined;\n}\n\nasync function resolveDeveloperToken(env: Record<string, string | undefined> = process.env): Promise<string | null> {\n if (env.HYPRCART_DEVELOPER_TOKEN) return env.HYPRCART_DEVELOPER_TOKEN;\n const credentials = await readDeveloperCredentials(env);\n return credentials && !credentialsExpired(credentials) ? credentials.token : null;\n}\n\nasync function resolveExplicitApp(appId: string, explicitTeamId: string | undefined, developerOrigin: string, options: AppLinkOptions) {\n const token = await resolveDeveloperToken(options.env);\n if (token) {\n const payload = await listDeveloperApps({ token, origin: developerOrigin, fetchImpl: options.fetchImpl }).catch(() => null);\n const app = payload ? flattenApps(payload.teams).find((candidate) => candidate.id === appId) : null;\n if (app) return { ok: true as const, app };\n }\n\n const teamId = explicitTeamId ?? \"devteam_local\";\n return {\n ok: true as const,\n app: {\n id: appId,\n teamId,\n teamName: teamId,\n slug: appId,\n displayName: appId,\n status: \"draft\",\n latestDraftVersionId: null,\n latestValidatedVersionId: null,\n },\n };\n}\n\nasync function selectAppOrCreate(input: {\n args: string[];\n manifest: ReturnType<typeof fallbackManifest>;\n payload: DeveloperCliAppsPayload;\n token: string;\n developerOrigin: string;\n fetchImpl?: typeof fetch;\n input?: Readable;\n output?: Writable;\n isTTY: boolean;\n}): Promise<SelectedAppResult> {\n const apps = flattenApps(input.payload.teams);\n if (!input.isTTY) {\n return {\n ok: false,\n result: failure(\n \"app.link\",\n \"app.selection_required\",\n apps.length > 0\n ? \"Choose an app with --app <appId>, or run interactively to select from your registered apps.\"\n : \"No registered apps found. Run npx hyprcart app link --create --yes to create one from this project.\",\n ),\n };\n }\n\n const rl = createInterface({\n input: input.input ?? process.stdin,\n output: input.output ?? process.stderr,\n });\n let selectedIndex = Number.NaN;\n try {\n const choices = apps.map((app, index) => `${index + 1}. ${app.displayName} (${app.id}) - ${app.teamName}`);\n const createIndex = apps.length + 1;\n writeLine(input.output, `\\nHyprcart app link for ${input.payload.account.email}`);\n if (choices.length > 0) writeLine(input.output, choices.join(\"\\n\"));\n writeLine(input.output, `${createIndex}. Create new app from ${input.manifest.name}`);\n const answer = (await rl.question(`Choose an app [1-${createIndex}]: `)).trim();\n selectedIndex = Number.parseInt(answer, 10);\n } finally {\n rl.close();\n }\n\n if (selectedIndex >= 1 && selectedIndex <= apps.length) {\n return { ok: true, app: apps[selectedIndex - 1]!, accountEmail: input.payload.account.email };\n }\n if (selectedIndex === apps.length + 1) {\n return createAppFromProject(input);\n }\n return { ok: false, result: failure(\"app.link\", \"app.selection_invalid\", \"Choose a listed app number.\") };\n}\n\nasync function createAppFromProject(input: {\n args: string[];\n manifest: ReturnType<typeof fallbackManifest>;\n payload: DeveloperCliAppsPayload;\n token: string;\n developerOrigin: string;\n fetchImpl?: typeof fetch;\n input?: Readable;\n output?: Writable;\n isTTY: boolean;\n}): Promise<SelectedAppResult> {\n const name = readFlag(input.args, \"--name\") ?? input.manifest.name;\n const slug = readFlag(input.args, \"--slug\");\n const team = await resolveTeamForCreate(input);\n if (!team.ok) return team;\n const created = await createDeveloperApp(\n {\n teamId: team.teamId,\n name,\n slug,\n manifest: input.manifest,\n },\n { token: input.token, origin: input.developerOrigin, fetchImpl: input.fetchImpl },\n );\n return { ok: true, app: created.app, accountEmail: created.account.email };\n}\n\nasync function resolveTeamForCreate(input: {\n args: string[];\n payload: DeveloperCliAppsPayload;\n input?: Readable;\n output?: Writable;\n isTTY: boolean;\n}): Promise<{ ok: true; teamId: string } | { ok: false; result: ReturnType<typeof failure> }> {\n const explicitTeamId = readFlag(input.args, \"--team\");\n if (explicitTeamId) return { ok: true, teamId: explicitTeamId };\n\n if (input.payload.teams.length === 0) {\n return { ok: false, result: failure(\"app.link\", \"team.missing\", \"Create or join a Developer Console team before creating an app from this project.\") };\n }\n if (input.payload.teams.length === 1) {\n return { ok: true, teamId: input.payload.teams[0]!.id };\n }\n if (!input.isTTY) {\n return { ok: false, result: failure(\"app.link\", \"team.selection_required\", \"Choose which developer team should own the new app with --team <teamId>, or run interactively to select one.\") };\n }\n\n const rl = createInterface({\n input: input.input ?? process.stdin,\n output: input.output ?? process.stderr,\n });\n try {\n writeLine(input.output, \"\\nChoose a developer team for the new app\");\n input.payload.teams.forEach((team, index) => writeLine(input.output, `${index + 1}. ${team.name} (${team.id})`));\n const answer = (await rl.question(`Choose a team [1-${input.payload.teams.length}]: `)).trim();\n const selectedIndex = Number.parseInt(answer, 10);\n const selectedTeam = input.payload.teams[selectedIndex - 1];\n if (!selectedTeam) {\n return { ok: false, result: failure(\"app.link\", \"team.selection_invalid\", \"Choose a listed developer team number.\") };\n }\n return { ok: true, teamId: selectedTeam.id };\n } finally {\n rl.close();\n }\n}\n\nasync function confirmLink(input: {\n app: DeveloperCliApp;\n accountEmail: string;\n yes: boolean;\n input?: Readable;\n output?: Writable;\n isTTY: boolean;\n}) {\n if (input.yes) return { ok: true as const };\n if (!input.isTTY) {\n return { ok: false as const, result: failure(\"app.link\", \"confirmation.required\", \"Re-run with --yes to confirm linking this project to your Developer Console account.\") };\n }\n\n const rl = createInterface({\n input: input.input ?? process.stdin,\n output: input.output ?? process.stderr,\n });\n try {\n const answer = (\n await rl.question(`Link this project as ${input.accountEmail} to ${input.app.displayName} (${input.app.id})? [y/N] `)\n )\n .trim()\n .toLowerCase();\n if (answer === \"y\" || answer === \"yes\") return { ok: true as const };\n return { ok: false as const, result: failure(\"app.link\", \"confirmation.declined\", \"Project link cancelled.\") };\n } finally {\n rl.close();\n }\n}\n\nasync function writeResolvedProjectLink(app: DeveloperCliApp, environment: string, developerApiUrl: string, cwd: string, force: boolean) {\n try {\n const link = await writeProjectLink(\n {\n appId: app.id,\n teamId: app.teamId,\n appSlug: app.slug,\n environment,\n developerApiUrl,\n linkedAt: new Date().toISOString(),\n },\n cwd,\n force,\n );\n return success(\"app.link\", { ...link, appName: app.displayName, teamName: app.teamName });\n } catch (error) {\n return failure(\"app.link\", \"project.link.conflict\", error instanceof Error ? error.message : \"Project link failed.\");\n }\n}\n\nfunction flattenApps(teams: DeveloperCliTeam[]): DeveloperCliApp[] {\n return teams.flatMap((team) => team.apps);\n}\n\nfunction writeLine(output: Writable | undefined, line: string): void {\n (output ?? process.stderr).write(`${line}\\n`);\n}\n\ntype SelectedAppResult =\n | { ok: true; app: DeveloperCliApp; accountEmail: string }\n | { ok: false; result: ReturnType<typeof failure> };\n\ntype AppLinkOptions = {\n env?: Record<string, string | undefined>;\n fetchImpl?: typeof fetch;\n input?: Readable;\n output?: Writable;\n isTTY?: boolean;\n};\n","import { success } from \"../output/envelope\";\n\nexport async function appLogs() {\n return success(\"app.logs\", {\n nodes: [\n {\n requestId: \"req_local\",\n level: \"info\",\n message: \"No production logs in local CLI stub.\",\n redacted: true,\n },\n ],\n });\n}\n","import { failure, success } from \"../output/envelope\";\n\nexport async function appRollback(args: string[]) {\n const version = readFlag(args, \"--to\");\n if (!version) {\n return failure(\"app.rollback\", \"version.missing\", \"Provide --to <versionId>.\");\n }\n return success(\"app.rollback\", { status: \"rolled_back\", appVersionId: version });\n}\n\nfunction readFlag(args: string[], name: string): string | undefined {\n const index = args.indexOf(name);\n return index >= 0 ? args[index + 1] : undefined;\n}\n","import { success } from \"../output/envelope\";\n\nexport async function appStatus() {\n return success(\"app.status\", { environment: \"development\", status: \"deployed\" });\n}\n","import { validateManifest, type AppManifest } from \"@hyprcart/app-manifest\";\nimport { fallbackManifest, loadProjectManifest } from \"../config/manifest\";\nimport { success } from \"../output/envelope\";\n\nexport async function appValidate(manifest?: AppManifest) {\n const result = validateManifest(manifest ?? (await loadProjectManifest()) ?? fallbackManifest());\n return success(\"app.validate\", result);\n}\n","import { success } from \"../output/envelope\";\n\nexport async function appVersionCreate() {\n return success(\"app.version.create\", {\n appVersionId: `devver_${Date.now().toString(36)}`,\n state: \"draft\",\n runtimeDeploymentRequested: false,\n });\n}\n","import { spawn } from \"node:child_process\";\nimport { createServer, type Server } from \"node:http\";\nimport { randomBytes } from \"node:crypto\";\nimport { writeDeveloperCredentials, type StoredDeveloperCredentials } from \"./credentials\";\n\nexport interface BrowserLoginResult {\n email: string | null;\n expiresAt: string;\n loginUrl: string;\n credentialsPathWritten: boolean;\n}\n\nexport async function runBrowserLogin(options: {\n openBrowser?: boolean;\n timeoutMs?: number;\n developerOrigin?: string;\n env?: Record<string, string | undefined>;\n onMessage?: (message: string) => void;\n} = {}): Promise<BrowserLoginResult> {\n const server = createServer();\n const state = randomBytes(24).toString(\"base64url\");\n const callback = await listenOnLoopback(server);\n const loginUrl = new URL(\"/cli/auth/start\", options.developerOrigin ?? \"https://developer.hyprcart.com\");\n loginUrl.searchParams.set(\"redirect_uri\", callback.redirectUri);\n loginUrl.searchParams.set(\"state\", state);\n\n const waitForCallback = waitForLoginCallback(server, state, options.timeoutMs ?? 180_000);\n options.onMessage?.(`Open ${loginUrl.toString()} to finish Hyprcart CLI login.`);\n if (options.openBrowser !== false) {\n openBrowser(loginUrl.toString(), options.onMessage);\n }\n\n try {\n const credentials = await waitForCallback;\n await writeDeveloperCredentials(credentials, options.env);\n return {\n email: credentials.email,\n expiresAt: credentials.expiresAt,\n loginUrl: loginUrl.toString(),\n credentialsPathWritten: true,\n };\n } finally {\n await closeServer(server);\n }\n}\n\nasync function listenOnLoopback(server: Server): Promise<{ redirectUri: string }> {\n await new Promise<void>((resolve, reject) => {\n server.once(\"error\", reject);\n server.listen(0, \"127.0.0.1\", () => resolve());\n });\n const address = server.address();\n if (!address || typeof address === \"string\") throw new Error(\"Failed to start local login callback server.\");\n return { redirectUri: `http://127.0.0.1:${address.port}/callback` };\n}\n\nfunction waitForLoginCallback(server: Server, expectedState: string, timeoutMs: number): Promise<StoredDeveloperCredentials> {\n return new Promise((resolve, reject) => {\n const timeout = setTimeout(() => reject(new Error(\"Timed out waiting for Hyprcart login callback.\")), timeoutMs);\n server.on(\"request\", (request, response) => {\n const url = new URL(request.url ?? \"/\", \"http://127.0.0.1\");\n if (url.pathname !== \"/callback\") {\n response.writeHead(404).end(\"Not found\");\n return;\n }\n\n const state = url.searchParams.get(\"state\");\n const token = url.searchParams.get(\"token\");\n const email = url.searchParams.get(\"email\");\n const expiresAt = url.searchParams.get(\"expires_at\");\n const realm = url.searchParams.get(\"realm\");\n if (state !== expectedState || !token || !expiresAt || realm !== \"developer\") {\n response.writeHead(400, { \"content-type\": \"text/html; charset=utf-8\" }).end(\"<h1>Hyprcart CLI login failed</h1><p>Invalid callback.</p>\");\n clearTimeout(timeout);\n reject(new Error(\"Invalid Hyprcart login callback.\"));\n return;\n }\n\n response\n .writeHead(200, { \"content-type\": \"text/html; charset=utf-8\" })\n .end(\"<h1>Hyprcart CLI login complete</h1><p>You can close this tab and return to your terminal.</p>\");\n clearTimeout(timeout);\n resolve({\n realm: \"developer\",\n email,\n token,\n expiresAt,\n savedAt: new Date().toISOString(),\n });\n });\n });\n}\n\nfunction openBrowser(url: string, onMessage?: (message: string) => void): void {\n const command =\n process.platform === \"win32\"\n ? { file: \"rundll32.exe\", args: [\"url.dll,FileProtocolHandler\", url] }\n : process.platform === \"darwin\"\n ? { file: \"open\", args: [url] }\n : { file: \"xdg-open\", args: [url] };\n\n const child = spawn(command.file, command.args, { stdio: \"ignore\", detached: true });\n child.on(\"error\", () => onMessage?.(`Could not open browser automatically. Open ${url} manually.`));\n child.unref();\n}\n\nasync function closeServer(server: Server): Promise<void> {\n await new Promise<void>((resolve) => server.close(() => resolve()));\n}\n","import { clearDeveloperCredentials, credentialsExpired, readDeveloperCredentials, writeDeveloperCredentials } from \"../auth/credentials\";\nimport { runBrowserLogin } from \"../auth/browser-login\";\nimport { failure, success } from \"../output/envelope\";\n\nexport async function authCommand(command: \"login\" | \"logout\" | \"whoami\", args: string[] = []) {\n if (command === \"logout\") {\n await clearDeveloperCredentials();\n return success(\"logout\", { status: \"logged_out\" });\n }\n\n if (command === \"whoami\") {\n const stored = await readDeveloperCredentials();\n const envToken = process.env.HYPRCART_DEVELOPER_TOKEN;\n const tokenConfigured = Boolean(envToken || (stored && !credentialsExpired(stored)));\n return success(\"whoami\", {\n realm: \"developer\",\n email: process.env.HYPRCART_DEVELOPER_EMAIL ?? stored?.email ?? null,\n tokenConfigured,\n source: envToken ? \"env\" : stored ? \"credentials_file\" : \"none\",\n expiresAt: stored?.expiresAt ?? null,\n status: stored && credentialsExpired(stored) ? \"expired\" : tokenConfigured ? \"authenticated\" : \"anonymous\",\n });\n }\n\n const token = readFlag(args, \"--token\");\n if (token) {\n const email = readFlag(args, \"--email\") ?? null;\n const expiresAt = readFlag(args, \"--expires-at\") ?? new Date(Date.now() + 30 * 24 * 60 * 60 * 1000).toISOString();\n await writeDeveloperCredentials({ realm: \"developer\", token, email, expiresAt, savedAt: new Date().toISOString() });\n return success(\"login\", { realm: \"developer\", email, tokenConfigured: true, expiresAt, mode: \"token\" });\n }\n\n try {\n const result = await runBrowserLogin({\n openBrowser: !args.includes(\"--no-open\"),\n timeoutMs: Number(readFlag(args, \"--timeout-ms\") ?? 180_000),\n onMessage: (message) => process.stderr.write(`${message}\\n`),\n });\n return success(\"login\", {\n realm: \"developer\",\n email: result.email,\n tokenConfigured: true,\n expiresAt: result.expiresAt,\n loginUrl: result.loginUrl,\n mode: \"browser_callback\",\n });\n } catch (error) {\n return failure(\"login\", \"auth.login_failed\", error instanceof Error ? error.message : \"Hyprcart login failed.\");\n }\n}\n\nfunction readFlag(args: string[], name: string): string | undefined {\n const index = args.indexOf(name);\n const value = index >= 0 ? args[index + 1] : undefined;\n return value && !value.startsWith(\"--\") ? value : undefined;\n}\n","import { success } from \"../output/envelope\";\n\nconst docsBaseUrl = \"https://developer.hyprcart.com/docs/app-platform\";\n\nexport async function docsOpen(args: string[]) {\n const topic = args[0] ?? \"overview\";\n return success(\"docs.open\", { topic, url: `${docsBaseUrl}/${topic}` });\n}\n","import { developerToolingOperationMetadata } from \"@hyprcart/app-manifest\";\nimport { success } from \"../output/envelope\";\n\nexport async function schemaExport() {\n return success(\"schema.export\", {\n schemaVersion: \"2026-06\",\n platformVersion: \"2026-06\",\n operationMetadata: developerToolingOperationMetadata,\n docsUrls: [\"https://developer.hyprcart.com/docs/app-platform\"],\n });\n}\n","import { appContracts } from \"./commands/app-contracts\";\nimport { appDeploy } from \"./commands/app-deploy\";\nimport { appDev } from \"./commands/app-dev\";\nimport { appInit } from \"./commands/app-init\";\nimport { appInstallLink } from \"./commands/app-install-link\";\nimport { appLink } from \"./commands/app-link\";\nimport { appLogs } from \"./commands/app-logs\";\nimport { appRollback } from \"./commands/app-rollback\";\nimport { appStatus } from \"./commands/app-status\";\nimport { appValidate } from \"./commands/app-validate\";\nimport { appVersionCreate } from \"./commands/app-version-create\";\nimport { authCommand } from \"./commands/auth\";\nimport { docsOpen } from \"./commands/docs-open\";\nimport { schemaExport } from \"./commands/schema-export\";\nimport { failure, type CommandEnvelope } from \"./output/envelope\";\nimport { realpathSync } from \"node:fs\";\nimport { fileURLToPath } from \"node:url\";\n\nexport async function runCli(argv = process.argv.slice(2)): Promise<CommandEnvelope> {\n const [root, second, third, ...rest] = argv;\n\n if (root === \"login\" || root === \"logout\" || root === \"whoami\") {\n return authCommand(root, commandArgs(second, third ? [third, ...rest] : rest));\n }\n\n if (root === \"docs\" && second === \"open\") {\n return docsOpen(commandArgs(third, rest));\n }\n\n if (root === \"schema\" && second === \"export\") {\n return schemaExport();\n }\n\n if (root !== \"app\") {\n return failure(\"unknown\", \"command.unknown\", \"Unknown command.\");\n }\n\n if (second === \"init\") return appInit(commandArgs(third, rest));\n if (second === \"list\") return appLink([\"--list\", ...commandArgs(third, rest)]);\n if (second === \"link\") return appLink(commandArgs(third, rest));\n if (second === \"dev\") return appDev(commandArgs(third, rest));\n if (second === \"validate\") return appValidate();\n if (second === \"contracts\" && third === \"generate\") return appContracts();\n if (second === \"version\" && third === \"create\") return appVersionCreate();\n if (second === \"deploy\") return appDeploy(commandArgs(third, rest));\n if (second === \"install-link\") return appInstallLink(commandArgs(third, rest));\n if (second === \"status\") return appStatus();\n if (second === \"logs\") return appLogs();\n if (second === \"rollback\") return appRollback(commandArgs(third, rest));\n\n return failure(\"app\", \"command.unknown\", \"Unknown app command.\");\n}\n\nfunction commandArgs(first: string | undefined, rest: string[]): string[] {\n return first ? [first, ...rest] : rest;\n}\n\nif (isCliEntryPoint()) {\n const result = await runCli();\n process.stdout.write(`${JSON.stringify(result, null, 2)}\\n`);\n process.exit(result.ok ? 0 : result.error?.code.startsWith(\"auth.\") ? 3 : 1);\n}\n\nexport type { CommandEnvelope };\n\nfunction isCliEntryPoint() {\n try {\n return realpathSync(fileURLToPath(import.meta.url)) === realpathSync(process.argv[1] ?? \"\");\n } catch {\n return false;\n }\n}\n"],"mappings":"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","names":["readFlag","mkdir","join","join","readFlag","join","mkdir","readFlag","mkdir","readFile","writeFile","join","mkdir","readFile","writeFile","dirname","join","readFlag","developerOrigin","payload","readFlag","readFlag"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@hyprcart/cli",
3
- "version": "1.0.3",
3
+ "version": "1.0.4",
4
4
  "description": "Command line interface for building, validating, deploying, and installing Hyprcart apps.",
5
5
  "license": "UNLICENSED",
6
6
  "type": "module",