{
  "version": 3,
  "sources": ["../../src/runtime/cloud.ts"],
  "sourcesContent": ["import { join } from \"node:path\";\nimport { parse as parseYaml } from \"yaml\";\nimport {\n\texactAlias,\n\tisRecord,\n\tjoinHome,\n\tMAX_METADATA_FILE_BYTES,\n\toptionBoolean,\n\toptionMap,\n\tparseIni,\n\tsafeMetadata,\n} from \"./helpers.js\";\nimport type { CollectorContext, MutableModuleSnapshot } from \"./types.js\";\n\nexport async function collectCloud(context: CollectorContext): Promise<MutableModuleSnapshot> {\n\tconst result: MutableModuleSnapshot = {};\n\tif (context.needs(\"aws\")) {\n\t\tconst values = await collectAws(context);\n\t\tif (values) result.aws = values;\n\t}\n\tif (context.needs(\"gcloud\")) {\n\t\tconst values = await collectGcloud(context);\n\t\tif (values) result.gcloud = values;\n\t}\n\tif (context.needs(\"azure\")) {\n\t\tconst values = await collectAzure(context);\n\t\tif (values) result.azure = values;\n\t}\n\tif (context.needs(\"openstack\")) {\n\t\tconst values = await collectOpenstack(context);\n\t\tif (values) result.openstack = values;\n\t}\n\treturn result;\n}\n\nasync function collectAws(context: CollectorContext): Promise<Record<string, string> | undefined> {\n\tconst env = context.input.environment;\n\tconst profile = safeMetadata(env.AWS_PROFILE ?? env.AWS_DEFAULT_PROFILE) ?? \"default\";\n\tlet region = safeMetadata(env.AWS_REGION ?? env.AWS_DEFAULT_REGION);\n\tif (!region) {\n\t\tconst configPath =\n\t\t\tsafeMetadata(env.AWS_CONFIG_FILE, 1_024) ?? joinHome(context.input, \".aws\", \"config\");\n\t\tconst source = await context.fs.readFile(configPath, MAX_METADATA_FILE_BYTES);\n\t\tif (source) {\n\t\t\tconst section = profile === \"default\" ? \"default\" : `profile ${profile}`;\n\t\t\tregion = safeMetadata(parseIni(source)[section]?.region);\n\t\t}\n\t}\n\tif (profile === \"default\" && !region && !env.AWS_PROFILE && !env.AWS_DEFAULT_PROFILE)\n\t\treturn undefined;\n\tconst values: Record<string, string> = {\n\t\tprofile: exactAlias(profile, optionMap(context, \"aws\", \"profile_aliases\")) ?? profile,\n\t};\n\tif (region)\n\t\tvalues.region = exactAlias(region, optionMap(context, \"aws\", \"region_aliases\")) ?? region;\n\treturn values;\n}\n\nasync function collectGcloud(\n\tcontext: CollectorContext,\n): Promise<Record<string, string> | undefined> {\n\tconst env = context.input.environment;\n\tconst directory =\n\t\tsafeMetadata(env.CLOUDSDK_CONFIG, 1_024) ?? joinHome(context.input, \".config\", \"gcloud\");\n\tconst active =\n\t\tsafeMetadata(env.CLOUDSDK_ACTIVE_CONFIG_NAME) ??\n\t\tsafeMetadata(await context.fs.readFile(join(directory, \"active_config\"), 256));\n\tif (!active || !/^[A-Za-z0-9_-]+$/u.test(active)) return undefined;\n\tconst source = await context.fs.readFile(\n\t\tjoin(directory, \"configurations\", `config_${active}`),\n\t\tMAX_METADATA_FILE_BYTES,\n\t);\n\tif (!source) return { active };\n\tconst document = parseIni(source);\n\tconst account = safeMetadata(document.core?.account);\n\tconst project = safeMetadata(document.core?.project);\n\tconst region = safeMetadata(document.compute?.region);\n\tconst values: Record<string, string> = { active };\n\tif (account) {\n\t\tvalues.account = account;\n\t\tconst separator = account.lastIndexOf(\"@\");\n\t\tif (separator >= 0 && separator < account.length - 1)\n\t\t\tvalues.domain = account.slice(separator + 1);\n\t}\n\tif (project) {\n\t\tvalues.project =\n\t\t\texactAlias(project, optionMap(context, \"gcloud\", \"project_aliases\")) ?? project;\n\t}\n\tif (region)\n\t\tvalues.region = exactAlias(region, optionMap(context, \"gcloud\", \"region_aliases\")) ?? region;\n\treturn values;\n}\n\nasync function collectAzure(\n\tcontext: CollectorContext,\n): Promise<Record<string, string> | undefined> {\n\tconst directory =\n\t\tsafeMetadata(context.input.environment.AZURE_CONFIG_DIR, 1_024) ??\n\t\tjoinHome(context.input, \".azure\");\n\tconst source = await context.fs.readFile(\n\t\tjoin(directory, \"azureProfile.json\"),\n\t\tMAX_METADATA_FILE_BYTES,\n\t);\n\tif (!source) return undefined;\n\ttry {\n\t\tconst document = JSON.parse(source.replace(/^\\uFEFF/u, \"\")) as unknown;\n\t\tconst subscriptions =\n\t\t\tisRecord(document) && Array.isArray(document.subscriptions)\n\t\t\t\t? document.subscriptions.filter(isRecord)\n\t\t\t\t: [];\n\t\tconst selected = subscriptions.find((item) => item.isDefault === true) ?? subscriptions[0];\n\t\tconst subscription = safeMetadata(selected?.name);\n\t\tif (!subscription) return undefined;\n\t\tconst values: Record<string, string> = {\n\t\t\tsubscription:\n\t\t\t\texactAlias(subscription, optionMap(context, \"azure\", \"subscription_aliases\")) ??\n\t\t\t\tsubscription,\n\t\t};\n\t\tif (optionBoolean(context, \"azure\", \"show_username\")) {\n\t\t\tconst user = isRecord(selected?.user) ? selected.user : undefined;\n\t\t\tconst username = safeMetadata(user?.name);\n\t\t\tif (username) values.username = username;\n\t\t}\n\t\treturn values;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nasync function collectOpenstack(\n\tcontext: CollectorContext,\n): Promise<Record<string, string> | undefined> {\n\tconst env = context.input.environment;\n\tconst cloud = safeMetadata(env.OS_CLOUD);\n\tlet project = safeMetadata(env.OS_PROJECT_NAME);\n\tif (!cloud) return undefined;\n\tif (!project) {\n\t\tconst path =\n\t\t\tsafeMetadata(env.OS_CLIENT_CONFIG_FILE, 1_024) ??\n\t\t\tjoinHome(context.input, \".config\", \"openstack\", \"clouds.yaml\");\n\t\tconst source = await context.fs.readFile(path, MAX_METADATA_FILE_BYTES);\n\t\tif (source) {\n\t\t\ttry {\n\t\t\t\tconst document = parseYaml(source) as unknown;\n\t\t\t\tconst clouds =\n\t\t\t\t\tisRecord(document) && isRecord(document.clouds) ? document.clouds : undefined;\n\t\t\t\tconst selected =\n\t\t\t\t\tclouds && Object.hasOwn(clouds, cloud) && isRecord(clouds[cloud])\n\t\t\t\t\t\t? clouds[cloud]\n\t\t\t\t\t\t: undefined;\n\t\t\t\tconst auth = isRecord(selected?.auth) ? selected.auth : undefined;\n\t\t\t\tproject = safeMetadata(auth?.project_name);\n\t\t\t} catch {\n\t\t\t\t// Malformed YAML is ignored.\n\t\t\t}\n\t\t}\n\t}\n\tconst values: Record<string, string> = {\n\t\tcloud: exactAlias(cloud, optionMap(context, \"openstack\", \"cloud_aliases\")) ?? cloud,\n\t};\n\tif (project) {\n\t\tvalues.project =\n\t\t\texactAlias(project, optionMap(context, \"openstack\", \"project_aliases\")) ?? project;\n\t}\n\treturn values;\n}\n"],
  "mappings": ";;;;;;;;;;;;;;AAAA,SAAS,YAAY;AACrB,SAAS,SAAS,iBAAiB;AAanC,eAAsB,aAAa,SAA2D;AAC7F,QAAM,SAAgC,CAAC;AACvC,MAAI,QAAQ,MAAM,KAAK,GAAG;AACzB,UAAM,SAAS,MAAM,WAAW,OAAO;AACvC,QAAI,OAAQ,QAAO,MAAM;AAAA,EAC1B;AACA,MAAI,QAAQ,MAAM,QAAQ,GAAG;AAC5B,UAAM,SAAS,MAAM,cAAc,OAAO;AAC1C,QAAI,OAAQ,QAAO,SAAS;AAAA,EAC7B;AACA,MAAI,QAAQ,MAAM,OAAO,GAAG;AAC3B,UAAM,SAAS,MAAM,aAAa,OAAO;AACzC,QAAI,OAAQ,QAAO,QAAQ;AAAA,EAC5B;AACA,MAAI,QAAQ,MAAM,WAAW,GAAG;AAC/B,UAAM,SAAS,MAAM,iBAAiB,OAAO;AAC7C,QAAI,OAAQ,QAAO,YAAY;AAAA,EAChC;AACA,SAAO;AACR;AAEA,eAAe,WAAW,SAAwE;AACjG,QAAM,MAAM,QAAQ,MAAM;AAC1B,QAAM,UAAU,aAAa,IAAI,eAAe,IAAI,mBAAmB,KAAK;AAC5E,MAAI,SAAS,aAAa,IAAI,cAAc,IAAI,kBAAkB;AAClE,MAAI,CAAC,QAAQ;AACZ,UAAM,aACL,aAAa,IAAI,iBAAiB,IAAK,KAAK,SAAS,QAAQ,OAAO,QAAQ,QAAQ;AACrF,UAAM,SAAS,MAAM,QAAQ,GAAG,SAAS,YAAY,uBAAuB;AAC5E,QAAI,QAAQ;AACX,YAAM,UAAU,YAAY,YAAY,YAAY,WAAW,OAAO;AACtE,eAAS,aAAa,SAAS,MAAM,EAAE,OAAO,GAAG,MAAM;AAAA,IACxD;AAAA,EACD;AACA,MAAI,YAAY,aAAa,CAAC,UAAU,CAAC,IAAI,eAAe,CAAC,IAAI;AAChE,WAAO;AACR,QAAM,SAAiC;AAAA,IACtC,SAAS,WAAW,SAAS,UAAU,SAAS,OAAO,iBAAiB,CAAC,KAAK;AAAA,EAC/E;AACA,MAAI;AACH,WAAO,SAAS,WAAW,QAAQ,UAAU,SAAS,OAAO,gBAAgB,CAAC,KAAK;AACpF,SAAO;AACR;AAEA,eAAe,cACd,SAC8C;AAC9C,QAAM,MAAM,QAAQ,MAAM;AAC1B,QAAM,YACL,aAAa,IAAI,iBAAiB,IAAK,KAAK,SAAS,QAAQ,OAAO,WAAW,QAAQ;AACxF,QAAM,SACL,aAAa,IAAI,2BAA2B,KAC5C,aAAa,MAAM,QAAQ,GAAG,SAAS,KAAK,WAAW,eAAe,GAAG,GAAG,CAAC;AAC9E,MAAI,CAAC,UAAU,CAAC,oBAAoB,KAAK,MAAM,EAAG,QAAO;AACzD,QAAM,SAAS,MAAM,QAAQ,GAAG;AAAA,IAC/B,KAAK,WAAW,kBAAkB,UAAU,MAAM,EAAE;AAAA,IACpD;AAAA,EACD;AACA,MAAI,CAAC,OAAQ,QAAO,EAAE,OAAO;AAC7B,QAAM,WAAW,SAAS,MAAM;AAChC,QAAM,UAAU,aAAa,SAAS,MAAM,OAAO;AACnD,QAAM,UAAU,aAAa,SAAS,MAAM,OAAO;AACnD,QAAM,SAAS,aAAa,SAAS,SAAS,MAAM;AACpD,QAAM,SAAiC,EAAE,OAAO;AAChD,MAAI,SAAS;AACZ,WAAO,UAAU;AACjB,UAAM,YAAY,QAAQ,YAAY,GAAG;AACzC,QAAI,aAAa,KAAK,YAAY,QAAQ,SAAS;AAClD,aAAO,SAAS,QAAQ,MAAM,YAAY,CAAC;AAAA,EAC7C;AACA,MAAI,SAAS;AACZ,WAAO,UACN,WAAW,SAAS,UAAU,SAAS,UAAU,iBAAiB,CAAC,KAAK;AAAA,EAC1E;AACA,MAAI;AACH,WAAO,SAAS,WAAW,QAAQ,UAAU,SAAS,UAAU,gBAAgB,CAAC,KAAK;AACvF,SAAO;AACR;AAEA,eAAe,aACd,SAC8C;AAC9C,QAAM,YACL,aAAa,QAAQ,MAAM,YAAY,kBAAkB,IAAK,KAC9D,SAAS,QAAQ,OAAO,QAAQ;AACjC,QAAM,SAAS,MAAM,QAAQ,GAAG;AAAA,IAC/B,KAAK,WAAW,mBAAmB;AAAA,IACnC;AAAA,EACD;AACA,MAAI,CAAC,OAAQ,QAAO;AACpB,MAAI;AACH,UAAM,WAAW,KAAK,MAAM,OAAO,QAAQ,YAAY,EAAE,CAAC;AAC1D,UAAM,gBACL,SAAS,QAAQ,KAAK,MAAM,QAAQ,SAAS,aAAa,IACvD,SAAS,cAAc,OAAO,QAAQ,IACtC,CAAC;AACL,UAAM,WAAW,cAAc,KAAK,CAAC,SAAS,KAAK,cAAc,IAAI,KAAK,cAAc,CAAC;AACzF,UAAM,eAAe,aAAa,UAAU,IAAI;AAChD,QAAI,CAAC,aAAc,QAAO;AAC1B,UAAM,SAAiC;AAAA,MACtC,cACC,WAAW,cAAc,UAAU,SAAS,SAAS,sBAAsB,CAAC,KAC5E;AAAA,IACF;AACA,QAAI,cAAc,SAAS,SAAS,eAAe,GAAG;AACrD,YAAM,OAAO,SAAS,UAAU,IAAI,IAAI,SAAS,OAAO;AACxD,YAAM,WAAW,aAAa,MAAM,IAAI;AACxC,UAAI,SAAU,QAAO,WAAW;AAAA,IACjC;AACA,WAAO;AAAA,EACR,QAAQ;AACP,WAAO;AAAA,EACR;AACD;AAEA,eAAe,iBACd,SAC8C;AAC9C,QAAM,MAAM,QAAQ,MAAM;AAC1B,QAAM,QAAQ,aAAa,IAAI,QAAQ;AACvC,MAAI,UAAU,aAAa,IAAI,eAAe;AAC9C,MAAI,CAAC,MAAO,QAAO;AACnB,MAAI,CAAC,SAAS;AACb,UAAM,OACL,aAAa,IAAI,uBAAuB,IAAK,KAC7C,SAAS,QAAQ,OAAO,WAAW,aAAa,aAAa;AAC9D,UAAM,SAAS,MAAM,QAAQ,GAAG,SAAS,MAAM,uBAAuB;AACtE,QAAI,QAAQ;AACX,UAAI;AACH,cAAM,WAAW,UAAU,MAAM;AACjC,cAAM,SACL,SAAS,QAAQ,KAAK,SAAS,SAAS,MAAM,IAAI,SAAS,SAAS;AACrE,cAAM,WACL,UAAU,OAAO,OAAO,QAAQ,KAAK,KAAK,SAAS,OAAO,KAAK,CAAC,IAC7D,OAAO,KAAK,IACZ;AACJ,cAAM,OAAO,SAAS,UAAU,IAAI,IAAI,SAAS,OAAO;AACxD,kBAAU,aAAa,MAAM,YAAY;AAAA,MAC1C,QAAQ;AAAA,MAER;AAAA,IACD;AAAA,EACD;AACA,QAAM,SAAiC;AAAA,IACtC,OAAO,WAAW,OAAO,UAAU,SAAS,aAAa,eAAe,CAAC,KAAK;AAAA,EAC/E;AACA,MAAI,SAAS;AACZ,WAAO,UACN,WAAW,SAAS,UAAU,SAAS,aAAa,iBAAiB,CAAC,KAAK;AAAA,EAC7E;AACA,SAAO;AACR;",
  "names": []
}
