{"version":3,"file":"maybe-auto-update-B2QRoCE7.mjs","names":[],"sources":["../src/update/compare-version.ts","../src/update/fetch-latest-version.ts","../src/update/read-pnpm-release-age-minutes.ts","../src/update/resolve-global-pnpm-root.ts","../src/update/build-update-command.ts","../src/update/run-package-manager-update.ts","../src/update/update-block-cache.ts","../src/update/maybe-auto-update.ts"],"sourcesContent":["function parseVersion(version: string): [number, number, number] {\n  const normalized = version.trim().replace(/^v/, \"\").split(\"-\")[0] ?? \"\";\n  const [major = 0, minor = 0, patch = 0] = normalized.split(\".\").map((part) => {\n    const value = Number.parseInt(part, 10);\n    return Number.isFinite(value) ? value : 0;\n  });\n\n  return [major, minor, patch];\n}\n\nexport function isNewerVersion(latest: string, current: string): boolean {\n  const [latestMajor, latestMinor, latestPatch] = parseVersion(latest);\n  const [currentMajor, currentMinor, currentPatch] = parseVersion(current);\n\n  if (latestMajor !== currentMajor) {\n    return latestMajor > currentMajor;\n  }\n\n  if (latestMinor !== currentMinor) {\n    return latestMinor > currentMinor;\n  }\n\n  return latestPatch > currentPatch;\n}\n","const REGISTRY_URL = \"https://registry.npmjs.org/@keystrokehq%2Fcli\";\nconst REQUEST_TIMEOUT_MS = 3_000;\n\ntype RegistryPackage = {\n  \"dist-tags\"?: {\n    latest?: string;\n  };\n  time?: Record<string, string>;\n};\n\nexport type CliRegistryRelease = {\n  version: string;\n  publishedAt?: string;\n};\n\nexport async function fetchLatestCliRelease(): Promise<CliRegistryRelease | undefined> {\n  const controller = new AbortController();\n  const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);\n\n  try {\n    const response = await fetch(REGISTRY_URL, {\n      signal: controller.signal,\n      headers: {\n        Accept: \"application/json\",\n      },\n    });\n\n    if (!response.ok) {\n      return undefined;\n    }\n\n    const payload = (await response.json()) as RegistryPackage;\n    const version = payload[\"dist-tags\"]?.latest?.trim();\n    if (!version) {\n      return undefined;\n    }\n\n    return {\n      version,\n      publishedAt: payload.time?.[version],\n    };\n  } catch {\n    return undefined;\n  } finally {\n    clearTimeout(timeout);\n  }\n}\n\nexport async function fetchLatestCliVersion(): Promise<string | undefined> {\n  const release = await fetchLatestCliRelease();\n  return release?.version;\n}\n","import { spawnSync } from \"node:child_process\";\n\nexport function readPnpmMinimumReleaseAgeMinutes(): number | undefined {\n  const result = spawnSync(\"pnpm\", [\"config\", \"get\", \"minimum-release-age\"], {\n    encoding: \"utf8\",\n  });\n\n  if (result.status !== 0) {\n    return undefined;\n  }\n\n  const value = result.stdout.trim();\n  if (!value || value === \"undefined\" || value === \"0\") {\n    return undefined;\n  }\n\n  const minutes = Number.parseInt(value, 10);\n  return Number.isFinite(minutes) && minutes > 0 ? minutes : undefined;\n}\n\nexport function computeReleaseAgeRetryAfter(\n  publishedAt: string | undefined,\n  minimumReleaseAgeMinutes: number | undefined,\n): Date | undefined {\n  if (!publishedAt || !minimumReleaseAgeMinutes) {\n    return undefined;\n  }\n\n  const publishedMs = Date.parse(publishedAt);\n  if (!Number.isFinite(publishedMs)) {\n    return undefined;\n  }\n\n  return new Date(publishedMs + minimumReleaseAgeMinutes * 60_000);\n}\n","/** pnpm global installs live in `<pnpm-home>/global/<major>/`. */\nexport function resolveGlobalPnpmRoot(packageRoot: string): string | undefined {\n  const normalized = packageRoot.replace(/\\\\/g, \"/\");\n  const match = normalized.match(/^(.*\\/global\\/\\d+)\\//);\n  return match?.[1];\n}\n","import type { CliInstallInfo } from \"./detect-cli-install\";\nimport { resolveGlobalPnpmRoot } from \"./resolve-global-pnpm-root\";\n\nconst PACKAGE_NAME = \"@keystrokehq/cli@latest\";\n\nexport function buildUpdateCommand(install: CliInstallInfo): {\n  command: string;\n  args: string[];\n  cwd?: string;\n} {\n  const { kind, packageManager } = install;\n\n  if (kind === \"global\") {\n    switch (packageManager) {\n      case \"pnpm\":\n        return {\n          command: \"pnpm\",\n          args: [\"add\", \"-g\", PACKAGE_NAME],\n          cwd: resolveGlobalPnpmRoot(install.packageRoot),\n        };\n      case \"yarn\":\n        return { command: \"yarn\", args: [\"global\", \"add\", PACKAGE_NAME] };\n      case \"bun\":\n        return { command: \"bun\", args: [\"add\", \"-g\", PACKAGE_NAME] };\n      case \"npm\":\n      default:\n        return { command: \"npm\", args: [\"install\", \"-g\", PACKAGE_NAME] };\n    }\n  }\n\n  const cwd = install.projectRoot;\n  switch (packageManager) {\n    case \"pnpm\":\n      return { command: \"pnpm\", args: [\"add\", \"-D\", PACKAGE_NAME], cwd };\n    case \"yarn\":\n      return { command: \"yarn\", args: [\"add\", \"-D\", PACKAGE_NAME], cwd };\n    case \"bun\":\n      return { command: \"bun\", args: [\"add\", \"-D\", PACKAGE_NAME], cwd };\n    case \"npm\":\n    default:\n      return { command: \"npm\", args: [\"install\", \"-D\", PACKAGE_NAME], cwd };\n  }\n}\n","import { spawnSync } from \"node:child_process\";\n\nimport { buildUpdateCommand } from \"./build-update-command\";\nimport type { CliInstallInfo } from \"./detect-cli-install\";\n\nexport function updateSpawnEnv(): NodeJS.ProcessEnv {\n  const env = { ...process.env };\n  const pnpmHome = env.PNPM_HOME;\n\n  if (!pnpmHome) {\n    return env;\n  }\n\n  const pathKey = process.platform === \"win32\" ? \"Path\" : \"PATH\";\n  const path = env[pathKey] ?? \"\";\n  const segments = path.split(process.platform === \"win32\" ? \";\" : \":\");\n  const binDir = `${pnpmHome}/bin`;\n  const prefix = [binDir, pnpmHome].filter((dir) => !segments.includes(dir));\n\n  if (prefix.length > 0) {\n    env[pathKey] = [...prefix, path].filter(Boolean).join(process.platform === \"win32\" ? \";\" : \":\");\n  }\n\n  return env;\n}\n\nexport type PackageManagerRunResult = {\n  ok: boolean;\n  output: string;\n};\n\nfunction runPackageManager(command: string, args: string[], cwd?: string): PackageManagerRunResult {\n  const result = spawnSync(command, args, {\n    cwd,\n    encoding: \"utf8\",\n    env: updateSpawnEnv(),\n  });\n\n  const output = `${result.stdout ?? \"\"}${result.stderr ?? \"\"}`;\n\n  return {\n    ok: result.status === 0,\n    output,\n  };\n}\n\nfunction migratePnpmGlobal(cwd: string): boolean {\n  const result = spawnSync(\"pnpm\", [\"install\"], {\n    cwd,\n    encoding: \"utf8\",\n    env: {\n      ...updateSpawnEnv(),\n      CI: \"true\",\n    },\n  });\n\n  return result.status === 0;\n}\n\nexport function runPackageManagerUpdate(install: CliInstallInfo): PackageManagerRunResult {\n  const { command, args, cwd } = buildUpdateCommand(install);\n  const firstAttempt = runPackageManager(command, args, cwd);\n\n  if (firstAttempt.ok) {\n    return firstAttempt;\n  }\n\n  if (install.kind === \"global\" && install.packageManager === \"pnpm\" && cwd) {\n    if (migratePnpmGlobal(cwd)) {\n      return runPackageManager(command, args, cwd);\n    }\n  }\n\n  return firstAttempt;\n}\n","import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join } from \"node:path\";\n\nimport { getCliConfigDir } from \"../config\";\n\nexport type UpdateBlockCache = {\n  registryLatest?: string;\n  blockedUntil?: string;\n  lastFailedAt?: string;\n};\n\nconst CACHE_FILE = \"update-check.json\";\nconst GENERIC_RETRY_MS = 24 * 60 * 60 * 1000;\n\nfunction cachePath(configDir = getCliConfigDir()): string {\n  return join(configDir, CACHE_FILE);\n}\n\nexport function readUpdateBlockCache(configDir?: string): UpdateBlockCache {\n  const path = cachePath(configDir);\n  if (!existsSync(path)) {\n    return {};\n  }\n\n  try {\n    return JSON.parse(readFileSync(path, \"utf8\")) as UpdateBlockCache;\n  } catch {\n    return {};\n  }\n}\n\nexport function writeUpdateBlockCache(cache: UpdateBlockCache, configDir?: string): void {\n  const dir = configDir ?? getCliConfigDir();\n  mkdirSync(dir, { recursive: true });\n  writeFileSync(cachePath(dir), `${JSON.stringify(cache, null, 2)}\\n`, \"utf8\");\n}\n\nexport function shouldSkipCachedUpdate(\n  cache: UpdateBlockCache,\n  registryLatest: string,\n  now = Date.now(),\n): boolean {\n  if (cache.registryLatest !== registryLatest) {\n    return false;\n  }\n\n  if (cache.blockedUntil) {\n    const blockedUntilMs = Date.parse(cache.blockedUntil);\n    if (Number.isFinite(blockedUntilMs) && blockedUntilMs > now) {\n      return true;\n    }\n  }\n\n  if (cache.lastFailedAt) {\n    const lastFailedMs = Date.parse(cache.lastFailedAt);\n    if (Number.isFinite(lastFailedMs) && now - lastFailedMs < GENERIC_RETRY_MS) {\n      return true;\n    }\n  }\n\n  return false;\n}\n\nexport function clearUpdateBlockCache(configDir?: string): void {\n  writeUpdateBlockCache({}, configDir);\n}\n\nexport function recordReleaseAgeBlock(options: {\n  registryLatest: string;\n  retryAfter?: Date;\n  configDir?: string;\n}): void {\n  writeUpdateBlockCache(\n    {\n      registryLatest: options.registryLatest,\n      blockedUntil: options.retryAfter?.toISOString(),\n    },\n    options.configDir,\n  );\n}\n\nexport function recordGenericUpdateFailure(registryLatest: string, configDir?: string): void {\n  writeUpdateBlockCache(\n    {\n      registryLatest,\n      lastFailedAt: new Date().toISOString(),\n    },\n    configDir,\n  );\n}\n","import { spawnSync } from \"node:child_process\";\n\nimport { resolveCliRoot } from \"../project/resolve-cli-root\";\nimport { readCliVersion } from \"../version\";\nimport { isNewerVersion } from \"./compare-version\";\nimport { detectCliInstall } from \"./detect-cli-install\";\nimport { formatReleaseAgeBlockMessage, isReleaseAgeBlock } from \"./detect-release-age-block\";\nimport { fetchLatestCliRelease } from \"./fetch-latest-version\";\nimport {\n  computeReleaseAgeRetryAfter,\n  readPnpmMinimumReleaseAgeMinutes,\n} from \"./read-pnpm-release-age-minutes\";\nimport { runPackageManagerUpdate } from \"./run-package-manager-update\";\nimport {\n  clearUpdateBlockCache,\n  readUpdateBlockCache,\n  recordGenericUpdateFailure,\n  recordReleaseAgeBlock,\n  shouldSkipCachedUpdate,\n} from \"./update-block-cache\";\n\nfunction shouldSkipAutoUpdate(argv: string[]): boolean {\n  if (\n    process.env.KEYSTROKE_DEV ||\n    process.env.KEYSTROKE_SKIP_UPDATE ||\n    process.env.KEYSTROKE_UPDATING\n  ) {\n    return true;\n  }\n\n  if (process.env.CI === \"true\" || process.env.CI === \"1\") {\n    return true;\n  }\n\n  const args = argv.slice(2);\n  if (args.length === 0) {\n    return false;\n  }\n\n  return args.every(\n    (arg) =>\n      arg === \"-V\" ||\n      arg === \"--version\" ||\n      arg === \"-h\" ||\n      arg === \"--help\" ||\n      arg.startsWith(\"-V\"),\n  );\n}\n\nfunction reexecCli(argv: string[]): never {\n  const result = spawnSync(process.execPath, argv.slice(1), {\n    stdio: \"inherit\",\n    env: {\n      ...process.env,\n      KEYSTROKE_UPDATING: \"1\",\n    },\n  });\n\n  process.exit(result.status ?? 1);\n}\n\nfunction releaseAgeRetryAfter(\n  install: NonNullable<ReturnType<typeof detectCliInstall>>,\n  publishedAt: string | undefined,\n): Date | undefined {\n  if (install.packageManager !== \"pnpm\") {\n    return undefined;\n  }\n\n  return computeReleaseAgeRetryAfter(publishedAt, readPnpmMinimumReleaseAgeMinutes());\n}\n\nexport async function maybeAutoUpdate(argv: string[]): Promise<void> {\n  if (shouldSkipAutoUpdate(argv)) {\n    return;\n  }\n\n  const install = detectCliInstall(resolveCliRoot(import.meta.url));\n  if (!install || (install.kind === \"local\" && !install.projectRoot)) {\n    return;\n  }\n\n  const currentVersion = readCliVersion();\n  const release = await fetchLatestCliRelease();\n\n  if (!release || !isNewerVersion(release.version, currentVersion)) {\n    clearUpdateBlockCache();\n    return;\n  }\n\n  const cache = readUpdateBlockCache();\n  if (shouldSkipCachedUpdate(cache, release.version)) {\n    return;\n  }\n\n  process.stderr.write(\n    `Updating @keystrokehq/cli ${currentVersion} -> ${release.version} via ${install.packageManager}...\\n`,\n  );\n\n  const result = runPackageManagerUpdate(install);\n  const installedVersion = readCliVersion();\n\n  if (isNewerVersion(installedVersion, currentVersion)) {\n    clearUpdateBlockCache();\n    process.stderr.write(`Updated @keystrokehq/cli ${currentVersion} -> ${installedVersion}.\\n`);\n    reexecCli(argv);\n  }\n\n  if (result.ok) {\n    clearUpdateBlockCache();\n    return;\n  }\n\n  if (isReleaseAgeBlock(result.output)) {\n    const retryAfter = releaseAgeRetryAfter(install, release.publishedAt);\n    recordReleaseAgeBlock({\n      registryLatest: release.version,\n      retryAfter,\n    });\n    process.stderr.write(\n      `${formatReleaseAgeBlockMessage({\n        currentVersion,\n        availableVersion: release.version,\n        retryAfter,\n      })}\\n`,\n    );\n    return;\n  }\n\n  recordGenericUpdateFailure(release.version);\n  process.stderr.write(\"Auto-update failed; continuing with the current version.\\n\");\n}\n"],"mappings":"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"}