@tiangong-lca/cli 0.0.11 → 0.0.13

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.
Files changed (60) hide show
  1. package/README.md +18 -7
  2. package/assets/tidas-schemas/tidas_contacts.json +312 -0
  3. package/assets/tidas-schemas/tidas_contacts_category.json +126 -0
  4. package/assets/tidas-schemas/tidas_data_types.json +359 -0
  5. package/assets/tidas-schemas/tidas_flowproperties.json +303 -0
  6. package/assets/tidas-schemas/tidas_flowproperties_category.json +61 -0
  7. package/assets/tidas-schemas/tidas_flows.json +809 -0
  8. package/assets/tidas-schemas/tidas_flows_elementary_category.json +720 -0
  9. package/assets/tidas-schemas/tidas_flows_product_category.json +59623 -0
  10. package/assets/tidas-schemas/tidas_lciamethods.json +1326 -0
  11. package/assets/tidas-schemas/tidas_lciamethods_category.json +685 -0
  12. package/assets/tidas-schemas/tidas_lifecyclemodels.json +1374 -0
  13. package/assets/tidas-schemas/tidas_locations_category.json +2593 -0
  14. package/assets/tidas-schemas/tidas_processes.json +1646 -0
  15. package/assets/tidas-schemas/tidas_processes_category.json +10795 -0
  16. package/assets/tidas-schemas/tidas_sources.json +228 -0
  17. package/assets/tidas-schemas/tidas_sources_category.json +100 -0
  18. package/assets/tidas-schemas/tidas_unitgroups.json +338 -0
  19. package/assets/tidas-schemas/tidas_unitgroups_category.json +61 -0
  20. package/dist/src/cli.js +847 -13
  21. package/dist/src/cli.js.map +1 -1
  22. package/dist/src/lib/dataset-classification.js +947 -0
  23. package/dist/src/lib/dataset-classification.js.map +1 -0
  24. package/dist/src/lib/dataset-command.js +11 -0
  25. package/dist/src/lib/dataset-command.js.map +1 -1
  26. package/dist/src/lib/dataset-contract.js +2 -0
  27. package/dist/src/lib/dataset-contract.js.map +1 -1
  28. package/dist/src/lib/dataset-curation-queue.js +359 -2
  29. package/dist/src/lib/dataset-curation-queue.js.map +1 -1
  30. package/dist/src/lib/dataset-import-lca.js +18 -0
  31. package/dist/src/lib/dataset-import-lca.js.map +1 -1
  32. package/dist/src/lib/dataset-local.js +94 -1
  33. package/dist/src/lib/dataset-local.js.map +1 -1
  34. package/dist/src/lib/dataset-maintenance-clear-account.js +506 -0
  35. package/dist/src/lib/dataset-maintenance-clear-account.js.map +1 -0
  36. package/dist/src/lib/dataset-patch.js +797 -0
  37. package/dist/src/lib/dataset-patch.js.map +1 -0
  38. package/dist/src/lib/dataset-remote-verify.js +188 -3
  39. package/dist/src/lib/dataset-remote-verify.js.map +1 -1
  40. package/dist/src/lib/dataset-save-draft-run.js +725 -0
  41. package/dist/src/lib/dataset-save-draft-run.js.map +1 -0
  42. package/dist/src/lib/dataset-validate.js +32 -2
  43. package/dist/src/lib/dataset-validate.js.map +1 -1
  44. package/dist/src/lib/flow-publish-version.js +7 -2
  45. package/dist/src/lib/flow-publish-version.js.map +1 -1
  46. package/dist/src/lib/flow-qa.js +8 -0
  47. package/dist/src/lib/flow-qa.js.map +1 -1
  48. package/dist/src/lib/identity-preflight.js +895 -117
  49. package/dist/src/lib/identity-preflight.js.map +1 -1
  50. package/dist/src/lib/lifecyclemodel-qa.js +159 -34
  51. package/dist/src/lib/lifecyclemodel-qa.js.map +1 -1
  52. package/dist/src/lib/process-required-fields.js +62 -12
  53. package/dist/src/lib/process-required-fields.js.map +1 -1
  54. package/dist/src/lib/process-save-draft-run.js +10 -0
  55. package/dist/src/lib/process-save-draft-run.js.map +1 -1
  56. package/dist/src/lib/process-save-draft.js +59 -3
  57. package/dist/src/lib/process-save-draft.js.map +1 -1
  58. package/dist/src/lib/supabase-client.js +19 -8
  59. package/dist/src/lib/supabase-client.js.map +1 -1
  60. package/package.json +2 -1
