@stackframe/init-stack 2.8.55 → 2.8.58

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../package.json","../src/mcp.ts","../src/util.ts","../src/telegram.ts"],"sourcesContent":["import * as child_process from \"child_process\";\nimport { Command } from \"commander\";\nimport * as crypto from 'crypto';\nimport * as fs from \"fs\";\nimport inquirer from \"inquirer\";\nimport open from \"open\";\nimport * as os from 'os';\nimport * as path from \"path\";\nimport { PostHog } from 'posthog-node';\nimport packageJson from '../package.json';\nimport { scheduleMcpConfiguration } from \"./mcp\";\nimport { invokeCallback } from \"./telegram\";\nimport { Colorize, configureVerboseLogging, logVerbose, templateIdentity } from \"./util\";\n\nexport { templateIdentity } from \"./util\";\n\nconst jsLikeFileExtensions: string[] = [\n \"mtsx\",\n \"ctsx\",\n \"tsx\",\n \"mts\",\n \"cts\",\n \"ts\",\n \"mjsx\",\n \"cjsx\",\n \"jsx\",\n \"mjs\",\n \"cjs\",\n \"js\",\n];\n\nclass UserError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"UserError\";\n }\n}\n\nclass UnansweredQuestionError extends UserError {\n constructor(message: string) {\n super(message + \", or use --on-question <guess|ask> to answer questions automatically or interactively\");\n this.name = \"UnansweredQuestionError\";\n }\n}\n\ntype OnQuestionMode = \"ask\" | \"guess\" | \"error\";\n\nfunction isTruthyEnv(name: string): boolean {\n const v = process.env[name];\n if (!v) return false;\n const s = String(v).toLowerCase();\n return s === \"1\" || s === \"true\" || s === \"yes\";\n}\n\nfunction isNonInteractiveEnv(): boolean {\n if (isTruthyEnv(\"CI\")) return true;\n if (isTruthyEnv(\"GITHUB_ACTIONS\")) return true;\n if (isTruthyEnv(\"NONINTERACTIVE\")) return true;\n if (isTruthyEnv(\"NO_INTERACTIVE\")) return true;\n if (isTruthyEnv(\"PNPM_NON_INTERACTIVE\")) return true;\n if (isTruthyEnv(\"YARN_ENABLE_NON_INTERACTIVE\")) return true;\n if (isTruthyEnv(\"CURSOR_AGENT\")) return true;\n if (isTruthyEnv(\"CLAUDECODE\")) return true;\n return false;\n}\n\nfunction resolveOnQuestionMode(opt: string): OnQuestionMode {\n if (!opt || opt === \"default\") {\n return isNonInteractiveEnv() ? \"error\" : \"ask\";\n }\n if (opt === \"ask\" || opt === \"guess\" || opt === \"error\") {\n return opt;\n }\n throw new UserError(`Invalid argument for --on-question: \"${opt}\". Valid modes are: \"ask\", \"guess\", \"error\", \"default\".`);\n}\n\n// Setup command line parsing\nconst program = new Command();\nprogram\n .name(packageJson.name)\n .description(\"Stack Auth Initialization Tool\")\n .version(packageJson.version)\n .argument(\"[project-path]\", \"Path to your project\")\n .usage(`[project-path] [options]`)\n .option(\"--dry-run\", \"Run without making any changes\")\n .option(\"--neon\", \"Use Neon database\")\n .option(\"--js\", \"Initialize for JavaScript project\")\n .option(\"--next\", \"Initialize for Next.js project\")\n .option(\"--react\", \"Initialize for React project\")\n .option(\"--npm\", \"Use npm as package manager\")\n .option(\"--yarn\", \"Use yarn as package manager\")\n .option(\"--pnpm\", \"Use pnpm as package manager\")\n .option(\"--bun\", \"Use bun as package manager\")\n .option(\"--client\", \"Initialize client-side only\")\n .option(\"--server\", \"Initialize server-side only\")\n .option(\"--project-id <project-id>\", \"Project ID to use in setup\")\n .option(\"--publishable-client-key <publishable-client-key>\", \"Publishable client key to use in setup\")\n .option(\"--no-browser\", \"Don't open browser for environment variable setup\")\n .option(\"--on-question <mode>\", \"How to handle interactive questions: ask | guess | error | default\", \"default\")\n .option(\"--no-warn-uncommitted-changes\", \"Don't warn about uncommitted changes in the Git repository\")\n .addHelpText('after', `\nFor more information, please visit https://docs.stack-auth.com/getting-started/setup`);\n\nprogram.parse();\n\nconst options = program.opts();\n\n// Keep existing variables but assign from Commander\nlet savedProjectPath: string | undefined = program.args[0] || undefined;\nconst verboseEnvRaw = process.env.STACK_VERBOSE;\nconst parsedVerboseLevel = typeof verboseEnvRaw === \"string\" && verboseEnvRaw.trim().length > 0\n ? Number.parseInt(verboseEnvRaw.trim(), 10)\n : 0;\nconst verboseLevel: number = Number.isFinite(parsedVerboseLevel) ? Math.max(0, parsedVerboseLevel) : 0;\nconst isVerbose: boolean = verboseLevel > 0;\nconst isDryRun: boolean = options.dryRun || isTruthyEnv(\"STACK_DRY_RUN\") || false;\nconst isNeon: boolean = options.neon || false;\nconst typeFromArgs: \"js\" | \"next\" | \"react\" | undefined = options.js ? \"js\" : options.next ? \"next\" : options.react ? \"react\" : undefined;\nconst packageManagerFromArgs: string | undefined = options.npm ? \"npm\" : options.yarn ? \"yarn\" : options.pnpm ? \"pnpm\" : options.bun ? \"bun\" : undefined;\nconst isClient: boolean = options.client || false;\nconst isServer: boolean = options.server || false;\nconst projectIdFromArgs: string | undefined = options.projectId;\nconst publishableClientKeyFromArgs: string | undefined = options.publishableClientKey;\nconst onQuestionMode: OnQuestionMode = resolveOnQuestionMode(options.onQuestion);\nconst warnUncommittedChanges: boolean = options.warnUncommittedChanges ?? true;\n\n// Commander negates the boolean options with prefix `--no-`\n// so `--no-browser` becomes `browser: false`\nconst noBrowser: boolean = !options.browser;\n\ntype Ansis = {\n red: string,\n blue: string,\n green: string,\n yellow: string,\n clear: string,\n bold: string,\n};\n\nconst ansis: Ansis = {\n red: \"\\x1b[31m\",\n blue: \"\\x1b[34m\",\n green: \"\\x1b[32m\",\n yellow: \"\\x1b[33m\",\n\n clear: \"\\x1b[0m\",\n bold: \"\\x1b[1m\",\n};\n\nconst colorize: Colorize = {\n red: (strings, ...values) => ansis.red + templateIdentity(strings, ...values) + ansis.clear,\n blue: (strings, ...values) => ansis.blue + templateIdentity(strings, ...values) + ansis.clear,\n green: (strings, ...values) => ansis.green + templateIdentity(strings, ...values) + ansis.clear,\n yellow: (strings, ...values) => ansis.yellow + templateIdentity(strings, ...values) + ansis.clear,\n bold: (strings, ...values) => ansis.bold + templateIdentity(strings, ...values) + ansis.clear,\n};\n\nconfigureVerboseLogging({\n level: verboseLevel,\n formatter: (message) => colorize.blue`[verbose] ${message}`,\n});\n\nconst filesCreated: string[] = [];\nconst filesModified: string[] = [];\nconst commandsExecuted: string[] = [];\n\nconst packagesToInstall: string[] = [];\nconst writeFileHandlers: Array<() => Promise<void>> = [];\nconst deferredCommandHandlers: Array<() => Promise<void>> = [];\nconst nextSteps: string[] = [\n `Create an account and Stack Auth API key for your project on https://app.stack-auth.com`,\n];\n\n\nconst STACK_AUTH_PUBLIC_HOG_KEY = \"phc_vIUFi0HzHo7oV26OsaZbUASqxvs8qOmap1UBYAutU4k\";\nconst EVENT_PREFIX = \"stack-init-\";\nconst ph_client = new PostHog(STACK_AUTH_PUBLIC_HOG_KEY, {\n host: \"https://eu.i.posthog.com\",\n flushAt: 1,\n flushInterval: 0,\n});\nconst distinctId = crypto.randomUUID();\n\n\nasync function capture(event: string, properties: Record<string, any>) {\n logVerbose(\"capture event\", { event, properties });\n ph_client.capture({\n event: `${EVENT_PREFIX}${event}`,\n distinctId,\n properties,\n });\n}\n\n\nasync function main(): Promise<void> {\n // Welcome message\n console.log();\n console.log(`\n ██████\n ██████████████\n████████████████████\n████████████████████ WELCOME TO\n█████████████████ ╔═╗╔╦╗╔═╗╔═╗╦╔═ ┌─┐┬ ┬┌┬┐┬ ┬\n█████████████ ╚═╗ ║ ╠═╣║ ╠╩╗ ├─┤│ │ │ ├─┤\n█████████████ ████ ╚═╝ ╩ ╩ ╩╚═╝╩ ╩ ┴ ┴└─┘ ┴ ┴ ┴\n █████████████████\n ██████ ██\n████ ████\n █████ █████\n ██████\n `);\n console.log();\n\n logVerbose(\"Initialization run metadata\", {\n version: packageJson.version,\n cwd: process.cwd(),\n args: program.args,\n options: {\n isDryRun,\n isVerbose,\n isNeon,\n typeFromArgs,\n packageManagerFromArgs,\n isClient,\n isServer,\n projectIdFromArgs: Boolean(projectIdFromArgs),\n publishableClientKeyFromArgs: Boolean(publishableClientKeyFromArgs),\n noBrowser,\n onQuestionMode,\n verboseLevel,\n },\n });\n\n await capture(\"start\", {\n version: packageJson.version,\n isDryRun,\n isNeon,\n typeFromArgs,\n packageManagerFromArgs,\n isClient,\n isServer,\n noBrowser,\n platform: os.platform(),\n arch: os.arch(),\n nodeVersion: process.version,\n });\n\n // Wait just briefly so we can use `Steps` in here (it's defined only after the call to `main()`)\n await new Promise<void>((resolve) => resolve());\n\n\n // Prepare some stuff\n await clearStdin();\n const projectPath = await getProjectPath();\n await ensureGitWorkspaceIsReady(projectPath);\n logVerbose(\"Project path prepared\", { projectPath, isDryRun, isVerbose });\n scheduleMcpConfiguration({\n projectPath,\n isDryRun,\n colorize,\n registerWriteHandler: (handler) => writeFileHandlers.push(handler),\n registerCommandHandler: (handler) => deferredCommandHandlers.push(handler),\n recordFileChange,\n runScheduledCommand,\n });\n nextSteps.push(\"Restart your MCP-enabled editors so they pick up the Stack Auth MCP.\");\n logVerbose(\"MCP configuration scheduled\", {\n writeHandlers: writeFileHandlers.length,\n deferredCommands: deferredCommandHandlers.length,\n });\n\n\n // Steps\n const { packageJson: projectPackageJson } = await Steps.getProject();\n const type = await Steps.getProjectType({ packageJson: projectPackageJson });\n logVerbose(\"Project inspection complete\", {\n detectedType: type,\n dependencies: {\n hasReact: Boolean(projectPackageJson.dependencies?.[\"react\"]),\n hasNext: Boolean(projectPackageJson.dependencies?.[\"next\"]),\n },\n });\n\n await capture(\"project-type-selected\", {\n type,\n wasSpecifiedInArgs: !!typeFromArgs,\n });\n\n await Steps.addStackPackage(type);\n if (isNeon) packagesToInstall.push('@neondatabase/serverless');\n\n await Steps.writeEnvVars(type);\n const convexIntegration = await Steps.maybeInstallConvexIntegration({ packageJson: projectPackageJson, type });\n if (convexIntegration) {\n nextSteps.push(...convexIntegration.instructions);\n logVerbose(\"Convex integration detected\", convexIntegration);\n }\n\n if (type === \"next\") {\n const projectInfo = await Steps.getNextProjectInfo({ packageJson: projectPackageJson });\n await Steps.updateNextLayoutFile(projectInfo);\n await Steps.writeStackAppFile(projectInfo, \"client\", true);\n await Steps.writeStackAppFile(projectInfo, \"server\", true);\n await Steps.writeNextHandlerFile(projectInfo);\n await Steps.writeNextLoadingFile(projectInfo);\n nextSteps.push(`Copy the environment variables from the new API key into your .env.local file`);\n } else if (type === \"react\") {\n const defaultExtension = await Steps.guessDefaultFileExtension();\n const srcPath = await Steps.guessSrcPath();\n const hasReactRouterDom = !!(projectPackageJson.dependencies?.[\"react-router-dom\"] || projectPackageJson.devDependencies?.[\"react-router-dom\"]);\n const { fileName } = await Steps.writeReactClientFile({\n srcPath,\n defaultExtension,\n indentation: \" \",\n hasReactRouterDom,\n });\n nextSteps.push(\n `Copy the environment variables from the new API key into your own environment and reference them in ${fileName}`,\n );\n } else {\n const defaultExtension = await Steps.guessDefaultFileExtension();\n const where = await Steps.getServerOrClientOrBoth();\n const srcPath = await Steps.guessSrcPath();\n const appFiles: string[] = [];\n for (const w of where) {\n const { fileName } = await Steps.writeStackAppFile({\n type,\n defaultExtension,\n indentation: \" \",\n srcPath,\n }, w, where.includes(\"client\"));\n appFiles.push(fileName);\n }\n nextSteps.push(\n `Copy the environment variables from the new API key into your own environment and reference them in ${appFiles.join(\" and \")}`,\n `Follow the instructions on how to use Stack Auth's vanilla SDK at http://docs.stack-auth.com/others/js-client`,\n );\n }\n logVerbose(\"Primary integration steps completed\", { type, nextStepsCount: nextSteps.length });\n\n const { packageManager } = await Steps.getPackageManager();\n logVerbose(\"Package manager determined\", { packageManager });\n\n await capture(`package-manager-selected`, {\n packageManager,\n wasSpecifiedInArgs: !!packageManagerFromArgs,\n });\n\n await Steps.ensureReady(type);\n\n\n // Install dependencies\n console.log();\n console.log(colorize.bold`Installing dependencies...`);\n const installCommandMap = new Map<string, string>([\n [\"npm\", \"npm install\"],\n [\"yarn\", \"yarn add\"],\n [\"pnpm\", \"pnpm add\"],\n [\"bun\", \"bun add\"],\n ]);\n const installCommand = installCommandMap.get(packageManager) ?? `${packageManager} install`;\n // Quote each package name to avoid shell interpretation of env-overridden values.\n const safePackages = packagesToInstall.map((p) => JSON.stringify(p));\n await shellNicelyFormatted(`${installCommand} ${safePackages.join(' ')}`, {\n shell: true,\n cwd: projectPath,\n });\n logVerbose(\"Dependency installation finished\", {\n packageManager,\n packages: packagesToInstall,\n });\n\n await capture(`dependencies-installed`, {\n packageManager,\n packages: packagesToInstall,\n });\n\n // Write files\n console.log();\n console.log(colorize.bold`Writing files...`);\n console.log();\n for (let i = 0; i < writeFileHandlers.length; i++) {\n const writeFileHandler = writeFileHandlers[i];\n logVerbose(\"Executing write handler\", { index: i });\n await writeFileHandler();\n }\n console.log(`${colorize.green`√`} Done writing files`);\n\n await runDeferredCommands();\n\n console.log('\\n\\n\\n');\n console.log(colorize.bold`${colorize.green`Installation succeeded!`}`);\n console.log();\n console.log(\"Commands executed:\");\n for (const command of commandsExecuted) {\n console.log(` ${colorize.blue`${command}`}`);\n }\n console.log();\n console.log(\"MCP servers installed:\");\n console.log(` ${colorize.green`https://mcp.stack-auth.com`}`);\n console.log();\n console.log(\"Files written:\");\n for (const file of filesModified) {\n console.log(` ${colorize.yellow`${file}`}`);\n }\n for (const file of filesCreated) {\n console.log(` ${colorize.green`${file}`}`);\n }\n console.log();\n\n await capture(\"complete\", {\n success: true,\n type,\n packageManager,\n isNeon,\n isClient,\n isServer,\n noBrowser,\n filesCreated,\n filesModified,\n commandsExecuted,\n });\n\n await invokeCallback({\n success: true,\n distinctId,\n options,\n args: program.args,\n isNonInteractive: isNonInteractiveEnv(),\n timestamp: new Date().toISOString(),\n projectPath,\n });\n\n // Success!\n console.log(`\n${colorize.green`===============================================`}\n\n${colorize.green`Successfully installed Stack! 🚀🚀🚀`}\n\n${colorize.bold`Next steps:`}\n\n1. ${noBrowser ?\n `Create a project at https://app.stack-auth.com and get your API keys` :\n `Complete the setup in your browser to get your API keys`}\n2. Add the API keys to your .env.local file\n3. Import the Stack components in your app\n4. Add authentication to your app\n\nFor more information, please visit https://docs.stack-auth.com/getting-started/setup\n `.trim());\n if (!noBrowser) {\n await open(`https://app.stack-auth.com/wizard-congrats?stack-init-id=${encodeURIComponent(distinctId)}`);\n }\n await ph_client.shutdown();\n}\n\n// eslint-disable-next-line no-restricted-syntax\nmain().catch(async (err) => {\n try {\n await capture(\"error\", {\n error: err.message,\n errorType: err instanceof UserError ? \"UserError\" : \"SystemError\",\n stack: err.stack,\n });\n } catch (e) { }\n if (!(err instanceof UserError)) {\n console.error(err);\n }\n console.error('\\n\\n\\n\\n');\n console.log(colorize.red`===============================================`);\n console.error();\n if (err instanceof UserError) {\n console.error(`${colorize.red`ERROR!`} ${err.message}`);\n } else {\n console.error(\"An error occurred during the initialization process.\");\n }\n console.error();\n console.log(colorize.red`===============================================`);\n console.error();\n console.error(\n \"If you need assistance, please try installing Stack manually as described in https://docs.stack-auth.com/getting-started/setup or join our Discord where we're happy to help: https://discord.stack-auth.com\"\n );\n if (!(err instanceof UserError)) {\n console.error(\"\");\n console.error(`Error message: ${err.message}`);\n }\n console.error();\n const fallbackErrorMessage = (() => {\n if (err instanceof Error) return err.message;\n if (typeof err === \"string\") return err;\n try {\n return JSON.stringify(err);\n } catch {\n return \"Unknown error\";\n }\n })();\n await invokeCallback({\n success: false,\n distinctId,\n options,\n args: program.args,\n isNonInteractive: isNonInteractiveEnv(),\n timestamp: new Date().toISOString(),\n projectPath: savedProjectPath,\n error: {\n name: err instanceof Error ? err.name : undefined,\n message: fallbackErrorMessage,\n stack: err instanceof Error ? err.stack : undefined,\n },\n });\n await ph_client.shutdown();\n process.exit(1);\n});\n\n\ntype PackageJson = {\n dependencies?: Record<string, string>,\n devDependencies?: Record<string, string>,\n [key: string]: any,\n}\n\ntype ProjectInfo = {\n type: \"js\" | \"next\" | \"react\",\n srcPath: string,\n appPath: string,\n defaultExtension: string,\n indentation: string,\n}\n\ntype NextProjectInfoError = {\n error: string,\n}\n\ntype NextProjectInfoResult = ProjectInfo | NextProjectInfoError;\n\ntype StackAppFileOptions = {\n type: \"js\" | \"next\" | \"react\",\n srcPath: string,\n defaultExtension: string,\n indentation: string,\n}\n\ntype StackAppFileResult = {\n fileName: string,\n}\n\ntype ConvexIntegrationResult = {\n instructions: string[],\n}\n\nconst Steps = {\n async getProject(): Promise<{ packageJson: PackageJson }> {\n let projectPath = await getProjectPath();\n logVerbose(\"Steps.getProject invoked\", { projectPath });\n if (!fs.existsSync(projectPath)) {\n throw new UserError(`The project path ${projectPath} does not exist`);\n }\n\n const packageJsonPath = path.join(projectPath, \"package.json\");\n if (!fs.existsSync(packageJsonPath)) {\n throw new UserError(\n `The package.json file does not exist in the project path ${projectPath}. You must initialize a new project first before installing Stack.`\n );\n }\n\n const packageJsonText = fs.readFileSync(packageJsonPath, \"utf-8\");\n let packageJson: PackageJson;\n try {\n packageJson = JSON.parse(packageJsonText);\n } catch (e) {\n throw new UserError(`package.json file is not valid JSON: ${e}`);\n }\n\n logVerbose(\"Steps.getProject completed\", {\n packageJsonPath,\n dependencyCounts: {\n dependencies: Object.keys(packageJson.dependencies ?? {}).length,\n devDependencies: Object.keys(packageJson.devDependencies ?? {}).length,\n },\n });\n\n return { packageJson };\n },\n\n async getProjectType({ packageJson }: { packageJson: PackageJson }): Promise<\"js\" | \"next\" | \"react\"> {\n if (typeFromArgs) {\n logVerbose(\"Steps.getProjectType using CLI override\", { typeFromArgs });\n return typeFromArgs;\n }\n\n logVerbose(\"Steps.getProjectType attempting autodetect\", {\n hasNext: Boolean(packageJson.dependencies?.[\"next\"] || packageJson.devDependencies?.[\"next\"]),\n hasReact: Boolean(packageJson.dependencies?.[\"react\"] || packageJson.dependencies?.[\"react-dom\"]),\n onQuestionMode,\n });\n\n const maybeNextProject = await Steps.maybeGetNextProjectInfo({ packageJson });\n if (!(\"error\" in maybeNextProject)) {\n logVerbose(\"Steps.getProjectType resolved to Next.js project\");\n return \"next\";\n }\n if (packageJson.dependencies?.[\"react\"] || packageJson.dependencies?.[\"react-dom\"]) {\n logVerbose(\"Steps.getProjectType resolved to React project\");\n return \"react\";\n }\n if (onQuestionMode === \"guess\") {\n logVerbose(\"Steps.getProjectType defaulting to JS due to --on-question=guess\");\n return \"js\";\n }\n if (onQuestionMode === \"error\") {\n throw new UnansweredQuestionError(\"Unable to auto-detect project type (checked for Next.js and React dependencies). Re-run with one of: --js, --react, or --next.\");\n }\n\n const { type } = await inquirer.prompt([\n {\n type: \"list\",\n name: \"type\",\n message: \"Which integration would you like to install?\",\n choices: [\n { name: \"Vanilla JS (other/no framework)\", value: \"js\" },\n { name: \"Node.js\", value: \"js\" },\n { name: \"React\", value: \"react\" },\n { name: \"Next.js\", value: \"next\" },\n ]\n }\n ]);\n\n logVerbose(\"Steps.getProjectType received user selection\", { type });\n return type;\n },\n\n async getStackPackageName(type: \"js\" | \"next\" | \"react\", install = false): Promise<string> {\n const mapping = {\n js: (install && process.env.STACK_JS_INSTALL_PACKAGE_NAME_OVERRIDE) || \"@stackframe/js\",\n next: (install && process.env.STACK_NEXT_INSTALL_PACKAGE_NAME_OVERRIDE) || \"@stackframe/stack\",\n react: (install && process.env.STACK_REACT_INSTALL_PACKAGE_NAME_OVERRIDE) || \"@stackframe/react\",\n } as const;\n const packageName = mapping[type];\n logVerbose(\"Steps.getStackPackageName resolved\", { type, install, packageName });\n return packageName;\n },\n\n async addStackPackage(type: \"js\" | \"next\" | \"react\"): Promise<void> {\n const pkgName = await Steps.getStackPackageName(type, true);\n logVerbose(\"Steps.addStackPackage scheduling install\", { pkgName });\n packagesToInstall.push(pkgName);\n },\n\n async getNextProjectInfo({ packageJson }: { packageJson: PackageJson }): Promise<ProjectInfo> {\n logVerbose(\"Steps.getNextProjectInfo invoked\");\n const maybe = await Steps.maybeGetNextProjectInfo({ packageJson });\n if (\"error\" in maybe) {\n logVerbose(\"Steps.getNextProjectInfo failed validation\", maybe);\n throw new UserError(maybe.error);\n }\n logVerbose(\"Steps.getNextProjectInfo resolved\", maybe);\n return maybe;\n },\n\n async maybeGetNextProjectInfo({ packageJson }: { packageJson: PackageJson }): Promise<NextProjectInfoResult> {\n const projectPath = await getProjectPath();\n logVerbose(\"Steps.maybeGetNextProjectInfo evaluating Next.js eligibility\", { projectPath });\n\n const nextVersionInPackageJson = packageJson.dependencies?.[\"next\"] ?? packageJson.devDependencies?.[\"next\"];\n if (!nextVersionInPackageJson) {\n logVerbose(\"Steps.maybeGetNextProjectInfo missing Next dependency\");\n return { error: `The project at ${projectPath} does not appear to be a Next.js project, or does not have 'next' installed as a dependency.` };\n }\n if (!nextVersionInPackageJson) {\n logVerbose(\"Steps.maybeGetNextProjectInfo found unsupported Next version\", { version: nextVersionInPackageJson });\n return { error: `The project at ${projectPath} is using an unsupported version of Next.js (found ${nextVersionInPackageJson}).\\n\\nOnly Next.js 14 & 15 projects are currently supported. See Next's upgrade guide: https://nextjs.org/docs/app/building-your-application/upgrading/version-14` };\n }\n\n const hasSrcAppFolder = fs.existsSync(path.join(projectPath, \"src/app\"));\n const srcPath = path.join(projectPath, hasSrcAppFolder ? \"src\" : \"\");\n const appPath = path.join(srcPath, \"app\");\n if (!fs.existsSync(appPath)) {\n logVerbose(\"Steps.maybeGetNextProjectInfo missing Next app directory\", { appPath });\n return { error: `The app path ${appPath} does not exist. Only the Next.js App router is supported — are you maybe on the Pages router instead?` };\n }\n\n const nextConfigPathWithoutExtension = path.join(projectPath, \"next.config\");\n const nextConfigFileExtension = await findJsExtension(\n nextConfigPathWithoutExtension\n );\n const nextConfigPath =\n nextConfigPathWithoutExtension + \".\" + (nextConfigFileExtension ?? \"js\");\n if (!fs.existsSync(nextConfigPath)) {\n logVerbose(\"Steps.maybeGetNextProjectInfo missing next.config file\", { nextConfigPath });\n return { error: `Expected file at ${nextConfigPath} for Next.js projects.` };\n }\n\n const dryUpdateNextLayoutFileResult = await Steps.dryUpdateNextLayoutFile({ appPath, defaultExtension: \"jsx\" });\n\n logVerbose(\"Steps.maybeGetNextProjectInfo success\", {\n projectPath,\n srcPath,\n appPath,\n detectedExtension: dryUpdateNextLayoutFileResult.fileExtension,\n });\n return {\n type: \"next\",\n srcPath,\n appPath,\n defaultExtension: dryUpdateNextLayoutFileResult.fileExtension,\n indentation: dryUpdateNextLayoutFileResult.indentation,\n };\n },\n\n async writeEnvVars(type: \"js\" | \"next\" | \"react\"): Promise<boolean> {\n const projectPath = await getProjectPath();\n logVerbose(\"Steps.writeEnvVars invoked\", { type, projectPath });\n\n // TODO: in non-Next environments, ask the user what method they prefer for envvars\n if (type !== \"next\") {\n logVerbose(\"Steps.writeEnvVars skipped\", { reason: \"non-next-project\" });\n return false;\n }\n\n const envLocalPath = path.join(projectPath, \".env.local\");\n\n const potentialEnvLocations = [\n path.join(projectPath, \".env\"),\n path.join(projectPath, \".env.development\"),\n path.join(projectPath, \".env.default\"),\n path.join(projectPath, \".env.defaults\"),\n path.join(projectPath, \".env.example\"),\n envLocalPath,\n ];\n if (potentialEnvLocations.every((p) => !fs.existsSync(p))) {\n const envContent = noBrowser\n ? \"# Stack Auth keys\\n\" +\n \"# To get these variables:\\n\" +\n \"# 1. Go to https://app.stack-auth.com\\n\" +\n \"# 2. Create a new project\\n\" +\n \"# 3. Copy the keys below\\n\" +\n `NEXT_PUBLIC_STACK_PROJECT_ID=\"${projectIdFromArgs ?? \"\"}\"\\n` +\n `NEXT_PUBLIC_STACK_PUBLISHABLE_CLIENT_KEY=\"${publishableClientKeyFromArgs ?? \"\"}\"\\n` +\n \"STACK_SECRET_SERVER_KEY=\\n\"\n : \"# Stack Auth keys\\n\" +\n \"# Get these variables by creating a project on https://app.stack-auth.com.\\n\" +\n `NEXT_PUBLIC_STACK_PROJECT_ID=\"${projectIdFromArgs ?? \"\"}\"\\n` +\n `NEXT_PUBLIC_STACK_PUBLISHABLE_CLIENT_KEY=\"${publishableClientKeyFromArgs ?? \"\"}\"\\n` +\n \"STACK_SECRET_SERVER_KEY=\\n\";\n\n laterWriteFile(envLocalPath, envContent);\n logVerbose(\"Steps.writeEnvVars scheduled .env.local creation\", { envLocalPath });\n return true;\n }\n\n logVerbose(\"Steps.writeEnvVars found existing env files\", { potentialEnvLocations });\n return false;\n },\n\n async maybeInstallConvexIntegration({ packageJson, type }: { packageJson: PackageJson, type: \"js\" | \"next\" | \"react\" }): Promise<ConvexIntegrationResult | null> {\n const hasConvexDependency = Boolean(packageJson.dependencies?.[\"convex\"] || packageJson.devDependencies?.[\"convex\"]);\n if (!hasConvexDependency) {\n logVerbose(\"Steps.maybeInstallConvexIntegration skipped\", { reason: \"no-convex-dependency\" });\n return null;\n }\n\n const projectPath = await getProjectPath();\n const convexDir = path.join(projectPath, \"convex\");\n if (!fs.existsSync(convexDir)) {\n logVerbose(\"Steps.maybeInstallConvexIntegration skipped\", { reason: \"missing-convex-dir\", convexDir });\n return null;\n }\n\n const stackPackageName = await Steps.getStackPackageName(type);\n const instructions: string[] = [];\n logVerbose(\"Steps.maybeInstallConvexIntegration configuring\", { convexDir, stackPackageName });\n\n const authConfigPath = path.join(convexDir, \"auth.config.ts\");\n const desiredAuthConfig = createConvexAuthConfigContent({ stackPackageName, type });\n const existingAuthConfig = await readFile(authConfigPath);\n if (!existingAuthConfig || (!existingAuthConfig.includes(\"getConvexProvidersConfig\") && !existingAuthConfig.includes(\"@stackframe/\"))) {\n laterWriteFile(authConfigPath, desiredAuthConfig);\n logVerbose(\"Steps.maybeInstallConvexIntegration scheduled auth.config.ts update\", { authConfigPath });\n }\n\n const convexConfigPath = path.join(convexDir, \"convex.config.ts\");\n const existingConvexConfig = await readFile(convexConfigPath);\n const desiredConvexConfig = createConvexIntegrationConvexConfigContent(stackPackageName);\n let needsManualConvexConfig = false;\n\n if (!existingConvexConfig) {\n laterWriteFile(convexConfigPath, desiredConvexConfig);\n logVerbose(\"Steps.maybeInstallConvexIntegration writing convex.config.ts from template\", { convexConfigPath });\n } else if (existingConvexConfig.includes(\"app.use(stackAuthComponent\") && existingConvexConfig.includes(\"/convex.config\") && existingConvexConfig.includes(\"stackframe\")) {\n // already integrated\n logVerbose(\"Steps.maybeInstallConvexIntegration detected existing convex.config.ts integration\", { convexConfigPath });\n } else {\n const integratedContent = integrateConvexConfig(existingConvexConfig, stackPackageName);\n if (integratedContent) {\n laterWriteFile(convexConfigPath, integratedContent);\n logVerbose(\"Steps.maybeInstallConvexIntegration merged convex.config.ts content\", { convexConfigPath });\n } else if (isSimpleConvexConfig(existingConvexConfig)) {\n laterWriteFile(convexConfigPath, desiredConvexConfig);\n logVerbose(\"Steps.maybeInstallConvexIntegration replaced simple convex.config.ts\", { convexConfigPath });\n } else {\n needsManualConvexConfig = true;\n logVerbose(\"Steps.maybeInstallConvexIntegration requiring manual convex.config.ts review\", { convexConfigPath });\n }\n }\n\n if (needsManualConvexConfig) {\n instructions.push(`Update convex/convex.config.ts to import ${stackPackageName}/convex.config and call app.use(stackAuthComponent).`);\n }\n\n const convexClientUpdateResult = await updateConvexClients({ projectPath, type });\n if (convexClientUpdateResult.skippedFiles.length > 0) {\n instructions.push(\"Review your Convex client setup and call stackClientApp.getConvexClientAuth({}) or stackServerApp.getConvexClientAuth({}) manually where needed.\");\n }\n logVerbose(\"Steps.maybeInstallConvexIntegration client update summary\", convexClientUpdateResult);\n\n instructions.push(\n \"Set the Stack Auth environment variables in Convex (Deployment → Settings → Environment Variables).\",\n \"Verify your Convex clients call stackClientApp.getConvexClientAuth({}) or stackServerApp.getConvexClientAuth({}) so they share authentication with Stack Auth.\"\n );\n\n logVerbose(\"Steps.maybeInstallConvexIntegration completed\", { instructions });\n return { instructions };\n },\n\n async dryUpdateNextLayoutFile({ appPath, defaultExtension }: { appPath: string, defaultExtension: string }): Promise<{\n path: string,\n updatedContent: string,\n fileExtension: string,\n indentation: string,\n }> {\n const layoutPathWithoutExtension = path.join(appPath, \"layout\");\n const layoutFileExtension =\n (await findJsExtension(layoutPathWithoutExtension)) ?? defaultExtension;\n const layoutPath = layoutPathWithoutExtension + \".\" + layoutFileExtension;\n const layoutContent =\n (await readFile(layoutPath)) ??\n throwErr(\n `The layout file at ${layoutPath} does not exist. Stack requires a layout file to be present in the /app folder.`\n );\n const updatedLayoutResult =\n (await getUpdatedLayout(layoutContent)) ??\n throwErr(\n \"Unable to parse root layout file. Make sure it contains a <body> tag. If it still doesn't work, you may need to manually install Stack. See: https://nextjs.org/docs/app/building-your-application/routing/pages-and-layouts#root-layout-required\"\n );\n const updatedLayoutContent = updatedLayoutResult.content;\n return {\n path: layoutPath,\n updatedContent: updatedLayoutContent,\n fileExtension: layoutFileExtension,\n indentation: updatedLayoutResult.indentation\n };\n },\n\n async updateNextLayoutFile(projectInfo: ProjectInfo): Promise<{\n path: string,\n updatedContent: string,\n fileExtension: string,\n indentation: string,\n }> {\n logVerbose(\"Steps.updateNextLayoutFile invoked\", projectInfo);\n const res = await Steps.dryUpdateNextLayoutFile(projectInfo);\n laterWriteFile(res.path, res.updatedContent);\n logVerbose(\"Steps.updateNextLayoutFile scheduled write\", { path: res.path });\n return res;\n },\n\n async writeStackAppFile({ type, srcPath, defaultExtension, indentation }: StackAppFileOptions, clientOrServer: \"server\" | \"client\", alsoHasClient: boolean): Promise<StackAppFileResult> {\n logVerbose(\"Steps.writeStackAppFile invoked\", { type, srcPath, clientOrServer, alsoHasClient });\n const packageName = await Steps.getStackPackageName(type);\n\n const clientOrServerCap = {\n client: \"Client\",\n server: \"Server\",\n }[clientOrServer as \"client\" | \"server\"];\n const relativeStackAppPath = `stack/${clientOrServer}`;\n\n const stackAppPathWithoutExtension = path.join(srcPath, relativeStackAppPath);\n const stackAppFileExtension =\n (await findJsExtension(stackAppPathWithoutExtension)) ?? defaultExtension;\n const stackAppPath =\n stackAppPathWithoutExtension + \".\" + stackAppFileExtension;\n const stackAppContent = await readFile(stackAppPath);\n if (stackAppContent) {\n logVerbose(\"Steps.writeStackAppFile found existing file\", { stackAppPath });\n if (!stackAppContent.includes(\"@stackframe/\")) {\n throw new UserError(\n `A file at the path ${stackAppPath} already exists. Stack uses the stack/${clientOrServer}.ts file to initialize the Stack SDK. Please remove the existing file and try again.`\n );\n }\n throw new UserError(\n `It seems that you already installed Stack in this project.`\n );\n }\n\n const tokenStore = type === \"next\" ? '\"nextjs-cookie\"' : (clientOrServer === \"client\" ? '\"cookie\"' : '\"memory\"');\n const publishableClientKeyWrite = clientOrServer === \"server\"\n ? `process.env.STACK_PUBLISHABLE_CLIENT_KEY ${publishableClientKeyFromArgs ? `|| ${JSON.stringify(publishableClientKeyFromArgs)}` : \"\"}`\n : `'${publishableClientKeyFromArgs ?? 'INSERT_YOUR_PUBLISHABLE_CLIENT_KEY_HERE'}'`;\n const jsOptions = type === \"js\" ? [\n `\\n\\n${indentation}// get your Stack Auth API keys from https://app.stack-auth.com${clientOrServer === \"client\" ? ` and store them in a safe place (e.g. environment variables)` : \"\"}`,\n `${projectIdFromArgs ? `${indentation}projectId: ${JSON.stringify(projectIdFromArgs)},` : \"\"}`,\n `${indentation}publishableClientKey: ${publishableClientKeyWrite},`,\n `${clientOrServer === \"server\" ? `${indentation}secretServerKey: process.env.STACK_SECRET_SERVER_KEY,` : \"\"}`,\n ].filter(Boolean).join(\"\\n\") : \"\";\n\n const nextClientOptions = (type === \"next\" && clientOrServer === \"client\")\n ? (() => {\n const lines = [\n projectIdFromArgs ? `${indentation}projectId: process.env.NEXT_PUBLIC_STACK_PROJECT_ID ?? ${JSON.stringify(projectIdFromArgs)},` : \"\",\n publishableClientKeyFromArgs ? `${indentation}publishableClientKey: process.env.NEXT_PUBLIC_STACK_PUBLISHABLE_CLIENT_KEY ?? ${JSON.stringify(publishableClientKeyFromArgs)},` : \"\",\n ].filter(Boolean).join(\"\\n\");\n return lines ? `\\n${lines}` : \"\";\n })()\n : \"\";\n\n const shouldInheritFromClient = clientOrServer === \"server\" && alsoHasClient;\n\n laterWriteFileIfNotExists(\n stackAppPath,\n `\n${type === \"next\" && clientOrServer === \"server\" ? `import \"server-only\";\\n\\n` : \"\"}import { Stack${clientOrServerCap}App } from ${JSON.stringify(packageName)};\n${shouldInheritFromClient ? `import { stackClientApp } from \"./client\";\\n\\n` : \"\\n\"}export const stack${clientOrServerCap}App = new Stack${clientOrServerCap}App({\n${shouldInheritFromClient ? `${indentation}inheritsFrom: stackClientApp,` : `${indentation}tokenStore: ${tokenStore},${jsOptions}${nextClientOptions}`}\n});\n `.trim() + \"\\n\"\n );\n logVerbose(\"Steps.writeStackAppFile scheduled creation\", { stackAppPath, inheritsFromClient: shouldInheritFromClient });\n return { fileName: stackAppPath };\n },\n\n async writeReactClientFile({ srcPath, defaultExtension, indentation, hasReactRouterDom }: { srcPath: string, defaultExtension: string, indentation: string, hasReactRouterDom: boolean }): Promise<StackAppFileResult> {\n logVerbose(\"Steps.writeReactClientFile invoked\", { srcPath, hasReactRouterDom });\n const packageName = await Steps.getStackPackageName(\"react\");\n const relativeStackAppPath = `stack/client`;\n const stackAppPathWithoutExtension = path.join(srcPath, relativeStackAppPath);\n const stackAppFileExtension = (await findJsExtension(stackAppPathWithoutExtension)) ?? defaultExtension;\n const stackAppPath = stackAppPathWithoutExtension + \".\" + stackAppFileExtension;\n const stackAppContent = await readFile(stackAppPath);\n if (stackAppContent) {\n logVerbose(\"Steps.writeReactClientFile found existing file\", { stackAppPath });\n if (!stackAppContent.includes(\"@stackframe/\")) {\n throw new UserError(`A file at the path ${stackAppPath} already exists. Stack uses the stack/client.ts file to initialize the Stack SDK. Please remove the existing file and try again.`);\n }\n throw new UserError(`It seems that you already installed Stack in this project.`);\n }\n\n const publishableClientKeyWrite = `'${publishableClientKeyFromArgs ?? 'INSERT_YOUR_PUBLISHABLE_CLIENT_KEY_HERE'}'`;\n const projectIdWrite = `'${projectIdFromArgs ?? 'INSERT_PROJECT_ID'}'`;\n\n const imports = hasReactRouterDom\n ? `import { StackClientApp } from ${JSON.stringify(packageName)};\\nimport { useNavigate } from \"react-router-dom\";\\n\\n`\n : `import { StackClientApp } from ${JSON.stringify(packageName)};\\n\\n`;\n\n const redirectMethod = hasReactRouterDom\n ? `,\\n${indentation}redirectMethod: {\\n${indentation}${indentation}useNavigate,\\n${indentation}}`\n : \"\";\n\n laterWriteFileIfNotExists(\n stackAppPath,\n `${imports}export const stackClientApp = new StackClientApp({ \\n${indentation}tokenStore: \"cookie\", \\n${indentation}projectId: ${projectIdWrite}, \\n${indentation}publishableClientKey: ${publishableClientKeyWrite}${redirectMethod}, \\n}); \\n`\n );\n logVerbose(\"Steps.writeReactClientFile scheduled creation\", { stackAppPath });\n return { fileName: stackAppPath };\n },\n\n async writeNextHandlerFile(projectInfo: ProjectInfo): Promise<void> {\n logVerbose(\"Steps.writeNextHandlerFile invoked\", projectInfo);\n const handlerPathWithoutExtension = path.join(\n projectInfo.appPath,\n \"handler/[...stack]/page\"\n );\n const handlerFileExtension =\n (await findJsExtension(handlerPathWithoutExtension)) ?? projectInfo.defaultExtension;\n const handlerPath = handlerPathWithoutExtension + \".\" + handlerFileExtension;\n const handlerContent = await readFile(handlerPath);\n if (handlerContent && !handlerContent.includes(\"@stackframe/\")) {\n logVerbose(\"Steps.writeNextHandlerFile found conflicting file\", { handlerPath });\n throw new UserError(\n `A file at the path ${handlerPath} already exists.Stack uses the / handler path to handle incoming requests.Please remove the existing file and try again.`\n );\n }\n laterWriteFileIfNotExists(\n handlerPath,\n `import { StackHandler } from \"@stackframe/stack\";\\n\\nexport default function Handler() {\\n${projectInfo.indentation}return <StackHandler fullPage />;\\n}\\n`\n );\n },\n\n async writeNextLoadingFile(projectInfo: ProjectInfo): Promise<void> {\n logVerbose(\"Steps.writeNextLoadingFile invoked\", projectInfo);\n let loadingPathWithoutExtension = path.join(projectInfo.appPath, \"loading\");\n const loadingFileExtension =\n (await findJsExtension(loadingPathWithoutExtension)) ?? projectInfo.defaultExtension;\n const loadingPath = loadingPathWithoutExtension + \".\" + loadingFileExtension;\n laterWriteFileIfNotExists(\n loadingPath,\n `export default function Loading() {\n\\n${projectInfo.indentation}// Stack uses React Suspense, which will render this page while user data is being fetched.\\n${projectInfo.indentation}// See: https://nextjs.org/docs/app/api-reference/file-conventions/loading\\n${projectInfo.indentation}return <></>;\\n}\\n`\n );\n },\n\n async getPackageManager(): Promise<{ packageManager: string }> {\n if (packageManagerFromArgs) {\n logVerbose(\"Steps.getPackageManager using CLI override\", { packageManager: packageManagerFromArgs });\n return { packageManager: packageManagerFromArgs };\n }\n const packageManager = await promptPackageManager();\n const versionCommand = `${packageManager} --version`;\n logVerbose(\"Steps.getPackageManager checking binary availability\", { packageManager });\n\n try {\n await shellNicelyFormatted(versionCommand, { shell: true, quiet: true });\n } catch (err) {\n console.error(err);\n throw new UserError(\n `Could not run the package manager command '${versionCommand}'. Please make sure ${packageManager} is installed on your system.`\n );\n }\n\n logVerbose(\"Steps.getPackageManager resolved\", { packageManager });\n return { packageManager };\n },\n\n async ensureReady(type: \"js\" | \"next\" | \"react\"): Promise<void> {\n const projectPath = await getProjectPath();\n\n const typeStringMap = {\n js: \"JavaScript\",\n next: \"Next.js\",\n react: \"React\",\n } as const;\n const typeString = typeStringMap[type];\n const isReady = (onQuestionMode !== \"ask\") || (await inquirer.prompt([\n {\n type: \"confirm\",\n name: \"ready\",\n message: `Found a ${typeString} project at ${projectPath} — ready to install Stack Auth?`,\n default: true,\n },\n ])).ready;\n if (!isReady) {\n throw new UserError(\"Installation aborted.\");\n }\n logVerbose(\"Steps.ensureReady confirmed\", { type, projectPath, isReady });\n },\n\n async getServerOrClientOrBoth(): Promise<Array<\"server\" | \"client\">> {\n logVerbose(\"Steps.getServerOrClientOrBoth invoked\", { isClientFlag: isClient, isServerFlag: isServer, onQuestionMode });\n if (isClient && isServer) {\n logVerbose(\"Steps.getServerOrClientOrBoth using CLI flags\", { selection: [\"server\", \"client\"] });\n return [\"server\", \"client\"];\n }\n if (isServer) {\n logVerbose(\"Steps.getServerOrClientOrBoth using server flag\");\n return [\"server\"];\n }\n if (isClient) {\n logVerbose(\"Steps.getServerOrClientOrBoth using client flag\");\n return [\"client\"];\n }\n\n if (onQuestionMode === \"guess\") {\n logVerbose(\"Steps.getServerOrClientOrBoth defaulting to both\");\n return [\"server\", \"client\"];\n }\n if (onQuestionMode === \"error\") {\n throw new UnansweredQuestionError(\"Ambiguous installation type. Re-run with --server, --client, or both.\");\n }\n\n const selection = (await inquirer.prompt([{\n type: \"list\",\n name: \"type\",\n message: \"Do you want to use Stack Auth on the server, or on the client?\",\n choices: [\n { name: \"Client (e.g. Vite, HTML)\", value: [\"client\"] },\n { name: \"Server (e.g. Node.js)\", value: [\"server\"] },\n { name: \"Both (e.g. Next.js)\", value: [\"server\", \"client\"] }\n ]\n }])).type;\n logVerbose(\"Steps.getServerOrClientOrBoth received user selection\", { selection });\n return selection;\n },\n\n /**\n * note: this is a heuristic, specific frameworks may have better heuristics (e.g. the Next.js code uses the extension of the global layout file)\n */\n async guessDefaultFileExtension(): Promise<string> {\n const projectPath = await getProjectPath();\n const hasTsConfig = fs.existsSync(\n path.join(projectPath, \"tsconfig.json\")\n );\n const extension = hasTsConfig ? \"ts\" : \"js\";\n logVerbose(\"Steps.guessDefaultFileExtension result\", { projectPath, hasTsConfig, extension });\n return extension;\n },\n\n /**\n * note: this is a heuristic, specific frameworks may have better heuristics (e.g. the Next.js code uses the location of the app folder)\n */\n async guessSrcPath(): Promise<string> {\n const projectPath = await getProjectPath();\n const potentialSrcPath = path.join(projectPath, \"src\");\n const hasSrcFolder = fs.existsSync(\n path.join(projectPath, \"src\")\n );\n const resolvedPath = hasSrcFolder ? potentialSrcPath : projectPath;\n logVerbose(\"Steps.guessSrcPath result\", { hasSrcFolder, resolvedPath });\n return resolvedPath;\n },\n\n\n};\n\n\ntype LayoutResult = {\n content: string,\n indentation: string,\n}\n\nasync function getUpdatedLayout(originalLayout: string): Promise<LayoutResult | undefined> {\n logVerbose(\"getUpdatedLayout invoked\", { length: originalLayout.length });\n let layout = originalLayout;\n const indentation = guessIndentation(originalLayout);\n\n const firstImportLocationM1 = /\\simport\\s/.exec(layout)?.index;\n const hasStringAsFirstLine = layout.startsWith('\"') || layout.startsWith(\"'\");\n const importInsertLocationM1 =\n firstImportLocationM1 ?? (hasStringAsFirstLine ? layout.indexOf(\"\\n\") : -1);\n const importInsertLocation = importInsertLocationM1 + 1;\n const importStatement = `import { StackProvider, StackTheme } from \"@stackframe/stack\";\\nimport { stackClientApp } from \"../stack/client\";\\n`;\n layout =\n layout.slice(0, importInsertLocation) +\n importStatement +\n layout.slice(importInsertLocation);\n\n const bodyOpenTag = /<\\s*body[^>]*>/.exec(layout);\n const bodyCloseTag = /<\\s*\\/\\s*body[^>]*>/.exec(layout);\n if (!bodyOpenTag || !bodyCloseTag) {\n logVerbose(\"getUpdatedLayout missing body tag\");\n return undefined;\n }\n const bodyOpenEndIndex = bodyOpenTag.index + bodyOpenTag[0].length;\n const bodyCloseStartIndex = bodyCloseTag.index;\n if (bodyCloseStartIndex <= bodyOpenEndIndex) {\n logVerbose(\"getUpdatedLayout invalid body indices\", { bodyOpenEndIndex, bodyCloseStartIndex });\n return undefined;\n }\n\n const lines = layout.split(\"\\n\");\n const [bodyOpenEndLine, bodyOpenEndIndexInLine] = getLineIndex(\n lines,\n bodyOpenEndIndex\n );\n const [bodyCloseStartLine, bodyCloseStartIndexInLine] = getLineIndex(\n lines,\n bodyCloseStartIndex\n );\n\n const insertOpen = \"<StackProvider app={stackClientApp}><StackTheme>\";\n const insertClose = \"</StackTheme></StackProvider>\";\n\n layout =\n layout.slice(0, bodyCloseStartIndex) +\n insertClose +\n layout.slice(bodyCloseStartIndex);\n layout =\n layout.slice(0, bodyOpenEndIndex) +\n insertOpen +\n layout.slice(bodyOpenEndIndex);\n\n logVerbose(\"getUpdatedLayout success\", { updatedLength: layout.length });\n return {\n content: `${layout}`,\n indentation,\n };\n}\n\nfunction guessIndentation(str: string): string {\n const lines = str.split(\"\\n\");\n const linesLeadingWhitespaces = lines\n .map((line) => line.match(/^\\s*/)![0])\n .filter((ws) => ws.length > 0);\n const isMostlyTabs =\n linesLeadingWhitespaces.filter((ws) => ws.includes(\"\\t\")).length >=\n (linesLeadingWhitespaces.length * 2) / 3;\n if (isMostlyTabs) return \"\\t\";\n const linesLeadingWhitespacesCount = linesLeadingWhitespaces.map(\n (ws) => ws.length\n );\n const min = Math.min(Infinity, ...linesLeadingWhitespacesCount);\n return Number.isFinite(min) ? \" \".repeat(Math.max(2, min)) : \" \";\n}\n\nfunction getLineIndex(lines: string[], stringIndex: number): [number, number] {\n let lineIndex = 0;\n for (let l = 0; l < lines.length; l++) {\n const line = lines[l];\n if (stringIndex < lineIndex + line.length) {\n return [l, stringIndex - lineIndex];\n }\n lineIndex += line.length + 1;\n }\n throw new Error(\n `Index ${stringIndex} is out of bounds for lines ${JSON.stringify(lines)}`\n );\n}\n\nasync function getProjectPath(): Promise<string> {\n logVerbose(\"getProjectPath invoked\", { savedProjectPath });\n if (savedProjectPath === undefined) {\n savedProjectPath = process.cwd();\n\n const askForPathModification = !fs.existsSync(\n path.join(savedProjectPath, \"package.json\")\n );\n if (askForPathModification) {\n logVerbose(\"getProjectPath did not find package.json in cwd\", { cwd: savedProjectPath });\n if (onQuestionMode === \"guess\" || onQuestionMode === \"error\") {\n throw new UserError(`No package.json file found in ${savedProjectPath}. Re-run providing the project path argument (e.g. 'init-stack <project-path>').`);\n }\n savedProjectPath = (\n await inquirer.prompt([\n {\n type: \"input\",\n name: \"newPath\",\n message: \"Please enter the path to your project:\",\n default: \".\",\n },\n ])\n ).newPath;\n logVerbose(\"getProjectPath received manual input\", { savedProjectPath });\n }\n }\n logVerbose(\"getProjectPath resolved\", { savedProjectPath });\n return savedProjectPath as string;\n}\n\nasync function ensureGitWorkspaceIsReady(projectPath: string): Promise<void> {\n if (!warnUncommittedChanges) {\n logVerbose(\"ensureGitWorkspaceIsReady skipped as requested by user\");\n return;\n }\n\n logVerbose(\"ensureGitWorkspaceIsReady invoked\", { projectPath });\n let isGitRepo = false;\n try {\n const gitRepoResult = child_process.spawnSync(\n \"git\",\n [\"rev-parse\", \"--is-inside-work-tree\"],\n {\n shell: true,\n cwd: projectPath,\n encoding: \"utf8\",\n stdio: [\"ignore\", \"pipe\", \"ignore\"],\n }\n );\n isGitRepo = gitRepoResult.status === 0 && gitRepoResult.stdout.trim() === \"true\";\n } catch (e) {\n logVerbose(\"ensureGitWorkspaceIsReady failed to detect git repository\", { error: e });\n return;\n }\n if (!isGitRepo) {\n logVerbose(\"ensureGitWorkspaceIsReady skipping\", { reason: \"not-a-git-repo\" });\n return;\n }\n\n const statusResult = child_process.spawnSync(\n \"git\",\n [\"status\", \"--porcelain\"],\n {\n shell: true,\n cwd: projectPath,\n encoding: \"utf8\",\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n }\n );\n if (statusResult.error || statusResult.status !== 0) {\n logVerbose(\"ensureGitWorkspaceIsReady git status failed\", { status: statusResult.status, error: statusResult.error });\n return;\n }\n\n const lines = statusResult.stdout\n .split(\"\\n\")\n .map((line) => line.replace(/\\r$/, \"\"))\n .filter((line) => line.length > 0);\n\n const unstagedLines = lines.filter((line) => {\n if (line.startsWith(\"!!\")) return false;\n if (line.startsWith(\"??\")) return true;\n if (line.length < 2) return false;\n const workingTreeStatus = line[1];\n return Boolean(workingTreeStatus && workingTreeStatus !== \" \");\n });\n\n if (unstagedLines.length === 0) {\n logVerbose(\"ensureGitWorkspaceIsReady clean working tree\");\n return;\n }\n\n const changedFiles = unstagedLines.map((line) => {\n const filePath = line.slice(3).trim();\n return filePath.length > 0 ? filePath : line;\n });\n\n console.log();\n console.log(colorize.yellow`Detected unstaged/uncommitted changes in your Git repository:`);\n const filesToShow = changedFiles.slice(0, 10);\n for (const file of filesToShow) {\n console.log(` - ${file}`);\n }\n if (changedFiles.length > filesToShow.length) {\n console.log(` - ...and ${changedFiles.length - filesToShow.length} more`);\n }\n console.log(colorize.yellow`You may want to stage and commit these changes before installing Stack Auth, so you can review the changes afterwards.`);\n console.log();\n\n if (onQuestionMode === \"guess\") {\n console.log(colorize.yellow`Continuing because --on-question=guess.`);\n return;\n }\n if (onQuestionMode === \"error\") {\n throw new UnansweredQuestionError(\"Unstaged changes detected in the project directory\");\n }\n\n const { proceed } = await inquirer.prompt([\n {\n type: \"confirm\",\n name: \"proceed\",\n message: \"Continue with Stack initialization anyway?\",\n default: false,\n },\n ]);\n\n if (!proceed) {\n throw new UserError(\"Aborting Stack initialization to avoid overwriting unstaged changes.\");\n }\n logVerbose(\"ensureGitWorkspaceIsReady user confirmed proceed despite unstaged changes\");\n}\n\nasync function findJsExtension(fullPathWithoutExtension: string): Promise<string | null> {\n logVerbose(\"findJsExtension invoked\", { fullPathWithoutExtension });\n for (const ext of jsLikeFileExtensions) {\n const fullPath = fullPathWithoutExtension + \".\" + ext;\n if (fs.existsSync(fullPath)) {\n logVerbose(\"findJsExtension found file\", { fullPath, ext });\n return ext;\n }\n }\n logVerbose(\"findJsExtension no matching file\", { fullPathWithoutExtension });\n return null;\n}\n\nasync function promptPackageManager(): Promise<string> {\n const projectPath = await getProjectPath();\n const yarnLock = fs.existsSync(path.join(projectPath, \"yarn.lock\"));\n const pnpmLock = fs.existsSync(path.join(projectPath, \"pnpm-lock.yaml\"));\n const npmLock = fs.existsSync(path.join(projectPath, \"package-lock.json\"));\n const bunLock = fs.existsSync(path.join(projectPath, \"bun.lockb\")) || fs.existsSync(path.join(projectPath, \"bun.lock\"));\n\n logVerbose(\"promptPackageManager inspecting lockfiles\", { yarnLock, pnpmLock, npmLock, bunLock });\n\n if (yarnLock && !pnpmLock && !npmLock && !bunLock) {\n logVerbose(\"promptPackageManager auto-selected yarn\");\n return \"yarn\";\n } else if (!yarnLock && pnpmLock && !npmLock && !bunLock) {\n logVerbose(\"promptPackageManager auto-selected pnpm\");\n return \"pnpm\";\n } else if (!yarnLock && !pnpmLock && npmLock && !bunLock) {\n logVerbose(\"promptPackageManager auto-selected npm\");\n return \"npm\";\n } else if (!yarnLock && !pnpmLock && !npmLock && bunLock) {\n logVerbose(\"promptPackageManager auto-selected bun\");\n return \"bun\";\n }\n\n if (onQuestionMode === \"guess\") {\n logVerbose(\"promptPackageManager defaulting to npm due to guess mode\");\n return \"npm\";\n }\n if (onQuestionMode === \"error\") {\n throw new UnansweredQuestionError(\"Unable to determine the package manager. Re-run with one of: --npm, --yarn, --pnpm, or --bun.\");\n }\n\n const answers = await inquirer.prompt([\n {\n type: \"list\",\n name: \"packageManager\",\n message: \"Which package manager are you using for this project?\",\n choices: [\"npm\", \"yarn\", \"pnpm\", \"bun\"],\n },\n ]);\n logVerbose(\"promptPackageManager user selected\", { packageManager: answers.packageManager });\n return answers.packageManager;\n}\n\ntype ShellOptions = {\n quiet?: boolean,\n shell?: boolean,\n cwd?: string,\n [key: string]: any,\n}\n\nasync function shellNicelyFormatted(command: string, { quiet, ...options }: ShellOptions): Promise<void> {\n logVerbose(\"shellNicelyFormatted invoked\", { command, options: { ...options, quiet } });\n let ui: any;\n let interval: NodeJS.Timeout | undefined;\n if (!quiet) {\n console.log();\n ui = new inquirer.ui.BottomBar();\n let dots = 4;\n ui.updateBottomBar(\n colorize.blue`Running command: ${command}...`\n );\n interval = setInterval(() => {\n if (!isDryRun) {\n ui.updateBottomBar(\n colorize.blue`Running command: ${command}${\".\".repeat(dots++ % 5)}`\n );\n }\n }, 700);\n }\n\n try {\n if (!isDryRun) {\n const child = child_process.spawn(command, options);\n logVerbose(\"shellNicelyFormatted spawned process\", { pid: child.pid, command });\n if (!quiet) {\n child.stdout.pipe(ui.log);\n child.stderr.pipe(ui.log);\n }\n\n await new Promise<void>((resolve, reject) => {\n child.on(\"exit\", (code) => {\n if (code === 0) {\n resolve();\n } else {\n logVerbose(\"shellNicelyFormatted command failed\", { code });\n reject(new Error(`Command ${command} failed with code ${code}`));\n }\n });\n });\n } else {\n console.log(`[DRY-RUN] Would have run: ${command}`);\n logVerbose(\"shellNicelyFormatted skipped due to dry run\", { command });\n }\n\n if (!quiet) {\n commandsExecuted.push(command);\n ui.updateBottomBar(\n `${colorize.green`√`} Command ${command} succeeded\\n`\n );\n }\n logVerbose(\"shellNicelyFormatted completed\", { command });\n } catch (e) {\n logVerbose(\"shellNicelyFormatted encountered error\", { command, error: e instanceof Error ? { message: e.message, stack: e.stack } : e });\n if (!quiet) {\n ui.updateBottomBar(\n `${colorize.red`X`} Command ${command} failed\\n`\n );\n }\n throw e;\n } finally {\n if (interval) {\n clearTimeout(interval);\n }\n if (!quiet) {\n ui.close();\n }\n }\n}\n\nasync function readFile(fullPath: string): Promise<string | null> {\n logVerbose(\"readFile invoked\", { fullPath, isDryRun });\n try {\n if (!isDryRun) {\n const content = fs.readFileSync(fullPath, \"utf-8\");\n logVerbose(\"readFile succeeded\", { fullPath, length: content.length });\n return content;\n }\n logVerbose(\"readFile skipped due to dry run\", { fullPath });\n return null;\n } catch (err: any) {\n if (err.code === \"ENOENT\") {\n logVerbose(\"readFile file missing\", { fullPath });\n return null;\n }\n logVerbose(\"readFile errored\", { fullPath, error: err instanceof Error ? { message: err.message, stack: err.stack } : err });\n throw err;\n }\n}\n\nasync function writeFile(fullPath: string, content: string): Promise<void> {\n logVerbose(\"writeFile invoked\", { fullPath, length: content.length, isDryRun });\n let create = !fs.existsSync(fullPath);\n if (!isDryRun) {\n fs.mkdirSync(path.dirname(fullPath), { recursive: true });\n fs.writeFileSync(fullPath, content);\n logVerbose(\"writeFile wrote to disk\", { fullPath, created: create });\n } else {\n console.log(`[DRY-RUN] Would have written to ${fullPath}`);\n logVerbose(\"writeFile skipped due to dry run\", { fullPath });\n }\n const relativeToProjectPath = path.relative(await getProjectPath(), fullPath);\n if (!create) {\n filesModified.push(relativeToProjectPath);\n } else {\n filesCreated.push(relativeToProjectPath);\n }\n logVerbose(\"writeFile recorded change\", { relativeToProjectPath, created: create });\n}\n\nfunction laterWriteFile(fullPath: string, content: string): void {\n logVerbose(\"laterWriteFile scheduled\", { fullPath, length: content.length });\n writeFileHandlers.push(async () => {\n await writeFile(fullPath, content);\n });\n}\n\nasync function writeFileIfNotExists(fullPath: string, content: string): Promise<void> {\n if (!fs.existsSync(fullPath)) {\n logVerbose(\"writeFileIfNotExists writing new file\", { fullPath });\n await writeFile(fullPath, content);\n } else {\n logVerbose(\"writeFileIfNotExists skipped\", { fullPath });\n }\n}\n\nfunction laterWriteFileIfNotExists(fullPath: string, content: string): void {\n logVerbose(\"laterWriteFileIfNotExists scheduled\", { fullPath });\n writeFileHandlers.push(async () => {\n await writeFileIfNotExists(fullPath, content);\n });\n}\n\nasync function runDeferredCommands(): Promise<void> {\n if (!deferredCommandHandlers.length) {\n logVerbose(\"runDeferredCommands skipped\", { reason: \"no-handlers\" });\n return;\n }\n logVerbose(\"runDeferredCommands executing handlers\", { count: deferredCommandHandlers.length });\n for (let index = 0; index < deferredCommandHandlers.length; index++) {\n logVerbose(\"runDeferredCommands executing handler\", { index });\n const handler = deferredCommandHandlers[index];\n await handler();\n }\n logVerbose(\"runDeferredCommands completed\");\n}\n\ntype RunScheduledCommandMetadata = {\n recordInCommandsExecuted?: boolean,\n};\n\nasync function runScheduledCommand(\n command: string,\n args: string[],\n options: child_process.SpawnSyncOptions = {},\n metadata: RunScheduledCommandMetadata = {},\n): Promise<void> {\n logVerbose(\"runScheduledCommand invoked\", { command, args, options, isDryRun });\n const display = [command, ...args].join(\" \");\n if (isDryRun) {\n console.log(`[DRY-RUN] Would run: ${display}`);\n logVerbose(\"runScheduledCommand skipped due to dry run\", { display });\n return;\n }\n\n const result = child_process.spawnSync(command, args, {\n stdio: \"pipe\",\n ...options,\n });\n const recordInCommandsExecuted = metadata.recordInCommandsExecuted;\n if (recordInCommandsExecuted && !commandsExecuted.includes(display)) {\n commandsExecuted.push(display);\n }\n if (result.status === 0) {\n console.log(`${colorize.green`√`} ${display}`);\n logVerbose(\"runScheduledCommand succeeded\", { display });\n } else {\n logVerbose(\"runScheduledCommand failed\", { display, result, stderr: result.stderr.toString(), stdout: result.stdout.toString() });\n throw new Error(`Command ${display} failed with status ${result.status}: ${result.stderr.toString()}`);\n }\n}\n\nasync function recordFileChange(fullPath: string, existed: boolean): Promise<void> {\n logVerbose(\"recordFileChange invoked\", { fullPath, existed });\n const projectRoot = path.resolve(await getProjectPath());\n const relative = path.relative(projectRoot, fullPath);\n const insideProject = relative && !relative.startsWith(\"..\") && !path.isAbsolute(relative);\n const entry = insideProject ? relative : fullPath;\n\n if (existed) {\n if (!filesModified.includes(entry)) {\n filesModified.push(entry);\n }\n logVerbose(\"recordFileChange marked modified\", { entry });\n } else if (!filesCreated.includes(entry)) {\n filesCreated.push(entry);\n logVerbose(\"recordFileChange marked created\", { entry });\n }\n}\n\nfunction createConvexAuthConfigContent(options: { stackPackageName: string, type: \"js\" | \"next\" | \"react\" }): string {\n const envVarName = getPublicProjectEnvVarName(options.type);\n return `import { getConvexProvidersConfig } from ${JSON.stringify(options.stackPackageName)};\n\nexport default {\n providers: getConvexProvidersConfig({\n projectId: process.env.${envVarName},\n }),\n};\n`;\n}\n\nfunction createConvexIntegrationConvexConfigContent(stackPackageName: string): string {\n const importPath = `${stackPackageName}/convex.config`;\n return `import stackAuthComponent from ${JSON.stringify(importPath)};\nimport { defineApp } from \"convex/server\";\n\nconst app = defineApp();\napp.use(stackAuthComponent);\n\nexport default app;\n`;\n}\n\nfunction integrateConvexConfig(existingContent: string, stackPackageName: string): string | null {\n if (!existingContent.includes(\"defineApp\")) {\n return null;\n }\n\n const newline = existingContent.includes(\"\\r\\n\") ? \"\\r\\n\" : \"\\n\";\n const normalizedLines = existingContent.replace(/\\r\\n/g, \"\\n\").split(\"\\n\");\n const importPath = `${stackPackageName}/convex.config`;\n\n const hasImport = normalizedLines.some((line) => line.includes(importPath));\n if (!hasImport) {\n let insertIndex = 0;\n while (insertIndex < normalizedLines.length && normalizedLines[insertIndex].trim() === \"\") {\n insertIndex++;\n }\n while (insertIndex < normalizedLines.length && normalizedLines[insertIndex].trim().startsWith(\"import\")) {\n insertIndex++;\n }\n normalizedLines.splice(insertIndex, 0, `import stackAuthComponent from \"${importPath}\";`);\n }\n\n let lastImportIndex = -1;\n for (let i = 0; i < normalizedLines.length; i++) {\n if (normalizedLines[i].trim().startsWith(\"import\")) {\n lastImportIndex = i;\n continue;\n }\n if (normalizedLines[i].trim() === \"\") {\n continue;\n }\n break;\n }\n if (lastImportIndex >= 0) {\n const nextIndex = lastImportIndex + 1;\n if (!normalizedLines[nextIndex] || normalizedLines[nextIndex].trim() !== \"\") {\n normalizedLines.splice(nextIndex, 0, \"\");\n }\n }\n\n const hasStackUse = normalizedLines.some((line) => line.includes(\"app.use(stackAuthComponent\"));\n if (!hasStackUse) {\n const appLineIndex = normalizedLines.findIndex((line) => /const\\s+app\\s*=\\s*defineApp/.test(line));\n if (appLineIndex === -1) {\n return null;\n }\n const indent = normalizedLines[appLineIndex].match(/^\\s*/)?.[0] ?? \"\";\n const insertIndexForUse = appLineIndex + 1;\n normalizedLines.splice(insertIndexForUse, 0, `${indent}app.use(stackAuthComponent);`);\n const nextLineIndex = insertIndexForUse + 1;\n if (!normalizedLines[nextLineIndex] || normalizedLines[nextLineIndex].trim() !== \"\") {\n normalizedLines.splice(nextLineIndex, 0, \"\");\n }\n }\n\n let updated = normalizedLines.join(newline);\n if (!updated.endsWith(newline)) {\n updated += newline;\n }\n return updated;\n}\n\nfunction isSimpleConvexConfig(content: string): boolean {\n const normalized = content\n .replace(/\\r\\n/g, \"\\n\")\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter((line) => line.length > 0);\n if (normalized.length !== 3) {\n return false;\n }\n const [line1, line2, line3] = normalized;\n const importRegex = /^import\\s+\\{\\s*defineApp\\s*\\}\\s+from\\s+['\"]convex\\/server['\"];?$/;\n const appRegex = /^const\\s+app\\s*=\\s*defineApp\\(\\s*\\);?$/;\n const exportRegex = /^export\\s+default\\s+app;?$/;\n return importRegex.test(line1) && appRegex.test(line2) && exportRegex.test(line3);\n}\n\nfunction getPublicProjectEnvVarName(type: \"js\" | \"next\" | \"react\"): string {\n if (type === \"react\") {\n return \"VITE_STACK_PROJECT_ID\";\n }\n if (type === \"next\") {\n return \"NEXT_PUBLIC_STACK_PROJECT_ID\";\n }\n return \"STACK_PROJECT_ID\";\n}\n\ntype ConvexClientUpdateResult = {\n updatedFiles: string[],\n skippedFiles: string[],\n};\n\ntype AddSetAuthResult = {\n updatedContent: string,\n changed: boolean,\n usedClientApp: boolean,\n usedServerApp: boolean,\n instantiationCount: number,\n skippedHttpCount: number,\n};\n\nasync function updateConvexClients({ projectPath, type }: { projectPath: string, type: \"js\" | \"next\" | \"react\" }): Promise<ConvexClientUpdateResult> {\n const files = collectConvexClientCandidateFiles(projectPath);\n logVerbose(\"updateConvexClients collected files\", { projectPath, count: files.length });\n const updatedFiles: string[] = [];\n const skippedFiles: string[] = [];\n\n for (const filePath of files) {\n logVerbose(\"updateConvexClients inspecting file\", { filePath });\n const fileContent = await readFile(filePath);\n if (!fileContent) {\n logVerbose(\"updateConvexClients skipped file (no content)\", { filePath });\n continue;\n }\n if (!/new\\s+Convex(?:React|Http)?Client\\b/.test(fileContent)) {\n logVerbose(\"updateConvexClients skipped file (no Convex client)\", { filePath });\n continue;\n }\n\n const addResult = addSetAuthToConvexClients(fileContent, type);\n logVerbose(\"updateConvexClients processed file\", { filePath, addResult });\n if (!addResult.changed) {\n if (addResult.instantiationCount > 0 && addResult.skippedHttpCount > 0) {\n skippedFiles.push(filePath);\n }\n continue;\n }\n\n let finalContent = addResult.updatedContent;\n if (addResult.usedClientApp) {\n logVerbose(\"updateConvexClients ensuring client import\", { filePath });\n finalContent = await ensureStackAppImport(finalContent, filePath, \"client\");\n }\n if (addResult.usedServerApp) {\n logVerbose(\"updateConvexClients ensuring server import\", { filePath });\n finalContent = await ensureStackAppImport(finalContent, filePath, \"server\");\n }\n\n if (finalContent !== fileContent) {\n laterWriteFile(filePath, finalContent);\n updatedFiles.push(filePath);\n logVerbose(\"updateConvexClients scheduled update\", { filePath });\n }\n }\n\n logVerbose(\"updateConvexClients finished\", { updatedFiles, skippedFiles });\n return {\n updatedFiles,\n skippedFiles,\n };\n}\n\ntype StackAppKind = \"client\" | \"server\";\n\nasync function ensureStackAppImport(content: string, filePath: string, kind: StackAppKind): Promise<string> {\n logVerbose(\"ensureStackAppImport invoked\", { filePath, kind });\n const identifier = kind === \"client\" ? \"stackClientApp\" : \"stackServerApp\";\n if (new RegExp(`import\\\\s+[^;]*\\\\b${identifier}\\\\b`).test(content)) {\n logVerbose(\"ensureStackAppImport found existing import\", { filePath, identifier });\n return content;\n }\n\n const stackBasePath = await getStackAppBasePath(kind);\n const relativeImportPath = convertToModuleSpecifier(path.relative(path.dirname(filePath), stackBasePath));\n const newline = content.includes(\"\\r\\n\") ? \"\\r\\n\" : \"\\n\";\n\n const lines = content.split(/\\r?\\n/);\n const importLine = `import { ${identifier} } from \"${relativeImportPath}\";`;\n\n let insertIndex = 0;\n while (insertIndex < lines.length) {\n const line = lines[insertIndex];\n if (/^\\s*['\"]use (client|server)['\"];?\\s*$/.test(line)) {\n insertIndex += 1;\n continue;\n }\n if (/^\\s*import\\b/.test(line)) {\n insertIndex += 1;\n continue;\n }\n if (line.trim() === \"\") {\n insertIndex += 1;\n continue;\n }\n break;\n }\n\n lines.splice(insertIndex, 0, importLine);\n const nextLine = lines[insertIndex + 1];\n if (nextLine && nextLine.trim() !== \"\" && !/^\\s*import\\b/.test(nextLine)) {\n lines.splice(insertIndex + 1, 0, \"\");\n }\n\n logVerbose(\"ensureStackAppImport added import\", { filePath, importLine });\n return lines.join(newline);\n}\n\nfunction convertToModuleSpecifier(relativePath: string): string {\n let specifier = relativePath.replace(/\\\\/g, \"/\");\n if (!specifier.startsWith(\".\")) {\n specifier = \"./\" + specifier;\n }\n return specifier;\n}\n\nasync function getStackAppBasePath(kind: StackAppKind): Promise<string> {\n const srcPath = await Steps.guessSrcPath();\n const basePath = path.join(srcPath, \"stack\", kind);\n logVerbose(\"getStackAppBasePath resolved\", { kind, basePath });\n return basePath;\n}\n\nfunction addSetAuthToConvexClients(content: string, type: \"js\" | \"next\" | \"react\"): AddSetAuthResult {\n logVerbose(\"addSetAuthToConvexClients invoked\", { type, length: content.length });\n const newline = content.includes(\"\\r\\n\") ? \"\\r\\n\" : \"\\n\";\n const instantiationRegex = /^[ \\t]*(?:const|let|var)\\s+([A-Za-z_$][\\w$]*)\\s*=\\s*new\\s+(Convex(?:React|Http)?Client)\\b([\\s\\S]*?);/gm;\n const replacements: Array<{ start: number, end: number, text: string }> = [];\n let instantiationCount = 0;\n let skippedHttpCount = 0;\n let usedClientApp = false;\n let usedServerApp = false;\n\n let match: RegExpExecArray | null;\n while ((match = instantiationRegex.exec(content)) !== null) {\n instantiationCount += 1;\n const fullMatch = match[0];\n const variableName = match[1];\n const className = match[2];\n\n if (className === \"ConvexHttpClient\") {\n skippedHttpCount += 1;\n logVerbose(\"addSetAuthToConvexClients skipping ConvexHttpClient\", { variableName, fileLength: content.length });\n continue;\n }\n\n const remainder = content.slice(match.index + fullMatch.length);\n const setAuthRegex = new RegExp(`\\\\b${escapeRegExp(variableName)}\\\\s*\\\\.setAuth\\\\s*\\\\(`);\n if (setAuthRegex.test(remainder)) {\n logVerbose(\"addSetAuthToConvexClients found existing setAuth\", { variableName });\n continue;\n }\n\n const indentation = fullMatch.match(/^[\\t ]*/)?.[0] ?? \"\";\n const authCall = determineAuthCallExpression({ type, className, content });\n\n if (authCall.identifier === \"stackClientApp\") {\n usedClientApp = true;\n } else {\n usedServerApp = true;\n }\n\n const replacementText = `${fullMatch}${newline}${indentation}${variableName}.setAuth(${authCall.expression});`;\n replacements.push({\n start: match.index,\n end: match.index + fullMatch.length,\n text: replacementText,\n });\n logVerbose(\"addSetAuthToConvexClients queued replacement\", { variableName, authCall });\n }\n\n if (replacements.length === 0) {\n logVerbose(\"addSetAuthToConvexClients no replacements\", { instantiationCount, skippedHttpCount });\n return {\n updatedContent: content,\n changed: false,\n usedClientApp,\n usedServerApp,\n instantiationCount,\n skippedHttpCount,\n };\n }\n\n let updatedContent = content;\n for (let i = replacements.length - 1; i >= 0; i--) {\n const replacement = replacements[i];\n updatedContent = `${updatedContent.slice(0, replacement.start)}${replacement.text}${updatedContent.slice(replacement.end)}`;\n }\n\n logVerbose(\"addSetAuthToConvexClients completed replacements\", { replacements: replacements.length });\n logVerbose(\"addSetAuthToConvexClients result\", { changed: true, instantiationCount, skippedHttpCount, usedClientApp, usedServerApp });\n return {\n updatedContent,\n changed: true,\n usedClientApp,\n usedServerApp,\n instantiationCount,\n skippedHttpCount,\n };\n}\n\nfunction determineAuthCallExpression({ type, className, content }: { type: \"js\" | \"next\" | \"react\", className: string, content: string }): { expression: string, identifier: \"stackClientApp\" | \"stackServerApp\" } {\n const hasClientAppReference = /\\bstackClientApp\\b/.test(content);\n const hasServerAppReference = /\\bstackServerApp\\b/.test(content);\n logVerbose(\"determineAuthCallExpression context\", { type, className, hasClientAppReference, hasServerAppReference });\n\n if (type === \"js\") {\n const result = { expression: \"stackServerApp.getConvexClientAuth({})\", identifier: \"stackServerApp\" as const };\n logVerbose(\"determineAuthCallExpression returning for JS\", result);\n return result;\n }\n\n if (hasClientAppReference) {\n const result = { expression: getClientAuthCall(type), identifier: \"stackClientApp\" as const };\n logVerbose(\"determineAuthCallExpression using client reference\", result);\n return result;\n }\n if (hasServerAppReference && className !== \"ConvexReactClient\") {\n const result = { expression: \"stackServerApp.getConvexClientAuth({})\", identifier: \"stackServerApp\" as const };\n logVerbose(\"determineAuthCallExpression using server reference\", result);\n return result;\n }\n\n const fallback = { expression: getClientAuthCall(type), identifier: \"stackClientApp\" as const };\n logVerbose(\"determineAuthCallExpression fallback\", fallback);\n return fallback;\n}\n\nfunction getClientAuthCall(type: \"js\" | \"next\" | \"react\"): string {\n logVerbose(\"getClientAuthCall invoked\", { type });\n return \"stackClientApp.getConvexClientAuth({})\";\n}\n\nfunction collectConvexClientCandidateFiles(projectPath: string): string[] {\n logVerbose(\"collectConvexClientCandidateFiles invoked\", { projectPath });\n const roots = getConvexSearchRoots(projectPath);\n logVerbose(\"collectConvexClientCandidateFiles roots\", { roots });\n const files = new Set<string>();\n const visited = new Set<string>();\n\n for (const root of roots) {\n walkDirectory(root, files, visited);\n }\n\n const result = Array.from(files);\n logVerbose(\"collectConvexClientCandidateFiles result\", { count: result.length });\n return result;\n}\n\nfunction getConvexSearchRoots(projectPath: string): string[] {\n const candidateDirs = [\"convex\", \"src\", \"app\", \"components\"];\n const existing = candidateDirs\n .map((dir) => path.join(projectPath, dir))\n .filter((dirPath) => {\n try {\n return fs.existsSync(dirPath) && fs.statSync(dirPath).isDirectory();\n } catch {\n return false;\n }\n });\n if (existing.length > 0) {\n logVerbose(\"getConvexSearchRoots using existing directories\", { existing });\n return existing;\n }\n logVerbose(\"getConvexSearchRoots defaulting to project root\", { projectPath });\n return [projectPath];\n}\n\nconst directorySkipList = new Set([\n \"node_modules\",\n \".git\",\n \".next\",\n \".turbo\",\n \".output\",\n \".vercel\",\n \"dist\",\n \"build\",\n \"coverage\",\n \".cache\",\n \".storybook\",\n \"storybook-static\",\n]);\n\nfunction walkDirectory(currentDir: string, files: Set<string>, visited: Set<string>): void {\n const realPath = (() => {\n try {\n return fs.realpathSync(currentDir);\n } catch {\n return currentDir;\n }\n })();\n\n if (visited.has(realPath)) return;\n visited.add(realPath);\n logVerbose(\"walkDirectory scanning\", { currentDir: realPath });\n\n let dirEntries: fs.Dirent[];\n try {\n dirEntries = fs.readdirSync(realPath, { withFileTypes: true });\n } catch {\n return;\n }\n\n for (const entry of dirEntries) {\n const entryName = entry.name;\n if (entry.isDirectory()) {\n if (directorySkipList.has(entryName)) {\n logVerbose(\"walkDirectory skipping directory in skip list\", { directory: entryName, parent: realPath });\n continue;\n }\n if (entryName.startsWith(\".\") || entryName.startsWith(\"_\")) {\n logVerbose(\"walkDirectory skipping hidden directory\", { directory: entryName, parent: realPath });\n continue;\n }\n walkDirectory(path.join(realPath, entryName), files, visited);\n continue;\n }\n if (!entry.isFile()) continue;\n if (entryName.endsWith(\".d.ts\")) continue;\n if (!hasJsLikeExtension(entryName)) continue;\n const filePath = path.join(realPath, entryName);\n files.add(filePath);\n logVerbose(\"walkDirectory added file\", { filePath });\n }\n}\n\nfunction hasJsLikeExtension(fileName: string): boolean {\n return jsLikeFileExtensions.some((ext) => fileName.endsWith(`.${ext}`));\n}\n\nfunction escapeRegExp(str: string): string {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction throwErr(message: string): never {\n throw new Error(message);\n}\n\nasync function clearStdin(): Promise<void> {\n logVerbose(\"clearStdin invoked\");\n await new Promise<void>((resolve) => {\n if (process.stdin.isTTY) {\n process.stdin.setRawMode(true);\n }\n process.stdin.resume();\n process.stdin.removeAllListeners('data');\n\n const flush = () => {\n while (process.stdin.read() !== null) { }\n if (process.stdin.isTTY) {\n process.stdin.setRawMode(false);\n }\n logVerbose(\"clearStdin flushed\");\n resolve();\n };\n\n // Add a small delay to allow any buffered input to clear\n setTimeout(flush, 10);\n });\n logVerbose(\"clearStdin completed\");\n}\n","{\n \"name\": \"@stackframe/init-stack\",\n \"version\": \"2.8.55\",\n \"description\": \"The setup wizard for Stack. https://stack-auth.com\",\n \"main\": \"dist/index.js\",\n \"type\": \"module\",\n \"bin\": \"./dist/index.js\",\n \"scripts\": {\n \"clean\": \"rimraf test-run-output && rimraf node_modules && rimraf dist\",\n \"build\": \"tsup\",\n \"dev\": \"tsup --watch\",\n \"lint\": \"eslint --ext .tsx,.ts .\",\n \"typecheck\": \"tsc --noEmit\",\n \"init-stack\": \"node dist/index.js\",\n \"init-stack:local\": \"STACK_INIT_API_BASE_URL=http://localhost:${NEXT_PUBLIC_STACK_PORT_PREFIX:-81}02 STACK_NEXT_INSTALL_PACKAGE_NAME_OVERRIDE=../../stack STACK_JS_INSTALL_PACKAGE_NAME_OVERRIDE=../../js STACK_REACT_INSTALL_PACKAGE_NAME_OVERRIDE=../../react node dist/index.js\",\n \"test-run\": \"pnpm run build && pnpm run test-run-js && pnpm run test-run-node && pnpm run test-run-next && pnpm run test-run-neon && pnpm run test-run-no-browser\",\n \"test-run:manual\": \"pnpm run build && pnpm run test-run-js:manual && pnpm run test-run-node:manual && pnpm run test-run-next:manual && pnpm run test-run-neon:manual\",\n \"ensure-neon\": \"grep -q '\\\"@neondatabase/serverless\\\"' ./test-run-output/package.json && echo 'Initialized Neon successfully!'\",\n \"test-run-neon\": \"pnpm run test-run-node --neon && pnpm run ensure-neon\",\n \"test-run-neon:manual\": \"pnpm run test-run-node:manual --neon && pnpm run ensure-neon\",\n \"test-run-no-browser\": \"rimraf test-run-output && mkdir test-run-output && cd test-run-output && npm init --init-author-name example-author --init-license UNLICENSED --init-author-url http://example.com --init-module test-run-output --init-version 1.0.0 -y && cd .. && pnpm run init-stack:local test-run-output --on-question error --no-warn-uncommitted-changes --js --server --npm --no-browser\",\n \"test-run-node:manual\": \"rimraf test-run-output && mkdir test-run-output && cd test-run-output && npm init && cd .. && pnpm run init-stack:local test-run-output\",\n \"test-run-node\": \"rimraf test-run-output && mkdir test-run-output && cd test-run-output && npm init --init-author-name example-author --init-license UNLICENSED --init-author-url http://example.com --init-module test-run-output --init-version 1.0.0 -y && cd .. && pnpm run init-stack:local test-run-output --on-question error --no-warn-uncommitted-changes --js --server --npm --no-browser\",\n \"test-run-js:manual\": \"rimraf test-run-output && pnpx sv create test-run-output --no-install && pnpm run init-stack:local test-run-output\",\n \"test-run-js\": \"rimraf test-run-output && pnpx sv create test-run-output --template minimal --types ts --no-add-ons --no-install && pnpm run init-stack:local test-run-output --on-question error --no-warn-uncommitted-changes --js --client --npm --no-browser\",\n \"test-run-next:manual\": \"rimraf test-run-output && pnpx create-next-app@latest test-run-output && pnpm run init-stack:local test-run-output\",\n \"test-run-next\": \"rimraf test-run-output && pnpx create-next-app@latest test-run-output --app --ts --no-src-dir --tailwind --use-npm --eslint --import-alias '##@#/*' --turbopack && pnpm run init-stack:local test-run-output --on-question error --no-warn-uncommitted-changes --no-browser\",\n \"test-run-keys-next\": \"rimraf test-run-output && pnpx create-next-app@latest test-run-output --app --ts --no-src-dir --tailwind --use-npm --eslint --import-alias '##@#/*' --turbopack && pnpm run init-stack:local test-run-output --on-question error --no-warn-uncommitted-changes --project-id my-project-id --publishable-client-key my-publishable-client-key\",\n \"test-run-keys-js\": \"rimraf test-run-output && pnpx sv create test-run-output --template minimal --types ts --no-add-ons --no-install && pnpm run init-stack:local test-run-output --on-question error --no-warn-uncommitted-changes --js --client --npm --project-id my-project-id --publishable-client-key my-publishable-client-key\",\n \"test-run-react\": \"rimraf test-run-output && pnpx create-vite@latest test-run-output --template react-ts && pnpm run init-stack:local test-run-output --on-question error --no-warn-uncommitted-changes --no-browser --npm\",\n \"test-run-react:manual\": \"rimraf test-run-output && pnpx create-vite@latest test-run-output --template react-ts && pnpm run init-stack:local test-run-output --react\"\n },\n \"files\": [\n \"README.md\",\n \"dist\",\n \"CHANGELOG.md\",\n \"LICENSE\"\n ],\n \"homepage\": \"https://stack-auth.com\",\n \"keywords\": [],\n \"author\": \"\",\n \"license\": \"MIT\",\n \"dependencies\": {\n \"@stackframe/stack-shared\": \"workspace:*\",\n \"commander\": \"^13.1.0\",\n \"inquirer\": \"^9.2.19\",\n \"open\": \"^10.1.0\",\n \"posthog-node\": \"^4.1.0\"\n },\n \"devDependencies\": {\n \"@types/inquirer\": \"^9.0.7\",\n \"@types/node\": \"20.17.6\",\n \"rimraf\": \"^6.0.1\",\n \"tsup\": \"^8.4.0\",\n \"typescript\": \"5.3.3\"\n },\n \"packageManager\": \"pnpm@10.23.0\"\n}\n","import type { SpawnSyncOptions } from \"child_process\";\nimport * as fs from \"fs\";\nimport * as os from \"os\";\nimport * as path from \"path\";\n\nimport type { Colorize, JsonRecord } from \"./util\";\nimport { getCommandPath, logVerbose, shouldWriteConfigFile } from \"./util\";\n\nconst MCP_SERVER_NAME = \"stack-auth\";\nconst MCP_SERVER_URL = \"https://mcp.stack-auth.com/\";\nconst MCP_ACCEPT_HEADER = \"application/json, text/event-stream\";\n\ntype JsonUpdater = (current: JsonRecord) => JsonRecord | null | undefined;\ntype JsonTarget = { path: string, allowCreate?: boolean };\n\nconst VS_CODE_PAYLOAD = JSON.stringify({ type: \"http\", name: MCP_SERVER_NAME, url: MCP_SERVER_URL });\nconst CLAUDE_BASE_ARGS = [\"mcp\", \"add\", \"--transport\", \"http\", MCP_SERVER_NAME, MCP_SERVER_URL] as const;\ntype RunScheduledCommandMetadata = {\n recordInCommandsExecuted?: boolean,\n};\n\ntype McpSchedulerContext = {\n projectPath: string,\n isDryRun: boolean,\n colorize: Colorize,\n registerWriteHandler: (handler: () => Promise<void>) => void,\n registerCommandHandler: (handler: () => Promise<void>) => void,\n recordFileChange: (fullPath: string, existed: boolean) => Promise<void>,\n runScheduledCommand: (\n command: string,\n args: string[],\n options?: SpawnSyncOptions,\n metadata?: RunScheduledCommandMetadata,\n ) => Promise<void>,\n};\n\nexport function scheduleMcpConfiguration(ctx: McpSchedulerContext): void {\n const workspaceRoot = path.resolve(ctx.projectPath);\n const homeDir = os.homedir();\n\n logMcpVerbose(\"scheduleMcpConfiguration invoked\", { workspaceRoot, homeDir });\n scheduleCursorConfigs(ctx, homeDir, workspaceRoot);\n scheduleVsCodeConfigs(ctx, homeDir, workspaceRoot);\n scheduleClaudeConfigs(ctx, workspaceRoot);\n scheduleWindsurfConfigs(ctx, homeDir);\n scheduleGeminiConfig(ctx, homeDir);\n}\n\nfunction scheduleCursorConfigs(ctx: McpSchedulerContext, homeDir: string, workspaceRoot: string): void {\n const updater = createServerUpdater(\"mcpServers\", { url: MCP_SERVER_URL });\n logMcpVerbose(\"Scheduling Cursor MCP configs\", { homeDir, workspaceRoot });\n const targets = [\n { path: path.join(homeDir, \".cursor\", \"mcp.json\"), allowCreate: false, scope: \"home\" },\n { path: path.join(workspaceRoot, \".cursor\", \"mcp.json\"), allowCreate: true, scope: \"workspace\" },\n ];\n for (const target of targets) {\n logInvestigationStatus(\"Cursor\", target.path, target.scope);\n }\n scheduleJsonTargets(\n ctx,\n targets.map(({ path: targetPath, allowCreate }) => ({ path: targetPath, allowCreate })),\n updater,\n );\n}\n\nfunction scheduleVsCodeConfigs(ctx: McpSchedulerContext, homeDir: string, workspaceRoot: string): void {\n const updater = createServerUpdater(\"servers\", { type: \"http\", url: MCP_SERVER_URL });\n const paths = getVsCodeUserConfigPaths(homeDir);\n\n logMcpVerbose(\"Scheduling VS Code MCP configs\", { homeDir, paths });\n paths.stable.forEach((configPath) => logInvestigationStatus(\"VS Code (stable)\", configPath));\n paths.insiders.forEach((configPath) => logInvestigationStatus(\"VS Code (insiders)\", configPath));\n const workspaceTarget = path.join(workspaceRoot, \".vscode\", \"mcp.json\");\n logInvestigationStatus(\"VS Code (workspace)\", workspaceTarget);\n const stableChanged = scheduleJsonTargets(\n ctx,\n paths.stable.map((configPath) => ({ path: configPath })),\n updater,\n );\n const insidersChanged = scheduleJsonTargets(\n ctx,\n paths.insiders.map((configPath) => ({ path: configPath })),\n updater,\n );\n const workspaceChanged = scheduleJsonTargets(\n ctx,\n [{ path: path.join(workspaceRoot, \".vscode\", \"mcp.json\"), allowCreate: true }],\n updater,\n );\n\n scheduleCliIfAvailable(ctx, \"code\", [\"--add-mcp\", VS_CODE_PAYLOAD], true);\n scheduleCliIfAvailable(ctx, \"code-insiders\", [\"--add-mcp\", VS_CODE_PAYLOAD], true);\n}\n\nfunction findClaudeExecutable(): string {\n // Check for local installations first\n // (Claude installs itself via alias so it may not be in the system PATH)\n const homeDir = os.homedir();\n const localBinPath = path.join(homeDir, \".local\", \"bin\", \"claude\");\n const claudeLocalPath = path.join(homeDir, \".claude\", \"local\", \"claude\");\n\n if (fs.existsSync(localBinPath)) {\n return localBinPath;\n }\n\n if (fs.existsSync(claudeLocalPath)) {\n return claudeLocalPath;\n }\n\n // Fall back to system PATH\n return \"claude\";\n}\n\nfunction scheduleClaudeConfigs(ctx: McpSchedulerContext, workspaceRoot: string): void {\n const updater = createServerUpdater(\"mcpServers\", { type: \"http\", url: MCP_SERVER_URL });\n logMcpVerbose(\"Scheduling Claude MCP configs\", { workspaceRoot });\n const targetPath = path.join(workspaceRoot, \".mcp.json\");\n logInvestigationStatus(\"Claude (project)\", targetPath);\n const projectConfigChanged = scheduleJsonTargets(\n ctx,\n [{ path: targetPath, allowCreate: true }],\n updater,\n );\n\n const claudeExecutable = findClaudeExecutable();\n scheduleCliIfAvailable(ctx, claudeExecutable, [...CLAUDE_BASE_ARGS, \"--scope\", \"user\"], projectConfigChanged);\n scheduleCliIfAvailable(\n ctx,\n claudeExecutable,\n [...CLAUDE_BASE_ARGS, \"--scope\", \"project\"],\n projectConfigChanged,\n { cwd: workspaceRoot },\n );\n}\n\nfunction scheduleWindsurfConfigs(ctx: McpSchedulerContext, homeDir: string): void {\n const updater = createServerUpdater(\"mcpServers\", { serverUrl: MCP_SERVER_URL });\n logMcpVerbose(\"Scheduling Windsurf MCP configs\", { homeDir });\n const paths = getWindsurfConfigPaths(homeDir);\n paths.forEach((configPath) => logInvestigationStatus(\"Windsurf\", configPath));\n scheduleJsonTargets(ctx, paths.map((configPath) => ({ path: configPath })), updater);\n}\n\nfunction scheduleGeminiConfig(ctx: McpSchedulerContext, homeDir: string): void {\n const updater = createServerUpdater(\"mcpServers\", {\n httpUrl: MCP_SERVER_URL,\n headers: { Accept: MCP_ACCEPT_HEADER },\n });\n\n logMcpVerbose(\"Scheduling Gemini MCP configs\", { homeDir });\n const targetPath = path.join(homeDir, \".gemini\", \"settings.json\");\n logInvestigationStatus(\"Gemini\", targetPath);\n scheduleJsonTargets(\n ctx,\n [{ path: targetPath }],\n updater,\n );\n}\n\nfunction scheduleJsonFileUpdate(\n ctx: McpSchedulerContext,\n fullPath: string | null | undefined,\n update: JsonUpdater,\n options: { allowCreate?: boolean } = {}\n): boolean {\n logMcpVerbose(\"scheduleJsonFileUpdate invoked\", { fullPath, allowCreate: options.allowCreate });\n if (!fullPath) {\n logMcpVerbose(\"scheduleJsonFileUpdate skipped: no path provided\");\n return false;\n }\n\n const allowCreate = options.allowCreate ?? false;\n if (!shouldWriteConfigFile(fullPath, { allowCreate })) {\n logMcpVerbose(\"scheduleJsonFileUpdate skipped: shouldWriteConfigFile returned false\", { fullPath, allowCreate });\n return false;\n }\n\n const absolutePath = path.resolve(fullPath);\n const info = readJsonOrEmpty(absolutePath);\n logMcpVerbose(\"scheduleJsonFileUpdate current file info\", { absolutePath, existed: info.existed, parseError: info.parseError?.message });\n const draft = cloneJsonRecord(info.data);\n const updated = update(draft);\n if (!updated) {\n logMcpVerbose(\"scheduleJsonFileUpdate skipped: updater returned nullish\", { absolutePath });\n return false;\n }\n\n const nextContent = JSON.stringify(updated, null, 2) + \"\\n\";\n const currentContent = info.existed && !info.parseError ? JSON.stringify(info.data, null, 2) + \"\\n\" : null;\n if (!info.parseError && currentContent === nextContent) {\n logMcpVerbose(\"scheduleJsonFileUpdate skipped: content unchanged\", { absolutePath });\n return false;\n }\n\n ctx.registerWriteHandler(async () => {\n await writeJsonFile(ctx, absolutePath, update, { allowCreate });\n });\n\n logMcpVerbose(\"scheduleJsonFileUpdate scheduled write\", { absolutePath });\n return true;\n}\n\ntype WriteJsonOptions = { allowCreate?: boolean };\n\nasync function writeJsonFile(\n ctx: McpSchedulerContext,\n absolutePath: string,\n update: JsonUpdater,\n options: WriteJsonOptions\n): Promise<void> {\n logMcpVerbose(\"writeJsonFile invoked\", { absolutePath, allowCreate: options.allowCreate });\n const allowCreate = options.allowCreate ?? false;\n const info = readJsonOrEmpty(absolutePath);\n\n if (!info.existed && !allowCreate) {\n logMcpVerbose(\"writeJsonFile skipped: file missing and allowCreate false\", { absolutePath });\n return;\n }\n\n let current = info.data;\n if (info.parseError) {\n console.warn(\n ctx.colorize.yellow`Warning: Unable to parse MCP config at ${absolutePath}. It will be replaced with a fresh configuration.`\n );\n current = {};\n logMcpVerbose(\"writeJsonFile parse error encountered; falling back to empty object\", { absolutePath, error: info.parseError.message });\n }\n\n const draft = cloneJsonRecord(current);\n const updated = update(draft);\n if (!updated) {\n logMcpVerbose(\"writeJsonFile skipped: updater returned nullish\", { absolutePath });\n return;\n }\n\n const nextContent = JSON.stringify(updated, null, 2) + \"\\n\";\n const currentContent = info.existed && !info.parseError ? JSON.stringify(current, null, 2) + \"\\n\" : null;\n if (currentContent === nextContent && !info.parseError) {\n logMcpVerbose(\"writeJsonFile skipped: current content matches desired content\", { absolutePath });\n return;\n }\n\n if (ctx.isDryRun) {\n console.log(`[DRY-RUN] Would write ${absolutePath}`);\n logMcpVerbose(\"writeJsonFile dry-run; write skipped\", { absolutePath });\n return;\n }\n\n fs.mkdirSync(path.dirname(absolutePath), { recursive: true });\n\n if (info.existed) {\n try {\n fs.copyFileSync(absolutePath, `${absolutePath}.bak`);\n } catch {\n // Ignore backup failures; the write below is still valid.\n }\n }\n\n fs.writeFileSync(absolutePath, nextContent, \"utf-8\");\n await ctx.recordFileChange(absolutePath, info.existed);\n logMcpVerbose(\"writeJsonFile completed write\", { absolutePath, existed: info.existed });\n}\n\nfunction scheduleJsonTargets(ctx: McpSchedulerContext, targets: JsonTarget[], update: JsonUpdater): boolean {\n let changed = false;\n logMcpVerbose(\"scheduleJsonTargets invoked\", { targetCount: targets.length });\n for (const target of targets) {\n if (!target.path) continue;\n if (scheduleJsonFileUpdate(ctx, target.path, update, { allowCreate: target.allowCreate })) {\n changed = true;\n }\n }\n logMcpVerbose(\"scheduleJsonTargets completed\", { changed });\n return changed;\n}\n\nfunction scheduleCliIfAvailable(\n ctx: McpSchedulerContext,\n command: string,\n args: string[],\n shouldRun: boolean,\n options?: SpawnSyncOptions,\n): void {\n logMcpVerbose(\"scheduleCliIfAvailable invoked\", { command, args, shouldRun });\n if (!shouldRun) {\n logMcpVerbose(\"scheduleCliIfAvailable skipped: shouldRun false\", { command });\n return;\n }\n const commandPath = getCommandPath(command);\n if (!commandPath) {\n logMcpVerbose(\"scheduleCliIfAvailable skipped: command not available\", { command });\n return;\n }\n logMcpVerbose(\"scheduleCliIfAvailable scheduling CLI registration\", { command });\n scheduleCliRegistration(ctx, commandPath, args, options);\n}\n\nfunction createServerUpdater(containerKey: string, entry: JsonRecord): JsonUpdater {\n logMcpVerbose(\"createServerUpdater invoked\", { containerKey });\n return (current: JsonRecord): JsonRecord => {\n const next = { ...current };\n const servers = { ...(next[containerKey] ?? {}) };\n servers[MCP_SERVER_NAME] = cloneJsonRecord(entry);\n next[containerKey] = servers;\n return next;\n };\n}\n\nfunction getVsCodeUserConfigPaths(homeDir: string): { stable: string[], insiders: string[] } {\n const stable = new Set<string>();\n const insiders = new Set<string>();\n const platform = process.platform;\n\n logMcpVerbose(\"getVsCodeUserConfigPaths invoked\", { homeDir, platform });\n if (platform === \"darwin\") {\n stable.add(path.join(homeDir, \"Library\", \"Application Support\", \"Code\", \"User\", \"mcp.json\"));\n insiders.add(path.join(homeDir, \"Library\", \"Application Support\", \"Code - Insiders\", \"User\", \"mcp.json\"));\n } else if (platform === \"win32\") {\n const appData = process.env.APPDATA;\n if (appData) {\n stable.add(path.join(appData, \"Code\", \"User\", \"mcp.json\"));\n insiders.add(path.join(appData, \"Code - Insiders\", \"User\", \"mcp.json\"));\n }\n } else {\n stable.add(path.join(homeDir, \".config\", \"Code\", \"User\", \"mcp.json\"));\n insiders.add(path.join(homeDir, \".config\", \"Code - Insiders\", \"User\", \"mcp.json\"));\n }\n\n return {\n stable: Array.from(stable),\n insiders: Array.from(insiders),\n };\n}\n\nfunction getWindsurfConfigPaths(homeDir: string): string[] {\n const paths = new Set<string>();\n\n logMcpVerbose(\"getWindsurfConfigPaths invoked\", { homeDir, platform: process.platform });\n if (process.platform === \"darwin\") {\n paths.add(path.join(homeDir, \".codeium\", \"windsurf\", \"mcp_config.json\"));\n } else if (process.platform === \"win32\") {\n const appData = process.env.APPDATA;\n if (appData) {\n paths.add(path.join(appData, \"Codeium\", \"Windsurf\", \"mcp_config.json\"));\n }\n } else {\n paths.add(path.join(homeDir, \".config\", \"Codeium\", \"Windsurf\", \"mcp_config.json\"));\n paths.add(path.join(homeDir, \".codeium\", \"windsurf\", \"mcp_config.json\"));\n paths.add(path.join(homeDir, \".var\", \"app\", \"com.codeium.windsurf\", \"config\", \"Codeium\", \"Windsurf\", \"mcp_config.json\"));\n }\n\n return Array.from(paths);\n}\n\ntype JsonReadResult = { existed: boolean, data: JsonRecord, parseError: Error | null };\n\nfunction readJsonOrEmpty(fullPath: string): JsonReadResult {\n logMcpVerbose(\"readJsonOrEmpty invoked\", { fullPath });\n if (!fs.existsSync(fullPath)) {\n logMcpVerbose(\"readJsonOrEmpty no file found\", { fullPath });\n return { existed: false, data: {}, parseError: null };\n }\n\n try {\n const raw = fs.readFileSync(fullPath, \"utf-8\");\n const data = raw.trim() ? JSON.parse(raw) : {};\n logMcpVerbose(\"readJsonOrEmpty parsed file\", { fullPath, hasContent: Boolean(raw.trim()) });\n return { existed: true, data, parseError: null };\n } catch (error) {\n const parseError = error instanceof Error ? error : new Error(String(error));\n logMcpVerbose(\"readJsonOrEmpty parse error\", { fullPath, error: parseError.message });\n return { existed: true, data: {}, parseError };\n }\n}\n\nfunction cloneJsonRecord<T extends JsonRecord>(value: T): T {\n return JSON.parse(JSON.stringify(value)) as T;\n}\n\nfunction scheduleCliRegistration(\n ctx: McpSchedulerContext,\n command: string,\n args: string[],\n options: SpawnSyncOptions = {}\n): void {\n logMcpVerbose(\"scheduleCliRegistration invoked\", { command, args, options });\n ctx.registerCommandHandler(async () => {\n try {\n await ctx.runScheduledCommand(command, args, options, {\n recordInCommandsExecuted: false,\n });\n } catch (error) {\n logMcpVerbose(\"scheduleCliRegistration encountered error. Ignoring.\", { command, args, options, error: error instanceof Error ? { message: error.message, stack: error.stack } : error });\n }\n });\n}\n\nfunction logMcpVerbose(message: string, details?: unknown): void {\n logVerbose(`[mcp] ${message}`, details);\n}\n\nfunction logInvestigationStatus(editorLabel: string, configPath: string, scope?: string): void {\n const exists = fs.existsSync(configPath);\n logMcpVerbose(`Investigating ${editorLabel} config${scope ? ` (${scope})` : \"\"}`, { path: configPath, exists });\n}\n","import * as child_process from \"child_process\";\nimport * as fs from \"fs\";\nimport * as path from \"path\";\n\nexport type TemplateFunction = (strings: TemplateStringsArray, ...values: any[]) => string;\n\nexport type Colorize = {\n red: TemplateFunction,\n blue: TemplateFunction,\n green: TemplateFunction,\n yellow: TemplateFunction,\n bold: TemplateFunction,\n};\n\nexport type JsonRecord = Record<string, any>;\n\ntype VerboseFormatter = (message: string) => string;\n\nlet verboseLevelState = 0;\nlet verboseFormatterState: VerboseFormatter | null = null;\n\nexport function configureVerboseLogging(options: { level?: number, formatter?: VerboseFormatter }): void {\n verboseLevelState = Math.max(0, options.level ?? 0);\n verboseFormatterState = options.formatter ?? null;\n}\n\nexport function getVerboseLevel(): number {\n return verboseLevelState;\n}\n\nexport function logVerbose(message: string, details?: unknown): void {\n if (verboseLevelState <= 0) return;\n const formattedMessage = verboseFormatterState ? verboseFormatterState(message) : `[verbose] ${message}`;\n console.log(formattedMessage);\n if (typeof details !== \"undefined\" && verboseLevelState >= 2) {\n console.dir(details, { depth: null });\n }\n}\n\nexport function templateIdentity(strings: TemplateStringsArray, ...values: any[]): string {\n if (strings.length === 0) return \"\";\n if (values.length !== strings.length - 1) {\n throw new Error(\"Invalid number of values; must be one less than strings\");\n }\n\n return strings.slice(1).reduce(\n (result, string, i) => `${result}${String(values[i])}${string}`,\n strings[0]\n );\n}\n\nexport function omit(object: Record<string, any>, keys: string[]): Record<string, any> {\n return Object.fromEntries(Object.entries(object).filter(([key]) => !keys.includes(key)));\n}\n\nexport function getCommandPath(command: string): string | null {\n if (!command) return null;\n\n const checker = process.platform === \"win32\" ? \"where\" : \"which\";\n const commands = [\n [process.env.SHELL ?? \"bash\", [\"-ic\", `${checker} ${command}`]],\n [checker, [command]],\n ] as const;\n for (const spawnArgs of commands) {\n const result = child_process.spawnSync(spawnArgs[0], spawnArgs[1], { stdio: \"pipe\" });\n if (result.status === 0) {\n return result.stdout.toString().trim().split('\\n')[0];\n }\n }\n return null;\n}\n\nexport function shouldWriteConfigFile(\n fullPath: string | null | undefined,\n options: { allowCreate?: boolean } = {}\n): boolean {\n if (!fullPath) return false;\n if (fs.existsSync(fullPath)) return true;\n\n const dir = path.dirname(fullPath);\n if (!options.allowCreate) {\n return fs.existsSync(dir);\n }\n\n return true;\n}\n","type TelegramErrorInfo = {\n name?: string,\n message: string,\n stack?: string,\n};\n\nexport type TelegramCompletionPayload = {\n success: boolean,\n distinctId?: string,\n options: Record<string, unknown>,\n args: string[],\n isNonInteractive: boolean,\n timestamp: string,\n projectPath?: string,\n error?: TelegramErrorInfo,\n};\n\nconst API_BASE_ENV = \"STACK_INIT_API_BASE_URL\";\nconst DEFAULT_API_BASE_URL = \"https://api.stack-auth.com\";\nconst CALLBACK_ENDPOINT = \"/api/latest/internal/init-script-callback\";\n\nexport async function invokeCallback(payload: TelegramCompletionPayload): Promise<void> {\n const baseUrl = process.env[API_BASE_ENV] ?? DEFAULT_API_BASE_URL;\n await fetch(`${baseUrl}${CALLBACK_ENDPOINT}`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(payload),\n });\n}\n"],"mappings":"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","names":["child_process","fs","os","path","fs","path","options","options","options","platform","resolve","options","relative"]}
1
+ {"version":3,"sources":["../src/index.ts","../package.json","../src/mcp.ts","../src/util.ts","../src/telegram.ts"],"sourcesContent":["import * as child_process from \"child_process\";\nimport { Command } from \"commander\";\nimport * as crypto from 'crypto';\nimport * as fs from \"fs\";\nimport inquirer from \"inquirer\";\nimport open from \"open\";\nimport * as os from 'os';\nimport * as path from \"path\";\nimport { PostHog } from 'posthog-node';\nimport packageJson from '../package.json';\nimport { scheduleMcpConfiguration } from \"./mcp\";\nimport { invokeCallback } from \"./telegram\";\nimport { Colorize, configureVerboseLogging, logVerbose, templateIdentity } from \"./util\";\n\nexport { templateIdentity } from \"./util\";\n\nconst jsLikeFileExtensions: string[] = [\n \"mtsx\",\n \"ctsx\",\n \"tsx\",\n \"mts\",\n \"cts\",\n \"ts\",\n \"mjsx\",\n \"cjsx\",\n \"jsx\",\n \"mjs\",\n \"cjs\",\n \"js\",\n];\n\nclass UserError extends Error {\n constructor(message: string) {\n super(message);\n this.name = \"UserError\";\n }\n}\n\nclass UnansweredQuestionError extends UserError {\n constructor(message: string) {\n super(message + \", or use --on-question <guess|ask> to answer questions automatically or interactively\");\n this.name = \"UnansweredQuestionError\";\n }\n}\n\ntype OnQuestionMode = \"ask\" | \"guess\" | \"error\";\n\nfunction isTruthyEnv(name: string): boolean {\n const v = process.env[name];\n if (!v) return false;\n const s = String(v).toLowerCase();\n return s === \"1\" || s === \"true\" || s === \"yes\";\n}\n\nfunction isNonInteractiveEnv(): boolean {\n if (isTruthyEnv(\"CI\")) return true;\n if (isTruthyEnv(\"GITHUB_ACTIONS\")) return true;\n if (isTruthyEnv(\"NONINTERACTIVE\")) return true;\n if (isTruthyEnv(\"NO_INTERACTIVE\")) return true;\n if (isTruthyEnv(\"PNPM_NON_INTERACTIVE\")) return true;\n if (isTruthyEnv(\"YARN_ENABLE_NON_INTERACTIVE\")) return true;\n if (isTruthyEnv(\"CURSOR_AGENT\")) return true;\n if (isTruthyEnv(\"CLAUDECODE\")) return true;\n return false;\n}\n\nfunction resolveOnQuestionMode(opt: string): OnQuestionMode {\n if (!opt || opt === \"default\") {\n return isNonInteractiveEnv() ? \"error\" : \"ask\";\n }\n if (opt === \"ask\" || opt === \"guess\" || opt === \"error\") {\n return opt;\n }\n throw new UserError(`Invalid argument for --on-question: \"${opt}\". Valid modes are: \"ask\", \"guess\", \"error\", \"default\".`);\n}\n\n// Setup command line parsing\nconst program = new Command();\nprogram\n .name(packageJson.name)\n .description(\"Stack Auth Initialization Tool\")\n .version(packageJson.version)\n .argument(\"[project-path]\", \"Path to your project\")\n .usage(`[project-path] [options]`)\n .option(\"--dry-run\", \"Run without making any changes\")\n .option(\"--neon\", \"Use Neon database\")\n .option(\"--js\", \"Initialize for JavaScript project\")\n .option(\"--next\", \"Initialize for Next.js project\")\n .option(\"--react\", \"Initialize for React project\")\n .option(\"--npm\", \"Use npm as package manager\")\n .option(\"--yarn\", \"Use yarn as package manager\")\n .option(\"--pnpm\", \"Use pnpm as package manager\")\n .option(\"--bun\", \"Use bun as package manager\")\n .option(\"--client\", \"Initialize client-side only\")\n .option(\"--server\", \"Initialize server-side only\")\n .option(\"--project-id <project-id>\", \"Project ID to use in setup\")\n .option(\"--publishable-client-key <publishable-client-key>\", \"Publishable client key to use in setup\")\n .option(\"--no-browser\", \"Don't open browser for environment variable setup\")\n .option(\"--on-question <mode>\", \"How to handle interactive questions: ask | guess | error | default\", \"default\")\n .option(\"--no-warn-uncommitted-changes\", \"Don't warn about uncommitted changes in the Git repository\")\n .addHelpText('after', `\nFor more information, please visit https://docs.stack-auth.com/getting-started/setup`);\n\nprogram.parse();\n\nconst options = program.opts();\n\n// Keep existing variables but assign from Commander\nlet savedProjectPath: string | undefined = program.args[0] || undefined;\nconst verboseEnvRaw = process.env.STACK_VERBOSE;\nconst parsedVerboseLevel = typeof verboseEnvRaw === \"string\" && verboseEnvRaw.trim().length > 0\n ? Number.parseInt(verboseEnvRaw.trim(), 10)\n : 0;\nconst verboseLevel: number = Number.isFinite(parsedVerboseLevel) ? Math.max(0, parsedVerboseLevel) : 0;\nconst isVerbose: boolean = verboseLevel > 0;\nconst isDryRun: boolean = options.dryRun || isTruthyEnv(\"STACK_DRY_RUN\") || false;\nconst isNeon: boolean = options.neon || false;\nconst typeFromArgs: \"js\" | \"next\" | \"react\" | undefined = options.js ? \"js\" : options.next ? \"next\" : options.react ? \"react\" : undefined;\nconst packageManagerFromArgs: string | undefined = options.npm ? \"npm\" : options.yarn ? \"yarn\" : options.pnpm ? \"pnpm\" : options.bun ? \"bun\" : undefined;\nconst isClient: boolean = options.client || false;\nconst isServer: boolean = options.server || false;\nconst projectIdFromArgs: string | undefined = options.projectId;\nconst publishableClientKeyFromArgs: string | undefined = options.publishableClientKey;\nconst onQuestionMode: OnQuestionMode = resolveOnQuestionMode(options.onQuestion);\nconst warnUncommittedChanges: boolean = options.warnUncommittedChanges ?? true;\n\n// Commander negates the boolean options with prefix `--no-`\n// so `--no-browser` becomes `browser: false`\nconst noBrowser: boolean = !options.browser;\n\ntype Ansis = {\n red: string,\n blue: string,\n green: string,\n yellow: string,\n clear: string,\n bold: string,\n};\n\nconst ansis: Ansis = {\n red: \"\\x1b[31m\",\n blue: \"\\x1b[34m\",\n green: \"\\x1b[32m\",\n yellow: \"\\x1b[33m\",\n\n clear: \"\\x1b[0m\",\n bold: \"\\x1b[1m\",\n};\n\nconst colorize: Colorize = {\n red: (strings, ...values) => ansis.red + templateIdentity(strings, ...values) + ansis.clear,\n blue: (strings, ...values) => ansis.blue + templateIdentity(strings, ...values) + ansis.clear,\n green: (strings, ...values) => ansis.green + templateIdentity(strings, ...values) + ansis.clear,\n yellow: (strings, ...values) => ansis.yellow + templateIdentity(strings, ...values) + ansis.clear,\n bold: (strings, ...values) => ansis.bold + templateIdentity(strings, ...values) + ansis.clear,\n};\n\nconfigureVerboseLogging({\n level: verboseLevel,\n formatter: (message) => colorize.blue`[verbose] ${message}`,\n});\n\nconst filesCreated: string[] = [];\nconst filesModified: string[] = [];\nconst commandsExecuted: string[] = [];\n\nconst packagesToInstall: string[] = [];\nconst writeFileHandlers: Array<() => Promise<void>> = [];\nconst deferredCommandHandlers: Array<() => Promise<void>> = [];\nconst nextSteps: string[] = [\n `Create an account and Stack Auth API key for your project on https://app.stack-auth.com`,\n];\n\n\nconst STACK_AUTH_PUBLIC_HOG_KEY = \"phc_vIUFi0HzHo7oV26OsaZbUASqxvs8qOmap1UBYAutU4k\";\nconst EVENT_PREFIX = \"stack-init-\";\nconst ph_client = new PostHog(STACK_AUTH_PUBLIC_HOG_KEY, {\n host: \"https://eu.i.posthog.com\",\n flushAt: 1,\n flushInterval: 0,\n});\nconst distinctId = crypto.randomUUID();\n\n\nasync function capture(event: string, properties: Record<string, any>) {\n logVerbose(\"capture event\", { event, properties });\n ph_client.capture({\n event: `${EVENT_PREFIX}${event}`,\n distinctId,\n properties,\n });\n}\n\n\nasync function main(): Promise<void> {\n // Welcome message\n console.log();\n console.log(`\n ██████\n ██████████████\n████████████████████\n████████████████████ WELCOME TO\n█████████████████ ╔═╗╔╦╗╔═╗╔═╗╦╔═ ┌─┐┬ ┬┌┬┐┬ ┬\n█████████████ ╚═╗ ║ ╠═╣║ ╠╩╗ ├─┤│ │ │ ├─┤\n█████████████ ████ ╚═╝ ╩ ╩ ╩╚═╝╩ ╩ ┴ ┴└─┘ ┴ ┴ ┴\n █████████████████\n ██████ ██\n████ ████\n █████ █████\n ██████\n `);\n console.log();\n\n logVerbose(\"Initialization run metadata\", {\n version: packageJson.version,\n cwd: process.cwd(),\n args: program.args,\n options: {\n isDryRun,\n isVerbose,\n isNeon,\n typeFromArgs,\n packageManagerFromArgs,\n isClient,\n isServer,\n projectIdFromArgs: Boolean(projectIdFromArgs),\n publishableClientKeyFromArgs: Boolean(publishableClientKeyFromArgs),\n noBrowser,\n onQuestionMode,\n verboseLevel,\n },\n });\n\n await capture(\"start\", {\n version: packageJson.version,\n isDryRun,\n isNeon,\n typeFromArgs,\n packageManagerFromArgs,\n isClient,\n isServer,\n noBrowser,\n platform: os.platform(),\n arch: os.arch(),\n nodeVersion: process.version,\n });\n\n // Wait just briefly so we can use `Steps` in here (it's defined only after the call to `main()`)\n await new Promise<void>((resolve) => resolve());\n\n\n // Prepare some stuff\n await clearStdin();\n const projectPath = await getProjectPath();\n await ensureGitWorkspaceIsReady(projectPath);\n logVerbose(\"Project path prepared\", { projectPath, isDryRun, isVerbose });\n scheduleMcpConfiguration({\n projectPath,\n isDryRun,\n colorize,\n registerWriteHandler: (handler) => writeFileHandlers.push(handler),\n registerCommandHandler: (handler) => deferredCommandHandlers.push(handler),\n recordFileChange,\n runScheduledCommand,\n });\n nextSteps.push(\"Restart your MCP-enabled editors so they pick up the Stack Auth MCP.\");\n logVerbose(\"MCP configuration scheduled\", {\n writeHandlers: writeFileHandlers.length,\n deferredCommands: deferredCommandHandlers.length,\n });\n\n\n // Steps\n const { packageJson: projectPackageJson } = await Steps.getProject();\n const type = await Steps.getProjectType({ packageJson: projectPackageJson });\n logVerbose(\"Project inspection complete\", {\n detectedType: type,\n dependencies: {\n hasReact: Boolean(projectPackageJson.dependencies?.[\"react\"]),\n hasNext: Boolean(projectPackageJson.dependencies?.[\"next\"]),\n },\n });\n\n await capture(\"project-type-selected\", {\n type,\n wasSpecifiedInArgs: !!typeFromArgs,\n });\n\n await Steps.addStackPackage(type);\n if (isNeon) packagesToInstall.push('@neondatabase/serverless');\n\n await Steps.writeEnvVars(type);\n const convexIntegration = await Steps.maybeInstallConvexIntegration({ packageJson: projectPackageJson, type });\n if (convexIntegration) {\n nextSteps.push(...convexIntegration.instructions);\n logVerbose(\"Convex integration detected\", convexIntegration);\n }\n\n if (type === \"next\") {\n const projectInfo = await Steps.getNextProjectInfo({ packageJson: projectPackageJson });\n await Steps.updateNextLayoutFile(projectInfo);\n await Steps.writeStackAppFile(projectInfo, \"client\", true);\n await Steps.writeStackAppFile(projectInfo, \"server\", true);\n await Steps.writeNextHandlerFile(projectInfo);\n await Steps.writeNextLoadingFile(projectInfo);\n nextSteps.push(`Copy the environment variables from the new API key into your .env.local file`);\n } else if (type === \"react\") {\n const defaultExtension = await Steps.guessDefaultFileExtension();\n const srcPath = await Steps.guessSrcPath();\n const hasReactRouterDom = !!(projectPackageJson.dependencies?.[\"react-router-dom\"] || projectPackageJson.devDependencies?.[\"react-router-dom\"]);\n const { fileName } = await Steps.writeReactClientFile({\n srcPath,\n defaultExtension,\n indentation: \" \",\n hasReactRouterDom,\n });\n nextSteps.push(\n `Copy the environment variables from the new API key into your own environment and reference them in ${fileName}`,\n );\n } else {\n const defaultExtension = await Steps.guessDefaultFileExtension();\n const where = await Steps.getServerOrClientOrBoth();\n const srcPath = await Steps.guessSrcPath();\n const appFiles: string[] = [];\n for (const w of where) {\n const { fileName } = await Steps.writeStackAppFile({\n type,\n defaultExtension,\n indentation: \" \",\n srcPath,\n }, w, where.includes(\"client\"));\n appFiles.push(fileName);\n }\n nextSteps.push(\n `Copy the environment variables from the new API key into your own environment and reference them in ${appFiles.join(\" and \")}`,\n `Follow the instructions on how to use Stack Auth's vanilla SDK at http://docs.stack-auth.com/others/js-client`,\n );\n }\n logVerbose(\"Primary integration steps completed\", { type, nextStepsCount: nextSteps.length });\n\n const { packageManager } = await Steps.getPackageManager();\n logVerbose(\"Package manager determined\", { packageManager });\n\n await capture(`package-manager-selected`, {\n packageManager,\n wasSpecifiedInArgs: !!packageManagerFromArgs,\n });\n\n await Steps.ensureReady(type);\n\n\n // Install dependencies\n console.log();\n console.log(colorize.bold`Installing dependencies...`);\n const installCommandMap = new Map<string, string>([\n [\"npm\", \"npm install\"],\n [\"yarn\", \"yarn add\"],\n [\"pnpm\", \"pnpm add\"],\n [\"bun\", \"bun add\"],\n ]);\n const installCommand = installCommandMap.get(packageManager) ?? `${packageManager} install`;\n // Quote each package name to avoid shell interpretation of env-overridden values.\n const safePackages = packagesToInstall.map((p) => JSON.stringify(p));\n await shellNicelyFormatted(`${installCommand} ${safePackages.join(' ')}`, {\n shell: true,\n cwd: projectPath,\n });\n logVerbose(\"Dependency installation finished\", {\n packageManager,\n packages: packagesToInstall,\n });\n\n await capture(`dependencies-installed`, {\n packageManager,\n packages: packagesToInstall,\n });\n\n // Write files\n console.log();\n console.log(colorize.bold`Writing files...`);\n console.log();\n for (let i = 0; i < writeFileHandlers.length; i++) {\n const writeFileHandler = writeFileHandlers[i];\n logVerbose(\"Executing write handler\", { index: i });\n await writeFileHandler();\n }\n console.log(`${colorize.green`√`} Done writing files`);\n\n await runDeferredCommands();\n\n console.log('\\n\\n\\n');\n console.log(colorize.bold`${colorize.green`Installation succeeded!`}`);\n console.log();\n console.log(\"Commands executed:\");\n for (const command of commandsExecuted) {\n console.log(` ${colorize.blue`${command}`}`);\n }\n console.log();\n console.log(\"MCP servers installed:\");\n console.log(` ${colorize.green`https://mcp.stack-auth.com`}`);\n console.log();\n console.log(\"Files written:\");\n for (const file of filesModified) {\n console.log(` ${colorize.yellow`${file}`}`);\n }\n for (const file of filesCreated) {\n console.log(` ${colorize.green`${file}`}`);\n }\n console.log();\n\n await capture(\"complete\", {\n success: true,\n type,\n packageManager,\n isNeon,\n isClient,\n isServer,\n noBrowser,\n filesCreated,\n filesModified,\n commandsExecuted,\n });\n\n await invokeCallback({\n success: true,\n distinctId,\n options,\n args: program.args,\n isNonInteractive: isNonInteractiveEnv(),\n timestamp: new Date().toISOString(),\n projectPath,\n });\n\n // Success!\n console.log(`\n${colorize.green`===============================================`}\n\n${colorize.green`Successfully installed Stack! 🚀🚀🚀`}\n\n${colorize.bold`Next steps:`}\n\n1. ${noBrowser ?\n `Create a project at https://app.stack-auth.com and get your API keys` :\n `Complete the setup in your browser to get your API keys`}\n2. Add the API keys to your .env.local file\n3. Import the Stack components in your app\n4. Add authentication to your app\n\nFor more information, please visit https://docs.stack-auth.com/getting-started/setup\n `.trim());\n if (!noBrowser) {\n await open(`https://app.stack-auth.com/wizard-congrats?stack-init-id=${encodeURIComponent(distinctId)}`);\n }\n await ph_client.shutdown();\n}\n\n// eslint-disable-next-line no-restricted-syntax\nmain().catch(async (err) => {\n try {\n await capture(\"error\", {\n error: err.message,\n errorType: err instanceof UserError ? \"UserError\" : \"SystemError\",\n stack: err.stack,\n });\n } catch (e) { }\n if (!(err instanceof UserError)) {\n console.error(err);\n }\n console.error('\\n\\n\\n\\n');\n console.log(colorize.red`===============================================`);\n console.error();\n if (err instanceof UserError) {\n console.error(`${colorize.red`ERROR!`} ${err.message}`);\n } else {\n console.error(\"An error occurred during the initialization process.\");\n }\n console.error();\n console.log(colorize.red`===============================================`);\n console.error();\n console.error(\n \"If you need assistance, please try installing Stack manually as described in https://docs.stack-auth.com/getting-started/setup or join our Discord where we're happy to help: https://discord.stack-auth.com\"\n );\n if (!(err instanceof UserError)) {\n console.error(\"\");\n console.error(`Error message: ${err.message}`);\n }\n console.error();\n const fallbackErrorMessage = (() => {\n if (err instanceof Error) return err.message;\n if (typeof err === \"string\") return err;\n try {\n return JSON.stringify(err);\n } catch {\n return \"Unknown error\";\n }\n })();\n await invokeCallback({\n success: false,\n distinctId,\n options,\n args: program.args,\n isNonInteractive: isNonInteractiveEnv(),\n timestamp: new Date().toISOString(),\n projectPath: savedProjectPath,\n error: {\n name: err instanceof Error ? err.name : undefined,\n message: fallbackErrorMessage,\n stack: err instanceof Error ? err.stack : undefined,\n },\n });\n await ph_client.shutdown();\n process.exit(1);\n});\n\n\ntype PackageJson = {\n dependencies?: Record<string, string>,\n devDependencies?: Record<string, string>,\n [key: string]: any,\n}\n\ntype ProjectInfo = {\n type: \"js\" | \"next\" | \"react\",\n srcPath: string,\n appPath: string,\n defaultExtension: string,\n indentation: string,\n}\n\ntype NextProjectInfoError = {\n error: string,\n}\n\ntype NextProjectInfoResult = ProjectInfo | NextProjectInfoError;\n\ntype StackAppFileOptions = {\n type: \"js\" | \"next\" | \"react\",\n srcPath: string,\n defaultExtension: string,\n indentation: string,\n}\n\ntype StackAppFileResult = {\n fileName: string,\n}\n\ntype ConvexIntegrationResult = {\n instructions: string[],\n}\n\nconst Steps = {\n async getProject(): Promise<{ packageJson: PackageJson }> {\n let projectPath = await getProjectPath();\n logVerbose(\"Steps.getProject invoked\", { projectPath });\n if (!fs.existsSync(projectPath)) {\n throw new UserError(`The project path ${projectPath} does not exist`);\n }\n\n const packageJsonPath = path.join(projectPath, \"package.json\");\n if (!fs.existsSync(packageJsonPath)) {\n throw new UserError(\n `The package.json file does not exist in the project path ${projectPath}. You must initialize a new project first before installing Stack.`\n );\n }\n\n const packageJsonText = fs.readFileSync(packageJsonPath, \"utf-8\");\n let packageJson: PackageJson;\n try {\n packageJson = JSON.parse(packageJsonText);\n } catch (e) {\n throw new UserError(`package.json file is not valid JSON: ${e}`);\n }\n\n logVerbose(\"Steps.getProject completed\", {\n packageJsonPath,\n dependencyCounts: {\n dependencies: Object.keys(packageJson.dependencies ?? {}).length,\n devDependencies: Object.keys(packageJson.devDependencies ?? {}).length,\n },\n });\n\n return { packageJson };\n },\n\n async getProjectType({ packageJson }: { packageJson: PackageJson }): Promise<\"js\" | \"next\" | \"react\"> {\n if (typeFromArgs) {\n logVerbose(\"Steps.getProjectType using CLI override\", { typeFromArgs });\n return typeFromArgs;\n }\n\n logVerbose(\"Steps.getProjectType attempting autodetect\", {\n hasNext: Boolean(packageJson.dependencies?.[\"next\"] || packageJson.devDependencies?.[\"next\"]),\n hasReact: Boolean(packageJson.dependencies?.[\"react\"] || packageJson.dependencies?.[\"react-dom\"]),\n onQuestionMode,\n });\n\n const maybeNextProject = await Steps.maybeGetNextProjectInfo({ packageJson });\n if (!(\"error\" in maybeNextProject)) {\n logVerbose(\"Steps.getProjectType resolved to Next.js project\");\n return \"next\";\n }\n if (packageJson.dependencies?.[\"react\"] || packageJson.dependencies?.[\"react-dom\"]) {\n logVerbose(\"Steps.getProjectType resolved to React project\");\n return \"react\";\n }\n if (onQuestionMode === \"guess\") {\n logVerbose(\"Steps.getProjectType defaulting to JS due to --on-question=guess\");\n return \"js\";\n }\n if (onQuestionMode === \"error\") {\n throw new UnansweredQuestionError(\"Unable to auto-detect project type (checked for Next.js and React dependencies). Re-run with one of: --js, --react, or --next.\");\n }\n\n const { type } = await inquirer.prompt([\n {\n type: \"list\",\n name: \"type\",\n message: \"Which integration would you like to install?\",\n choices: [\n { name: \"Vanilla JS (other/no framework)\", value: \"js\" },\n { name: \"Node.js\", value: \"js\" },\n { name: \"React\", value: \"react\" },\n { name: \"Next.js\", value: \"next\" },\n ]\n }\n ]);\n\n logVerbose(\"Steps.getProjectType received user selection\", { type });\n return type;\n },\n\n async getStackPackageName(type: \"js\" | \"next\" | \"react\", install = false): Promise<string> {\n const mapping = {\n js: (install && process.env.STACK_JS_INSTALL_PACKAGE_NAME_OVERRIDE) || \"@stackframe/js\",\n next: (install && process.env.STACK_NEXT_INSTALL_PACKAGE_NAME_OVERRIDE) || \"@stackframe/stack\",\n react: (install && process.env.STACK_REACT_INSTALL_PACKAGE_NAME_OVERRIDE) || \"@stackframe/react\",\n } as const;\n const packageName = mapping[type];\n logVerbose(\"Steps.getStackPackageName resolved\", { type, install, packageName });\n return packageName;\n },\n\n async addStackPackage(type: \"js\" | \"next\" | \"react\"): Promise<void> {\n const pkgName = await Steps.getStackPackageName(type, true);\n logVerbose(\"Steps.addStackPackage scheduling install\", { pkgName });\n packagesToInstall.push(pkgName);\n },\n\n async getNextProjectInfo({ packageJson }: { packageJson: PackageJson }): Promise<ProjectInfo> {\n logVerbose(\"Steps.getNextProjectInfo invoked\");\n const maybe = await Steps.maybeGetNextProjectInfo({ packageJson });\n if (\"error\" in maybe) {\n logVerbose(\"Steps.getNextProjectInfo failed validation\", maybe);\n throw new UserError(maybe.error);\n }\n logVerbose(\"Steps.getNextProjectInfo resolved\", maybe);\n return maybe;\n },\n\n async maybeGetNextProjectInfo({ packageJson }: { packageJson: PackageJson }): Promise<NextProjectInfoResult> {\n const projectPath = await getProjectPath();\n logVerbose(\"Steps.maybeGetNextProjectInfo evaluating Next.js eligibility\", { projectPath });\n\n const nextVersionInPackageJson = packageJson.dependencies?.[\"next\"] ?? packageJson.devDependencies?.[\"next\"];\n if (!nextVersionInPackageJson) {\n logVerbose(\"Steps.maybeGetNextProjectInfo missing Next dependency\");\n return { error: `The project at ${projectPath} does not appear to be a Next.js project, or does not have 'next' installed as a dependency.` };\n }\n if (!nextVersionInPackageJson) {\n logVerbose(\"Steps.maybeGetNextProjectInfo found unsupported Next version\", { version: nextVersionInPackageJson });\n return { error: `The project at ${projectPath} is using an unsupported version of Next.js (found ${nextVersionInPackageJson}).\\n\\nOnly Next.js 14 & 15 projects are currently supported. See Next's upgrade guide: https://nextjs.org/docs/app/building-your-application/upgrading/version-14` };\n }\n\n const hasSrcAppFolder = fs.existsSync(path.join(projectPath, \"src/app\"));\n const srcPath = path.join(projectPath, hasSrcAppFolder ? \"src\" : \"\");\n const appPath = path.join(srcPath, \"app\");\n if (!fs.existsSync(appPath)) {\n logVerbose(\"Steps.maybeGetNextProjectInfo missing Next app directory\", { appPath });\n return { error: `The app path ${appPath} does not exist. Only the Next.js App router is supported — are you maybe on the Pages router instead?` };\n }\n\n const nextConfigPathWithoutExtension = path.join(projectPath, \"next.config\");\n const nextConfigFileExtension = await findJsExtension(\n nextConfigPathWithoutExtension\n );\n const nextConfigPath =\n nextConfigPathWithoutExtension + \".\" + (nextConfigFileExtension ?? \"js\");\n if (!fs.existsSync(nextConfigPath)) {\n logVerbose(\"Steps.maybeGetNextProjectInfo missing next.config file\", { nextConfigPath });\n return { error: `Expected file at ${nextConfigPath} for Next.js projects.` };\n }\n\n const dryUpdateNextLayoutFileResult = await Steps.dryUpdateNextLayoutFile({ appPath, defaultExtension: \"jsx\" });\n\n logVerbose(\"Steps.maybeGetNextProjectInfo success\", {\n projectPath,\n srcPath,\n appPath,\n detectedExtension: dryUpdateNextLayoutFileResult.fileExtension,\n });\n return {\n type: \"next\",\n srcPath,\n appPath,\n defaultExtension: dryUpdateNextLayoutFileResult.fileExtension,\n indentation: dryUpdateNextLayoutFileResult.indentation,\n };\n },\n\n async writeEnvVars(type: \"js\" | \"next\" | \"react\"): Promise<boolean> {\n const projectPath = await getProjectPath();\n logVerbose(\"Steps.writeEnvVars invoked\", { type, projectPath });\n\n // TODO: in non-Next environments, ask the user what method they prefer for envvars\n if (type !== \"next\") {\n logVerbose(\"Steps.writeEnvVars skipped\", { reason: \"non-next-project\" });\n return false;\n }\n\n const envLocalPath = path.join(projectPath, \".env.local\");\n\n const potentialEnvLocations = [\n path.join(projectPath, \".env\"),\n path.join(projectPath, \".env.development\"),\n path.join(projectPath, \".env.default\"),\n path.join(projectPath, \".env.defaults\"),\n path.join(projectPath, \".env.example\"),\n envLocalPath,\n ];\n if (potentialEnvLocations.every((p) => !fs.existsSync(p))) {\n const envContent = noBrowser\n ? \"# Stack Auth keys\\n\" +\n \"# To get these variables:\\n\" +\n \"# 1. Go to https://app.stack-auth.com\\n\" +\n \"# 2. Create a new project\\n\" +\n \"# 3. Copy the keys below\\n\" +\n `NEXT_PUBLIC_STACK_PROJECT_ID=\"${projectIdFromArgs ?? \"\"}\"\\n` +\n `NEXT_PUBLIC_STACK_PUBLISHABLE_CLIENT_KEY=\"${publishableClientKeyFromArgs ?? \"\"}\"\\n` +\n \"STACK_SECRET_SERVER_KEY=\\n\"\n : \"# Stack Auth keys\\n\" +\n \"# Get these variables by creating a project on https://app.stack-auth.com.\\n\" +\n `NEXT_PUBLIC_STACK_PROJECT_ID=\"${projectIdFromArgs ?? \"\"}\"\\n` +\n `NEXT_PUBLIC_STACK_PUBLISHABLE_CLIENT_KEY=\"${publishableClientKeyFromArgs ?? \"\"}\"\\n` +\n \"STACK_SECRET_SERVER_KEY=\\n\";\n\n laterWriteFile(envLocalPath, envContent);\n logVerbose(\"Steps.writeEnvVars scheduled .env.local creation\", { envLocalPath });\n return true;\n }\n\n logVerbose(\"Steps.writeEnvVars found existing env files\", { potentialEnvLocations });\n return false;\n },\n\n async maybeInstallConvexIntegration({ packageJson, type }: { packageJson: PackageJson, type: \"js\" | \"next\" | \"react\" }): Promise<ConvexIntegrationResult | null> {\n const hasConvexDependency = Boolean(packageJson.dependencies?.[\"convex\"] || packageJson.devDependencies?.[\"convex\"]);\n if (!hasConvexDependency) {\n logVerbose(\"Steps.maybeInstallConvexIntegration skipped\", { reason: \"no-convex-dependency\" });\n return null;\n }\n\n const projectPath = await getProjectPath();\n const convexDir = path.join(projectPath, \"convex\");\n if (!fs.existsSync(convexDir)) {\n logVerbose(\"Steps.maybeInstallConvexIntegration skipped\", { reason: \"missing-convex-dir\", convexDir });\n return null;\n }\n\n const stackPackageName = await Steps.getStackPackageName(type);\n const instructions: string[] = [];\n logVerbose(\"Steps.maybeInstallConvexIntegration configuring\", { convexDir, stackPackageName });\n\n const authConfigPath = path.join(convexDir, \"auth.config.ts\");\n const desiredAuthConfig = createConvexAuthConfigContent({ stackPackageName, type });\n const existingAuthConfig = await readFile(authConfigPath);\n if (!existingAuthConfig || (!existingAuthConfig.includes(\"getConvexProvidersConfig\") && !existingAuthConfig.includes(\"@stackframe/\"))) {\n laterWriteFile(authConfigPath, desiredAuthConfig);\n logVerbose(\"Steps.maybeInstallConvexIntegration scheduled auth.config.ts update\", { authConfigPath });\n }\n\n const convexConfigPath = path.join(convexDir, \"convex.config.ts\");\n const existingConvexConfig = await readFile(convexConfigPath);\n const desiredConvexConfig = createConvexIntegrationConvexConfigContent(stackPackageName);\n let needsManualConvexConfig = false;\n\n if (!existingConvexConfig) {\n laterWriteFile(convexConfigPath, desiredConvexConfig);\n logVerbose(\"Steps.maybeInstallConvexIntegration writing convex.config.ts from template\", { convexConfigPath });\n } else if (existingConvexConfig.includes(\"app.use(stackAuthComponent\") && existingConvexConfig.includes(\"/convex.config\") && existingConvexConfig.includes(\"stackframe\")) {\n // already integrated\n logVerbose(\"Steps.maybeInstallConvexIntegration detected existing convex.config.ts integration\", { convexConfigPath });\n } else {\n const integratedContent = integrateConvexConfig(existingConvexConfig, stackPackageName);\n if (integratedContent) {\n laterWriteFile(convexConfigPath, integratedContent);\n logVerbose(\"Steps.maybeInstallConvexIntegration merged convex.config.ts content\", { convexConfigPath });\n } else if (isSimpleConvexConfig(existingConvexConfig)) {\n laterWriteFile(convexConfigPath, desiredConvexConfig);\n logVerbose(\"Steps.maybeInstallConvexIntegration replaced simple convex.config.ts\", { convexConfigPath });\n } else {\n needsManualConvexConfig = true;\n logVerbose(\"Steps.maybeInstallConvexIntegration requiring manual convex.config.ts review\", { convexConfigPath });\n }\n }\n\n if (needsManualConvexConfig) {\n instructions.push(`Update convex/convex.config.ts to import ${stackPackageName}/convex.config and call app.use(stackAuthComponent).`);\n }\n\n const convexClientUpdateResult = await updateConvexClients({ projectPath, type });\n if (convexClientUpdateResult.skippedFiles.length > 0) {\n instructions.push(\"Review your Convex client setup and call stackClientApp.getConvexClientAuth({}) or stackServerApp.getConvexClientAuth({}) manually where needed.\");\n }\n logVerbose(\"Steps.maybeInstallConvexIntegration client update summary\", convexClientUpdateResult);\n\n instructions.push(\n \"Set the Stack Auth environment variables in Convex (Deployment → Settings → Environment Variables).\",\n \"Verify your Convex clients call stackClientApp.getConvexClientAuth({}) or stackServerApp.getConvexClientAuth({}) so they share authentication with Stack Auth.\"\n );\n\n logVerbose(\"Steps.maybeInstallConvexIntegration completed\", { instructions });\n return { instructions };\n },\n\n async dryUpdateNextLayoutFile({ appPath, defaultExtension }: { appPath: string, defaultExtension: string }): Promise<{\n path: string,\n updatedContent: string,\n fileExtension: string,\n indentation: string,\n }> {\n const layoutPathWithoutExtension = path.join(appPath, \"layout\");\n const layoutFileExtension =\n (await findJsExtension(layoutPathWithoutExtension)) ?? defaultExtension;\n const layoutPath = layoutPathWithoutExtension + \".\" + layoutFileExtension;\n const layoutContent =\n (await readFile(layoutPath)) ??\n throwErr(\n `The layout file at ${layoutPath} does not exist. Stack requires a layout file to be present in the /app folder.`\n );\n const updatedLayoutResult =\n (await getUpdatedLayout(layoutContent)) ??\n throwErr(\n \"Unable to parse root layout file. Make sure it contains a <body> tag. If it still doesn't work, you may need to manually install Stack. See: https://nextjs.org/docs/app/building-your-application/routing/pages-and-layouts#root-layout-required\"\n );\n const updatedLayoutContent = updatedLayoutResult.content;\n return {\n path: layoutPath,\n updatedContent: updatedLayoutContent,\n fileExtension: layoutFileExtension,\n indentation: updatedLayoutResult.indentation\n };\n },\n\n async updateNextLayoutFile(projectInfo: ProjectInfo): Promise<{\n path: string,\n updatedContent: string,\n fileExtension: string,\n indentation: string,\n }> {\n logVerbose(\"Steps.updateNextLayoutFile invoked\", projectInfo);\n const res = await Steps.dryUpdateNextLayoutFile(projectInfo);\n laterWriteFile(res.path, res.updatedContent);\n logVerbose(\"Steps.updateNextLayoutFile scheduled write\", { path: res.path });\n return res;\n },\n\n async writeStackAppFile({ type, srcPath, defaultExtension, indentation }: StackAppFileOptions, clientOrServer: \"server\" | \"client\", alsoHasClient: boolean): Promise<StackAppFileResult> {\n logVerbose(\"Steps.writeStackAppFile invoked\", { type, srcPath, clientOrServer, alsoHasClient });\n const packageName = await Steps.getStackPackageName(type);\n\n const clientOrServerCap = {\n client: \"Client\",\n server: \"Server\",\n }[clientOrServer as \"client\" | \"server\"];\n const relativeStackAppPath = `stack/${clientOrServer}`;\n\n const stackAppPathWithoutExtension = path.join(srcPath, relativeStackAppPath);\n const stackAppFileExtension =\n (await findJsExtension(stackAppPathWithoutExtension)) ?? defaultExtension;\n const stackAppPath =\n stackAppPathWithoutExtension + \".\" + stackAppFileExtension;\n const stackAppContent = await readFile(stackAppPath);\n if (stackAppContent) {\n logVerbose(\"Steps.writeStackAppFile found existing file\", { stackAppPath });\n if (!stackAppContent.includes(\"@stackframe/\")) {\n throw new UserError(\n `A file at the path ${stackAppPath} already exists. Stack uses the stack/${clientOrServer}.ts file to initialize the Stack SDK. Please remove the existing file and try again.`\n );\n }\n throw new UserError(\n `It seems that you already installed Stack in this project.`\n );\n }\n\n const tokenStore = type === \"next\" ? '\"nextjs-cookie\"' : (clientOrServer === \"client\" ? '\"cookie\"' : '\"memory\"');\n const publishableClientKeyWrite = clientOrServer === \"server\"\n ? `process.env.STACK_PUBLISHABLE_CLIENT_KEY ${publishableClientKeyFromArgs ? `|| ${JSON.stringify(publishableClientKeyFromArgs)}` : \"\"}`\n : `'${publishableClientKeyFromArgs ?? 'INSERT_YOUR_PUBLISHABLE_CLIENT_KEY_HERE'}'`;\n const jsOptions = type === \"js\" ? [\n `\\n\\n${indentation}// get your Stack Auth API keys from https://app.stack-auth.com${clientOrServer === \"client\" ? ` and store them in a safe place (e.g. environment variables)` : \"\"}`,\n `${projectIdFromArgs ? `${indentation}projectId: ${JSON.stringify(projectIdFromArgs)},` : \"\"}`,\n `${indentation}publishableClientKey: ${publishableClientKeyWrite},`,\n `${clientOrServer === \"server\" ? `${indentation}secretServerKey: process.env.STACK_SECRET_SERVER_KEY,` : \"\"}`,\n ].filter(Boolean).join(\"\\n\") : \"\";\n\n const nextClientOptions = (type === \"next\" && clientOrServer === \"client\")\n ? (() => {\n const lines = [\n projectIdFromArgs ? `${indentation}projectId: process.env.NEXT_PUBLIC_STACK_PROJECT_ID ?? ${JSON.stringify(projectIdFromArgs)},` : \"\",\n publishableClientKeyFromArgs ? `${indentation}publishableClientKey: process.env.NEXT_PUBLIC_STACK_PUBLISHABLE_CLIENT_KEY ?? ${JSON.stringify(publishableClientKeyFromArgs)},` : \"\",\n ].filter(Boolean).join(\"\\n\");\n return lines ? `\\n${lines}` : \"\";\n })()\n : \"\";\n\n const shouldInheritFromClient = clientOrServer === \"server\" && alsoHasClient;\n\n laterWriteFileIfNotExists(\n stackAppPath,\n `\n${type === \"next\" && clientOrServer === \"server\" ? `import \"server-only\";\\n\\n` : \"\"}import { Stack${clientOrServerCap}App } from ${JSON.stringify(packageName)};\n${shouldInheritFromClient ? `import { stackClientApp } from \"./client\";\\n\\n` : \"\\n\"}export const stack${clientOrServerCap}App = new Stack${clientOrServerCap}App({\n${shouldInheritFromClient ? `${indentation}inheritsFrom: stackClientApp,` : `${indentation}tokenStore: ${tokenStore},${jsOptions}${nextClientOptions}`}\n});\n `.trim() + \"\\n\"\n );\n logVerbose(\"Steps.writeStackAppFile scheduled creation\", { stackAppPath, inheritsFromClient: shouldInheritFromClient });\n return { fileName: stackAppPath };\n },\n\n async writeReactClientFile({ srcPath, defaultExtension, indentation, hasReactRouterDom }: { srcPath: string, defaultExtension: string, indentation: string, hasReactRouterDom: boolean }): Promise<StackAppFileResult> {\n logVerbose(\"Steps.writeReactClientFile invoked\", { srcPath, hasReactRouterDom });\n const packageName = await Steps.getStackPackageName(\"react\");\n const relativeStackAppPath = `stack/client`;\n const stackAppPathWithoutExtension = path.join(srcPath, relativeStackAppPath);\n const stackAppFileExtension = (await findJsExtension(stackAppPathWithoutExtension)) ?? defaultExtension;\n const stackAppPath = stackAppPathWithoutExtension + \".\" + stackAppFileExtension;\n const stackAppContent = await readFile(stackAppPath);\n if (stackAppContent) {\n logVerbose(\"Steps.writeReactClientFile found existing file\", { stackAppPath });\n if (!stackAppContent.includes(\"@stackframe/\")) {\n throw new UserError(`A file at the path ${stackAppPath} already exists. Stack uses the stack/client.ts file to initialize the Stack SDK. Please remove the existing file and try again.`);\n }\n throw new UserError(`It seems that you already installed Stack in this project.`);\n }\n\n const publishableClientKeyWrite = `'${publishableClientKeyFromArgs ?? 'INSERT_YOUR_PUBLISHABLE_CLIENT_KEY_HERE'}'`;\n const projectIdWrite = `'${projectIdFromArgs ?? 'INSERT_PROJECT_ID'}'`;\n\n const imports = hasReactRouterDom\n ? `import { StackClientApp } from ${JSON.stringify(packageName)};\\nimport { useNavigate } from \"react-router-dom\";\\n\\n`\n : `import { StackClientApp } from ${JSON.stringify(packageName)};\\n\\n`;\n\n const redirectMethod = hasReactRouterDom\n ? `,\\n${indentation}redirectMethod: {\\n${indentation}${indentation}useNavigate,\\n${indentation}}`\n : \"\";\n\n laterWriteFileIfNotExists(\n stackAppPath,\n `${imports}export const stackClientApp = new StackClientApp({ \\n${indentation}tokenStore: \"cookie\", \\n${indentation}projectId: ${projectIdWrite}, \\n${indentation}publishableClientKey: ${publishableClientKeyWrite}${redirectMethod}, \\n}); \\n`\n );\n logVerbose(\"Steps.writeReactClientFile scheduled creation\", { stackAppPath });\n return { fileName: stackAppPath };\n },\n\n async writeNextHandlerFile(projectInfo: ProjectInfo): Promise<void> {\n logVerbose(\"Steps.writeNextHandlerFile invoked\", projectInfo);\n const handlerPathWithoutExtension = path.join(\n projectInfo.appPath,\n \"handler/[...stack]/page\"\n );\n const handlerFileExtension =\n (await findJsExtension(handlerPathWithoutExtension)) ?? projectInfo.defaultExtension;\n const handlerPath = handlerPathWithoutExtension + \".\" + handlerFileExtension;\n const handlerContent = await readFile(handlerPath);\n if (handlerContent && !handlerContent.includes(\"@stackframe/\")) {\n logVerbose(\"Steps.writeNextHandlerFile found conflicting file\", { handlerPath });\n throw new UserError(\n `A file at the path ${handlerPath} already exists.Stack uses the / handler path to handle incoming requests.Please remove the existing file and try again.`\n );\n }\n laterWriteFileIfNotExists(\n handlerPath,\n `import { StackHandler } from \"@stackframe/stack\";\\n\\nexport default function Handler() {\\n${projectInfo.indentation}return <StackHandler fullPage />;\\n}\\n`\n );\n },\n\n async writeNextLoadingFile(projectInfo: ProjectInfo): Promise<void> {\n logVerbose(\"Steps.writeNextLoadingFile invoked\", projectInfo);\n let loadingPathWithoutExtension = path.join(projectInfo.appPath, \"loading\");\n const loadingFileExtension =\n (await findJsExtension(loadingPathWithoutExtension)) ?? projectInfo.defaultExtension;\n const loadingPath = loadingPathWithoutExtension + \".\" + loadingFileExtension;\n laterWriteFileIfNotExists(\n loadingPath,\n `export default function Loading() {\n\\n${projectInfo.indentation}// Stack uses React Suspense, which will render this page while user data is being fetched.\\n${projectInfo.indentation}// See: https://nextjs.org/docs/app/api-reference/file-conventions/loading\\n${projectInfo.indentation}return <></>;\\n}\\n`\n );\n },\n\n async getPackageManager(): Promise<{ packageManager: string }> {\n if (packageManagerFromArgs) {\n logVerbose(\"Steps.getPackageManager using CLI override\", { packageManager: packageManagerFromArgs });\n return { packageManager: packageManagerFromArgs };\n }\n const packageManager = await promptPackageManager();\n const versionCommand = `${packageManager} --version`;\n logVerbose(\"Steps.getPackageManager checking binary availability\", { packageManager });\n\n try {\n await shellNicelyFormatted(versionCommand, { shell: true, quiet: true });\n } catch (err) {\n console.error(err);\n throw new UserError(\n `Could not run the package manager command '${versionCommand}'. Please make sure ${packageManager} is installed on your system.`\n );\n }\n\n logVerbose(\"Steps.getPackageManager resolved\", { packageManager });\n return { packageManager };\n },\n\n async ensureReady(type: \"js\" | \"next\" | \"react\"): Promise<void> {\n const projectPath = await getProjectPath();\n\n const typeStringMap = {\n js: \"JavaScript\",\n next: \"Next.js\",\n react: \"React\",\n } as const;\n const typeString = typeStringMap[type];\n const isReady = (onQuestionMode !== \"ask\") || (await inquirer.prompt([\n {\n type: \"confirm\",\n name: \"ready\",\n message: `Found a ${typeString} project at ${projectPath} — ready to install Stack Auth?`,\n default: true,\n },\n ])).ready;\n if (!isReady) {\n throw new UserError(\"Installation aborted.\");\n }\n logVerbose(\"Steps.ensureReady confirmed\", { type, projectPath, isReady });\n },\n\n async getServerOrClientOrBoth(): Promise<Array<\"server\" | \"client\">> {\n logVerbose(\"Steps.getServerOrClientOrBoth invoked\", { isClientFlag: isClient, isServerFlag: isServer, onQuestionMode });\n if (isClient && isServer) {\n logVerbose(\"Steps.getServerOrClientOrBoth using CLI flags\", { selection: [\"server\", \"client\"] });\n return [\"server\", \"client\"];\n }\n if (isServer) {\n logVerbose(\"Steps.getServerOrClientOrBoth using server flag\");\n return [\"server\"];\n }\n if (isClient) {\n logVerbose(\"Steps.getServerOrClientOrBoth using client flag\");\n return [\"client\"];\n }\n\n if (onQuestionMode === \"guess\") {\n logVerbose(\"Steps.getServerOrClientOrBoth defaulting to both\");\n return [\"server\", \"client\"];\n }\n if (onQuestionMode === \"error\") {\n throw new UnansweredQuestionError(\"Ambiguous installation type. Re-run with --server, --client, or both.\");\n }\n\n const selection = (await inquirer.prompt([{\n type: \"list\",\n name: \"type\",\n message: \"Do you want to use Stack Auth on the server, or on the client?\",\n choices: [\n { name: \"Client (e.g. Vite, HTML)\", value: [\"client\"] },\n { name: \"Server (e.g. Node.js)\", value: [\"server\"] },\n { name: \"Both (e.g. Next.js)\", value: [\"server\", \"client\"] }\n ]\n }])).type;\n logVerbose(\"Steps.getServerOrClientOrBoth received user selection\", { selection });\n return selection;\n },\n\n /**\n * note: this is a heuristic, specific frameworks may have better heuristics (e.g. the Next.js code uses the extension of the global layout file)\n */\n async guessDefaultFileExtension(): Promise<string> {\n const projectPath = await getProjectPath();\n const hasTsConfig = fs.existsSync(\n path.join(projectPath, \"tsconfig.json\")\n );\n const extension = hasTsConfig ? \"ts\" : \"js\";\n logVerbose(\"Steps.guessDefaultFileExtension result\", { projectPath, hasTsConfig, extension });\n return extension;\n },\n\n /**\n * note: this is a heuristic, specific frameworks may have better heuristics (e.g. the Next.js code uses the location of the app folder)\n */\n async guessSrcPath(): Promise<string> {\n const projectPath = await getProjectPath();\n const potentialSrcPath = path.join(projectPath, \"src\");\n const hasSrcFolder = fs.existsSync(\n path.join(projectPath, \"src\")\n );\n const resolvedPath = hasSrcFolder ? potentialSrcPath : projectPath;\n logVerbose(\"Steps.guessSrcPath result\", { hasSrcFolder, resolvedPath });\n return resolvedPath;\n },\n\n\n};\n\n\ntype LayoutResult = {\n content: string,\n indentation: string,\n}\n\nasync function getUpdatedLayout(originalLayout: string): Promise<LayoutResult | undefined> {\n logVerbose(\"getUpdatedLayout invoked\", { length: originalLayout.length });\n let layout = originalLayout;\n const indentation = guessIndentation(originalLayout);\n\n const firstImportLocationM1 = /\\simport\\s/.exec(layout)?.index;\n const hasStringAsFirstLine = layout.startsWith('\"') || layout.startsWith(\"'\");\n const importInsertLocationM1 =\n firstImportLocationM1 ?? (hasStringAsFirstLine ? layout.indexOf(\"\\n\") : -1);\n const importInsertLocation = importInsertLocationM1 + 1;\n const importStatement = `import { StackProvider, StackTheme } from \"@stackframe/stack\";\\nimport { stackClientApp } from \"../stack/client\";\\n`;\n layout =\n layout.slice(0, importInsertLocation) +\n importStatement +\n layout.slice(importInsertLocation);\n\n const bodyOpenTag = /<\\s*body[^>]*>/.exec(layout);\n const bodyCloseTag = /<\\s*\\/\\s*body[^>]*>/.exec(layout);\n if (!bodyOpenTag || !bodyCloseTag) {\n logVerbose(\"getUpdatedLayout missing body tag\");\n return undefined;\n }\n const bodyOpenEndIndex = bodyOpenTag.index + bodyOpenTag[0].length;\n const bodyCloseStartIndex = bodyCloseTag.index;\n if (bodyCloseStartIndex <= bodyOpenEndIndex) {\n logVerbose(\"getUpdatedLayout invalid body indices\", { bodyOpenEndIndex, bodyCloseStartIndex });\n return undefined;\n }\n\n const lines = layout.split(\"\\n\");\n const [bodyOpenEndLine, bodyOpenEndIndexInLine] = getLineIndex(\n lines,\n bodyOpenEndIndex\n );\n const [bodyCloseStartLine, bodyCloseStartIndexInLine] = getLineIndex(\n lines,\n bodyCloseStartIndex\n );\n\n const insertOpen = \"<StackProvider app={stackClientApp}><StackTheme>\";\n const insertClose = \"</StackTheme></StackProvider>\";\n\n layout =\n layout.slice(0, bodyCloseStartIndex) +\n insertClose +\n layout.slice(bodyCloseStartIndex);\n layout =\n layout.slice(0, bodyOpenEndIndex) +\n insertOpen +\n layout.slice(bodyOpenEndIndex);\n\n logVerbose(\"getUpdatedLayout success\", { updatedLength: layout.length });\n return {\n content: `${layout}`,\n indentation,\n };\n}\n\nfunction guessIndentation(str: string): string {\n const lines = str.split(\"\\n\");\n const linesLeadingWhitespaces = lines\n .map((line) => line.match(/^\\s*/)![0])\n .filter((ws) => ws.length > 0);\n const isMostlyTabs =\n linesLeadingWhitespaces.filter((ws) => ws.includes(\"\\t\")).length >=\n (linesLeadingWhitespaces.length * 2) / 3;\n if (isMostlyTabs) return \"\\t\";\n const linesLeadingWhitespacesCount = linesLeadingWhitespaces.map(\n (ws) => ws.length\n );\n const min = Math.min(Infinity, ...linesLeadingWhitespacesCount);\n return Number.isFinite(min) ? \" \".repeat(Math.max(2, min)) : \" \";\n}\n\nfunction getLineIndex(lines: string[], stringIndex: number): [number, number] {\n let lineIndex = 0;\n for (let l = 0; l < lines.length; l++) {\n const line = lines[l];\n if (stringIndex < lineIndex + line.length) {\n return [l, stringIndex - lineIndex];\n }\n lineIndex += line.length + 1;\n }\n throw new Error(\n `Index ${stringIndex} is out of bounds for lines ${JSON.stringify(lines)}`\n );\n}\n\nasync function getProjectPath(): Promise<string> {\n logVerbose(\"getProjectPath invoked\", { savedProjectPath });\n if (savedProjectPath === undefined) {\n savedProjectPath = process.cwd();\n\n const askForPathModification = !fs.existsSync(\n path.join(savedProjectPath, \"package.json\")\n );\n if (askForPathModification) {\n logVerbose(\"getProjectPath did not find package.json in cwd\", { cwd: savedProjectPath });\n if (onQuestionMode === \"guess\" || onQuestionMode === \"error\") {\n throw new UserError(`No package.json file found in ${savedProjectPath}. Re-run providing the project path argument (e.g. 'init-stack <project-path>').`);\n }\n savedProjectPath = (\n await inquirer.prompt([\n {\n type: \"input\",\n name: \"newPath\",\n message: \"Please enter the path to your project:\",\n default: \".\",\n },\n ])\n ).newPath;\n logVerbose(\"getProjectPath received manual input\", { savedProjectPath });\n }\n }\n logVerbose(\"getProjectPath resolved\", { savedProjectPath });\n return savedProjectPath as string;\n}\n\nasync function ensureGitWorkspaceIsReady(projectPath: string): Promise<void> {\n if (!warnUncommittedChanges) {\n logVerbose(\"ensureGitWorkspaceIsReady skipped as requested by user\");\n return;\n }\n\n logVerbose(\"ensureGitWorkspaceIsReady invoked\", { projectPath });\n let isGitRepo = false;\n try {\n const gitRepoResult = child_process.spawnSync(\n \"git\",\n [\"rev-parse\", \"--is-inside-work-tree\"],\n {\n shell: true,\n cwd: projectPath,\n encoding: \"utf8\",\n stdio: [\"ignore\", \"pipe\", \"ignore\"],\n }\n );\n isGitRepo = gitRepoResult.status === 0 && gitRepoResult.stdout.trim() === \"true\";\n } catch (e) {\n logVerbose(\"ensureGitWorkspaceIsReady failed to detect git repository\", { error: e });\n return;\n }\n if (!isGitRepo) {\n logVerbose(\"ensureGitWorkspaceIsReady skipping\", { reason: \"not-a-git-repo\" });\n return;\n }\n\n const statusResult = child_process.spawnSync(\n \"git\",\n [\"status\", \"--porcelain\"],\n {\n shell: true,\n cwd: projectPath,\n encoding: \"utf8\",\n stdio: [\"ignore\", \"pipe\", \"pipe\"],\n }\n );\n if (statusResult.error || statusResult.status !== 0) {\n logVerbose(\"ensureGitWorkspaceIsReady git status failed\", { status: statusResult.status, error: statusResult.error });\n return;\n }\n\n const lines = statusResult.stdout\n .split(\"\\n\")\n .map((line) => line.replace(/\\r$/, \"\"))\n .filter((line) => line.length > 0);\n\n const unstagedLines = lines.filter((line) => {\n if (line.startsWith(\"!!\")) return false;\n if (line.startsWith(\"??\")) return true;\n if (line.length < 2) return false;\n const workingTreeStatus = line[1];\n return Boolean(workingTreeStatus && workingTreeStatus !== \" \");\n });\n\n if (unstagedLines.length === 0) {\n logVerbose(\"ensureGitWorkspaceIsReady clean working tree\");\n return;\n }\n\n const changedFiles = unstagedLines.map((line) => {\n const filePath = line.slice(3).trim();\n return filePath.length > 0 ? filePath : line;\n });\n\n console.log();\n console.log(colorize.yellow`Detected unstaged/uncommitted changes in your Git repository:`);\n const filesToShow = changedFiles.slice(0, 10);\n for (const file of filesToShow) {\n console.log(` - ${file}`);\n }\n if (changedFiles.length > filesToShow.length) {\n console.log(` - ...and ${changedFiles.length - filesToShow.length} more`);\n }\n console.log(colorize.yellow`You may want to stage and commit these changes before installing Stack Auth, so you can review the changes afterwards.`);\n console.log();\n\n if (onQuestionMode === \"guess\") {\n console.log(colorize.yellow`Continuing because --on-question=guess.`);\n return;\n }\n if (onQuestionMode === \"error\") {\n throw new UnansweredQuestionError(\"Unstaged changes detected in the project directory\");\n }\n\n const { proceed } = await inquirer.prompt([\n {\n type: \"confirm\",\n name: \"proceed\",\n message: \"Continue with Stack initialization anyway?\",\n default: false,\n },\n ]);\n\n if (!proceed) {\n throw new UserError(\"Aborting Stack initialization to avoid overwriting unstaged changes.\");\n }\n logVerbose(\"ensureGitWorkspaceIsReady user confirmed proceed despite unstaged changes\");\n}\n\nasync function findJsExtension(fullPathWithoutExtension: string): Promise<string | null> {\n logVerbose(\"findJsExtension invoked\", { fullPathWithoutExtension });\n for (const ext of jsLikeFileExtensions) {\n const fullPath = fullPathWithoutExtension + \".\" + ext;\n if (fs.existsSync(fullPath)) {\n logVerbose(\"findJsExtension found file\", { fullPath, ext });\n return ext;\n }\n }\n logVerbose(\"findJsExtension no matching file\", { fullPathWithoutExtension });\n return null;\n}\n\nasync function promptPackageManager(): Promise<string> {\n const projectPath = await getProjectPath();\n const yarnLock = fs.existsSync(path.join(projectPath, \"yarn.lock\"));\n const pnpmLock = fs.existsSync(path.join(projectPath, \"pnpm-lock.yaml\"));\n const npmLock = fs.existsSync(path.join(projectPath, \"package-lock.json\"));\n const bunLock = fs.existsSync(path.join(projectPath, \"bun.lockb\")) || fs.existsSync(path.join(projectPath, \"bun.lock\"));\n\n logVerbose(\"promptPackageManager inspecting lockfiles\", { yarnLock, pnpmLock, npmLock, bunLock });\n\n if (yarnLock && !pnpmLock && !npmLock && !bunLock) {\n logVerbose(\"promptPackageManager auto-selected yarn\");\n return \"yarn\";\n } else if (!yarnLock && pnpmLock && !npmLock && !bunLock) {\n logVerbose(\"promptPackageManager auto-selected pnpm\");\n return \"pnpm\";\n } else if (!yarnLock && !pnpmLock && npmLock && !bunLock) {\n logVerbose(\"promptPackageManager auto-selected npm\");\n return \"npm\";\n } else if (!yarnLock && !pnpmLock && !npmLock && bunLock) {\n logVerbose(\"promptPackageManager auto-selected bun\");\n return \"bun\";\n }\n\n if (onQuestionMode === \"guess\") {\n logVerbose(\"promptPackageManager defaulting to npm due to guess mode\");\n return \"npm\";\n }\n if (onQuestionMode === \"error\") {\n throw new UnansweredQuestionError(\"Unable to determine the package manager. Re-run with one of: --npm, --yarn, --pnpm, or --bun.\");\n }\n\n const answers = await inquirer.prompt([\n {\n type: \"list\",\n name: \"packageManager\",\n message: \"Which package manager are you using for this project?\",\n choices: [\"npm\", \"yarn\", \"pnpm\", \"bun\"],\n },\n ]);\n logVerbose(\"promptPackageManager user selected\", { packageManager: answers.packageManager });\n return answers.packageManager;\n}\n\ntype ShellOptions = {\n quiet?: boolean,\n shell?: boolean,\n cwd?: string,\n [key: string]: any,\n}\n\nasync function shellNicelyFormatted(command: string, { quiet, ...options }: ShellOptions): Promise<void> {\n logVerbose(\"shellNicelyFormatted invoked\", { command, options: { ...options, quiet } });\n let ui: any;\n let interval: NodeJS.Timeout | undefined;\n if (!quiet) {\n console.log();\n ui = new inquirer.ui.BottomBar();\n let dots = 4;\n ui.updateBottomBar(\n colorize.blue`Running command: ${command}...`\n );\n interval = setInterval(() => {\n if (!isDryRun) {\n ui.updateBottomBar(\n colorize.blue`Running command: ${command}${\".\".repeat(dots++ % 5)}`\n );\n }\n }, 700);\n }\n\n try {\n if (!isDryRun) {\n const child = child_process.spawn(command, options);\n logVerbose(\"shellNicelyFormatted spawned process\", { pid: child.pid, command });\n if (!quiet) {\n child.stdout.pipe(ui.log);\n child.stderr.pipe(ui.log);\n }\n\n await new Promise<void>((resolve, reject) => {\n child.on(\"exit\", (code) => {\n if (code === 0) {\n resolve();\n } else {\n logVerbose(\"shellNicelyFormatted command failed\", { code });\n reject(new Error(`Command ${command} failed with code ${code}`));\n }\n });\n });\n } else {\n console.log(`[DRY-RUN] Would have run: ${command}`);\n logVerbose(\"shellNicelyFormatted skipped due to dry run\", { command });\n }\n\n if (!quiet) {\n commandsExecuted.push(command);\n ui.updateBottomBar(\n `${colorize.green`√`} Command ${command} succeeded\\n`\n );\n }\n logVerbose(\"shellNicelyFormatted completed\", { command });\n } catch (e) {\n logVerbose(\"shellNicelyFormatted encountered error\", { command, error: e instanceof Error ? { message: e.message, stack: e.stack } : e });\n if (!quiet) {\n ui.updateBottomBar(\n `${colorize.red`X`} Command ${command} failed\\n`\n );\n }\n throw e;\n } finally {\n if (interval) {\n clearTimeout(interval);\n }\n if (!quiet) {\n ui.close();\n }\n }\n}\n\nasync function readFile(fullPath: string): Promise<string | null> {\n logVerbose(\"readFile invoked\", { fullPath, isDryRun });\n try {\n if (!isDryRun) {\n const content = fs.readFileSync(fullPath, \"utf-8\");\n logVerbose(\"readFile succeeded\", { fullPath, length: content.length });\n return content;\n }\n logVerbose(\"readFile skipped due to dry run\", { fullPath });\n return null;\n } catch (err: any) {\n if (err.code === \"ENOENT\") {\n logVerbose(\"readFile file missing\", { fullPath });\n return null;\n }\n logVerbose(\"readFile errored\", { fullPath, error: err instanceof Error ? { message: err.message, stack: err.stack } : err });\n throw err;\n }\n}\n\nasync function writeFile(fullPath: string, content: string): Promise<void> {\n logVerbose(\"writeFile invoked\", { fullPath, length: content.length, isDryRun });\n let create = !fs.existsSync(fullPath);\n if (!isDryRun) {\n fs.mkdirSync(path.dirname(fullPath), { recursive: true });\n fs.writeFileSync(fullPath, content);\n logVerbose(\"writeFile wrote to disk\", { fullPath, created: create });\n } else {\n console.log(`[DRY-RUN] Would have written to ${fullPath}`);\n logVerbose(\"writeFile skipped due to dry run\", { fullPath });\n }\n const relativeToProjectPath = path.relative(await getProjectPath(), fullPath);\n if (!create) {\n filesModified.push(relativeToProjectPath);\n } else {\n filesCreated.push(relativeToProjectPath);\n }\n logVerbose(\"writeFile recorded change\", { relativeToProjectPath, created: create });\n}\n\nfunction laterWriteFile(fullPath: string, content: string): void {\n logVerbose(\"laterWriteFile scheduled\", { fullPath, length: content.length });\n writeFileHandlers.push(async () => {\n await writeFile(fullPath, content);\n });\n}\n\nasync function writeFileIfNotExists(fullPath: string, content: string): Promise<void> {\n if (!fs.existsSync(fullPath)) {\n logVerbose(\"writeFileIfNotExists writing new file\", { fullPath });\n await writeFile(fullPath, content);\n } else {\n logVerbose(\"writeFileIfNotExists skipped\", { fullPath });\n }\n}\n\nfunction laterWriteFileIfNotExists(fullPath: string, content: string): void {\n logVerbose(\"laterWriteFileIfNotExists scheduled\", { fullPath });\n writeFileHandlers.push(async () => {\n await writeFileIfNotExists(fullPath, content);\n });\n}\n\nasync function runDeferredCommands(): Promise<void> {\n if (!deferredCommandHandlers.length) {\n logVerbose(\"runDeferredCommands skipped\", { reason: \"no-handlers\" });\n return;\n }\n logVerbose(\"runDeferredCommands executing handlers\", { count: deferredCommandHandlers.length });\n for (let index = 0; index < deferredCommandHandlers.length; index++) {\n logVerbose(\"runDeferredCommands executing handler\", { index });\n const handler = deferredCommandHandlers[index];\n await handler();\n }\n logVerbose(\"runDeferredCommands completed\");\n}\n\ntype RunScheduledCommandMetadata = {\n recordInCommandsExecuted?: boolean,\n};\n\nasync function runScheduledCommand(\n command: string,\n args: string[],\n options: child_process.SpawnSyncOptions = {},\n metadata: RunScheduledCommandMetadata = {},\n): Promise<void> {\n logVerbose(\"runScheduledCommand invoked\", { command, args, options, isDryRun });\n const display = [command, ...args].join(\" \");\n if (isDryRun) {\n console.log(`[DRY-RUN] Would run: ${display}`);\n logVerbose(\"runScheduledCommand skipped due to dry run\", { display });\n return;\n }\n\n const result = child_process.spawnSync(command, args, {\n stdio: \"pipe\",\n ...options,\n });\n const recordInCommandsExecuted = metadata.recordInCommandsExecuted;\n if (recordInCommandsExecuted && !commandsExecuted.includes(display)) {\n commandsExecuted.push(display);\n }\n if (result.status === 0) {\n console.log(`${colorize.green`√`} ${display}`);\n logVerbose(\"runScheduledCommand succeeded\", { display });\n } else {\n logVerbose(\"runScheduledCommand failed\", { display, result, stderr: result.stderr.toString(), stdout: result.stdout.toString() });\n throw new Error(`Command ${display} failed with status ${result.status}: ${result.stderr.toString()}`);\n }\n}\n\nasync function recordFileChange(fullPath: string, existed: boolean): Promise<void> {\n logVerbose(\"recordFileChange invoked\", { fullPath, existed });\n const projectRoot = path.resolve(await getProjectPath());\n const relative = path.relative(projectRoot, fullPath);\n const insideProject = relative && !relative.startsWith(\"..\") && !path.isAbsolute(relative);\n const entry = insideProject ? relative : fullPath;\n\n if (existed) {\n if (!filesModified.includes(entry)) {\n filesModified.push(entry);\n }\n logVerbose(\"recordFileChange marked modified\", { entry });\n } else if (!filesCreated.includes(entry)) {\n filesCreated.push(entry);\n logVerbose(\"recordFileChange marked created\", { entry });\n }\n}\n\nfunction createConvexAuthConfigContent(options: { stackPackageName: string, type: \"js\" | \"next\" | \"react\" }): string {\n const envVarName = getPublicProjectEnvVarName(options.type);\n return `import { getConvexProvidersConfig } from ${JSON.stringify(options.stackPackageName)};\n\nexport default {\n providers: getConvexProvidersConfig({\n projectId: process.env.${envVarName},\n }),\n};\n`;\n}\n\nfunction createConvexIntegrationConvexConfigContent(stackPackageName: string): string {\n const importPath = `${stackPackageName}/convex.config`;\n return `import stackAuthComponent from ${JSON.stringify(importPath)};\nimport { defineApp } from \"convex/server\";\n\nconst app = defineApp();\napp.use(stackAuthComponent);\n\nexport default app;\n`;\n}\n\nfunction integrateConvexConfig(existingContent: string, stackPackageName: string): string | null {\n if (!existingContent.includes(\"defineApp\")) {\n return null;\n }\n\n const newline = existingContent.includes(\"\\r\\n\") ? \"\\r\\n\" : \"\\n\";\n const normalizedLines = existingContent.replace(/\\r\\n/g, \"\\n\").split(\"\\n\");\n const importPath = `${stackPackageName}/convex.config`;\n\n const hasImport = normalizedLines.some((line) => line.includes(importPath));\n if (!hasImport) {\n let insertIndex = 0;\n while (insertIndex < normalizedLines.length && normalizedLines[insertIndex].trim() === \"\") {\n insertIndex++;\n }\n while (insertIndex < normalizedLines.length && normalizedLines[insertIndex].trim().startsWith(\"import\")) {\n insertIndex++;\n }\n normalizedLines.splice(insertIndex, 0, `import stackAuthComponent from \"${importPath}\";`);\n }\n\n let lastImportIndex = -1;\n for (let i = 0; i < normalizedLines.length; i++) {\n if (normalizedLines[i].trim().startsWith(\"import\")) {\n lastImportIndex = i;\n continue;\n }\n if (normalizedLines[i].trim() === \"\") {\n continue;\n }\n break;\n }\n if (lastImportIndex >= 0) {\n const nextIndex = lastImportIndex + 1;\n if (!normalizedLines[nextIndex] || normalizedLines[nextIndex].trim() !== \"\") {\n normalizedLines.splice(nextIndex, 0, \"\");\n }\n }\n\n const hasStackUse = normalizedLines.some((line) => line.includes(\"app.use(stackAuthComponent\"));\n if (!hasStackUse) {\n const appLineIndex = normalizedLines.findIndex((line) => /const\\s+app\\s*=\\s*defineApp/.test(line));\n if (appLineIndex === -1) {\n return null;\n }\n const indent = normalizedLines[appLineIndex].match(/^\\s*/)?.[0] ?? \"\";\n const insertIndexForUse = appLineIndex + 1;\n normalizedLines.splice(insertIndexForUse, 0, `${indent}app.use(stackAuthComponent);`);\n const nextLineIndex = insertIndexForUse + 1;\n if (!normalizedLines[nextLineIndex] || normalizedLines[nextLineIndex].trim() !== \"\") {\n normalizedLines.splice(nextLineIndex, 0, \"\");\n }\n }\n\n let updated = normalizedLines.join(newline);\n if (!updated.endsWith(newline)) {\n updated += newline;\n }\n return updated;\n}\n\nfunction isSimpleConvexConfig(content: string): boolean {\n const normalized = content\n .replace(/\\r\\n/g, \"\\n\")\n .split(\"\\n\")\n .map((line) => line.trim())\n .filter((line) => line.length > 0);\n if (normalized.length !== 3) {\n return false;\n }\n const [line1, line2, line3] = normalized;\n const importRegex = /^import\\s+\\{\\s*defineApp\\s*\\}\\s+from\\s+['\"]convex\\/server['\"];?$/;\n const appRegex = /^const\\s+app\\s*=\\s*defineApp\\(\\s*\\);?$/;\n const exportRegex = /^export\\s+default\\s+app;?$/;\n return importRegex.test(line1) && appRegex.test(line2) && exportRegex.test(line3);\n}\n\nfunction getPublicProjectEnvVarName(type: \"js\" | \"next\" | \"react\"): string {\n if (type === \"react\") {\n return \"VITE_STACK_PROJECT_ID\";\n }\n if (type === \"next\") {\n return \"NEXT_PUBLIC_STACK_PROJECT_ID\";\n }\n return \"STACK_PROJECT_ID\";\n}\n\ntype ConvexClientUpdateResult = {\n updatedFiles: string[],\n skippedFiles: string[],\n};\n\ntype AddSetAuthResult = {\n updatedContent: string,\n changed: boolean,\n usedClientApp: boolean,\n usedServerApp: boolean,\n instantiationCount: number,\n skippedHttpCount: number,\n};\n\nasync function updateConvexClients({ projectPath, type }: { projectPath: string, type: \"js\" | \"next\" | \"react\" }): Promise<ConvexClientUpdateResult> {\n const files = collectConvexClientCandidateFiles(projectPath);\n logVerbose(\"updateConvexClients collected files\", { projectPath, count: files.length });\n const updatedFiles: string[] = [];\n const skippedFiles: string[] = [];\n\n for (const filePath of files) {\n logVerbose(\"updateConvexClients inspecting file\", { filePath });\n const fileContent = await readFile(filePath);\n if (!fileContent) {\n logVerbose(\"updateConvexClients skipped file (no content)\", { filePath });\n continue;\n }\n if (!/new\\s+Convex(?:React|Http)?Client\\b/.test(fileContent)) {\n logVerbose(\"updateConvexClients skipped file (no Convex client)\", { filePath });\n continue;\n }\n\n const addResult = addSetAuthToConvexClients(fileContent, type);\n logVerbose(\"updateConvexClients processed file\", { filePath, addResult });\n if (!addResult.changed) {\n if (addResult.instantiationCount > 0 && addResult.skippedHttpCount > 0) {\n skippedFiles.push(filePath);\n }\n continue;\n }\n\n let finalContent = addResult.updatedContent;\n if (addResult.usedClientApp) {\n logVerbose(\"updateConvexClients ensuring client import\", { filePath });\n finalContent = await ensureStackAppImport(finalContent, filePath, \"client\");\n }\n if (addResult.usedServerApp) {\n logVerbose(\"updateConvexClients ensuring server import\", { filePath });\n finalContent = await ensureStackAppImport(finalContent, filePath, \"server\");\n }\n\n if (finalContent !== fileContent) {\n laterWriteFile(filePath, finalContent);\n updatedFiles.push(filePath);\n logVerbose(\"updateConvexClients scheduled update\", { filePath });\n }\n }\n\n logVerbose(\"updateConvexClients finished\", { updatedFiles, skippedFiles });\n return {\n updatedFiles,\n skippedFiles,\n };\n}\n\ntype StackAppKind = \"client\" | \"server\";\n\nasync function ensureStackAppImport(content: string, filePath: string, kind: StackAppKind): Promise<string> {\n logVerbose(\"ensureStackAppImport invoked\", { filePath, kind });\n const identifier = kind === \"client\" ? \"stackClientApp\" : \"stackServerApp\";\n if (new RegExp(`import\\\\s+[^;]*\\\\b${identifier}\\\\b`).test(content)) {\n logVerbose(\"ensureStackAppImport found existing import\", { filePath, identifier });\n return content;\n }\n\n const stackBasePath = await getStackAppBasePath(kind);\n const relativeImportPath = convertToModuleSpecifier(path.relative(path.dirname(filePath), stackBasePath));\n const newline = content.includes(\"\\r\\n\") ? \"\\r\\n\" : \"\\n\";\n\n const lines = content.split(/\\r?\\n/);\n const importLine = `import { ${identifier} } from \"${relativeImportPath}\";`;\n\n let insertIndex = 0;\n while (insertIndex < lines.length) {\n const line = lines[insertIndex];\n if (/^\\s*['\"]use (client|server)['\"];?\\s*$/.test(line)) {\n insertIndex += 1;\n continue;\n }\n if (/^\\s*import\\b/.test(line)) {\n insertIndex += 1;\n continue;\n }\n if (line.trim() === \"\") {\n insertIndex += 1;\n continue;\n }\n break;\n }\n\n lines.splice(insertIndex, 0, importLine);\n const nextLine = lines[insertIndex + 1];\n if (nextLine && nextLine.trim() !== \"\" && !/^\\s*import\\b/.test(nextLine)) {\n lines.splice(insertIndex + 1, 0, \"\");\n }\n\n logVerbose(\"ensureStackAppImport added import\", { filePath, importLine });\n return lines.join(newline);\n}\n\nfunction convertToModuleSpecifier(relativePath: string): string {\n let specifier = relativePath.replace(/\\\\/g, \"/\");\n if (!specifier.startsWith(\".\")) {\n specifier = \"./\" + specifier;\n }\n return specifier;\n}\n\nasync function getStackAppBasePath(kind: StackAppKind): Promise<string> {\n const srcPath = await Steps.guessSrcPath();\n const basePath = path.join(srcPath, \"stack\", kind);\n logVerbose(\"getStackAppBasePath resolved\", { kind, basePath });\n return basePath;\n}\n\nfunction addSetAuthToConvexClients(content: string, type: \"js\" | \"next\" | \"react\"): AddSetAuthResult {\n logVerbose(\"addSetAuthToConvexClients invoked\", { type, length: content.length });\n const newline = content.includes(\"\\r\\n\") ? \"\\r\\n\" : \"\\n\";\n const instantiationRegex = /^[ \\t]*(?:const|let|var)\\s+([A-Za-z_$][\\w$]*)\\s*=\\s*new\\s+(Convex(?:React|Http)?Client)\\b([\\s\\S]*?);/gm;\n const replacements: Array<{ start: number, end: number, text: string }> = [];\n let instantiationCount = 0;\n let skippedHttpCount = 0;\n let usedClientApp = false;\n let usedServerApp = false;\n\n let match: RegExpExecArray | null;\n while ((match = instantiationRegex.exec(content)) !== null) {\n instantiationCount += 1;\n const fullMatch = match[0];\n const variableName = match[1];\n const className = match[2];\n\n if (className === \"ConvexHttpClient\") {\n skippedHttpCount += 1;\n logVerbose(\"addSetAuthToConvexClients skipping ConvexHttpClient\", { variableName, fileLength: content.length });\n continue;\n }\n\n const remainder = content.slice(match.index + fullMatch.length);\n const setAuthRegex = new RegExp(`\\\\b${escapeRegExp(variableName)}\\\\s*\\\\.setAuth\\\\s*\\\\(`);\n if (setAuthRegex.test(remainder)) {\n logVerbose(\"addSetAuthToConvexClients found existing setAuth\", { variableName });\n continue;\n }\n\n const indentation = fullMatch.match(/^[\\t ]*/)?.[0] ?? \"\";\n const authCall = determineAuthCallExpression({ type, className, content });\n\n if (authCall.identifier === \"stackClientApp\") {\n usedClientApp = true;\n } else {\n usedServerApp = true;\n }\n\n const replacementText = `${fullMatch}${newline}${indentation}${variableName}.setAuth(${authCall.expression});`;\n replacements.push({\n start: match.index,\n end: match.index + fullMatch.length,\n text: replacementText,\n });\n logVerbose(\"addSetAuthToConvexClients queued replacement\", { variableName, authCall });\n }\n\n if (replacements.length === 0) {\n logVerbose(\"addSetAuthToConvexClients no replacements\", { instantiationCount, skippedHttpCount });\n return {\n updatedContent: content,\n changed: false,\n usedClientApp,\n usedServerApp,\n instantiationCount,\n skippedHttpCount,\n };\n }\n\n let updatedContent = content;\n for (let i = replacements.length - 1; i >= 0; i--) {\n const replacement = replacements[i];\n updatedContent = `${updatedContent.slice(0, replacement.start)}${replacement.text}${updatedContent.slice(replacement.end)}`;\n }\n\n logVerbose(\"addSetAuthToConvexClients completed replacements\", { replacements: replacements.length });\n logVerbose(\"addSetAuthToConvexClients result\", { changed: true, instantiationCount, skippedHttpCount, usedClientApp, usedServerApp });\n return {\n updatedContent,\n changed: true,\n usedClientApp,\n usedServerApp,\n instantiationCount,\n skippedHttpCount,\n };\n}\n\nfunction determineAuthCallExpression({ type, className, content }: { type: \"js\" | \"next\" | \"react\", className: string, content: string }): { expression: string, identifier: \"stackClientApp\" | \"stackServerApp\" } {\n const hasClientAppReference = /\\bstackClientApp\\b/.test(content);\n const hasServerAppReference = /\\bstackServerApp\\b/.test(content);\n logVerbose(\"determineAuthCallExpression context\", { type, className, hasClientAppReference, hasServerAppReference });\n\n if (type === \"js\") {\n const result = { expression: \"stackServerApp.getConvexClientAuth({})\", identifier: \"stackServerApp\" as const };\n logVerbose(\"determineAuthCallExpression returning for JS\", result);\n return result;\n }\n\n if (hasClientAppReference) {\n const result = { expression: getClientAuthCall(type), identifier: \"stackClientApp\" as const };\n logVerbose(\"determineAuthCallExpression using client reference\", result);\n return result;\n }\n if (hasServerAppReference && className !== \"ConvexReactClient\") {\n const result = { expression: \"stackServerApp.getConvexClientAuth({})\", identifier: \"stackServerApp\" as const };\n logVerbose(\"determineAuthCallExpression using server reference\", result);\n return result;\n }\n\n const fallback = { expression: getClientAuthCall(type), identifier: \"stackClientApp\" as const };\n logVerbose(\"determineAuthCallExpression fallback\", fallback);\n return fallback;\n}\n\nfunction getClientAuthCall(type: \"js\" | \"next\" | \"react\"): string {\n logVerbose(\"getClientAuthCall invoked\", { type });\n return \"stackClientApp.getConvexClientAuth({})\";\n}\n\nfunction collectConvexClientCandidateFiles(projectPath: string): string[] {\n logVerbose(\"collectConvexClientCandidateFiles invoked\", { projectPath });\n const roots = getConvexSearchRoots(projectPath);\n logVerbose(\"collectConvexClientCandidateFiles roots\", { roots });\n const files = new Set<string>();\n const visited = new Set<string>();\n\n for (const root of roots) {\n walkDirectory(root, files, visited);\n }\n\n const result = Array.from(files);\n logVerbose(\"collectConvexClientCandidateFiles result\", { count: result.length });\n return result;\n}\n\nfunction getConvexSearchRoots(projectPath: string): string[] {\n const candidateDirs = [\"convex\", \"src\", \"app\", \"components\"];\n const existing = candidateDirs\n .map((dir) => path.join(projectPath, dir))\n .filter((dirPath) => {\n try {\n return fs.existsSync(dirPath) && fs.statSync(dirPath).isDirectory();\n } catch {\n return false;\n }\n });\n if (existing.length > 0) {\n logVerbose(\"getConvexSearchRoots using existing directories\", { existing });\n return existing;\n }\n logVerbose(\"getConvexSearchRoots defaulting to project root\", { projectPath });\n return [projectPath];\n}\n\nconst directorySkipList = new Set([\n \"node_modules\",\n \".git\",\n \".next\",\n \".turbo\",\n \".output\",\n \".vercel\",\n \"dist\",\n \"build\",\n \"coverage\",\n \".cache\",\n \".storybook\",\n \"storybook-static\",\n]);\n\nfunction walkDirectory(currentDir: string, files: Set<string>, visited: Set<string>): void {\n const realPath = (() => {\n try {\n return fs.realpathSync(currentDir);\n } catch {\n return currentDir;\n }\n })();\n\n if (visited.has(realPath)) return;\n visited.add(realPath);\n logVerbose(\"walkDirectory scanning\", { currentDir: realPath });\n\n let dirEntries: fs.Dirent[];\n try {\n dirEntries = fs.readdirSync(realPath, { withFileTypes: true });\n } catch {\n return;\n }\n\n for (const entry of dirEntries) {\n const entryName = entry.name;\n if (entry.isDirectory()) {\n if (directorySkipList.has(entryName)) {\n logVerbose(\"walkDirectory skipping directory in skip list\", { directory: entryName, parent: realPath });\n continue;\n }\n if (entryName.startsWith(\".\") || entryName.startsWith(\"_\")) {\n logVerbose(\"walkDirectory skipping hidden directory\", { directory: entryName, parent: realPath });\n continue;\n }\n walkDirectory(path.join(realPath, entryName), files, visited);\n continue;\n }\n if (!entry.isFile()) continue;\n if (entryName.endsWith(\".d.ts\")) continue;\n if (!hasJsLikeExtension(entryName)) continue;\n const filePath = path.join(realPath, entryName);\n files.add(filePath);\n logVerbose(\"walkDirectory added file\", { filePath });\n }\n}\n\nfunction hasJsLikeExtension(fileName: string): boolean {\n return jsLikeFileExtensions.some((ext) => fileName.endsWith(`.${ext}`));\n}\n\nfunction escapeRegExp(str: string): string {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n\nfunction throwErr(message: string): never {\n throw new Error(message);\n}\n\nasync function clearStdin(): Promise<void> {\n logVerbose(\"clearStdin invoked\");\n await new Promise<void>((resolve) => {\n if (process.stdin.isTTY) {\n process.stdin.setRawMode(true);\n }\n process.stdin.resume();\n process.stdin.removeAllListeners('data');\n\n const flush = () => {\n while (process.stdin.read() !== null) { }\n if (process.stdin.isTTY) {\n process.stdin.setRawMode(false);\n }\n logVerbose(\"clearStdin flushed\");\n resolve();\n };\n\n // Add a small delay to allow any buffered input to clear\n setTimeout(flush, 10);\n });\n logVerbose(\"clearStdin completed\");\n}\n","{\n \"name\": \"@stackframe/init-stack\",\n \"version\": \"2.8.58\",\n \"repository\": \"https://github.com/stack-auth/stack-auth\",\n \"description\": \"The setup wizard for Stack. https://stack-auth.com\",\n \"main\": \"dist/index.js\",\n \"type\": \"module\",\n \"bin\": \"./dist/index.js\",\n \"scripts\": {\n \"clean\": \"rimraf test-run-output && rimraf node_modules && rimraf dist\",\n \"build\": \"tsup\",\n \"dev\": \"tsup --watch\",\n \"lint\": \"eslint --ext .tsx,.ts .\",\n \"typecheck\": \"tsc --noEmit\",\n \"init-stack\": \"node dist/index.js\",\n \"init-stack:local\": \"STACK_INIT_API_BASE_URL=http://localhost:${NEXT_PUBLIC_STACK_PORT_PREFIX:-81}02 STACK_NEXT_INSTALL_PACKAGE_NAME_OVERRIDE=../../stack STACK_JS_INSTALL_PACKAGE_NAME_OVERRIDE=../../js STACK_REACT_INSTALL_PACKAGE_NAME_OVERRIDE=../../react node dist/index.js\",\n \"test-run\": \"pnpm run build && pnpm run test-run-js && pnpm run test-run-node && pnpm run test-run-next && pnpm run test-run-neon && pnpm run test-run-no-browser\",\n \"test-run:manual\": \"pnpm run build && pnpm run test-run-js:manual && pnpm run test-run-node:manual && pnpm run test-run-next:manual && pnpm run test-run-neon:manual\",\n \"ensure-neon\": \"grep -q '\\\"@neondatabase/serverless\\\"' ./test-run-output/package.json && echo 'Initialized Neon successfully!'\",\n \"test-run-neon\": \"pnpm run test-run-node --neon && pnpm run ensure-neon\",\n \"test-run-neon:manual\": \"pnpm run test-run-node:manual --neon && pnpm run ensure-neon\",\n \"test-run-no-browser\": \"rimraf test-run-output && mkdir test-run-output && cd test-run-output && npm init --init-author-name example-author --init-license UNLICENSED --init-author-url http://example.com --init-module test-run-output --init-version 1.0.0 -y && cd .. && pnpm run init-stack:local test-run-output --on-question error --no-warn-uncommitted-changes --js --server --npm --no-browser\",\n \"test-run-node:manual\": \"rimraf test-run-output && mkdir test-run-output && cd test-run-output && npm init && cd .. && pnpm run init-stack:local test-run-output\",\n \"test-run-node\": \"rimraf test-run-output && mkdir test-run-output && cd test-run-output && npm init --init-author-name example-author --init-license UNLICENSED --init-author-url http://example.com --init-module test-run-output --init-version 1.0.0 -y && cd .. && pnpm run init-stack:local test-run-output --on-question error --no-warn-uncommitted-changes --js --server --npm --no-browser\",\n \"test-run-js:manual\": \"rimraf test-run-output && pnpx sv create test-run-output --no-install && pnpm run init-stack:local test-run-output\",\n \"test-run-js\": \"rimraf test-run-output && pnpx sv create test-run-output --template minimal --types ts --no-add-ons --no-install && pnpm run init-stack:local test-run-output --on-question error --no-warn-uncommitted-changes --js --client --npm --no-browser\",\n \"test-run-next:manual\": \"rimraf test-run-output && pnpx create-next-app@latest test-run-output && pnpm run init-stack:local test-run-output\",\n \"test-run-next\": \"rimraf test-run-output && pnpx create-next-app@latest test-run-output --app --ts --no-src-dir --tailwind --use-npm --eslint --import-alias '##@#/*' --turbopack && pnpm run init-stack:local test-run-output --on-question error --no-warn-uncommitted-changes --no-browser\",\n \"test-run-keys-next\": \"rimraf test-run-output && pnpx create-next-app@latest test-run-output --app --ts --no-src-dir --tailwind --use-npm --eslint --import-alias '##@#/*' --turbopack && pnpm run init-stack:local test-run-output --on-question error --no-warn-uncommitted-changes --project-id my-project-id --publishable-client-key my-publishable-client-key\",\n \"test-run-keys-js\": \"rimraf test-run-output && pnpx sv create test-run-output --template minimal --types ts --no-add-ons --no-install && pnpm run init-stack:local test-run-output --on-question error --no-warn-uncommitted-changes --js --client --npm --project-id my-project-id --publishable-client-key my-publishable-client-key\",\n \"test-run-react\": \"rimraf test-run-output && pnpx create-vite@latest test-run-output --template react-ts && pnpm run init-stack:local test-run-output --on-question error --no-warn-uncommitted-changes --no-browser --npm\",\n \"test-run-react:manual\": \"rimraf test-run-output && pnpx create-vite@latest test-run-output --template react-ts && pnpm run init-stack:local test-run-output --react\"\n },\n \"files\": [\n \"README.md\",\n \"dist\",\n \"CHANGELOG.md\",\n \"LICENSE\"\n ],\n \"homepage\": \"https://stack-auth.com\",\n \"keywords\": [],\n \"author\": \"\",\n \"license\": \"MIT\",\n \"dependencies\": {\n \"@stackframe/stack-shared\": \"workspace:*\",\n \"commander\": \"^13.1.0\",\n \"inquirer\": \"^9.2.19\",\n \"open\": \"^10.1.0\",\n \"posthog-node\": \"^4.1.0\"\n },\n \"devDependencies\": {\n \"@types/inquirer\": \"^9.0.7\",\n \"@types/node\": \"20.17.6\",\n \"rimraf\": \"^6.0.1\",\n \"tsup\": \"^8.4.0\",\n \"typescript\": \"5.3.3\"\n },\n \"packageManager\": \"pnpm@10.23.0\"\n}\n","import type { SpawnSyncOptions } from \"child_process\";\nimport * as fs from \"fs\";\nimport * as os from \"os\";\nimport * as path from \"path\";\n\nimport type { Colorize, JsonRecord } from \"./util\";\nimport { getCommandPath, logVerbose, shouldWriteConfigFile } from \"./util\";\n\nconst MCP_SERVER_NAME = \"stack-auth\";\nconst MCP_SERVER_URL = \"https://mcp.stack-auth.com/\";\nconst MCP_ACCEPT_HEADER = \"application/json, text/event-stream\";\n\ntype JsonUpdater = (current: JsonRecord) => JsonRecord | null | undefined;\ntype JsonTarget = { path: string, allowCreate?: boolean };\n\nconst VS_CODE_PAYLOAD = JSON.stringify({ type: \"http\", name: MCP_SERVER_NAME, url: MCP_SERVER_URL });\nconst CLAUDE_BASE_ARGS = [\"mcp\", \"add\", \"--transport\", \"http\", MCP_SERVER_NAME, MCP_SERVER_URL] as const;\ntype RunScheduledCommandMetadata = {\n recordInCommandsExecuted?: boolean,\n};\n\ntype McpSchedulerContext = {\n projectPath: string,\n isDryRun: boolean,\n colorize: Colorize,\n registerWriteHandler: (handler: () => Promise<void>) => void,\n registerCommandHandler: (handler: () => Promise<void>) => void,\n recordFileChange: (fullPath: string, existed: boolean) => Promise<void>,\n runScheduledCommand: (\n command: string,\n args: string[],\n options?: SpawnSyncOptions,\n metadata?: RunScheduledCommandMetadata,\n ) => Promise<void>,\n};\n\nexport function scheduleMcpConfiguration(ctx: McpSchedulerContext): void {\n const workspaceRoot = path.resolve(ctx.projectPath);\n const homeDir = os.homedir();\n\n logMcpVerbose(\"scheduleMcpConfiguration invoked\", { workspaceRoot, homeDir });\n scheduleCursorConfigs(ctx, homeDir, workspaceRoot);\n scheduleVsCodeConfigs(ctx, homeDir, workspaceRoot);\n scheduleClaudeConfigs(ctx, workspaceRoot);\n scheduleWindsurfConfigs(ctx, homeDir);\n scheduleGeminiConfig(ctx, homeDir);\n}\n\nfunction scheduleCursorConfigs(ctx: McpSchedulerContext, homeDir: string, workspaceRoot: string): void {\n const updater = createServerUpdater(\"mcpServers\", { url: MCP_SERVER_URL });\n logMcpVerbose(\"Scheduling Cursor MCP configs\", { homeDir, workspaceRoot });\n const targets = [\n { path: path.join(homeDir, \".cursor\", \"mcp.json\"), allowCreate: false, scope: \"home\" },\n { path: path.join(workspaceRoot, \".cursor\", \"mcp.json\"), allowCreate: true, scope: \"workspace\" },\n ];\n for (const target of targets) {\n logInvestigationStatus(\"Cursor\", target.path, target.scope);\n }\n scheduleJsonTargets(\n ctx,\n targets.map(({ path: targetPath, allowCreate }) => ({ path: targetPath, allowCreate })),\n updater,\n );\n}\n\nfunction scheduleVsCodeConfigs(ctx: McpSchedulerContext, homeDir: string, workspaceRoot: string): void {\n const updater = createServerUpdater(\"servers\", { type: \"http\", url: MCP_SERVER_URL });\n const paths = getVsCodeUserConfigPaths(homeDir);\n\n logMcpVerbose(\"Scheduling VS Code MCP configs\", { homeDir, paths });\n paths.stable.forEach((configPath) => logInvestigationStatus(\"VS Code (stable)\", configPath));\n paths.insiders.forEach((configPath) => logInvestigationStatus(\"VS Code (insiders)\", configPath));\n const workspaceTarget = path.join(workspaceRoot, \".vscode\", \"mcp.json\");\n logInvestigationStatus(\"VS Code (workspace)\", workspaceTarget);\n const stableChanged = scheduleJsonTargets(\n ctx,\n paths.stable.map((configPath) => ({ path: configPath })),\n updater,\n );\n const insidersChanged = scheduleJsonTargets(\n ctx,\n paths.insiders.map((configPath) => ({ path: configPath })),\n updater,\n );\n const workspaceChanged = scheduleJsonTargets(\n ctx,\n [{ path: path.join(workspaceRoot, \".vscode\", \"mcp.json\"), allowCreate: true }],\n updater,\n );\n\n scheduleCliIfAvailable(ctx, \"code\", [\"--add-mcp\", VS_CODE_PAYLOAD], true);\n scheduleCliIfAvailable(ctx, \"code-insiders\", [\"--add-mcp\", VS_CODE_PAYLOAD], true);\n}\n\nfunction findClaudeExecutable(): string {\n // Check for local installations first\n // (Claude installs itself via alias so it may not be in the system PATH)\n const homeDir = os.homedir();\n const localBinPath = path.join(homeDir, \".local\", \"bin\", \"claude\");\n const claudeLocalPath = path.join(homeDir, \".claude\", \"local\", \"claude\");\n\n if (fs.existsSync(localBinPath)) {\n return localBinPath;\n }\n\n if (fs.existsSync(claudeLocalPath)) {\n return claudeLocalPath;\n }\n\n // Fall back to system PATH\n return \"claude\";\n}\n\nfunction scheduleClaudeConfigs(ctx: McpSchedulerContext, workspaceRoot: string): void {\n const updater = createServerUpdater(\"mcpServers\", { type: \"http\", url: MCP_SERVER_URL });\n logMcpVerbose(\"Scheduling Claude MCP configs\", { workspaceRoot });\n const targetPath = path.join(workspaceRoot, \".mcp.json\");\n logInvestigationStatus(\"Claude (project)\", targetPath);\n const projectConfigChanged = scheduleJsonTargets(\n ctx,\n [{ path: targetPath, allowCreate: true }],\n updater,\n );\n\n const claudeExecutable = findClaudeExecutable();\n scheduleCliIfAvailable(ctx, claudeExecutable, [...CLAUDE_BASE_ARGS, \"--scope\", \"user\"], projectConfigChanged);\n scheduleCliIfAvailable(\n ctx,\n claudeExecutable,\n [...CLAUDE_BASE_ARGS, \"--scope\", \"project\"],\n projectConfigChanged,\n { cwd: workspaceRoot },\n );\n}\n\nfunction scheduleWindsurfConfigs(ctx: McpSchedulerContext, homeDir: string): void {\n const updater = createServerUpdater(\"mcpServers\", { serverUrl: MCP_SERVER_URL });\n logMcpVerbose(\"Scheduling Windsurf MCP configs\", { homeDir });\n const paths = getWindsurfConfigPaths(homeDir);\n paths.forEach((configPath) => logInvestigationStatus(\"Windsurf\", configPath));\n scheduleJsonTargets(ctx, paths.map((configPath) => ({ path: configPath })), updater);\n}\n\nfunction scheduleGeminiConfig(ctx: McpSchedulerContext, homeDir: string): void {\n const updater = createServerUpdater(\"mcpServers\", {\n httpUrl: MCP_SERVER_URL,\n headers: { Accept: MCP_ACCEPT_HEADER },\n });\n\n logMcpVerbose(\"Scheduling Gemini MCP configs\", { homeDir });\n const targetPath = path.join(homeDir, \".gemini\", \"settings.json\");\n logInvestigationStatus(\"Gemini\", targetPath);\n scheduleJsonTargets(\n ctx,\n [{ path: targetPath }],\n updater,\n );\n}\n\nfunction scheduleJsonFileUpdate(\n ctx: McpSchedulerContext,\n fullPath: string | null | undefined,\n update: JsonUpdater,\n options: { allowCreate?: boolean } = {}\n): boolean {\n logMcpVerbose(\"scheduleJsonFileUpdate invoked\", { fullPath, allowCreate: options.allowCreate });\n if (!fullPath) {\n logMcpVerbose(\"scheduleJsonFileUpdate skipped: no path provided\");\n return false;\n }\n\n const allowCreate = options.allowCreate ?? false;\n if (!shouldWriteConfigFile(fullPath, { allowCreate })) {\n logMcpVerbose(\"scheduleJsonFileUpdate skipped: shouldWriteConfigFile returned false\", { fullPath, allowCreate });\n return false;\n }\n\n const absolutePath = path.resolve(fullPath);\n const info = readJsonOrEmpty(absolutePath);\n logMcpVerbose(\"scheduleJsonFileUpdate current file info\", { absolutePath, existed: info.existed, parseError: info.parseError?.message });\n const draft = cloneJsonRecord(info.data);\n const updated = update(draft);\n if (!updated) {\n logMcpVerbose(\"scheduleJsonFileUpdate skipped: updater returned nullish\", { absolutePath });\n return false;\n }\n\n const nextContent = JSON.stringify(updated, null, 2) + \"\\n\";\n const currentContent = info.existed && !info.parseError ? JSON.stringify(info.data, null, 2) + \"\\n\" : null;\n if (!info.parseError && currentContent === nextContent) {\n logMcpVerbose(\"scheduleJsonFileUpdate skipped: content unchanged\", { absolutePath });\n return false;\n }\n\n ctx.registerWriteHandler(async () => {\n await writeJsonFile(ctx, absolutePath, update, { allowCreate });\n });\n\n logMcpVerbose(\"scheduleJsonFileUpdate scheduled write\", { absolutePath });\n return true;\n}\n\ntype WriteJsonOptions = { allowCreate?: boolean };\n\nasync function writeJsonFile(\n ctx: McpSchedulerContext,\n absolutePath: string,\n update: JsonUpdater,\n options: WriteJsonOptions\n): Promise<void> {\n logMcpVerbose(\"writeJsonFile invoked\", { absolutePath, allowCreate: options.allowCreate });\n const allowCreate = options.allowCreate ?? false;\n const info = readJsonOrEmpty(absolutePath);\n\n if (!info.existed && !allowCreate) {\n logMcpVerbose(\"writeJsonFile skipped: file missing and allowCreate false\", { absolutePath });\n return;\n }\n\n let current = info.data;\n if (info.parseError) {\n console.warn(\n ctx.colorize.yellow`Warning: Unable to parse MCP config at ${absolutePath}. It will be replaced with a fresh configuration.`\n );\n current = {};\n logMcpVerbose(\"writeJsonFile parse error encountered; falling back to empty object\", { absolutePath, error: info.parseError.message });\n }\n\n const draft = cloneJsonRecord(current);\n const updated = update(draft);\n if (!updated) {\n logMcpVerbose(\"writeJsonFile skipped: updater returned nullish\", { absolutePath });\n return;\n }\n\n const nextContent = JSON.stringify(updated, null, 2) + \"\\n\";\n const currentContent = info.existed && !info.parseError ? JSON.stringify(current, null, 2) + \"\\n\" : null;\n if (currentContent === nextContent && !info.parseError) {\n logMcpVerbose(\"writeJsonFile skipped: current content matches desired content\", { absolutePath });\n return;\n }\n\n if (ctx.isDryRun) {\n console.log(`[DRY-RUN] Would write ${absolutePath}`);\n logMcpVerbose(\"writeJsonFile dry-run; write skipped\", { absolutePath });\n return;\n }\n\n fs.mkdirSync(path.dirname(absolutePath), { recursive: true });\n\n if (info.existed) {\n try {\n fs.copyFileSync(absolutePath, `${absolutePath}.bak`);\n } catch {\n // Ignore backup failures; the write below is still valid.\n }\n }\n\n fs.writeFileSync(absolutePath, nextContent, \"utf-8\");\n await ctx.recordFileChange(absolutePath, info.existed);\n logMcpVerbose(\"writeJsonFile completed write\", { absolutePath, existed: info.existed });\n}\n\nfunction scheduleJsonTargets(ctx: McpSchedulerContext, targets: JsonTarget[], update: JsonUpdater): boolean {\n let changed = false;\n logMcpVerbose(\"scheduleJsonTargets invoked\", { targetCount: targets.length });\n for (const target of targets) {\n if (!target.path) continue;\n if (scheduleJsonFileUpdate(ctx, target.path, update, { allowCreate: target.allowCreate })) {\n changed = true;\n }\n }\n logMcpVerbose(\"scheduleJsonTargets completed\", { changed });\n return changed;\n}\n\nfunction scheduleCliIfAvailable(\n ctx: McpSchedulerContext,\n command: string,\n args: string[],\n shouldRun: boolean,\n options?: SpawnSyncOptions,\n): void {\n logMcpVerbose(\"scheduleCliIfAvailable invoked\", { command, args, shouldRun });\n if (!shouldRun) {\n logMcpVerbose(\"scheduleCliIfAvailable skipped: shouldRun false\", { command });\n return;\n }\n const commandPath = getCommandPath(command);\n if (!commandPath) {\n logMcpVerbose(\"scheduleCliIfAvailable skipped: command not available\", { command });\n return;\n }\n logMcpVerbose(\"scheduleCliIfAvailable scheduling CLI registration\", { command });\n scheduleCliRegistration(ctx, commandPath, args, options);\n}\n\nfunction createServerUpdater(containerKey: string, entry: JsonRecord): JsonUpdater {\n logMcpVerbose(\"createServerUpdater invoked\", { containerKey });\n return (current: JsonRecord): JsonRecord => {\n const next = { ...current };\n const servers = { ...(next[containerKey] ?? {}) };\n servers[MCP_SERVER_NAME] = cloneJsonRecord(entry);\n next[containerKey] = servers;\n return next;\n };\n}\n\nfunction getVsCodeUserConfigPaths(homeDir: string): { stable: string[], insiders: string[] } {\n const stable = new Set<string>();\n const insiders = new Set<string>();\n const platform = process.platform;\n\n logMcpVerbose(\"getVsCodeUserConfigPaths invoked\", { homeDir, platform });\n if (platform === \"darwin\") {\n stable.add(path.join(homeDir, \"Library\", \"Application Support\", \"Code\", \"User\", \"mcp.json\"));\n insiders.add(path.join(homeDir, \"Library\", \"Application Support\", \"Code - Insiders\", \"User\", \"mcp.json\"));\n } else if (platform === \"win32\") {\n const appData = process.env.APPDATA;\n if (appData) {\n stable.add(path.join(appData, \"Code\", \"User\", \"mcp.json\"));\n insiders.add(path.join(appData, \"Code - Insiders\", \"User\", \"mcp.json\"));\n }\n } else {\n stable.add(path.join(homeDir, \".config\", \"Code\", \"User\", \"mcp.json\"));\n insiders.add(path.join(homeDir, \".config\", \"Code - Insiders\", \"User\", \"mcp.json\"));\n }\n\n return {\n stable: Array.from(stable),\n insiders: Array.from(insiders),\n };\n}\n\nfunction getWindsurfConfigPaths(homeDir: string): string[] {\n const paths = new Set<string>();\n\n logMcpVerbose(\"getWindsurfConfigPaths invoked\", { homeDir, platform: process.platform });\n if (process.platform === \"darwin\") {\n paths.add(path.join(homeDir, \".codeium\", \"windsurf\", \"mcp_config.json\"));\n } else if (process.platform === \"win32\") {\n const appData = process.env.APPDATA;\n if (appData) {\n paths.add(path.join(appData, \"Codeium\", \"Windsurf\", \"mcp_config.json\"));\n }\n } else {\n paths.add(path.join(homeDir, \".config\", \"Codeium\", \"Windsurf\", \"mcp_config.json\"));\n paths.add(path.join(homeDir, \".codeium\", \"windsurf\", \"mcp_config.json\"));\n paths.add(path.join(homeDir, \".var\", \"app\", \"com.codeium.windsurf\", \"config\", \"Codeium\", \"Windsurf\", \"mcp_config.json\"));\n }\n\n return Array.from(paths);\n}\n\ntype JsonReadResult = { existed: boolean, data: JsonRecord, parseError: Error | null };\n\nfunction readJsonOrEmpty(fullPath: string): JsonReadResult {\n logMcpVerbose(\"readJsonOrEmpty invoked\", { fullPath });\n if (!fs.existsSync(fullPath)) {\n logMcpVerbose(\"readJsonOrEmpty no file found\", { fullPath });\n return { existed: false, data: {}, parseError: null };\n }\n\n try {\n const raw = fs.readFileSync(fullPath, \"utf-8\");\n const data = raw.trim() ? JSON.parse(raw) : {};\n logMcpVerbose(\"readJsonOrEmpty parsed file\", { fullPath, hasContent: Boolean(raw.trim()) });\n return { existed: true, data, parseError: null };\n } catch (error) {\n const parseError = error instanceof Error ? error : new Error(String(error));\n logMcpVerbose(\"readJsonOrEmpty parse error\", { fullPath, error: parseError.message });\n return { existed: true, data: {}, parseError };\n }\n}\n\nfunction cloneJsonRecord<T extends JsonRecord>(value: T): T {\n return JSON.parse(JSON.stringify(value)) as T;\n}\n\nfunction scheduleCliRegistration(\n ctx: McpSchedulerContext,\n command: string,\n args: string[],\n options: SpawnSyncOptions = {}\n): void {\n logMcpVerbose(\"scheduleCliRegistration invoked\", { command, args, options });\n ctx.registerCommandHandler(async () => {\n try {\n await ctx.runScheduledCommand(command, args, options, {\n recordInCommandsExecuted: false,\n });\n } catch (error) {\n logMcpVerbose(\"scheduleCliRegistration encountered error. Ignoring.\", { command, args, options, error: error instanceof Error ? { message: error.message, stack: error.stack } : error });\n }\n });\n}\n\nfunction logMcpVerbose(message: string, details?: unknown): void {\n logVerbose(`[mcp] ${message}`, details);\n}\n\nfunction logInvestigationStatus(editorLabel: string, configPath: string, scope?: string): void {\n const exists = fs.existsSync(configPath);\n logMcpVerbose(`Investigating ${editorLabel} config${scope ? ` (${scope})` : \"\"}`, { path: configPath, exists });\n}\n","import * as child_process from \"child_process\";\nimport * as fs from \"fs\";\nimport * as path from \"path\";\n\nexport type TemplateFunction = (strings: TemplateStringsArray, ...values: any[]) => string;\n\nexport type Colorize = {\n red: TemplateFunction,\n blue: TemplateFunction,\n green: TemplateFunction,\n yellow: TemplateFunction,\n bold: TemplateFunction,\n};\n\nexport type JsonRecord = Record<string, any>;\n\ntype VerboseFormatter = (message: string) => string;\n\nlet verboseLevelState = 0;\nlet verboseFormatterState: VerboseFormatter | null = null;\n\nexport function configureVerboseLogging(options: { level?: number, formatter?: VerboseFormatter }): void {\n verboseLevelState = Math.max(0, options.level ?? 0);\n verboseFormatterState = options.formatter ?? null;\n}\n\nexport function getVerboseLevel(): number {\n return verboseLevelState;\n}\n\nexport function logVerbose(message: string, details?: unknown): void {\n if (verboseLevelState <= 0) return;\n const formattedMessage = verboseFormatterState ? verboseFormatterState(message) : `[verbose] ${message}`;\n console.log(formattedMessage);\n if (typeof details !== \"undefined\" && verboseLevelState >= 2) {\n console.dir(details, { depth: null });\n }\n}\n\nexport function templateIdentity(strings: TemplateStringsArray, ...values: any[]): string {\n if (strings.length === 0) return \"\";\n if (values.length !== strings.length - 1) {\n throw new Error(\"Invalid number of values; must be one less than strings\");\n }\n\n return strings.slice(1).reduce(\n (result, string, i) => `${result}${String(values[i])}${string}`,\n strings[0]\n );\n}\n\nexport function omit(object: Record<string, any>, keys: string[]): Record<string, any> {\n return Object.fromEntries(Object.entries(object).filter(([key]) => !keys.includes(key)));\n}\n\nexport function getCommandPath(command: string): string | null {\n if (!command) return null;\n\n const checker = process.platform === \"win32\" ? \"where\" : \"which\";\n const commands = [\n [process.env.SHELL ?? \"bash\", [\"-ic\", `${checker} ${command}`]],\n [checker, [command]],\n ] as const;\n for (const spawnArgs of commands) {\n const result = child_process.spawnSync(spawnArgs[0], spawnArgs[1], { stdio: \"pipe\" });\n if (result.status === 0) {\n return result.stdout.toString().trim().split('\\n')[0];\n }\n }\n return null;\n}\n\nexport function shouldWriteConfigFile(\n fullPath: string | null | undefined,\n options: { allowCreate?: boolean } = {}\n): boolean {\n if (!fullPath) return false;\n if (fs.existsSync(fullPath)) return true;\n\n const dir = path.dirname(fullPath);\n if (!options.allowCreate) {\n return fs.existsSync(dir);\n }\n\n return true;\n}\n","type TelegramErrorInfo = {\n name?: string,\n message: string,\n stack?: string,\n};\n\nexport type TelegramCompletionPayload = {\n success: boolean,\n distinctId?: string,\n options: Record<string, unknown>,\n args: string[],\n isNonInteractive: boolean,\n timestamp: string,\n projectPath?: string,\n error?: TelegramErrorInfo,\n};\n\nconst API_BASE_ENV = \"STACK_INIT_API_BASE_URL\";\nconst DEFAULT_API_BASE_URL = \"https://api.stack-auth.com\";\nconst CALLBACK_ENDPOINT = \"/api/latest/internal/init-script-callback\";\n\nexport async function invokeCallback(payload: TelegramCompletionPayload): Promise<void> {\n const baseUrl = process.env[API_BASE_ENV] ?? DEFAULT_API_BASE_URL;\n await fetch(`${baseUrl}${CALLBACK_ENDPOINT}`, {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(payload),\n });\n}\n"],"mappings":"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","names":["child_process","fs","os","path","fs","path","options","options","options","platform","resolve","options","relative"]}