@tiangong-lca/cli 0.1.2 → 0.1.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +51 -12
- package/dist/src/auth-identity-receipt.d.ts +2 -0
- package/dist/src/auth-identity-receipt.js +2 -0
- package/dist/src/auth-identity-receipt.js.map +1 -0
- package/dist/src/cli.d.ts +4 -0
- package/dist/src/cli.js +264 -7
- package/dist/src/cli.js.map +1 -1
- package/dist/src/lib/auth-identity-receipt.d.ts +2 -2
- package/dist/src/lib/auth-identity-receipt.js +20 -12
- package/dist/src/lib/auth-identity-receipt.js.map +1 -1
- package/dist/src/lib/env.d.ts +8 -0
- package/dist/src/lib/env.js +36 -3
- package/dist/src/lib/env.js.map +1 -1
- package/dist/src/lib/lca-release.d.ts +1 -1
- package/dist/src/lib/lca-release.js +3 -4
- package/dist/src/lib/lca-release.js.map +1 -1
- package/dist/src/lib/lifecyclemodel-resulting-process.js +6 -2
- package/dist/src/lib/lifecyclemodel-resulting-process.js.map +1 -1
- package/dist/src/lib/oauth-loopback.d.ts +52 -0
- package/dist/src/lib/oauth-loopback.js +229 -0
- package/dist/src/lib/oauth-loopback.js.map +1 -0
- package/dist/src/lib/oauth-pkce.d.ts +63 -0
- package/dist/src/lib/oauth-pkce.js +268 -0
- package/dist/src/lib/oauth-pkce.js.map +1 -0
- package/dist/src/lib/process-refresh-references.js +2 -2
- package/dist/src/lib/process-refresh-references.js.map +1 -1
- package/dist/src/lib/process-scope-statistics.js +8 -3
- package/dist/src/lib/process-scope-statistics.js.map +1 -1
- package/dist/src/lib/state-lock.js +10 -4
- package/dist/src/lib/state-lock.js.map +1 -1
- package/dist/src/lib/supabase-client.d.ts +13 -1
- package/dist/src/lib/supabase-client.js +64 -3
- package/dist/src/lib/supabase-client.js.map +1 -1
- package/dist/src/lib/supabase-json-ordered-write.js +7 -3
- package/dist/src/lib/supabase-json-ordered-write.js.map +1 -1
- package/dist/src/lib/supabase-session.d.ts +63 -8
- package/dist/src/lib/supabase-session.js +315 -21
- package/dist/src/lib/supabase-session.js.map +1 -1
- package/package.json +5 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"process-refresh-references.js","sourceRoot":"","sources":["../../../src/lib/process-refresh-references.ts"],"names":[],"mappings":"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","sourcesContent":["// data-api-relations: contacts, flowproperties, flows, lciamethods, processes, sources, unitgroups\nimport { appendFileSync, existsSync, mkdirSync, readFileSync } from 'node:fs';\nimport path from 'node:path';\nimport { writeJsonArtifact, writeJsonLinesArtifact, writeTextArtifact } from './artifacts.js';\nimport { CliError } from './errors.js';\nimport type { FetchLike, ResponseLike } from './http.js';\nimport {\n syncStateAwareProcessRecord,\n type ProcessStateAwareWriteResult,\n type SyncStateAwareProcessRecordOptions,\n} from './process-save-draft.js';\nimport {\n validateProcessPayload,\n type ProcessPayloadValidationResult,\n} from './process-payload-validation.js';\nimport {\n deriveSupabaseProjectBaseUrl,\n deriveSupabaseRestBaseUrl,\n requireSupabaseRestRuntime,\n} from './supabase-client.js';\nimport {\n applyDataApiProfileHeaders,\n buildDataApiUrl,\n resolveDataApiCapability,\n} from './supabase-data-api-contract.js';\nimport { resolveSupabaseUserSession } from './supabase-session.js';\nimport { redactEmail, requireUserApiKeyCredentials } from './user-api-key.js';\n\ntype JsonObject = Record<string, unknown>;\n\ntype ProcessManifestRow = {\n id: string;\n version: string;\n modified_at: string | null;\n state_code: number | null;\n model_id: string | null;\n};\n\ntype ProcessDetailRow = ProcessManifestRow & {\n user_id: string | null;\n json: JsonObject;\n};\n\ntype LatestReferenceRow = {\n id: string;\n version: string;\n json: JsonObject;\n modified_at: string | null;\n state_code: number | null;\n user_id: string | null;\n team_id: string | null;\n};\n\ntype LatestReferenceCacheEntry = {\n row: LatestReferenceRow | null;\n count: number;\n error?: string;\n};\n\ntype ReferenceNode = JsonObject & {\n '@refObjectId': string;\n '@version': string;\n '@type': string;\n};\n\ntype CollectedReference = {\n node: ReferenceNode;\n path: string;\n};\n\ntype TouchedReference = {\n id: string;\n type: string;\n from_version: string;\n to_version: string;\n path: string;\n};\n\ntype UnresolvedReference = {\n id: string;\n type: string;\n version: string;\n reason: string;\n};\n\ntype UpdateSummary = {\n version_updates: number;\n description_updates: number;\n touched_refs: TouchedReference[];\n unresolved_refs: UnresolvedReference[];\n};\n\ntype ProgressStatus = 'saved' | 'dry_run' | 'skipped' | 'validation_blocked' | 'error';\n\ntype ProgressRecord = {\n time: string;\n key: string;\n id?: string;\n version?: string;\n status: ProgressStatus;\n note?: string;\n ref_count?: number;\n version_updates?: number;\n description_updates?: number;\n unresolved_count?: number;\n changed_ref_count?: number;\n schema_validator?: string;\n schema_issue_count?: number;\n schema_issues?: ProcessPayloadValidationResult['issues'];\n touched_refs?: TouchedReference[];\n unresolved_refs?: UnresolvedReference[];\n write_path?: string;\n write_operation?: string;\n error?: string;\n};\n\ntype RefreshManifest = {\n schema_version: 1;\n generated_at_utc: string;\n user_id: string;\n masked_user_email: string;\n source: 'current_user_processes';\n order: 'modified_at.desc,id.asc';\n page_size: number;\n count: number;\n rows: ProcessManifestRow[];\n};\n\nexport type ProcessRefreshReferencesReport = {\n schema_version: 1;\n generated_at_utc: string;\n status: 'completed_process_reference_refresh' | 'completed_process_reference_refresh_with_errors';\n out_dir: string;\n mode: 'dry_run' | 'apply';\n user_id: string;\n masked_user_email: string;\n counts: {\n manifest: number;\n selected: number;\n already_completed: number;\n pending: number;\n saved: number;\n dry_run: number;\n skipped: number;\n validation_blocked: number;\n errors: number;\n };\n files: {\n manifest: string;\n progress_jsonl: string;\n errors_jsonl: string;\n validation_blockers_jsonl: string;\n summary_json: string;\n report_md: string;\n };\n};\n\nexport type RunProcessRefreshReferencesOptions = {\n outDir: string;\n apply?: boolean | null;\n reuseManifest?: boolean | null;\n limit?: number | null;\n pageSize?: number | null;\n concurrency?: number | null;\n env?: NodeJS.ProcessEnv;\n fetchImpl?: FetchLike;\n timeoutMs?: number;\n maxRetries?: number;\n now?: Date;\n validateProcessPayloadImpl?: (payload: JsonObject) => ProcessPayloadValidationResult;\n syncStateAwareProcessRecordImpl?: (\n options: SyncStateAwareProcessRecordOptions,\n ) => Promise<ProcessStateAwareWriteResult>;\n};\n\nconst DEFAULT_TIMEOUT_MS = 15_000;\nconst DEFAULT_MAX_RETRIES = 3;\nconst DEFAULT_PAGE_SIZE = 500;\nconst DEFAULT_CONCURRENCY = 1;\nconst MAX_PAGE_SIZE = 1_000;\nconst MAX_CONCURRENCY = 8;\n\nconst TABLE_BY_TYPE = new Map<string, string>([\n ['contact data set', 'contacts'],\n ['source data set', 'sources'],\n ['unit group data set', 'unitgroups'],\n ['flow property data set', 'flowproperties'],\n ['flow data set', 'flows'],\n ['process data set', 'processes'],\n ['lifeCycleModel data set', 'lifecyclemodels'],\n ['LCIA method data set', 'lciamethods'],\n] as const);\n\nfunction normalizeReferenceType(type: string): string {\n return type.trim().toLowerCase();\n}\n\nfunction tableForReferenceType(type: string): string | null {\n return TABLE_BY_TYPE.get(type) ?? TABLE_BY_TYPE.get(normalizeReferenceType(type)) ?? null;\n}\n\nfunction isRecord(value: unknown): value is JsonObject {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction trimText(value: unknown): string {\n return typeof value === 'string' ? value.trim() : '';\n}\n\nfunction requiredNonEmpty(value: string, label: string, code: string): string {\n const normalized = value.trim();\n if (!normalized) {\n throw new CliError(`Missing required ${label}.`, {\n code,\n exitCode: 2,\n });\n }\n return normalized;\n}\n\nfunction toPositiveInteger(value: number, label: string, code: string, max?: number): number {\n if (!Number.isInteger(value) || value <= 0 || (max !== undefined && value > max)) {\n throw new CliError(\n max === undefined\n ? `Expected ${label} to be a positive integer.`\n : `Expected ${label} to be a positive integer not greater than ${max}.`,\n {\n code,\n exitCode: 2,\n },\n );\n }\n return value;\n}\n\nfunction toOptionalPositiveInteger(\n value: number | null | undefined,\n label: string,\n code: string,\n): number | null {\n if (value === null || value === undefined) {\n return null;\n }\n return toPositiveInteger(value, label, code);\n}\n\nfunction nowIso(now: Date = new Date()): string {\n return now.toISOString();\n}\n\nfunction recordKey(row: Pick<ProcessManifestRow, 'id' | 'version'>): string {\n return `${row.id}:${row.version}`;\n}\n\nfunction parseContentRangeTotal(value: string | null): number | null {\n if (!value) {\n return null;\n }\n const match = value.match(/\\/(\\d+|\\*)$/u);\n if (!match || match[1] === '*') {\n return null;\n }\n return Number.parseInt(match[1]!, 10);\n}\n\nfunction normalizeVersion(version: string): string {\n return version.trim();\n}\n\nfunction compareVersions(left: string, right: string): number {\n const leftParts = normalizeVersion(left)\n .split('.')\n .map((part) => Number(part));\n const rightParts = normalizeVersion(right)\n .split('.')\n .map((part) => Number(part));\n const length = Math.max(leftParts.length, rightParts.length);\n\n for (let index = 0; index < length; index += 1) {\n const leftValue = Number.isFinite(leftParts[index]) ? leftParts[index] : 0;\n const rightValue = Number.isFinite(rightParts[index]) ? rightParts[index] : 0;\n if (leftValue !== rightValue) {\n return leftValue - rightValue;\n }\n }\n\n return normalizeVersion(left).localeCompare(normalizeVersion(right));\n}\n\nfunction jsonToList(value: unknown): unknown[] {\n if (value === null || value === undefined || value === '') {\n return [];\n }\n return Array.isArray(value) ? value : [value];\n}\n\nfunction getLangList(value: unknown): JsonObject[] {\n if (value === null || value === undefined || value === '') {\n return [];\n }\n if (Array.isArray(value)) {\n return value.filter((entry): entry is JsonObject => isRecord(entry));\n }\n if (isRecord(value)) {\n const langString = value['common:langString'];\n if (Array.isArray(langString)) {\n return langString.filter((entry): entry is JsonObject => isRecord(entry));\n }\n if (isRecord(langString)) {\n return [langString];\n }\n if (value['#text'] !== undefined || value['@xml:lang'] !== undefined) {\n return [value];\n }\n }\n if (typeof value === 'string') {\n return [{ '@xml:lang': 'en', '#text': value }];\n }\n return [];\n}\n\nfunction getLangText(value: unknown, lang: string | null): string {\n const entries = getLangList(value);\n if (lang) {\n for (const entry of entries) {\n if (\n trimText(entry['@xml:lang']).toLowerCase() === lang.toLowerCase() &&\n trimText(entry['#text'])\n ) {\n return trimText(entry['#text']);\n }\n }\n }\n for (const entry of entries) {\n if (trimText(entry['#text'])) {\n return trimText(entry['#text']);\n }\n }\n return '';\n}\n\nfunction genFlowName(name: JsonObject | null, lang: string): string {\n if (!name) {\n return '';\n }\n const parts = [\n getLangText(name.baseName, lang),\n getLangText(name.treatmentStandardsRoutes, lang),\n getLangText(name.mixAndLocationTypes, lang),\n getLangText(name.flowProperties, lang),\n ].filter(Boolean);\n return parts.join('; ');\n}\n\nfunction genFlowNameJson(name: JsonObject | null): JsonObject[] {\n if (!name) {\n return [];\n }\n const results: JsonObject[] = [];\n for (const item of jsonToList(name.baseName)) {\n const entry = isRecord(item) ? item : {};\n const lang = trimText(entry['@xml:lang']);\n const text = lang ? genFlowName(name, lang) : '';\n if (lang && text) {\n results.push({ '@xml:lang': lang, '#text': text });\n }\n }\n return results;\n}\n\nfunction genProcessName(name: JsonObject | null, lang: string): string {\n if (!name) {\n return '';\n }\n const parts = [\n getLangText(name.baseName, lang),\n getLangText(name.treatmentStandardsRoutes, lang),\n getLangText(name.mixAndLocationTypes, lang),\n getLangText(name.functionalUnitFlowProperties, lang),\n ].filter(Boolean);\n return parts.join('; ');\n}\n\nfunction genProcessNameJson(name: JsonObject | null): JsonObject[] {\n if (!name) {\n return [];\n }\n const results: JsonObject[] = [];\n for (const item of jsonToList(name.baseName)) {\n const entry = isRecord(item) ? item : {};\n const lang = trimText(entry['@xml:lang']);\n const text = lang ? genProcessName(name, lang) : '';\n if (lang && text) {\n results.push({ '@xml:lang': lang, '#text': text });\n }\n }\n return results;\n}\n\nfunction normalizeDatasetPayload(payload: unknown, label: string): JsonObject {\n if (typeof payload === 'string') {\n try {\n const parsed = JSON.parse(payload) as unknown;\n if (!isRecord(parsed)) {\n throw new CliError(`Remote dataset payload was not a JSON object for ${label}.`, {\n code: 'PROCESS_REFRESH_REMOTE_PAYLOAD_INVALID',\n exitCode: 1,\n details: parsed,\n });\n }\n return parsed;\n } catch (error) {\n if (error instanceof CliError) {\n throw error;\n }\n throw new CliError(`Remote dataset payload was not valid JSON for ${label}.`, {\n code: 'PROCESS_REFRESH_REMOTE_PAYLOAD_INVALID_JSON',\n exitCode: 1,\n details: String(error),\n });\n }\n }\n\n if (!isRecord(payload)) {\n throw new CliError(`Remote dataset payload was missing json for ${label}.`, {\n code: 'PROCESS_REFRESH_REMOTE_PAYLOAD_MISSING',\n exitCode: 1,\n details: payload,\n });\n }\n\n return payload;\n}\n\nfunction getShortDescription(payload: JsonObject, type: string): JsonObject[] {\n const normalizedType = normalizeReferenceType(type);\n if (normalizedType === 'flow data set') {\n const flowDataSet = isRecord(payload.flowDataSet) ? payload.flowDataSet : {};\n const info = isRecord(flowDataSet.flowInformation) ? flowDataSet.flowInformation : {};\n const dataSetInformation = isRecord(info.dataSetInformation) ? info.dataSetInformation : {};\n const name = isRecord(dataSetInformation.name) ? dataSetInformation.name : null;\n return genFlowNameJson(name);\n }\n\n if (normalizedType === 'process data set') {\n const processDataSet = isRecord(payload.processDataSet) ? payload.processDataSet : {};\n const info = isRecord(processDataSet.processInformation)\n ? processDataSet.processInformation\n : {};\n const dataSetInformation = isRecord(info.dataSetInformation) ? info.dataSetInformation : {};\n const name = isRecord(dataSetInformation.name) ? dataSetInformation.name : null;\n return genProcessNameJson(name);\n }\n\n if (normalizedType === 'contact data set') {\n const contactDataSet = isRecord(payload.contactDataSet) ? payload.contactDataSet : {};\n const info = isRecord(contactDataSet.contactInformation)\n ? contactDataSet.contactInformation\n : {};\n const dataSetInformation = isRecord(info.dataSetInformation) ? info.dataSetInformation : {};\n return getLangList(dataSetInformation['common:shortName']);\n }\n\n if (normalizedType === 'source data set') {\n const sourceDataSet = isRecord(payload.sourceDataSet) ? payload.sourceDataSet : {};\n const info = isRecord(sourceDataSet.sourceInformation) ? sourceDataSet.sourceInformation : {};\n const dataSetInformation = isRecord(info.dataSetInformation) ? info.dataSetInformation : {};\n return getLangList(dataSetInformation['common:shortName']);\n }\n\n if (normalizedType === 'flow property data set') {\n const flowPropertyDataSet = isRecord(payload.flowPropertyDataSet)\n ? payload.flowPropertyDataSet\n : {};\n const info = isRecord(flowPropertyDataSet.flowPropertyInformation)\n ? flowPropertyDataSet.flowPropertyInformation\n : {};\n const dataSetInformation = isRecord(info.dataSetInformation) ? info.dataSetInformation : {};\n return getLangList(dataSetInformation['common:shortName']);\n }\n\n if (normalizedType === 'unit group data set') {\n const unitGroupDataSet = isRecord(payload.unitGroupDataSet) ? payload.unitGroupDataSet : {};\n const info = isRecord(unitGroupDataSet.unitGroupInformation)\n ? unitGroupDataSet.unitGroupInformation\n : {};\n const dataSetInformation = isRecord(info.dataSetInformation) ? info.dataSetInformation : {};\n return getLangList(dataSetInformation['common:shortName']);\n }\n\n if (normalizedType === 'lcia method data set') {\n const lciaMethodDataSet = isRecord(payload.lciaMethodDataSet) ? payload.lciaMethodDataSet : {};\n const info = isRecord(lciaMethodDataSet.LCIAMethodInformation)\n ? lciaMethodDataSet.LCIAMethodInformation\n : {};\n const dataSetInformation = isRecord(info.dataSetInformation) ? info.dataSetInformation : {};\n return getLangList(dataSetInformation['common:shortName']);\n }\n\n return [];\n}\n\nasync function parseJsonResponse(response: ResponseLike, label: string): Promise<unknown> {\n const text = await response.text();\n const contentType = response.headers.get('content-type') ?? '';\n if (!text.trim()) {\n return null;\n }\n if (!contentType.includes('application/json')) {\n return text;\n }\n try {\n return JSON.parse(text);\n } catch (error) {\n throw new CliError(`${label} returned invalid JSON.`, {\n code: 'PROCESS_REFRESH_REMOTE_INVALID_JSON',\n exitCode: 1,\n details: String(error),\n });\n }\n}\n\nasync function fetchJsonWithRetry(options: {\n url: string;\n init: RequestInit;\n label: string;\n fetchImpl: FetchLike;\n timeoutMs: number;\n maxRetries: number;\n}): Promise<{ status: number; headers: Headers; body: unknown }> {\n let lastError: unknown = null;\n\n for (let attempt = 1; attempt <= options.maxRetries; attempt += 1) {\n try {\n const response = await options.fetchImpl(options.url, {\n ...options.init,\n signal: AbortSignal.timeout(options.timeoutMs),\n });\n const body = await parseJsonResponse(response, options.label);\n if (!response.ok) {\n throw new CliError(`${options.label} failed with ${response.status}.`, {\n code: 'PROCESS_REFRESH_REMOTE_REQUEST_FAILED',\n exitCode: 1,\n details: {\n status: response.status,\n body,\n url: options.url,\n },\n });\n }\n return {\n status: response.status,\n headers: new Headers({\n 'content-range': response.headers.get('content-range') ?? '',\n 'content-type': response.headers.get('content-type') ?? '',\n }),\n body,\n };\n } catch (error) {\n lastError = error;\n if (attempt >= options.maxRetries) {\n break;\n }\n await new Promise((resolve) => setTimeout(resolve, attempt * 1_500));\n }\n }\n\n if (lastError instanceof CliError) {\n throw lastError;\n }\n\n throw new CliError(`${options.label} failed after ${options.maxRetries} attempt(s).`, {\n code: 'PROCESS_REFRESH_REMOTE_REQUEST_FAILED',\n exitCode: 1,\n details: String(lastError),\n });\n}\n\nasync function resolveRemoteAuth(options: {\n env: NodeJS.ProcessEnv;\n fetchImpl: FetchLike;\n timeoutMs: number;\n now: Date;\n maxRetries: number;\n}): Promise<{\n projectBaseUrl: string;\n publishableKey: string;\n accessToken: string;\n userId: string;\n maskedUserEmail: string;\n}> {\n const runtime = requireSupabaseRestRuntime(options.env);\n const session = await resolveSupabaseUserSession({\n runtime,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n now: options.now,\n });\n const userResponse = await fetchJsonWithRetry({\n url: `${deriveSupabaseProjectBaseUrl(runtime.apiBaseUrl)}/auth/v1/user`,\n init: {\n method: 'GET',\n headers: {\n apikey: runtime.publishableKey,\n Authorization: `Bearer ${session.accessToken}`,\n Accept: 'application/json',\n },\n },\n label: 'supabase current-user lookup',\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n maxRetries: options.maxRetries,\n });\n const userId = isRecord(userResponse.body) ? trimText(userResponse.body.id) : '';\n if (!userId) {\n throw new CliError('Supabase current-user lookup succeeded without a user id.', {\n code: 'PROCESS_REFRESH_CURRENT_USER_ID_MISSING',\n exitCode: 1,\n });\n }\n\n return {\n projectBaseUrl: deriveSupabaseProjectBaseUrl(runtime.apiBaseUrl),\n publishableKey: runtime.publishableKey,\n accessToken: session.accessToken,\n userId,\n maskedUserEmail: redactEmail(requireUserApiKeyCredentials(runtime.userApiKey).email),\n };\n}\n\nfunction normalizeManifestRow(value: unknown): ProcessManifestRow | null {\n if (!isRecord(value)) {\n return null;\n }\n const id = trimText(value.id);\n const version = trimText(value.version);\n if (!id || !version) {\n return null;\n }\n return {\n id,\n version,\n modified_at: trimText(value.modified_at) || null,\n state_code: typeof value.state_code === 'number' ? value.state_code : null,\n model_id: trimText(value.model_id) || null,\n };\n}\n\nfunction readManifest(filePath: string): RefreshManifest | null {\n if (!existsSync(filePath)) {\n return null;\n }\n try {\n const parsed = JSON.parse(readFileSync(filePath, 'utf8')) as unknown;\n if (!isRecord(parsed) || !Array.isArray(parsed.rows)) {\n throw new Error('manifest rows missing');\n }\n const rows = parsed.rows\n .map((row) => normalizeManifestRow(row))\n .filter((row): row is ProcessManifestRow => row !== null);\n const userId = trimText(parsed.user_id);\n const maskedUserEmail = trimText(parsed.masked_user_email);\n if (!userId || !maskedUserEmail) {\n throw new Error('manifest user metadata missing');\n }\n return {\n schema_version: 1,\n generated_at_utc: trimText(parsed.generated_at_utc) || nowIso(),\n user_id: userId,\n masked_user_email: maskedUserEmail,\n source: 'current_user_processes',\n order: 'modified_at.desc,id.asc',\n page_size:\n typeof parsed.page_size === 'number' && Number.isInteger(parsed.page_size)\n ? parsed.page_size\n : DEFAULT_PAGE_SIZE,\n count:\n typeof parsed.count === 'number' && Number.isInteger(parsed.count)\n ? parsed.count\n : rows.length,\n rows,\n };\n } catch (error) {\n throw new CliError(`Manifest file is not valid JSON: ${filePath}`, {\n code: 'PROCESS_REFRESH_MANIFEST_INVALID',\n exitCode: 2,\n details: String(error),\n });\n }\n}\n\nasync function snapshotProcesses(options: {\n projectBaseUrl: string;\n publishableKey: string;\n accessToken: string;\n userId: string;\n pageSize: number;\n fetchImpl: FetchLike;\n timeoutMs: number;\n maxRetries: number;\n}): Promise<ProcessManifestRow[]> {\n const capability = resolveDataApiCapability({ kind: 'relation', name: 'processes' });\n const rows: ProcessManifestRow[] = [];\n let total: number | null = null;\n\n for (let offset = 0; total === null || offset < total; offset += options.pageSize) {\n const url = new URL(\n buildDataApiUrl(deriveSupabaseRestBaseUrl(options.projectBaseUrl), capability),\n );\n url.searchParams.set('select', 'id,version,modified_at,state_code,model_id');\n url.searchParams.set('user_id', `eq.${options.userId}`);\n url.searchParams.set('order', 'modified_at.desc,id.asc');\n url.searchParams.set('limit', String(options.pageSize));\n url.searchParams.set('offset', String(offset));\n\n const page = await fetchJsonWithRetry({\n url: url.toString(),\n init: {\n method: 'GET',\n headers: applyDataApiProfileHeaders(\n {\n apikey: options.publishableKey,\n Authorization: `Bearer ${options.accessToken}`,\n Accept: 'application/json',\n Prefer: 'count=exact',\n },\n capability,\n ),\n },\n label: `process refresh snapshot page fetch (offset=${offset})`,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n maxRetries: options.maxRetries,\n });\n\n const pageRows = Array.isArray(page.body) ? page.body : [];\n const normalizedRows = pageRows\n .map((row) => normalizeManifestRow(row))\n .filter((row): row is ProcessManifestRow => row !== null);\n rows.push(...normalizedRows);\n total = parseContentRangeTotal(page.headers.get('content-range')) ?? rows.length;\n if (normalizedRows.length === 0) {\n break;\n }\n }\n\n const deduped: ProcessManifestRow[] = [];\n const seen = new Set<string>();\n for (const row of rows) {\n const key = recordKey(row);\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n deduped.push(row);\n }\n\n return deduped;\n}\n\nfunction readCompleted(progressFile: string, applyMode: boolean): Set<string> {\n const completed = new Set<string>();\n if (!existsSync(progressFile)) {\n return completed;\n }\n const doneStatuses = applyMode\n ? new Set<ProgressStatus>(['saved', 'skipped', 'validation_blocked'])\n : new Set<ProgressStatus>(['dry_run', 'skipped', 'validation_blocked']);\n const lines = readFileSync(progressFile, 'utf8').split(/\\r?\\n/u).filter(Boolean);\n\n for (const line of lines) {\n try {\n const record = JSON.parse(line) as unknown;\n if (!isRecord(record)) {\n continue;\n }\n const key = trimText(record.key);\n const status = trimText(record.status) as ProgressStatus;\n if (key && doneStatuses.has(status)) {\n completed.add(key);\n }\n } catch {\n // Ignore corrupt progress rows and continue resuming from the valid ones.\n }\n }\n\n return completed;\n}\n\nasync function fetchProcessDetail(options: {\n projectBaseUrl: string;\n publishableKey: string;\n accessToken: string;\n row: ProcessManifestRow;\n fetchImpl: FetchLike;\n timeoutMs: number;\n maxRetries: number;\n}): Promise<ProcessDetailRow> {\n const capability = resolveDataApiCapability({ kind: 'relation', name: 'processes' });\n const url = new URL(\n buildDataApiUrl(deriveSupabaseRestBaseUrl(options.projectBaseUrl), capability),\n );\n url.searchParams.set('select', 'id,version,json,modified_at,state_code,model_id,user_id');\n url.searchParams.set('id', `eq.${options.row.id}`);\n url.searchParams.set('version', `eq.${options.row.version}`);\n url.searchParams.set('limit', '1');\n\n const response = await fetchJsonWithRetry({\n url: url.toString(),\n init: {\n method: 'GET',\n headers: applyDataApiProfileHeaders(\n {\n apikey: options.publishableKey,\n Authorization: `Bearer ${options.accessToken}`,\n Accept: 'application/json',\n },\n capability,\n ),\n },\n label: `process refresh detail fetch (${recordKey(options.row)})`,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n maxRetries: options.maxRetries,\n });\n\n const rows = Array.isArray(response.body) ? response.body : [];\n const firstRow = rows[0];\n if (!isRecord(firstRow)) {\n throw new CliError(`Process not found for ${recordKey(options.row)}.`, {\n code: 'PROCESS_REFRESH_DETAIL_NOT_FOUND',\n exitCode: 1,\n });\n }\n\n return {\n id: trimText(firstRow.id) || options.row.id,\n version: trimText(firstRow.version) || options.row.version,\n modified_at: trimText(firstRow.modified_at) || null,\n state_code: typeof firstRow.state_code === 'number' ? firstRow.state_code : null,\n model_id: trimText(firstRow.model_id) || null,\n user_id: trimText(firstRow.user_id) || null,\n json: normalizeDatasetPayload(firstRow.json, recordKey(options.row)),\n };\n}\n\nfunction collectRefs(root: JsonObject): CollectedReference[] {\n const refs: CollectedReference[] = [];\n const visited = new WeakSet<object>();\n\n const walk = (current: unknown, pathParts: string[]) => {\n if (!isRecord(current) && !Array.isArray(current)) {\n return;\n }\n if (visited.has(current)) {\n return;\n }\n visited.add(current);\n\n if (\n isRecord(current) &&\n typeof current['@refObjectId'] === 'string' &&\n typeof current['@version'] === 'string' &&\n typeof current['@type'] === 'string' &&\n tableForReferenceType(current['@type'])\n ) {\n refs.push({\n node: current as ReferenceNode,\n path: pathParts.join('.'),\n });\n }\n\n if (Array.isArray(current)) {\n current.forEach((item, index) => walk(item, [...pathParts, String(index)]));\n return;\n }\n\n Object.entries(current).forEach(([key, value]) => walk(value, [...pathParts, key]));\n };\n\n walk(root, []);\n return refs;\n}\n\nasync function fetchLatestRefs(options: {\n projectBaseUrl: string;\n publishableKey: string;\n accessToken: string;\n refs: CollectedReference[];\n cache: Map<string, LatestReferenceCacheEntry>;\n fetchImpl: FetchLike;\n timeoutMs: number;\n maxRetries: number;\n}): Promise<void> {\n const missingByTable = new Map<string, Set<string>>();\n\n for (const ref of options.refs) {\n const table = tableForReferenceType(ref.node['@type']);\n const id = ref.node['@refObjectId'];\n const cacheKey = table ? `${table}:${id}` : '';\n if (!table || options.cache.has(cacheKey)) {\n continue;\n }\n if (!missingByTable.has(table)) {\n missingByTable.set(table, new Set<string>());\n }\n missingByTable.get(table)?.add(id);\n }\n\n for (const [table, idSet] of missingByTable.entries()) {\n const ids = Array.from(idSet);\n const capability = resolveDataApiCapability({ kind: 'relation', name: table });\n for (let offset = 0; offset < ids.length; offset += 50) {\n const chunk = ids.slice(offset, offset + 50);\n const url = new URL(\n buildDataApiUrl(deriveSupabaseRestBaseUrl(options.projectBaseUrl), capability),\n );\n url.searchParams.set('select', 'id,version,json,modified_at,state_code,user_id,team_id');\n url.searchParams.set('id', `in.(${chunk.join(',')})`);\n url.searchParams.set('order', 'version.desc');\n\n try {\n const response = await fetchJsonWithRetry({\n url: url.toString(),\n init: {\n method: 'GET',\n headers: applyDataApiProfileHeaders(\n {\n apikey: options.publishableKey,\n Authorization: `Bearer ${options.accessToken}`,\n Accept: 'application/json',\n },\n capability,\n ),\n },\n label: `reference refresh ${table} lookup`,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n maxRetries: options.maxRetries,\n });\n\n const rows = Array.isArray(response.body) ? response.body : [];\n const byId = new Map<string, LatestReferenceRow[]>();\n for (const rawRow of rows) {\n if (!isRecord(rawRow)) {\n continue;\n }\n const id = trimText(rawRow.id);\n const version = trimText(rawRow.version);\n if (!id || !version) {\n continue;\n }\n const normalized: LatestReferenceRow = {\n id,\n version,\n json: normalizeDatasetPayload(rawRow.json, `${table}:${id}@${version}`),\n modified_at: trimText(rawRow.modified_at) || null,\n state_code: typeof rawRow.state_code === 'number' ? rawRow.state_code : null,\n user_id: trimText(rawRow.user_id) || null,\n team_id: trimText(rawRow.team_id) || null,\n };\n const existing = byId.get(id) ?? [];\n existing.push(normalized);\n byId.set(id, existing);\n }\n\n for (const id of chunk) {\n const versions = byId.get(id) ?? [];\n versions.sort((left, right) => compareVersions(right.version, left.version));\n options.cache.set(`${table}:${id}`, {\n row: versions[0] ?? null,\n count: versions.length,\n });\n }\n } catch (error) {\n const message = String(error);\n for (const id of chunk) {\n options.cache.set(`${table}:${id}`, {\n row: null,\n count: 0,\n error: message,\n });\n }\n }\n }\n }\n}\n\nfunction updateProcessJson(\n payload: JsonObject,\n refs: CollectedReference[],\n cache: Map<string, LatestReferenceCacheEntry>,\n): UpdateSummary {\n let versionUpdates = 0;\n let descriptionUpdates = 0;\n const touchedRefs: TouchedReference[] = [];\n const unresolvedRefs: UnresolvedReference[] = [];\n\n for (const ref of refs) {\n const table = tableForReferenceType(ref.node['@type']);\n const cacheKey = table ? `${table}:${ref.node['@refObjectId']}` : '';\n const latest = cacheKey ? cache.get(cacheKey) : null;\n\n if (!latest?.row) {\n unresolvedRefs.push({\n id: ref.node['@refObjectId'],\n type: ref.node['@type'],\n version: ref.node['@version'],\n reason: latest?.error ?? 'no accessible version',\n });\n continue;\n }\n\n const currentVersion = ref.node['@version'];\n const latestVersion = latest.row.version;\n const description = getShortDescription(latest.row.json, ref.node['@type']);\n const beforeDescription = JSON.stringify(ref.node['common:shortDescription'] ?? null);\n const afterDescription = description.length ? JSON.stringify(description) : beforeDescription;\n\n if (compareVersions(latestVersion, currentVersion) > 0) {\n ref.node['@version'] = latestVersion;\n versionUpdates += 1;\n }\n\n if (description.length && beforeDescription !== afterDescription) {\n ref.node['common:shortDescription'] = description;\n descriptionUpdates += 1;\n }\n\n if (ref.node['@version'] !== currentVersion || beforeDescription !== afterDescription) {\n touchedRefs.push({\n id: ref.node['@refObjectId'],\n type: ref.node['@type'],\n from_version: currentVersion,\n to_version: ref.node['@version'],\n path: ref.path,\n });\n }\n }\n\n void payload;\n return {\n version_updates: versionUpdates,\n description_updates: descriptionUpdates,\n touched_refs: touchedRefs,\n unresolved_refs: unresolvedRefs,\n };\n}\n\nfunction appendReportHeader(\n reportFile: string,\n context: {\n mode: 'dry_run' | 'apply';\n generatedAtUtc: string;\n manifestCount: number;\n },\n): void {\n if (existsSync(reportFile)) {\n return;\n }\n writeTextArtifact(\n reportFile,\n [\n '# TianGong Process Reference Refresh',\n '',\n `- mode: ${context.mode}`,\n `- generated_at_utc: ${context.generatedAtUtc}`,\n `- manifest_count: ${context.manifestCount}`,\n '',\n '| time | status | key | version updates | description updates | refs | note |',\n '| --- | --- | --- | ---: | ---: | ---: | --- |',\n '',\n ].join('\\n'),\n );\n}\n\nfunction appendReportRow(reportFile: string, record: ProgressRecord): void {\n const note = trimText(record.note ?? record.error)\n .replace(/\\|/gu, '/')\n .slice(0, 180);\n appendFileSync(\n reportFile,\n `| ${record.time} | ${record.status} | ${record.key} | ${record.version_updates ?? 0} | ${record.description_updates ?? 0} | ${record.ref_count ?? 0} | ${note} |\\n`,\n 'utf8',\n );\n}\n\nasync function processOne(options: {\n row: ProcessManifestRow;\n apply: boolean;\n files: ProcessRefreshReferencesReport['files'];\n auth: Awaited<ReturnType<typeof resolveRemoteAuth>>;\n fetchImpl: FetchLike;\n timeoutMs: number;\n maxRetries: number;\n env: NodeJS.ProcessEnv;\n validateProcessPayloadImpl: (payload: JsonObject) => ProcessPayloadValidationResult;\n syncStateAwareProcessRecordImpl: (\n options: SyncStateAwareProcessRecordOptions,\n ) => Promise<ProcessStateAwareWriteResult>;\n refCache: Map<string, LatestReferenceCacheEntry>;\n}): Promise<ProgressRecord> {\n const time = new Date().toISOString();\n const key = recordKey(options.row);\n\n try {\n if (typeof options.row.state_code === 'number' && options.row.state_code >= 20) {\n const record: ProgressRecord = {\n time,\n key,\n status: 'skipped',\n note: `state_code=${options.row.state_code}`,\n };\n writeJsonLinesArtifact(options.files.progress_jsonl, record, { append: true });\n appendReportRow(options.files.report_md, record);\n return record;\n }\n\n const detail = await fetchProcessDetail({\n projectBaseUrl: options.auth.projectBaseUrl,\n publishableKey: options.auth.publishableKey,\n accessToken: options.auth.accessToken,\n row: options.row,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n maxRetries: options.maxRetries,\n });\n const payload = JSON.parse(JSON.stringify(detail.json)) as JsonObject;\n const refs = collectRefs(payload);\n\n await fetchLatestRefs({\n projectBaseUrl: options.auth.projectBaseUrl,\n publishableKey: options.auth.publishableKey,\n accessToken: options.auth.accessToken,\n refs,\n cache: options.refCache,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n maxRetries: options.maxRetries,\n });\n\n const update = updateProcessJson(payload, refs, options.refCache);\n const validation = options.validateProcessPayloadImpl(payload);\n\n if (!validation.ok || update.unresolved_refs.length > 0) {\n const noteParts: string[] = [];\n if (!validation.ok) {\n noteParts.push(`schema_issue_count=${validation.issue_count}`);\n }\n if (update.unresolved_refs.length > 0) {\n noteParts.push(`unresolved_refs=${update.unresolved_refs.length}`);\n }\n\n const record: ProgressRecord = {\n time,\n key,\n id: options.row.id,\n version: options.row.version,\n status: 'validation_blocked',\n ref_count: refs.length,\n version_updates: update.version_updates,\n description_updates: update.description_updates,\n unresolved_count: update.unresolved_refs.length,\n changed_ref_count: update.touched_refs.length,\n schema_validator: validation.validator,\n schema_issue_count: validation.issue_count,\n schema_issues: validation.issues.slice(0, 20),\n touched_refs: update.touched_refs.slice(0, 50),\n unresolved_refs: update.unresolved_refs.slice(0, 50),\n note: noteParts.join('; '),\n };\n writeJsonLinesArtifact(options.files.validation_blockers_jsonl, record, { append: true });\n writeJsonLinesArtifact(options.files.progress_jsonl, record, { append: true });\n appendReportRow(options.files.report_md, record);\n return record;\n }\n\n let writeResult: ProcessStateAwareWriteResult | null = null;\n if (options.apply) {\n writeResult = await options.syncStateAwareProcessRecordImpl({\n id: detail.id,\n version: detail.version,\n payload,\n env: options.env,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n audit: {\n command: 'process_refresh_references',\n source: 'tiangong-lca process refresh-references',\n },\n modelId: detail.model_id,\n });\n }\n\n const record: ProgressRecord = {\n time,\n key,\n id: options.row.id,\n version: options.row.version,\n status: options.apply ? 'saved' : 'dry_run',\n ref_count: refs.length,\n version_updates: update.version_updates,\n description_updates: update.description_updates,\n unresolved_count: update.unresolved_refs.length,\n changed_ref_count: update.touched_refs.length,\n schema_validator: validation.validator,\n schema_issue_count: validation.issue_count,\n touched_refs: update.touched_refs.slice(0, 50),\n unresolved_refs: update.unresolved_refs.slice(0, 50),\n write_path:\n writeResult && 'write_path' in writeResult ? (writeResult.write_path as string) : undefined,\n write_operation: writeResult?.operation,\n };\n writeJsonLinesArtifact(options.files.progress_jsonl, record, { append: true });\n appendReportRow(options.files.report_md, record);\n return record;\n } catch (error) {\n const record: ProgressRecord = {\n time,\n key,\n id: options.row.id,\n version: options.row.version,\n status: 'error',\n error: error instanceof Error ? error.message : String(error),\n };\n writeJsonLinesArtifact(options.files.errors_jsonl, record, { append: true });\n writeJsonLinesArtifact(options.files.progress_jsonl, record, { append: true });\n appendReportRow(options.files.report_md, record);\n return record;\n }\n}\n\nasync function workerPool<T, TResult>(\n items: T[],\n concurrency: number,\n worker: (item: T, index: number) => Promise<TResult>,\n): Promise<TResult[]> {\n let cursor = 0;\n const results: TResult[] = [];\n\n async function runWorker() {\n while (cursor < items.length) {\n const currentIndex = cursor;\n cursor += 1;\n results[currentIndex] = await worker(items[currentIndex] as T, currentIndex);\n }\n }\n\n await Promise.all(Array.from({ length: concurrency }, () => runWorker()));\n return results;\n}\n\nexport async function runProcessRefreshReferences(\n options: RunProcessRefreshReferencesOptions,\n): Promise<ProcessRefreshReferencesReport> {\n const outDir = path.resolve(\n requiredNonEmpty(options.outDir, '--out-dir', 'PROCESS_REFRESH_OUT_DIR_REQUIRED'),\n );\n const apply = Boolean(options.apply);\n const reuseManifest = Boolean(options.reuseManifest);\n const limit = toOptionalPositiveInteger(\n options.limit ?? null,\n '--limit',\n 'PROCESS_REFRESH_LIMIT_INVALID',\n );\n const pageSize = toPositiveInteger(\n options.pageSize ?? DEFAULT_PAGE_SIZE,\n '--page-size',\n 'PROCESS_REFRESH_PAGE_SIZE_INVALID',\n MAX_PAGE_SIZE,\n );\n const concurrency = toPositiveInteger(\n options.concurrency ?? DEFAULT_CONCURRENCY,\n '--concurrency',\n 'PROCESS_REFRESH_CONCURRENCY_INVALID',\n MAX_CONCURRENCY,\n );\n const timeoutMs = toPositiveInteger(\n options.timeoutMs ?? DEFAULT_TIMEOUT_MS,\n 'timeout',\n 'PROCESS_REFRESH_TIMEOUT_INVALID',\n );\n const maxRetries = toPositiveInteger(\n options.maxRetries ?? DEFAULT_MAX_RETRIES,\n 'retry count',\n 'PROCESS_REFRESH_MAX_RETRIES_INVALID',\n );\n const env = options.env ?? process.env;\n const fetchImpl = options.fetchImpl ?? (fetch as FetchLike);\n const generatedAtUtc = nowIso(options.now);\n const validateProcessPayloadImpl = options.validateProcessPayloadImpl ?? validateProcessPayload;\n const syncStateAwareProcessRecordImpl =\n options.syncStateAwareProcessRecordImpl ?? syncStateAwareProcessRecord;\n\n mkdirSync(outDir, { recursive: true });\n\n const files: ProcessRefreshReferencesReport['files'] = {\n manifest: path.join(outDir, 'inputs', 'processes.manifest.json'),\n progress_jsonl: path.join(outDir, 'outputs', 'progress.jsonl'),\n errors_jsonl: path.join(outDir, 'outputs', 'errors.jsonl'),\n validation_blockers_jsonl: path.join(outDir, 'outputs', 'validation-blockers.jsonl'),\n summary_json: path.join(outDir, 'outputs', 'summary.json'),\n report_md: path.join(outDir, 'reports', 'process-refresh-references.md'),\n };\n\n const auth = await resolveRemoteAuth({\n env,\n fetchImpl,\n timeoutMs,\n now: options.now ?? new Date(),\n maxRetries,\n });\n\n let manifest = readManifest(files.manifest);\n if (!manifest || !reuseManifest) {\n const rows = await snapshotProcesses({\n projectBaseUrl: auth.projectBaseUrl,\n publishableKey: auth.publishableKey,\n accessToken: auth.accessToken,\n userId: auth.userId,\n pageSize,\n fetchImpl,\n timeoutMs,\n maxRetries,\n });\n manifest = {\n schema_version: 1,\n generated_at_utc: generatedAtUtc,\n user_id: auth.userId,\n masked_user_email: auth.maskedUserEmail,\n source: 'current_user_processes',\n order: 'modified_at.desc,id.asc',\n page_size: pageSize,\n count: rows.length,\n rows,\n };\n writeJsonArtifact(files.manifest, manifest);\n }\n\n appendReportHeader(files.report_md, {\n mode: apply ? 'apply' : 'dry_run',\n generatedAtUtc,\n manifestCount: manifest.rows.length,\n });\n\n const completed = readCompleted(files.progress_jsonl, apply);\n const selectedRows = manifest.rows.slice(0, limit ?? manifest.rows.length);\n const pendingRows = selectedRows.filter((row) => !completed.has(recordKey(row)));\n const refCache = new Map<string, LatestReferenceCacheEntry>();\n const counts = {\n manifest: manifest.rows.length,\n selected: selectedRows.length,\n already_completed: selectedRows.length - pendingRows.length,\n pending: pendingRows.length,\n saved: 0,\n dry_run: 0,\n skipped: 0,\n validation_blocked: 0,\n errors: 0,\n };\n\n const results = await workerPool(pendingRows, concurrency, (row) =>\n processOne({\n row,\n apply,\n files,\n auth,\n fetchImpl,\n timeoutMs,\n maxRetries,\n env,\n validateProcessPayloadImpl,\n syncStateAwareProcessRecordImpl,\n refCache,\n }),\n );\n\n for (const record of results) {\n if (record.status === 'saved') {\n counts.saved += 1;\n } else if (record.status === 'dry_run') {\n counts.dry_run += 1;\n } else if (record.status === 'skipped') {\n counts.skipped += 1;\n } else if (record.status === 'validation_blocked') {\n counts.validation_blocked += 1;\n } else if (record.status === 'error') {\n counts.errors += 1;\n }\n }\n\n const report: ProcessRefreshReferencesReport = {\n schema_version: 1,\n generated_at_utc: generatedAtUtc,\n status:\n counts.errors > 0\n ? 'completed_process_reference_refresh_with_errors'\n : 'completed_process_reference_refresh',\n out_dir: outDir,\n mode: apply ? 'apply' : 'dry_run',\n user_id: manifest.user_id,\n masked_user_email: manifest.masked_user_email,\n counts,\n files,\n };\n\n writeJsonArtifact(files.summary_json, report);\n appendFileSync(\n files.report_md,\n `\\n## Summary\\n\\n\\`\\`\\`json\\n${JSON.stringify(report, null, 2)}\\n\\`\\`\\`\\n`,\n 'utf8',\n );\n\n return report;\n}\n\nexport const __testInternals = {\n appendReportHeader,\n collectRefs,\n compareVersions,\n fetchLatestRefs,\n fetchJsonWithRetry,\n genFlowName,\n genFlowNameJson,\n genProcessName,\n genProcessNameJson,\n getLangList,\n getLangText,\n getShortDescription,\n normalizeReferenceType,\n normalizeDatasetPayload,\n normalizeManifestRow,\n parseJsonResponse,\n parseContentRangeTotal,\n readCompleted,\n readManifest,\n recordKey,\n tableForReferenceType,\n updateProcessJson,\n};\n"]}
|
|
1
|
+
{"version":3,"file":"process-refresh-references.js","sourceRoot":"","sources":["../../../src/lib/process-refresh-references.ts"],"names":[],"mappings":"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","sourcesContent":["// data-api-relations: contacts, flowproperties, flows, lciamethods, processes, sources, unitgroups\nimport { appendFileSync, existsSync, mkdirSync, readFileSync } from 'node:fs';\nimport path from 'node:path';\nimport { writeJsonArtifact, writeJsonLinesArtifact, writeTextArtifact } from './artifacts.js';\nimport { CliError } from './errors.js';\nimport type { FetchLike, ResponseLike } from './http.js';\nimport {\n syncStateAwareProcessRecord,\n type ProcessStateAwareWriteResult,\n type SyncStateAwareProcessRecordOptions,\n} from './process-save-draft.js';\nimport {\n validateProcessPayload,\n type ProcessPayloadValidationResult,\n} from './process-payload-validation.js';\nimport {\n deriveSupabaseProjectBaseUrl,\n deriveSupabaseRestBaseUrl,\n requireSupabaseRestRuntime,\n} from './supabase-client.js';\nimport {\n applyDataApiProfileHeaders,\n buildDataApiUrl,\n resolveDataApiCapability,\n} from './supabase-data-api-contract.js';\nimport { resolveSupabaseUserSession } from './supabase-session.js';\nimport { redactEmail } from './user-api-key.js';\n\ntype JsonObject = Record<string, unknown>;\n\ntype ProcessManifestRow = {\n id: string;\n version: string;\n modified_at: string | null;\n state_code: number | null;\n model_id: string | null;\n};\n\ntype ProcessDetailRow = ProcessManifestRow & {\n user_id: string | null;\n json: JsonObject;\n};\n\ntype LatestReferenceRow = {\n id: string;\n version: string;\n json: JsonObject;\n modified_at: string | null;\n state_code: number | null;\n user_id: string | null;\n team_id: string | null;\n};\n\ntype LatestReferenceCacheEntry = {\n row: LatestReferenceRow | null;\n count: number;\n error?: string;\n};\n\ntype ReferenceNode = JsonObject & {\n '@refObjectId': string;\n '@version': string;\n '@type': string;\n};\n\ntype CollectedReference = {\n node: ReferenceNode;\n path: string;\n};\n\ntype TouchedReference = {\n id: string;\n type: string;\n from_version: string;\n to_version: string;\n path: string;\n};\n\ntype UnresolvedReference = {\n id: string;\n type: string;\n version: string;\n reason: string;\n};\n\ntype UpdateSummary = {\n version_updates: number;\n description_updates: number;\n touched_refs: TouchedReference[];\n unresolved_refs: UnresolvedReference[];\n};\n\ntype ProgressStatus = 'saved' | 'dry_run' | 'skipped' | 'validation_blocked' | 'error';\n\ntype ProgressRecord = {\n time: string;\n key: string;\n id?: string;\n version?: string;\n status: ProgressStatus;\n note?: string;\n ref_count?: number;\n version_updates?: number;\n description_updates?: number;\n unresolved_count?: number;\n changed_ref_count?: number;\n schema_validator?: string;\n schema_issue_count?: number;\n schema_issues?: ProcessPayloadValidationResult['issues'];\n touched_refs?: TouchedReference[];\n unresolved_refs?: UnresolvedReference[];\n write_path?: string;\n write_operation?: string;\n error?: string;\n};\n\ntype RefreshManifest = {\n schema_version: 1;\n generated_at_utc: string;\n user_id: string;\n masked_user_email: string;\n source: 'current_user_processes';\n order: 'modified_at.desc,id.asc';\n page_size: number;\n count: number;\n rows: ProcessManifestRow[];\n};\n\nexport type ProcessRefreshReferencesReport = {\n schema_version: 1;\n generated_at_utc: string;\n status: 'completed_process_reference_refresh' | 'completed_process_reference_refresh_with_errors';\n out_dir: string;\n mode: 'dry_run' | 'apply';\n user_id: string;\n masked_user_email: string;\n counts: {\n manifest: number;\n selected: number;\n already_completed: number;\n pending: number;\n saved: number;\n dry_run: number;\n skipped: number;\n validation_blocked: number;\n errors: number;\n };\n files: {\n manifest: string;\n progress_jsonl: string;\n errors_jsonl: string;\n validation_blockers_jsonl: string;\n summary_json: string;\n report_md: string;\n };\n};\n\nexport type RunProcessRefreshReferencesOptions = {\n outDir: string;\n apply?: boolean | null;\n reuseManifest?: boolean | null;\n limit?: number | null;\n pageSize?: number | null;\n concurrency?: number | null;\n env?: NodeJS.ProcessEnv;\n fetchImpl?: FetchLike;\n timeoutMs?: number;\n maxRetries?: number;\n now?: Date;\n validateProcessPayloadImpl?: (payload: JsonObject) => ProcessPayloadValidationResult;\n syncStateAwareProcessRecordImpl?: (\n options: SyncStateAwareProcessRecordOptions,\n ) => Promise<ProcessStateAwareWriteResult>;\n};\n\nconst DEFAULT_TIMEOUT_MS = 15_000;\nconst DEFAULT_MAX_RETRIES = 3;\nconst DEFAULT_PAGE_SIZE = 500;\nconst DEFAULT_CONCURRENCY = 1;\nconst MAX_PAGE_SIZE = 1_000;\nconst MAX_CONCURRENCY = 8;\n\nconst TABLE_BY_TYPE = new Map<string, string>([\n ['contact data set', 'contacts'],\n ['source data set', 'sources'],\n ['unit group data set', 'unitgroups'],\n ['flow property data set', 'flowproperties'],\n ['flow data set', 'flows'],\n ['process data set', 'processes'],\n ['lifeCycleModel data set', 'lifecyclemodels'],\n ['LCIA method data set', 'lciamethods'],\n] as const);\n\nfunction normalizeReferenceType(type: string): string {\n return type.trim().toLowerCase();\n}\n\nfunction tableForReferenceType(type: string): string | null {\n return TABLE_BY_TYPE.get(type) ?? TABLE_BY_TYPE.get(normalizeReferenceType(type)) ?? null;\n}\n\nfunction isRecord(value: unknown): value is JsonObject {\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n}\n\nfunction trimText(value: unknown): string {\n return typeof value === 'string' ? value.trim() : '';\n}\n\nfunction requiredNonEmpty(value: string, label: string, code: string): string {\n const normalized = value.trim();\n if (!normalized) {\n throw new CliError(`Missing required ${label}.`, {\n code,\n exitCode: 2,\n });\n }\n return normalized;\n}\n\nfunction toPositiveInteger(value: number, label: string, code: string, max?: number): number {\n if (!Number.isInteger(value) || value <= 0 || (max !== undefined && value > max)) {\n throw new CliError(\n max === undefined\n ? `Expected ${label} to be a positive integer.`\n : `Expected ${label} to be a positive integer not greater than ${max}.`,\n {\n code,\n exitCode: 2,\n },\n );\n }\n return value;\n}\n\nfunction toOptionalPositiveInteger(\n value: number | null | undefined,\n label: string,\n code: string,\n): number | null {\n if (value === null || value === undefined) {\n return null;\n }\n return toPositiveInteger(value, label, code);\n}\n\nfunction nowIso(now: Date = new Date()): string {\n return now.toISOString();\n}\n\nfunction recordKey(row: Pick<ProcessManifestRow, 'id' | 'version'>): string {\n return `${row.id}:${row.version}`;\n}\n\nfunction parseContentRangeTotal(value: string | null): number | null {\n if (!value) {\n return null;\n }\n const match = value.match(/\\/(\\d+|\\*)$/u);\n if (!match || match[1] === '*') {\n return null;\n }\n return Number.parseInt(match[1]!, 10);\n}\n\nfunction normalizeVersion(version: string): string {\n return version.trim();\n}\n\nfunction compareVersions(left: string, right: string): number {\n const leftParts = normalizeVersion(left)\n .split('.')\n .map((part) => Number(part));\n const rightParts = normalizeVersion(right)\n .split('.')\n .map((part) => Number(part));\n const length = Math.max(leftParts.length, rightParts.length);\n\n for (let index = 0; index < length; index += 1) {\n const leftValue = Number.isFinite(leftParts[index]) ? leftParts[index] : 0;\n const rightValue = Number.isFinite(rightParts[index]) ? rightParts[index] : 0;\n if (leftValue !== rightValue) {\n return leftValue - rightValue;\n }\n }\n\n return normalizeVersion(left).localeCompare(normalizeVersion(right));\n}\n\nfunction jsonToList(value: unknown): unknown[] {\n if (value === null || value === undefined || value === '') {\n return [];\n }\n return Array.isArray(value) ? value : [value];\n}\n\nfunction getLangList(value: unknown): JsonObject[] {\n if (value === null || value === undefined || value === '') {\n return [];\n }\n if (Array.isArray(value)) {\n return value.filter((entry): entry is JsonObject => isRecord(entry));\n }\n if (isRecord(value)) {\n const langString = value['common:langString'];\n if (Array.isArray(langString)) {\n return langString.filter((entry): entry is JsonObject => isRecord(entry));\n }\n if (isRecord(langString)) {\n return [langString];\n }\n if (value['#text'] !== undefined || value['@xml:lang'] !== undefined) {\n return [value];\n }\n }\n if (typeof value === 'string') {\n return [{ '@xml:lang': 'en', '#text': value }];\n }\n return [];\n}\n\nfunction getLangText(value: unknown, lang: string | null): string {\n const entries = getLangList(value);\n if (lang) {\n for (const entry of entries) {\n if (\n trimText(entry['@xml:lang']).toLowerCase() === lang.toLowerCase() &&\n trimText(entry['#text'])\n ) {\n return trimText(entry['#text']);\n }\n }\n }\n for (const entry of entries) {\n if (trimText(entry['#text'])) {\n return trimText(entry['#text']);\n }\n }\n return '';\n}\n\nfunction genFlowName(name: JsonObject | null, lang: string): string {\n if (!name) {\n return '';\n }\n const parts = [\n getLangText(name.baseName, lang),\n getLangText(name.treatmentStandardsRoutes, lang),\n getLangText(name.mixAndLocationTypes, lang),\n getLangText(name.flowProperties, lang),\n ].filter(Boolean);\n return parts.join('; ');\n}\n\nfunction genFlowNameJson(name: JsonObject | null): JsonObject[] {\n if (!name) {\n return [];\n }\n const results: JsonObject[] = [];\n for (const item of jsonToList(name.baseName)) {\n const entry = isRecord(item) ? item : {};\n const lang = trimText(entry['@xml:lang']);\n const text = lang ? genFlowName(name, lang) : '';\n if (lang && text) {\n results.push({ '@xml:lang': lang, '#text': text });\n }\n }\n return results;\n}\n\nfunction genProcessName(name: JsonObject | null, lang: string): string {\n if (!name) {\n return '';\n }\n const parts = [\n getLangText(name.baseName, lang),\n getLangText(name.treatmentStandardsRoutes, lang),\n getLangText(name.mixAndLocationTypes, lang),\n getLangText(name.functionalUnitFlowProperties, lang),\n ].filter(Boolean);\n return parts.join('; ');\n}\n\nfunction genProcessNameJson(name: JsonObject | null): JsonObject[] {\n if (!name) {\n return [];\n }\n const results: JsonObject[] = [];\n for (const item of jsonToList(name.baseName)) {\n const entry = isRecord(item) ? item : {};\n const lang = trimText(entry['@xml:lang']);\n const text = lang ? genProcessName(name, lang) : '';\n if (lang && text) {\n results.push({ '@xml:lang': lang, '#text': text });\n }\n }\n return results;\n}\n\nfunction normalizeDatasetPayload(payload: unknown, label: string): JsonObject {\n if (typeof payload === 'string') {\n try {\n const parsed = JSON.parse(payload) as unknown;\n if (!isRecord(parsed)) {\n throw new CliError(`Remote dataset payload was not a JSON object for ${label}.`, {\n code: 'PROCESS_REFRESH_REMOTE_PAYLOAD_INVALID',\n exitCode: 1,\n details: parsed,\n });\n }\n return parsed;\n } catch (error) {\n if (error instanceof CliError) {\n throw error;\n }\n throw new CliError(`Remote dataset payload was not valid JSON for ${label}.`, {\n code: 'PROCESS_REFRESH_REMOTE_PAYLOAD_INVALID_JSON',\n exitCode: 1,\n details: String(error),\n });\n }\n }\n\n if (!isRecord(payload)) {\n throw new CliError(`Remote dataset payload was missing json for ${label}.`, {\n code: 'PROCESS_REFRESH_REMOTE_PAYLOAD_MISSING',\n exitCode: 1,\n details: payload,\n });\n }\n\n return payload;\n}\n\nfunction getShortDescription(payload: JsonObject, type: string): JsonObject[] {\n const normalizedType = normalizeReferenceType(type);\n if (normalizedType === 'flow data set') {\n const flowDataSet = isRecord(payload.flowDataSet) ? payload.flowDataSet : {};\n const info = isRecord(flowDataSet.flowInformation) ? flowDataSet.flowInformation : {};\n const dataSetInformation = isRecord(info.dataSetInformation) ? info.dataSetInformation : {};\n const name = isRecord(dataSetInformation.name) ? dataSetInformation.name : null;\n return genFlowNameJson(name);\n }\n\n if (normalizedType === 'process data set') {\n const processDataSet = isRecord(payload.processDataSet) ? payload.processDataSet : {};\n const info = isRecord(processDataSet.processInformation)\n ? processDataSet.processInformation\n : {};\n const dataSetInformation = isRecord(info.dataSetInformation) ? info.dataSetInformation : {};\n const name = isRecord(dataSetInformation.name) ? dataSetInformation.name : null;\n return genProcessNameJson(name);\n }\n\n if (normalizedType === 'contact data set') {\n const contactDataSet = isRecord(payload.contactDataSet) ? payload.contactDataSet : {};\n const info = isRecord(contactDataSet.contactInformation)\n ? contactDataSet.contactInformation\n : {};\n const dataSetInformation = isRecord(info.dataSetInformation) ? info.dataSetInformation : {};\n return getLangList(dataSetInformation['common:shortName']);\n }\n\n if (normalizedType === 'source data set') {\n const sourceDataSet = isRecord(payload.sourceDataSet) ? payload.sourceDataSet : {};\n const info = isRecord(sourceDataSet.sourceInformation) ? sourceDataSet.sourceInformation : {};\n const dataSetInformation = isRecord(info.dataSetInformation) ? info.dataSetInformation : {};\n return getLangList(dataSetInformation['common:shortName']);\n }\n\n if (normalizedType === 'flow property data set') {\n const flowPropertyDataSet = isRecord(payload.flowPropertyDataSet)\n ? payload.flowPropertyDataSet\n : {};\n const info = isRecord(flowPropertyDataSet.flowPropertyInformation)\n ? flowPropertyDataSet.flowPropertyInformation\n : {};\n const dataSetInformation = isRecord(info.dataSetInformation) ? info.dataSetInformation : {};\n return getLangList(dataSetInformation['common:shortName']);\n }\n\n if (normalizedType === 'unit group data set') {\n const unitGroupDataSet = isRecord(payload.unitGroupDataSet) ? payload.unitGroupDataSet : {};\n const info = isRecord(unitGroupDataSet.unitGroupInformation)\n ? unitGroupDataSet.unitGroupInformation\n : {};\n const dataSetInformation = isRecord(info.dataSetInformation) ? info.dataSetInformation : {};\n return getLangList(dataSetInformation['common:shortName']);\n }\n\n if (normalizedType === 'lcia method data set') {\n const lciaMethodDataSet = isRecord(payload.lciaMethodDataSet) ? payload.lciaMethodDataSet : {};\n const info = isRecord(lciaMethodDataSet.LCIAMethodInformation)\n ? lciaMethodDataSet.LCIAMethodInformation\n : {};\n const dataSetInformation = isRecord(info.dataSetInformation) ? info.dataSetInformation : {};\n return getLangList(dataSetInformation['common:shortName']);\n }\n\n return [];\n}\n\nasync function parseJsonResponse(response: ResponseLike, label: string): Promise<unknown> {\n const text = await response.text();\n const contentType = response.headers.get('content-type') ?? '';\n if (!text.trim()) {\n return null;\n }\n if (!contentType.includes('application/json')) {\n return text;\n }\n try {\n return JSON.parse(text);\n } catch (error) {\n throw new CliError(`${label} returned invalid JSON.`, {\n code: 'PROCESS_REFRESH_REMOTE_INVALID_JSON',\n exitCode: 1,\n details: String(error),\n });\n }\n}\n\nasync function fetchJsonWithRetry(options: {\n url: string;\n init: RequestInit;\n label: string;\n fetchImpl: FetchLike;\n timeoutMs: number;\n maxRetries: number;\n}): Promise<{ status: number; headers: Headers; body: unknown }> {\n let lastError: unknown = null;\n\n for (let attempt = 1; attempt <= options.maxRetries; attempt += 1) {\n try {\n const response = await options.fetchImpl(options.url, {\n ...options.init,\n signal: AbortSignal.timeout(options.timeoutMs),\n });\n const body = await parseJsonResponse(response, options.label);\n if (!response.ok) {\n throw new CliError(`${options.label} failed with ${response.status}.`, {\n code: 'PROCESS_REFRESH_REMOTE_REQUEST_FAILED',\n exitCode: 1,\n details: {\n status: response.status,\n body,\n url: options.url,\n },\n });\n }\n return {\n status: response.status,\n headers: new Headers({\n 'content-range': response.headers.get('content-range') ?? '',\n 'content-type': response.headers.get('content-type') ?? '',\n }),\n body,\n };\n } catch (error) {\n lastError = error;\n if (attempt >= options.maxRetries) {\n break;\n }\n await new Promise((resolve) => setTimeout(resolve, attempt * 1_500));\n }\n }\n\n if (lastError instanceof CliError) {\n throw lastError;\n }\n\n throw new CliError(`${options.label} failed after ${options.maxRetries} attempt(s).`, {\n code: 'PROCESS_REFRESH_REMOTE_REQUEST_FAILED',\n exitCode: 1,\n details: String(lastError),\n });\n}\n\nasync function resolveRemoteAuth(options: {\n env: NodeJS.ProcessEnv;\n fetchImpl: FetchLike;\n timeoutMs: number;\n now: Date;\n maxRetries: number;\n}): Promise<{\n projectBaseUrl: string;\n publishableKey: string;\n accessToken: string;\n userId: string;\n maskedUserEmail: string;\n}> {\n const runtime = requireSupabaseRestRuntime(options.env);\n const session = await resolveSupabaseUserSession({\n runtime,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n now: options.now,\n });\n const userResponse = await fetchJsonWithRetry({\n url: `${deriveSupabaseProjectBaseUrl(runtime.apiBaseUrl)}/auth/v1/user`,\n init: {\n method: 'GET',\n headers: {\n apikey: runtime.publishableKey,\n Authorization: `Bearer ${session.accessToken}`,\n Accept: 'application/json',\n },\n },\n label: 'supabase current-user lookup',\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n maxRetries: options.maxRetries,\n });\n const userId = isRecord(userResponse.body) ? trimText(userResponse.body.id) : '';\n if (!userId) {\n throw new CliError('Supabase current-user lookup succeeded without a user id.', {\n code: 'PROCESS_REFRESH_CURRENT_USER_ID_MISSING',\n exitCode: 1,\n });\n }\n\n return {\n projectBaseUrl: deriveSupabaseProjectBaseUrl(runtime.apiBaseUrl),\n publishableKey: runtime.publishableKey,\n accessToken: session.accessToken,\n userId,\n maskedUserEmail: redactEmail(session.userEmail),\n };\n}\n\nfunction normalizeManifestRow(value: unknown): ProcessManifestRow | null {\n if (!isRecord(value)) {\n return null;\n }\n const id = trimText(value.id);\n const version = trimText(value.version);\n if (!id || !version) {\n return null;\n }\n return {\n id,\n version,\n modified_at: trimText(value.modified_at) || null,\n state_code: typeof value.state_code === 'number' ? value.state_code : null,\n model_id: trimText(value.model_id) || null,\n };\n}\n\nfunction readManifest(filePath: string): RefreshManifest | null {\n if (!existsSync(filePath)) {\n return null;\n }\n try {\n const parsed = JSON.parse(readFileSync(filePath, 'utf8')) as unknown;\n if (!isRecord(parsed) || !Array.isArray(parsed.rows)) {\n throw new Error('manifest rows missing');\n }\n const rows = parsed.rows\n .map((row) => normalizeManifestRow(row))\n .filter((row): row is ProcessManifestRow => row !== null);\n const userId = trimText(parsed.user_id);\n const maskedUserEmail = trimText(parsed.masked_user_email);\n if (!userId || !maskedUserEmail) {\n throw new Error('manifest user metadata missing');\n }\n return {\n schema_version: 1,\n generated_at_utc: trimText(parsed.generated_at_utc) || nowIso(),\n user_id: userId,\n masked_user_email: maskedUserEmail,\n source: 'current_user_processes',\n order: 'modified_at.desc,id.asc',\n page_size:\n typeof parsed.page_size === 'number' && Number.isInteger(parsed.page_size)\n ? parsed.page_size\n : DEFAULT_PAGE_SIZE,\n count:\n typeof parsed.count === 'number' && Number.isInteger(parsed.count)\n ? parsed.count\n : rows.length,\n rows,\n };\n } catch (error) {\n throw new CliError(`Manifest file is not valid JSON: ${filePath}`, {\n code: 'PROCESS_REFRESH_MANIFEST_INVALID',\n exitCode: 2,\n details: String(error),\n });\n }\n}\n\nasync function snapshotProcesses(options: {\n projectBaseUrl: string;\n publishableKey: string;\n accessToken: string;\n userId: string;\n pageSize: number;\n fetchImpl: FetchLike;\n timeoutMs: number;\n maxRetries: number;\n}): Promise<ProcessManifestRow[]> {\n const capability = resolveDataApiCapability({ kind: 'relation', name: 'processes' });\n const rows: ProcessManifestRow[] = [];\n let total: number | null = null;\n\n for (let offset = 0; total === null || offset < total; offset += options.pageSize) {\n const url = new URL(\n buildDataApiUrl(deriveSupabaseRestBaseUrl(options.projectBaseUrl), capability),\n );\n url.searchParams.set('select', 'id,version,modified_at,state_code,model_id');\n url.searchParams.set('user_id', `eq.${options.userId}`);\n url.searchParams.set('order', 'modified_at.desc,id.asc');\n url.searchParams.set('limit', String(options.pageSize));\n url.searchParams.set('offset', String(offset));\n\n const page = await fetchJsonWithRetry({\n url: url.toString(),\n init: {\n method: 'GET',\n headers: applyDataApiProfileHeaders(\n {\n apikey: options.publishableKey,\n Authorization: `Bearer ${options.accessToken}`,\n Accept: 'application/json',\n Prefer: 'count=exact',\n },\n capability,\n ),\n },\n label: `process refresh snapshot page fetch (offset=${offset})`,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n maxRetries: options.maxRetries,\n });\n\n const pageRows = Array.isArray(page.body) ? page.body : [];\n const normalizedRows = pageRows\n .map((row) => normalizeManifestRow(row))\n .filter((row): row is ProcessManifestRow => row !== null);\n rows.push(...normalizedRows);\n total = parseContentRangeTotal(page.headers.get('content-range')) ?? rows.length;\n if (normalizedRows.length === 0) {\n break;\n }\n }\n\n const deduped: ProcessManifestRow[] = [];\n const seen = new Set<string>();\n for (const row of rows) {\n const key = recordKey(row);\n if (seen.has(key)) {\n continue;\n }\n seen.add(key);\n deduped.push(row);\n }\n\n return deduped;\n}\n\nfunction readCompleted(progressFile: string, applyMode: boolean): Set<string> {\n const completed = new Set<string>();\n if (!existsSync(progressFile)) {\n return completed;\n }\n const doneStatuses = applyMode\n ? new Set<ProgressStatus>(['saved', 'skipped', 'validation_blocked'])\n : new Set<ProgressStatus>(['dry_run', 'skipped', 'validation_blocked']);\n const lines = readFileSync(progressFile, 'utf8').split(/\\r?\\n/u).filter(Boolean);\n\n for (const line of lines) {\n try {\n const record = JSON.parse(line) as unknown;\n if (!isRecord(record)) {\n continue;\n }\n const key = trimText(record.key);\n const status = trimText(record.status) as ProgressStatus;\n if (key && doneStatuses.has(status)) {\n completed.add(key);\n }\n } catch {\n // Ignore corrupt progress rows and continue resuming from the valid ones.\n }\n }\n\n return completed;\n}\n\nasync function fetchProcessDetail(options: {\n projectBaseUrl: string;\n publishableKey: string;\n accessToken: string;\n row: ProcessManifestRow;\n fetchImpl: FetchLike;\n timeoutMs: number;\n maxRetries: number;\n}): Promise<ProcessDetailRow> {\n const capability = resolveDataApiCapability({ kind: 'relation', name: 'processes' });\n const url = new URL(\n buildDataApiUrl(deriveSupabaseRestBaseUrl(options.projectBaseUrl), capability),\n );\n url.searchParams.set('select', 'id,version,json,modified_at,state_code,model_id,user_id');\n url.searchParams.set('id', `eq.${options.row.id}`);\n url.searchParams.set('version', `eq.${options.row.version}`);\n url.searchParams.set('limit', '1');\n\n const response = await fetchJsonWithRetry({\n url: url.toString(),\n init: {\n method: 'GET',\n headers: applyDataApiProfileHeaders(\n {\n apikey: options.publishableKey,\n Authorization: `Bearer ${options.accessToken}`,\n Accept: 'application/json',\n },\n capability,\n ),\n },\n label: `process refresh detail fetch (${recordKey(options.row)})`,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n maxRetries: options.maxRetries,\n });\n\n const rows = Array.isArray(response.body) ? response.body : [];\n const firstRow = rows[0];\n if (!isRecord(firstRow)) {\n throw new CliError(`Process not found for ${recordKey(options.row)}.`, {\n code: 'PROCESS_REFRESH_DETAIL_NOT_FOUND',\n exitCode: 1,\n });\n }\n\n return {\n id: trimText(firstRow.id) || options.row.id,\n version: trimText(firstRow.version) || options.row.version,\n modified_at: trimText(firstRow.modified_at) || null,\n state_code: typeof firstRow.state_code === 'number' ? firstRow.state_code : null,\n model_id: trimText(firstRow.model_id) || null,\n user_id: trimText(firstRow.user_id) || null,\n json: normalizeDatasetPayload(firstRow.json, recordKey(options.row)),\n };\n}\n\nfunction collectRefs(root: JsonObject): CollectedReference[] {\n const refs: CollectedReference[] = [];\n const visited = new WeakSet<object>();\n\n const walk = (current: unknown, pathParts: string[]) => {\n if (!isRecord(current) && !Array.isArray(current)) {\n return;\n }\n if (visited.has(current)) {\n return;\n }\n visited.add(current);\n\n if (\n isRecord(current) &&\n typeof current['@refObjectId'] === 'string' &&\n typeof current['@version'] === 'string' &&\n typeof current['@type'] === 'string' &&\n tableForReferenceType(current['@type'])\n ) {\n refs.push({\n node: current as ReferenceNode,\n path: pathParts.join('.'),\n });\n }\n\n if (Array.isArray(current)) {\n current.forEach((item, index) => walk(item, [...pathParts, String(index)]));\n return;\n }\n\n Object.entries(current).forEach(([key, value]) => walk(value, [...pathParts, key]));\n };\n\n walk(root, []);\n return refs;\n}\n\nasync function fetchLatestRefs(options: {\n projectBaseUrl: string;\n publishableKey: string;\n accessToken: string;\n refs: CollectedReference[];\n cache: Map<string, LatestReferenceCacheEntry>;\n fetchImpl: FetchLike;\n timeoutMs: number;\n maxRetries: number;\n}): Promise<void> {\n const missingByTable = new Map<string, Set<string>>();\n\n for (const ref of options.refs) {\n const table = tableForReferenceType(ref.node['@type']);\n const id = ref.node['@refObjectId'];\n const cacheKey = table ? `${table}:${id}` : '';\n if (!table || options.cache.has(cacheKey)) {\n continue;\n }\n if (!missingByTable.has(table)) {\n missingByTable.set(table, new Set<string>());\n }\n missingByTable.get(table)?.add(id);\n }\n\n for (const [table, idSet] of missingByTable.entries()) {\n const ids = Array.from(idSet);\n const capability = resolveDataApiCapability({ kind: 'relation', name: table });\n for (let offset = 0; offset < ids.length; offset += 50) {\n const chunk = ids.slice(offset, offset + 50);\n const url = new URL(\n buildDataApiUrl(deriveSupabaseRestBaseUrl(options.projectBaseUrl), capability),\n );\n url.searchParams.set('select', 'id,version,json,modified_at,state_code,user_id,team_id');\n url.searchParams.set('id', `in.(${chunk.join(',')})`);\n url.searchParams.set('order', 'version.desc');\n\n try {\n const response = await fetchJsonWithRetry({\n url: url.toString(),\n init: {\n method: 'GET',\n headers: applyDataApiProfileHeaders(\n {\n apikey: options.publishableKey,\n Authorization: `Bearer ${options.accessToken}`,\n Accept: 'application/json',\n },\n capability,\n ),\n },\n label: `reference refresh ${table} lookup`,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n maxRetries: options.maxRetries,\n });\n\n const rows = Array.isArray(response.body) ? response.body : [];\n const byId = new Map<string, LatestReferenceRow[]>();\n for (const rawRow of rows) {\n if (!isRecord(rawRow)) {\n continue;\n }\n const id = trimText(rawRow.id);\n const version = trimText(rawRow.version);\n if (!id || !version) {\n continue;\n }\n const normalized: LatestReferenceRow = {\n id,\n version,\n json: normalizeDatasetPayload(rawRow.json, `${table}:${id}@${version}`),\n modified_at: trimText(rawRow.modified_at) || null,\n state_code: typeof rawRow.state_code === 'number' ? rawRow.state_code : null,\n user_id: trimText(rawRow.user_id) || null,\n team_id: trimText(rawRow.team_id) || null,\n };\n const existing = byId.get(id) ?? [];\n existing.push(normalized);\n byId.set(id, existing);\n }\n\n for (const id of chunk) {\n const versions = byId.get(id) ?? [];\n versions.sort((left, right) => compareVersions(right.version, left.version));\n options.cache.set(`${table}:${id}`, {\n row: versions[0] ?? null,\n count: versions.length,\n });\n }\n } catch (error) {\n const message = String(error);\n for (const id of chunk) {\n options.cache.set(`${table}:${id}`, {\n row: null,\n count: 0,\n error: message,\n });\n }\n }\n }\n }\n}\n\nfunction updateProcessJson(\n payload: JsonObject,\n refs: CollectedReference[],\n cache: Map<string, LatestReferenceCacheEntry>,\n): UpdateSummary {\n let versionUpdates = 0;\n let descriptionUpdates = 0;\n const touchedRefs: TouchedReference[] = [];\n const unresolvedRefs: UnresolvedReference[] = [];\n\n for (const ref of refs) {\n const table = tableForReferenceType(ref.node['@type']);\n const cacheKey = table ? `${table}:${ref.node['@refObjectId']}` : '';\n const latest = cacheKey ? cache.get(cacheKey) : null;\n\n if (!latest?.row) {\n unresolvedRefs.push({\n id: ref.node['@refObjectId'],\n type: ref.node['@type'],\n version: ref.node['@version'],\n reason: latest?.error ?? 'no accessible version',\n });\n continue;\n }\n\n const currentVersion = ref.node['@version'];\n const latestVersion = latest.row.version;\n const description = getShortDescription(latest.row.json, ref.node['@type']);\n const beforeDescription = JSON.stringify(ref.node['common:shortDescription'] ?? null);\n const afterDescription = description.length ? JSON.stringify(description) : beforeDescription;\n\n if (compareVersions(latestVersion, currentVersion) > 0) {\n ref.node['@version'] = latestVersion;\n versionUpdates += 1;\n }\n\n if (description.length && beforeDescription !== afterDescription) {\n ref.node['common:shortDescription'] = description;\n descriptionUpdates += 1;\n }\n\n if (ref.node['@version'] !== currentVersion || beforeDescription !== afterDescription) {\n touchedRefs.push({\n id: ref.node['@refObjectId'],\n type: ref.node['@type'],\n from_version: currentVersion,\n to_version: ref.node['@version'],\n path: ref.path,\n });\n }\n }\n\n void payload;\n return {\n version_updates: versionUpdates,\n description_updates: descriptionUpdates,\n touched_refs: touchedRefs,\n unresolved_refs: unresolvedRefs,\n };\n}\n\nfunction appendReportHeader(\n reportFile: string,\n context: {\n mode: 'dry_run' | 'apply';\n generatedAtUtc: string;\n manifestCount: number;\n },\n): void {\n if (existsSync(reportFile)) {\n return;\n }\n writeTextArtifact(\n reportFile,\n [\n '# TianGong Process Reference Refresh',\n '',\n `- mode: ${context.mode}`,\n `- generated_at_utc: ${context.generatedAtUtc}`,\n `- manifest_count: ${context.manifestCount}`,\n '',\n '| time | status | key | version updates | description updates | refs | note |',\n '| --- | --- | --- | ---: | ---: | ---: | --- |',\n '',\n ].join('\\n'),\n );\n}\n\nfunction appendReportRow(reportFile: string, record: ProgressRecord): void {\n const note = trimText(record.note ?? record.error)\n .replace(/\\|/gu, '/')\n .slice(0, 180);\n appendFileSync(\n reportFile,\n `| ${record.time} | ${record.status} | ${record.key} | ${record.version_updates ?? 0} | ${record.description_updates ?? 0} | ${record.ref_count ?? 0} | ${note} |\\n`,\n 'utf8',\n );\n}\n\nasync function processOne(options: {\n row: ProcessManifestRow;\n apply: boolean;\n files: ProcessRefreshReferencesReport['files'];\n auth: Awaited<ReturnType<typeof resolveRemoteAuth>>;\n fetchImpl: FetchLike;\n timeoutMs: number;\n maxRetries: number;\n env: NodeJS.ProcessEnv;\n validateProcessPayloadImpl: (payload: JsonObject) => ProcessPayloadValidationResult;\n syncStateAwareProcessRecordImpl: (\n options: SyncStateAwareProcessRecordOptions,\n ) => Promise<ProcessStateAwareWriteResult>;\n refCache: Map<string, LatestReferenceCacheEntry>;\n}): Promise<ProgressRecord> {\n const time = new Date().toISOString();\n const key = recordKey(options.row);\n\n try {\n if (typeof options.row.state_code === 'number' && options.row.state_code >= 20) {\n const record: ProgressRecord = {\n time,\n key,\n status: 'skipped',\n note: `state_code=${options.row.state_code}`,\n };\n writeJsonLinesArtifact(options.files.progress_jsonl, record, { append: true });\n appendReportRow(options.files.report_md, record);\n return record;\n }\n\n const detail = await fetchProcessDetail({\n projectBaseUrl: options.auth.projectBaseUrl,\n publishableKey: options.auth.publishableKey,\n accessToken: options.auth.accessToken,\n row: options.row,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n maxRetries: options.maxRetries,\n });\n const payload = JSON.parse(JSON.stringify(detail.json)) as JsonObject;\n const refs = collectRefs(payload);\n\n await fetchLatestRefs({\n projectBaseUrl: options.auth.projectBaseUrl,\n publishableKey: options.auth.publishableKey,\n accessToken: options.auth.accessToken,\n refs,\n cache: options.refCache,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n maxRetries: options.maxRetries,\n });\n\n const update = updateProcessJson(payload, refs, options.refCache);\n const validation = options.validateProcessPayloadImpl(payload);\n\n if (!validation.ok || update.unresolved_refs.length > 0) {\n const noteParts: string[] = [];\n if (!validation.ok) {\n noteParts.push(`schema_issue_count=${validation.issue_count}`);\n }\n if (update.unresolved_refs.length > 0) {\n noteParts.push(`unresolved_refs=${update.unresolved_refs.length}`);\n }\n\n const record: ProgressRecord = {\n time,\n key,\n id: options.row.id,\n version: options.row.version,\n status: 'validation_blocked',\n ref_count: refs.length,\n version_updates: update.version_updates,\n description_updates: update.description_updates,\n unresolved_count: update.unresolved_refs.length,\n changed_ref_count: update.touched_refs.length,\n schema_validator: validation.validator,\n schema_issue_count: validation.issue_count,\n schema_issues: validation.issues.slice(0, 20),\n touched_refs: update.touched_refs.slice(0, 50),\n unresolved_refs: update.unresolved_refs.slice(0, 50),\n note: noteParts.join('; '),\n };\n writeJsonLinesArtifact(options.files.validation_blockers_jsonl, record, { append: true });\n writeJsonLinesArtifact(options.files.progress_jsonl, record, { append: true });\n appendReportRow(options.files.report_md, record);\n return record;\n }\n\n let writeResult: ProcessStateAwareWriteResult | null = null;\n if (options.apply) {\n writeResult = await options.syncStateAwareProcessRecordImpl({\n id: detail.id,\n version: detail.version,\n payload,\n env: options.env,\n fetchImpl: options.fetchImpl,\n timeoutMs: options.timeoutMs,\n audit: {\n command: 'process_refresh_references',\n source: 'tiangong-lca process refresh-references',\n },\n modelId: detail.model_id,\n });\n }\n\n const record: ProgressRecord = {\n time,\n key,\n id: options.row.id,\n version: options.row.version,\n status: options.apply ? 'saved' : 'dry_run',\n ref_count: refs.length,\n version_updates: update.version_updates,\n description_updates: update.description_updates,\n unresolved_count: update.unresolved_refs.length,\n changed_ref_count: update.touched_refs.length,\n schema_validator: validation.validator,\n schema_issue_count: validation.issue_count,\n touched_refs: update.touched_refs.slice(0, 50),\n unresolved_refs: update.unresolved_refs.slice(0, 50),\n write_path:\n writeResult && 'write_path' in writeResult ? (writeResult.write_path as string) : undefined,\n write_operation: writeResult?.operation,\n };\n writeJsonLinesArtifact(options.files.progress_jsonl, record, { append: true });\n appendReportRow(options.files.report_md, record);\n return record;\n } catch (error) {\n const record: ProgressRecord = {\n time,\n key,\n id: options.row.id,\n version: options.row.version,\n status: 'error',\n error: error instanceof Error ? error.message : String(error),\n };\n writeJsonLinesArtifact(options.files.errors_jsonl, record, { append: true });\n writeJsonLinesArtifact(options.files.progress_jsonl, record, { append: true });\n appendReportRow(options.files.report_md, record);\n return record;\n }\n}\n\nasync function workerPool<T, TResult>(\n items: T[],\n concurrency: number,\n worker: (item: T, index: number) => Promise<TResult>,\n): Promise<TResult[]> {\n let cursor = 0;\n const results: TResult[] = [];\n\n async function runWorker() {\n while (cursor < items.length) {\n const currentIndex = cursor;\n cursor += 1;\n results[currentIndex] = await worker(items[currentIndex] as T, currentIndex);\n }\n }\n\n await Promise.all(Array.from({ length: concurrency }, () => runWorker()));\n return results;\n}\n\nexport async function runProcessRefreshReferences(\n options: RunProcessRefreshReferencesOptions,\n): Promise<ProcessRefreshReferencesReport> {\n const outDir = path.resolve(\n requiredNonEmpty(options.outDir, '--out-dir', 'PROCESS_REFRESH_OUT_DIR_REQUIRED'),\n );\n const apply = Boolean(options.apply);\n const reuseManifest = Boolean(options.reuseManifest);\n const limit = toOptionalPositiveInteger(\n options.limit ?? null,\n '--limit',\n 'PROCESS_REFRESH_LIMIT_INVALID',\n );\n const pageSize = toPositiveInteger(\n options.pageSize ?? DEFAULT_PAGE_SIZE,\n '--page-size',\n 'PROCESS_REFRESH_PAGE_SIZE_INVALID',\n MAX_PAGE_SIZE,\n );\n const concurrency = toPositiveInteger(\n options.concurrency ?? DEFAULT_CONCURRENCY,\n '--concurrency',\n 'PROCESS_REFRESH_CONCURRENCY_INVALID',\n MAX_CONCURRENCY,\n );\n const timeoutMs = toPositiveInteger(\n options.timeoutMs ?? DEFAULT_TIMEOUT_MS,\n 'timeout',\n 'PROCESS_REFRESH_TIMEOUT_INVALID',\n );\n const maxRetries = toPositiveInteger(\n options.maxRetries ?? DEFAULT_MAX_RETRIES,\n 'retry count',\n 'PROCESS_REFRESH_MAX_RETRIES_INVALID',\n );\n const env = options.env ?? process.env;\n const fetchImpl = options.fetchImpl ?? (fetch as FetchLike);\n const generatedAtUtc = nowIso(options.now);\n const validateProcessPayloadImpl = options.validateProcessPayloadImpl ?? validateProcessPayload;\n const syncStateAwareProcessRecordImpl =\n options.syncStateAwareProcessRecordImpl ?? syncStateAwareProcessRecord;\n\n mkdirSync(outDir, { recursive: true });\n\n const files: ProcessRefreshReferencesReport['files'] = {\n manifest: path.join(outDir, 'inputs', 'processes.manifest.json'),\n progress_jsonl: path.join(outDir, 'outputs', 'progress.jsonl'),\n errors_jsonl: path.join(outDir, 'outputs', 'errors.jsonl'),\n validation_blockers_jsonl: path.join(outDir, 'outputs', 'validation-blockers.jsonl'),\n summary_json: path.join(outDir, 'outputs', 'summary.json'),\n report_md: path.join(outDir, 'reports', 'process-refresh-references.md'),\n };\n\n const auth = await resolveRemoteAuth({\n env,\n fetchImpl,\n timeoutMs,\n now: options.now ?? new Date(),\n maxRetries,\n });\n\n let manifest = readManifest(files.manifest);\n if (!manifest || !reuseManifest) {\n const rows = await snapshotProcesses({\n projectBaseUrl: auth.projectBaseUrl,\n publishableKey: auth.publishableKey,\n accessToken: auth.accessToken,\n userId: auth.userId,\n pageSize,\n fetchImpl,\n timeoutMs,\n maxRetries,\n });\n manifest = {\n schema_version: 1,\n generated_at_utc: generatedAtUtc,\n user_id: auth.userId,\n masked_user_email: auth.maskedUserEmail,\n source: 'current_user_processes',\n order: 'modified_at.desc,id.asc',\n page_size: pageSize,\n count: rows.length,\n rows,\n };\n writeJsonArtifact(files.manifest, manifest);\n }\n\n appendReportHeader(files.report_md, {\n mode: apply ? 'apply' : 'dry_run',\n generatedAtUtc,\n manifestCount: manifest.rows.length,\n });\n\n const completed = readCompleted(files.progress_jsonl, apply);\n const selectedRows = manifest.rows.slice(0, limit ?? manifest.rows.length);\n const pendingRows = selectedRows.filter((row) => !completed.has(recordKey(row)));\n const refCache = new Map<string, LatestReferenceCacheEntry>();\n const counts = {\n manifest: manifest.rows.length,\n selected: selectedRows.length,\n already_completed: selectedRows.length - pendingRows.length,\n pending: pendingRows.length,\n saved: 0,\n dry_run: 0,\n skipped: 0,\n validation_blocked: 0,\n errors: 0,\n };\n\n const results = await workerPool(pendingRows, concurrency, (row) =>\n processOne({\n row,\n apply,\n files,\n auth,\n fetchImpl,\n timeoutMs,\n maxRetries,\n env,\n validateProcessPayloadImpl,\n syncStateAwareProcessRecordImpl,\n refCache,\n }),\n );\n\n for (const record of results) {\n if (record.status === 'saved') {\n counts.saved += 1;\n } else if (record.status === 'dry_run') {\n counts.dry_run += 1;\n } else if (record.status === 'skipped') {\n counts.skipped += 1;\n } else if (record.status === 'validation_blocked') {\n counts.validation_blocked += 1;\n } else if (record.status === 'error') {\n counts.errors += 1;\n }\n }\n\n const report: ProcessRefreshReferencesReport = {\n schema_version: 1,\n generated_at_utc: generatedAtUtc,\n status:\n counts.errors > 0\n ? 'completed_process_reference_refresh_with_errors'\n : 'completed_process_reference_refresh',\n out_dir: outDir,\n mode: apply ? 'apply' : 'dry_run',\n user_id: manifest.user_id,\n masked_user_email: manifest.masked_user_email,\n counts,\n files,\n };\n\n writeJsonArtifact(files.summary_json, report);\n appendFileSync(\n files.report_md,\n `\\n## Summary\\n\\n\\`\\`\\`json\\n${JSON.stringify(report, null, 2)}\\n\\`\\`\\`\\n`,\n 'utf8',\n );\n\n return report;\n}\n\nexport const __testInternals = {\n appendReportHeader,\n collectRefs,\n compareVersions,\n fetchLatestRefs,\n fetchJsonWithRetry,\n genFlowName,\n genFlowNameJson,\n genProcessName,\n genProcessNameJson,\n getLangList,\n getLangText,\n getShortDescription,\n normalizeReferenceType,\n normalizeDatasetPayload,\n normalizeManifestRow,\n parseJsonResponse,\n parseContentRangeTotal,\n readCompleted,\n readManifest,\n recordKey,\n tableForReferenceType,\n updateProcessJson,\n};\n"]}
|
|
@@ -5,7 +5,7 @@ import { CliError } from './errors.js';
|
|
|
5
5
|
import { deriveSupabaseProjectBaseUrl, deriveSupabaseRestBaseUrl, requireSupabaseRestRuntime, } from './supabase-client.js';
|
|
6
6
|
import { applyDataApiProfileHeaders, buildDataApiUrl, resolveDataApiCapability, } from './supabase-data-api-contract.js';
|
|
7
7
|
import { resolveSupabaseUserSession } from './supabase-session.js';
|
|
8
|
-
import { redactEmail
|
|
8
|
+
import { redactEmail } from './user-api-key.js';
|
|
9
9
|
const DEFAULT_STATE_CODES = [0, 100];
|
|
10
10
|
const DEFAULT_PAGE_SIZE = 200;
|
|
11
11
|
const DEFAULT_TIMEOUT_MS = 30_000;
|
|
@@ -750,7 +750,12 @@ export async function runProcessScopeStatistics(options) {
|
|
|
750
750
|
const env = options.env ?? process.env;
|
|
751
751
|
const fetchImpl = options.fetchImpl ?? fetch;
|
|
752
752
|
const restRuntime = requireSupabaseRestRuntime(env);
|
|
753
|
-
const
|
|
753
|
+
const session = await resolveSupabaseUserSession({
|
|
754
|
+
runtime: restRuntime,
|
|
755
|
+
fetchImpl,
|
|
756
|
+
timeoutMs,
|
|
757
|
+
now: options.now ?? new Date(),
|
|
758
|
+
});
|
|
754
759
|
const userId = scope === 'current-user'
|
|
755
760
|
? await resolveCurrentUserId({
|
|
756
761
|
env,
|
|
@@ -773,7 +778,7 @@ export async function runProcessScopeStatistics(options) {
|
|
|
773
778
|
rows = snapshot.rows;
|
|
774
779
|
metadata = {
|
|
775
780
|
userId,
|
|
776
|
-
maskedUserEmail: redactEmail(
|
|
781
|
+
maskedUserEmail: redactEmail(session.userEmail),
|
|
777
782
|
totalRowsReportedByRemote: snapshot.total ?? rows.length,
|
|
778
783
|
};
|
|
779
784
|
writeJsonLinesArtifact(snapshotRowsPath, rows);
|