@@ -1 +1 @@
1
- {"version":3,"file":"dataset-remote-verify.js","sourceRoot":"","sources":["../../../src/lib/dataset-remote-verify.ts"],"names":[],"mappings":"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","sourcesContent":["import path from 'node:path';\nimport { writeJsonArtifact, writeJsonLinesArtifact } from './artifacts.js';\nimport { CliError } from './errors.js';\nimport type { FetchLike } from './http.js';\nimport {\n createSupabaseDataClient,\n requireSupabaseRestRuntime,\n runSupabaseArrayQuery,\n type SupabaseDataRuntime,\n} from './supabase-client.js';\nimport { createSupabaseDataRuntime } from './supabase-session.js';\nimport {\n firstNonEmpty,\n isRecord,\n readDatasetRowsInput,\n trimToken,\n unwrapDatasetPayload,\n type JsonObject,\n} from './dataset-local.js';\n\nconst DEFAULT_TIMEOUT_MS = 10_000;\n\nexport type RemoteDatasetTable =\n | 'contacts'\n | 'flowproperties'\n | 'flows'\n | 'lciamethods'\n | 'lifecyclemodels'\n | 'processes'\n | 'sources'\n | 'unitgroups';\n\nexport type RemoteVerificationReferenceRole = 'root' | 'reference';\nexport type RemoteVerificationRootPolicy = 'existing' | 'candidate';\n\nexport type RemoteVerificationStatus =\n | 'ok'\n | 'lookup_failed'\n | 'missing_dataset'\n | 'missing_version'\n | 'unsupported_type'\n | 'version_missing'\n | 'version_outdated';\n\nexport type RemoteDatasetReference = {\n row_index: number;\n role: RemoteVerificationReferenceRole;\n table: RemoteDatasetTable | null;\n type: string | null;\n id: string | null;\n version: string | null;\n path: string;\n short_description: string | null;\n};\n\nexport type RemoteDatasetLookupRow = {\n id: string;\n version: string | null;\n};\n\nexport type RemoteDatasetLookup = {\n exact: RemoteDatasetLookupRow | null;\n latest: RemoteDatasetLookupRow | null;\n exact_source_url: string | null;\n latest_source_url: string | null;\n};\n\nexport type RemoteDatasetLookupRequest = {\n table: RemoteDatasetTable;\n id: string;\n version: string | null;\n};\n\nexport type RemoteVerificationCheck = {\n row_index: number;\n role: RemoteVerificationReferenceRole;\n table: RemoteDatasetTable | null;\n type: string | null;\n id: string | null;\n version: string | null;\n path: string;\n short_description: string | null;\n status: RemoteVerificationStatus;\n latest_version: string | null;\n exact_source_url: string | null;\n latest_source_url: string | null;\n message: string;\n};\n\nexport type RemoteVerificationBlocker = {\n code: RemoteVerificationStatus;\n severity: 'error';\n message: string;\n row_index: number;\n role: RemoteVerificationReferenceRole;\n table: RemoteDatasetTable | null;\n id: string | null;\n version: string | null;\n latest_version: string | null;\n path: string;\n};\n\nexport type DatasetRemoteVerificationReport = {\n schema_version: 1;\n generated_at_utc: string;\n status: 'passed_remote_verification' | 'blocked_remote_verification';\n root_policy: RemoteVerificationRootPolicy;\n input_path: string;\n out_dir: string;\n counts: {\n rows: number;\n references: number;\n checked: number;\n blockers: number;\n by_status: Record<RemoteVerificationStatus, number>;\n by_table: Record<RemoteDatasetTable, number>;\n };\n blockers: RemoteVerificationBlocker[];\n files: {\n report: string;\n checks: string;\n blockers: string;\n };\n};\n\nexport type RunDatasetRemoteVerifyOptions = {\n inputPath: string;\n outDir: string;\n rootPolicy?: RemoteVerificationRootPolicy;\n rawInput?: unknown;\n env?: NodeJS.ProcessEnv;\n fetchImpl?: FetchLike;\n timeoutMs?: number;\n now?: Date;\n lookupDatasetImpl?: (request: RemoteDatasetLookupRequest) => Promise<RemoteDatasetLookup>;\n};\n\ntype RootDatasetDescriptor = {\n wrapper: string;\n table: RemoteDatasetTable;\n type: string;\n information_key: string;\n};\n\nconst ROOT_DATASET_DESCRIPTORS: RootDatasetDescriptor[] = [\n {\n wrapper: 'processDataSet',\n table: 'processes',\n type: 'process data set',\n information_key: 'processInformation',\n },\n {\n wrapper: 'flowDataSet',\n table: 'flows',\n type: 'flow data set',\n information_key: 'flowInformation',\n },\n {\n wrapper: 'lifeCycleModelDataSet',\n table: 'lifecyclemodels',\n type: 'life cycle model data set',\n information_key: 'lifeCycleModelInformation',\n },\n {\n wrapper: 'sourceDataSet',\n table: 'sources',\n type: 'source data set',\n information_key: 'sourceInformation',\n },\n {\n wrapper: 'contactDataSet',\n table: 'contacts',\n type: 'contact data set',\n information_key: 'contactInformation',\n },\n {\n wrapper: 'flowPropertyDataSet',\n table: 'flowproperties',\n type: 'flow property data set',\n information_key: 'flowPropertyInformation',\n },\n {\n wrapper: 'unitGroupDataSet',\n table: 'unitgroups',\n type: 'unit group data set',\n information_key: 'unitGroupInformation',\n },\n {\n wrapper: 'LCIAMethodDataSet',\n table: 'lciamethods',\n type: 'LCIA method data set',\n information_key: 'LCIAMethodInformation',\n },\n];\n\nconst TABLE_ALIASES = new Map<string, RemoteDatasetTable>([\n ['contact', 'contacts'],\n ['contact data set', 'contacts'],\n ['contacts', 'contacts'],\n ['flow', 'flows'],\n ['flow data set', 'flows'],\n ['flows', 'flows'],\n ['flow property', 'flowproperties'],\n ['flow property data set', 'flowproperties'],\n ['flowproperties', 'flowproperties'],\n ['lcia method', 'lciamethods'],\n ['lcia method data set', 'lciamethods'],\n ['lciamethod', 'lciamethods'],\n ['lciamethods', 'lciamethods'],\n ['life cycle model', 'lifecyclemodels'],\n ['life cycle model data set', 'lifecyclemodels'],\n ['lifecycle model', 'lifecyclemodels'],\n ['lifecycle model data set', 'lifecyclemodels'],\n ['lifecyclemodel', 'lifecyclemodels'],\n ['lifecyclemodels', 'lifecyclemodels'],\n ['process', 'processes'],\n ['process data set', 'processes'],\n ['processes', 'processes'],\n ['source', 'sources'],\n ['source data set', 'sources'],\n ['sources', 'sources'],\n ['unit group', 'unitgroups'],\n ['unit group data set', 'unitgroups'],\n ['unitgroup', 'unitgroups'],\n ['unitgroups', 'unitgroups'],\n]);\n\nconst PATH_TABLE_HINTS: Array<[RegExp, RemoteDatasetTable]> = [\n [/referenceToFlowDataSet$/u, 'flows'],\n [/referenceToProcess$/u, 'processes'],\n [/referenceToResultingProcess$/u, 'processes'],\n [/referenceToFlowPropertyDataSet$/u, 'flowproperties'],\n [/referenceToReferenceUnitGroup$/u, 'unitgroups'],\n [/referenceToLCIAMethodDataSet$/u, 'lciamethods'],\n [/referenceToDataSource$/u, 'sources'],\n [/referenceToExternalDocumentation$/u, 'sources'],\n [/referenceToDataSetFormat$/u, 'sources'],\n [/referenceToComplianceSystem$/u, 'sources'],\n [/referenceToDataSetUseApproval$/u, 'sources'],\n [/referenceToContact$/u, 'contacts'],\n [/referenceToCommissioner$/u, 'contacts'],\n [/referenceToPersonOrEntity/u, 'contacts'],\n [/referenceToNameOfReviewerAndInstitution$/u, 'contacts'],\n];\n\nconst EMPTY_STATUS_COUNTS: Record<RemoteVerificationStatus, number> = {\n ok: 0,\n lookup_failed: 0,\n missing_dataset: 0,\n missing_version: 0,\n unsupported_type: 0,\n version_missing: 0,\n version_outdated: 0,\n};\n\nconst EMPTY_TABLE_COUNTS: Record<RemoteDatasetTable, number> = {\n contacts: 0,\n flowproperties: 0,\n flows: 0,\n lciamethods: 0,\n lifecyclemodels: 0,\n processes: 0,\n sources: 0,\n unitgroups: 0,\n};\n\nfunction requireNonEmpty(value: string, label: string, code: string): string {\n const normalized = value.trim();\n if (!normalized) {\n throw new CliError(`Missing required ${label} value.`, {\n code,\n exitCode: 2,\n });\n }\n return normalized;\n}\n\nfunction nowIso(now: Date = new Date()): string {\n return now.toISOString();\n}\n\nfunction textValue(value: unknown): string | null {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return String(value);\n }\n return trimToken(value);\n}\n\nfunction normalizeTableToken(value: string | null): string | null {\n return value ? value.trim().replace(/\\s+/gu, ' ').toLowerCase() : null;\n}\n\nfunction tableFromType(value: string | null): RemoteDatasetTable | null {\n const normalized = normalizeTableToken(value);\n return normalized ? (TABLE_ALIASES.get(normalized) ?? null) : null;\n}\n\nfunction tableFromPath(pathExpression: string): RemoteDatasetTable | null {\n const pathEnd = pathExpression.split('/').filter(Boolean).at(-1) ?? '';\n return PATH_TABLE_HINTS.find(([pattern]) => pattern.test(pathEnd))?.[1] ?? null;\n}\n\nfunction shortDescription(value: unknown): string | null {\n if (typeof value === 'string') {\n return textValue(value);\n }\n if (Array.isArray(value)) {\n for (const entry of value) {\n const text = shortDescription(entry);\n if (text) {\n return text;\n }\n }\n return null;\n }\n if (isRecord(value)) {\n return textValue(value['#text'] ?? value.text ?? value.value);\n }\n return null;\n}\n\nfunction pointerPath(basePath: string, segment: string | number): string {\n const encoded = String(segment).replace(/~/gu, '~0').replace(/\\//gu, '~1');\n return `${basePath}/${encoded}`;\n}\n\nfunction rootOf(\n payload: JsonObject,\n): { descriptor: RootDatasetDescriptor; root: JsonObject } | null {\n for (const descriptor of ROOT_DATASET_DESCRIPTORS) {\n if (isRecord(payload[descriptor.wrapper])) {\n return { descriptor, root: payload[descriptor.wrapper] as JsonObject };\n }\n }\n return null;\n}\n\nfunction rootIdentity(row: JsonObject, payload: JsonObject): RemoteDatasetReference | null {\n const root = rootOf(payload);\n if (!root) {\n return null;\n }\n const information = isRecord(root.root[root.descriptor.information_key])\n ? (root.root[root.descriptor.information_key] as JsonObject)\n : {};\n const dataSetInformation = isRecord(information.dataSetInformation)\n ? information.dataSetInformation\n : {};\n const administrativeInformation = isRecord(root.root.administrativeInformation)\n ? root.root.administrativeInformation\n : {};\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n\n return {\n row_index: -1,\n role: 'root',\n table: root.descriptor.table,\n type: root.descriptor.type,\n id: firstNonEmpty(row.id, row.uuid, dataSetInformation['common:UUID']),\n version: firstNonEmpty(row.version, publicationAndOwnership['common:dataSetVersion']),\n path: `/${root.descriptor.wrapper}`,\n short_description: shortDescription(dataSetInformation.name ?? dataSetInformation.shortName),\n };\n}\n\nfunction referenceFromRecord(\n rowIndex: number,\n value: JsonObject,\n pathExpression: string,\n): RemoteDatasetReference | null {\n const id = firstNonEmpty(value['@refObjectId'], value.refObjectId, value.id);\n if (!id) {\n return null;\n }\n const type = firstNonEmpty(value['@type'], value.type);\n const table = tableFromType(type) ?? tableFromPath(pathExpression);\n return {\n row_index: rowIndex,\n role: 'reference',\n table,\n type,\n id,\n version: firstNonEmpty(value['@version'], value.version),\n path: pathExpression,\n short_description: shortDescription(value['common:shortDescription']),\n };\n}\n\nfunction flowReferenceFromRecord(\n rowIndex: number,\n value: JsonObject,\n pathExpression: string,\n): RemoteDatasetReference | null {\n const id = firstNonEmpty(value['@flowUUID']);\n return id\n ? {\n row_index: rowIndex,\n role: 'reference',\n table: 'flows',\n type: 'flow data set',\n id,\n version: firstNonEmpty(value['@version'], value.version),\n path: pointerPath(pathExpression, '@flowUUID'),\n short_description: null,\n }\n : null;\n}\n\nfunction collectReferencesFromValue(\n rowIndex: number,\n value: unknown,\n pathExpression: string,\n references: RemoteDatasetReference[],\n): void {\n if (Array.isArray(value)) {\n value.forEach((entry, index) =>\n collectReferencesFromValue(rowIndex, entry, pointerPath(pathExpression, index), references),\n );\n return;\n }\n\n if (!isRecord(value)) {\n return;\n }\n\n const ref = referenceFromRecord(rowIndex, value, pathExpression);\n if (ref) {\n references.push(ref);\n }\n const flowRef = flowReferenceFromRecord(rowIndex, value, pathExpression);\n if (flowRef) {\n references.push(flowRef);\n }\n for (const [key, nested] of Object.entries(value)) {\n collectReferencesFromValue(rowIndex, nested, pointerPath(pathExpression, key), references);\n }\n}\n\nfunction collectRemoteReferences(rows: JsonObject[]): RemoteDatasetReference[] {\n const references: RemoteDatasetReference[] = [];\n rows.forEach((row, index) => {\n const payload = unwrapDatasetPayload(row);\n const root = rootIdentity(row, payload);\n if (root) {\n references.push({ ...root, row_index: index });\n }\n collectReferencesFromValue(index, payload, '', references);\n });\n return references;\n}\n\nfunction compareVersions(left: string | null, right: string | null): number {\n if (!left && !right) {\n return 0;\n }\n if (!left) {\n return -1;\n }\n if (!right) {\n return 1;\n }\n const leftParts = left.split(/[._-]/u);\n const rightParts = right.split(/[._-]/u);\n const length = Math.max(leftParts.length, rightParts.length);\n for (let index = 0; index < length; index += 1) {\n const leftPart = leftParts[index] ?? '0';\n const rightPart = rightParts[index] ?? '0';\n const leftNumber = Number(leftPart);\n const rightNumber = Number(rightPart);\n if (Number.isFinite(leftNumber) && Number.isFinite(rightNumber)) {\n if (leftNumber !== rightNumber) {\n return leftNumber > rightNumber ? 1 : -1;\n }\n } else {\n const compared = leftPart.localeCompare(rightPart);\n if (compared !== 0) {\n return compared > 0 ? 1 : -1;\n }\n }\n }\n return 0;\n}\n\nfunction buildRemoteUrl(\n restBaseUrl: string,\n table: RemoteDatasetTable,\n id: string,\n version: string | null,\n): string {\n const url = new URL(`${restBaseUrl.replace(/\\/+$/u, '')}/${table}`);\n url.searchParams.set('id', `eq.${id}`);\n if (version) {\n url.searchParams.set('version', `eq.${version}`);\n } else {\n url.searchParams.set('order', 'version.desc');\n url.searchParams.set('limit', '1');\n }\n return url.toString();\n}\n\nfunction normalizeRows(value: unknown): RemoteDatasetLookupRow[] {\n return Array.isArray(value)\n ? value\n .filter(isRecord)\n .map((row) => ({\n id: firstNonEmpty(row.id) ?? '',\n version: firstNonEmpty(row.version),\n }))\n .filter((row) => Boolean(row.id))\n : [];\n}\n\nasync function lookupRemoteDataset(options: {\n runtime: SupabaseDataRuntime;\n fetchImpl: FetchLike;\n timeoutMs: number;\n request: RemoteDatasetLookupRequest;\n}): Promise<RemoteDatasetLookup> {\n const { client, restBaseUrl } = createSupabaseDataClient(\n options.runtime,\n options.fetchImpl,\n options.timeoutMs,\n );\n const exactSourceUrl = options.request.version\n ? buildRemoteUrl(\n restBaseUrl,\n options.request.table,\n options.request.id,\n options.request.version,\n )\n : null;\n const latestSourceUrl = buildRemoteUrl(\n restBaseUrl,\n options.request.table,\n options.request.id,\n null,\n );\n const exactRows = options.request.version\n ? normalizeRows(\n await runSupabaseArrayQuery(\n client\n .from(options.request.table)\n .select('id,version')\n .eq('id', options.request.id)\n .eq('version', options.request.version),\n exactSourceUrl as string,\n ),\n )\n : [];\n const latestRows = normalizeRows(\n await runSupabaseArrayQuery(\n client\n .from(options.request.table)\n .select('id,version')\n .eq('id', options.request.id)\n .order('version', { ascending: false })\n .limit(1),\n latestSourceUrl,\n ),\n );\n return {\n exact: exactRows[0] ?? null,\n latest: latestRows[0] ?? null,\n exact_source_url: exactSourceUrl,\n latest_source_url: latestSourceUrl,\n };\n}\n\nfunction checkMessage(reference: RemoteDatasetReference, status: RemoteVerificationStatus): string {\n const label = `${reference.table ?? reference.type ?? 'unknown'}:${reference.id ?? '-'}@${\n reference.version ?? '-'\n }`;\n switch (status) {\n case 'ok':\n return `Remote dataset reference is resolvable: ${label}.`;\n case 'lookup_failed':\n return `Remote lookup failed for dataset reference: ${label}.`;\n case 'missing_dataset':\n return `Remote dataset id does not exist: ${label}.`;\n case 'missing_version':\n return `Remote dataset id exists, but the requested version does not exist: ${label}.`;\n case 'unsupported_type':\n return `Dataset reference type cannot be mapped to a TianGong table: ${label}.`;\n case 'version_missing':\n return `Dataset reference is missing @version and cannot pass publish-readiness verification: ${label}.`;\n case 'version_outdated':\n return `Requested dataset version is lower than the latest published version: ${label}.`;\n }\n}\n\nfunction classifyCheck(\n reference: RemoteDatasetReference,\n lookup: RemoteDatasetLookup | null,\n lookupFailed: boolean,\n rootPolicy: RemoteVerificationRootPolicy,\n): RemoteVerificationCheck {\n let status: RemoteVerificationStatus = 'ok';\n if (!reference.table || !reference.id) {\n status = 'unsupported_type';\n } else if (lookupFailed) {\n status = 'lookup_failed';\n } else if (!reference.version) {\n status = 'version_missing';\n } else if (reference.role === 'root' && rootPolicy === 'candidate') {\n if (!lookup?.latest) {\n status = 'ok';\n } else if (!lookup.exact) {\n status =\n compareVersions(reference.version, lookup.latest.version) > 0\n ? 'ok'\n : compareVersions(lookup.latest.version, reference.version) > 0\n ? 'version_outdated'\n : 'missing_version';\n } else if (compareVersions(lookup.latest.version, reference.version) > 0) {\n status = 'version_outdated';\n }\n } else if (!lookup?.latest) {\n status = 'missing_dataset';\n } else if (!lookup.exact) {\n status = 'missing_version';\n } else if (compareVersions(lookup.latest.version, reference.version) > 0) {\n status = 'version_outdated';\n }\n return {\n ...reference,\n status,\n latest_version: lookup?.latest?.version ?? null,\n exact_source_url: lookup?.exact_source_url ?? null,\n latest_source_url: lookup?.latest_source_url ?? null,\n message: checkMessage(reference, status),\n };\n}\n\nfunction blockerFromCheck(check: RemoteVerificationCheck): RemoteVerificationBlocker | null {\n return check.status === 'ok'\n ? null\n : {\n code: check.status,\n severity: 'error',\n message: check.message,\n row_index: check.row_index,\n role: check.role,\n table: check.table,\n id: check.id,\n version: check.version,\n latest_version: check.latest_version,\n path: check.path,\n };\n}\n\nfunction buildFiles(outDir: string): DatasetRemoteVerificationReport['files'] {\n const resolved = path.resolve(outDir);\n return {\n report: path.join(resolved, 'outputs', 'remote-verification-report.json'),\n checks: path.join(resolved, 'outputs', 'remote-verification.jsonl'),\n blockers: path.join(resolved, 'outputs', 'blockers.jsonl'),\n };\n}\n\nfunction uniqueLookupKey(reference: RemoteDatasetReference): string | null {\n return reference.table && reference.id\n ? `${reference.table}:${reference.id}:${reference.version ?? ''}`\n : null;\n}\n\nexport async function runDatasetRemoteVerify(\n options: RunDatasetRemoteVerifyOptions,\n): Promise<DatasetRemoteVerificationReport> {\n const inputPath = path.resolve(\n requireNonEmpty(options.inputPath, '--input', 'DATASET_REMOTE_VERIFY_INPUT_REQUIRED'),\n );\n const outDir = path.resolve(\n requireNonEmpty(options.outDir, '--out-dir', 'DATASET_REMOTE_VERIFY_OUT_DIR_REQUIRED'),\n );\n const rows = readDatasetRowsInput(inputPath, options.rawInput);\n const references = collectRemoteReferences(rows);\n const rootPolicy = options.rootPolicy ?? 'existing';\n const fetchImpl = options.fetchImpl ?? (fetch as FetchLike);\n const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n const runtime =\n options.lookupDatasetImpl === undefined\n ? createSupabaseDataRuntime({\n runtime: requireSupabaseRestRuntime(options.env ?? process.env),\n fetchImpl,\n timeoutMs,\n now: options.now,\n })\n : null;\n const lookupImpl =\n options.lookupDatasetImpl ??\n ((request: RemoteDatasetLookupRequest) =>\n lookupRemoteDataset({\n runtime: runtime as SupabaseDataRuntime,\n fetchImpl,\n timeoutMs,\n request,\n }));\n const lookupCache = new Map<string, Promise<RemoteDatasetLookup>>();\n const checks: RemoteVerificationCheck[] = [];\n\n for (const reference of references) {\n let lookup: RemoteDatasetLookup | null = null;\n let lookupFailed = false;\n const lookupKey = uniqueLookupKey(reference);\n if (reference.table && reference.id && lookupKey) {\n try {\n if (!lookupCache.has(lookupKey)) {\n lookupCache.set(\n lookupKey,\n lookupImpl({\n table: reference.table,\n id: reference.id,\n version: reference.version,\n }),\n );\n }\n lookup = await lookupCache.get(lookupKey)!;\n } catch {\n lookupFailed = true;\n }\n }\n checks.push(classifyCheck(reference, lookup, lookupFailed, rootPolicy));\n }\n\n const blockers = checks\n .map(blockerFromCheck)\n .filter((blocker): blocker is RemoteVerificationBlocker => blocker !== null);\n const byStatus = { ...EMPTY_STATUS_COUNTS };\n const byTable = { ...EMPTY_TABLE_COUNTS };\n checks.forEach((check) => {\n byStatus[check.status] += 1;\n if (check.table) {\n byTable[check.table] += 1;\n }\n });\n\n const files = buildFiles(outDir);\n const report: DatasetRemoteVerificationReport = {\n schema_version: 1,\n generated_at_utc: nowIso(options.now),\n status: blockers.length > 0 ? 'blocked_remote_verification' : 'passed_remote_verification',\n root_policy: rootPolicy,\n input_path: inputPath,\n out_dir: outDir,\n counts: {\n rows: rows.length,\n references: references.length,\n checked: checks.length,\n blockers: blockers.length,\n by_status: byStatus,\n by_table: byTable,\n },\n blockers,\n files,\n };\n\n writeJsonArtifact(files.report, report);\n writeJsonLinesArtifact(files.checks, checks);\n writeJsonLinesArtifact(files.blockers, blockers);\n\n return report;\n}\n\nexport const __testInternals = {\n buildRemoteUrl,\n collectRemoteReferences,\n compareVersions,\n lookupRemoteDataset,\n normalizeRows,\n shortDescription,\n tableFromPath,\n tableFromType,\n};\n"]}
1
+ {"version":3,"file":"dataset-remote-verify.js","sourceRoot":"","sources":["../../../src/lib/dataset-remote-verify.ts"],"names":[],"mappings":"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","sourcesContent":["import crypto from 'node:crypto';\nimport path from 'node:path';\nimport { writeJsonArtifact, writeJsonLinesArtifact } from './artifacts.js';\nimport { CliError } from './errors.js';\nimport type { FetchLike } from './http.js';\nimport {\n createSupabaseDataClient,\n requireSupabaseRestRuntime,\n runSupabaseArrayQuery,\n type SupabaseDataRuntime,\n} from './supabase-client.js';\nimport { createSupabaseDataRuntime } from './supabase-session.js';\nimport {\n firstNonEmpty,\n isRecord,\n readDatasetRowsInput,\n trimToken,\n unwrapDatasetPayload,\n type JsonObject,\n} from './dataset-local.js';\n\nconst DEFAULT_TIMEOUT_MS = 10_000;\n\nexport type RemoteDatasetTable =\n | 'contacts'\n | 'flowproperties'\n | 'flows'\n | 'lciamethods'\n | 'lifecyclemodels'\n | 'processes'\n | 'sources'\n | 'unitgroups';\n\nexport type RemoteVerificationReferenceRole = 'root' | 'reference';\nexport type RemoteVerificationRootPolicy = 'existing' | 'candidate';\n\nexport type RemoteVerificationStatus =\n | 'ok'\n | 'lookup_failed'\n | 'missing_dataset'\n | 'missing_version'\n | 'unsupported_type'\n | 'version_missing'\n | 'version_outdated';\n\nexport type RemoteVerificationIssueCode =\n | RemoteVerificationStatus\n | 'owner_mismatch'\n | 'payload_mismatch'\n | 'remote_payload_missing'\n | 'state_code_mismatch';\n\nexport type RemoteDatasetReference = {\n row_index: number;\n role: RemoteVerificationReferenceRole;\n table: RemoteDatasetTable | null;\n type: string | null;\n id: string | null;\n version: string | null;\n path: string;\n short_description: string | null;\n};\n\nexport type RemoteDatasetLookupRow = {\n id: string;\n version: string | null;\n};\n\nexport type RemoteDatasetLookup = {\n exact: RemoteDatasetLookupRow | null;\n latest: RemoteDatasetLookupRow | null;\n exact_source_url: string | null;\n latest_source_url: string | null;\n};\n\nexport type RemoteDatasetPayloadLookup = {\n id: string;\n version: string | null;\n user_id: string | null;\n state_code: number | null;\n modified_at: string | null;\n payload: JsonObject | null;\n source_url: string | null;\n};\n\nexport type RemoteDatasetLookupRequest = {\n table: RemoteDatasetTable;\n id: string;\n version: string | null;\n};\n\nexport type RemoteVerificationCheck = {\n row_index: number;\n role: RemoteVerificationReferenceRole;\n table: RemoteDatasetTable | null;\n type: string | null;\n id: string | null;\n version: string | null;\n path: string;\n short_description: string | null;\n status: RemoteVerificationIssueCode;\n exact_version: string | null;\n latest_version: string | null;\n exact_source_url: string | null;\n latest_source_url: string | null;\n message: string;\n remote_user_id?: string | null;\n remote_state_code?: number | null;\n remote_modified_at?: string | null;\n local_payload_sha256?: string | null;\n remote_payload_sha256?: string | null;\n};\n\nexport type RemoteVerificationBlocker = {\n code: RemoteVerificationIssueCode;\n severity: 'error';\n message: string;\n row_index: number;\n role: RemoteVerificationReferenceRole;\n table: RemoteDatasetTable | null;\n id: string | null;\n version: string | null;\n latest_version: string | null;\n path: string;\n};\n\nexport type DatasetRemoteVerificationReport = {\n schema_version: 1;\n generated_at_utc: string;\n status: 'passed_remote_verification' | 'blocked_remote_verification';\n root_policy: RemoteVerificationRootPolicy;\n input_path: string;\n out_dir: string;\n counts: {\n rows: number;\n references: number;\n checked: number;\n blockers: number;\n root_readback_checks?: number;\n root_payload_mismatches?: number;\n by_status: Record<string, number>;\n by_table: Record<RemoteDatasetTable, number>;\n };\n blockers: RemoteVerificationBlocker[];\n files: {\n report: string;\n checks: string;\n blockers: string;\n };\n};\n\nexport type RunDatasetRemoteVerifyOptions = {\n inputPath: string;\n outDir: string;\n rootPolicy?: RemoteVerificationRootPolicy;\n compareRootPayload?: boolean;\n targetUserId?: string | null;\n stateCode?: number | null;\n rawInput?: unknown;\n env?: NodeJS.ProcessEnv;\n fetchImpl?: FetchLike;\n timeoutMs?: number;\n now?: Date;\n lookupDatasetImpl?: (request: RemoteDatasetLookupRequest) => Promise<RemoteDatasetLookup>;\n lookupRootPayloadImpl?: (\n request: RemoteDatasetLookupRequest,\n ) => Promise<RemoteDatasetPayloadLookup | null>;\n};\n\ntype RootDatasetDescriptor = {\n wrapper: string;\n table: RemoteDatasetTable;\n type: string;\n information_key: string;\n};\n\nconst ROOT_DATASET_DESCRIPTORS: RootDatasetDescriptor[] = [\n {\n wrapper: 'processDataSet',\n table: 'processes',\n type: 'process data set',\n information_key: 'processInformation',\n },\n {\n wrapper: 'flowDataSet',\n table: 'flows',\n type: 'flow data set',\n information_key: 'flowInformation',\n },\n {\n wrapper: 'lifeCycleModelDataSet',\n table: 'lifecyclemodels',\n type: 'life cycle model data set',\n information_key: 'lifeCycleModelInformation',\n },\n {\n wrapper: 'sourceDataSet',\n table: 'sources',\n type: 'source data set',\n information_key: 'sourceInformation',\n },\n {\n wrapper: 'contactDataSet',\n table: 'contacts',\n type: 'contact data set',\n information_key: 'contactInformation',\n },\n {\n wrapper: 'flowPropertyDataSet',\n table: 'flowproperties',\n type: 'flow property data set',\n information_key: 'flowPropertiesInformation',\n },\n {\n wrapper: 'unitGroupDataSet',\n table: 'unitgroups',\n type: 'unit group data set',\n information_key: 'unitGroupInformation',\n },\n {\n wrapper: 'LCIAMethodDataSet',\n table: 'lciamethods',\n type: 'LCIA method data set',\n information_key: 'LCIAMethodInformation',\n },\n];\n\nconst TABLE_ALIASES = new Map<string, RemoteDatasetTable>([\n ['contact', 'contacts'],\n ['contact data set', 'contacts'],\n ['contacts', 'contacts'],\n ['flow', 'flows'],\n ['flow data set', 'flows'],\n ['flows', 'flows'],\n ['flow property', 'flowproperties'],\n ['flow property data set', 'flowproperties'],\n ['flowproperties', 'flowproperties'],\n ['lcia method', 'lciamethods'],\n ['lcia method data set', 'lciamethods'],\n ['lciamethod', 'lciamethods'],\n ['lciamethods', 'lciamethods'],\n ['life cycle model', 'lifecyclemodels'],\n ['life cycle model data set', 'lifecyclemodels'],\n ['lifecycle model', 'lifecyclemodels'],\n ['lifecycle model data set', 'lifecyclemodels'],\n ['lifecyclemodel', 'lifecyclemodels'],\n ['lifecyclemodels', 'lifecyclemodels'],\n ['process', 'processes'],\n ['process data set', 'processes'],\n ['processes', 'processes'],\n ['source', 'sources'],\n ['source data set', 'sources'],\n ['sources', 'sources'],\n ['unit group', 'unitgroups'],\n ['unit group data set', 'unitgroups'],\n ['unitgroup', 'unitgroups'],\n ['unitgroups', 'unitgroups'],\n]);\n\nconst PATH_TABLE_HINTS: Array<[RegExp, RemoteDatasetTable]> = [\n [/referenceToFlowDataSet$/u, 'flows'],\n [/referenceToProcess$/u, 'processes'],\n [/referenceToResultingProcess$/u, 'processes'],\n [/referenceToFlowPropertyDataSet$/u, 'flowproperties'],\n [/referenceToReferenceUnitGroup$/u, 'unitgroups'],\n [/referenceToLCIAMethodDataSet$/u, 'lciamethods'],\n [/referenceToDataSource$/u, 'sources'],\n [/referenceToExternalDocumentation$/u, 'sources'],\n [/referenceToDataSetFormat$/u, 'sources'],\n [/referenceToComplianceSystem$/u, 'sources'],\n [/referenceToDataSetUseApproval$/u, 'sources'],\n [/referenceToContact$/u, 'contacts'],\n [/referenceToCommissioner$/u, 'contacts'],\n [/referenceToPersonOrEntity/u, 'contacts'],\n [/referenceToNameOfReviewerAndInstitution$/u, 'contacts'],\n];\n\nconst EMPTY_STATUS_COUNTS: Record<string, number> = {\n ok: 0,\n lookup_failed: 0,\n missing_dataset: 0,\n missing_version: 0,\n owner_mismatch: 0,\n payload_mismatch: 0,\n remote_payload_missing: 0,\n state_code_mismatch: 0,\n unsupported_type: 0,\n version_missing: 0,\n version_outdated: 0,\n};\n\nconst EMPTY_TABLE_COUNTS: Record<RemoteDatasetTable, number> = {\n contacts: 0,\n flowproperties: 0,\n flows: 0,\n lciamethods: 0,\n lifecyclemodels: 0,\n processes: 0,\n sources: 0,\n unitgroups: 0,\n};\n\nfunction requireNonEmpty(value: string, label: string, code: string): string {\n const normalized = value.trim();\n if (!normalized) {\n throw new CliError(`Missing required ${label} value.`, {\n code,\n exitCode: 2,\n });\n }\n return normalized;\n}\n\nfunction nowIso(now: Date = new Date()): string {\n return now.toISOString();\n}\n\nfunction textValue(value: unknown): string | null {\n if (typeof value === 'number' && Number.isFinite(value)) {\n return String(value);\n }\n return trimToken(value);\n}\n\nfunction normalizeTableToken(value: string | null): string | null {\n return value ? value.trim().replace(/\\s+/gu, ' ').toLowerCase() : null;\n}\n\nfunction tableFromType(value: string | null): RemoteDatasetTable | null {\n const normalized = normalizeTableToken(value);\n return normalized ? (TABLE_ALIASES.get(normalized) ?? null) : null;\n}\n\nfunction tableFromPath(pathExpression: string): RemoteDatasetTable | null {\n const pathEnd = pathExpression.split('/').filter(Boolean).at(-1) ?? '';\n return PATH_TABLE_HINTS.find(([pattern]) => pattern.test(pathEnd))?.[1] ?? null;\n}\n\nfunction shortDescription(value: unknown): string | null {\n if (typeof value === 'string') {\n return textValue(value);\n }\n if (Array.isArray(value)) {\n for (const entry of value) {\n const text = shortDescription(entry);\n if (text) {\n return text;\n }\n }\n return null;\n }\n if (isRecord(value)) {\n return textValue(value['#text'] ?? value.text ?? value.value);\n }\n return null;\n}\n\nfunction pointerPath(basePath: string, segment: string | number): string {\n const encoded = String(segment).replace(/~/gu, '~0').replace(/\\//gu, '~1');\n return `${basePath}/${encoded}`;\n}\n\nfunction unescapePointerSegment(segment: string): string {\n return segment.replace(/~1/gu, '/').replace(/~0/gu, '~');\n}\n\nfunction isFoundryTracePath(pathExpression: string): boolean {\n const segments = pathExpression.split('/').filter(Boolean).map(unescapePointerSegment);\n return (\n segments.includes('common:other') &&\n segments.some(\n (segment) =>\n segment.startsWith('tiangongfoundry:') && segment.toLowerCase().includes('trace'),\n )\n );\n}\n\nfunction rootOf(\n payload: JsonObject,\n): { descriptor: RootDatasetDescriptor; root: JsonObject } | null {\n for (const descriptor of ROOT_DATASET_DESCRIPTORS) {\n if (isRecord(payload[descriptor.wrapper])) {\n return { descriptor, root: payload[descriptor.wrapper] as JsonObject };\n }\n }\n return null;\n}\n\nfunction rootIdentity(row: JsonObject, payload: JsonObject): RemoteDatasetReference | null {\n const root = rootOf(payload);\n if (!root) {\n return null;\n }\n const information = isRecord(root.root[root.descriptor.information_key])\n ? (root.root[root.descriptor.information_key] as JsonObject)\n : {};\n const dataSetInformation = isRecord(information.dataSetInformation)\n ? information.dataSetInformation\n : {};\n const administrativeInformation = isRecord(root.root.administrativeInformation)\n ? root.root.administrativeInformation\n : {};\n const publicationAndOwnership = isRecord(administrativeInformation.publicationAndOwnership)\n ? administrativeInformation.publicationAndOwnership\n : {};\n\n return {\n row_index: -1,\n role: 'root',\n table: root.descriptor.table,\n type: root.descriptor.type,\n id: firstNonEmpty(row.id, row.uuid, dataSetInformation['common:UUID']),\n version: firstNonEmpty(row.version, publicationAndOwnership['common:dataSetVersion']),\n path: `/${root.descriptor.wrapper}`,\n short_description: shortDescription(dataSetInformation.name ?? dataSetInformation.shortName),\n };\n}\n\nfunction referenceFromRecord(\n rowIndex: number,\n value: JsonObject,\n pathExpression: string,\n): RemoteDatasetReference | null {\n const id = firstNonEmpty(value['@refObjectId'], value.refObjectId, value.id);\n if (!id) {\n return null;\n }\n const type = firstNonEmpty(value['@type'], value.type);\n const table = tableFromType(type) ?? tableFromPath(pathExpression);\n return {\n row_index: rowIndex,\n role: 'reference',\n table,\n type,\n id,\n version: firstNonEmpty(value['@version'], value.version),\n path: pathExpression,\n short_description: shortDescription(value['common:shortDescription']),\n };\n}\n\nfunction flowReferenceFromRecord(\n rowIndex: number,\n value: JsonObject,\n pathExpression: string,\n): RemoteDatasetReference | null {\n const id = firstNonEmpty(value['@flowUUID']);\n return id\n ? {\n row_index: rowIndex,\n role: 'reference',\n table: 'flows',\n type: 'flow data set',\n id,\n version: firstNonEmpty(value['@version'], value.version),\n path: pointerPath(pathExpression, '@flowUUID'),\n short_description: null,\n }\n : null;\n}\n\nfunction collectReferencesFromValue(\n rowIndex: number,\n value: unknown,\n pathExpression: string,\n references: RemoteDatasetReference[],\n): void {\n if (isFoundryTracePath(pathExpression)) {\n return;\n }\n\n if (Array.isArray(value)) {\n value.forEach((entry, index) =>\n collectReferencesFromValue(rowIndex, entry, pointerPath(pathExpression, index), references),\n );\n return;\n }\n\n if (!isRecord(value)) {\n return;\n }\n\n const ref = referenceFromRecord(rowIndex, value, pathExpression);\n if (ref) {\n references.push(ref);\n }\n const flowRef = flowReferenceFromRecord(rowIndex, value, pathExpression);\n if (flowRef) {\n references.push(flowRef);\n }\n for (const [key, nested] of Object.entries(value)) {\n collectReferencesFromValue(rowIndex, nested, pointerPath(pathExpression, key), references);\n }\n}\n\nexport function collectRemoteReferences(rows: JsonObject[]): RemoteDatasetReference[] {\n const references: RemoteDatasetReference[] = [];\n rows.forEach((row, index) => {\n const payload = unwrapDatasetPayload(row);\n const root = rootIdentity(row, payload);\n if (root) {\n references.push({ ...root, row_index: index });\n }\n collectReferencesFromValue(index, payload, '', references);\n });\n return references;\n}\n\nfunction compareVersions(left: string | null, right: string | null): number {\n if (!left && !right) {\n return 0;\n }\n if (!left) {\n return -1;\n }\n if (!right) {\n return 1;\n }\n const leftParts = left.split(/[._-]/u);\n const rightParts = right.split(/[._-]/u);\n const length = Math.max(leftParts.length, rightParts.length);\n for (let index = 0; index < length; index += 1) {\n const leftPart = leftParts[index] ?? '0';\n const rightPart = rightParts[index] ?? '0';\n const leftNumber = Number(leftPart);\n const rightNumber = Number(rightPart);\n if (Number.isFinite(leftNumber) && Number.isFinite(rightNumber)) {\n if (leftNumber !== rightNumber) {\n return leftNumber > rightNumber ? 1 : -1;\n }\n } else {\n const compared = leftPart.localeCompare(rightPart);\n if (compared !== 0) {\n return compared > 0 ? 1 : -1;\n }\n }\n }\n return 0;\n}\n\nfunction buildRemoteUrl(\n restBaseUrl: string,\n table: RemoteDatasetTable,\n id: string,\n version: string | null,\n): string {\n const url = new URL(`${restBaseUrl.replace(/\\/+$/u, '')}/${table}`);\n url.searchParams.set('id', `eq.${id}`);\n if (version) {\n url.searchParams.set('version', `eq.${version}`);\n } else {\n url.searchParams.set('order', 'version.desc');\n url.searchParams.set('limit', '1');\n }\n return url.toString();\n}\n\nfunction normalizeRows(value: unknown): RemoteDatasetLookupRow[] {\n return Array.isArray(value)\n ? value\n .filter(isRecord)\n .map((row) => ({\n id: firstNonEmpty(row.id) ?? '',\n version: firstNonEmpty(row.version),\n }))\n .filter((row) => Boolean(row.id))\n : [];\n}\n\nfunction stableJson(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map(stableJson);\n }\n if (isRecord(value)) {\n return Object.fromEntries(\n Object.keys(value)\n .sort()\n .map((key) => [key, stableJson(value[key])]),\n );\n }\n return value;\n}\n\nfunction sha256Json(value: unknown): string {\n return crypto\n .createHash('sha256')\n .update(JSON.stringify(stableJson(value)))\n .digest('hex');\n}\n\nfunction buildRemotePayloadUrl(\n restBaseUrl: string,\n table: RemoteDatasetTable,\n id: string,\n version: string,\n): string {\n const url = new URL(`${restBaseUrl.replace(/\\/+$/u, '')}/${table}`);\n url.searchParams.set('select', 'id,version,user_id,state_code,modified_at,json,json_ordered');\n url.searchParams.set('id', `eq.${id}`);\n url.searchParams.set('version', `eq.${version}`);\n return url.toString();\n}\n\nfunction normalizePayloadRow(value: unknown): RemoteDatasetPayloadLookup | null {\n if (!isRecord(value)) {\n return null;\n }\n const payload = isRecord(value.json_ordered)\n ? value.json_ordered\n : isRecord(value.json)\n ? value.json\n : null;\n return {\n id: firstNonEmpty(value.id) ?? '',\n version: firstNonEmpty(value.version),\n user_id: firstNonEmpty(value.user_id),\n state_code: typeof value.state_code === 'number' ? value.state_code : null,\n modified_at: firstNonEmpty(value.modified_at),\n payload: payload as JsonObject | null,\n source_url: null,\n };\n}\n\nexport async function lookupRemoteDataset(options: {\n runtime: SupabaseDataRuntime;\n fetchImpl: FetchLike;\n timeoutMs: number;\n request: RemoteDatasetLookupRequest;\n}): Promise<RemoteDatasetLookup> {\n const { client, restBaseUrl } = createSupabaseDataClient(\n options.runtime,\n options.fetchImpl,\n options.timeoutMs,\n );\n const exactSourceUrl = options.request.version\n ? buildRemoteUrl(\n restBaseUrl,\n options.request.table,\n options.request.id,\n options.request.version,\n )\n : null;\n const latestSourceUrl = buildRemoteUrl(\n restBaseUrl,\n options.request.table,\n options.request.id,\n null,\n );\n const exactRows = options.request.version\n ? normalizeRows(\n await runSupabaseArrayQuery(\n client\n .from(options.request.table)\n .select('id,version')\n .eq('id', options.request.id)\n .eq('version', options.request.version),\n exactSourceUrl as string,\n ),\n )\n : [];\n const latestRows = normalizeRows(\n await runSupabaseArrayQuery(\n client\n .from(options.request.table)\n .select('id,version')\n .eq('id', options.request.id)\n .order('version', { ascending: false })\n .limit(1),\n latestSourceUrl,\n ),\n );\n return {\n exact: exactRows[0] ?? null,\n latest: latestRows[0] ?? null,\n exact_source_url: exactSourceUrl,\n latest_source_url: latestSourceUrl,\n };\n}\n\nasync function lookupRemoteDatasetPayload(options: {\n runtime: SupabaseDataRuntime;\n fetchImpl: FetchLike;\n timeoutMs: number;\n request: RemoteDatasetLookupRequest;\n}): Promise<RemoteDatasetPayloadLookup | null> {\n if (!options.request.version) {\n return null;\n }\n const { client, restBaseUrl } = createSupabaseDataClient(\n options.runtime,\n options.fetchImpl,\n options.timeoutMs,\n );\n const sourceUrl = buildRemotePayloadUrl(\n restBaseUrl,\n options.request.table,\n options.request.id,\n options.request.version,\n );\n const rows = await runSupabaseArrayQuery(\n client\n .from(options.request.table)\n .select('id,version,user_id,state_code,modified_at,json,json_ordered')\n .eq('id', options.request.id)\n .eq('version', options.request.version),\n sourceUrl,\n );\n const payloadRow = normalizePayloadRow(Array.isArray(rows) ? rows[0] : null);\n return payloadRow ? { ...payloadRow, source_url: sourceUrl } : null;\n}\n\nfunction checkMessage(reference: RemoteDatasetReference, status: RemoteVerificationStatus): string {\n const label = `${reference.table ?? reference.type ?? 'unknown'}:${reference.id ?? '-'}@${\n reference.version ?? '-'\n }`;\n switch (status) {\n case 'ok':\n return `Remote dataset reference is resolvable: ${label}.`;\n case 'lookup_failed':\n return `Remote lookup failed for dataset reference: ${label}.`;\n case 'missing_dataset':\n return `Remote dataset id does not exist: ${label}.`;\n case 'missing_version':\n return `Remote dataset id exists, but the requested version does not exist: ${label}.`;\n case 'unsupported_type':\n return `Dataset reference type cannot be mapped to a TianGong table: ${label}.`;\n case 'version_missing':\n return `Dataset reference is missing @version and cannot pass publish-readiness verification: ${label}.`;\n case 'version_outdated':\n return `Requested dataset version is lower than the latest published version: ${label}.`;\n }\n}\n\nfunction classifyCheck(\n reference: RemoteDatasetReference,\n lookup: RemoteDatasetLookup | null,\n lookupFailed: boolean,\n rootPolicy: RemoteVerificationRootPolicy,\n): RemoteVerificationCheck {\n let status: RemoteVerificationStatus = 'ok';\n if (!reference.table || !reference.id) {\n status = 'unsupported_type';\n } else if (lookupFailed) {\n status = 'lookup_failed';\n } else if (!reference.version) {\n status = 'version_missing';\n } else if (reference.role === 'root' && rootPolicy === 'candidate') {\n if (!lookup?.latest) {\n status = 'ok';\n } else if (!lookup.exact) {\n status =\n compareVersions(reference.version, lookup.latest.version) > 0\n ? 'ok'\n : compareVersions(lookup.latest.version, reference.version) > 0\n ? 'version_outdated'\n : 'missing_version';\n } else if (compareVersions(lookup.latest.version, reference.version) > 0) {\n status = 'version_outdated';\n }\n } else if (!lookup?.latest) {\n status = 'missing_dataset';\n } else if (!lookup.exact) {\n status = 'missing_version';\n } else if (compareVersions(lookup.latest.version, reference.version) > 0) {\n status = 'version_outdated';\n }\n return {\n ...reference,\n status,\n exact_version: lookup?.exact?.version ?? null,\n latest_version: lookup?.latest?.version ?? null,\n exact_source_url: lookup?.exact_source_url ?? null,\n latest_source_url: lookup?.latest_source_url ?? null,\n message: checkMessage(reference, status),\n };\n}\n\nfunction blockerFromCheck(check: RemoteVerificationCheck): RemoteVerificationBlocker | null {\n return check.status === 'ok'\n ? null\n : {\n code: check.status,\n severity: 'error',\n message: check.message,\n row_index: check.row_index,\n role: check.role,\n table: check.table,\n id: check.id,\n version: check.version,\n latest_version: check.latest_version,\n path: check.path,\n };\n}\n\nfunction makeRootReadbackCheck(\n reference: RemoteDatasetReference,\n status: RemoteVerificationIssueCode,\n message: string,\n remote: RemoteDatasetPayloadLookup | null,\n hashes: {\n local: string | null;\n remote: string | null;\n } = { local: null, remote: null },\n): RemoteVerificationCheck {\n return {\n ...reference,\n path: `${reference.path}#readback`,\n status,\n exact_version: remote?.version ?? null,\n latest_version: null,\n exact_source_url: remote?.source_url ?? null,\n latest_source_url: null,\n message,\n remote_user_id: remote?.user_id ?? null,\n remote_state_code: remote?.state_code ?? null,\n remote_modified_at: remote?.modified_at ?? null,\n local_payload_sha256: hashes.local,\n remote_payload_sha256: hashes.remote,\n };\n}\n\nfunction rootReadbackChecks(options: {\n reference: RemoteDatasetReference;\n localPayload: JsonObject;\n remote: RemoteDatasetPayloadLookup | null;\n compareRootPayload: boolean;\n targetUserId: string | null;\n stateCode: number | null;\n}): RemoteVerificationCheck[] {\n const { reference, localPayload, remote, compareRootPayload, targetUserId, stateCode } = options;\n if (!remote) {\n return [\n makeRootReadbackCheck(\n reference,\n 'missing_dataset',\n `Remote root payload was not found for ${reference.table}:${reference.id}@${reference.version}.`,\n null,\n ),\n ];\n }\n\n const checks: RemoteVerificationCheck[] = [];\n if (targetUserId && remote.user_id !== targetUserId) {\n checks.push(\n makeRootReadbackCheck(\n reference,\n 'owner_mismatch',\n `Remote root owner ${remote.user_id ?? '<missing>'} does not match target user ${targetUserId}.`,\n remote,\n ),\n );\n }\n if (stateCode !== null && remote.state_code !== stateCode) {\n checks.push(\n makeRootReadbackCheck(\n reference,\n 'state_code_mismatch',\n `Remote root state_code ${remote.state_code ?? '<missing>'} does not match required state_code ${stateCode}.`,\n remote,\n ),\n );\n }\n\n let hashes: { local: string | null; remote: string | null } = { local: null, remote: null };\n if (compareRootPayload) {\n if (!remote.payload) {\n checks.push(\n makeRootReadbackCheck(\n reference,\n 'remote_payload_missing',\n `Remote root payload is missing for ${reference.table}:${reference.id}@${reference.version}.`,\n remote,\n ),\n );\n } else {\n hashes = {\n local: sha256Json(localPayload),\n remote: sha256Json(remote.payload),\n };\n if (hashes.local !== hashes.remote) {\n checks.push(\n makeRootReadbackCheck(\n reference,\n 'payload_mismatch',\n `Remote root payload hash does not match local row for ${reference.table}:${reference.id}@${reference.version}.`,\n remote,\n hashes,\n ),\n );\n }\n }\n }\n\n if (checks.length > 0) {\n return checks;\n }\n return [\n makeRootReadbackCheck(\n reference,\n 'ok',\n `Remote root readback matches required owner, state, and payload checks for ${reference.table}:${reference.id}@${reference.version}.`,\n remote,\n hashes,\n ),\n ];\n}\n\nfunction buildFiles(outDir: string): DatasetRemoteVerificationReport['files'] {\n const resolved = path.resolve(outDir);\n return {\n report: path.join(resolved, 'outputs', 'remote-verification-report.json'),\n checks: path.join(resolved, 'outputs', 'remote-verification.jsonl'),\n blockers: path.join(resolved, 'outputs', 'blockers.jsonl'),\n };\n}\n\nfunction uniqueLookupKey(reference: RemoteDatasetReference): string | null {\n return reference.table && reference.id\n ? `${reference.table}:${reference.id}:${reference.version ?? ''}`\n : null;\n}\n\nexport async function runDatasetRemoteVerify(\n options: RunDatasetRemoteVerifyOptions,\n): Promise<DatasetRemoteVerificationReport> {\n const inputPath = path.resolve(\n requireNonEmpty(options.inputPath, '--input', 'DATASET_REMOTE_VERIFY_INPUT_REQUIRED'),\n );\n const outDir = path.resolve(\n requireNonEmpty(options.outDir, '--out-dir', 'DATASET_REMOTE_VERIFY_OUT_DIR_REQUIRED'),\n );\n const rows = readDatasetRowsInput(inputPath, options.rawInput);\n const references = collectRemoteReferences(rows);\n const rootPolicy = options.rootPolicy ?? 'existing';\n const compareRootPayload = options.compareRootPayload === true;\n const targetUserId = trimToken(options.targetUserId);\n const stateCode = options.stateCode ?? null;\n const needsRootReadback = compareRootPayload || Boolean(targetUserId) || stateCode !== null;\n const fetchImpl = options.fetchImpl ?? (fetch as FetchLike);\n const timeoutMs = options.timeoutMs ?? DEFAULT_TIMEOUT_MS;\n const runtime =\n options.lookupDatasetImpl === undefined\n ? createSupabaseDataRuntime({\n runtime: requireSupabaseRestRuntime(options.env ?? process.env),\n fetchImpl,\n timeoutMs,\n now: options.now,\n })\n : null;\n const lookupImpl =\n options.lookupDatasetImpl ??\n ((request: RemoteDatasetLookupRequest) =>\n lookupRemoteDataset({\n runtime: runtime as SupabaseDataRuntime,\n fetchImpl,\n timeoutMs,\n request,\n }));\n const rootPayloadLookupImpl =\n options.lookupRootPayloadImpl ??\n (runtime\n ? (request: RemoteDatasetLookupRequest) =>\n lookupRemoteDatasetPayload({\n runtime: runtime as SupabaseDataRuntime,\n fetchImpl,\n timeoutMs,\n request,\n })\n : null);\n const lookupCache = new Map<string, Promise<RemoteDatasetLookup>>();\n const checks: RemoteVerificationCheck[] = [];\n\n for (const reference of references) {\n let lookup: RemoteDatasetLookup | null = null;\n let lookupFailed = false;\n const lookupKey = uniqueLookupKey(reference);\n if (reference.table && reference.id && lookupKey) {\n try {\n if (!lookupCache.has(lookupKey)) {\n lookupCache.set(\n lookupKey,\n lookupImpl({\n table: reference.table,\n id: reference.id,\n version: reference.version,\n }),\n );\n }\n lookup = await lookupCache.get(lookupKey)!;\n } catch {\n lookupFailed = true;\n }\n }\n checks.push(classifyCheck(reference, lookup, lookupFailed, rootPolicy));\n }\n\n if (needsRootReadback) {\n const rootChecks = checks.filter(\n (check) =>\n check.role === 'root' &&\n check.status === 'ok' &&\n check.table &&\n check.id &&\n (compareRootPayload || rootPolicy !== 'candidate' || Boolean(check.exact_version)),\n );\n for (const check of rootChecks) {\n const localPayload = unwrapDatasetPayload(rows[check.row_index]);\n let remotePayload: RemoteDatasetPayloadLookup | null;\n try {\n if (!rootPayloadLookupImpl) {\n throw new Error('root payload lookup is not available');\n }\n remotePayload = await rootPayloadLookupImpl({\n table: check.table as RemoteDatasetTable,\n id: check.id as string,\n version: check.version,\n });\n } catch {\n checks.push(\n makeRootReadbackCheck(\n check,\n 'lookup_failed',\n `Remote root payload lookup failed for ${check.table}:${check.id}@${check.version}.`,\n null,\n ),\n );\n continue;\n }\n checks.push(\n ...rootReadbackChecks({\n reference: check,\n localPayload,\n remote: remotePayload,\n compareRootPayload,\n targetUserId,\n stateCode,\n }),\n );\n }\n }\n\n const blockers = checks\n .map(blockerFromCheck)\n .filter((blocker): blocker is RemoteVerificationBlocker => blocker !== null);\n const byStatus = { ...EMPTY_STATUS_COUNTS };\n const byTable = { ...EMPTY_TABLE_COUNTS };\n checks.forEach((check) => {\n byStatus[check.status] ??= 0;\n byStatus[check.status] += 1;\n if (check.table) {\n byTable[check.table] += 1;\n }\n });\n const rootReadbackChecksCount = checks.filter((check) => check.path.endsWith('#readback')).length;\n const rootPayloadMismatches = checks.filter(\n (check) => check.status === 'payload_mismatch',\n ).length;\n\n const files = buildFiles(outDir);\n const report: DatasetRemoteVerificationReport = {\n schema_version: 1,\n generated_at_utc: nowIso(options.now),\n status: blockers.length > 0 ? 'blocked_remote_verification' : 'passed_remote_verification',\n root_policy: rootPolicy,\n input_path: inputPath,\n out_dir: outDir,\n counts: {\n rows: rows.length,\n references: references.length,\n checked: checks.length,\n blockers: blockers.length,\n ...(needsRootReadback ? { root_readback_checks: rootReadbackChecksCount } : {}),\n ...(needsRootReadback ? { root_payload_mismatches: rootPayloadMismatches } : {}),\n by_status: byStatus,\n by_table: byTable,\n },\n blockers,\n files,\n };\n\n writeJsonArtifact(files.report, report);\n writeJsonLinesArtifact(files.checks, checks);\n writeJsonLinesArtifact(files.blockers, blockers);\n\n return report;\n}\n\nexport const __testInternals = {\n buildRemotePayloadUrl,\n buildRemoteUrl,\n collectRemoteReferences,\n compareVersions,\n isFoundryTracePath,\n lookupRemoteDatasetPayload,\n lookupRemoteDataset,\n makeRootReadbackCheck,\n normalizePayloadRow,\n normalizeRows,\n rootReadbackChecks,\n sha256Json,\n shortDescription,\n tableFromPath,\n tableFromType,\n};\n"]}