diff --git a/dist/index.d.ts b/dist/index.d.ts index fdc0074..90bdd07 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -263,7 +263,7 @@ declare abstract class DetSysAction { */ execute(): void; getTemporaryName(): string; - addFact(key: string, value: string | boolean): void; + addFact(key: string, value: string | boolean | number): void; getDiagnosticsUrl(): Promise; getUniqueId(): string; getCrossPhaseId(): string; @@ -319,6 +319,7 @@ declare abstract class DetSysAction { private collectBacktraces; private preflightRequireNix; private preflightNixStoreInfo; + private preflightNixVersion; private submitEvents; } diff --git a/dist/index.js b/dist/index.js index 755a3d4..cc54fe3 100644 --- a/dist/index.js +++ b/dist/index.js @@ -896,6 +896,7 @@ var FACT_OS = "$os"; var FACT_OS_VERSION = "$os_version"; var FACT_SOURCE_URL = "source_url"; var FACT_SOURCE_URL_ETAG = "source_url_etag"; +var FACT_NIX_VERSION = "nix_version"; var FACT_NIX_LOCATION = "nix_location"; var FACT_NIX_STORE_TRUST = "nix_store_trusted"; var FACT_NIX_STORE_VERSION = "nix_store_version"; @@ -1154,10 +1155,12 @@ var DetSysAction = class { return; } else { await this.preflightNixStoreInfo(); + await this.preflightNixVersion(); this.addFact(FACT_NIX_STORE_TRUST, this.nixStoreTrust); } if (this.isMain) { await this.main(); + await this.preflightNixVersion(); } else if (this.isPost) { await this.post(); } @@ -1621,6 +1624,21 @@ var DetSysAction = class { this.addFact(FACT_NIX_STORE_CHECK_ERROR, stringifyError2(e)); } } + async preflightNixVersion() { + let output = "unknown"; + try { + ({ stdout: output } = await actionsExec.getExecOutput( + "nix", + ["--version"], + { + silent: true + } + )); + output = output.trim() || "unknown"; + } catch { + } + this.addFact(FACT_NIX_VERSION, output); + } async submitEvents() { const diagnosticsUrl = await this.idsHost.getDiagnosticsUrl(); if (diagnosticsUrl === void 0) { diff --git a/dist/index.js.map b/dist/index.js.map index e4d66bd..cb0ed76 100644 --- a/dist/index.js.map +++ b/dist/index.js.map @@ -1 +1 @@ -{"version":3,"sources":["../src/linux-release-info.ts","../src/actions-core-platform.ts","../src/errors.ts","../src/backtrace.ts","../src/correlation.ts","../src/ids-host.ts","../src/inputs.ts","../src/platform.ts","../src/sourcedef.ts","../src/index.ts"],"sourcesContent":["/*!\n * linux-release-info\n * Get Linux release info (distribution name, version, arch, release, etc.)\n * from '/etc/os-release' or '/usr/lib/os-release' files and from native os\n * module. On Windows and Darwin platforms it only returns common node os module\n * info (platform, hostname, release, and arch)\n *\n * Licensed under MIT\n * Copyright (c) 2018-2020 [Samuel Carreira]\n */\n// NOTE: we depend on this directly to get around some un-fun issues with mixing CommonJS\n// and ESM in the bundle. We've modified the original logic to improve things like typing\n// and fixing ESLint issues. Originally drawn from:\n// https://github.com/samuelcarreira/linux-release-info/blob/84a91aa5442b47900da03020c590507545d3dc74/src/index.ts\nimport * as fs from \"node:fs\";\nimport * as os from \"node:os\";\nimport { promisify } from \"node:util\";\n\nconst readFileAsync = promisify(fs.readFile);\n\nexport interface LinuxReleaseInfoOptions {\n /**\n * read mode, possible values: 'async' and 'sync'\n *\n * @default 'async'\n */\n mode?: \"async\" | \"sync\";\n /**\n * custom complete file path with os info default null/none\n * if not provided the system will search on the '/etc/os-release'\n * and '/usr/lib/os-release' files\n *\n * @default null\n */\n customFile?: string | null | undefined;\n /**\n * if true, show console debug messages\n *\n * @default false\n */\n debug?: boolean;\n}\n\nconst linuxReleaseInfoOptionsDefaults: LinuxReleaseInfoOptions = {\n mode: \"async\",\n customFile: null,\n debug: false,\n};\n\n/**\n * Get OS release info from 'os-release' file and from native os module\n * on Windows or Darwin it only returns common os module info\n * (uses native fs module)\n * @returns {object} info from the current os\n */\nexport function releaseInfo(infoOptions: LinuxReleaseInfoOptions): object {\n const options = { ...linuxReleaseInfoOptionsDefaults, ...infoOptions };\n\n const searchOsReleaseFileList: string[] = osReleaseFileList(\n options.customFile,\n );\n\n if (os.type() !== \"Linux\") {\n if (options.mode === \"sync\") {\n return getOsInfo();\n } else {\n return Promise.resolve(getOsInfo());\n }\n }\n\n if (options.mode === \"sync\") {\n return readSyncOsreleaseFile(searchOsReleaseFileList, options);\n } else {\n return Promise.resolve(\n readAsyncOsReleaseFile(searchOsReleaseFileList, options),\n );\n }\n}\n\n/**\n * Format file data: convert data to object keys/values\n *\n * @param {object} sourceData Source object to be appended\n * @param {string} srcParseData Input file data to be parsed\n * @returns {object} Formated object\n */\nfunction formatFileData(sourceData: OsInfo, srcParseData: string): OsInfo {\n const lines: string[] = srcParseData.split(\"\\n\");\n\n for (const line of lines) {\n const lineData = line.split(\"=\");\n\n if (lineData.length === 2) {\n lineData[1] = lineData[1].replace(/[\"'\\r]/gi, \"\"); // remove quotes and return character\n\n Object.defineProperty(sourceData, lineData[0].toLowerCase(), {\n value: lineData[1],\n writable: true,\n enumerable: true,\n configurable: true,\n });\n }\n }\n\n return sourceData;\n}\n\n/**\n * Export a list of os-release files\n *\n * @param {string} customFile optional custom complete filepath\n * @returns {array} list of os-release files\n */\nfunction osReleaseFileList(customFile: string | null | undefined): string[] {\n const DEFAULT_OS_RELEASE_FILES = [\"/etc/os-release\", \"/usr/lib/os-release\"];\n\n if (!customFile) {\n return DEFAULT_OS_RELEASE_FILES;\n } else {\n return Array(customFile);\n }\n}\n\n/**\n * Operating system info.\n */\ntype OsInfo = {\n type: string;\n platform: string;\n hostname: string;\n arch: string;\n release: string;\n};\n\n/**\n * Get OS Basic Info\n * (uses node 'os' native module)\n *\n * @returns {OsInfo} os basic info\n */\nfunction getOsInfo(): OsInfo {\n return {\n type: os.type(),\n platform: os.platform(),\n hostname: os.hostname(),\n arch: os.arch(),\n release: os.release(),\n };\n}\n\n/* Helper functions */\n\nasync function readAsyncOsReleaseFile(\n fileList: string[],\n options: LinuxReleaseInfoOptions,\n): Promise {\n let fileData = null;\n\n for (const osReleaseFile of fileList) {\n try {\n if (options.debug) {\n /* eslint-disable no-console */\n console.log(`Trying to read '${osReleaseFile}'...`);\n }\n\n fileData = await readFileAsync(osReleaseFile, \"binary\");\n\n if (options.debug) {\n console.log(`Read data:\\n${fileData}`);\n }\n\n break;\n } catch (error) {\n if (options.debug) {\n console.error(error);\n }\n }\n }\n\n if (fileData === null) {\n throw new Error(\"Cannot read os-release file!\");\n //return getOsInfo();\n }\n\n return formatFileData(getOsInfo(), fileData);\n}\n\nfunction readSyncOsreleaseFile(\n releaseFileList: string[],\n options: LinuxReleaseInfoOptions,\n): OsInfo {\n let fileData = null;\n\n for (const osReleaseFile of releaseFileList) {\n try {\n if (options.debug) {\n console.log(`Trying to read '${osReleaseFile}'...`);\n }\n\n fileData = fs.readFileSync(osReleaseFile, \"binary\");\n\n if (options.debug) {\n console.log(`Read data:\\n${fileData}`);\n }\n\n break;\n } catch (error) {\n if (options.debug) {\n console.error(error);\n }\n }\n }\n\n if (fileData === null) {\n throw new Error(\"Cannot read os-release file!\");\n //return getOsInfo();\n }\n\n return formatFileData(getOsInfo(), fileData);\n}\n","// MIT, mostly lifted from https://github.com/actions/toolkit/blob/5a736647a123ecf8582376bdaee833fbae5b3847/packages/core/src/platform.ts\n// since it isn't in @actions/core 1.10.1 which is their current release as 2024-04-19.\n// Changes: Replaced the lsb_release call in Linux with `linux-release-info` to parse the os-release file directly.\nimport { releaseInfo } from \"./linux-release-info.js\";\nimport * as actionsCore from \"@actions/core\";\nimport * as exec from \"@actions/exec\";\nimport os from \"os\";\n\n/**\n * The name and version of the Action runner's system.\n */\ntype SystemInfo = {\n name: string;\n version: string;\n};\n\n/**\n * Get the name and version of the current Windows system.\n */\nconst getWindowsInfo = async (): Promise => {\n const { stdout: version } = await exec.getExecOutput(\n 'powershell -command \"(Get-CimInstance -ClassName Win32_OperatingSystem).Version\"',\n undefined,\n {\n silent: true,\n },\n );\n\n const { stdout: name } = await exec.getExecOutput(\n 'powershell -command \"(Get-CimInstance -ClassName Win32_OperatingSystem).Caption\"',\n undefined,\n {\n silent: true,\n },\n );\n\n return {\n name: name.trim(),\n version: version.trim(),\n };\n};\n\n/**\n * Get the name and version of the current macOS system.\n */\nconst getMacOsInfo = async (): Promise => {\n const { stdout } = await exec.getExecOutput(\"sw_vers\", undefined, {\n silent: true,\n });\n\n const version = stdout.match(/ProductVersion:\\s*(.+)/)?.[1] ?? \"\";\n const name = stdout.match(/ProductName:\\s*(.+)/)?.[1] ?? \"\";\n\n return {\n name,\n version,\n };\n};\n\n/**\n * Get the name and version of the current Linux system.\n */\nconst getLinuxInfo = async (): Promise => {\n let data: object = {};\n\n try {\n data = releaseInfo({ mode: \"sync\" });\n actionsCore.debug(`Identified release info: ${JSON.stringify(data)}`);\n } catch (e) {\n actionsCore.debug(`Error collecting release info: ${e}`);\n }\n\n return {\n name: getPropertyViaWithDefault(\n data,\n [\"id\", \"name\", \"pretty_name\", \"id_like\"],\n \"unknown\",\n ),\n version: getPropertyViaWithDefault(\n data,\n [\"version_id\", \"version\", \"version_codename\"],\n \"unknown\",\n ),\n };\n};\n\nfunction getPropertyViaWithDefault(\n data: object,\n names: Property[],\n defaultValue: T,\n): T {\n for (const name of names) {\n const ret: T = getPropertyWithDefault(data, name, defaultValue);\n\n if (ret !== defaultValue) {\n return ret;\n }\n }\n\n return defaultValue;\n}\n\nfunction getPropertyWithDefault(\n data: object,\n name: Property,\n defaultValue: T,\n): T {\n if (!data.hasOwnProperty(name)) {\n return defaultValue;\n }\n\n const value = (data as { [K in Property]: T })[name];\n\n // NB. this check won't work for object instances\n if (typeof value !== typeof defaultValue) {\n return defaultValue;\n }\n\n return value;\n}\n\n/**\n * The Action runner's platform.\n */\nexport const platform = os.platform();\n\n/**\n * The Action runner's architecture.\n */\nexport const arch = os.arch();\n\n/**\n * Whether the Action runner is a Windows system.\n */\nexport const isWindows = platform === \"win32\";\n\n/**\n * Whether the Action runner is a macOS system.\n */\nexport const isMacOS = platform === \"darwin\";\n\n/**\n * Whether the Action runner is a Linux system.\n */\nexport const isLinux = platform === \"linux\";\n\n/**\n * System-level information about the current host (platform, architecture, etc.).\n */\ntype SystemDetails = {\n name: string;\n platform: string;\n arch: string;\n version: string;\n isWindows: boolean;\n isMacOS: boolean;\n isLinux: boolean;\n};\n\n/**\n * Get system-level information about the current host (platform, architecture, etc.).\n */\nexport async function getDetails(): Promise {\n return {\n ...(await (isWindows\n ? getWindowsInfo()\n : isMacOS\n ? getMacOsInfo()\n : getLinuxInfo())),\n platform,\n arch,\n isWindows,\n isMacOS,\n isLinux,\n };\n}\n","/**\n * Coerce a value of type `unknown` into a string.\n */\nexport function stringifyError(e: unknown): string {\n if (e instanceof Error) {\n return e.message;\n } else if (typeof e === \"string\") {\n return e;\n } else {\n return JSON.stringify(e);\n }\n}\n","/**\n * @packageDocumentation\n * Collects backtraces for executables for diagnostics\n */\nimport { isLinux, isMacOS } from \"./actions-core-platform.js\";\nimport { stringifyError } from \"./errors.js\";\nimport * as actionsCore from \"@actions/core\";\nimport * as exec from \"@actions/exec\";\nimport { readFile, readdir, stat } from \"node:fs/promises\";\nimport { promisify } from \"node:util\";\nimport { gzip } from \"node:zlib\";\n\n// Give a few seconds buffer, capturing traces that happened a few seconds earlier.\nconst START_SLOP_SECONDS = 5;\n\nexport async function collectBacktraces(\n prefixes: string[],\n programNameDenyList: string[],\n startTimestampMs: number,\n): Promise> {\n if (isMacOS) {\n return await collectBacktracesMacOS(\n prefixes,\n programNameDenyList,\n startTimestampMs,\n );\n }\n if (isLinux) {\n return await collectBacktracesSystemd(\n prefixes,\n programNameDenyList,\n startTimestampMs,\n );\n }\n\n return new Map();\n}\n\nexport async function collectBacktracesMacOS(\n prefixes: string[],\n programNameDenyList: string[],\n startTimestampMs: number,\n): Promise> {\n const backtraces: Map = new Map();\n\n try {\n const { stdout: logJson } = await exec.getExecOutput(\n \"log\",\n [\n \"show\",\n \"--style\",\n \"json\",\n \"--last\",\n // Note we collect the last 1m only, because it should only take a few seconds to write the crash log.\n // Therefore, any crashes before this 1m should be long done by now.\n \"1m\",\n \"--no-info\",\n \"--predicate\",\n \"sender = 'ReportCrash'\",\n ],\n {\n silent: true,\n },\n );\n\n const sussyArray: unknown = JSON.parse(logJson);\n if (!Array.isArray(sussyArray)) {\n throw new Error(`Log json isn't an array: ${logJson}`);\n }\n\n if (sussyArray.length > 0) {\n actionsCore.info(`Collecting crash data...`);\n const delay = async (ms: number): Promise =>\n new Promise((resolve) => setTimeout(resolve, ms));\n await delay(5000);\n }\n } catch {\n actionsCore.debug(\n \"Failed to check logs for in-progress crash dumps; now proceeding with the assumption that all crash dumps completed.\",\n );\n }\n\n const dirs = [\n [\"system\", \"/Library/Logs/DiagnosticReports/\"],\n [\"user\", `${process.env[\"HOME\"]}/Library/Logs/DiagnosticReports/`],\n ];\n\n for (const [source, dir] of dirs) {\n const fileNames = (await readdir(dir))\n .filter((fileName) => {\n return prefixes.some((prefix) => fileName.startsWith(prefix));\n })\n .filter((fileName) => {\n return !programNameDenyList.some((programName) =>\n fileName.startsWith(programName),\n );\n })\n .filter((fileName) => {\n // macOS creates .diag files periodically, which are called \"microstackshots\".\n // We don't necessarily want those, and they're definitely not crashes.\n // See: https://patents.google.com/patent/US20140237219A1/en\n return !fileName.endsWith(\".diag\");\n });\n\n const doGzip = promisify(gzip);\n for (const fileName of fileNames) {\n try {\n if ((await stat(`${dir}/${fileName}`)).ctimeMs >= startTimestampMs) {\n const logText = await readFile(`${dir}/${fileName}`);\n const buf = await doGzip(logText);\n backtraces.set(\n `backtrace_value_${source}_${fileName}`,\n buf.toString(\"base64\"),\n );\n }\n } catch (innerError: unknown) {\n backtraces.set(\n `backtrace_failure_${source}_${fileName}`,\n stringifyError(innerError),\n );\n }\n }\n }\n\n return backtraces;\n}\n\ntype SystemdCoreDumpInfo = {\n exe: string;\n pid: number;\n};\n\nexport async function collectBacktracesSystemd(\n prefixes: string[],\n programNameDenyList: string[],\n startTimestampMs: number,\n): Promise> {\n const sinceSeconds =\n Math.ceil((Date.now() - startTimestampMs) / 1000) + START_SLOP_SECONDS;\n const backtraces: Map = new Map();\n\n const coredumps: SystemdCoreDumpInfo[] = [];\n\n try {\n const { stdout: coredumpjson } = await exec.getExecOutput(\n \"coredumpctl\",\n [\"--json=pretty\", \"list\", \"--since\", `${sinceSeconds} seconds ago`],\n {\n silent: true,\n },\n );\n\n const sussyArray: unknown = JSON.parse(coredumpjson);\n if (!Array.isArray(sussyArray)) {\n throw new Error(`Coredump isn't an array: ${coredumpjson}`);\n }\n\n for (const sussyObject of sussyArray) {\n const keys = Object.keys(sussyObject);\n\n if (keys.includes(\"exe\") && keys.includes(\"pid\")) {\n if (\n typeof sussyObject.exe == \"string\" &&\n typeof sussyObject.pid == \"number\"\n ) {\n const execParts = sussyObject.exe.split(\"/\");\n const binaryName = execParts[execParts.length - 1];\n\n if (\n prefixes.some((prefix) => binaryName.startsWith(prefix)) &&\n !programNameDenyList.includes(binaryName)\n ) {\n coredumps.push({\n exe: sussyObject.exe,\n pid: sussyObject.pid,\n });\n }\n } else {\n actionsCore.debug(\n `Mysterious coredump entry missing exe string and/or pid number: ${JSON.stringify(sussyObject)}`,\n );\n }\n } else {\n actionsCore.debug(\n `Mysterious coredump entry missing exe value and/or pid value: ${JSON.stringify(sussyObject)}`,\n );\n }\n }\n } catch (innerError: unknown) {\n actionsCore.debug(\n `Cannot collect backtraces: ${stringifyError(innerError)}`,\n );\n\n return backtraces;\n }\n\n const doGzip = promisify(gzip);\n for (const coredump of coredumps) {\n try {\n const { stdout: logText } = await exec.getExecOutput(\n \"coredumpctl\",\n [\"info\", `${coredump.pid}`],\n {\n silent: true,\n },\n );\n\n const buf = await doGzip(logText);\n backtraces.set(`backtrace_value_${coredump.pid}`, buf.toString(\"base64\"));\n } catch (innerError: unknown) {\n backtraces.set(\n `backtrace_failure_${coredump.pid}`,\n stringifyError(innerError),\n );\n }\n }\n\n return backtraces;\n}\n","import * as actionsCore from \"@actions/core\";\nimport { createHash, randomUUID } from \"node:crypto\";\n\nconst OPTIONAL_VARIABLES = [\"INVOCATION_ID\"];\n\n/* eslint-disable camelcase */\n/**\n * JSON sent to server.\n */\nexport type AnonymizedCorrelationHashes = {\n $anon_distinct_id: string;\n $groups: Record;\n $session_id?: string;\n correlation_source: string;\n github_repository_hash?: string;\n github_workflow_hash?: string;\n github_workflow_job_hash?: string;\n github_workflow_run_differentiator_hash?: string;\n github_workflow_run_hash?: string;\n is_ci: boolean;\n};\n\nexport function identify(): AnonymizedCorrelationHashes {\n const repository = hashEnvironmentVariables(\"GHR\", [\n \"GITHUB_SERVER_URL\",\n \"GITHUB_REPOSITORY_OWNER\",\n \"GITHUB_REPOSITORY_OWNER_ID\",\n \"GITHUB_REPOSITORY\",\n \"GITHUB_REPOSITORY_ID\",\n ]);\n\n const run_differentiator = hashEnvironmentVariables(\"GHWJA\", [\n \"GITHUB_SERVER_URL\",\n \"GITHUB_REPOSITORY_OWNER\",\n \"GITHUB_REPOSITORY_OWNER_ID\",\n \"GITHUB_REPOSITORY\",\n \"GITHUB_REPOSITORY_ID\",\n \"GITHUB_WORKFLOW\",\n \"GITHUB_JOB\",\n \"GITHUB_RUN_ID\",\n \"GITHUB_RUN_NUMBER\",\n \"GITHUB_RUN_ATTEMPT\",\n \"INVOCATION_ID\",\n ]);\n\n const ident: AnonymizedCorrelationHashes = {\n $anon_distinct_id: process.env[\"RUNNER_TRACKING_ID\"] || randomUUID(),\n\n correlation_source: \"github-actions\",\n\n github_repository_hash: repository,\n github_workflow_hash: hashEnvironmentVariables(\"GHW\", [\n \"GITHUB_SERVER_URL\",\n \"GITHUB_REPOSITORY_OWNER\",\n \"GITHUB_REPOSITORY_OWNER_ID\",\n \"GITHUB_REPOSITORY\",\n \"GITHUB_REPOSITORY_ID\",\n \"GITHUB_WORKFLOW\",\n ]),\n github_workflow_job_hash: hashEnvironmentVariables(\"GHWJ\", [\n \"GITHUB_SERVER_URL\",\n \"GITHUB_REPOSITORY_OWNER\",\n \"GITHUB_REPOSITORY_OWNER_ID\",\n \"GITHUB_REPOSITORY\",\n \"GITHUB_REPOSITORY_ID\",\n \"GITHUB_WORKFLOW\",\n \"GITHUB_JOB\",\n ]),\n github_workflow_run_hash: hashEnvironmentVariables(\"GHWJR\", [\n \"GITHUB_SERVER_URL\",\n \"GITHUB_REPOSITORY_OWNER\",\n \"GITHUB_REPOSITORY_OWNER_ID\",\n \"GITHUB_REPOSITORY\",\n \"GITHUB_REPOSITORY_ID\",\n \"GITHUB_WORKFLOW\",\n \"GITHUB_JOB\",\n \"GITHUB_RUN_ID\",\n ]),\n github_workflow_run_differentiator_hash: run_differentiator,\n $session_id: run_differentiator,\n $groups: {\n github_repository: repository,\n github_organization: hashEnvironmentVariables(\"GHO\", [\n \"GITHUB_SERVER_URL\",\n \"GITHUB_REPOSITORY_OWNER\",\n \"GITHUB_REPOSITORY_OWNER_ID\",\n ]),\n },\n is_ci: true,\n };\n\n actionsCore.debug(\"Correlation data:\");\n actionsCore.debug(JSON.stringify(ident, null, 2));\n\n return ident;\n}\n\nfunction hashEnvironmentVariables(\n prefix: string,\n variables: string[],\n): undefined | string {\n const hash = createHash(\"sha256\");\n\n for (const varName of variables) {\n let value = process.env[varName];\n\n if (value === undefined) {\n if (OPTIONAL_VARIABLES.includes(varName)) {\n actionsCore.debug(\n `Optional environment variable not set: ${varName} -- substituting with the variable name`,\n );\n value = varName;\n } else {\n actionsCore.debug(\n `Environment variable not set: ${varName} -- can't generate the requested identity`,\n );\n return undefined;\n }\n }\n\n hash.update(value);\n hash.update(\"\\0\");\n }\n\n return `${prefix}-${hash.digest(\"hex\")}`;\n}\n","/**\n * @packageDocumentation\n * Identifies and discovers backend servers for install.determinate.systems\n */\nimport { stringifyError } from \"./errors.js\";\nimport * as actionsCore from \"@actions/core\";\nimport { Got, got } from \"got\";\nimport type { SrvRecord } from \"node:dns\";\nimport { resolveSrv } from \"node:dns/promises\";\n\nconst DEFAULT_LOOKUP = \"_detsys_ids._tcp.install.determinate.systems.\";\nconst ALLOWED_SUFFIXES = [\n \".install.determinate.systems\",\n \".install.detsys.dev\",\n];\n\nconst DEFAULT_IDS_HOST = \"https://install.determinate.systems\";\nconst LOOKUP = process.env[\"IDS_LOOKUP\"] ?? DEFAULT_LOOKUP;\n\nconst DEFAULT_TIMEOUT = 10_000; // 10 seconds in ms\n\n/**\n * Host information for install.determinate.systems.\n */\nexport class IdsHost {\n private idsProjectName: string;\n private diagnosticsSuffix?: string;\n private runtimeDiagnosticsUrl?: string;\n private prioritizedURLs?: URL[];\n private client?: Got;\n\n constructor(\n idsProjectName: string,\n diagnosticsSuffix: string | undefined,\n runtimeDiagnosticsUrl: string | undefined,\n ) {\n this.idsProjectName = idsProjectName;\n this.diagnosticsSuffix = diagnosticsSuffix;\n this.runtimeDiagnosticsUrl = runtimeDiagnosticsUrl;\n this.client = undefined;\n }\n\n async getGot(\n recordFailoverCallback?: (\n incitingError: unknown,\n prevUrl: URL,\n nextUrl: URL,\n ) => void,\n ): Promise {\n if (this.client === undefined) {\n this.client = got.extend({\n timeout: {\n request: DEFAULT_TIMEOUT,\n },\n\n retry: {\n limit: Math.max((await this.getUrlsByPreference()).length, 3),\n methods: [\"GET\", \"HEAD\"],\n },\n\n hooks: {\n beforeRetry: [\n async (error, retryCount) => {\n const prevUrl = await this.getRootUrl();\n this.markCurrentHostBroken();\n const nextUrl = await this.getRootUrl();\n\n if (recordFailoverCallback !== undefined) {\n recordFailoverCallback(error, prevUrl, nextUrl);\n }\n\n actionsCore.info(\n `Retrying after error ${error.code}, retry #: ${retryCount}`,\n );\n },\n ],\n\n beforeRequest: [\n async (options) => {\n // The getter always returns a URL, even though the setter accepts a string\n const currentUrl: URL = options.url as URL;\n\n if (this.isUrlSubjectToDynamicUrls(currentUrl)) {\n const newUrl: URL = new URL(currentUrl);\n\n const url: URL = await this.getRootUrl();\n newUrl.host = url.host;\n\n options.url = newUrl;\n actionsCore.debug(`Transmuted ${currentUrl} into ${newUrl}`);\n } else {\n actionsCore.debug(`No transmutations on ${currentUrl}`);\n }\n },\n ],\n },\n });\n }\n\n return this.client;\n }\n\n markCurrentHostBroken(): void {\n this.prioritizedURLs?.shift();\n }\n\n setPrioritizedUrls(urls: URL[]): void {\n this.prioritizedURLs = urls;\n }\n\n isUrlSubjectToDynamicUrls(url: URL): boolean {\n if (url.origin === DEFAULT_IDS_HOST) {\n return true;\n }\n\n for (const suffix of ALLOWED_SUFFIXES) {\n if (url.host.endsWith(suffix)) {\n return true;\n }\n }\n\n return false;\n }\n\n async getDynamicRootUrl(): Promise {\n const idsHost = process.env[\"IDS_HOST\"];\n if (idsHost !== undefined) {\n try {\n return new URL(idsHost);\n } catch (err: unknown) {\n actionsCore.error(\n `IDS_HOST environment variable is not a valid URL. Ignoring. ${stringifyError(err)}`,\n );\n }\n }\n\n let url: URL | undefined = undefined;\n try {\n const urls = await this.getUrlsByPreference();\n url = urls[0];\n } catch (err: unknown) {\n actionsCore.error(\n `Error collecting IDS URLs by preference: ${stringifyError(err)}`,\n );\n }\n\n if (url === undefined) {\n return undefined;\n } else {\n // This is a load-bearing `new URL(url)` so that callers can't mutate\n // getRootUrl's return value.\n return new URL(url);\n }\n }\n\n async getRootUrl(): Promise {\n const url = await this.getDynamicRootUrl();\n\n if (url === undefined) {\n return new URL(DEFAULT_IDS_HOST);\n }\n\n return url;\n }\n\n async getDiagnosticsUrl(): Promise {\n if (this.runtimeDiagnosticsUrl === \"\") {\n // User specifically set the diagnostics URL to an empty string\n // so disable diagnostics\n return undefined;\n }\n\n if (\n this.runtimeDiagnosticsUrl !== \"-\" &&\n this.runtimeDiagnosticsUrl !== undefined\n ) {\n try {\n // Caller specified a specific diagnostics URL\n return new URL(this.runtimeDiagnosticsUrl);\n } catch (err: unknown) {\n actionsCore.info(\n `User-provided diagnostic endpoint ignored: not a valid URL: ${stringifyError(err)}`,\n );\n }\n }\n\n try {\n const diagnosticUrl = await this.getRootUrl();\n diagnosticUrl.pathname += \"events/batch\";\n return diagnosticUrl;\n } catch (err: unknown) {\n actionsCore.info(\n `Generated diagnostic endpoint ignored, and diagnostics are disabled: not a valid URL: ${stringifyError(err)}`,\n );\n return undefined;\n }\n }\n\n private async getUrlsByPreference(): Promise {\n if (this.prioritizedURLs === undefined) {\n this.prioritizedURLs = orderRecordsByPriorityWeight(\n await discoverServiceRecords(),\n ).flatMap((record) => recordToUrl(record) || []);\n }\n\n return this.prioritizedURLs;\n }\n}\n\nexport function recordToUrl(record: SrvRecord): URL | undefined {\n const urlStr = `https://${record.name}:${record.port}`;\n try {\n return new URL(urlStr);\n } catch (err: unknown) {\n actionsCore.debug(\n `Record ${JSON.stringify(record)} produced an invalid URL: ${urlStr} (${err})`,\n );\n return undefined;\n }\n}\n\nasync function discoverServiceRecords(): Promise {\n return await discoverServicesStub(resolveSrv(LOOKUP), 1_000);\n}\n\nexport async function discoverServicesStub(\n lookup: Promise,\n timeout: number,\n): Promise {\n const defaultFallback: Promise = new Promise(\n (resolve, _reject) => {\n setTimeout(resolve, timeout, []);\n },\n );\n\n let records: SrvRecord[];\n\n try {\n records = await Promise.race([lookup, defaultFallback]);\n } catch (reason: unknown) {\n actionsCore.debug(`Error resolving SRV records: ${stringifyError(reason)}`);\n records = [];\n }\n\n const acceptableRecords = records.filter((record: SrvRecord): boolean => {\n for (const suffix of ALLOWED_SUFFIXES) {\n if (record.name.endsWith(suffix)) {\n return true;\n }\n }\n\n actionsCore.debug(\n `Unacceptable domain due to an invalid suffix: ${record.name}`,\n );\n\n return false;\n });\n\n if (acceptableRecords.length === 0) {\n actionsCore.debug(`No records found for ${LOOKUP}`);\n } else {\n actionsCore.debug(\n `Resolved ${LOOKUP} to ${JSON.stringify(acceptableRecords)}`,\n );\n }\n\n return acceptableRecords;\n}\n\nexport function orderRecordsByPriorityWeight(\n records: SrvRecord[],\n): SrvRecord[] {\n const byPriorityWeight: Map = new Map();\n for (const record of records) {\n const existing = byPriorityWeight.get(record.priority);\n if (existing) {\n existing.push(record);\n } else {\n byPriorityWeight.set(record.priority, [record]);\n }\n }\n\n const prioritizedRecords: SrvRecord[] = [];\n const keys: number[] = Array.from(byPriorityWeight.keys()).sort(\n (a, b) => a - b,\n );\n\n for (const priority of keys) {\n const recordsByPrio = byPriorityWeight.get(priority);\n if (recordsByPrio === undefined) {\n continue;\n }\n\n prioritizedRecords.push(...weightedRandom(recordsByPrio));\n }\n\n return prioritizedRecords;\n}\n\nexport function weightedRandom(records: SrvRecord[]): SrvRecord[] {\n // Duplicate records so we don't accidentally change our caller's data\n const scratchRecords: SrvRecord[] = records.slice();\n const result: SrvRecord[] = [];\n\n while (scratchRecords.length > 0) {\n const weights: number[] = [];\n\n {\n for (let i = 0; i < scratchRecords.length; i++) {\n weights.push(\n scratchRecords[i].weight + (i > 0 ? scratchRecords[i - 1].weight : 0),\n );\n }\n }\n\n const point = Math.random() * weights[weights.length - 1];\n\n for (\n let selectedIndex = 0;\n selectedIndex < weights.length;\n selectedIndex++\n ) {\n if (weights[selectedIndex] > point) {\n // Remove our selected record and add it to the result\n result.push(scratchRecords.splice(selectedIndex, 1)[0]);\n break;\n }\n }\n }\n\n return result;\n}\n","/**\n * @packageDocumentation\n * Helpers for getting values from an Action's configuration.\n */\nimport * as actionsCore from \"@actions/core\";\n\n/**\n * Get a Boolean input from the Action's configuration by name.\n */\nconst getBool = (name: string): boolean => {\n return actionsCore.getBooleanInput(name);\n};\n\n/**\n * Get a Boolean input from the Action's configuration by name, or undefined if it is unset.\n */\nconst getBoolOrUndefined = (name: string): boolean | undefined => {\n if (getStringOrUndefined(name) === undefined) {\n return undefined;\n }\n\n return actionsCore.getBooleanInput(name);\n};\n\n/**\n * The character used to separate values in the input string.\n */\nexport type Separator = \"space\" | \"comma\";\n\n/**\n * Convert a comma-separated string input into an array of strings. If `comma` is selected,\n * all whitespace is removed from the string before converting to an array.\n */\nconst getArrayOfStrings = (name: string, separator: Separator): string[] => {\n const original = getString(name);\n return handleString(original, separator);\n};\n\n/**\n * Convert a string input into an array of strings or `null` if no value is set.\n */\nconst getArrayOfStringsOrNull = (\n name: string,\n separator: Separator,\n): string[] | null => {\n const original = getStringOrNull(name);\n if (original === null) {\n return null;\n } else {\n return handleString(original, separator);\n }\n};\n\n// Split out this function for use in testing\nexport const handleString = (input: string, separator: Separator): string[] => {\n const sepChar = separator === \"comma\" ? \",\" : /\\s+/;\n const trimmed = input.trim(); // Remove whitespace at the beginning and end\n if (trimmed === \"\") {\n return [];\n }\n\n return trimmed.split(sepChar).map((s: string) => s.trim());\n};\n\n/**\n * Get a multi-line string input from the Action's configuration by name or return `null` if not set.\n */\nconst getMultilineStringOrNull = (name: string): string[] | null => {\n const value = actionsCore.getMultilineInput(name);\n if (value.length === 0) {\n return null;\n } else {\n return value;\n }\n};\n\n/**\n * Get a number input from the Action's configuration by name or return `null` if not set.\n */\nconst getNumberOrNull = (name: string): number | null => {\n const value = actionsCore.getInput(name);\n if (value === \"\") {\n return null;\n } else {\n return Number(value);\n }\n};\n\n/**\n * Get a string input from the Action's configuration.\n */\nconst getString = (name: string): string => {\n return actionsCore.getInput(name);\n};\n\n/**\n * Get a string input from the Action's configuration by name or return `null` if not set.\n */\nconst getStringOrNull = (name: string): string | null => {\n const value = actionsCore.getInput(name);\n if (value === \"\") {\n return null;\n } else {\n return value;\n }\n};\n\n/**\n * Get a string input from the Action's configuration by name or return `undefined` if not set.\n */\nconst getStringOrUndefined = (name: string): string | undefined => {\n const value = actionsCore.getInput(name);\n if (value === \"\") {\n return undefined;\n } else {\n return value;\n }\n};\n\nexport {\n getBool,\n getBoolOrUndefined,\n getArrayOfStrings,\n getArrayOfStringsOrNull,\n getMultilineStringOrNull,\n getNumberOrNull,\n getString,\n getStringOrNull,\n getStringOrUndefined,\n};\n","/**\n * @packageDocumentation\n * Helpers for determining system attributes of the current runner.\n */\nimport * as actionsCore from \"@actions/core\";\n\n/**\n * Get the current architecture plus OS. Examples include `X64-Linux` and `ARM64-macOS`.\n */\nexport function getArchOs(): string {\n const envArch = process.env.RUNNER_ARCH;\n const envOs = process.env.RUNNER_OS;\n\n if (envArch && envOs) {\n return `${envArch}-${envOs}`;\n } else {\n actionsCore.error(\n `Can't identify the platform: RUNNER_ARCH or RUNNER_OS undefined (${envArch}-${envOs})`,\n );\n throw new Error(\"RUNNER_ARCH and/or RUNNER_OS is not defined\");\n }\n}\n\n/**\n * Get the current Nix system. Examples include `x86_64-linux` and `aarch64-darwin`.\n */\nexport function getNixPlatform(archOs: string): string {\n const archOsMap: Map = new Map([\n [\"X64-macOS\", \"x86_64-darwin\"],\n [\"ARM64-macOS\", \"aarch64-darwin\"],\n [\"X64-Linux\", \"x86_64-linux\"],\n [\"ARM64-Linux\", \"aarch64-linux\"],\n ]);\n\n const mappedTo = archOsMap.get(archOs);\n if (mappedTo) {\n return mappedTo;\n } else {\n actionsCore.error(\n `ArchOs (${archOs}) doesn't map to a supported Nix platform.`,\n );\n throw new Error(\n `Cannot convert ArchOs (${archOs}) to a supported Nix platform.`,\n );\n }\n}\n","import { getStringOrUndefined } from \"./inputs.js\";\nimport * as actionsCore from \"@actions/core\";\n\nexport type SourceDef = {\n path?: string;\n url?: string;\n tag?: string;\n pr?: string;\n branch?: string;\n revision?: string;\n};\n\nexport function constructSourceParameters(legacyPrefix?: string): SourceDef {\n return {\n path: noisilyGetInput(\"path\", legacyPrefix),\n url: noisilyGetInput(\"url\", legacyPrefix),\n tag: noisilyGetInput(\"tag\", legacyPrefix),\n pr: noisilyGetInput(\"pr\", legacyPrefix),\n branch: noisilyGetInput(\"branch\", legacyPrefix),\n revision: noisilyGetInput(\"revision\", legacyPrefix),\n };\n}\n\nfunction noisilyGetInput(\n suffix: string,\n legacyPrefix: string | undefined,\n): string | undefined {\n const preferredInput = getStringOrUndefined(`source-${suffix}`);\n\n if (!legacyPrefix) {\n return preferredInput;\n }\n\n // Remaining is for handling cases where the legacy prefix\n // should be examined.\n const legacyInput = getStringOrUndefined(`${legacyPrefix}-${suffix}`);\n\n if (preferredInput && legacyInput) {\n actionsCore.warning(\n `The supported option source-${suffix} and the legacy option ${legacyPrefix}-${suffix} are both set. Preferring source-${suffix}. Please stop setting ${legacyPrefix}-${suffix}.`,\n );\n return preferredInput;\n } else if (legacyInput) {\n actionsCore.warning(\n `The legacy option ${legacyPrefix}-${suffix} is set. Please migrate to source-${suffix}.`,\n );\n return legacyInput;\n } else {\n return preferredInput;\n }\n}\n","/**\n * @packageDocumentation\n * Determinate Systems' TypeScript library for creating GitHub Actions logic.\n */\n// import { version as pkgVersion } from \"../package.json\";\nimport * as ghActionsCorePlatform from \"./actions-core-platform.js\";\nimport { collectBacktraces } from \"./backtrace.js\";\nimport { CheckIn, Feature } from \"./check-in.js\";\nimport * as correlation from \"./correlation.js\";\nimport { IdsHost } from \"./ids-host.js\";\nimport { getBool, getBoolOrUndefined, getStringOrNull } from \"./inputs.js\";\nimport * as platform from \"./platform.js\";\nimport { SourceDef, constructSourceParameters } from \"./sourcedef.js\";\nimport * as actionsCache from \"@actions/cache\";\nimport * as actionsCore from \"@actions/core\";\nimport * as actionsExec from \"@actions/exec\";\nimport { Got, Request, TimeoutError } from \"got\";\nimport { exec } from \"node:child_process\";\nimport { UUID, randomUUID } from \"node:crypto\";\nimport {\n PathLike,\n WriteStream,\n createWriteStream,\n readFileSync,\n} from \"node:fs\";\nimport fs, { chmod, copyFile, mkdir } from \"node:fs/promises\";\nimport * as os from \"node:os\";\nimport { tmpdir } from \"node:os\";\nimport * as path from \"node:path\";\nimport { promisify } from \"node:util\";\nimport { gzip } from \"node:zlib\";\n\nconst pkgVersion = \"1.0\";\n\nconst EVENT_BACKTRACES = \"backtrace\";\nconst EVENT_EXCEPTION = \"exception\";\nconst EVENT_ARTIFACT_CACHE_HIT = \"artifact_cache_hit\";\nconst EVENT_ARTIFACT_CACHE_MISS = \"artifact_cache_miss\";\nconst EVENT_ARTIFACT_CACHE_PERSIST = \"artifact_cache_persist\";\nconst EVENT_PREFLIGHT_REQUIRE_NIX_DENIED = \"preflight-require-nix-denied\";\nconst EVENT_STORE_IDENTITY_FAILED = \"store_identity_failed\";\n\nconst FACT_ARTIFACT_FETCHED_FROM_CACHE = \"artifact_fetched_from_cache\";\nconst FACT_ENDED_WITH_EXCEPTION = \"ended_with_exception\";\nconst FACT_FINAL_EXCEPTION = \"final_exception\";\nconst FACT_OS = \"$os\";\nconst FACT_OS_VERSION = \"$os_version\";\nconst FACT_SOURCE_URL = \"source_url\";\nconst FACT_SOURCE_URL_ETAG = \"source_url_etag\";\n\nconst FACT_NIX_LOCATION = \"nix_location\";\nconst FACT_NIX_STORE_TRUST = \"nix_store_trusted\";\nconst FACT_NIX_STORE_VERSION = \"nix_store_version\";\nconst FACT_NIX_STORE_CHECK_METHOD = \"nix_store_check_method\";\nconst FACT_NIX_STORE_CHECK_ERROR = \"nix_store_check_error\";\n\nconst STATE_KEY_EXECUTION_PHASE = \"detsys_action_execution_phase\";\nconst STATE_KEY_NIX_NOT_FOUND = \"detsys_action_nix_not_found\";\nconst STATE_NOT_FOUND = \"not-found\";\nconst STATE_KEY_CROSS_PHASE_ID = \"detsys_cross_phase_id\";\nconst STATE_BACKTRACE_START_TIMESTAMP = \"detsys_backtrace_start_timestamp\";\n\nconst DIAGNOSTIC_ENDPOINT_TIMEOUT_MS = 10_000; // 10 seconds in ms\nconst CHECK_IN_ENDPOINT_TIMEOUT_MS = 1_000; // 1 second in ms\nconst PROGRAM_NAME_CRASH_DENY_LIST = [\n \"nix-expr-tests\",\n \"nix-store-tests\",\n \"nix-util-tests\",\n];\n\n/**\n * An enum for describing different \"fetch suffixes\" for i.d.s.\n *\n * - `nix-style` means that system names like `x86_64-linux` and `aarch64-darwin` are used\n * - `gh-env-style` means that names like `X64-Linux` and `ARM64-macOS` are used\n * - `universal` means that the suffix is the static `universal` (for non-system-specific things)\n */\nexport type FetchSuffixStyle = \"nix-style\" | \"gh-env-style\" | \"universal\";\n\n/**\n * GitHub Actions has two possible execution phases: `main` and `post`.\n */\nexport type ExecutionPhase = \"main\" | \"post\";\n\n/**\n * How to handle whether Nix is currently installed on the runner.\n *\n * - `fail` means that the workflow fails if Nix isn't installed\n * - `warn` means that a warning is logged if Nix isn't installed\n * - `ignore` means that Nix will not be checked\n */\nexport type NixRequirementHandling = \"fail\" | \"warn\" | \"ignore\";\n\n/**\n * Whether the Nix store on the runner is trusted.\n *\n * - `trusted` means yes\n * - `untrusted` means no\n * - `unknown` means that the status couldn't be determined\n *\n * This is determined via the output of `nix store info --json`.\n */\nexport type NixStoreTrust = \"trusted\" | \"untrusted\" | \"unknown\";\n\nexport type ActionOptions = {\n // Name of the project generally, and the name of the binary on disk.\n name: string;\n\n // Defaults to `name`, Corresponds to the ProjectHost entry on i.d.s.\n idsProjectName?: string;\n\n // Defaults to `action:`\n eventPrefix?: string;\n\n // The \"architecture\" URL component expected by I.D.S. for the ProjectHost.\n fetchStyle: FetchSuffixStyle;\n\n // IdsToolbox assumes the GitHub Action exposes source overrides, like branch/pr/etc. to be named `source-*`.\n // This prefix adds a fallback name, prefixed by `${legacySourcePrefix}-`.\n // Users who configure legacySourcePrefix will get warnings asking them to change to `source-*`.\n legacySourcePrefix?: string;\n\n // Check if Nix is installed before running this action.\n // If Nix isn't installed, this action will not fail, and will instead do nothing.\n // The action will emit a user-visible warning instructing them to install Nix.\n requireNix: NixRequirementHandling;\n\n // The URL suffix to send diagnostics events to.\n //\n // The final URL is constructed via IDS_HOST/idsProjectName/diagnosticsSuffix.\n //\n // Default: `diagnostics`.\n diagnosticsSuffix?: string;\n\n // Collect backtraces from segfaults and other failures from binaries that start with these names.\n //\n // Default: `[ \"nix\", \"determinate-nixd\", ActionOptions.name ]`.\n binaryNamePrefixes?: string[];\n\n // Do NOT collect backtraces from segfaults and other failures from binaries with exact these names.\n //\n // Default: `[ \"nix-expr-tests\" ]`.\n binaryNamesDenyList?: string[];\n};\n\n/**\n * A confident version of Options, where defaults have been resolved into final values.\n */\nexport type ConfidentActionOptions = {\n name: string;\n idsProjectName: string;\n eventPrefix: string;\n fetchStyle: FetchSuffixStyle;\n legacySourcePrefix?: string;\n requireNix: NixRequirementHandling;\n providedDiagnosticsUrl?: URL;\n binaryNamePrefixes: string[];\n binaryNamesDenyList: string[];\n};\n\n/**\n * An event to send to the diagnostic endpoint of i.d.s.\n */\nexport type DiagnosticEvent = {\n // Note: putting a Map in here won't serialize to json properly.\n // It'll just be {} on serialization.\n name: string;\n distinct_id?: string;\n uuid: UUID;\n timestamp: Date;\n\n properties: Record;\n};\n\nconst determinateStateDir = \"/var/lib/determinate\";\nconst determinateIdentityFile = path.join(determinateStateDir, \"identity.json\");\n\nconst isRoot = os.userInfo().uid === 0;\n\n/** Create the Determinate state directory by escalating via sudo */\nasync function sudoEnsureDeterminateStateDir(): Promise {\n const code = await actionsExec.exec(\"sudo\", [\n \"mkdir\",\n \"-p\",\n determinateStateDir,\n ]);\n\n if (code !== 0) {\n throw new Error(`sudo mkdir -p exit: ${code}`);\n }\n}\n\n/** Ensures the Determinate state directory exists, escalating if necessary */\nasync function ensureDeterminateStateDir(): Promise {\n if (isRoot) {\n await mkdir(determinateStateDir, { recursive: true });\n } else {\n return sudoEnsureDeterminateStateDir();\n }\n}\n\n/** Writes correlation hashes to the Determinate state directory by writing to a `sudo tee` pipe */\nasync function sudoWriteCorrelationHashes(hashes: string): Promise {\n const buffer = Buffer.from(hashes);\n\n const code = await actionsExec.exec(\n \"sudo\",\n [\"tee\", determinateIdentityFile],\n {\n input: buffer,\n\n // Ignore output from tee\n outStream: createWriteStream(\"/dev/null\"),\n },\n );\n\n if (code !== 0) {\n throw new Error(`sudo tee exit: ${code}`);\n }\n}\n\n/** Writes correlation hashes to the Determinate state directory, escalating if necessary */\nasync function writeCorrelationHashes(hashes: string): Promise {\n await ensureDeterminateStateDir();\n\n if (isRoot) {\n await fs.writeFile(determinateIdentityFile, hashes, \"utf-8\");\n } else {\n return sudoWriteCorrelationHashes(hashes);\n }\n}\n\nexport abstract class DetSysAction {\n nixStoreTrust: NixStoreTrust;\n strictMode: boolean;\n\n private actionOptions: ConfidentActionOptions;\n private exceptionAttachments: Map;\n private archOs: string;\n private executionPhase: ExecutionPhase;\n private nixSystem: string;\n private architectureFetchSuffix: string;\n private sourceParameters: SourceDef;\n private facts: Record;\n private events: DiagnosticEvent[];\n private identity: correlation.AnonymizedCorrelationHashes;\n private idsHost: IdsHost;\n private features: { [k: string]: Feature };\n private featureEventMetadata: { [k: string]: string | boolean };\n\n private determineExecutionPhase(): ExecutionPhase {\n const currentPhase = actionsCore.getState(STATE_KEY_EXECUTION_PHASE);\n if (currentPhase === \"\") {\n actionsCore.saveState(STATE_KEY_EXECUTION_PHASE, \"post\");\n return \"main\";\n } else {\n return \"post\";\n }\n }\n\n constructor(actionOptions: ActionOptions) {\n this.actionOptions = makeOptionsConfident(actionOptions);\n this.idsHost = new IdsHost(\n this.actionOptions.idsProjectName,\n actionOptions.diagnosticsSuffix,\n // Note: we don't use actionsCore.getInput('diagnostic-endpoint') on purpose:\n // getInput silently converts absent data to an empty string.\n process.env[\"INPUT_DIAGNOSTIC-ENDPOINT\"],\n );\n this.exceptionAttachments = new Map();\n this.nixStoreTrust = \"unknown\";\n this.strictMode = getBool(\"_internal-strict-mode\");\n\n if (\n getBoolOrUndefined(\n \"_internal-obliterate-actions-id-token-request-variables\",\n ) === true\n ) {\n process.env[\"ACTIONS_ID_TOKEN_REQUEST_URL\"] = undefined;\n process.env[\"ACTIONS_ID_TOKEN_REQUEST_TOKEN\"] = undefined;\n }\n\n this.features = {};\n this.featureEventMetadata = {};\n this.events = [];\n\n this.getCrossPhaseId();\n this.collectBacktraceSetup();\n\n // JSON sent to server\n /* eslint-disable camelcase */\n this.facts = {\n $lib: \"idslib\",\n $lib_version: pkgVersion,\n project: this.actionOptions.name,\n ids_project: this.actionOptions.idsProjectName,\n };\n\n const params = [\n [\"github_action_ref\", \"GITHUB_ACTION_REF\"],\n [\"github_action_repository\", \"GITHUB_ACTION_REPOSITORY\"],\n [\"github_event_name\", \"GITHUB_EVENT_NAME\"],\n [\"$os\", \"RUNNER_OS\"],\n [\"arch\", \"RUNNER_ARCH\"],\n ];\n for (const [target, env] of params) {\n const value = process.env[env];\n if (value) {\n this.facts[target] = value;\n }\n }\n\n this.identity = correlation.identify();\n this.archOs = platform.getArchOs();\n this.nixSystem = platform.getNixPlatform(this.archOs);\n\n this.facts.$app_name = `${this.actionOptions.name}/action`;\n this.facts.arch_os = this.archOs;\n this.facts.nix_system = this.nixSystem;\n\n {\n ghActionsCorePlatform\n .getDetails()\n // eslint-disable-next-line github/no-then\n .then((details) => {\n if (details.name !== \"unknown\") {\n this.addFact(FACT_OS, details.name);\n }\n if (details.version !== \"unknown\") {\n this.addFact(FACT_OS_VERSION, details.version);\n }\n })\n // eslint-disable-next-line github/no-then\n .catch((e: unknown) => {\n actionsCore.debug(\n `Failure getting platform details: ${stringifyError(e)}`,\n );\n });\n }\n\n this.executionPhase = this.determineExecutionPhase();\n this.facts.execution_phase = this.executionPhase;\n\n if (this.actionOptions.fetchStyle === \"gh-env-style\") {\n this.architectureFetchSuffix = this.archOs;\n } else if (this.actionOptions.fetchStyle === \"nix-style\") {\n this.architectureFetchSuffix = this.nixSystem;\n } else if (this.actionOptions.fetchStyle === \"universal\") {\n this.architectureFetchSuffix = \"universal\";\n } else {\n throw new Error(\n `fetchStyle ${this.actionOptions.fetchStyle} is not a valid style`,\n );\n }\n\n this.sourceParameters = constructSourceParameters(\n this.actionOptions.legacySourcePrefix,\n );\n\n this.recordEvent(`begin_${this.executionPhase}`);\n }\n\n /**\n * Attach a file to the diagnostics data in error conditions.\n *\n * The file at `location` doesn't need to exist when stapleFile is called.\n *\n * If the file doesn't exist or is unreadable when trying to staple the attachments, the JS error will be stored in a context value at `staple_failure_{name}`.\n * If the file is readable, the file's contents will be stored in a context value at `staple_value_{name}`.\n */\n stapleFile(name: string, location: string): void {\n this.exceptionAttachments.set(name, location);\n }\n\n /**\n * The main execution phase.\n */\n abstract main(): Promise;\n\n /**\n * The post execution phase.\n */\n abstract post(): Promise;\n\n /**\n * Execute the Action as defined.\n */\n execute(): void {\n // eslint-disable-next-line github/no-then\n this.executeAsync().catch((error: Error) => {\n // eslint-disable-next-line no-console\n console.log(error);\n process.exitCode = 1;\n });\n }\n\n getTemporaryName(): string {\n const tmpDir = process.env[\"RUNNER_TEMP\"] || tmpdir();\n return path.join(tmpDir, `${this.actionOptions.name}-${randomUUID()}`);\n }\n\n addFact(key: string, value: string | boolean): void {\n this.facts[key] = value;\n }\n\n async getDiagnosticsUrl(): Promise {\n return await this.idsHost.getDiagnosticsUrl();\n }\n\n getUniqueId(): string {\n return (\n this.identity.github_workflow_run_differentiator_hash ||\n process.env.RUNNER_TRACKING_ID ||\n randomUUID()\n );\n }\n\n // This ID will be saved in the action's state, to be persisted across phase steps\n getCrossPhaseId(): string {\n let crossPhaseId = actionsCore.getState(STATE_KEY_CROSS_PHASE_ID);\n\n if (crossPhaseId === \"\") {\n crossPhaseId = randomUUID();\n actionsCore.saveState(STATE_KEY_CROSS_PHASE_ID, crossPhaseId);\n }\n\n return crossPhaseId;\n }\n\n getCorrelationHashes(): correlation.AnonymizedCorrelationHashes {\n return this.identity;\n }\n\n recordEvent(\n eventName: string,\n context: Record = {},\n ): void {\n const prefixedName =\n eventName === \"$feature_flag_called\"\n ? eventName\n : `${this.actionOptions.eventPrefix}${eventName}`;\n\n this.events.push({\n name: prefixedName,\n\n // Use the anon distinct ID as the distinct ID until we actually have a distinct ID in the future\n distinct_id: this.identity.$anon_distinct_id,\n\n // distinct_id\n uuid: randomUUID(),\n timestamp: new Date(),\n\n properties: {\n ...context,\n ...this.identity,\n ...this.facts,\n ...Object.fromEntries(\n Object.entries(this.featureEventMetadata).map<\n [string, string | boolean]\n >(([name, variant]) => [`$feature/${name}`, variant]),\n ),\n },\n });\n }\n\n /**\n * Unpacks the closure returned by `fetchArtifact()`, imports the\n * contents into the Nix store, and returns the path of the executable at\n * `/nix/store/STORE_PATH/bin/${bin}`.\n */\n async unpackClosure(bin: string): Promise {\n const artifact = await this.fetchArtifact();\n const { stdout } = await promisify(exec)(\n `cat \"${artifact}\" | xz -d | nix-store --import`,\n );\n const paths = stdout.split(os.EOL);\n const lastPath = paths.at(-2);\n return `${lastPath}/bin/${bin}`;\n }\n\n /**\n * Fetches the executable at the URL determined by the `source-*` inputs and\n * other facts, `chmod`s it, and returns the path to the executable on disk.\n */\n async fetchExecutable(): Promise {\n const binaryPath = await this.fetchArtifact();\n await chmod(binaryPath, fs.constants.S_IXUSR | fs.constants.S_IXGRP);\n return binaryPath;\n }\n\n private get isMain(): boolean {\n return this.executionPhase === \"main\";\n }\n\n private get isPost(): boolean {\n return this.executionPhase === \"post\";\n }\n\n private async executeAsync(): Promise {\n try {\n await this.checkIn();\n\n const correlationHashes = JSON.stringify(this.getCorrelationHashes());\n process.env.DETSYS_CORRELATION = correlationHashes;\n try {\n await writeCorrelationHashes(correlationHashes);\n } catch (error) {\n this.recordEvent(EVENT_STORE_IDENTITY_FAILED, { error: String(error) });\n }\n\n if (!(await this.preflightRequireNix())) {\n this.recordEvent(EVENT_PREFLIGHT_REQUIRE_NIX_DENIED);\n return;\n } else {\n await this.preflightNixStoreInfo();\n this.addFact(FACT_NIX_STORE_TRUST, this.nixStoreTrust);\n }\n\n if (this.isMain) {\n await this.main();\n } else if (this.isPost) {\n await this.post();\n }\n this.addFact(FACT_ENDED_WITH_EXCEPTION, false);\n } catch (e: unknown) {\n this.addFact(FACT_ENDED_WITH_EXCEPTION, true);\n\n const reportable = stringifyError(e);\n\n this.addFact(FACT_FINAL_EXCEPTION, reportable);\n\n if (this.isPost) {\n actionsCore.warning(reportable);\n } else {\n actionsCore.setFailed(reportable);\n }\n\n const doGzip = promisify(gzip);\n\n const exceptionContext: Map = new Map();\n for (const [attachmentLabel, filePath] of this.exceptionAttachments) {\n try {\n const logText = readFileSync(filePath);\n const buf = await doGzip(logText);\n exceptionContext.set(\n `staple_value_${attachmentLabel}`,\n buf.toString(\"base64\"),\n );\n } catch (innerError: unknown) {\n exceptionContext.set(\n `staple_failure_${attachmentLabel}`,\n stringifyError(innerError),\n );\n }\n }\n\n this.recordEvent(EVENT_EXCEPTION, Object.fromEntries(exceptionContext));\n } finally {\n if (this.isPost) {\n await this.collectBacktraces();\n }\n\n await this.complete();\n }\n }\n\n async getClient(): Promise {\n return await this.idsHost.getGot(\n (incitingError: unknown, prevUrl: URL, nextUrl: URL) => {\n this.recordPlausibleTimeout(incitingError);\n\n this.recordEvent(\"ids-failover\", {\n previousUrl: prevUrl.toString(),\n nextUrl: nextUrl.toString(),\n });\n },\n );\n }\n\n private async checkIn(): Promise {\n const checkin = await this.requestCheckIn();\n if (checkin === undefined) {\n return;\n }\n\n this.features = checkin.options;\n for (const [key, feature] of Object.entries(this.features)) {\n this.featureEventMetadata[key] = feature.variant;\n }\n\n const impactSymbol: Map = new Map([\n [\"none\", \"⚪\"],\n [\"maintenance\", \"🛠️\"],\n [\"minor\", \"🟡\"],\n [\"major\", \"🟠\"],\n [\"critical\", \"🔴\"],\n ]);\n const defaultImpactSymbol = \"🔵\";\n\n if (checkin.status !== null) {\n const summaries: string[] = [];\n\n for (const incident of checkin.status.incidents) {\n summaries.push(\n `${impactSymbol.get(incident.impact) || defaultImpactSymbol} ${incident.status.replace(\"_\", \" \")}: ${incident.name} (${incident.shortlink})`,\n );\n }\n\n for (const maintenance of checkin.status.scheduled_maintenances) {\n summaries.push(\n `${impactSymbol.get(maintenance.impact) || defaultImpactSymbol} ${maintenance.status.replace(\"_\", \" \")}: ${maintenance.name} (${maintenance.shortlink})`,\n );\n }\n\n if (summaries.length > 0) {\n actionsCore.info(\n // Bright red, Bold, Underline\n `${\"\\u001b[0;31m\"}${\"\\u001b[1m\"}${\"\\u001b[4m\"}${checkin.status.page.name} Status`,\n );\n for (const notice of summaries) {\n actionsCore.info(notice);\n }\n actionsCore.info(`See: ${checkin.status.page.url}`);\n actionsCore.info(``);\n }\n }\n }\n\n getFeature(name: string): Feature | undefined {\n if (!this.features.hasOwnProperty(name)) {\n return undefined;\n }\n\n const result = this.features[name];\n if (result === undefined) {\n return undefined;\n }\n\n this.recordEvent(\"$feature_flag_called\", {\n $feature_flag: name,\n $feature_flag_response: result.variant,\n });\n\n return result;\n }\n\n /**\n * Check in to install.determinate.systems, to accomplish three things:\n *\n * 1. Preflight the server selected from IdsHost, to increase the chances of success.\n * 2. Fetch any incidents and maintenance events to let users know in case things are weird.\n * 3. Get feature flag data so we can gently roll out new features.\n */\n private async requestCheckIn(): Promise {\n for (\n let attemptsRemaining = 5;\n attemptsRemaining > 0;\n attemptsRemaining--\n ) {\n const checkInUrl = await this.getCheckInUrl();\n if (checkInUrl === undefined) {\n return undefined;\n }\n\n try {\n actionsCore.debug(`Preflighting via ${checkInUrl}`);\n\n const props = {\n // Use a distinct_id when we actually have one\n distinct_id: this.identity.$anon_distinct_id,\n anon_distinct_id: this.identity.$anon_distinct_id,\n groups: this.identity.$groups,\n person_properties: {\n ci: \"github\",\n\n ...this.identity,\n ...this.facts,\n },\n };\n\n return await (\n await this.getClient()\n )\n .post(checkInUrl, {\n json: props,\n timeout: {\n request: CHECK_IN_ENDPOINT_TIMEOUT_MS,\n },\n })\n .json();\n } catch (e: unknown) {\n this.recordPlausibleTimeout(e);\n actionsCore.debug(`Error checking in: ${stringifyError(e)}`);\n this.idsHost.markCurrentHostBroken();\n }\n }\n\n return undefined;\n }\n\n private recordPlausibleTimeout(e: unknown): void {\n // see: https://github.com/sindresorhus/got/blob/895e463fa699d6f2e4b2fc01ceb3b2bb9e157f4c/documentation/8-errors.md\n if (e instanceof TimeoutError && \"timings\" in e && \"request\" in e) {\n const reportContext: {\n [index: string]: string | number | undefined;\n } = {\n url: e.request.requestUrl?.toString(),\n retry_count: e.request.retryCount,\n };\n\n for (const [key, value] of Object.entries(e.timings.phases)) {\n if (Number.isFinite(value)) {\n reportContext[`timing_phase_${key}`] = value;\n }\n }\n\n this.recordEvent(\"timeout\", reportContext);\n }\n }\n\n /**\n * Fetch an artifact, such as a tarball, from the location determined by the\n * `source-*` inputs. If `source-binary` is specified, this will return a path\n * to a binary on disk; otherwise, the artifact will be downloaded from the\n * URL determined by the other `source-*` inputs (`source-url`, `source-pr`,\n * etc.).\n */\n private async fetchArtifact(): Promise {\n const sourceBinary = getStringOrNull(\"source-binary\");\n\n // If source-binary is set, use that. Otherwise fall back to the source-* parameters.\n if (sourceBinary !== null && sourceBinary !== \"\") {\n actionsCore.debug(`Using the provided source binary at ${sourceBinary}`);\n return sourceBinary;\n }\n\n actionsCore.startGroup(\n `Downloading ${this.actionOptions.name} for ${this.architectureFetchSuffix}`,\n );\n\n try {\n actionsCore.info(`Fetching from ${await this.getSourceUrl()}`);\n\n const correlatedUrl = await this.getSourceUrl();\n correlatedUrl.searchParams.set(\"ci\", \"github\");\n correlatedUrl.searchParams.set(\n \"correlation\",\n JSON.stringify(this.identity),\n );\n\n const versionCheckup = await (await this.getClient()).head(correlatedUrl);\n if (versionCheckup.headers.etag) {\n const v = versionCheckup.headers.etag;\n this.addFact(FACT_SOURCE_URL_ETAG, v);\n\n actionsCore.debug(\n `Checking the tool cache for ${await this.getSourceUrl()} at ${v}`,\n );\n const cached = await this.getCachedVersion(v);\n if (cached) {\n this.facts[FACT_ARTIFACT_FETCHED_FROM_CACHE] = true;\n actionsCore.debug(`Tool cache hit.`);\n return cached;\n }\n }\n\n this.facts[FACT_ARTIFACT_FETCHED_FROM_CACHE] = false;\n\n actionsCore.debug(\n `No match from the cache, re-fetching from the redirect: ${versionCheckup.url}`,\n );\n\n const destFile = this.getTemporaryName();\n\n const fetchStream = await this.downloadFile(\n new URL(versionCheckup.url),\n destFile,\n );\n\n if (fetchStream.response?.headers.etag) {\n const v = fetchStream.response.headers.etag;\n\n try {\n await this.saveCachedVersion(v, destFile);\n } catch (e: unknown) {\n actionsCore.debug(`Error caching the artifact: ${stringifyError(e)}`);\n }\n }\n\n return destFile;\n } catch (e: unknown) {\n this.recordPlausibleTimeout(e);\n throw e;\n } finally {\n actionsCore.endGroup();\n }\n }\n\n /**\n * A helper function for failing on error only if strict mode is enabled.\n * This is intended only for CI environments testing Actions themselves.\n */\n failOnError(msg: string): void {\n if (this.strictMode) {\n actionsCore.setFailed(`strict mode failure: ${msg}`);\n }\n }\n\n private async downloadFile(\n url: URL,\n destination: PathLike,\n ): Promise {\n const client = await this.getClient();\n\n return new Promise((resolve, reject) => {\n // Current stream handle\n let writeStream: WriteStream | undefined;\n\n // Sentinel condition in case we want to abort retrying due to FS issues\n let failed = false;\n\n const retry = (stream: Request): void => {\n if (writeStream) {\n writeStream.destroy();\n }\n\n writeStream = createWriteStream(destination, {\n encoding: \"binary\",\n mode: 0o755,\n });\n\n writeStream.once(\"error\", (error) => {\n // Set failed here since promise rejections don't impact control flow\n failed = true;\n reject(error);\n });\n\n writeStream.on(\"finish\", () => {\n if (!failed) {\n resolve(stream);\n }\n });\n\n stream.once(\"retry\", (_count, _error, createRetryStream) => {\n // Optional: check `failed' here in case you want to stop retrying\n retry(createRetryStream());\n });\n\n // Now that all the handlers have been set up we can pipe from the HTTP\n // stream to disk\n stream.pipe(writeStream);\n };\n\n // Begin the retry logic by giving it a fresh got.Request\n retry(client.stream(url));\n });\n }\n\n private async complete(): Promise {\n this.recordEvent(`complete_${this.executionPhase}`);\n await this.submitEvents();\n }\n\n private async getCheckInUrl(): Promise {\n const checkInUrl = await this.idsHost.getDynamicRootUrl();\n\n if (checkInUrl === undefined) {\n return undefined;\n }\n\n checkInUrl.pathname += \"check-in\";\n return checkInUrl;\n }\n\n private async getSourceUrl(): Promise {\n const p = this.sourceParameters;\n\n if (p.url) {\n this.addFact(FACT_SOURCE_URL, p.url);\n return new URL(p.url);\n }\n\n const fetchUrl = await this.idsHost.getRootUrl();\n fetchUrl.pathname += this.actionOptions.idsProjectName;\n\n if (p.tag) {\n fetchUrl.pathname += `/tag/${p.tag}`;\n } else if (p.pr) {\n fetchUrl.pathname += `/pr/${p.pr}`;\n } else if (p.branch) {\n fetchUrl.pathname += `/branch/${p.branch}`;\n } else if (p.revision) {\n fetchUrl.pathname += `/rev/${p.revision}`;\n } else {\n fetchUrl.pathname += `/stable`;\n }\n\n fetchUrl.pathname += `/${this.architectureFetchSuffix}`;\n\n this.addFact(FACT_SOURCE_URL, fetchUrl.toString());\n\n return fetchUrl;\n }\n\n private cacheKey(version: string): string {\n const cleanedVersion = version.replace(/[^a-zA-Z0-9-+.]/g, \"\");\n return `determinatesystem-${this.actionOptions.name}-${this.architectureFetchSuffix}-${cleanedVersion}`;\n }\n\n private async getCachedVersion(version: string): Promise {\n const startCwd = process.cwd();\n\n try {\n const tempDir = this.getTemporaryName();\n await mkdir(tempDir);\n process.chdir(tempDir);\n\n // extremely evil shit right here:\n process.env.GITHUB_WORKSPACE_BACKUP = process.env.GITHUB_WORKSPACE;\n delete process.env.GITHUB_WORKSPACE;\n\n if (\n await actionsCache.restoreCache(\n [this.actionOptions.name],\n this.cacheKey(version),\n [],\n undefined,\n true,\n )\n ) {\n this.recordEvent(EVENT_ARTIFACT_CACHE_HIT);\n return `${tempDir}/${this.actionOptions.name}`;\n }\n\n this.recordEvent(EVENT_ARTIFACT_CACHE_MISS);\n return undefined;\n } finally {\n process.env.GITHUB_WORKSPACE = process.env.GITHUB_WORKSPACE_BACKUP;\n delete process.env.GITHUB_WORKSPACE_BACKUP;\n process.chdir(startCwd);\n }\n }\n\n private async saveCachedVersion(\n version: string,\n toolPath: string,\n ): Promise {\n const startCwd = process.cwd();\n\n try {\n const tempDir = this.getTemporaryName();\n await mkdir(tempDir);\n process.chdir(tempDir);\n await copyFile(toolPath, `${tempDir}/${this.actionOptions.name}`);\n\n // extremely evil shit right here:\n process.env.GITHUB_WORKSPACE_BACKUP = process.env.GITHUB_WORKSPACE;\n delete process.env.GITHUB_WORKSPACE;\n\n await actionsCache.saveCache(\n [this.actionOptions.name],\n this.cacheKey(version),\n undefined,\n true,\n );\n this.recordEvent(EVENT_ARTIFACT_CACHE_PERSIST);\n } finally {\n process.env.GITHUB_WORKSPACE = process.env.GITHUB_WORKSPACE_BACKUP;\n delete process.env.GITHUB_WORKSPACE_BACKUP;\n process.chdir(startCwd);\n }\n }\n\n private collectBacktraceSetup(): void {\n if (!process.env.DETSYS_BACKTRACE_COLLECTOR) {\n actionsCore.exportVariable(\n \"DETSYS_BACKTRACE_COLLECTOR\",\n this.getCrossPhaseId(),\n );\n\n actionsCore.saveState(STATE_BACKTRACE_START_TIMESTAMP, Date.now());\n }\n }\n\n private async collectBacktraces(): Promise {\n try {\n if (process.env.DETSYS_BACKTRACE_COLLECTOR !== this.getCrossPhaseId()) {\n return;\n }\n\n const backtraces = await collectBacktraces(\n this.actionOptions.binaryNamePrefixes,\n this.actionOptions.binaryNamesDenyList,\n parseInt(actionsCore.getState(STATE_BACKTRACE_START_TIMESTAMP)),\n );\n actionsCore.debug(`Backtraces identified: ${backtraces.size}`);\n if (backtraces.size > 0) {\n this.recordEvent(EVENT_BACKTRACES, Object.fromEntries(backtraces));\n }\n } catch (innerError: unknown) {\n actionsCore.debug(\n `Error collecting backtraces: ${stringifyError(innerError)}`,\n );\n }\n }\n\n private async preflightRequireNix(): Promise {\n let nixLocation: string | undefined;\n\n const pathParts = (process.env[\"PATH\"] || \"\").split(\":\");\n for (const location of pathParts) {\n const candidateNix = path.join(location, \"nix\");\n\n try {\n await fs.access(candidateNix, fs.constants.X_OK);\n actionsCore.debug(`Found Nix at ${candidateNix}`);\n nixLocation = candidateNix;\n break;\n } catch {\n actionsCore.debug(`Nix not at ${candidateNix}`);\n }\n }\n this.addFact(FACT_NIX_LOCATION, nixLocation || \"\");\n\n if (this.actionOptions.requireNix === \"ignore\") {\n return true;\n }\n\n const currentNotFoundState = actionsCore.getState(STATE_KEY_NIX_NOT_FOUND);\n if (currentNotFoundState === STATE_NOT_FOUND) {\n // It was previously not found, so don't run subsequent actions\n return false;\n }\n\n if (nixLocation !== undefined) {\n return true;\n }\n actionsCore.saveState(STATE_KEY_NIX_NOT_FOUND, STATE_NOT_FOUND);\n\n switch (this.actionOptions.requireNix) {\n case \"fail\":\n actionsCore.setFailed(\n [\n \"This action can only be used when Nix is installed.\",\n \"Add `- uses: DeterminateSystems/determinate-nix-action@v3` earlier in your workflow.\",\n ].join(\" \"),\n );\n break;\n case \"warn\":\n actionsCore.warning(\n [\n \"This action is in no-op mode because Nix is not installed.\",\n \"Add `- uses: DeterminateSystems/determinate-nix-action@v3` earlier in your workflow.\",\n ].join(\" \"),\n );\n break;\n }\n\n return false;\n }\n\n private async preflightNixStoreInfo(): Promise {\n let output = \"\";\n\n const options: actionsExec.ExecOptions = {};\n options.silent = true;\n options.listeners = {\n stdout: (data) => {\n output += data.toString();\n },\n };\n\n try {\n output = \"\";\n await actionsExec.exec(\"nix\", [\"store\", \"info\", \"--json\"], options);\n this.addFact(FACT_NIX_STORE_CHECK_METHOD, \"info\");\n } catch {\n try {\n // reset output\n output = \"\";\n await actionsExec.exec(\"nix\", [\"store\", \"ping\", \"--json\"], options);\n this.addFact(FACT_NIX_STORE_CHECK_METHOD, \"ping\");\n } catch {\n this.addFact(FACT_NIX_STORE_CHECK_METHOD, \"none\");\n return;\n }\n }\n\n try {\n const parsed = JSON.parse(output);\n if (parsed.trusted === 1) {\n this.nixStoreTrust = \"trusted\";\n } else if (parsed.trusted === 0) {\n this.nixStoreTrust = \"untrusted\";\n } else if (parsed.trusted !== undefined) {\n this.addFact(\n FACT_NIX_STORE_CHECK_ERROR,\n `Mysterious trusted value: ${JSON.stringify(parsed.trusted)}`,\n );\n }\n\n this.addFact(FACT_NIX_STORE_VERSION, JSON.stringify(parsed.version));\n } catch (e: unknown) {\n this.addFact(FACT_NIX_STORE_CHECK_ERROR, stringifyError(e));\n }\n }\n\n private async submitEvents(): Promise {\n const diagnosticsUrl = await this.idsHost.getDiagnosticsUrl();\n if (diagnosticsUrl === undefined) {\n actionsCore.debug(\n \"Diagnostics are disabled. Not sending the following events:\",\n );\n actionsCore.debug(JSON.stringify(this.events, undefined, 2));\n return;\n }\n\n const batch = {\n sent_at: new Date(),\n batch: this.events,\n };\n\n try {\n await (\n await this.getClient()\n ).post(diagnosticsUrl, {\n json: batch,\n timeout: {\n request: DIAGNOSTIC_ENDPOINT_TIMEOUT_MS,\n },\n });\n } catch (err: unknown) {\n this.recordPlausibleTimeout(err);\n\n actionsCore.debug(\n `Error submitting diagnostics event to ${diagnosticsUrl}: ${stringifyError(err)}`,\n );\n }\n this.events = [];\n }\n}\n\nfunction stringifyError(error: unknown): string {\n return error instanceof Error || typeof error == \"string\"\n ? error.toString()\n : JSON.stringify(error);\n}\n\nfunction makeOptionsConfident(\n actionOptions: ActionOptions,\n): ConfidentActionOptions {\n const idsProjectName = actionOptions.idsProjectName ?? actionOptions.name;\n\n const finalOpts: ConfidentActionOptions = {\n name: actionOptions.name,\n idsProjectName,\n eventPrefix: actionOptions.eventPrefix || \"action:\",\n fetchStyle: actionOptions.fetchStyle,\n legacySourcePrefix: actionOptions.legacySourcePrefix,\n requireNix: actionOptions.requireNix,\n binaryNamePrefixes: actionOptions.binaryNamePrefixes ?? [\n \"nix\",\n \"determinate-nixd\",\n actionOptions.name,\n ],\n binaryNamesDenyList:\n actionOptions.binaryNamePrefixes ?? PROGRAM_NAME_CRASH_DENY_LIST,\n };\n\n actionsCore.debug(\"idslib options:\");\n actionsCore.debug(JSON.stringify(finalOpts, undefined, 2));\n\n return finalOpts;\n}\n\n// Public exports from other files\nexport {\n CheckIn,\n Feature,\n Incident,\n Maintenance,\n Page,\n StatusSummary,\n} from \"./check-in.js\";\nexport { AnonymizedCorrelationHashes } from \"./correlation.js\";\nexport { stringifyError } from \"./errors.js\";\nexport { IdsHost } from \"./ids-host.js\";\nexport { SourceDef } from \"./sourcedef.js\";\nexport * as inputs from \"./inputs.js\";\nexport * as platform from \"./platform.js\";\n"],"mappings":"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","names":["error","os","platform","arch","actionsCore","exec","readFile","promisify","actionsCore","actionsCore","error","actionsCore","actionsCore","actionsCore","actionsCore","exec","randomUUID","readFileSync","fs","os","promisify","gzip","fs","stringifyError","error","randomUUID","promisify","exec","gzip","readFileSync"]} \ No newline at end of file +{"version":3,"sources":["../src/linux-release-info.ts","../src/actions-core-platform.ts","../src/errors.ts","../src/backtrace.ts","../src/correlation.ts","../src/ids-host.ts","../src/inputs.ts","../src/platform.ts","../src/sourcedef.ts","../src/index.ts"],"sourcesContent":["/*!\n * linux-release-info\n * Get Linux release info (distribution name, version, arch, release, etc.)\n * from '/etc/os-release' or '/usr/lib/os-release' files and from native os\n * module. On Windows and Darwin platforms it only returns common node os module\n * info (platform, hostname, release, and arch)\n *\n * Licensed under MIT\n * Copyright (c) 2018-2020 [Samuel Carreira]\n */\n// NOTE: we depend on this directly to get around some un-fun issues with mixing CommonJS\n// and ESM in the bundle. We've modified the original logic to improve things like typing\n// and fixing ESLint issues. Originally drawn from:\n// https://github.com/samuelcarreira/linux-release-info/blob/84a91aa5442b47900da03020c590507545d3dc74/src/index.ts\nimport * as fs from \"node:fs\";\nimport * as os from \"node:os\";\nimport { promisify } from \"node:util\";\n\nconst readFileAsync = promisify(fs.readFile);\n\nexport interface LinuxReleaseInfoOptions {\n /**\n * read mode, possible values: 'async' and 'sync'\n *\n * @default 'async'\n */\n mode?: \"async\" | \"sync\";\n /**\n * custom complete file path with os info default null/none\n * if not provided the system will search on the '/etc/os-release'\n * and '/usr/lib/os-release' files\n *\n * @default null\n */\n customFile?: string | null | undefined;\n /**\n * if true, show console debug messages\n *\n * @default false\n */\n debug?: boolean;\n}\n\nconst linuxReleaseInfoOptionsDefaults: LinuxReleaseInfoOptions = {\n mode: \"async\",\n customFile: null,\n debug: false,\n};\n\n/**\n * Get OS release info from 'os-release' file and from native os module\n * on Windows or Darwin it only returns common os module info\n * (uses native fs module)\n * @returns {object} info from the current os\n */\nexport function releaseInfo(infoOptions: LinuxReleaseInfoOptions): object {\n const options = { ...linuxReleaseInfoOptionsDefaults, ...infoOptions };\n\n const searchOsReleaseFileList: string[] = osReleaseFileList(\n options.customFile,\n );\n\n if (os.type() !== \"Linux\") {\n if (options.mode === \"sync\") {\n return getOsInfo();\n } else {\n return Promise.resolve(getOsInfo());\n }\n }\n\n if (options.mode === \"sync\") {\n return readSyncOsreleaseFile(searchOsReleaseFileList, options);\n } else {\n return Promise.resolve(\n readAsyncOsReleaseFile(searchOsReleaseFileList, options),\n );\n }\n}\n\n/**\n * Format file data: convert data to object keys/values\n *\n * @param {object} sourceData Source object to be appended\n * @param {string} srcParseData Input file data to be parsed\n * @returns {object} Formated object\n */\nfunction formatFileData(sourceData: OsInfo, srcParseData: string): OsInfo {\n const lines: string[] = srcParseData.split(\"\\n\");\n\n for (const line of lines) {\n const lineData = line.split(\"=\");\n\n if (lineData.length === 2) {\n lineData[1] = lineData[1].replace(/[\"'\\r]/gi, \"\"); // remove quotes and return character\n\n Object.defineProperty(sourceData, lineData[0].toLowerCase(), {\n value: lineData[1],\n writable: true,\n enumerable: true,\n configurable: true,\n });\n }\n }\n\n return sourceData;\n}\n\n/**\n * Export a list of os-release files\n *\n * @param {string} customFile optional custom complete filepath\n * @returns {array} list of os-release files\n */\nfunction osReleaseFileList(customFile: string | null | undefined): string[] {\n const DEFAULT_OS_RELEASE_FILES = [\"/etc/os-release\", \"/usr/lib/os-release\"];\n\n if (!customFile) {\n return DEFAULT_OS_RELEASE_FILES;\n } else {\n return Array(customFile);\n }\n}\n\n/**\n * Operating system info.\n */\ntype OsInfo = {\n type: string;\n platform: string;\n hostname: string;\n arch: string;\n release: string;\n};\n\n/**\n * Get OS Basic Info\n * (uses node 'os' native module)\n *\n * @returns {OsInfo} os basic info\n */\nfunction getOsInfo(): OsInfo {\n return {\n type: os.type(),\n platform: os.platform(),\n hostname: os.hostname(),\n arch: os.arch(),\n release: os.release(),\n };\n}\n\n/* Helper functions */\n\nasync function readAsyncOsReleaseFile(\n fileList: string[],\n options: LinuxReleaseInfoOptions,\n): Promise {\n let fileData = null;\n\n for (const osReleaseFile of fileList) {\n try {\n if (options.debug) {\n /* eslint-disable no-console */\n console.log(`Trying to read '${osReleaseFile}'...`);\n }\n\n fileData = await readFileAsync(osReleaseFile, \"binary\");\n\n if (options.debug) {\n console.log(`Read data:\\n${fileData}`);\n }\n\n break;\n } catch (error) {\n if (options.debug) {\n console.error(error);\n }\n }\n }\n\n if (fileData === null) {\n throw new Error(\"Cannot read os-release file!\");\n //return getOsInfo();\n }\n\n return formatFileData(getOsInfo(), fileData);\n}\n\nfunction readSyncOsreleaseFile(\n releaseFileList: string[],\n options: LinuxReleaseInfoOptions,\n): OsInfo {\n let fileData = null;\n\n for (const osReleaseFile of releaseFileList) {\n try {\n if (options.debug) {\n console.log(`Trying to read '${osReleaseFile}'...`);\n }\n\n fileData = fs.readFileSync(osReleaseFile, \"binary\");\n\n if (options.debug) {\n console.log(`Read data:\\n${fileData}`);\n }\n\n break;\n } catch (error) {\n if (options.debug) {\n console.error(error);\n }\n }\n }\n\n if (fileData === null) {\n throw new Error(\"Cannot read os-release file!\");\n //return getOsInfo();\n }\n\n return formatFileData(getOsInfo(), fileData);\n}\n","// MIT, mostly lifted from https://github.com/actions/toolkit/blob/5a736647a123ecf8582376bdaee833fbae5b3847/packages/core/src/platform.ts\n// since it isn't in @actions/core 1.10.1 which is their current release as 2024-04-19.\n// Changes: Replaced the lsb_release call in Linux with `linux-release-info` to parse the os-release file directly.\nimport { releaseInfo } from \"./linux-release-info.js\";\nimport * as actionsCore from \"@actions/core\";\nimport * as exec from \"@actions/exec\";\nimport os from \"os\";\n\n/**\n * The name and version of the Action runner's system.\n */\ntype SystemInfo = {\n name: string;\n version: string;\n};\n\n/**\n * Get the name and version of the current Windows system.\n */\nconst getWindowsInfo = async (): Promise => {\n const { stdout: version } = await exec.getExecOutput(\n 'powershell -command \"(Get-CimInstance -ClassName Win32_OperatingSystem).Version\"',\n undefined,\n {\n silent: true,\n },\n );\n\n const { stdout: name } = await exec.getExecOutput(\n 'powershell -command \"(Get-CimInstance -ClassName Win32_OperatingSystem).Caption\"',\n undefined,\n {\n silent: true,\n },\n );\n\n return {\n name: name.trim(),\n version: version.trim(),\n };\n};\n\n/**\n * Get the name and version of the current macOS system.\n */\nconst getMacOsInfo = async (): Promise => {\n const { stdout } = await exec.getExecOutput(\"sw_vers\", undefined, {\n silent: true,\n });\n\n const version = stdout.match(/ProductVersion:\\s*(.+)/)?.[1] ?? \"\";\n const name = stdout.match(/ProductName:\\s*(.+)/)?.[1] ?? \"\";\n\n return {\n name,\n version,\n };\n};\n\n/**\n * Get the name and version of the current Linux system.\n */\nconst getLinuxInfo = async (): Promise => {\n let data: object = {};\n\n try {\n data = releaseInfo({ mode: \"sync\" });\n actionsCore.debug(`Identified release info: ${JSON.stringify(data)}`);\n } catch (e) {\n actionsCore.debug(`Error collecting release info: ${e}`);\n }\n\n return {\n name: getPropertyViaWithDefault(\n data,\n [\"id\", \"name\", \"pretty_name\", \"id_like\"],\n \"unknown\",\n ),\n version: getPropertyViaWithDefault(\n data,\n [\"version_id\", \"version\", \"version_codename\"],\n \"unknown\",\n ),\n };\n};\n\nfunction getPropertyViaWithDefault(\n data: object,\n names: Property[],\n defaultValue: T,\n): T {\n for (const name of names) {\n const ret: T = getPropertyWithDefault(data, name, defaultValue);\n\n if (ret !== defaultValue) {\n return ret;\n }\n }\n\n return defaultValue;\n}\n\nfunction getPropertyWithDefault(\n data: object,\n name: Property,\n defaultValue: T,\n): T {\n if (!data.hasOwnProperty(name)) {\n return defaultValue;\n }\n\n const value = (data as { [K in Property]: T })[name];\n\n // NB. this check won't work for object instances\n if (typeof value !== typeof defaultValue) {\n return defaultValue;\n }\n\n return value;\n}\n\n/**\n * The Action runner's platform.\n */\nexport const platform = os.platform();\n\n/**\n * The Action runner's architecture.\n */\nexport const arch = os.arch();\n\n/**\n * Whether the Action runner is a Windows system.\n */\nexport const isWindows = platform === \"win32\";\n\n/**\n * Whether the Action runner is a macOS system.\n */\nexport const isMacOS = platform === \"darwin\";\n\n/**\n * Whether the Action runner is a Linux system.\n */\nexport const isLinux = platform === \"linux\";\n\n/**\n * System-level information about the current host (platform, architecture, etc.).\n */\ntype SystemDetails = {\n name: string;\n platform: string;\n arch: string;\n version: string;\n isWindows: boolean;\n isMacOS: boolean;\n isLinux: boolean;\n};\n\n/**\n * Get system-level information about the current host (platform, architecture, etc.).\n */\nexport async function getDetails(): Promise {\n return {\n ...(await (isWindows\n ? getWindowsInfo()\n : isMacOS\n ? getMacOsInfo()\n : getLinuxInfo())),\n platform,\n arch,\n isWindows,\n isMacOS,\n isLinux,\n };\n}\n","/**\n * Coerce a value of type `unknown` into a string.\n */\nexport function stringifyError(e: unknown): string {\n if (e instanceof Error) {\n return e.message;\n } else if (typeof e === \"string\") {\n return e;\n } else {\n return JSON.stringify(e);\n }\n}\n","/**\n * @packageDocumentation\n * Collects backtraces for executables for diagnostics\n */\nimport { isLinux, isMacOS } from \"./actions-core-platform.js\";\nimport { stringifyError } from \"./errors.js\";\nimport * as actionsCore from \"@actions/core\";\nimport * as exec from \"@actions/exec\";\nimport { readFile, readdir, stat } from \"node:fs/promises\";\nimport { promisify } from \"node:util\";\nimport { gzip } from \"node:zlib\";\n\n// Give a few seconds buffer, capturing traces that happened a few seconds earlier.\nconst START_SLOP_SECONDS = 5;\n\nexport async function collectBacktraces(\n prefixes: string[],\n programNameDenyList: string[],\n startTimestampMs: number,\n): Promise> {\n if (isMacOS) {\n return await collectBacktracesMacOS(\n prefixes,\n programNameDenyList,\n startTimestampMs,\n );\n }\n if (isLinux) {\n return await collectBacktracesSystemd(\n prefixes,\n programNameDenyList,\n startTimestampMs,\n );\n }\n\n return new Map();\n}\n\nexport async function collectBacktracesMacOS(\n prefixes: string[],\n programNameDenyList: string[],\n startTimestampMs: number,\n): Promise> {\n const backtraces: Map = new Map();\n\n try {\n const { stdout: logJson } = await exec.getExecOutput(\n \"log\",\n [\n \"show\",\n \"--style\",\n \"json\",\n \"--last\",\n // Note we collect the last 1m only, because it should only take a few seconds to write the crash log.\n // Therefore, any crashes before this 1m should be long done by now.\n \"1m\",\n \"--no-info\",\n \"--predicate\",\n \"sender = 'ReportCrash'\",\n ],\n {\n silent: true,\n },\n );\n\n const sussyArray: unknown = JSON.parse(logJson);\n if (!Array.isArray(sussyArray)) {\n throw new Error(`Log json isn't an array: ${logJson}`);\n }\n\n if (sussyArray.length > 0) {\n actionsCore.info(`Collecting crash data...`);\n const delay = async (ms: number): Promise =>\n new Promise((resolve) => setTimeout(resolve, ms));\n await delay(5000);\n }\n } catch {\n actionsCore.debug(\n \"Failed to check logs for in-progress crash dumps; now proceeding with the assumption that all crash dumps completed.\",\n );\n }\n\n const dirs = [\n [\"system\", \"/Library/Logs/DiagnosticReports/\"],\n [\"user\", `${process.env[\"HOME\"]}/Library/Logs/DiagnosticReports/`],\n ];\n\n for (const [source, dir] of dirs) {\n const fileNames = (await readdir(dir))\n .filter((fileName) => {\n return prefixes.some((prefix) => fileName.startsWith(prefix));\n })\n .filter((fileName) => {\n return !programNameDenyList.some((programName) =>\n fileName.startsWith(programName),\n );\n })\n .filter((fileName) => {\n // macOS creates .diag files periodically, which are called \"microstackshots\".\n // We don't necessarily want those, and they're definitely not crashes.\n // See: https://patents.google.com/patent/US20140237219A1/en\n return !fileName.endsWith(\".diag\");\n });\n\n const doGzip = promisify(gzip);\n for (const fileName of fileNames) {\n try {\n if ((await stat(`${dir}/${fileName}`)).ctimeMs >= startTimestampMs) {\n const logText = await readFile(`${dir}/${fileName}`);\n const buf = await doGzip(logText);\n backtraces.set(\n `backtrace_value_${source}_${fileName}`,\n buf.toString(\"base64\"),\n );\n }\n } catch (innerError: unknown) {\n backtraces.set(\n `backtrace_failure_${source}_${fileName}`,\n stringifyError(innerError),\n );\n }\n }\n }\n\n return backtraces;\n}\n\ntype SystemdCoreDumpInfo = {\n exe: string;\n pid: number;\n};\n\nexport async function collectBacktracesSystemd(\n prefixes: string[],\n programNameDenyList: string[],\n startTimestampMs: number,\n): Promise> {\n const sinceSeconds =\n Math.ceil((Date.now() - startTimestampMs) / 1000) + START_SLOP_SECONDS;\n const backtraces: Map = new Map();\n\n const coredumps: SystemdCoreDumpInfo[] = [];\n\n try {\n const { stdout: coredumpjson } = await exec.getExecOutput(\n \"coredumpctl\",\n [\"--json=pretty\", \"list\", \"--since\", `${sinceSeconds} seconds ago`],\n {\n silent: true,\n },\n );\n\n const sussyArray: unknown = JSON.parse(coredumpjson);\n if (!Array.isArray(sussyArray)) {\n throw new Error(`Coredump isn't an array: ${coredumpjson}`);\n }\n\n for (const sussyObject of sussyArray) {\n const keys = Object.keys(sussyObject);\n\n if (keys.includes(\"exe\") && keys.includes(\"pid\")) {\n if (\n typeof sussyObject.exe == \"string\" &&\n typeof sussyObject.pid == \"number\"\n ) {\n const execParts = sussyObject.exe.split(\"/\");\n const binaryName = execParts[execParts.length - 1];\n\n if (\n prefixes.some((prefix) => binaryName.startsWith(prefix)) &&\n !programNameDenyList.includes(binaryName)\n ) {\n coredumps.push({\n exe: sussyObject.exe,\n pid: sussyObject.pid,\n });\n }\n } else {\n actionsCore.debug(\n `Mysterious coredump entry missing exe string and/or pid number: ${JSON.stringify(sussyObject)}`,\n );\n }\n } else {\n actionsCore.debug(\n `Mysterious coredump entry missing exe value and/or pid value: ${JSON.stringify(sussyObject)}`,\n );\n }\n }\n } catch (innerError: unknown) {\n actionsCore.debug(\n `Cannot collect backtraces: ${stringifyError(innerError)}`,\n );\n\n return backtraces;\n }\n\n const doGzip = promisify(gzip);\n for (const coredump of coredumps) {\n try {\n const { stdout: logText } = await exec.getExecOutput(\n \"coredumpctl\",\n [\"info\", `${coredump.pid}`],\n {\n silent: true,\n },\n );\n\n const buf = await doGzip(logText);\n backtraces.set(`backtrace_value_${coredump.pid}`, buf.toString(\"base64\"));\n } catch (innerError: unknown) {\n backtraces.set(\n `backtrace_failure_${coredump.pid}`,\n stringifyError(innerError),\n );\n }\n }\n\n return backtraces;\n}\n","import * as actionsCore from \"@actions/core\";\nimport { createHash, randomUUID } from \"node:crypto\";\n\nconst OPTIONAL_VARIABLES = [\"INVOCATION_ID\"];\n\n/* eslint-disable camelcase */\n/**\n * JSON sent to server.\n */\nexport type AnonymizedCorrelationHashes = {\n $anon_distinct_id: string;\n $groups: Record;\n $session_id?: string;\n correlation_source: string;\n github_repository_hash?: string;\n github_workflow_hash?: string;\n github_workflow_job_hash?: string;\n github_workflow_run_differentiator_hash?: string;\n github_workflow_run_hash?: string;\n is_ci: boolean;\n};\n\nexport function identify(): AnonymizedCorrelationHashes {\n const repository = hashEnvironmentVariables(\"GHR\", [\n \"GITHUB_SERVER_URL\",\n \"GITHUB_REPOSITORY_OWNER\",\n \"GITHUB_REPOSITORY_OWNER_ID\",\n \"GITHUB_REPOSITORY\",\n \"GITHUB_REPOSITORY_ID\",\n ]);\n\n const run_differentiator = hashEnvironmentVariables(\"GHWJA\", [\n \"GITHUB_SERVER_URL\",\n \"GITHUB_REPOSITORY_OWNER\",\n \"GITHUB_REPOSITORY_OWNER_ID\",\n \"GITHUB_REPOSITORY\",\n \"GITHUB_REPOSITORY_ID\",\n \"GITHUB_WORKFLOW\",\n \"GITHUB_JOB\",\n \"GITHUB_RUN_ID\",\n \"GITHUB_RUN_NUMBER\",\n \"GITHUB_RUN_ATTEMPT\",\n \"INVOCATION_ID\",\n ]);\n\n const ident: AnonymizedCorrelationHashes = {\n $anon_distinct_id: process.env[\"RUNNER_TRACKING_ID\"] || randomUUID(),\n\n correlation_source: \"github-actions\",\n\n github_repository_hash: repository,\n github_workflow_hash: hashEnvironmentVariables(\"GHW\", [\n \"GITHUB_SERVER_URL\",\n \"GITHUB_REPOSITORY_OWNER\",\n \"GITHUB_REPOSITORY_OWNER_ID\",\n \"GITHUB_REPOSITORY\",\n \"GITHUB_REPOSITORY_ID\",\n \"GITHUB_WORKFLOW\",\n ]),\n github_workflow_job_hash: hashEnvironmentVariables(\"GHWJ\", [\n \"GITHUB_SERVER_URL\",\n \"GITHUB_REPOSITORY_OWNER\",\n \"GITHUB_REPOSITORY_OWNER_ID\",\n \"GITHUB_REPOSITORY\",\n \"GITHUB_REPOSITORY_ID\",\n \"GITHUB_WORKFLOW\",\n \"GITHUB_JOB\",\n ]),\n github_workflow_run_hash: hashEnvironmentVariables(\"GHWJR\", [\n \"GITHUB_SERVER_URL\",\n \"GITHUB_REPOSITORY_OWNER\",\n \"GITHUB_REPOSITORY_OWNER_ID\",\n \"GITHUB_REPOSITORY\",\n \"GITHUB_REPOSITORY_ID\",\n \"GITHUB_WORKFLOW\",\n \"GITHUB_JOB\",\n \"GITHUB_RUN_ID\",\n ]),\n github_workflow_run_differentiator_hash: run_differentiator,\n $session_id: run_differentiator,\n $groups: {\n github_repository: repository,\n github_organization: hashEnvironmentVariables(\"GHO\", [\n \"GITHUB_SERVER_URL\",\n \"GITHUB_REPOSITORY_OWNER\",\n \"GITHUB_REPOSITORY_OWNER_ID\",\n ]),\n },\n is_ci: true,\n };\n\n actionsCore.debug(\"Correlation data:\");\n actionsCore.debug(JSON.stringify(ident, null, 2));\n\n return ident;\n}\n\nfunction hashEnvironmentVariables(\n prefix: string,\n variables: string[],\n): undefined | string {\n const hash = createHash(\"sha256\");\n\n for (const varName of variables) {\n let value = process.env[varName];\n\n if (value === undefined) {\n if (OPTIONAL_VARIABLES.includes(varName)) {\n actionsCore.debug(\n `Optional environment variable not set: ${varName} -- substituting with the variable name`,\n );\n value = varName;\n } else {\n actionsCore.debug(\n `Environment variable not set: ${varName} -- can't generate the requested identity`,\n );\n return undefined;\n }\n }\n\n hash.update(value);\n hash.update(\"\\0\");\n }\n\n return `${prefix}-${hash.digest(\"hex\")}`;\n}\n","/**\n * @packageDocumentation\n * Identifies and discovers backend servers for install.determinate.systems\n */\nimport { stringifyError } from \"./errors.js\";\nimport * as actionsCore from \"@actions/core\";\nimport { Got, got } from \"got\";\nimport type { SrvRecord } from \"node:dns\";\nimport { resolveSrv } from \"node:dns/promises\";\n\nconst DEFAULT_LOOKUP = \"_detsys_ids._tcp.install.determinate.systems.\";\nconst ALLOWED_SUFFIXES = [\n \".install.determinate.systems\",\n \".install.detsys.dev\",\n];\n\nconst DEFAULT_IDS_HOST = \"https://install.determinate.systems\";\nconst LOOKUP = process.env[\"IDS_LOOKUP\"] ?? DEFAULT_LOOKUP;\n\nconst DEFAULT_TIMEOUT = 10_000; // 10 seconds in ms\n\n/**\n * Host information for install.determinate.systems.\n */\nexport class IdsHost {\n private idsProjectName: string;\n private diagnosticsSuffix?: string;\n private runtimeDiagnosticsUrl?: string;\n private prioritizedURLs?: URL[];\n private client?: Got;\n\n constructor(\n idsProjectName: string,\n diagnosticsSuffix: string | undefined,\n runtimeDiagnosticsUrl: string | undefined,\n ) {\n this.idsProjectName = idsProjectName;\n this.diagnosticsSuffix = diagnosticsSuffix;\n this.runtimeDiagnosticsUrl = runtimeDiagnosticsUrl;\n this.client = undefined;\n }\n\n async getGot(\n recordFailoverCallback?: (\n incitingError: unknown,\n prevUrl: URL,\n nextUrl: URL,\n ) => void,\n ): Promise {\n if (this.client === undefined) {\n this.client = got.extend({\n timeout: {\n request: DEFAULT_TIMEOUT,\n },\n\n retry: {\n limit: Math.max((await this.getUrlsByPreference()).length, 3),\n methods: [\"GET\", \"HEAD\"],\n },\n\n hooks: {\n beforeRetry: [\n async (error, retryCount) => {\n const prevUrl = await this.getRootUrl();\n this.markCurrentHostBroken();\n const nextUrl = await this.getRootUrl();\n\n if (recordFailoverCallback !== undefined) {\n recordFailoverCallback(error, prevUrl, nextUrl);\n }\n\n actionsCore.info(\n `Retrying after error ${error.code}, retry #: ${retryCount}`,\n );\n },\n ],\n\n beforeRequest: [\n async (options) => {\n // The getter always returns a URL, even though the setter accepts a string\n const currentUrl: URL = options.url as URL;\n\n if (this.isUrlSubjectToDynamicUrls(currentUrl)) {\n const newUrl: URL = new URL(currentUrl);\n\n const url: URL = await this.getRootUrl();\n newUrl.host = url.host;\n\n options.url = newUrl;\n actionsCore.debug(`Transmuted ${currentUrl} into ${newUrl}`);\n } else {\n actionsCore.debug(`No transmutations on ${currentUrl}`);\n }\n },\n ],\n },\n });\n }\n\n return this.client;\n }\n\n markCurrentHostBroken(): void {\n this.prioritizedURLs?.shift();\n }\n\n setPrioritizedUrls(urls: URL[]): void {\n this.prioritizedURLs = urls;\n }\n\n isUrlSubjectToDynamicUrls(url: URL): boolean {\n if (url.origin === DEFAULT_IDS_HOST) {\n return true;\n }\n\n for (const suffix of ALLOWED_SUFFIXES) {\n if (url.host.endsWith(suffix)) {\n return true;\n }\n }\n\n return false;\n }\n\n async getDynamicRootUrl(): Promise {\n const idsHost = process.env[\"IDS_HOST\"];\n if (idsHost !== undefined) {\n try {\n return new URL(idsHost);\n } catch (err: unknown) {\n actionsCore.error(\n `IDS_HOST environment variable is not a valid URL. Ignoring. ${stringifyError(err)}`,\n );\n }\n }\n\n let url: URL | undefined = undefined;\n try {\n const urls = await this.getUrlsByPreference();\n url = urls[0];\n } catch (err: unknown) {\n actionsCore.error(\n `Error collecting IDS URLs by preference: ${stringifyError(err)}`,\n );\n }\n\n if (url === undefined) {\n return undefined;\n } else {\n // This is a load-bearing `new URL(url)` so that callers can't mutate\n // getRootUrl's return value.\n return new URL(url);\n }\n }\n\n async getRootUrl(): Promise {\n const url = await this.getDynamicRootUrl();\n\n if (url === undefined) {\n return new URL(DEFAULT_IDS_HOST);\n }\n\n return url;\n }\n\n async getDiagnosticsUrl(): Promise {\n if (this.runtimeDiagnosticsUrl === \"\") {\n // User specifically set the diagnostics URL to an empty string\n // so disable diagnostics\n return undefined;\n }\n\n if (\n this.runtimeDiagnosticsUrl !== \"-\" &&\n this.runtimeDiagnosticsUrl !== undefined\n ) {\n try {\n // Caller specified a specific diagnostics URL\n return new URL(this.runtimeDiagnosticsUrl);\n } catch (err: unknown) {\n actionsCore.info(\n `User-provided diagnostic endpoint ignored: not a valid URL: ${stringifyError(err)}`,\n );\n }\n }\n\n try {\n const diagnosticUrl = await this.getRootUrl();\n diagnosticUrl.pathname += \"events/batch\";\n return diagnosticUrl;\n } catch (err: unknown) {\n actionsCore.info(\n `Generated diagnostic endpoint ignored, and diagnostics are disabled: not a valid URL: ${stringifyError(err)}`,\n );\n return undefined;\n }\n }\n\n private async getUrlsByPreference(): Promise {\n if (this.prioritizedURLs === undefined) {\n this.prioritizedURLs = orderRecordsByPriorityWeight(\n await discoverServiceRecords(),\n ).flatMap((record) => recordToUrl(record) || []);\n }\n\n return this.prioritizedURLs;\n }\n}\n\nexport function recordToUrl(record: SrvRecord): URL | undefined {\n const urlStr = `https://${record.name}:${record.port}`;\n try {\n return new URL(urlStr);\n } catch (err: unknown) {\n actionsCore.debug(\n `Record ${JSON.stringify(record)} produced an invalid URL: ${urlStr} (${err})`,\n );\n return undefined;\n }\n}\n\nasync function discoverServiceRecords(): Promise {\n return await discoverServicesStub(resolveSrv(LOOKUP), 1_000);\n}\n\nexport async function discoverServicesStub(\n lookup: Promise,\n timeout: number,\n): Promise {\n const defaultFallback: Promise = new Promise(\n (resolve, _reject) => {\n setTimeout(resolve, timeout, []);\n },\n );\n\n let records: SrvRecord[];\n\n try {\n records = await Promise.race([lookup, defaultFallback]);\n } catch (reason: unknown) {\n actionsCore.debug(`Error resolving SRV records: ${stringifyError(reason)}`);\n records = [];\n }\n\n const acceptableRecords = records.filter((record: SrvRecord): boolean => {\n for (const suffix of ALLOWED_SUFFIXES) {\n if (record.name.endsWith(suffix)) {\n return true;\n }\n }\n\n actionsCore.debug(\n `Unacceptable domain due to an invalid suffix: ${record.name}`,\n );\n\n return false;\n });\n\n if (acceptableRecords.length === 0) {\n actionsCore.debug(`No records found for ${LOOKUP}`);\n } else {\n actionsCore.debug(\n `Resolved ${LOOKUP} to ${JSON.stringify(acceptableRecords)}`,\n );\n }\n\n return acceptableRecords;\n}\n\nexport function orderRecordsByPriorityWeight(\n records: SrvRecord[],\n): SrvRecord[] {\n const byPriorityWeight: Map = new Map();\n for (const record of records) {\n const existing = byPriorityWeight.get(record.priority);\n if (existing) {\n existing.push(record);\n } else {\n byPriorityWeight.set(record.priority, [record]);\n }\n }\n\n const prioritizedRecords: SrvRecord[] = [];\n const keys: number[] = Array.from(byPriorityWeight.keys()).sort(\n (a, b) => a - b,\n );\n\n for (const priority of keys) {\n const recordsByPrio = byPriorityWeight.get(priority);\n if (recordsByPrio === undefined) {\n continue;\n }\n\n prioritizedRecords.push(...weightedRandom(recordsByPrio));\n }\n\n return prioritizedRecords;\n}\n\nexport function weightedRandom(records: SrvRecord[]): SrvRecord[] {\n // Duplicate records so we don't accidentally change our caller's data\n const scratchRecords: SrvRecord[] = records.slice();\n const result: SrvRecord[] = [];\n\n while (scratchRecords.length > 0) {\n const weights: number[] = [];\n\n {\n for (let i = 0; i < scratchRecords.length; i++) {\n weights.push(\n scratchRecords[i].weight + (i > 0 ? scratchRecords[i - 1].weight : 0),\n );\n }\n }\n\n const point = Math.random() * weights[weights.length - 1];\n\n for (\n let selectedIndex = 0;\n selectedIndex < weights.length;\n selectedIndex++\n ) {\n if (weights[selectedIndex] > point) {\n // Remove our selected record and add it to the result\n result.push(scratchRecords.splice(selectedIndex, 1)[0]);\n break;\n }\n }\n }\n\n return result;\n}\n","/**\n * @packageDocumentation\n * Helpers for getting values from an Action's configuration.\n */\nimport * as actionsCore from \"@actions/core\";\n\n/**\n * Get a Boolean input from the Action's configuration by name.\n */\nconst getBool = (name: string): boolean => {\n return actionsCore.getBooleanInput(name);\n};\n\n/**\n * Get a Boolean input from the Action's configuration by name, or undefined if it is unset.\n */\nconst getBoolOrUndefined = (name: string): boolean | undefined => {\n if (getStringOrUndefined(name) === undefined) {\n return undefined;\n }\n\n return actionsCore.getBooleanInput(name);\n};\n\n/**\n * The character used to separate values in the input string.\n */\nexport type Separator = \"space\" | \"comma\";\n\n/**\n * Convert a comma-separated string input into an array of strings. If `comma` is selected,\n * all whitespace is removed from the string before converting to an array.\n */\nconst getArrayOfStrings = (name: string, separator: Separator): string[] => {\n const original = getString(name);\n return handleString(original, separator);\n};\n\n/**\n * Convert a string input into an array of strings or `null` if no value is set.\n */\nconst getArrayOfStringsOrNull = (\n name: string,\n separator: Separator,\n): string[] | null => {\n const original = getStringOrNull(name);\n if (original === null) {\n return null;\n } else {\n return handleString(original, separator);\n }\n};\n\n// Split out this function for use in testing\nexport const handleString = (input: string, separator: Separator): string[] => {\n const sepChar = separator === \"comma\" ? \",\" : /\\s+/;\n const trimmed = input.trim(); // Remove whitespace at the beginning and end\n if (trimmed === \"\") {\n return [];\n }\n\n return trimmed.split(sepChar).map((s: string) => s.trim());\n};\n\n/**\n * Get a multi-line string input from the Action's configuration by name or return `null` if not set.\n */\nconst getMultilineStringOrNull = (name: string): string[] | null => {\n const value = actionsCore.getMultilineInput(name);\n if (value.length === 0) {\n return null;\n } else {\n return value;\n }\n};\n\n/**\n * Get a number input from the Action's configuration by name or return `null` if not set.\n */\nconst getNumberOrNull = (name: string): number | null => {\n const value = actionsCore.getInput(name);\n if (value === \"\") {\n return null;\n } else {\n return Number(value);\n }\n};\n\n/**\n * Get a string input from the Action's configuration.\n */\nconst getString = (name: string): string => {\n return actionsCore.getInput(name);\n};\n\n/**\n * Get a string input from the Action's configuration by name or return `null` if not set.\n */\nconst getStringOrNull = (name: string): string | null => {\n const value = actionsCore.getInput(name);\n if (value === \"\") {\n return null;\n } else {\n return value;\n }\n};\n\n/**\n * Get a string input from the Action's configuration by name or return `undefined` if not set.\n */\nconst getStringOrUndefined = (name: string): string | undefined => {\n const value = actionsCore.getInput(name);\n if (value === \"\") {\n return undefined;\n } else {\n return value;\n }\n};\n\nexport {\n getBool,\n getBoolOrUndefined,\n getArrayOfStrings,\n getArrayOfStringsOrNull,\n getMultilineStringOrNull,\n getNumberOrNull,\n getString,\n getStringOrNull,\n getStringOrUndefined,\n};\n","/**\n * @packageDocumentation\n * Helpers for determining system attributes of the current runner.\n */\nimport * as actionsCore from \"@actions/core\";\n\n/**\n * Get the current architecture plus OS. Examples include `X64-Linux` and `ARM64-macOS`.\n */\nexport function getArchOs(): string {\n const envArch = process.env.RUNNER_ARCH;\n const envOs = process.env.RUNNER_OS;\n\n if (envArch && envOs) {\n return `${envArch}-${envOs}`;\n } else {\n actionsCore.error(\n `Can't identify the platform: RUNNER_ARCH or RUNNER_OS undefined (${envArch}-${envOs})`,\n );\n throw new Error(\"RUNNER_ARCH and/or RUNNER_OS is not defined\");\n }\n}\n\n/**\n * Get the current Nix system. Examples include `x86_64-linux` and `aarch64-darwin`.\n */\nexport function getNixPlatform(archOs: string): string {\n const archOsMap: Map = new Map([\n [\"X64-macOS\", \"x86_64-darwin\"],\n [\"ARM64-macOS\", \"aarch64-darwin\"],\n [\"X64-Linux\", \"x86_64-linux\"],\n [\"ARM64-Linux\", \"aarch64-linux\"],\n ]);\n\n const mappedTo = archOsMap.get(archOs);\n if (mappedTo) {\n return mappedTo;\n } else {\n actionsCore.error(\n `ArchOs (${archOs}) doesn't map to a supported Nix platform.`,\n );\n throw new Error(\n `Cannot convert ArchOs (${archOs}) to a supported Nix platform.`,\n );\n }\n}\n","import { getStringOrUndefined } from \"./inputs.js\";\nimport * as actionsCore from \"@actions/core\";\n\nexport type SourceDef = {\n path?: string;\n url?: string;\n tag?: string;\n pr?: string;\n branch?: string;\n revision?: string;\n};\n\nexport function constructSourceParameters(legacyPrefix?: string): SourceDef {\n return {\n path: noisilyGetInput(\"path\", legacyPrefix),\n url: noisilyGetInput(\"url\", legacyPrefix),\n tag: noisilyGetInput(\"tag\", legacyPrefix),\n pr: noisilyGetInput(\"pr\", legacyPrefix),\n branch: noisilyGetInput(\"branch\", legacyPrefix),\n revision: noisilyGetInput(\"revision\", legacyPrefix),\n };\n}\n\nfunction noisilyGetInput(\n suffix: string,\n legacyPrefix: string | undefined,\n): string | undefined {\n const preferredInput = getStringOrUndefined(`source-${suffix}`);\n\n if (!legacyPrefix) {\n return preferredInput;\n }\n\n // Remaining is for handling cases where the legacy prefix\n // should be examined.\n const legacyInput = getStringOrUndefined(`${legacyPrefix}-${suffix}`);\n\n if (preferredInput && legacyInput) {\n actionsCore.warning(\n `The supported option source-${suffix} and the legacy option ${legacyPrefix}-${suffix} are both set. Preferring source-${suffix}. Please stop setting ${legacyPrefix}-${suffix}.`,\n );\n return preferredInput;\n } else if (legacyInput) {\n actionsCore.warning(\n `The legacy option ${legacyPrefix}-${suffix} is set. Please migrate to source-${suffix}.`,\n );\n return legacyInput;\n } else {\n return preferredInput;\n }\n}\n","/**\n * @packageDocumentation\n * Determinate Systems' TypeScript library for creating GitHub Actions logic.\n */\n// import { version as pkgVersion } from \"../package.json\";\nimport * as ghActionsCorePlatform from \"./actions-core-platform.js\";\nimport { collectBacktraces } from \"./backtrace.js\";\nimport { CheckIn, Feature } from \"./check-in.js\";\nimport * as correlation from \"./correlation.js\";\nimport { IdsHost } from \"./ids-host.js\";\nimport { getBool, getBoolOrUndefined, getStringOrNull } from \"./inputs.js\";\nimport * as platform from \"./platform.js\";\nimport { SourceDef, constructSourceParameters } from \"./sourcedef.js\";\nimport * as actionsCache from \"@actions/cache\";\nimport * as actionsCore from \"@actions/core\";\nimport * as actionsExec from \"@actions/exec\";\nimport { Got, Request, TimeoutError } from \"got\";\nimport { exec } from \"node:child_process\";\nimport { UUID, randomUUID } from \"node:crypto\";\nimport {\n PathLike,\n WriteStream,\n createWriteStream,\n readFileSync,\n} from \"node:fs\";\nimport fs, { chmod, copyFile, mkdir } from \"node:fs/promises\";\nimport * as os from \"node:os\";\nimport { tmpdir } from \"node:os\";\nimport * as path from \"node:path\";\nimport { promisify } from \"node:util\";\nimport { gzip } from \"node:zlib\";\n\nconst pkgVersion = \"1.0\";\n\nconst EVENT_BACKTRACES = \"backtrace\";\nconst EVENT_EXCEPTION = \"exception\";\nconst EVENT_ARTIFACT_CACHE_HIT = \"artifact_cache_hit\";\nconst EVENT_ARTIFACT_CACHE_MISS = \"artifact_cache_miss\";\nconst EVENT_ARTIFACT_CACHE_PERSIST = \"artifact_cache_persist\";\nconst EVENT_PREFLIGHT_REQUIRE_NIX_DENIED = \"preflight-require-nix-denied\";\nconst EVENT_STORE_IDENTITY_FAILED = \"store_identity_failed\";\n\nconst FACT_ARTIFACT_FETCHED_FROM_CACHE = \"artifact_fetched_from_cache\";\nconst FACT_ENDED_WITH_EXCEPTION = \"ended_with_exception\";\nconst FACT_FINAL_EXCEPTION = \"final_exception\";\nconst FACT_OS = \"$os\";\nconst FACT_OS_VERSION = \"$os_version\";\nconst FACT_SOURCE_URL = \"source_url\";\nconst FACT_SOURCE_URL_ETAG = \"source_url_etag\";\nconst FACT_NIX_VERSION = \"nix_version\";\n\nconst FACT_NIX_LOCATION = \"nix_location\";\nconst FACT_NIX_STORE_TRUST = \"nix_store_trusted\";\nconst FACT_NIX_STORE_VERSION = \"nix_store_version\";\nconst FACT_NIX_STORE_CHECK_METHOD = \"nix_store_check_method\";\nconst FACT_NIX_STORE_CHECK_ERROR = \"nix_store_check_error\";\n\nconst STATE_KEY_EXECUTION_PHASE = \"detsys_action_execution_phase\";\nconst STATE_KEY_NIX_NOT_FOUND = \"detsys_action_nix_not_found\";\nconst STATE_NOT_FOUND = \"not-found\";\nconst STATE_KEY_CROSS_PHASE_ID = \"detsys_cross_phase_id\";\nconst STATE_BACKTRACE_START_TIMESTAMP = \"detsys_backtrace_start_timestamp\";\n\nconst DIAGNOSTIC_ENDPOINT_TIMEOUT_MS = 10_000; // 10 seconds in ms\nconst CHECK_IN_ENDPOINT_TIMEOUT_MS = 1_000; // 1 second in ms\nconst PROGRAM_NAME_CRASH_DENY_LIST = [\n \"nix-expr-tests\",\n \"nix-store-tests\",\n \"nix-util-tests\",\n];\n\n/**\n * An enum for describing different \"fetch suffixes\" for i.d.s.\n *\n * - `nix-style` means that system names like `x86_64-linux` and `aarch64-darwin` are used\n * - `gh-env-style` means that names like `X64-Linux` and `ARM64-macOS` are used\n * - `universal` means that the suffix is the static `universal` (for non-system-specific things)\n */\nexport type FetchSuffixStyle = \"nix-style\" | \"gh-env-style\" | \"universal\";\n\n/**\n * GitHub Actions has two possible execution phases: `main` and `post`.\n */\nexport type ExecutionPhase = \"main\" | \"post\";\n\n/**\n * How to handle whether Nix is currently installed on the runner.\n *\n * - `fail` means that the workflow fails if Nix isn't installed\n * - `warn` means that a warning is logged if Nix isn't installed\n * - `ignore` means that Nix will not be checked\n */\nexport type NixRequirementHandling = \"fail\" | \"warn\" | \"ignore\";\n\n/**\n * Whether the Nix store on the runner is trusted.\n *\n * - `trusted` means yes\n * - `untrusted` means no\n * - `unknown` means that the status couldn't be determined\n *\n * This is determined via the output of `nix store info --json`.\n */\nexport type NixStoreTrust = \"trusted\" | \"untrusted\" | \"unknown\";\n\nexport type ActionOptions = {\n // Name of the project generally, and the name of the binary on disk.\n name: string;\n\n // Defaults to `name`, Corresponds to the ProjectHost entry on i.d.s.\n idsProjectName?: string;\n\n // Defaults to `action:`\n eventPrefix?: string;\n\n // The \"architecture\" URL component expected by I.D.S. for the ProjectHost.\n fetchStyle: FetchSuffixStyle;\n\n // IdsToolbox assumes the GitHub Action exposes source overrides, like branch/pr/etc. to be named `source-*`.\n // This prefix adds a fallback name, prefixed by `${legacySourcePrefix}-`.\n // Users who configure legacySourcePrefix will get warnings asking them to change to `source-*`.\n legacySourcePrefix?: string;\n\n // Check if Nix is installed before running this action.\n // If Nix isn't installed, this action will not fail, and will instead do nothing.\n // The action will emit a user-visible warning instructing them to install Nix.\n requireNix: NixRequirementHandling;\n\n // The URL suffix to send diagnostics events to.\n //\n // The final URL is constructed via IDS_HOST/idsProjectName/diagnosticsSuffix.\n //\n // Default: `diagnostics`.\n diagnosticsSuffix?: string;\n\n // Collect backtraces from segfaults and other failures from binaries that start with these names.\n //\n // Default: `[ \"nix\", \"determinate-nixd\", ActionOptions.name ]`.\n binaryNamePrefixes?: string[];\n\n // Do NOT collect backtraces from segfaults and other failures from binaries with exact these names.\n //\n // Default: `[ \"nix-expr-tests\" ]`.\n binaryNamesDenyList?: string[];\n};\n\n/**\n * A confident version of Options, where defaults have been resolved into final values.\n */\nexport type ConfidentActionOptions = {\n name: string;\n idsProjectName: string;\n eventPrefix: string;\n fetchStyle: FetchSuffixStyle;\n legacySourcePrefix?: string;\n requireNix: NixRequirementHandling;\n providedDiagnosticsUrl?: URL;\n binaryNamePrefixes: string[];\n binaryNamesDenyList: string[];\n};\n\n/**\n * An event to send to the diagnostic endpoint of i.d.s.\n */\nexport type DiagnosticEvent = {\n // Note: putting a Map in here won't serialize to json properly.\n // It'll just be {} on serialization.\n name: string;\n distinct_id?: string;\n uuid: UUID;\n timestamp: Date;\n\n properties: Record;\n};\n\nconst determinateStateDir = \"/var/lib/determinate\";\nconst determinateIdentityFile = path.join(determinateStateDir, \"identity.json\");\n\nconst isRoot = os.userInfo().uid === 0;\n\n/** Create the Determinate state directory by escalating via sudo */\nasync function sudoEnsureDeterminateStateDir(): Promise {\n const code = await actionsExec.exec(\"sudo\", [\n \"mkdir\",\n \"-p\",\n determinateStateDir,\n ]);\n\n if (code !== 0) {\n throw new Error(`sudo mkdir -p exit: ${code}`);\n }\n}\n\n/** Ensures the Determinate state directory exists, escalating if necessary */\nasync function ensureDeterminateStateDir(): Promise {\n if (isRoot) {\n await mkdir(determinateStateDir, { recursive: true });\n } else {\n return sudoEnsureDeterminateStateDir();\n }\n}\n\n/** Writes correlation hashes to the Determinate state directory by writing to a `sudo tee` pipe */\nasync function sudoWriteCorrelationHashes(hashes: string): Promise {\n const buffer = Buffer.from(hashes);\n\n const code = await actionsExec.exec(\n \"sudo\",\n [\"tee\", determinateIdentityFile],\n {\n input: buffer,\n\n // Ignore output from tee\n outStream: createWriteStream(\"/dev/null\"),\n },\n );\n\n if (code !== 0) {\n throw new Error(`sudo tee exit: ${code}`);\n }\n}\n\n/** Writes correlation hashes to the Determinate state directory, escalating if necessary */\nasync function writeCorrelationHashes(hashes: string): Promise {\n await ensureDeterminateStateDir();\n\n if (isRoot) {\n await fs.writeFile(determinateIdentityFile, hashes, \"utf-8\");\n } else {\n return sudoWriteCorrelationHashes(hashes);\n }\n}\n\nexport abstract class DetSysAction {\n nixStoreTrust: NixStoreTrust;\n strictMode: boolean;\n\n private actionOptions: ConfidentActionOptions;\n private exceptionAttachments: Map;\n private archOs: string;\n private executionPhase: ExecutionPhase;\n private nixSystem: string;\n private architectureFetchSuffix: string;\n private sourceParameters: SourceDef;\n private facts: Record;\n private events: DiagnosticEvent[];\n private identity: correlation.AnonymizedCorrelationHashes;\n private idsHost: IdsHost;\n private features: { [k: string]: Feature };\n private featureEventMetadata: { [k: string]: string | boolean };\n\n private determineExecutionPhase(): ExecutionPhase {\n const currentPhase = actionsCore.getState(STATE_KEY_EXECUTION_PHASE);\n if (currentPhase === \"\") {\n actionsCore.saveState(STATE_KEY_EXECUTION_PHASE, \"post\");\n return \"main\";\n } else {\n return \"post\";\n }\n }\n\n constructor(actionOptions: ActionOptions) {\n this.actionOptions = makeOptionsConfident(actionOptions);\n this.idsHost = new IdsHost(\n this.actionOptions.idsProjectName,\n actionOptions.diagnosticsSuffix,\n // Note: we don't use actionsCore.getInput('diagnostic-endpoint') on purpose:\n // getInput silently converts absent data to an empty string.\n process.env[\"INPUT_DIAGNOSTIC-ENDPOINT\"],\n );\n this.exceptionAttachments = new Map();\n this.nixStoreTrust = \"unknown\";\n this.strictMode = getBool(\"_internal-strict-mode\");\n\n if (\n getBoolOrUndefined(\n \"_internal-obliterate-actions-id-token-request-variables\",\n ) === true\n ) {\n process.env[\"ACTIONS_ID_TOKEN_REQUEST_URL\"] = undefined;\n process.env[\"ACTIONS_ID_TOKEN_REQUEST_TOKEN\"] = undefined;\n }\n\n this.features = {};\n this.featureEventMetadata = {};\n this.events = [];\n\n this.getCrossPhaseId();\n this.collectBacktraceSetup();\n\n // JSON sent to server\n /* eslint-disable camelcase */\n this.facts = {\n $lib: \"idslib\",\n $lib_version: pkgVersion,\n project: this.actionOptions.name,\n ids_project: this.actionOptions.idsProjectName,\n };\n\n const params = [\n [\"github_action_ref\", \"GITHUB_ACTION_REF\"],\n [\"github_action_repository\", \"GITHUB_ACTION_REPOSITORY\"],\n [\"github_event_name\", \"GITHUB_EVENT_NAME\"],\n [\"$os\", \"RUNNER_OS\"],\n [\"arch\", \"RUNNER_ARCH\"],\n ];\n for (const [target, env] of params) {\n const value = process.env[env];\n if (value) {\n this.facts[target] = value;\n }\n }\n\n this.identity = correlation.identify();\n this.archOs = platform.getArchOs();\n this.nixSystem = platform.getNixPlatform(this.archOs);\n\n this.facts.$app_name = `${this.actionOptions.name}/action`;\n this.facts.arch_os = this.archOs;\n this.facts.nix_system = this.nixSystem;\n\n {\n ghActionsCorePlatform\n .getDetails()\n // eslint-disable-next-line github/no-then\n .then((details) => {\n if (details.name !== \"unknown\") {\n this.addFact(FACT_OS, details.name);\n }\n if (details.version !== \"unknown\") {\n this.addFact(FACT_OS_VERSION, details.version);\n }\n })\n // eslint-disable-next-line github/no-then\n .catch((e: unknown) => {\n actionsCore.debug(\n `Failure getting platform details: ${stringifyError(e)}`,\n );\n });\n }\n\n this.executionPhase = this.determineExecutionPhase();\n this.facts.execution_phase = this.executionPhase;\n\n if (this.actionOptions.fetchStyle === \"gh-env-style\") {\n this.architectureFetchSuffix = this.archOs;\n } else if (this.actionOptions.fetchStyle === \"nix-style\") {\n this.architectureFetchSuffix = this.nixSystem;\n } else if (this.actionOptions.fetchStyle === \"universal\") {\n this.architectureFetchSuffix = \"universal\";\n } else {\n throw new Error(\n `fetchStyle ${this.actionOptions.fetchStyle} is not a valid style`,\n );\n }\n\n this.sourceParameters = constructSourceParameters(\n this.actionOptions.legacySourcePrefix,\n );\n\n this.recordEvent(`begin_${this.executionPhase}`);\n }\n\n /**\n * Attach a file to the diagnostics data in error conditions.\n *\n * The file at `location` doesn't need to exist when stapleFile is called.\n *\n * If the file doesn't exist or is unreadable when trying to staple the attachments, the JS error will be stored in a context value at `staple_failure_{name}`.\n * If the file is readable, the file's contents will be stored in a context value at `staple_value_{name}`.\n */\n stapleFile(name: string, location: string): void {\n this.exceptionAttachments.set(name, location);\n }\n\n /**\n * The main execution phase.\n */\n abstract main(): Promise;\n\n /**\n * The post execution phase.\n */\n abstract post(): Promise;\n\n /**\n * Execute the Action as defined.\n */\n execute(): void {\n // eslint-disable-next-line github/no-then\n this.executeAsync().catch((error: Error) => {\n // eslint-disable-next-line no-console\n console.log(error);\n process.exitCode = 1;\n });\n }\n\n getTemporaryName(): string {\n const tmpDir = process.env[\"RUNNER_TEMP\"] || tmpdir();\n return path.join(tmpDir, `${this.actionOptions.name}-${randomUUID()}`);\n }\n\n addFact(key: string, value: string | boolean | number): void {\n this.facts[key] = value;\n }\n\n async getDiagnosticsUrl(): Promise {\n return await this.idsHost.getDiagnosticsUrl();\n }\n\n getUniqueId(): string {\n return (\n this.identity.github_workflow_run_differentiator_hash ||\n process.env.RUNNER_TRACKING_ID ||\n randomUUID()\n );\n }\n\n // This ID will be saved in the action's state, to be persisted across phase steps\n getCrossPhaseId(): string {\n let crossPhaseId = actionsCore.getState(STATE_KEY_CROSS_PHASE_ID);\n\n if (crossPhaseId === \"\") {\n crossPhaseId = randomUUID();\n actionsCore.saveState(STATE_KEY_CROSS_PHASE_ID, crossPhaseId);\n }\n\n return crossPhaseId;\n }\n\n getCorrelationHashes(): correlation.AnonymizedCorrelationHashes {\n return this.identity;\n }\n\n recordEvent(\n eventName: string,\n context: Record = {},\n ): void {\n const prefixedName =\n eventName === \"$feature_flag_called\"\n ? eventName\n : `${this.actionOptions.eventPrefix}${eventName}`;\n\n this.events.push({\n name: prefixedName,\n\n // Use the anon distinct ID as the distinct ID until we actually have a distinct ID in the future\n distinct_id: this.identity.$anon_distinct_id,\n\n // distinct_id\n uuid: randomUUID(),\n timestamp: new Date(),\n\n properties: {\n ...context,\n ...this.identity,\n ...this.facts,\n ...Object.fromEntries(\n Object.entries(this.featureEventMetadata).map<\n [string, string | boolean]\n >(([name, variant]) => [`$feature/${name}`, variant]),\n ),\n },\n });\n }\n\n /**\n * Unpacks the closure returned by `fetchArtifact()`, imports the\n * contents into the Nix store, and returns the path of the executable at\n * `/nix/store/STORE_PATH/bin/${bin}`.\n */\n async unpackClosure(bin: string): Promise {\n const artifact = await this.fetchArtifact();\n const { stdout } = await promisify(exec)(\n `cat \"${artifact}\" | xz -d | nix-store --import`,\n );\n const paths = stdout.split(os.EOL);\n const lastPath = paths.at(-2);\n return `${lastPath}/bin/${bin}`;\n }\n\n /**\n * Fetches the executable at the URL determined by the `source-*` inputs and\n * other facts, `chmod`s it, and returns the path to the executable on disk.\n */\n async fetchExecutable(): Promise {\n const binaryPath = await this.fetchArtifact();\n await chmod(binaryPath, fs.constants.S_IXUSR | fs.constants.S_IXGRP);\n return binaryPath;\n }\n\n private get isMain(): boolean {\n return this.executionPhase === \"main\";\n }\n\n private get isPost(): boolean {\n return this.executionPhase === \"post\";\n }\n\n private async executeAsync(): Promise {\n try {\n await this.checkIn();\n\n const correlationHashes = JSON.stringify(this.getCorrelationHashes());\n process.env.DETSYS_CORRELATION = correlationHashes;\n try {\n await writeCorrelationHashes(correlationHashes);\n } catch (error) {\n this.recordEvent(EVENT_STORE_IDENTITY_FAILED, { error: String(error) });\n }\n\n if (!(await this.preflightRequireNix())) {\n this.recordEvent(EVENT_PREFLIGHT_REQUIRE_NIX_DENIED);\n return;\n } else {\n await this.preflightNixStoreInfo();\n await this.preflightNixVersion();\n this.addFact(FACT_NIX_STORE_TRUST, this.nixStoreTrust);\n }\n\n if (this.isMain) {\n await this.main();\n\n // Run the preflight of the nix version a second time so our \"shutdown\" events have updated version info.\n await this.preflightNixVersion();\n } else if (this.isPost) {\n await this.post();\n }\n this.addFact(FACT_ENDED_WITH_EXCEPTION, false);\n } catch (e: unknown) {\n this.addFact(FACT_ENDED_WITH_EXCEPTION, true);\n\n const reportable = stringifyError(e);\n\n this.addFact(FACT_FINAL_EXCEPTION, reportable);\n\n if (this.isPost) {\n actionsCore.warning(reportable);\n } else {\n actionsCore.setFailed(reportable);\n }\n\n const doGzip = promisify(gzip);\n\n const exceptionContext: Map = new Map();\n for (const [attachmentLabel, filePath] of this.exceptionAttachments) {\n try {\n const logText = readFileSync(filePath);\n const buf = await doGzip(logText);\n exceptionContext.set(\n `staple_value_${attachmentLabel}`,\n buf.toString(\"base64\"),\n );\n } catch (innerError: unknown) {\n exceptionContext.set(\n `staple_failure_${attachmentLabel}`,\n stringifyError(innerError),\n );\n }\n }\n\n this.recordEvent(EVENT_EXCEPTION, Object.fromEntries(exceptionContext));\n } finally {\n if (this.isPost) {\n await this.collectBacktraces();\n }\n\n await this.complete();\n }\n }\n\n async getClient(): Promise {\n return await this.idsHost.getGot(\n (incitingError: unknown, prevUrl: URL, nextUrl: URL) => {\n this.recordPlausibleTimeout(incitingError);\n\n this.recordEvent(\"ids-failover\", {\n previousUrl: prevUrl.toString(),\n nextUrl: nextUrl.toString(),\n });\n },\n );\n }\n\n private async checkIn(): Promise {\n const checkin = await this.requestCheckIn();\n if (checkin === undefined) {\n return;\n }\n\n this.features = checkin.options;\n for (const [key, feature] of Object.entries(this.features)) {\n this.featureEventMetadata[key] = feature.variant;\n }\n\n const impactSymbol: Map = new Map([\n [\"none\", \"⚪\"],\n [\"maintenance\", \"🛠️\"],\n [\"minor\", \"🟡\"],\n [\"major\", \"🟠\"],\n [\"critical\", \"🔴\"],\n ]);\n const defaultImpactSymbol = \"🔵\";\n\n if (checkin.status !== null) {\n const summaries: string[] = [];\n\n for (const incident of checkin.status.incidents) {\n summaries.push(\n `${impactSymbol.get(incident.impact) || defaultImpactSymbol} ${incident.status.replace(\"_\", \" \")}: ${incident.name} (${incident.shortlink})`,\n );\n }\n\n for (const maintenance of checkin.status.scheduled_maintenances) {\n summaries.push(\n `${impactSymbol.get(maintenance.impact) || defaultImpactSymbol} ${maintenance.status.replace(\"_\", \" \")}: ${maintenance.name} (${maintenance.shortlink})`,\n );\n }\n\n if (summaries.length > 0) {\n actionsCore.info(\n // Bright red, Bold, Underline\n `${\"\\u001b[0;31m\"}${\"\\u001b[1m\"}${\"\\u001b[4m\"}${checkin.status.page.name} Status`,\n );\n for (const notice of summaries) {\n actionsCore.info(notice);\n }\n actionsCore.info(`See: ${checkin.status.page.url}`);\n actionsCore.info(``);\n }\n }\n }\n\n getFeature(name: string): Feature | undefined {\n if (!this.features.hasOwnProperty(name)) {\n return undefined;\n }\n\n const result = this.features[name];\n if (result === undefined) {\n return undefined;\n }\n\n this.recordEvent(\"$feature_flag_called\", {\n $feature_flag: name,\n $feature_flag_response: result.variant,\n });\n\n return result;\n }\n\n /**\n * Check in to install.determinate.systems, to accomplish three things:\n *\n * 1. Preflight the server selected from IdsHost, to increase the chances of success.\n * 2. Fetch any incidents and maintenance events to let users know in case things are weird.\n * 3. Get feature flag data so we can gently roll out new features.\n */\n private async requestCheckIn(): Promise {\n for (\n let attemptsRemaining = 5;\n attemptsRemaining > 0;\n attemptsRemaining--\n ) {\n const checkInUrl = await this.getCheckInUrl();\n if (checkInUrl === undefined) {\n return undefined;\n }\n\n try {\n actionsCore.debug(`Preflighting via ${checkInUrl}`);\n\n const props = {\n // Use a distinct_id when we actually have one\n distinct_id: this.identity.$anon_distinct_id,\n anon_distinct_id: this.identity.$anon_distinct_id,\n groups: this.identity.$groups,\n person_properties: {\n ci: \"github\",\n\n ...this.identity,\n ...this.facts,\n },\n };\n\n return await (\n await this.getClient()\n )\n .post(checkInUrl, {\n json: props,\n timeout: {\n request: CHECK_IN_ENDPOINT_TIMEOUT_MS,\n },\n })\n .json();\n } catch (e: unknown) {\n this.recordPlausibleTimeout(e);\n actionsCore.debug(`Error checking in: ${stringifyError(e)}`);\n this.idsHost.markCurrentHostBroken();\n }\n }\n\n return undefined;\n }\n\n private recordPlausibleTimeout(e: unknown): void {\n // see: https://github.com/sindresorhus/got/blob/895e463fa699d6f2e4b2fc01ceb3b2bb9e157f4c/documentation/8-errors.md\n if (e instanceof TimeoutError && \"timings\" in e && \"request\" in e) {\n const reportContext: {\n [index: string]: string | number | undefined;\n } = {\n url: e.request.requestUrl?.toString(),\n retry_count: e.request.retryCount,\n };\n\n for (const [key, value] of Object.entries(e.timings.phases)) {\n if (Number.isFinite(value)) {\n reportContext[`timing_phase_${key}`] = value;\n }\n }\n\n this.recordEvent(\"timeout\", reportContext);\n }\n }\n\n /**\n * Fetch an artifact, such as a tarball, from the location determined by the\n * `source-*` inputs. If `source-binary` is specified, this will return a path\n * to a binary on disk; otherwise, the artifact will be downloaded from the\n * URL determined by the other `source-*` inputs (`source-url`, `source-pr`,\n * etc.).\n */\n private async fetchArtifact(): Promise {\n const sourceBinary = getStringOrNull(\"source-binary\");\n\n // If source-binary is set, use that. Otherwise fall back to the source-* parameters.\n if (sourceBinary !== null && sourceBinary !== \"\") {\n actionsCore.debug(`Using the provided source binary at ${sourceBinary}`);\n return sourceBinary;\n }\n\n actionsCore.startGroup(\n `Downloading ${this.actionOptions.name} for ${this.architectureFetchSuffix}`,\n );\n\n try {\n actionsCore.info(`Fetching from ${await this.getSourceUrl()}`);\n\n const correlatedUrl = await this.getSourceUrl();\n correlatedUrl.searchParams.set(\"ci\", \"github\");\n correlatedUrl.searchParams.set(\n \"correlation\",\n JSON.stringify(this.identity),\n );\n\n const versionCheckup = await (await this.getClient()).head(correlatedUrl);\n if (versionCheckup.headers.etag) {\n const v = versionCheckup.headers.etag;\n this.addFact(FACT_SOURCE_URL_ETAG, v);\n\n actionsCore.debug(\n `Checking the tool cache for ${await this.getSourceUrl()} at ${v}`,\n );\n const cached = await this.getCachedVersion(v);\n if (cached) {\n this.facts[FACT_ARTIFACT_FETCHED_FROM_CACHE] = true;\n actionsCore.debug(`Tool cache hit.`);\n return cached;\n }\n }\n\n this.facts[FACT_ARTIFACT_FETCHED_FROM_CACHE] = false;\n\n actionsCore.debug(\n `No match from the cache, re-fetching from the redirect: ${versionCheckup.url}`,\n );\n\n const destFile = this.getTemporaryName();\n\n const fetchStream = await this.downloadFile(\n new URL(versionCheckup.url),\n destFile,\n );\n\n if (fetchStream.response?.headers.etag) {\n const v = fetchStream.response.headers.etag;\n\n try {\n await this.saveCachedVersion(v, destFile);\n } catch (e: unknown) {\n actionsCore.debug(`Error caching the artifact: ${stringifyError(e)}`);\n }\n }\n\n return destFile;\n } catch (e: unknown) {\n this.recordPlausibleTimeout(e);\n throw e;\n } finally {\n actionsCore.endGroup();\n }\n }\n\n /**\n * A helper function for failing on error only if strict mode is enabled.\n * This is intended only for CI environments testing Actions themselves.\n */\n failOnError(msg: string): void {\n if (this.strictMode) {\n actionsCore.setFailed(`strict mode failure: ${msg}`);\n }\n }\n\n private async downloadFile(\n url: URL,\n destination: PathLike,\n ): Promise {\n const client = await this.getClient();\n\n return new Promise((resolve, reject) => {\n // Current stream handle\n let writeStream: WriteStream | undefined;\n\n // Sentinel condition in case we want to abort retrying due to FS issues\n let failed = false;\n\n const retry = (stream: Request): void => {\n if (writeStream) {\n writeStream.destroy();\n }\n\n writeStream = createWriteStream(destination, {\n encoding: \"binary\",\n mode: 0o755,\n });\n\n writeStream.once(\"error\", (error) => {\n // Set failed here since promise rejections don't impact control flow\n failed = true;\n reject(error);\n });\n\n writeStream.on(\"finish\", () => {\n if (!failed) {\n resolve(stream);\n }\n });\n\n stream.once(\"retry\", (_count, _error, createRetryStream) => {\n // Optional: check `failed' here in case you want to stop retrying\n retry(createRetryStream());\n });\n\n // Now that all the handlers have been set up we can pipe from the HTTP\n // stream to disk\n stream.pipe(writeStream);\n };\n\n // Begin the retry logic by giving it a fresh got.Request\n retry(client.stream(url));\n });\n }\n\n private async complete(): Promise {\n this.recordEvent(`complete_${this.executionPhase}`);\n await this.submitEvents();\n }\n\n private async getCheckInUrl(): Promise {\n const checkInUrl = await this.idsHost.getDynamicRootUrl();\n\n if (checkInUrl === undefined) {\n return undefined;\n }\n\n checkInUrl.pathname += \"check-in\";\n return checkInUrl;\n }\n\n private async getSourceUrl(): Promise {\n const p = this.sourceParameters;\n\n if (p.url) {\n this.addFact(FACT_SOURCE_URL, p.url);\n return new URL(p.url);\n }\n\n const fetchUrl = await this.idsHost.getRootUrl();\n fetchUrl.pathname += this.actionOptions.idsProjectName;\n\n if (p.tag) {\n fetchUrl.pathname += `/tag/${p.tag}`;\n } else if (p.pr) {\n fetchUrl.pathname += `/pr/${p.pr}`;\n } else if (p.branch) {\n fetchUrl.pathname += `/branch/${p.branch}`;\n } else if (p.revision) {\n fetchUrl.pathname += `/rev/${p.revision}`;\n } else {\n fetchUrl.pathname += `/stable`;\n }\n\n fetchUrl.pathname += `/${this.architectureFetchSuffix}`;\n\n this.addFact(FACT_SOURCE_URL, fetchUrl.toString());\n\n return fetchUrl;\n }\n\n private cacheKey(version: string): string {\n const cleanedVersion = version.replace(/[^a-zA-Z0-9-+.]/g, \"\");\n return `determinatesystem-${this.actionOptions.name}-${this.architectureFetchSuffix}-${cleanedVersion}`;\n }\n\n private async getCachedVersion(version: string): Promise {\n const startCwd = process.cwd();\n\n try {\n const tempDir = this.getTemporaryName();\n await mkdir(tempDir);\n process.chdir(tempDir);\n\n // extremely evil shit right here:\n process.env.GITHUB_WORKSPACE_BACKUP = process.env.GITHUB_WORKSPACE;\n delete process.env.GITHUB_WORKSPACE;\n\n if (\n await actionsCache.restoreCache(\n [this.actionOptions.name],\n this.cacheKey(version),\n [],\n undefined,\n true,\n )\n ) {\n this.recordEvent(EVENT_ARTIFACT_CACHE_HIT);\n return `${tempDir}/${this.actionOptions.name}`;\n }\n\n this.recordEvent(EVENT_ARTIFACT_CACHE_MISS);\n return undefined;\n } finally {\n process.env.GITHUB_WORKSPACE = process.env.GITHUB_WORKSPACE_BACKUP;\n delete process.env.GITHUB_WORKSPACE_BACKUP;\n process.chdir(startCwd);\n }\n }\n\n private async saveCachedVersion(\n version: string,\n toolPath: string,\n ): Promise {\n const startCwd = process.cwd();\n\n try {\n const tempDir = this.getTemporaryName();\n await mkdir(tempDir);\n process.chdir(tempDir);\n await copyFile(toolPath, `${tempDir}/${this.actionOptions.name}`);\n\n // extremely evil shit right here:\n process.env.GITHUB_WORKSPACE_BACKUP = process.env.GITHUB_WORKSPACE;\n delete process.env.GITHUB_WORKSPACE;\n\n await actionsCache.saveCache(\n [this.actionOptions.name],\n this.cacheKey(version),\n undefined,\n true,\n );\n this.recordEvent(EVENT_ARTIFACT_CACHE_PERSIST);\n } finally {\n process.env.GITHUB_WORKSPACE = process.env.GITHUB_WORKSPACE_BACKUP;\n delete process.env.GITHUB_WORKSPACE_BACKUP;\n process.chdir(startCwd);\n }\n }\n\n private collectBacktraceSetup(): void {\n if (!process.env.DETSYS_BACKTRACE_COLLECTOR) {\n actionsCore.exportVariable(\n \"DETSYS_BACKTRACE_COLLECTOR\",\n this.getCrossPhaseId(),\n );\n\n actionsCore.saveState(STATE_BACKTRACE_START_TIMESTAMP, Date.now());\n }\n }\n\n private async collectBacktraces(): Promise {\n try {\n if (process.env.DETSYS_BACKTRACE_COLLECTOR !== this.getCrossPhaseId()) {\n return;\n }\n\n const backtraces = await collectBacktraces(\n this.actionOptions.binaryNamePrefixes,\n this.actionOptions.binaryNamesDenyList,\n parseInt(actionsCore.getState(STATE_BACKTRACE_START_TIMESTAMP)),\n );\n actionsCore.debug(`Backtraces identified: ${backtraces.size}`);\n if (backtraces.size > 0) {\n this.recordEvent(EVENT_BACKTRACES, Object.fromEntries(backtraces));\n }\n } catch (innerError: unknown) {\n actionsCore.debug(\n `Error collecting backtraces: ${stringifyError(innerError)}`,\n );\n }\n }\n\n private async preflightRequireNix(): Promise {\n let nixLocation: string | undefined;\n\n const pathParts = (process.env[\"PATH\"] || \"\").split(\":\");\n for (const location of pathParts) {\n const candidateNix = path.join(location, \"nix\");\n\n try {\n await fs.access(candidateNix, fs.constants.X_OK);\n actionsCore.debug(`Found Nix at ${candidateNix}`);\n nixLocation = candidateNix;\n break;\n } catch {\n actionsCore.debug(`Nix not at ${candidateNix}`);\n }\n }\n this.addFact(FACT_NIX_LOCATION, nixLocation || \"\");\n\n if (this.actionOptions.requireNix === \"ignore\") {\n return true;\n }\n\n const currentNotFoundState = actionsCore.getState(STATE_KEY_NIX_NOT_FOUND);\n if (currentNotFoundState === STATE_NOT_FOUND) {\n // It was previously not found, so don't run subsequent actions\n return false;\n }\n\n if (nixLocation !== undefined) {\n return true;\n }\n actionsCore.saveState(STATE_KEY_NIX_NOT_FOUND, STATE_NOT_FOUND);\n\n switch (this.actionOptions.requireNix) {\n case \"fail\":\n actionsCore.setFailed(\n [\n \"This action can only be used when Nix is installed.\",\n \"Add `- uses: DeterminateSystems/determinate-nix-action@v3` earlier in your workflow.\",\n ].join(\" \"),\n );\n break;\n case \"warn\":\n actionsCore.warning(\n [\n \"This action is in no-op mode because Nix is not installed.\",\n \"Add `- uses: DeterminateSystems/determinate-nix-action@v3` earlier in your workflow.\",\n ].join(\" \"),\n );\n break;\n }\n\n return false;\n }\n\n private async preflightNixStoreInfo(): Promise {\n let output = \"\";\n\n const options: actionsExec.ExecOptions = {};\n options.silent = true;\n options.listeners = {\n stdout: (data) => {\n output += data.toString();\n },\n };\n\n try {\n output = \"\";\n await actionsExec.exec(\"nix\", [\"store\", \"info\", \"--json\"], options);\n this.addFact(FACT_NIX_STORE_CHECK_METHOD, \"info\");\n } catch {\n try {\n // reset output\n output = \"\";\n await actionsExec.exec(\"nix\", [\"store\", \"ping\", \"--json\"], options);\n this.addFact(FACT_NIX_STORE_CHECK_METHOD, \"ping\");\n } catch {\n this.addFact(FACT_NIX_STORE_CHECK_METHOD, \"none\");\n return;\n }\n }\n\n try {\n const parsed = JSON.parse(output);\n if (parsed.trusted === 1) {\n this.nixStoreTrust = \"trusted\";\n } else if (parsed.trusted === 0) {\n this.nixStoreTrust = \"untrusted\";\n } else if (parsed.trusted !== undefined) {\n this.addFact(\n FACT_NIX_STORE_CHECK_ERROR,\n `Mysterious trusted value: ${JSON.stringify(parsed.trusted)}`,\n );\n }\n\n this.addFact(FACT_NIX_STORE_VERSION, JSON.stringify(parsed.version));\n } catch (e: unknown) {\n this.addFact(FACT_NIX_STORE_CHECK_ERROR, stringifyError(e));\n }\n }\n\n private async preflightNixVersion(): Promise {\n let output = \"unknown\";\n\n try {\n ({ stdout: output } = await actionsExec.getExecOutput(\n \"nix\",\n [\"--version\"],\n {\n silent: true,\n },\n ));\n output = output.trim() || \"unknown\";\n } catch {\n // That's fine.\n }\n\n this.addFact(FACT_NIX_VERSION, output);\n }\n\n private async submitEvents(): Promise {\n const diagnosticsUrl = await this.idsHost.getDiagnosticsUrl();\n if (diagnosticsUrl === undefined) {\n actionsCore.debug(\n \"Diagnostics are disabled. Not sending the following events:\",\n );\n actionsCore.debug(JSON.stringify(this.events, undefined, 2));\n return;\n }\n\n const batch = {\n sent_at: new Date(),\n batch: this.events,\n };\n\n try {\n await (\n await this.getClient()\n ).post(diagnosticsUrl, {\n json: batch,\n timeout: {\n request: DIAGNOSTIC_ENDPOINT_TIMEOUT_MS,\n },\n });\n } catch (err: unknown) {\n this.recordPlausibleTimeout(err);\n\n actionsCore.debug(\n `Error submitting diagnostics event to ${diagnosticsUrl}: ${stringifyError(err)}`,\n );\n }\n this.events = [];\n }\n}\n\nfunction stringifyError(error: unknown): string {\n return error instanceof Error || typeof error == \"string\"\n ? error.toString()\n : JSON.stringify(error);\n}\n\nfunction makeOptionsConfident(\n actionOptions: ActionOptions,\n): ConfidentActionOptions {\n const idsProjectName = actionOptions.idsProjectName ?? actionOptions.name;\n\n const finalOpts: ConfidentActionOptions = {\n name: actionOptions.name,\n idsProjectName,\n eventPrefix: actionOptions.eventPrefix || \"action:\",\n fetchStyle: actionOptions.fetchStyle,\n legacySourcePrefix: actionOptions.legacySourcePrefix,\n requireNix: actionOptions.requireNix,\n binaryNamePrefixes: actionOptions.binaryNamePrefixes ?? [\n \"nix\",\n \"determinate-nixd\",\n actionOptions.name,\n ],\n binaryNamesDenyList:\n actionOptions.binaryNamePrefixes ?? PROGRAM_NAME_CRASH_DENY_LIST,\n };\n\n actionsCore.debug(\"idslib options:\");\n actionsCore.debug(JSON.stringify(finalOpts, undefined, 2));\n\n return finalOpts;\n}\n\n// Public exports from other files\nexport {\n CheckIn,\n Feature,\n Incident,\n Maintenance,\n Page,\n StatusSummary,\n} from \"./check-in.js\";\nexport { AnonymizedCorrelationHashes } from \"./correlation.js\";\nexport { stringifyError } from \"./errors.js\";\nexport { IdsHost } from \"./ids-host.js\";\nexport { SourceDef } from \"./sourcedef.js\";\nexport * as inputs from \"./inputs.js\";\nexport * as platform from \"./platform.js\";\n"],"mappings":"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","names":["error","os","platform","arch","actionsCore","exec","readFile","promisify","actionsCore","actionsCore","error","actionsCore","actionsCore","actionsCore","actionsCore","exec","randomUUID","readFileSync","fs","os","promisify","gzip","fs","stringifyError","error","randomUUID","promisify","exec","gzip","readFileSync"]} \ No newline at end of file diff --git a/package.json b/package.json index 678d70b..fda7e03 100644 --- a/package.json +++ b/package.json @@ -27,27 +27,27 @@ }, "homepage": "https://github.com/DeterminateSystems/detsys-ts#readme", "dependencies": { - "@actions/cache": "^4.0.3", + "@actions/cache": "^4.0.5", "@actions/core": "^1.11.1", "@actions/exec": "^1.1.1", - "got": "^14.4.7", + "got": "^14.4.8", "type-fest": "^4.41.0" }, "devDependencies": { "@trivago/prettier-plugin-sort-imports": "^5.2.2", - "@types/node": "^22.17.0", - "@typescript-eslint/eslint-plugin": "^8.38.0", - "eslint": "^9.32.0", + "@types/node": "^22.18.0", + "@typescript-eslint/eslint-plugin": "^8.42.0", + "eslint": "^9.34.0", "eslint-import-resolver-typescript": "^4.4.4", "eslint-plugin-github": "^6.0.0", "eslint-plugin-import": "^2.32.0", - "eslint-plugin-prettier": "^5.5.3", + "eslint-plugin-prettier": "^5.5.4", "globals": "^16.3.0", "prettier": "^3.6.2", "tsup": "^8.5.0", - "typedoc": "^0.28.8", - "typescript": "^5.8.3", - "typescript-eslint": "^8.38.0", + "typedoc": "^0.28.12", + "typescript": "^5.9.2", + "typescript-eslint": "^8.42.0", "vitest": "^3.2.4" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 88a6ff2..808d922 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -9,8 +9,8 @@ importers: .: dependencies: '@actions/cache': - specifier: ^4.0.3 - version: 4.0.3 + specifier: ^4.0.5 + version: 4.0.5 '@actions/core': specifier: ^1.11.1 version: 1.11.1 @@ -18,8 +18,8 @@ importers: specifier: ^1.1.1 version: 1.1.1 got: - specifier: ^14.4.7 - version: 14.4.7 + specifier: ^14.4.8 + version: 14.4.8 type-fest: specifier: ^4.41.0 version: 4.41.0 @@ -28,26 +28,26 @@ importers: specifier: ^5.2.2 version: 5.2.2(prettier@3.6.2) '@types/node': - specifier: ^22.17.0 - version: 22.17.0 + specifier: ^22.18.0 + version: 22.18.0 '@typescript-eslint/eslint-plugin': - specifier: ^8.38.0 - version: 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.8.3))(eslint@9.32.0)(typescript@5.8.3) + specifier: ^8.42.0 + version: 8.42.0(@typescript-eslint/parser@8.42.0(eslint@9.34.0)(typescript@5.9.2))(eslint@9.34.0)(typescript@5.9.2) eslint: - specifier: ^9.32.0 - version: 9.32.0 + specifier: ^9.34.0 + version: 9.34.0 eslint-import-resolver-typescript: specifier: ^4.4.4 - version: 4.4.4(eslint-plugin-import@2.32.0)(eslint@9.32.0) + version: 4.4.4(eslint-plugin-import@2.32.0)(eslint@9.34.0) eslint-plugin-github: specifier: ^6.0.0 - version: 6.0.0(eslint-import-resolver-typescript@4.4.4)(eslint@9.32.0) + version: 6.0.0(eslint-import-resolver-typescript@4.4.4)(eslint@9.34.0) eslint-plugin-import: specifier: ^2.32.0 - version: 2.32.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.8.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.32.0) + version: 2.32.0(@typescript-eslint/parser@8.42.0(eslint@9.34.0)(typescript@5.9.2))(eslint-import-resolver-typescript@4.4.4)(eslint@9.34.0) eslint-plugin-prettier: - specifier: ^5.5.3 - version: 5.5.3(eslint-config-prettier@10.1.8(eslint@9.32.0))(eslint@9.32.0)(prettier@3.6.2) + specifier: ^5.5.4 + version: 5.5.4(eslint-config-prettier@10.1.8(eslint@9.34.0))(eslint@9.34.0)(prettier@3.6.2) globals: specifier: ^16.3.0 version: 16.3.0 @@ -56,24 +56,24 @@ importers: version: 3.6.2 tsup: specifier: ^8.5.0 - version: 8.5.0(postcss@8.5.6)(typescript@5.8.3)(yaml@2.8.0) + version: 8.5.0(postcss@8.5.6)(typescript@5.9.2)(yaml@2.8.1) typedoc: - specifier: ^0.28.8 - version: 0.28.8(typescript@5.8.3) + specifier: ^0.28.12 + version: 0.28.12(typescript@5.9.2) typescript: - specifier: ^5.8.3 - version: 5.8.3 + specifier: ^5.9.2 + version: 5.9.2 typescript-eslint: - specifier: ^8.38.0 - version: 8.38.0(eslint@9.32.0)(typescript@5.8.3) + specifier: ^8.42.0 + version: 8.42.0(eslint@9.34.0)(typescript@5.9.2) vitest: specifier: ^3.2.4 - version: 3.2.4(@types/node@22.17.0)(yaml@2.8.0) + version: 3.2.4(@types/node@22.18.0)(yaml@2.8.1) packages: - '@actions/cache@4.0.3': - resolution: {integrity: sha512-SvrqFtYJ7I48A/uXNkoJrnukx5weQv1fGquhs3+4nkByZThBH109KTIqj5x/cGV7JGNvb8dLPVywUOqX1fjiXg==} + '@actions/cache@4.0.5': + resolution: {integrity: sha512-RjLz1/vvntOfp3FpkY3wB0MjVRbLq7bfQEuQG9UUTKwdtcYmFrKVmuD+9B6ADbzbkSfHM+dM4sMjdr3R4XIkFg==} '@actions/core@1.11.1': resolution: {integrity: sha512-hXJCSrkwfA46Vd9Z3q4cpEpHB1rL5NG04+/rbqW9d3+CSvtB1tYe8UTpAlixa1vj0m/ULglfEK2UKxMGxCxv5A==} @@ -153,8 +153,8 @@ packages: resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} - '@babel/generator@7.28.0': - resolution: {integrity: sha512-lJjzvrbEeWrhB4P3QBsH7tey117PjLZnDbLiQEKjQ/fNJTjuq4HSqgFA+UNSwZT8D7dxxbnuSBMsa1lrWzKlQg==} + '@babel/generator@7.28.3': + resolution: {integrity: sha512-3lSpxGgvnmZznmBkCRnVREPUFJv2wrv9iAoFDvADJc0ypmdOxdUtcLeBgBJ6zE0PMeTKnxeQzyk0xTBq4Ep7zw==} engines: {node: '>=6.9.0'} '@babel/helper-globals@7.28.0': @@ -169,8 +169,8 @@ packages: resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} engines: {node: '>=6.9.0'} - '@babel/parser@7.28.0': - resolution: {integrity: sha512-jVZGvOxOuNSsuQuLRTh13nU0AogFlw32w/MT+LV6D3sP5WdbW61E77RnkbaO2dUvmPAYrBDJXGn5gGS6tH4j8g==} + '@babel/parser@7.28.3': + resolution: {integrity: sha512-7+Ey1mAgYqFAx2h0RuoxcQT5+MlG3GTV0TQrgr7/ZliKsm/MNDxVVutlWaziMq7wJNAz8MTqz55XLpWvva6StA==} engines: {node: '>=6.0.0'} hasBin: true @@ -178,187 +178,181 @@ packages: resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.28.0': - resolution: {integrity: sha512-mGe7UK5wWyh0bKRfupsUchrQGqvDbZDbKJw+kcRGSmdHVYrv+ltd0pnpDTVpiTqnaBru9iEvA8pz8W46v0Amwg==} + '@babel/traverse@7.28.3': + resolution: {integrity: sha512-7w4kZYHneL3A6NP2nxzHvT3HCZ7puDZZjFMqDpBPECub79sTtSO5CGXDkKrTQq8ksAwfD/XI2MRFX23njdDaIQ==} engines: {node: '>=6.9.0'} '@babel/types@7.28.2': resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} engines: {node: '>=6.9.0'} - '@bufbuild/protobuf@2.6.2': - resolution: {integrity: sha512-vLu7SRY84CV/Dd+NUdgtidn2hS5hSMUC1vDBY0VcviTdgRYkU43vIz3vIFbmx14cX1r+mM7WjzE5Fl1fGEM0RQ==} + '@emnapi/core@1.5.0': + resolution: {integrity: sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==} - '@bufbuild/protoplugin@2.6.2': - resolution: {integrity: sha512-EYVPnRXOkWuqBDqRYhLsquOnk5SGU2Ce3lAOBDEZyntHwu0xcjcIZeTI+as+HnArtcJwrXK0u6x3Rtmt2IcHlA==} + '@emnapi/runtime@1.5.0': + resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==} - '@emnapi/core@1.4.5': - resolution: {integrity: sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==} + '@emnapi/wasi-threads@1.1.0': + resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} - '@emnapi/runtime@1.4.5': - resolution: {integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==} - - '@emnapi/wasi-threads@1.0.4': - resolution: {integrity: sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==} - - '@esbuild/aix-ppc64@0.25.8': - resolution: {integrity: sha512-urAvrUedIqEiFR3FYSLTWQgLu5tb+m0qZw0NBEasUeo6wuqatkMDaRT+1uABiGXEu5vqgPd7FGE1BhsAIy9QVA==} + '@esbuild/aix-ppc64@0.25.9': + resolution: {integrity: sha512-OaGtL73Jck6pBKjNIe24BnFE6agGl+6KxDtTfHhy1HmhthfKouEcOhqpSL64K4/0WCtbKFLOdzD/44cJ4k9opA==} engines: {node: '>=18'} cpu: [ppc64] os: [aix] - '@esbuild/android-arm64@0.25.8': - resolution: {integrity: sha512-OD3p7LYzWpLhZEyATcTSJ67qB5D+20vbtr6vHlHWSQYhKtzUYrETuWThmzFpZtFsBIxRvhO07+UgVA9m0i/O1w==} + '@esbuild/android-arm64@0.25.9': + resolution: {integrity: sha512-IDrddSmpSv51ftWslJMvl3Q2ZT98fUSL2/rlUXuVqRXHCs5EUF1/f+jbjF5+NG9UffUDMCiTyh8iec7u8RlTLg==} engines: {node: '>=18'} cpu: [arm64] os: [android] - '@esbuild/android-arm@0.25.8': - resolution: {integrity: sha512-RONsAvGCz5oWyePVnLdZY/HHwA++nxYWIX1atInlaW6SEkwq6XkP3+cb825EUcRs5Vss/lGh/2YxAb5xqc07Uw==} + '@esbuild/android-arm@0.25.9': + resolution: {integrity: sha512-5WNI1DaMtxQ7t7B6xa572XMXpHAaI/9Hnhk8lcxF4zVN4xstUgTlvuGDorBguKEnZO70qwEcLpfifMLoxiPqHQ==} engines: {node: '>=18'} cpu: [arm] os: [android] - '@esbuild/android-x64@0.25.8': - resolution: {integrity: sha512-yJAVPklM5+4+9dTeKwHOaA+LQkmrKFX96BM0A/2zQrbS6ENCmxc4OVoBs5dPkCCak2roAD+jKCdnmOqKszPkjA==} + '@esbuild/android-x64@0.25.9': + resolution: {integrity: sha512-I853iMZ1hWZdNllhVZKm34f4wErd4lMyeV7BLzEExGEIZYsOzqDWDf+y082izYUE8gtJnYHdeDpN/6tUdwvfiw==} engines: {node: '>=18'} cpu: [x64] os: [android] - '@esbuild/darwin-arm64@0.25.8': - resolution: {integrity: sha512-Jw0mxgIaYX6R8ODrdkLLPwBqHTtYHJSmzzd+QeytSugzQ0Vg4c5rDky5VgkoowbZQahCbsv1rT1KW72MPIkevw==} + '@esbuild/darwin-arm64@0.25.9': + resolution: {integrity: sha512-XIpIDMAjOELi/9PB30vEbVMs3GV1v2zkkPnuyRRURbhqjyzIINwj+nbQATh4H9GxUgH1kFsEyQMxwiLFKUS6Rg==} engines: {node: '>=18'} cpu: [arm64] os: [darwin] - '@esbuild/darwin-x64@0.25.8': - resolution: {integrity: sha512-Vh2gLxxHnuoQ+GjPNvDSDRpoBCUzY4Pu0kBqMBDlK4fuWbKgGtmDIeEC081xi26PPjn+1tct+Bh8FjyLlw1Zlg==} + '@esbuild/darwin-x64@0.25.9': + resolution: {integrity: sha512-jhHfBzjYTA1IQu8VyrjCX4ApJDnH+ez+IYVEoJHeqJm9VhG9Dh2BYaJritkYK3vMaXrf7Ogr/0MQ8/MeIefsPQ==} engines: {node: '>=18'} cpu: [x64] os: [darwin] - '@esbuild/freebsd-arm64@0.25.8': - resolution: {integrity: sha512-YPJ7hDQ9DnNe5vxOm6jaie9QsTwcKedPvizTVlqWG9GBSq+BuyWEDazlGaDTC5NGU4QJd666V0yqCBL2oWKPfA==} + '@esbuild/freebsd-arm64@0.25.9': + resolution: {integrity: sha512-z93DmbnY6fX9+KdD4Ue/H6sYs+bhFQJNCPZsi4XWJoYblUqT06MQUdBCpcSfuiN72AbqeBFu5LVQTjfXDE2A6Q==} engines: {node: '>=18'} cpu: [arm64] os: [freebsd] - '@esbuild/freebsd-x64@0.25.8': - resolution: {integrity: sha512-MmaEXxQRdXNFsRN/KcIimLnSJrk2r5H8v+WVafRWz5xdSVmWLoITZQXcgehI2ZE6gioE6HirAEToM/RvFBeuhw==} + '@esbuild/freebsd-x64@0.25.9': + resolution: {integrity: sha512-mrKX6H/vOyo5v71YfXWJxLVxgy1kyt1MQaD8wZJgJfG4gq4DpQGpgTB74e5yBeQdyMTbgxp0YtNj7NuHN0PoZg==} engines: {node: '>=18'} cpu: [x64] os: [freebsd] - '@esbuild/linux-arm64@0.25.8': - resolution: {integrity: sha512-WIgg00ARWv/uYLU7lsuDK00d/hHSfES5BzdWAdAig1ioV5kaFNrtK8EqGcUBJhYqotlUByUKz5Qo6u8tt7iD/w==} + '@esbuild/linux-arm64@0.25.9': + resolution: {integrity: sha512-BlB7bIcLT3G26urh5Dmse7fiLmLXnRlopw4s8DalgZ8ef79Jj4aUcYbk90g8iCa2467HX8SAIidbL7gsqXHdRw==} engines: {node: '>=18'} cpu: [arm64] os: [linux] - '@esbuild/linux-arm@0.25.8': - resolution: {integrity: sha512-FuzEP9BixzZohl1kLf76KEVOsxtIBFwCaLupVuk4eFVnOZfU+Wsn+x5Ryam7nILV2pkq2TqQM9EZPsOBuMC+kg==} + '@esbuild/linux-arm@0.25.9': + resolution: {integrity: sha512-HBU2Xv78SMgaydBmdor38lg8YDnFKSARg1Q6AT0/y2ezUAKiZvc211RDFHlEZRFNRVhcMamiToo7bDx3VEOYQw==} engines: {node: '>=18'} cpu: [arm] os: [linux] - '@esbuild/linux-ia32@0.25.8': - resolution: {integrity: sha512-A1D9YzRX1i+1AJZuFFUMP1E9fMaYY+GnSQil9Tlw05utlE86EKTUA7RjwHDkEitmLYiFsRd9HwKBPEftNdBfjg==} + '@esbuild/linux-ia32@0.25.9': + resolution: {integrity: sha512-e7S3MOJPZGp2QW6AK6+Ly81rC7oOSerQ+P8L0ta4FhVi+/j/v2yZzx5CqqDaWjtPFfYz21Vi1S0auHrap3Ma3A==} engines: {node: '>=18'} cpu: [ia32] os: [linux] - '@esbuild/linux-loong64@0.25.8': - resolution: {integrity: sha512-O7k1J/dwHkY1RMVvglFHl1HzutGEFFZ3kNiDMSOyUrB7WcoHGf96Sh+64nTRT26l3GMbCW01Ekh/ThKM5iI7hQ==} + '@esbuild/linux-loong64@0.25.9': + resolution: {integrity: sha512-Sbe10Bnn0oUAB2AalYztvGcK+o6YFFA/9829PhOCUS9vkJElXGdphz0A3DbMdP8gmKkqPmPcMJmJOrI3VYB1JQ==} engines: {node: '>=18'} cpu: [loong64] os: [linux] - '@esbuild/linux-mips64el@0.25.8': - resolution: {integrity: sha512-uv+dqfRazte3BzfMp8PAQXmdGHQt2oC/y2ovwpTteqrMx2lwaksiFZ/bdkXJC19ttTvNXBuWH53zy/aTj1FgGw==} + '@esbuild/linux-mips64el@0.25.9': + resolution: {integrity: sha512-YcM5br0mVyZw2jcQeLIkhWtKPeVfAerES5PvOzaDxVtIyZ2NUBZKNLjC5z3/fUlDgT6w89VsxP2qzNipOaaDyA==} engines: {node: '>=18'} cpu: [mips64el] os: [linux] - '@esbuild/linux-ppc64@0.25.8': - resolution: {integrity: sha512-GyG0KcMi1GBavP5JgAkkstMGyMholMDybAf8wF5A70CALlDM2p/f7YFE7H92eDeH/VBtFJA5MT4nRPDGg4JuzQ==} + '@esbuild/linux-ppc64@0.25.9': + resolution: {integrity: sha512-++0HQvasdo20JytyDpFvQtNrEsAgNG2CY1CLMwGXfFTKGBGQT3bOeLSYE2l1fYdvML5KUuwn9Z8L1EWe2tzs1w==} engines: {node: '>=18'} cpu: [ppc64] os: [linux] - '@esbuild/linux-riscv64@0.25.8': - resolution: {integrity: sha512-rAqDYFv3yzMrq7GIcen3XP7TUEG/4LK86LUPMIz6RT8A6pRIDn0sDcvjudVZBiiTcZCY9y2SgYX2lgK3AF+1eg==} + '@esbuild/linux-riscv64@0.25.9': + resolution: {integrity: sha512-uNIBa279Y3fkjV+2cUjx36xkx7eSjb8IvnL01eXUKXez/CBHNRw5ekCGMPM0BcmqBxBcdgUWuUXmVWwm4CH9kg==} engines: {node: '>=18'} cpu: [riscv64] os: [linux] - '@esbuild/linux-s390x@0.25.8': - resolution: {integrity: sha512-Xutvh6VjlbcHpsIIbwY8GVRbwoviWT19tFhgdA7DlenLGC/mbc3lBoVb7jxj9Z+eyGqvcnSyIltYUrkKzWqSvg==} + '@esbuild/linux-s390x@0.25.9': + resolution: {integrity: sha512-Mfiphvp3MjC/lctb+7D287Xw1DGzqJPb/J2aHHcHxflUo+8tmN/6d4k6I2yFR7BVo5/g7x2Monq4+Yew0EHRIA==} engines: {node: '>=18'} cpu: [s390x] os: [linux] - '@esbuild/linux-x64@0.25.8': - resolution: {integrity: sha512-ASFQhgY4ElXh3nDcOMTkQero4b1lgubskNlhIfJrsH5OKZXDpUAKBlNS0Kx81jwOBp+HCeZqmoJuihTv57/jvQ==} + '@esbuild/linux-x64@0.25.9': + resolution: {integrity: sha512-iSwByxzRe48YVkmpbgoxVzn76BXjlYFXC7NvLYq+b+kDjyyk30J0JY47DIn8z1MO3K0oSl9fZoRmZPQI4Hklzg==} engines: {node: '>=18'} cpu: [x64] os: [linux] - '@esbuild/netbsd-arm64@0.25.8': - resolution: {integrity: sha512-d1KfruIeohqAi6SA+gENMuObDbEjn22olAR7egqnkCD9DGBG0wsEARotkLgXDu6c4ncgWTZJtN5vcgxzWRMzcw==} + '@esbuild/netbsd-arm64@0.25.9': + resolution: {integrity: sha512-9jNJl6FqaUG+COdQMjSCGW4QiMHH88xWbvZ+kRVblZsWrkXlABuGdFJ1E9L7HK+T0Yqd4akKNa/lO0+jDxQD4Q==} engines: {node: '>=18'} cpu: [arm64] os: [netbsd] - '@esbuild/netbsd-x64@0.25.8': - resolution: {integrity: sha512-nVDCkrvx2ua+XQNyfrujIG38+YGyuy2Ru9kKVNyh5jAys6n+l44tTtToqHjino2My8VAY6Lw9H7RI73XFi66Cg==} + '@esbuild/netbsd-x64@0.25.9': + resolution: {integrity: sha512-RLLdkflmqRG8KanPGOU7Rpg829ZHu8nFy5Pqdi9U01VYtG9Y0zOG6Vr2z4/S+/3zIyOxiK6cCeYNWOFR9QP87g==} engines: {node: '>=18'} cpu: [x64] os: [netbsd] - '@esbuild/openbsd-arm64@0.25.8': - resolution: {integrity: sha512-j8HgrDuSJFAujkivSMSfPQSAa5Fxbvk4rgNAS5i3K+r8s1X0p1uOO2Hl2xNsGFppOeHOLAVgYwDVlmxhq5h+SQ==} + '@esbuild/openbsd-arm64@0.25.9': + resolution: {integrity: sha512-YaFBlPGeDasft5IIM+CQAhJAqS3St3nJzDEgsgFixcfZeyGPCd6eJBWzke5piZuZ7CtL656eOSYKk4Ls2C0FRQ==} engines: {node: '>=18'} cpu: [arm64] os: [openbsd] - '@esbuild/openbsd-x64@0.25.8': - resolution: {integrity: sha512-1h8MUAwa0VhNCDp6Af0HToI2TJFAn1uqT9Al6DJVzdIBAd21m/G0Yfc77KDM3uF3T/YaOgQq3qTJHPbTOInaIQ==} + '@esbuild/openbsd-x64@0.25.9': + resolution: {integrity: sha512-1MkgTCuvMGWuqVtAvkpkXFmtL8XhWy+j4jaSO2wxfJtilVCi0ZE37b8uOdMItIHz4I6z1bWWtEX4CJwcKYLcuA==} engines: {node: '>=18'} cpu: [x64] os: [openbsd] - '@esbuild/openharmony-arm64@0.25.8': - resolution: {integrity: sha512-r2nVa5SIK9tSWd0kJd9HCffnDHKchTGikb//9c7HX+r+wHYCpQrSgxhlY6KWV1nFo1l4KFbsMlHk+L6fekLsUg==} + '@esbuild/openharmony-arm64@0.25.9': + resolution: {integrity: sha512-4Xd0xNiMVXKh6Fa7HEJQbrpP3m3DDn43jKxMjxLLRjWnRsfxjORYJlXPO4JNcXtOyfajXorRKY9NkOpTHptErg==} engines: {node: '>=18'} cpu: [arm64] os: [openharmony] - '@esbuild/sunos-x64@0.25.8': - resolution: {integrity: sha512-zUlaP2S12YhQ2UzUfcCuMDHQFJyKABkAjvO5YSndMiIkMimPmxA+BYSBikWgsRpvyxuRnow4nS5NPnf9fpv41w==} + '@esbuild/sunos-x64@0.25.9': + resolution: {integrity: sha512-WjH4s6hzo00nNezhp3wFIAfmGZ8U7KtrJNlFMRKxiI9mxEK1scOMAaa9i4crUtu+tBr+0IN6JCuAcSBJZfnphw==} engines: {node: '>=18'} cpu: [x64] os: [sunos] - '@esbuild/win32-arm64@0.25.8': - resolution: {integrity: sha512-YEGFFWESlPva8hGL+zvj2z/SaK+pH0SwOM0Nc/d+rVnW7GSTFlLBGzZkuSU9kFIGIo8q9X3ucpZhu8PDN5A2sQ==} + '@esbuild/win32-arm64@0.25.9': + resolution: {integrity: sha512-mGFrVJHmZiRqmP8xFOc6b84/7xa5y5YvR1x8djzXpJBSv/UsNK6aqec+6JDjConTgvvQefdGhFDAs2DLAds6gQ==} engines: {node: '>=18'} cpu: [arm64] os: [win32] - '@esbuild/win32-ia32@0.25.8': - resolution: {integrity: sha512-hiGgGC6KZ5LZz58OL/+qVVoZiuZlUYlYHNAmczOm7bs2oE1XriPFi5ZHHrS8ACpV5EjySrnoCKmcbQMN+ojnHg==} + '@esbuild/win32-ia32@0.25.9': + resolution: {integrity: sha512-b33gLVU2k11nVx1OhX3C8QQP6UHQK4ZtN56oFWvVXvz2VkDoe6fbG8TOgHFxEvqeqohmRnIHe5A1+HADk4OQww==} engines: {node: '>=18'} cpu: [ia32] os: [win32] - '@esbuild/win32-x64@0.25.8': - resolution: {integrity: sha512-cn3Yr7+OaaZq1c+2pe+8yxC8E144SReCQjN6/2ynubzYjvyqZjTXfQJpAcQpsdJq3My7XADANiYGHoFC69pLQw==} + '@esbuild/win32-x64@0.25.9': + resolution: {integrity: sha512-PPOl1mi6lpLNQxnGoyAfschAodRFYXJ+9fs6WHXz7CSWKbOqiMZsubC+BQsVKuul+3vKLuwTHsS2c2y9EoKwxQ==} engines: {node: '>=18'} cpu: [x64] os: [win32] - '@eslint-community/eslint-utils@4.7.0': - resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} + '@eslint-community/eslint-utils@4.8.0': + resolution: {integrity: sha512-MJQFqrZgcW0UNYLGOuQpey/oTN59vyWwplvCGZztn1cKz9agZPPYpJB7h2OMmuu7VLqkvEjN8feFZJmxNF9D+Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 @@ -367,8 +361,8 @@ packages: resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/compat@1.3.1': - resolution: {integrity: sha512-k8MHony59I5EPic6EQTCNOuPoVBnoYXkP+20xvwFjN7t0qI3ImyvyBgg+hIVPwC8JaxVjjUZld+cLfBLFDLucg==} + '@eslint/compat@1.3.2': + resolution: {integrity: sha512-jRNwzTbd6p2Rw4sZ1CgWRS8YMtqG15YyZf7zvb6gY2rB2u6n+2Z+ELW0GtL0fQgyl0pr4Y/BzBfng/BdsereRA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.40 || 9 @@ -380,36 +374,36 @@ packages: resolution: {integrity: sha512-ENIdc4iLu0d93HeYirvKmrzshzofPw6VkZRKQGe9Nv46ZnWUzcF1xV01dcvEg/1wXUR61OmmlSfyeyO7EvjLxQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/config-helpers@0.3.0': - resolution: {integrity: sha512-ViuymvFmcJi04qdZeDc2whTHryouGcDlaxPqarTD0ZE10ISpxGUVZGZDx4w01upyIynL3iu6IXH2bS1NhclQMw==} + '@eslint/config-helpers@0.3.1': + resolution: {integrity: sha512-xR93k9WhrDYpXHORXpxVL5oHj3Era7wo6k/Wd8/IsQNnZUTzkGS29lyn3nAT05v6ltUuTFVCCYDEGfy2Or/sPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.15.1': - resolution: {integrity: sha512-bkOp+iumZCCbt1K1CmWf0R9pM5yKpDv+ZXtvSyQpudrI9kuFLp+bM2WOPXImuD/ceQuaa8f5pj93Y7zyECIGNA==} + '@eslint/core@0.15.2': + resolution: {integrity: sha512-78Md3/Rrxh83gCxoUc0EiciuOHsIITzLy53m3d9UyiW8y9Dj2D29FeETqyKA+BRK76tnTp6RXWb3pCay8Oyomg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/eslintrc@3.3.1': resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.32.0': - resolution: {integrity: sha512-BBpRFZK3eX6uMLKz8WxFOBIFFcGFJ/g8XuwjTHCqHROSIsopI+ddn/d5Cfh36+7+e5edVS8dbSHnBNhrLEX0zg==} + '@eslint/js@9.34.0': + resolution: {integrity: sha512-EoyvqQnBNsV1CWaEJ559rxXL4c8V92gxirbawSmVUOWXlsRxxQXl6LmCpdUblgxgSkDIqKnhzba2SjRTI/A5Rw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.6': resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.3.4': - resolution: {integrity: sha512-Ul5l+lHEcw3L5+k8POx6r74mxEYKG5kOb6Xpy2gCRW6zweT6TEhAf8vhxGgjhqrd/VO/Dirhsb+1hNpD1ue9hw==} + '@eslint/plugin-kit@0.3.5': + resolution: {integrity: sha512-Z5kJ+wU3oA7MMIqVR9tyZRtjYPr4OC004Q4Rw7pgOKUOKkJfZ3O24nz3WYfGRpMDNmcOi3TwQOmgm7B7Tpii0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@fastify/busboy@2.1.1': resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} engines: {node: '>=14'} - '@gerrit0/mini-shiki@3.8.1': - resolution: {integrity: sha512-HVZW+8pxoOExr5ZMPK15U79jQAZTO/S6i5byQyyZGjtNj+qaYd82cizTncwFzTQgiLo8uUBym6vh+/1tfJklTw==} + '@gerrit0/mini-shiki@3.12.1': + resolution: {integrity: sha512-qA9/VGm7No0kxb7k0oKFT0DSJ6BtuMMtC7JQdZn9ElMALE9hjbyoaS13Y8OWr0qHwzh07KHt3Wbw34az/FLsrg==} '@github/browserslist-config@1.0.0': resolution: {integrity: sha512-gIhjdJp/c2beaIWWIlsXdqXVRUz3r2BxBCpfz/F3JXHvSAQ1paMYjLH+maEATtENg+k5eLV7gA+9yPp762ieuw==} @@ -418,18 +412,14 @@ packages: resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} engines: {node: '>=18.18.0'} - '@humanfs/node@0.16.6': - resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + '@humanfs/node@0.16.7': + resolution: {integrity: sha512-/zUx+yOsIrG4Y43Eh2peDeKCxlRt/gET6aHfaKpuq267qXdYDFViVHfMaLyygZOnl0kGWxFIgsBy8QFuTLUXEQ==} engines: {node: '>=18.18.0'} '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - '@humanwhocodes/retry@0.3.1': - resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} - engines: {node: '>=18.18'} - '@humanwhocodes/retry@0.4.3': resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} @@ -438,18 +428,18 @@ packages: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} - '@jridgewell/gen-mapping@0.3.12': - resolution: {integrity: sha512-OuLGC46TjB5BbN1dH8JULVVZY4WTdkF7tV9Ys6wLL1rubZnCMstOhNHueU5bLCrnRuDhKPDM4g6sw4Bel5Gzqg==} + '@jridgewell/gen-mapping@0.3.13': + resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==} '@jridgewell/resolve-uri@3.1.2': resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} engines: {node: '>=6.0.0'} - '@jridgewell/sourcemap-codec@1.5.4': - resolution: {integrity: sha512-VT2+G1VQs/9oz078bLrYbecdZKs912zQlkelYpuf+SXF+QvZDYJlbx/LSx+meSAwdDFnF8FVXW92AVjjkVmgFw==} + '@jridgewell/sourcemap-codec@1.5.5': + resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} - '@jridgewell/trace-mapping@0.3.29': - resolution: {integrity: sha512-uw6guiW/gcAGPDhLmd77/6lW8QLeiV5RUTsAX46Db6oLhGaVj4lhnPwb184s1bkc8kdVg/+h988dro8GRDpmYQ==} + '@jridgewell/trace-mapping@0.3.30': + resolution: {integrity: sha512-GQ7Nw5G2lTu/BtHTKfXhKHok2WGetd4XYcVKGx00SjAk8GMwgJM3zr6zORiPGuOE+/vkc90KtTosSSvaCjKb2Q==} '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} @@ -474,117 +464,114 @@ packages: resolution: {integrity: sha512-QNqXyfVS2wm9hweSYD2O7F0G06uurj9kZ96TRQE5Y9hU7+tgdZwIkbAKc5Ocy1HxEY2kuDQa6cQ1WRs/O5LFKA==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} - '@protobuf-ts/plugin@2.11.1': - resolution: {integrity: sha512-HyuprDcw0bEEJqkOWe1rnXUP0gwYLij8YhPuZyZk6cJbIgc/Q0IFgoHQxOXNIXAcXM4Sbehh6kjVnCzasElw1A==} - hasBin: true - - '@protobuf-ts/protoc@2.11.1': - resolution: {integrity: sha512-mUZJaV0daGO6HUX90o/atzQ6A7bbN2RSuHtdwo8SSF2Qoe3zHwa4IHyCN1evftTeHfLmdz+45qo47sL+5P8nyg==} - hasBin: true - '@protobuf-ts/runtime-rpc@2.11.1': resolution: {integrity: sha512-4CqqUmNA+/uMz00+d3CYKgElXO9VrEbucjnBFEjqI4GuDrEQ32MaI3q+9qPBvIGOlL4PmHXrzM32vBPWRhQKWQ==} '@protobuf-ts/runtime@2.11.1': resolution: {integrity: sha512-KuDaT1IfHkugM2pyz+FwiY80ejWrkH1pAtOBOZFuR6SXEFTsnb/jiQWQ1rCIrcKx2BtyxnxW6BWwsVSA/Ie+WQ==} - '@rollup/rollup-android-arm-eabi@4.46.2': - resolution: {integrity: sha512-Zj3Hl6sN34xJtMv7Anwb5Gu01yujyE/cLBDB2gnHTAHaWS1Z38L7kuSG+oAh0giZMqG060f/YBStXtMH6FvPMA==} + '@rollup/rollup-android-arm-eabi@4.50.0': + resolution: {integrity: sha512-lVgpeQyy4fWN5QYebtW4buT/4kn4p4IJ+kDNB4uYNT5b8c8DLJDg6titg20NIg7E8RWwdWZORW6vUFfrLyG3KQ==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.46.2': - resolution: {integrity: sha512-nTeCWY83kN64oQ5MGz3CgtPx8NSOhC5lWtsjTs+8JAJNLcP3QbLCtDDgUKQc/Ro/frpMq4SHUaHN6AMltcEoLQ==} + '@rollup/rollup-android-arm64@4.50.0': + resolution: {integrity: sha512-2O73dR4Dc9bp+wSYhviP6sDziurB5/HCym7xILKifWdE9UsOe2FtNcM+I4xZjKrfLJnq5UR8k9riB87gauiQtw==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.46.2': - resolution: {integrity: sha512-HV7bW2Fb/F5KPdM/9bApunQh68YVDU8sO8BvcW9OngQVN3HHHkw99wFupuUJfGR9pYLLAjcAOA6iO+evsbBaPQ==} + '@rollup/rollup-darwin-arm64@4.50.0': + resolution: {integrity: sha512-vwSXQN8T4sKf1RHr1F0s98Pf8UPz7pS6P3LG9NSmuw0TVh7EmaE+5Ny7hJOZ0M2yuTctEsHHRTMi2wuHkdS6Hg==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.46.2': - resolution: {integrity: sha512-SSj8TlYV5nJixSsm/y3QXfhspSiLYP11zpfwp6G/YDXctf3Xkdnk4woJIF5VQe0of2OjzTt8EsxnJDCdHd2xMA==} + '@rollup/rollup-darwin-x64@4.50.0': + resolution: {integrity: sha512-cQp/WG8HE7BCGyFVuzUg0FNmupxC+EPZEwWu2FCGGw5WDT1o2/YlENbm5e9SMvfDFR6FRhVCBePLqj0o8MN7Vw==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.46.2': - resolution: {integrity: sha512-ZyrsG4TIT9xnOlLsSSi9w/X29tCbK1yegE49RYm3tu3wF1L/B6LVMqnEWyDB26d9Ecx9zrmXCiPmIabVuLmNSg==} + '@rollup/rollup-freebsd-arm64@4.50.0': + resolution: {integrity: sha512-UR1uTJFU/p801DvvBbtDD7z9mQL8J80xB0bR7DqW7UGQHRm/OaKzp4is7sQSdbt2pjjSS72eAtRh43hNduTnnQ==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.46.2': - resolution: {integrity: sha512-pCgHFoOECwVCJ5GFq8+gR8SBKnMO+xe5UEqbemxBpCKYQddRQMgomv1104RnLSg7nNvgKy05sLsY51+OVRyiVw==} + '@rollup/rollup-freebsd-x64@4.50.0': + resolution: {integrity: sha512-G/DKyS6PK0dD0+VEzH/6n/hWDNPDZSMBmqsElWnCRGrYOb2jC0VSupp7UAHHQ4+QILwkxSMaYIbQ72dktp8pKA==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.46.2': - resolution: {integrity: sha512-EtP8aquZ0xQg0ETFcxUbU71MZlHaw9MChwrQzatiE8U/bvi5uv/oChExXC4mWhjiqK7azGJBqU0tt5H123SzVA==} + '@rollup/rollup-linux-arm-gnueabihf@4.50.0': + resolution: {integrity: sha512-u72Mzc6jyJwKjJbZZcIYmd9bumJu7KNmHYdue43vT1rXPm2rITwmPWF0mmPzLm9/vJWxIRbao/jrQmxTO0Sm9w==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.46.2': - resolution: {integrity: sha512-qO7F7U3u1nfxYRPM8HqFtLd+raev2K137dsV08q/LRKRLEc7RsiDWihUnrINdsWQxPR9jqZ8DIIZ1zJJAm5PjQ==} + '@rollup/rollup-linux-arm-musleabihf@4.50.0': + resolution: {integrity: sha512-S4UefYdV0tnynDJV1mdkNawp0E5Qm2MtSs330IyHgaccOFrwqsvgigUD29uT+B/70PDY1eQ3t40+xf6wIvXJyg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.46.2': - resolution: {integrity: sha512-3dRaqLfcOXYsfvw5xMrxAk9Lb1f395gkoBYzSFcc/scgRFptRXL9DOaDpMiehf9CO8ZDRJW2z45b6fpU5nwjng==} + '@rollup/rollup-linux-arm64-gnu@4.50.0': + resolution: {integrity: sha512-1EhkSvUQXJsIhk4msxP5nNAUWoB4MFDHhtc4gAYvnqoHlaL9V3F37pNHabndawsfy/Tp7BPiy/aSa6XBYbaD1g==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.46.2': - resolution: {integrity: sha512-fhHFTutA7SM+IrR6lIfiHskxmpmPTJUXpWIsBXpeEwNgZzZZSg/q4i6FU4J8qOGyJ0TR+wXBwx/L7Ho9z0+uDg==} + '@rollup/rollup-linux-arm64-musl@4.50.0': + resolution: {integrity: sha512-EtBDIZuDtVg75xIPIK1l5vCXNNCIRM0OBPUG+tbApDuJAy9mKago6QxX+tfMzbCI6tXEhMuZuN1+CU8iDW+0UQ==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.46.2': - resolution: {integrity: sha512-i7wfGFXu8x4+FRqPymzjD+Hyav8l95UIZ773j7J7zRYc3Xsxy2wIn4x+llpunexXe6laaO72iEjeeGyUFmjKeA==} + '@rollup/rollup-linux-loongarch64-gnu@4.50.0': + resolution: {integrity: sha512-BGYSwJdMP0hT5CCmljuSNx7+k+0upweM2M4YGfFBjnFSZMHOLYR0gEEj/dxyYJ6Zc6AiSeaBY8dWOa11GF/ppQ==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.46.2': - resolution: {integrity: sha512-B/l0dFcHVUnqcGZWKcWBSV2PF01YUt0Rvlurci5P+neqY/yMKchGU8ullZvIv5e8Y1C6wOn+U03mrDylP5q9Yw==} + '@rollup/rollup-linux-ppc64-gnu@4.50.0': + resolution: {integrity: sha512-I1gSMzkVe1KzAxKAroCJL30hA4DqSi+wGc5gviD0y3IL/VkvcnAqwBf4RHXHyvH66YVHxpKO8ojrgc4SrWAnLg==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.46.2': - resolution: {integrity: sha512-32k4ENb5ygtkMwPMucAb8MtV8olkPT03oiTxJbgkJa7lJ7dZMr0GCFJlyvy+K8iq7F/iuOr41ZdUHaOiqyR3iQ==} + '@rollup/rollup-linux-riscv64-gnu@4.50.0': + resolution: {integrity: sha512-bSbWlY3jZo7molh4tc5dKfeSxkqnf48UsLqYbUhnkdnfgZjgufLS/NTA8PcP/dnvct5CCdNkABJ56CbclMRYCA==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.46.2': - resolution: {integrity: sha512-t5B2loThlFEauloaQkZg9gxV05BYeITLvLkWOkRXogP4qHXLkWSbSHKM9S6H1schf/0YGP/qNKtiISlxvfmmZw==} + '@rollup/rollup-linux-riscv64-musl@4.50.0': + resolution: {integrity: sha512-LSXSGumSURzEQLT2e4sFqFOv3LWZsEF8FK7AAv9zHZNDdMnUPYH3t8ZlaeYYZyTXnsob3htwTKeWtBIkPV27iQ==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.46.2': - resolution: {integrity: sha512-YKjekwTEKgbB7n17gmODSmJVUIvj8CX7q5442/CK80L8nqOUbMtf8b01QkG3jOqyr1rotrAnW6B/qiHwfcuWQA==} + '@rollup/rollup-linux-s390x-gnu@4.50.0': + resolution: {integrity: sha512-CxRKyakfDrsLXiCyucVfVWVoaPA4oFSpPpDwlMcDFQvrv3XY6KEzMtMZrA+e/goC8xxp2WSOxHQubP8fPmmjOQ==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.46.2': - resolution: {integrity: sha512-Jj5a9RUoe5ra+MEyERkDKLwTXVu6s3aACP51nkfnK9wJTraCC8IMe3snOfALkrjTYd2G1ViE1hICj0fZ7ALBPA==} + '@rollup/rollup-linux-x64-gnu@4.50.0': + resolution: {integrity: sha512-8PrJJA7/VU8ToHVEPu14FzuSAqVKyo5gg/J8xUerMbyNkWkO9j2ExBho/68RnJsMGNJq4zH114iAttgm7BZVkA==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.46.2': - resolution: {integrity: sha512-7kX69DIrBeD7yNp4A5b81izs8BqoZkCIaxQaOpumcJ1S/kmqNFjPhDu1LHeVXv0SexfHQv5cqHsxLOjETuqDuA==} + '@rollup/rollup-linux-x64-musl@4.50.0': + resolution: {integrity: sha512-SkE6YQp+CzpyOrbw7Oc4MgXFvTw2UIBElvAvLCo230pyxOLmYwRPwZ/L5lBe/VW/qT1ZgND9wJfOsdy0XptRvw==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.46.2': - resolution: {integrity: sha512-wiJWMIpeaak/jsbaq2HMh/rzZxHVW1rU6coyeNNpMwk5isiPjSTx0a4YLSlYDwBH/WBvLz+EtsNqQScZTLJy3g==} + '@rollup/rollup-openharmony-arm64@4.50.0': + resolution: {integrity: sha512-PZkNLPfvXeIOgJWA804zjSFH7fARBBCpCXxgkGDRjjAhRLOR8o0IGS01ykh5GYfod4c2yiiREuDM8iZ+pVsT+Q==} + cpu: [arm64] + os: [openharmony] + + '@rollup/rollup-win32-arm64-msvc@4.50.0': + resolution: {integrity: sha512-q7cIIdFvWQoaCbLDUyUc8YfR3Jh2xx3unO8Dn6/TTogKjfwrax9SyfmGGK6cQhKtjePI7jRfd7iRYcxYs93esg==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.46.2': - resolution: {integrity: sha512-gBgaUDESVzMgWZhcyjfs9QFK16D8K6QZpwAaVNJxYDLHWayOta4ZMjGm/vsAEy3hvlS2GosVFlBlP9/Wb85DqQ==} + '@rollup/rollup-win32-ia32-msvc@4.50.0': + resolution: {integrity: sha512-XzNOVg/YnDOmFdDKcxxK410PrcbcqZkBmz+0FicpW5jtjKQxcW1BZJEQOF0NJa6JO7CZhett8GEtRN/wYLYJuw==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.46.2': - resolution: {integrity: sha512-CvUo2ixeIQGtF6WvuB87XWqPQkoFAFqW+HUo/WzHwuHDvIwZCtjdWXoYCcr06iKGydiqTclC4jU/TNObC/xKZg==} + '@rollup/rollup-win32-x64-msvc@4.50.0': + resolution: {integrity: sha512-xMmiWRR8sp72Zqwjgtf3QbZfF1wdh8X2ABu3EaozvZcyHJeU0r+XAnXdKgs4cCAp6ORoYoCygipYP1mjmbjrsg==} cpu: [x64] os: [win32] @@ -594,17 +581,17 @@ packages: '@sec-ant/readable-stream@0.4.1': resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} - '@shikijs/engine-oniguruma@3.8.1': - resolution: {integrity: sha512-KGQJZHlNY7c656qPFEQpIoqOuC4LrxjyNndRdzk5WKB/Ie87+NJCF1xo9KkOUxwxylk7rT6nhlZyTGTC4fCe1g==} + '@shikijs/engine-oniguruma@3.12.2': + resolution: {integrity: sha512-hozwnFHsLvujK4/CPVHNo3Bcg2EsnG8krI/ZQ2FlBlCRpPZW4XAEQmEwqegJsypsTAN9ehu2tEYe30lYKSZW/w==} - '@shikijs/langs@3.8.1': - resolution: {integrity: sha512-TjOFg2Wp1w07oKnXjs0AUMb4kJvujML+fJ1C5cmEj45lhjbUXtziT1x2bPQb9Db6kmPhkG5NI2tgYW1/DzhUuQ==} + '@shikijs/langs@3.12.2': + resolution: {integrity: sha512-bVx5PfuZHDSHoBal+KzJZGheFuyH4qwwcwG/n+MsWno5cTlKmaNtTsGzJpHYQ8YPbB5BdEdKU1rga5/6JGY8ww==} - '@shikijs/themes@3.8.1': - resolution: {integrity: sha512-Vu3t3BBLifc0GB0UPg2Pox1naTemrrvyZv2lkiSw3QayVV60me1ujFQwPZGgUTmwXl1yhCPW8Lieesm0CYruLQ==} + '@shikijs/themes@3.12.2': + resolution: {integrity: sha512-fTR3QAgnwYpfGczpIbzPjlRnxyONJOerguQv1iwpyQZ9QXX4qy/XFQqXlf17XTsorxnHoJGbH/LXBvwtqDsF5A==} - '@shikijs/types@3.8.1': - resolution: {integrity: sha512-5C39Q8/8r1I26suLh+5TPk1DTrbY/kn3IdWA5HdizR0FhlhD05zx5nKCqhzSfDHH3p4S0ZefxWd77DLV+8FhGg==} + '@shikijs/types@3.12.2': + resolution: {integrity: sha512-K5UIBzxCyv0YoxN3LMrKB9zuhp1bV+LgewxuVwHdl4Gz5oePoUFrr9EfgJlGlDeXCU1b/yhdnXeuRvAnz8HN8Q==} '@shikijs/vscode-textmate@10.0.2': resolution: {integrity: sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==} @@ -657,76 +644,71 @@ packages: '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} - '@types/node@22.17.0': - resolution: {integrity: sha512-bbAKTCqX5aNVryi7qXVMi+OkB3w/OyblodicMbvE38blyAz7GxXf6XYhklokijuPwwVg9sDLKRxt0ZHXQwZVfQ==} + '@types/node@22.18.0': + resolution: {integrity: sha512-m5ObIqwsUp6BZzyiy4RdZpzWGub9bqLJMvZDD0QMXhxjqMHMENlj+SqF5QxoUwaQNFe+8kz8XM8ZQhqkQPTgMQ==} '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - '@typescript-eslint/eslint-plugin@8.38.0': - resolution: {integrity: sha512-CPoznzpuAnIOl4nhj4tRr4gIPj5AfKgkiJmGQDaq+fQnRJTYlcBjbX3wbciGmpoPf8DREufuPRe1tNMZnGdanA==} + '@typescript-eslint/eslint-plugin@8.42.0': + resolution: {integrity: sha512-Aq2dPqsQkxHOLfb2OPv43RnIvfj05nw8v/6n3B2NABIPpHnjQnaLo9QGMTvml+tv4korl/Cjfrb/BYhoL8UUTQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.38.0 + '@typescript-eslint/parser': ^8.42.0 eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/parser@8.38.0': - resolution: {integrity: sha512-Zhy8HCvBUEfBECzIl1PKqF4p11+d0aUJS1GeUiuqK9WmOug8YCmC4h4bjyBvMyAMI9sbRczmrYL5lKg/YMbrcQ==} + '@typescript-eslint/parser@8.42.0': + resolution: {integrity: sha512-r1XG74QgShUgXph1BYseJ+KZd17bKQib/yF3SR+demvytiRXrwd12Blnz5eYGm8tXaeRdd4x88MlfwldHoudGg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/project-service@8.38.0': - resolution: {integrity: sha512-dbK7Jvqcb8c9QfH01YB6pORpqX1mn5gDZc9n63Ak/+jD67oWXn3Gs0M6vddAN+eDXBCS5EmNWzbSxsn9SzFWWg==} + '@typescript-eslint/project-service@8.42.0': + resolution: {integrity: sha512-vfVpLHAhbPjilrabtOSNcUDmBboQNrJUiNAGoImkZKnMjs2TIcWG33s4Ds0wY3/50aZmTMqJa6PiwkwezaAklg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/scope-manager@8.38.0': - resolution: {integrity: sha512-WJw3AVlFFcdT9Ri1xs/lg8LwDqgekWXWhH3iAF+1ZM+QPd7oxQ6jvtW/JPwzAScxitILUIFs0/AnQ/UWHzbATQ==} + '@typescript-eslint/scope-manager@8.42.0': + resolution: {integrity: sha512-51+x9o78NBAVgQzOPd17DkNTnIzJ8T/O2dmMBLoK9qbY0Gm52XJcdJcCl18ExBMiHo6jPMErUQWUv5RLE51zJw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.38.0': - resolution: {integrity: sha512-Lum9RtSE3EroKk/bYns+sPOodqb2Fv50XOl/gMviMKNvanETUuUcC9ObRbzrJ4VSd2JalPqgSAavwrPiPvnAiQ==} + '@typescript-eslint/tsconfig-utils@8.42.0': + resolution: {integrity: sha512-kHeFUOdwAJfUmYKjR3CLgZSglGHjbNTi1H8sTYRYV2xX6eNz4RyJ2LIgsDLKf8Yi0/GL1WZAC/DgZBeBft8QAQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/type-utils@8.38.0': - resolution: {integrity: sha512-c7jAvGEZVf0ao2z+nnz8BUaHZD09Agbh+DY7qvBQqLiz8uJzRgVPj5YvOh8I8uEiH8oIUGIfHzMwUcGVco/SJg==} + '@typescript-eslint/type-utils@8.42.0': + resolution: {integrity: sha512-9KChw92sbPTYVFw3JLRH1ockhyR3zqqn9lQXol3/YbI6jVxzWoGcT3AsAW0mu1MY0gYtsXnUGV/AKpkAj5tVlQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/types@8.38.0': - resolution: {integrity: sha512-wzkUfX3plUqij4YwWaJyqhiPE5UCRVlFpKn1oCRn2O1bJ592XxWJj8ROQ3JD5MYXLORW84063z3tZTb/cs4Tyw==} + '@typescript-eslint/types@8.42.0': + resolution: {integrity: sha512-LdtAWMiFmbRLNP7JNeY0SqEtJvGMYSzfiWBSmx+VSZ1CH+1zyl8Mmw1TT39OrtsRvIYShjJWzTDMPWZJCpwBlw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.38.0': - resolution: {integrity: sha512-fooELKcAKzxux6fA6pxOflpNS0jc+nOQEEOipXFNjSlBS6fqrJOVY/whSn70SScHrcJ2LDsxWrneFoWYSVfqhQ==} + '@typescript-eslint/typescript-estree@8.42.0': + resolution: {integrity: sha512-ku/uYtT4QXY8sl9EDJETD27o3Ewdi72hcXg1ah/kkUgBvAYHLwj2ofswFFNXS+FL5G+AGkxBtvGt8pFBHKlHsQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/utils@8.38.0': - resolution: {integrity: sha512-hHcMA86Hgt+ijJlrD8fX0j1j8w4C92zue/8LOPAFioIno+W0+L7KqE8QZKCcPGc/92Vs9x36w/4MPTJhqXdyvg==} + '@typescript-eslint/utils@8.42.0': + resolution: {integrity: sha512-JnIzu7H3RH5BrKC4NoZqRfmjqCIS1u3hGZltDYJgkVdqAezl4L9d1ZLw+36huCujtSBSAirGINF/S4UxOcR+/g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - '@typescript-eslint/visitor-keys@8.38.0': - resolution: {integrity: sha512-pWrTcoFNWuwHlA9CvlfSsGWs14JxfN1TH25zM5L7o0pRLhsoZkDnTsXfQRJBEWJoV5DL0jf+Z+sxiud+K0mq1g==} + '@typescript-eslint/visitor-keys@8.42.0': + resolution: {integrity: sha512-3WbiuzoEowaEn8RSnhJBrxSwX8ULYE9CXaPepS2C2W3NSA5NNIvBaslpBSBElPq0UGr0xVJlXFWOAKIkyylydQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript/vfs@1.6.1': - resolution: {integrity: sha512-JwoxboBh7Oz1v38tPbkrZ62ZXNHAk9bJ7c9x0eI5zBfBnBYGhURdbnh7Z4smN/MV48Y5OCcZb58n972UtbazsA==} - peerDependencies: - typescript: '*' - '@typespec/ts-http-runtime@0.3.0': resolution: {integrity: sha512-sOx1PKSuFwnIl7z4RN0Ls7N9AQawmR9r66eI5rFCzLDIs8HTIYrIpH9QjYWoX0lkgGrkLxXhi4QnK7MizPRrIg==} engines: {node: '>=20.0.0'} @@ -880,8 +862,8 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.1.0: - resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} + ansi-regex@6.2.0: + resolution: {integrity: sha512-TKY5pyBkHyADOPYlRT9Lx6F544mPl0vS5Ew7BJ45hA08Q+t3GjbueLliBWN3sMICk6+y7HdyxSzC4bWS8baBdg==} engines: {node: '>=12'} ansi-styles@4.3.0: @@ -965,8 +947,8 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.25.1: - resolution: {integrity: sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==} + browserslist@4.25.4: + resolution: {integrity: sha512-4jYpcjabC606xJ3kw2QwGEZKX0Aw7sgQdZCvIK9dhVSPh76BKo+C+btT1RRofH7B+8iNpEbgGNVWiLki5q93yg==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -1004,11 +986,11 @@ packages: resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} engines: {node: '>=6'} - caniuse-lite@1.0.30001731: - resolution: {integrity: sha512-lDdp2/wrOmTRWuoB5DpfNkC0rJDU8DqRa6nYL6HK6sytw70QMopt/NIc/9SM7ylItlBWfACXk0tEn37UWM/+mg==} + caniuse-lite@1.0.30001739: + resolution: {integrity: sha512-y+j60d6ulelrNSwpPyrHdl+9mJnQzHBr08xm48Qno0nSk4h3Qojh+ziv2qE6rXf4k3tadF4o1J/1tAbVm1NtnA==} - chai@5.2.1: - resolution: {integrity: sha512-5nFxhUrX0PqtyogoYOA8IPswy5sZFTOsBFl/9bNsmDLgsxYTzSZQJDPppDnZPTQbzSEm0hqGjWPzRemQCYbD6A==} + chai@5.3.3: + resolution: {integrity: sha512-4zNhdJD/iOjSH0A05ea+Ke6MU5mmpQcbQsSOkgdaUMJ9zTlDTD/GYlwohmIE2u0gaxHYiVHEn1Fw9mZ/ktJWgw==} engines: {node: '>=18'} chalk@4.1.2: @@ -1122,8 +1104,8 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - electron-to-chromium@1.5.192: - resolution: {integrity: sha512-rP8Ez0w7UNw/9j5eSXCe10o1g/8B1P5SM90PCCMVkIRQn2R0LEHWz4Eh9RnxkniuDe1W0cTSOB3MLlkTGDcuCg==} + electron-to-chromium@1.5.213: + resolution: {integrity: sha512-xr9eRzSLNa4neDO0xVFrkXu3vyIzG4Ay08dApecw42Z1NbmCt+keEpXdvlYGVe0wtvY5dhW0Ay0lY0IOfsCg0Q==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -1166,8 +1148,8 @@ packages: resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==} engines: {node: '>= 0.4'} - esbuild@0.25.8: - resolution: {integrity: sha512-vVC0USHGtMi8+R4Kz8rt6JhEWLxsv9Rnu/lGYbPR8u47B+DCBksq9JarW0zOO7bs37hyOK1l2/oqtbciutL5+Q==} + esbuild@0.25.9: + resolution: {integrity: sha512-CRbODhYyQx3qp7ZEwzxOk4JBqmD/seJrzPa/cGjY1VtIn5E09Oi9/dB4JwctnfZ8Q8iT7rioVv5k/FNT/uf54g==} engines: {node: '>=18'} hasBin: true @@ -1282,8 +1264,8 @@ packages: resolution: {integrity: sha512-brcKcxGnISN2CcVhXJ/kEQlNa0MEfGRtwKtWA16SkqXHKitaKIMrfemJKLKX1YqDU5C/5JY3PvZXd5jEW04e0Q==} engines: {node: '>=5.0.0'} - eslint-plugin-prettier@5.5.3: - resolution: {integrity: sha512-NAdMYww51ehKfDyDhv59/eIItUVzU0Io9H2E8nHNGKEeeqlnci+1gCvrHib6EmZdf6GxF+LCV5K7UC65Ezvw7w==} + eslint-plugin-prettier@5.5.4: + resolution: {integrity: sha512-swNtI95SToIz05YINMA6Ox5R057IMAmWZ26GqPxusAp1TZzj+IdY9tXNWWD3vkF/wEqydCONcwjTFpxybBqZsg==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: '@types/eslint': '>=8.0.0' @@ -1312,8 +1294,8 @@ packages: resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.32.0: - resolution: {integrity: sha512-LSehfdpgMeWcTZkWZVIJl+tkZ2nuSkyyB9C27MZqFWXuph7DvaowgcTvKqxvpLW1JZIk8PN7hFY3Rj9LQ7m7lg==} + eslint@9.34.0: + resolution: {integrity: sha512-RNCHRX5EwdrESy3Jc9o8ie8Bog+PeYvvSR8sDGoZxNFTvZ4dlxUB3WzQ3bQMztFrSRODGrLLj8g6OFuGY/aiQg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -1380,8 +1362,9 @@ packages: fastq@1.19.1: resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} - fdir@6.4.6: - resolution: {integrity: sha512-hiFoqpyZcfNm1yc4u8oWCf9A2c4D3QjCrks3zmoVKVxpQRzmPNar1hUJcBG2RQHvEVGDN+Jm81ZheVLAQMK6+w==} + fdir@6.5.0: + resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} + engines: {node: '>=12.0.0'} peerDependencies: picomatch: ^3 || ^4 peerDependenciesMeta: @@ -1488,8 +1471,8 @@ packages: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} - got@14.4.7: - resolution: {integrity: sha512-DI8zV1231tqiGzOiOzQWDhsBmncFW7oQDH6Zgy6pDPrqJuVZMtoSgPLLsBZQj8Jg4JFfwoOsDA8NGtLQLnIx2g==} + got@14.4.8: + resolution: {integrity: sha512-vxwU4HuR0BIl+zcT1LYrgBjM+IJjNElOjCzs0aPgHorQyr/V6H6Y73Sn3r3FOlUffvWD+Q5jtRuGWaXkU8Jbhg==} engines: {node: '>=20'} graphemer@1.4.0: @@ -1769,8 +1752,8 @@ packages: lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - loupe@3.2.0: - resolution: {integrity: sha512-2NCfZcT5VGVNX9mSZIxLRkEAegDGBpuQZBy13desuHeVORmBDyAET4TkJr4SjqQy3A8JDofMN6LpkK8Xcm/dlw==} + loupe@3.2.1: + resolution: {integrity: sha512-CdzqowRJCeLU72bHvWqwRBBlLcMEtIvGrlvef74kMnV2AolS9Y8xUv1I0U/MNAWMhBlKIoyuEgoJ0t/bbwHbLQ==} lowercase-keys@3.0.0: resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} @@ -1782,8 +1765,8 @@ packages: lunr@2.3.9: resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} - magic-string@0.30.17: - resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + magic-string@0.30.18: + resolution: {integrity: sha512-yi8swmWbO17qHhwIBNeeZxTceJMeBvWJaId6dyvTSOwTipqeHhMhOrz6513r1sOKnpvQ7zkhlG8tPrpilwTxHQ==} markdown-it@14.1.0: resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} @@ -1834,8 +1817,8 @@ packages: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} - mlly@1.7.4: - resolution: {integrity: sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==} + mlly@1.8.0: + resolution: {integrity: sha512-l8D9ODSRWLe2KHJSifWGwBqpTZXIXTeo8mlKjY+E2HAakaTeNpqAyBZ8GSqLzHgw4XmHmC8whvpjJNMbFZN7/g==} ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} @@ -1848,8 +1831,8 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - napi-postinstall@0.3.2: - resolution: {integrity: sha512-tWVJxJHmBWLy69PvO96TZMZDrzmw5KeiZBz3RHmiM2XZ9grBJ2WgMAFVVg25nqp3ZjTFUs2Ftw1JhscL3Teliw==} + napi-postinstall@0.3.3: + resolution: {integrity: sha512-uTp172LLXSxuSYHv/kou+f6KW3SMppU9ivthaVTXian9sOt3XM/zHYHpRZiLgQoxeWfYUnslNWQHF1+G71xcow==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} hasBin: true @@ -2060,8 +2043,8 @@ packages: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rollup@4.46.2: - resolution: {integrity: sha512-WMmLFI+Boh6xbop+OAGo9cQ3OgX9MIg7xOQjn+pTCwOkk+FNDAeAemXkJ3HzDJrVXleLOFVa1ipuc1AmEx1Dwg==} + rollup@4.50.0: + resolution: {integrity: sha512-/Zl4D8zPifNmyGzJS+3kVoyXeDeT/GrsJM94sACNg9RtUE0hrHa1bNPtRSrfHTMH5HjRzce6K7rlTh3Khiw+pw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -2145,6 +2128,7 @@ packages: source-map@0.8.0-beta.0: resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} engines: {node: '>= 8'} + deprecated: The work that was done in this beta branch won't be included in future versions stable-hash-x@0.2.0: resolution: {integrity: sha512-o3yWv49B/o4QZk5ZcsALc6t0+eCelPc44zZsLtCQnZPDwFpDYSWcDnrv2TtMmMbQ7uKo3J0HTURCqckw23czNQ==} @@ -2334,32 +2318,22 @@ packages: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} - typedoc@0.28.8: - resolution: {integrity: sha512-16GfLopc8icHfdvqZDqdGBoS2AieIRP2rpf9mU+MgN+gGLyEQvAO0QgOa6NJ5QNmQi0LFrDY9in4F2fUNKgJKA==} + typedoc@0.28.12: + resolution: {integrity: sha512-H5ODu4f7N+myG4MfuSp2Vh6wV+WLoZaEYxKPt2y8hmmqNEMVrH69DAjjdmYivF4tP/C2jrIZCZhPalZlTU/ipA==} engines: {node: '>= 18', pnpm: '>= 10'} hasBin: true peerDependencies: - typescript: 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x + typescript: 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x || 5.9.x - typescript-eslint@8.38.0: - resolution: {integrity: sha512-FsZlrYK6bPDGoLeZRuvx2v6qrM03I0U0SnfCLPs/XCCPCFD80xU9Pg09H/K+XFa68uJuZo7l/Xhs+eDRg2l3hg==} + typescript-eslint@8.42.0: + resolution: {integrity: sha512-ozR/rQn+aQXQxh1YgbCzQWDFrsi9mcg+1PM3l/z5o1+20P7suOIaNg515bpr/OYt6FObz/NHcBstydDLHWeEKg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.9.0' + typescript: '>=4.8.4 <6.0.0' - typescript@3.9.10: - resolution: {integrity: sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==} - engines: {node: '>=4.2.0'} - hasBin: true - - typescript@5.4.5: - resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} - engines: {node: '>=14.17'} - hasBin: true - - typescript@5.8.3: - resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} + typescript@5.9.2: + resolution: {integrity: sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==} engines: {node: '>=14.17'} hasBin: true @@ -2401,8 +2375,8 @@ packages: engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} hasBin: true - vite@7.0.6: - resolution: {integrity: sha512-MHFiOENNBd+Bd9uvc8GEsIzdkn1JxMmEeYX35tI3fv0sJBUTfW5tQsoaOwuY4KhBI09A3dUJ/DXf2yxPVPUceg==} + vite@7.1.4: + resolution: {integrity: sha512-X5QFK4SGynAeeIt+A7ZWnApdUyHYm+pzv/8/A57LqSGcI88U6R6ipOs3uCesdc6yl7nl+zNO0t8LmqAdXcQihw==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: @@ -2527,8 +2501,8 @@ packages: resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} engines: {node: '>=4.0'} - yaml@2.8.0: - resolution: {integrity: sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==} + yaml@2.8.1: + resolution: {integrity: sha512-lcYcMxX2PO9XMGvAJkJ3OsNMw+/7FKes7/hgerGUYWIoWu5j/+YQqcZr5JnPZWzOsEBgMbSbiSTn/dv/69Mkpw==} engines: {node: '>= 14.6'} hasBin: true @@ -2538,7 +2512,7 @@ packages: snapshots: - '@actions/cache@4.0.3': + '@actions/cache@4.0.5': dependencies: '@actions/core': 1.11.1 '@actions/exec': 1.1.1 @@ -2548,7 +2522,7 @@ snapshots: '@azure/abort-controller': 1.1.0 '@azure/ms-rest-js': 2.7.0 '@azure/storage-blob': 12.28.0 - '@protobuf-ts/plugin': 2.11.1 + '@protobuf-ts/runtime-rpc': 2.11.1 semver: 6.3.1 transitivePeerDependencies: - encoding @@ -2713,12 +2687,12 @@ snapshots: js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/generator@7.28.0': + '@babel/generator@7.28.3': dependencies: - '@babel/parser': 7.28.0 + '@babel/parser': 7.28.3 '@babel/types': 7.28.2 - '@jridgewell/gen-mapping': 0.3.12 - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.30 jsesc: 3.1.0 '@babel/helper-globals@7.28.0': {} @@ -2727,22 +2701,22 @@ snapshots: '@babel/helper-validator-identifier@7.27.1': {} - '@babel/parser@7.28.0': + '@babel/parser@7.28.3': dependencies: '@babel/types': 7.28.2 '@babel/template@7.27.2': dependencies: '@babel/code-frame': 7.27.1 - '@babel/parser': 7.28.0 + '@babel/parser': 7.28.3 '@babel/types': 7.28.2 - '@babel/traverse@7.28.0': + '@babel/traverse@7.28.3': dependencies: '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.0 + '@babel/generator': 7.28.3 '@babel/helper-globals': 7.28.0 - '@babel/parser': 7.28.0 + '@babel/parser': 7.28.3 '@babel/template': 7.27.2 '@babel/types': 7.28.2 debug: 4.4.1 @@ -2754,120 +2728,110 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 - '@bufbuild/protobuf@2.6.2': {} - - '@bufbuild/protoplugin@2.6.2': + '@emnapi/core@1.5.0': dependencies: - '@bufbuild/protobuf': 2.6.2 - '@typescript/vfs': 1.6.1(typescript@5.4.5) - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color - - '@emnapi/core@1.4.5': - dependencies: - '@emnapi/wasi-threads': 1.0.4 + '@emnapi/wasi-threads': 1.1.0 tslib: 2.8.1 optional: true - '@emnapi/runtime@1.4.5': + '@emnapi/runtime@1.5.0': dependencies: tslib: 2.8.1 optional: true - '@emnapi/wasi-threads@1.0.4': + '@emnapi/wasi-threads@1.1.0': dependencies: tslib: 2.8.1 optional: true - '@esbuild/aix-ppc64@0.25.8': + '@esbuild/aix-ppc64@0.25.9': optional: true - '@esbuild/android-arm64@0.25.8': + '@esbuild/android-arm64@0.25.9': optional: true - '@esbuild/android-arm@0.25.8': + '@esbuild/android-arm@0.25.9': optional: true - '@esbuild/android-x64@0.25.8': + '@esbuild/android-x64@0.25.9': optional: true - '@esbuild/darwin-arm64@0.25.8': + '@esbuild/darwin-arm64@0.25.9': optional: true - '@esbuild/darwin-x64@0.25.8': + '@esbuild/darwin-x64@0.25.9': optional: true - '@esbuild/freebsd-arm64@0.25.8': + '@esbuild/freebsd-arm64@0.25.9': optional: true - '@esbuild/freebsd-x64@0.25.8': + '@esbuild/freebsd-x64@0.25.9': optional: true - '@esbuild/linux-arm64@0.25.8': + '@esbuild/linux-arm64@0.25.9': optional: true - '@esbuild/linux-arm@0.25.8': + '@esbuild/linux-arm@0.25.9': optional: true - '@esbuild/linux-ia32@0.25.8': + '@esbuild/linux-ia32@0.25.9': optional: true - '@esbuild/linux-loong64@0.25.8': + '@esbuild/linux-loong64@0.25.9': optional: true - '@esbuild/linux-mips64el@0.25.8': + '@esbuild/linux-mips64el@0.25.9': optional: true - '@esbuild/linux-ppc64@0.25.8': + '@esbuild/linux-ppc64@0.25.9': optional: true - '@esbuild/linux-riscv64@0.25.8': + '@esbuild/linux-riscv64@0.25.9': optional: true - '@esbuild/linux-s390x@0.25.8': + '@esbuild/linux-s390x@0.25.9': optional: true - '@esbuild/linux-x64@0.25.8': + '@esbuild/linux-x64@0.25.9': optional: true - '@esbuild/netbsd-arm64@0.25.8': + '@esbuild/netbsd-arm64@0.25.9': optional: true - '@esbuild/netbsd-x64@0.25.8': + '@esbuild/netbsd-x64@0.25.9': optional: true - '@esbuild/openbsd-arm64@0.25.8': + '@esbuild/openbsd-arm64@0.25.9': optional: true - '@esbuild/openbsd-x64@0.25.8': + '@esbuild/openbsd-x64@0.25.9': optional: true - '@esbuild/openharmony-arm64@0.25.8': + '@esbuild/openharmony-arm64@0.25.9': optional: true - '@esbuild/sunos-x64@0.25.8': + '@esbuild/sunos-x64@0.25.9': optional: true - '@esbuild/win32-arm64@0.25.8': + '@esbuild/win32-arm64@0.25.9': optional: true - '@esbuild/win32-ia32@0.25.8': + '@esbuild/win32-ia32@0.25.9': optional: true - '@esbuild/win32-x64@0.25.8': + '@esbuild/win32-x64@0.25.9': optional: true - '@eslint-community/eslint-utils@4.7.0(eslint@9.32.0)': + '@eslint-community/eslint-utils@4.8.0(eslint@9.34.0)': dependencies: - eslint: 9.32.0 + eslint: 9.34.0 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} - '@eslint/compat@1.3.1(eslint@9.32.0)': + '@eslint/compat@1.3.2(eslint@9.34.0)': optionalDependencies: - eslint: 9.32.0 + eslint: 9.34.0 '@eslint/config-array@0.21.0': dependencies: @@ -2877,9 +2841,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/config-helpers@0.3.0': {} + '@eslint/config-helpers@0.3.1': {} - '@eslint/core@0.15.1': + '@eslint/core@0.15.2': dependencies: '@types/json-schema': 7.0.15 @@ -2897,38 +2861,36 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.32.0': {} + '@eslint/js@9.34.0': {} '@eslint/object-schema@2.1.6': {} - '@eslint/plugin-kit@0.3.4': + '@eslint/plugin-kit@0.3.5': dependencies: - '@eslint/core': 0.15.1 + '@eslint/core': 0.15.2 levn: 0.4.1 '@fastify/busboy@2.1.1': {} - '@gerrit0/mini-shiki@3.8.1': + '@gerrit0/mini-shiki@3.12.1': dependencies: - '@shikijs/engine-oniguruma': 3.8.1 - '@shikijs/langs': 3.8.1 - '@shikijs/themes': 3.8.1 - '@shikijs/types': 3.8.1 + '@shikijs/engine-oniguruma': 3.12.2 + '@shikijs/langs': 3.12.2 + '@shikijs/themes': 3.12.2 + '@shikijs/types': 3.12.2 '@shikijs/vscode-textmate': 10.0.2 '@github/browserslist-config@1.0.0': {} '@humanfs/core@0.19.1': {} - '@humanfs/node@0.16.6': + '@humanfs/node@0.16.7': dependencies: '@humanfs/core': 0.19.1 - '@humanwhocodes/retry': 0.3.1 + '@humanwhocodes/retry': 0.4.3 '@humanwhocodes/module-importer@1.0.1': {} - '@humanwhocodes/retry@0.3.1': {} - '@humanwhocodes/retry@0.4.3': {} '@isaacs/cliui@8.0.2': @@ -2940,24 +2902,24 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 - '@jridgewell/gen-mapping@0.3.12': + '@jridgewell/gen-mapping@0.3.13': dependencies: - '@jridgewell/sourcemap-codec': 1.5.4 - '@jridgewell/trace-mapping': 0.3.29 + '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/trace-mapping': 0.3.30 '@jridgewell/resolve-uri@3.1.2': {} - '@jridgewell/sourcemap-codec@1.5.4': {} + '@jridgewell/sourcemap-codec@1.5.5': {} - '@jridgewell/trace-mapping@0.3.29': + '@jridgewell/trace-mapping@0.3.30': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/sourcemap-codec': 1.5.5 '@napi-rs/wasm-runtime@0.2.12': dependencies: - '@emnapi/core': 1.4.5 - '@emnapi/runtime': 1.4.5 + '@emnapi/core': 1.5.0 + '@emnapi/runtime': 1.5.0 '@tybys/wasm-util': 0.10.0 optional: true @@ -2978,103 +2940,93 @@ snapshots: '@pkgr/core@0.2.9': {} - '@protobuf-ts/plugin@2.11.1': - dependencies: - '@bufbuild/protobuf': 2.6.2 - '@bufbuild/protoplugin': 2.6.2 - '@protobuf-ts/protoc': 2.11.1 - '@protobuf-ts/runtime': 2.11.1 - '@protobuf-ts/runtime-rpc': 2.11.1 - typescript: 3.9.10 - transitivePeerDependencies: - - supports-color - - '@protobuf-ts/protoc@2.11.1': {} - '@protobuf-ts/runtime-rpc@2.11.1': dependencies: '@protobuf-ts/runtime': 2.11.1 '@protobuf-ts/runtime@2.11.1': {} - '@rollup/rollup-android-arm-eabi@4.46.2': + '@rollup/rollup-android-arm-eabi@4.50.0': + optional: true + + '@rollup/rollup-android-arm64@4.50.0': optional: true - '@rollup/rollup-android-arm64@4.46.2': + '@rollup/rollup-darwin-arm64@4.50.0': optional: true - '@rollup/rollup-darwin-arm64@4.46.2': + '@rollup/rollup-darwin-x64@4.50.0': optional: true - '@rollup/rollup-darwin-x64@4.46.2': + '@rollup/rollup-freebsd-arm64@4.50.0': optional: true - '@rollup/rollup-freebsd-arm64@4.46.2': + '@rollup/rollup-freebsd-x64@4.50.0': optional: true - '@rollup/rollup-freebsd-x64@4.46.2': + '@rollup/rollup-linux-arm-gnueabihf@4.50.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.46.2': + '@rollup/rollup-linux-arm-musleabihf@4.50.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.46.2': + '@rollup/rollup-linux-arm64-gnu@4.50.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.46.2': + '@rollup/rollup-linux-arm64-musl@4.50.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.46.2': + '@rollup/rollup-linux-loongarch64-gnu@4.50.0': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.46.2': + '@rollup/rollup-linux-ppc64-gnu@4.50.0': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.46.2': + '@rollup/rollup-linux-riscv64-gnu@4.50.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.46.2': + '@rollup/rollup-linux-riscv64-musl@4.50.0': optional: true - '@rollup/rollup-linux-riscv64-musl@4.46.2': + '@rollup/rollup-linux-s390x-gnu@4.50.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.46.2': + '@rollup/rollup-linux-x64-gnu@4.50.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.46.2': + '@rollup/rollup-linux-x64-musl@4.50.0': optional: true - '@rollup/rollup-linux-x64-musl@4.46.2': + '@rollup/rollup-openharmony-arm64@4.50.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.46.2': + '@rollup/rollup-win32-arm64-msvc@4.50.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.46.2': + '@rollup/rollup-win32-ia32-msvc@4.50.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.46.2': + '@rollup/rollup-win32-x64-msvc@4.50.0': optional: true '@rtsao/scc@1.1.0': {} '@sec-ant/readable-stream@0.4.1': {} - '@shikijs/engine-oniguruma@3.8.1': + '@shikijs/engine-oniguruma@3.12.2': dependencies: - '@shikijs/types': 3.8.1 + '@shikijs/types': 3.12.2 '@shikijs/vscode-textmate': 10.0.2 - '@shikijs/langs@3.8.1': + '@shikijs/langs@3.12.2': dependencies: - '@shikijs/types': 3.8.1 + '@shikijs/types': 3.12.2 - '@shikijs/themes@3.8.1': + '@shikijs/themes@3.12.2': dependencies: - '@shikijs/types': 3.8.1 + '@shikijs/types': 3.12.2 - '@shikijs/types@3.8.1': + '@shikijs/types@3.12.2': dependencies: '@shikijs/vscode-textmate': 10.0.2 '@types/hast': 3.0.4 @@ -3089,9 +3041,9 @@ snapshots: '@trivago/prettier-plugin-sort-imports@5.2.2(prettier@3.6.2)': dependencies: - '@babel/generator': 7.28.0 - '@babel/parser': 7.28.0 - '@babel/traverse': 7.28.0 + '@babel/generator': 7.28.3 + '@babel/parser': 7.28.3 + '@babel/traverse': 7.28.3 '@babel/types': 7.28.2 javascript-natural-sort: 0.7.1 lodash: 4.17.21 @@ -3122,112 +3074,105 @@ snapshots: '@types/json5@0.0.29': {} - '@types/node@22.17.0': + '@types/node@22.18.0': dependencies: undici-types: 6.21.0 '@types/unist@3.0.3': {} - '@typescript-eslint/eslint-plugin@8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.8.3))(eslint@9.32.0)(typescript@5.8.3)': + '@typescript-eslint/eslint-plugin@8.42.0(@typescript-eslint/parser@8.42.0(eslint@9.34.0)(typescript@5.9.2))(eslint@9.34.0)(typescript@5.9.2)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.38.0(eslint@9.32.0)(typescript@5.8.3) - '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/type-utils': 8.38.0(eslint@9.32.0)(typescript@5.8.3) - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0)(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.38.0 - eslint: 9.32.0 + '@typescript-eslint/parser': 8.42.0(eslint@9.34.0)(typescript@5.9.2) + '@typescript-eslint/scope-manager': 8.42.0 + '@typescript-eslint/type-utils': 8.42.0(eslint@9.34.0)(typescript@5.9.2) + '@typescript-eslint/utils': 8.42.0(eslint@9.34.0)(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.42.0 + eslint: 9.34.0 graphemer: 1.4.0 ignore: 7.0.5 natural-compare: 1.4.0 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.8.3)': + '@typescript-eslint/parser@8.42.0(eslint@9.34.0)(typescript@5.9.2)': dependencies: - '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) - '@typescript-eslint/visitor-keys': 8.38.0 + '@typescript-eslint/scope-manager': 8.42.0 + '@typescript-eslint/types': 8.42.0 + '@typescript-eslint/typescript-estree': 8.42.0(typescript@5.9.2) + '@typescript-eslint/visitor-keys': 8.42.0 debug: 4.4.1 - eslint: 9.32.0 - typescript: 5.8.3 + eslint: 9.34.0 + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.38.0(typescript@5.8.3)': + '@typescript-eslint/project-service@8.42.0(typescript@5.9.2)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.8.3) - '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/tsconfig-utils': 8.42.0(typescript@5.9.2) + '@typescript-eslint/types': 8.42.0 debug: 4.4.1 - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.38.0': + '@typescript-eslint/scope-manager@8.42.0': dependencies: - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/visitor-keys': 8.38.0 + '@typescript-eslint/types': 8.42.0 + '@typescript-eslint/visitor-keys': 8.42.0 - '@typescript-eslint/tsconfig-utils@8.38.0(typescript@5.8.3)': + '@typescript-eslint/tsconfig-utils@8.42.0(typescript@5.9.2)': dependencies: - typescript: 5.8.3 + typescript: 5.9.2 - '@typescript-eslint/type-utils@8.38.0(eslint@9.32.0)(typescript@5.8.3)': + '@typescript-eslint/type-utils@8.42.0(eslint@9.34.0)(typescript@5.9.2)': dependencies: - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0)(typescript@5.8.3) + '@typescript-eslint/types': 8.42.0 + '@typescript-eslint/typescript-estree': 8.42.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.42.0(eslint@9.34.0)(typescript@5.9.2) debug: 4.4.1 - eslint: 9.32.0 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 + eslint: 9.34.0 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.38.0': {} + '@typescript-eslint/types@8.42.0': {} - '@typescript-eslint/typescript-estree@8.38.0(typescript@5.8.3)': + '@typescript-eslint/typescript-estree@8.42.0(typescript@5.9.2)': dependencies: - '@typescript-eslint/project-service': 8.38.0(typescript@5.8.3) - '@typescript-eslint/tsconfig-utils': 8.38.0(typescript@5.8.3) - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/visitor-keys': 8.38.0 + '@typescript-eslint/project-service': 8.42.0(typescript@5.9.2) + '@typescript-eslint/tsconfig-utils': 8.42.0(typescript@5.9.2) + '@typescript-eslint/types': 8.42.0 + '@typescript-eslint/visitor-keys': 8.42.0 debug: 4.4.1 fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.7.2 - ts-api-utils: 2.1.0(typescript@5.8.3) - typescript: 5.8.3 + ts-api-utils: 2.1.0(typescript@5.9.2) + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.38.0(eslint@9.32.0)(typescript@5.8.3)': + '@typescript-eslint/utils@8.42.0(eslint@9.34.0)(typescript@5.9.2)': dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0) - '@typescript-eslint/scope-manager': 8.38.0 - '@typescript-eslint/types': 8.38.0 - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) - eslint: 9.32.0 - typescript: 5.8.3 + '@eslint-community/eslint-utils': 4.8.0(eslint@9.34.0) + '@typescript-eslint/scope-manager': 8.42.0 + '@typescript-eslint/types': 8.42.0 + '@typescript-eslint/typescript-estree': 8.42.0(typescript@5.9.2) + eslint: 9.34.0 + typescript: 5.9.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.38.0': + '@typescript-eslint/visitor-keys@8.42.0': dependencies: - '@typescript-eslint/types': 8.38.0 + '@typescript-eslint/types': 8.42.0 eslint-visitor-keys: 4.2.1 - '@typescript/vfs@1.6.1(typescript@5.4.5)': - dependencies: - debug: 4.4.1 - typescript: 5.4.5 - transitivePeerDependencies: - - supports-color - '@typespec/ts-http-runtime@0.3.0': dependencies: http-proxy-agent: 7.0.2 @@ -3300,16 +3245,16 @@ snapshots: '@types/chai': 5.2.2 '@vitest/spy': 3.2.4 '@vitest/utils': 3.2.4 - chai: 5.2.1 + chai: 5.3.3 tinyrainbow: 2.0.0 - '@vitest/mocker@3.2.4(vite@7.0.6(@types/node@22.17.0)(yaml@2.8.0))': + '@vitest/mocker@3.2.4(vite@7.1.4(@types/node@22.18.0)(yaml@2.8.1))': dependencies: '@vitest/spy': 3.2.4 estree-walker: 3.0.3 - magic-string: 0.30.17 + magic-string: 0.30.18 optionalDependencies: - vite: 7.0.6(@types/node@22.17.0)(yaml@2.8.0) + vite: 7.1.4(@types/node@22.18.0)(yaml@2.8.1) '@vitest/pretty-format@3.2.4': dependencies: @@ -3324,7 +3269,7 @@ snapshots: '@vitest/snapshot@3.2.4': dependencies: '@vitest/pretty-format': 3.2.4 - magic-string: 0.30.17 + magic-string: 0.30.18 pathe: 2.0.3 '@vitest/spy@3.2.4': @@ -3334,7 +3279,7 @@ snapshots: '@vitest/utils@3.2.4': dependencies: '@vitest/pretty-format': 3.2.4 - loupe: 3.2.0 + loupe: 3.2.1 tinyrainbow: 2.0.0 abort-controller@3.0.0: @@ -3358,7 +3303,7 @@ snapshots: ansi-regex@5.0.1: {} - ansi-regex@6.1.0: {} + ansi-regex@6.2.0: {} ansi-styles@4.3.0: dependencies: @@ -3453,16 +3398,16 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.25.1: + browserslist@4.25.4: dependencies: - caniuse-lite: 1.0.30001731 - electron-to-chromium: 1.5.192 + caniuse-lite: 1.0.30001739 + electron-to-chromium: 1.5.213 node-releases: 2.0.19 - update-browserslist-db: 1.1.3(browserslist@4.25.1) + update-browserslist-db: 1.1.3(browserslist@4.25.4) - bundle-require@5.1.0(esbuild@0.25.8): + bundle-require@5.1.0(esbuild@0.25.9): dependencies: - esbuild: 0.25.8 + esbuild: 0.25.9 load-tsconfig: 0.2.5 cac@6.7.14: {} @@ -3498,14 +3443,14 @@ snapshots: callsites@3.1.0: {} - caniuse-lite@1.0.30001731: {} + caniuse-lite@1.0.30001739: {} - chai@5.2.1: + chai@5.3.3: dependencies: assertion-error: 2.0.1 check-error: 2.1.1 deep-eql: 5.0.2 - loupe: 3.2.0 + loupe: 3.2.1 pathval: 2.0.1 chalk@4.1.2: @@ -3607,7 +3552,7 @@ snapshots: eastasianwidth@0.2.0: {} - electron-to-chromium@1.5.192: {} + electron-to-chromium@1.5.213: {} emoji-regex@8.0.0: {} @@ -3699,34 +3644,34 @@ snapshots: is-date-object: 1.1.0 is-symbol: 1.1.1 - esbuild@0.25.8: + esbuild@0.25.9: optionalDependencies: - '@esbuild/aix-ppc64': 0.25.8 - '@esbuild/android-arm': 0.25.8 - '@esbuild/android-arm64': 0.25.8 - '@esbuild/android-x64': 0.25.8 - '@esbuild/darwin-arm64': 0.25.8 - '@esbuild/darwin-x64': 0.25.8 - '@esbuild/freebsd-arm64': 0.25.8 - '@esbuild/freebsd-x64': 0.25.8 - '@esbuild/linux-arm': 0.25.8 - '@esbuild/linux-arm64': 0.25.8 - '@esbuild/linux-ia32': 0.25.8 - '@esbuild/linux-loong64': 0.25.8 - '@esbuild/linux-mips64el': 0.25.8 - '@esbuild/linux-ppc64': 0.25.8 - '@esbuild/linux-riscv64': 0.25.8 - '@esbuild/linux-s390x': 0.25.8 - '@esbuild/linux-x64': 0.25.8 - '@esbuild/netbsd-arm64': 0.25.8 - '@esbuild/netbsd-x64': 0.25.8 - '@esbuild/openbsd-arm64': 0.25.8 - '@esbuild/openbsd-x64': 0.25.8 - '@esbuild/openharmony-arm64': 0.25.8 - '@esbuild/sunos-x64': 0.25.8 - '@esbuild/win32-arm64': 0.25.8 - '@esbuild/win32-ia32': 0.25.8 - '@esbuild/win32-x64': 0.25.8 + '@esbuild/aix-ppc64': 0.25.9 + '@esbuild/android-arm': 0.25.9 + '@esbuild/android-arm64': 0.25.9 + '@esbuild/android-x64': 0.25.9 + '@esbuild/darwin-arm64': 0.25.9 + '@esbuild/darwin-x64': 0.25.9 + '@esbuild/freebsd-arm64': 0.25.9 + '@esbuild/freebsd-x64': 0.25.9 + '@esbuild/linux-arm': 0.25.9 + '@esbuild/linux-arm64': 0.25.9 + '@esbuild/linux-ia32': 0.25.9 + '@esbuild/linux-loong64': 0.25.9 + '@esbuild/linux-mips64el': 0.25.9 + '@esbuild/linux-ppc64': 0.25.9 + '@esbuild/linux-riscv64': 0.25.9 + '@esbuild/linux-s390x': 0.25.9 + '@esbuild/linux-x64': 0.25.9 + '@esbuild/netbsd-arm64': 0.25.9 + '@esbuild/netbsd-x64': 0.25.9 + '@esbuild/openbsd-arm64': 0.25.9 + '@esbuild/openbsd-x64': 0.25.9 + '@esbuild/openharmony-arm64': 0.25.9 + '@esbuild/sunos-x64': 0.25.9 + '@esbuild/win32-arm64': 0.25.9 + '@esbuild/win32-ia32': 0.25.9 + '@esbuild/win32-x64': 0.25.9 escalade@3.2.0: {} @@ -3734,9 +3679,9 @@ snapshots: escape-string-regexp@4.0.0: {} - eslint-config-prettier@10.1.8(eslint@9.32.0): + eslint-config-prettier@10.1.8(eslint@9.34.0): dependencies: - eslint: 9.32.0 + eslint: 9.34.0 eslint-import-context@0.1.9(unrs-resolver@1.11.1): dependencies: @@ -3753,10 +3698,10 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@4.4.4(eslint-plugin-import@2.32.0)(eslint@9.32.0): + eslint-import-resolver-typescript@4.4.4(eslint-plugin-import@2.32.0)(eslint@9.34.0): dependencies: debug: 4.4.1 - eslint: 9.32.0 + eslint: 9.34.0 eslint-import-context: 0.1.9(unrs-resolver@1.11.1) get-tsconfig: 4.10.1 is-bun-module: 2.0.0 @@ -3764,77 +3709,77 @@ snapshots: tinyglobby: 0.2.14 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.8.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.32.0) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.42.0(eslint@9.34.0)(typescript@5.9.2))(eslint-import-resolver-typescript@4.4.4)(eslint@9.34.0) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.4)(eslint@9.32.0): + eslint-module-utils@2.12.1(@typescript-eslint/parser@8.42.0(eslint@9.34.0)(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.4)(eslint@9.34.0): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.38.0(eslint@9.32.0)(typescript@5.8.3) - eslint: 9.32.0 + '@typescript-eslint/parser': 8.42.0(eslint@9.34.0)(typescript@5.9.2) + eslint: 9.34.0 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import@2.32.0)(eslint@9.32.0) + eslint-import-resolver-typescript: 4.4.4(eslint-plugin-import@2.32.0)(eslint@9.34.0) transitivePeerDependencies: - supports-color - eslint-plugin-escompat@3.11.4(eslint@9.32.0): + eslint-plugin-escompat@3.11.4(eslint@9.34.0): dependencies: - browserslist: 4.25.1 - eslint: 9.32.0 + browserslist: 4.25.4 + eslint: 9.34.0 - eslint-plugin-eslint-comments@3.2.0(eslint@9.32.0): + eslint-plugin-eslint-comments@3.2.0(eslint@9.34.0): dependencies: escape-string-regexp: 1.0.5 - eslint: 9.32.0 + eslint: 9.34.0 ignore: 5.3.2 - eslint-plugin-filenames@1.3.2(eslint@9.32.0): + eslint-plugin-filenames@1.3.2(eslint@9.34.0): dependencies: - eslint: 9.32.0 + eslint: 9.34.0 lodash.camelcase: 4.3.0 lodash.kebabcase: 4.1.1 lodash.snakecase: 4.1.1 lodash.upperfirst: 4.3.1 - eslint-plugin-github@6.0.0(eslint-import-resolver-typescript@4.4.4)(eslint@9.32.0): + eslint-plugin-github@6.0.0(eslint-import-resolver-typescript@4.4.4)(eslint@9.34.0): dependencies: - '@eslint/compat': 1.3.1(eslint@9.32.0) + '@eslint/compat': 1.3.2(eslint@9.34.0) '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.32.0 + '@eslint/js': 9.34.0 '@github/browserslist-config': 1.0.0 - '@typescript-eslint/eslint-plugin': 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.8.3))(eslint@9.32.0)(typescript@5.8.3) - '@typescript-eslint/parser': 8.38.0(eslint@9.32.0)(typescript@5.8.3) + '@typescript-eslint/eslint-plugin': 8.42.0(@typescript-eslint/parser@8.42.0(eslint@9.34.0)(typescript@5.9.2))(eslint@9.34.0)(typescript@5.9.2) + '@typescript-eslint/parser': 8.42.0(eslint@9.34.0)(typescript@5.9.2) aria-query: 5.3.2 - eslint: 9.32.0 - eslint-config-prettier: 10.1.8(eslint@9.32.0) - eslint-plugin-escompat: 3.11.4(eslint@9.32.0) - eslint-plugin-eslint-comments: 3.2.0(eslint@9.32.0) - eslint-plugin-filenames: 1.3.2(eslint@9.32.0) - eslint-plugin-i18n-text: 1.0.1(eslint@9.32.0) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.8.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.32.0) - eslint-plugin-jsx-a11y: 6.10.2(eslint@9.32.0) + eslint: 9.34.0 + eslint-config-prettier: 10.1.8(eslint@9.34.0) + eslint-plugin-escompat: 3.11.4(eslint@9.34.0) + eslint-plugin-eslint-comments: 3.2.0(eslint@9.34.0) + eslint-plugin-filenames: 1.3.2(eslint@9.34.0) + eslint-plugin-i18n-text: 1.0.1(eslint@9.34.0) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.42.0(eslint@9.34.0)(typescript@5.9.2))(eslint-import-resolver-typescript@4.4.4)(eslint@9.34.0) + eslint-plugin-jsx-a11y: 6.10.2(eslint@9.34.0) eslint-plugin-no-only-tests: 3.3.0 - eslint-plugin-prettier: 5.5.3(eslint-config-prettier@10.1.8(eslint@9.32.0))(eslint@9.32.0)(prettier@3.6.2) + eslint-plugin-prettier: 5.5.4(eslint-config-prettier@10.1.8(eslint@9.34.0))(eslint@9.34.0)(prettier@3.6.2) eslint-rule-documentation: 1.0.23 globals: 16.3.0 jsx-ast-utils: 3.3.5 prettier: 3.6.2 svg-element-attributes: 1.3.1 - typescript: 5.8.3 - typescript-eslint: 8.38.0(eslint@9.32.0)(typescript@5.8.3) + typescript: 5.9.2 + typescript-eslint: 8.42.0(eslint@9.34.0)(typescript@5.9.2) transitivePeerDependencies: - '@types/eslint' - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-i18n-text@1.0.1(eslint@9.32.0): + eslint-plugin-i18n-text@1.0.1(eslint@9.34.0): dependencies: - eslint: 9.32.0 + eslint: 9.34.0 - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.8.3))(eslint-import-resolver-typescript@4.4.4)(eslint@9.32.0): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.42.0(eslint@9.34.0)(typescript@5.9.2))(eslint-import-resolver-typescript@4.4.4)(eslint@9.34.0): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -3843,9 +3788,9 @@ snapshots: array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 9.32.0 + eslint: 9.34.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.4)(eslint@9.32.0) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@8.42.0(eslint@9.34.0)(typescript@5.9.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@4.4.4)(eslint@9.34.0) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -3857,13 +3802,13 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.38.0(eslint@9.32.0)(typescript@5.8.3) + '@typescript-eslint/parser': 8.42.0(eslint@9.34.0)(typescript@5.9.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-jsx-a11y@6.10.2(eslint@9.32.0): + eslint-plugin-jsx-a11y@6.10.2(eslint@9.34.0): dependencies: aria-query: 5.3.2 array-includes: 3.1.9 @@ -3873,7 +3818,7 @@ snapshots: axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - eslint: 9.32.0 + eslint: 9.34.0 hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 @@ -3884,14 +3829,14 @@ snapshots: eslint-plugin-no-only-tests@3.3.0: {} - eslint-plugin-prettier@5.5.3(eslint-config-prettier@10.1.8(eslint@9.32.0))(eslint@9.32.0)(prettier@3.6.2): + eslint-plugin-prettier@5.5.4(eslint-config-prettier@10.1.8(eslint@9.34.0))(eslint@9.34.0)(prettier@3.6.2): dependencies: - eslint: 9.32.0 + eslint: 9.34.0 prettier: 3.6.2 prettier-linter-helpers: 1.0.0 synckit: 0.11.11 optionalDependencies: - eslint-config-prettier: 10.1.8(eslint@9.32.0) + eslint-config-prettier: 10.1.8(eslint@9.34.0) eslint-rule-documentation@1.0.23: {} @@ -3904,17 +3849,17 @@ snapshots: eslint-visitor-keys@4.2.1: {} - eslint@9.32.0: + eslint@9.34.0: dependencies: - '@eslint-community/eslint-utils': 4.7.0(eslint@9.32.0) + '@eslint-community/eslint-utils': 4.8.0(eslint@9.34.0) '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.21.0 - '@eslint/config-helpers': 0.3.0 - '@eslint/core': 0.15.1 + '@eslint/config-helpers': 0.3.1 + '@eslint/core': 0.15.2 '@eslint/eslintrc': 3.3.1 - '@eslint/js': 9.32.0 - '@eslint/plugin-kit': 0.3.4 - '@humanfs/node': 0.16.6 + '@eslint/js': 9.34.0 + '@eslint/plugin-kit': 0.3.5 + '@humanfs/node': 0.16.7 '@humanwhocodes/module-importer': 1.0.1 '@humanwhocodes/retry': 0.4.3 '@types/estree': 1.0.8 @@ -3996,7 +3941,7 @@ snapshots: dependencies: reusify: 1.1.0 - fdir@6.4.6(picomatch@4.0.3): + fdir@6.5.0(picomatch@4.0.3): optionalDependencies: picomatch: 4.0.3 @@ -4015,9 +3960,9 @@ snapshots: fix-dts-default-cjs-exports@1.0.1: dependencies: - magic-string: 0.30.17 - mlly: 1.7.4 - rollup: 4.46.2 + magic-string: 0.30.18 + mlly: 1.8.0 + rollup: 4.50.0 flat-cache@4.0.1: dependencies: @@ -4123,7 +4068,7 @@ snapshots: gopd@1.2.0: {} - got@14.4.7: + got@14.4.8: dependencies: '@sindresorhus/is': 7.0.2 '@szmarczak/http-timer': 5.0.1 @@ -4398,7 +4343,7 @@ snapshots: lodash@4.17.21: {} - loupe@3.2.0: {} + loupe@3.2.1: {} lowercase-keys@3.0.0: {} @@ -4406,9 +4351,9 @@ snapshots: lunr@2.3.9: {} - magic-string@0.30.17: + magic-string@0.30.18: dependencies: - '@jridgewell/sourcemap-codec': 1.5.4 + '@jridgewell/sourcemap-codec': 1.5.5 markdown-it@14.1.0: dependencies: @@ -4452,7 +4397,7 @@ snapshots: minipass@7.1.2: {} - mlly@1.7.4: + mlly@1.8.0: dependencies: acorn: 8.15.0 pathe: 2.0.3 @@ -4469,7 +4414,7 @@ snapshots: nanoid@3.3.11: {} - napi-postinstall@0.3.2: {} + napi-postinstall@0.3.3: {} natural-compare@1.4.0: {} @@ -4573,17 +4518,17 @@ snapshots: pkg-types@1.3.1: dependencies: confbox: 0.1.8 - mlly: 1.7.4 + mlly: 1.8.0 pathe: 2.0.3 possible-typed-array-names@1.1.0: {} - postcss-load-config@6.0.1(postcss@8.5.6)(yaml@2.8.0): + postcss-load-config@6.0.1(postcss@8.5.6)(yaml@2.8.1): dependencies: lilconfig: 3.1.3 optionalDependencies: postcss: 8.5.6 - yaml: 2.8.0 + yaml: 2.8.1 postcss@8.5.6: dependencies: @@ -4649,30 +4594,31 @@ snapshots: reusify@1.1.0: {} - rollup@4.46.2: + rollup@4.50.0: dependencies: '@types/estree': 1.0.8 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.46.2 - '@rollup/rollup-android-arm64': 4.46.2 - '@rollup/rollup-darwin-arm64': 4.46.2 - '@rollup/rollup-darwin-x64': 4.46.2 - '@rollup/rollup-freebsd-arm64': 4.46.2 - '@rollup/rollup-freebsd-x64': 4.46.2 - '@rollup/rollup-linux-arm-gnueabihf': 4.46.2 - '@rollup/rollup-linux-arm-musleabihf': 4.46.2 - '@rollup/rollup-linux-arm64-gnu': 4.46.2 - '@rollup/rollup-linux-arm64-musl': 4.46.2 - '@rollup/rollup-linux-loongarch64-gnu': 4.46.2 - '@rollup/rollup-linux-ppc64-gnu': 4.46.2 - '@rollup/rollup-linux-riscv64-gnu': 4.46.2 - '@rollup/rollup-linux-riscv64-musl': 4.46.2 - '@rollup/rollup-linux-s390x-gnu': 4.46.2 - '@rollup/rollup-linux-x64-gnu': 4.46.2 - '@rollup/rollup-linux-x64-musl': 4.46.2 - '@rollup/rollup-win32-arm64-msvc': 4.46.2 - '@rollup/rollup-win32-ia32-msvc': 4.46.2 - '@rollup/rollup-win32-x64-msvc': 4.46.2 + '@rollup/rollup-android-arm-eabi': 4.50.0 + '@rollup/rollup-android-arm64': 4.50.0 + '@rollup/rollup-darwin-arm64': 4.50.0 + '@rollup/rollup-darwin-x64': 4.50.0 + '@rollup/rollup-freebsd-arm64': 4.50.0 + '@rollup/rollup-freebsd-x64': 4.50.0 + '@rollup/rollup-linux-arm-gnueabihf': 4.50.0 + '@rollup/rollup-linux-arm-musleabihf': 4.50.0 + '@rollup/rollup-linux-arm64-gnu': 4.50.0 + '@rollup/rollup-linux-arm64-musl': 4.50.0 + '@rollup/rollup-linux-loongarch64-gnu': 4.50.0 + '@rollup/rollup-linux-ppc64-gnu': 4.50.0 + '@rollup/rollup-linux-riscv64-gnu': 4.50.0 + '@rollup/rollup-linux-riscv64-musl': 4.50.0 + '@rollup/rollup-linux-s390x-gnu': 4.50.0 + '@rollup/rollup-linux-x64-gnu': 4.50.0 + '@rollup/rollup-linux-x64-musl': 4.50.0 + '@rollup/rollup-openharmony-arm64': 4.50.0 + '@rollup/rollup-win32-arm64-msvc': 4.50.0 + '@rollup/rollup-win32-ia32-msvc': 4.50.0 + '@rollup/rollup-win32-x64-msvc': 4.50.0 fsevents: 2.3.3 run-parallel@1.2.0: @@ -4830,7 +4776,7 @@ snapshots: strip-ansi@7.1.0: dependencies: - ansi-regex: 6.1.0 + ansi-regex: 6.2.0 strip-bom@3.0.0: {} @@ -4844,7 +4790,7 @@ snapshots: sucrase@3.35.0: dependencies: - '@jridgewell/gen-mapping': 0.3.12 + '@jridgewell/gen-mapping': 0.3.13 commander: 4.1.1 glob: 10.4.5 lines-and-columns: 1.2.4 @@ -4878,7 +4824,7 @@ snapshots: tinyglobby@0.2.14: dependencies: - fdir: 6.4.6(picomatch@4.0.3) + fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 tinypool@1.1.1: {} @@ -4899,9 +4845,9 @@ snapshots: tree-kill@1.2.2: {} - ts-api-utils@2.1.0(typescript@5.8.3): + ts-api-utils@2.1.0(typescript@5.9.2): dependencies: - typescript: 5.8.3 + typescript: 5.9.2 ts-interface-checker@0.1.13: {} @@ -4916,20 +4862,20 @@ snapshots: tslib@2.8.1: {} - tsup@8.5.0(postcss@8.5.6)(typescript@5.8.3)(yaml@2.8.0): + tsup@8.5.0(postcss@8.5.6)(typescript@5.9.2)(yaml@2.8.1): dependencies: - bundle-require: 5.1.0(esbuild@0.25.8) + bundle-require: 5.1.0(esbuild@0.25.9) cac: 6.7.14 chokidar: 4.0.3 consola: 3.4.2 debug: 4.4.1 - esbuild: 0.25.8 + esbuild: 0.25.9 fix-dts-default-cjs-exports: 1.0.1 joycon: 3.1.1 picocolors: 1.1.1 - postcss-load-config: 6.0.1(postcss@8.5.6)(yaml@2.8.0) + postcss-load-config: 6.0.1(postcss@8.5.6)(yaml@2.8.1) resolve-from: 5.0.0 - rollup: 4.46.2 + rollup: 4.50.0 source-map: 0.8.0-beta.0 sucrase: 3.35.0 tinyexec: 0.3.2 @@ -4937,7 +4883,7 @@ snapshots: tree-kill: 1.2.2 optionalDependencies: postcss: 8.5.6 - typescript: 5.8.3 + typescript: 5.9.2 transitivePeerDependencies: - jiti - supports-color @@ -4985,31 +4931,27 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typedoc@0.28.8(typescript@5.8.3): + typedoc@0.28.12(typescript@5.9.2): dependencies: - '@gerrit0/mini-shiki': 3.8.1 + '@gerrit0/mini-shiki': 3.12.1 lunr: 2.3.9 markdown-it: 14.1.0 minimatch: 9.0.5 - typescript: 5.8.3 - yaml: 2.8.0 + typescript: 5.9.2 + yaml: 2.8.1 - typescript-eslint@8.38.0(eslint@9.32.0)(typescript@5.8.3): + typescript-eslint@8.42.0(eslint@9.34.0)(typescript@5.9.2): dependencies: - '@typescript-eslint/eslint-plugin': 8.38.0(@typescript-eslint/parser@8.38.0(eslint@9.32.0)(typescript@5.8.3))(eslint@9.32.0)(typescript@5.8.3) - '@typescript-eslint/parser': 8.38.0(eslint@9.32.0)(typescript@5.8.3) - '@typescript-eslint/typescript-estree': 8.38.0(typescript@5.8.3) - '@typescript-eslint/utils': 8.38.0(eslint@9.32.0)(typescript@5.8.3) - eslint: 9.32.0 - typescript: 5.8.3 + '@typescript-eslint/eslint-plugin': 8.42.0(@typescript-eslint/parser@8.42.0(eslint@9.34.0)(typescript@5.9.2))(eslint@9.34.0)(typescript@5.9.2) + '@typescript-eslint/parser': 8.42.0(eslint@9.34.0)(typescript@5.9.2) + '@typescript-eslint/typescript-estree': 8.42.0(typescript@5.9.2) + '@typescript-eslint/utils': 8.42.0(eslint@9.34.0)(typescript@5.9.2) + eslint: 9.34.0 + typescript: 5.9.2 transitivePeerDependencies: - supports-color - typescript@3.9.10: {} - - typescript@5.4.5: {} - - typescript@5.8.3: {} + typescript@5.9.2: {} uc.micro@2.1.0: {} @@ -5030,7 +4972,7 @@ snapshots: unrs-resolver@1.11.1: dependencies: - napi-postinstall: 0.3.2 + napi-postinstall: 0.3.3 optionalDependencies: '@unrs/resolver-binding-android-arm-eabi': 1.11.1 '@unrs/resolver-binding-android-arm64': 1.11.1 @@ -5052,9 +4994,9 @@ snapshots: '@unrs/resolver-binding-win32-ia32-msvc': 1.11.1 '@unrs/resolver-binding-win32-x64-msvc': 1.11.1 - update-browserslist-db@1.1.3(browserslist@4.25.1): + update-browserslist-db@1.1.3(browserslist@4.25.4): dependencies: - browserslist: 4.25.1 + browserslist: 4.25.4 escalade: 3.2.0 picocolors: 1.1.1 @@ -5064,13 +5006,13 @@ snapshots: uuid@8.3.2: {} - vite-node@3.2.4(@types/node@22.17.0)(yaml@2.8.0): + vite-node@3.2.4(@types/node@22.18.0)(yaml@2.8.1): dependencies: cac: 6.7.14 debug: 4.4.1 es-module-lexer: 1.7.0 pathe: 2.0.3 - vite: 7.0.6(@types/node@22.17.0)(yaml@2.8.0) + vite: 7.1.4(@types/node@22.18.0)(yaml@2.8.1) transitivePeerDependencies: - '@types/node' - jiti @@ -5085,33 +5027,33 @@ snapshots: - tsx - yaml - vite@7.0.6(@types/node@22.17.0)(yaml@2.8.0): + vite@7.1.4(@types/node@22.18.0)(yaml@2.8.1): dependencies: - esbuild: 0.25.8 - fdir: 6.4.6(picomatch@4.0.3) + esbuild: 0.25.9 + fdir: 6.5.0(picomatch@4.0.3) picomatch: 4.0.3 postcss: 8.5.6 - rollup: 4.46.2 + rollup: 4.50.0 tinyglobby: 0.2.14 optionalDependencies: - '@types/node': 22.17.0 + '@types/node': 22.18.0 fsevents: 2.3.3 - yaml: 2.8.0 + yaml: 2.8.1 - vitest@3.2.4(@types/node@22.17.0)(yaml@2.8.0): + vitest@3.2.4(@types/node@22.18.0)(yaml@2.8.1): dependencies: '@types/chai': 5.2.2 '@vitest/expect': 3.2.4 - '@vitest/mocker': 3.2.4(vite@7.0.6(@types/node@22.17.0)(yaml@2.8.0)) + '@vitest/mocker': 3.2.4(vite@7.1.4(@types/node@22.18.0)(yaml@2.8.1)) '@vitest/pretty-format': 3.2.4 '@vitest/runner': 3.2.4 '@vitest/snapshot': 3.2.4 '@vitest/spy': 3.2.4 '@vitest/utils': 3.2.4 - chai: 5.2.1 + chai: 5.3.3 debug: 4.4.1 expect-type: 1.2.2 - magic-string: 0.30.17 + magic-string: 0.30.18 pathe: 2.0.3 picomatch: 4.0.3 std-env: 3.9.0 @@ -5120,11 +5062,11 @@ snapshots: tinyglobby: 0.2.14 tinypool: 1.1.1 tinyrainbow: 2.0.0 - vite: 7.0.6(@types/node@22.17.0)(yaml@2.8.0) - vite-node: 3.2.4(@types/node@22.17.0)(yaml@2.8.0) + vite: 7.1.4(@types/node@22.18.0)(yaml@2.8.1) + vite-node: 3.2.4(@types/node@22.18.0)(yaml@2.8.1) why-is-node-running: 2.3.0 optionalDependencies: - '@types/node': 22.17.0 + '@types/node': 22.18.0 transitivePeerDependencies: - jiti - less @@ -5225,6 +5167,6 @@ snapshots: xmlbuilder@11.0.1: {} - yaml@2.8.0: {} + yaml@2.8.1: {} yocto-queue@0.1.0: {} diff --git a/src/index.ts b/src/index.ts index c220f18..50583bb 100644 --- a/src/index.ts +++ b/src/index.ts @@ -47,6 +47,7 @@ const FACT_OS = "$os"; const FACT_OS_VERSION = "$os_version"; const FACT_SOURCE_URL = "source_url"; const FACT_SOURCE_URL_ETAG = "source_url_etag"; +const FACT_NIX_VERSION = "nix_version"; const FACT_NIX_LOCATION = "nix_location"; const FACT_NIX_STORE_TRUST = "nix_store_trusted"; @@ -241,7 +242,7 @@ export abstract class DetSysAction { private nixSystem: string; private architectureFetchSuffix: string; private sourceParameters: SourceDef; - private facts: Record; + private facts: Record; private events: DiagnosticEvent[]; private identity: correlation.AnonymizedCorrelationHashes; private idsHost: IdsHost; @@ -399,7 +400,7 @@ export abstract class DetSysAction { return path.join(tmpDir, `${this.actionOptions.name}-${randomUUID()}`); } - addFact(key: string, value: string | boolean): void { + addFact(key: string, value: string | boolean | number): void { this.facts[key] = value; } @@ -513,11 +514,15 @@ export abstract class DetSysAction { return; } else { await this.preflightNixStoreInfo(); + await this.preflightNixVersion(); this.addFact(FACT_NIX_STORE_TRUST, this.nixStoreTrust); } if (this.isMain) { await this.main(); + + // Run the preflight of the nix version a second time so our "shutdown" events have updated version info. + await this.preflightNixVersion(); } else if (this.isPost) { await this.post(); } @@ -1105,6 +1110,25 @@ export abstract class DetSysAction { } } + private async preflightNixVersion(): Promise { + let output = "unknown"; + + try { + ({ stdout: output } = await actionsExec.getExecOutput( + "nix", + ["--version"], + { + silent: true, + }, + )); + output = output.trim() || "unknown"; + } catch { + // That's fine. + } + + this.addFact(FACT_NIX_VERSION, output); + } + private async submitEvents(): Promise { const diagnosticsUrl = await this.idsHost.getDiagnosticsUrl(); if (diagnosticsUrl === undefined) {