const unknownValue = "unknown"; export function normalizeIsoTimestamp(value) { const source = String(value ?? "").trim(); if (!source) return null; if (/^\d+$/u.test(source)) { const seconds = Number.parseInt(source, 10); if (Number.isSafeInteger(seconds)) { const date = new Date(seconds * 1000); if (Number.isFinite(date.getTime())) return date.toISOString(); } } const date = new Date(source); return Number.isFinite(date.getTime()) ? date.toISOString() : null; } export function imageTagFromReference(imageReference) { const source = String(imageReference ?? "").trim(); const slashIndex = source.lastIndexOf("/"); const colonIndex = source.lastIndexOf(":"); if (colonIndex <= slashIndex) return null; return source.slice(colonIndex + 1) || null; } export function shortRevision(value) { const source = String(value ?? "").trim(); return source.length >= 7 ? source.slice(0, 7) : source || unknownValue; } export function buildMetadataFromEnv(env = process.env, { serviceId = "hwlab-unknown", fallbackImageRepository = null } = {}) { const commitId = firstNonEmpty(env.HWLAB_COMMIT_ID, env.HWLAB_GIT_SHA, env.GIT_COMMIT) ?? unknownValue; const revision = firstNonEmpty(env.HWLAB_REVISION, commitId) ?? unknownValue; const fallbackRepository = fallbackImageRepository ?? `ghcr.io/pikastech/${serviceId}`; const imageReference = firstNonEmpty(env.HWLAB_IMAGE, `${fallbackRepository}:${shortRevision(commitId)}`) ?? unknownValue; const imageTag = firstNonEmpty(env.HWLAB_IMAGE_TAG, imageTagFromReference(imageReference), shortRevision(commitId)) ?? unknownValue; const buildCreatedAt = normalizeIsoTimestamp( firstNonEmpty(env.HWLAB_BUILD_CREATED_AT, env.HWLAB_IMAGE_CREATED_AT, env.SOURCE_DATE_EPOCH, env.BUILD_DATE) ); const buildSource = firstNonEmpty(env.HWLAB_BUILD_SOURCE, "runtime-env") ?? "runtime-env"; return { revision, commit: { id: commitId, source: buildSource }, image: { reference: imageReference, tag: imageTag, digest: firstNonEmpty(env.HWLAB_IMAGE_DIGEST, unknownValue) ?? unknownValue }, build: { createdAt: buildCreatedAt, source: buildSource, provenance: firstNonEmpty(env.HWLAB_BUILD_PROVENANCE, null), metadataSource: buildCreatedAt ? "runtime-env:HWLAB_BUILD_CREATED_AT" : "unavailable", unavailableReason: buildCreatedAt ? null : "HWLAB_BUILD_CREATED_AT missing from runtime environment" } }; } function firstNonEmpty(...values) { for (const value of values) { if (value === null || value === undefined) continue; const text = String(value).trim(); if (text) return text; } return null; }